# Changelog for “iteration_utilities”¶

## Version 0.6.1 (2017-04-15)¶

• The __next__ or next method of the processed iterator is not cached in the iteration_utilities iterators anymore. This correctly handles the (rare) case that this method is reassigned or deleted.

## Version 0.6.0 (2017-04-08)¶

• Renamed func parameter name of partition to pred.
• Renamed function parameter name of tabulate to func.
• The key attribute of ItemIdxKey throws an AttributeError if it is not set and an attempt is made to get or delete it.
• Added several attributes to classes.
• Fixed a Bug in deepflatten when isinstance fails for the classes given as types or ignore parameter.
• Changed internal package structure (shouldn’t affect end-users that imported everything from iteration_utilities directly).
• improved performance of all_isinstance and any_isinstance.
• improved performance of replicate.
• replicate now throws an exception if the times argument is smaller or equal to 1.
• corrected handling of exceptions and overflow in __length_hint__ methods.

## Version 0.5.2 (2017-03-30)¶

• fix release (again).

## Version 0.5.1 (2017-03-30)¶

• fixed major mistake that made 0.5.0 unusable. (%R formatter isn’t allowed in PyErr_Format).

## Version 0.5.0 (2017-03-30)¶

• minor speedup for next(merge).
• removed unused key parameter from combinations_from_relations.
• replaced Iterable.as_string parameter seperaror (sic!) by seperator.
• included signature for __reduce__, __setstate__ and __length_hint__ methods.
• fixed Seen.contains_add method signature.
• fixed potential segfault in ItemIdxKey.__repr__.
• removed unnecessary __setstate__ method for ItemIdxKey.
• various __setstate__ and __reduce__ methods were changed so they can’t used to cause segmentation faults, SystemError or blatantly wrong behaviour. However, serializing or copying such an instance can significantly slower as a result of this change. Unpickling these instances from previous versions could be impossible and copy.copy is not suported (and probably won’t be ever because itertools.tee interacts with __copy__ methods). Affected iterators: chained, deepflatten, duplicates, grouper, intersperse, merge, roundrobin, sideeffects, split, successive, unique_everseen, unique_justseen.
• added __repr__ method for chained, complement, constant, flip, nth and packed.
• fixed a bug with partial when the function kept the arguments and a call only provided exactly the number of arguments as there are placeholders in the partial.
• Applying flip on another flip instance now simply returns the original function.
• chained now unwraps (if possible) other chained instances when creating a new instance. This is only done if this won’t change the current behaviour.

## Version 0.4.0 (2017-03-20)¶

• Seen and ItemIdxKey can detect recursive objects in their repr.
• The representation for Seen and ItemIdxKey now uses the classname even for subclasses.
• added partial callback class, which is essentially functools.partial but also allows positional placeholders.
• several functions now interpret None as if that argument for the function wasn’t given:
• key argument for minmax, merge, argmin and argmax.
• reduce argument for groupedby.
• all arguments for Seen.__new__.

## Version 0.3.0 (2017-03-09)¶

• implemented __length_hint__ method for clamp. However sensible results (!= 0) are only possible if remove=False or both low and high were not set.
• fixed SystemError in several functions when accessing the next item of the iterable resulted in an Exception different from StopIteration.
• added starfilter iterator.
• added packed callback class.
• fixed a segfault in complement.__call__ method when the function raised an Exception.
• fixed a segfault in partition when bool(item) raised an Exception.
• included a missing ValueError in split when two of the keep* parameters are True. The case where all three were given already raised the correct exception.
• clamp now interprets low=None or high=None as if the corresponding value wasn’t given. Before it tried to compare the items with None.

## Version 0.2.1 (2017-03-01)¶

• fixed segfault in nth when retpred=True.

## Version 0.2.0 (2017-02-27)¶

• added remove parameter to clamp.
• made deepflatten string-aware. For other recusive-iterable classes a RecursionException (or RuntimeException on python < 3.5) is raised instead of freezing.

## Version 0.1.0 (2017-01-25)¶

• initial release