Release Notes: This release fixes several bugs in milestones(), and makes logging more verbose. Converters can be compared for equality now. Converter.revert() no longer uses the Container.deliver() method to return items in order for them not being counted as delivered. Converter.draw() no longer checks how many units have been delivered, but how many would be delivered in the next step, and will refuse to draw when this would exceed Converter.max_units. Simulation.save_dot() now groups equivalent converters to a single graph node.
Release Notes: This release adds STDERR_FORMATTER for STDERR_HANDLER for more distinguishable output to STDERR. It has more verbose logging. Converter.set_temporary_steps() now applies the change at once, changing Converter.countdown. Converter.set_temporary_steps() will no longer change any values if a temporary change is already active, and returns False instead. Converter.process() now restores Converter.countdown when the temporary countdown has passed. Simulation.__repr__() also includes all containers and their states. There is an updated doctest example in the README.
Release Notes: This release adds Milestone.converters, uses current_milestone.converters in milestones(), adds Converter.set_temporary_steps(), makes converter.process() and Converter.deliver() temporarily change Converter.steps, adds a doctest for temporarily changing the step value of a Converter to README, and makes minor changes.
Release Notes: This release adds Container.units_delivered, which counts the total number of units delivered to a Container. It changed Milestone.percent() to use Container.units_delivered instead of Container.stock. It adds Converter.max_units and Converter.units_delivered. Converter.draw() will now check if Converter.units_delivered has reached Converter.max_units before drawing resources. This release adds Converter.set_max_units(). It changes doctests in the README accordingly. Minor changes and additions.
Release Notes: This release removes step() from Converter and replaces it with draw(), process(), and deliver() ,which are called by Simulation.step(). The new methods return True if the Converter's countdown permitted the action, False otherwise.
Release Notes: Stepsim is more deterministic now: milestone calculations will yield the same results for identical input, no matter what the order of contributing converters. The total completeness percentage calculation for milestones was fixed. A .dot graph can now be exported from milestone calculations.
Release Notes: Converter.revert() was added, which reverts the last draw performed by the converter. It is called before a converter is removed from a simulation.
Release Notes: This release adds a function stepsim.milestones() that takes a condition string and a list of Converters and computes the milestones to be completed to meet the condition. It changes the default log level to logging.WARNING and adds the function stepsim.loglevel() to conveniently be able to set the log level. There are minor fixes.
Release Notes: The Simulation.check() was added to conveniently check a condition of the simulation using a string. Simulation.estimate_finish() was added, which creates a copy of the Simulation instance and runs it until a break condition occurs. The function be_quiet() was added to stop logging to stderr and stdout.
Release Notes: Simulation.container_list and Simulation.converter_list were replaced by dicts. Minor fixes were made.