378 lines
12 KiB
Plaintext
378 lines
12 KiB
Plaintext
Metadata-Version: 2.1
|
||
Name: simpy
|
||
Version: 4.0.1
|
||
Summary: Event discrete, process based simulation for Python.
|
||
Home-page: https://simpy.readthedocs.io
|
||
Author: Ontje Lünsdorf, Stefan Scherfke
|
||
Author-email: the_com@gmx.de, stefan@sofa-rockers.org
|
||
License: MIT License
|
||
Platform: UNKNOWN
|
||
Classifier: Development Status :: 5 - Production/Stable
|
||
Classifier: Environment :: Console
|
||
Classifier: Intended Audience :: Developers
|
||
Classifier: Intended Audience :: Education
|
||
Classifier: Intended Audience :: Science/Research
|
||
Classifier: License :: OSI Approved :: MIT License
|
||
Classifier: Natural Language :: English
|
||
Classifier: Operating System :: OS Independent
|
||
Classifier: Programming Language :: Python
|
||
Classifier: Programming Language :: Python :: 3
|
||
Classifier: Programming Language :: Python :: 3.6
|
||
Classifier: Programming Language :: Python :: 3.7
|
||
Classifier: Programming Language :: Python :: 3.8
|
||
Classifier: Programming Language :: Python :: Implementation :: CPython
|
||
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
||
Classifier: Topic :: Scientific/Engineering
|
||
Requires-Python: >=3.6
|
||
Description-Content-Type: text/x-rst
|
||
|
||
SimPy
|
||
=====
|
||
|
||
SimPy is a process-based discrete-event simulation framework based on standard
|
||
Python. Processes in SimPy are defined by Python `generator`__ functions and
|
||
can, for example, be used to model active components like customers, vehicles or
|
||
agents. SimPy also provides various types of shared resources to model
|
||
limited capacity congestion points (like servers, checkout counters and
|
||
tunnels).
|
||
|
||
Simulations can be performed “as fast as possible”, in real time (wall clock
|
||
time) or by manually stepping through the events.
|
||
|
||
Though it is theoretically possible to do continuous simulations with SimPy, it
|
||
has no features that help you with that. Also, SimPy is not really required for
|
||
simulations with a fixed step size and where your processes don’t interact with
|
||
each other or with shared resources.
|
||
|
||
The `documentation`__ contains a `tutorial`__, `several guides`__ explaining key
|
||
concepts, a number of `examples`__ and the `API reference`__.
|
||
|
||
SimPy is released under the MIT License. Simulation model developers are
|
||
encouraged to share their SimPy modeling techniques with the SimPy community.
|
||
Please post a message to the `SimPy mailing list`__.
|
||
|
||
There is an introductory talk that explains SimPy’s concepts and provides some
|
||
examples: `watch the video`__ or `get the slides`__.
|
||
|
||
__ http://docs.python.org/3/glossary.html#term-generator
|
||
__ https://simpy.readthedocs.io/en/latest/
|
||
__ https://simpy.readthedocs.io/en/latest/simpy_intro/index.html
|
||
__ https://simpy.readthedocs.io/en/latest/topical_guides/index.html
|
||
__ https://simpy.readthedocs.io/en/latest/examples/index.html
|
||
__ https://simpy.readthedocs.io/en/latest/api_reference/index.html
|
||
__ https://groups.google.com/forum/#!forum/python-simpy
|
||
__ https://www.youtube.com/watch?v=Bk91DoAEcjY
|
||
__ http://stefan.sofa-rockers.org/downloads/simpy-ep14.pdf
|
||
|
||
|
||
A Simple Example
|
||
----------------
|
||
|
||
One of SimPy's main goals is to be easy to use. Here is an example for a simple
|
||
SimPy simulation: a *clock* process that prints the current simulation time at
|
||
each step:
|
||
|
||
.. code-block:: python
|
||
|
||
>>> import simpy
|
||
>>>
|
||
>>> def clock(env, name, tick):
|
||
... while True:
|
||
... print(name, env.now)
|
||
... yield env.timeout(tick)
|
||
...
|
||
>>> env = simpy.Environment()
|
||
>>> env.process(clock(env, 'fast', 0.5))
|
||
<Process(clock) object at 0x...>
|
||
>>> env.process(clock(env, 'slow', 1))
|
||
<Process(clock) object at 0x...>
|
||
>>> env.run(until=2)
|
||
fast 0
|
||
slow 0
|
||
fast 0.5
|
||
slow 1
|
||
fast 1.0
|
||
fast 1.5
|
||
|
||
|
||
Installation
|
||
------------
|
||
|
||
SimPy requires Python >= 3.6, both CPython and PyPy3 are known to work.
|
||
|
||
You can install SimPy easily via `pip <http://pypi.python.org/pypi/pip>`_:
|
||
|
||
.. code-block:: bash
|
||
|
||
$ pip install -U simpy
|
||
|
||
You can also download and install SimPy manually:
|
||
|
||
.. code-block:: bash
|
||
|
||
$ cd where/you/put/simpy/
|
||
$ python setup.py install
|
||
|
||
To run SimPy’s test suite on your installation, execute:
|
||
|
||
.. code-block:: bash
|
||
|
||
$ py.test --pyargs simpy
|
||
|
||
|
||
Getting started
|
||
---------------
|
||
|
||
If you’ve never used SimPy before, the `SimPy tutorial`__ is a good starting
|
||
point for you. You can also try out some of the `Examples`__ shipped with
|
||
SimPy.
|
||
|
||
__ https://simpy.readthedocs.io/en/latest/simpy_intro/index.html
|
||
__ https://simpy.readthedocs.io/en/latest/examples/index.html
|
||
|
||
|
||
Documentation and Help
|
||
----------------------
|
||
|
||
You can find `a tutorial`__, `examples`__, `topical guides`__ and an `API
|
||
reference`__, as well as some information about `SimPy and its history`__ in
|
||
our `online documentation`__. For more help, contact the `SimPy mailing
|
||
list`__. SimPy users are pretty helpful. You can, of course, also dig through
|
||
the `source code`__.
|
||
|
||
If you find any bugs, please post them on our `issue tracker`__.
|
||
|
||
__ https://simpy.readthedocs.io/en/latest/simpy_intro/index.html
|
||
__ https://simpy.readthedocs.io/en/latest/examples/index.html
|
||
__ https://simpy.readthedocs.io/en/latest/topical_guides/index.html
|
||
__ https://simpy.readthedocs.io/en/latest/api_reference/index.html
|
||
__ https://simpy.readthedocs.io/en/latest/about/index.html
|
||
__ https://simpy.readthedocs.io/
|
||
__ mailto:python-simpy@googlegroups.com
|
||
__ https://gitlab.com/team-simpy/simpy/-/tree/master
|
||
__ https://gitlab.com/team-simpy/simpy/-/issues
|
||
|
||
Enjoy simulation programming in SimPy!
|
||
|
||
|
||
Ports and comparable libraries
|
||
------------------------------
|
||
|
||
Reimplementations of SimPy and libraries similar to SimPy are available in the
|
||
following languages:
|
||
|
||
- C#: `SimSharp <https://github.com/abeham/SimSharp>`_ (written by Andreas Beham)
|
||
- Julia: `SimJulia <https://github.com/BenLauwens/SimJulia.jl>`_
|
||
- R: `Simmer <https://github.com/r-simmer/simmer>`_
|
||
|
||
Changelog for SimPy
|
||
===================
|
||
|
||
4.0.0 - 2020-04-06
|
||
------------------
|
||
|
||
- [BREAKING] Python 3.6 is the minimum supported version
|
||
- [BREAKING] ``BaseEnvironment`` is eliminated. Inherit ``Environment`` instead.
|
||
- [BREAKING] ``Environment.exit()`` is eliminated. Use ``return`` instead.
|
||
- [NEW] "Porting from SimPy 3 to 4" topical guide in docs
|
||
- [NEW] SimPy is now fully type annotated (PEP-483, PEP-484)
|
||
- [NEW] PEP-517/PEP-518 compatible build system
|
||
|
||
|
||
3.0.13 - 2020-04-05
|
||
-------------------
|
||
|
||
- [FIX] Repair several minor typos in documentation
|
||
- [FIX] Possible AttributeError in Process._resume()
|
||
- [CHANGE] Use setuptools_scm in distribution build
|
||
|
||
|
||
3.0.12 - 2020-03-12
|
||
-------------------
|
||
|
||
- [FIX] Fix URLs for GitLab.com and re-release
|
||
|
||
|
||
3.0.11 - 2018-07-13
|
||
-------------------
|
||
|
||
- [FIX] Repair Environment.exit() to support PEP-479 and Python 3.7.
|
||
- [FIX] Fix wrong usage_since calculation in preemptions
|
||
- [NEW] Add "Time and Scheduling" section to docs
|
||
- [CHANGE] Move Interrupt from events to exceptions
|
||
- [FIX] Various minor documentation improvements
|
||
|
||
3.0.10 – 2016-08-26
|
||
-------------------
|
||
|
||
- [FIX] Conditions no longer leak callbacks on events (thanks to Peter Grayson).
|
||
|
||
3.0.9 – 2016-06-12
|
||
------------------
|
||
|
||
- [NEW] PriorityStore resource and performance benchmarks were implemented by
|
||
Peter Grayson.
|
||
- [FIX] Support for identifying nested preemptions was added by Cristian Klein.
|
||
|
||
3.0.8 – 2015-06-23
|
||
------------------
|
||
|
||
- [NEW] Added a monitoring guide to the documentation.
|
||
- [FIX] Improved packaging (thanks to Larissa Reis).
|
||
- [FIX] Fixed and improved various test cases.
|
||
|
||
|
||
3.0.7 – 2015-03-01
|
||
------------------
|
||
|
||
- [FIX] State of resources and requests were inconsistent before the request
|
||
has been processed (`issue #62 <https://bitbucket.org/simpy/simpy/issue/
|
||
62>`__).
|
||
- [FIX] Empty conditions were never triggered (regression in 3.0.6, `issue #63
|
||
<https://bitbucket.org/simpy/simpy/issue/63>`__).
|
||
- [FIX] ``Environment.run()`` will fail if the until event does not get
|
||
triggered (`issue #64 <https://bitbucket.org/simpy/simpy/issue/64>`__).
|
||
- [FIX] Callback modification during event processing is now prohibited (thanks
|
||
to Andreas Beham).
|
||
|
||
|
||
3.0.6 - 2015-01-30
|
||
------------------
|
||
|
||
- [NEW] Guide to SimPy resources.
|
||
- [CHANGE] Improve performance of condition events.
|
||
- [CHANGE] Improve performance of filter store (thanks to Christoph Körner).
|
||
- [CHANGE] Exception tracebacks are now more compact.
|
||
- [FIX] ``AllOf`` conditions handle already processed events correctly (`issue
|
||
#52 <https://bitbucket.org/simpy/simpy/issue/52>`__).
|
||
- [FIX] Add ``sync()`` to ``RealtimeEnvironment`` to reset its internal
|
||
wall-clock reference time (`issue #42 <https://bitbucket.org/simpy/simpy/
|
||
issue/42>`__).
|
||
- [FIX] Only send copies of exceptions into processes to prevent traceback
|
||
modifications.
|
||
- [FIX] Documentation improvements.
|
||
|
||
|
||
3.0.5 – 2014-05-14
|
||
------------------
|
||
|
||
- [CHANGE] Move interruption and all of the safety checks into a new event
|
||
(`pull request #30`__)
|
||
- [FIX] ``FilterStore.get()`` now behaves correctly (`issue #49`__).
|
||
- [FIX] Documentation improvements.
|
||
|
||
__ https://bitbucket.org/simpy/simpy/pull-request/30
|
||
__ https://bitbucket.org/simpy/simpy/issue/49
|
||
|
||
|
||
3.0.4 – 2014-04-07
|
||
------------------
|
||
|
||
- [NEW] Verified, that SimPy works on Python 3.4.
|
||
- [NEW] Guide to SimPy events
|
||
- [CHANGE] The result dictionary for condition events (``AllOF`` / ``&`` and
|
||
``AnyOf`` / ``|``) now is an *OrderedDict* sorted in the same way as the
|
||
original events list.
|
||
- [CHANGE] Condition events now also except processed events.
|
||
- [FIX] ``Resource.request()`` directly after ``Resource.release()`` no longer
|
||
successful. The process now has to wait as supposed to.
|
||
- [FIX] ``Event.fail()`` now accept all exceptions derived from
|
||
``BaseException`` instead of only ``Exception``.
|
||
|
||
|
||
3.0.3 – 2014-03-06
|
||
------------------
|
||
|
||
- [NEW] Guide to SimPy basics.
|
||
- [NEW] Guide to SimPy Environments.
|
||
- [FIX] Timing problems with real time simulation on Windows (issue #46).
|
||
- [FIX] Installation problems on Windows due to Unicode errors (issue #41).
|
||
- [FIX] Minor documentation issues.
|
||
|
||
|
||
3.0.2 – 2013-10-24
|
||
------------------
|
||
|
||
- [FIX] The default capacity for ``Container`` and ``FilterStore`` is now also
|
||
``inf``.
|
||
|
||
|
||
3.0.1 – 2013-10-24
|
||
------------------
|
||
|
||
- [FIX] Documentation and default parameters of ``Store`` didn't match. Its
|
||
default capacity is now ``inf``.
|
||
|
||
|
||
3.0 – 2013-10-11
|
||
----------------
|
||
|
||
SimPy 3 has been completely rewritten from scratch. Our main goals were to
|
||
simplify the API and code base as well as making SimPy more flexible and
|
||
extensible. Some of the most important changes are:
|
||
|
||
- Stronger focus on events. Processes yield event instances and are suspended
|
||
until the event is triggered. An example for an event is a *timeout*
|
||
(formerly known as *hold*), but even processes are now events, too (you can
|
||
wait until a process terminates).
|
||
|
||
- Events can be combined with ``&`` (and) and ``|`` (or) to create
|
||
*condition events*.
|
||
|
||
- Process can now be defined by any generator function. You don't have to
|
||
subclass ``Process`` anymore.
|
||
|
||
- No more global simulation state. Every simulation stores its state in an
|
||
*environment* which is comparable to the old ``Simulation`` class.
|
||
|
||
- Improved resource system with newly added resource types.
|
||
|
||
- Removed plotting and GUI capabilities. `Pyside`__ and `matplotlib`__ are much
|
||
better with this.
|
||
|
||
- Greatly improved test suite. Its cleaner, and the tests are shorter and more
|
||
numerous.
|
||
|
||
- Completely overhauled documentation.
|
||
|
||
There is a `guide for porting from SimPy 2 to SimPy 3`__. If you want to stick
|
||
to SimPy 2 for a while, change your requirements to ``'SimPy>=2.3,<3'``.
|
||
|
||
All in all, SimPy has become a framework for asynchronous programming based on
|
||
coroutines. It brings more than ten years of experience and scientific know-how
|
||
in the field of event-discrete simulation to the world of asynchronous
|
||
programming and should thus be a solid foundation for everything based on an
|
||
event loop.
|
||
|
||
You can find information about older versions on the `history page`__
|
||
|
||
__ http://qt-project.org/wiki/PySide
|
||
__ http://matplotlib.org/
|
||
__ https://simpy.readthedocs.io/en/latest/topical_guides/porting_from_simpy2.html
|
||
__ https://simpy.readthedocs.io/en/latest/about/history.html
|
||
|
||
Authors
|
||
=======
|
||
|
||
SimPy was originally created by Klaus G. Müller and Tony Vignaux in 2002.
|
||
|
||
In 2008, Ontje Lünsdorf and Stefan Scherfke started to contribute to SimPy and
|
||
became active maintainers in 2011.
|
||
|
||
In 2011, Karen Turner came on board to generally help with all the bits and
|
||
pieces that may get forgotten :-)
|
||
|
||
We’d also like to thank:
|
||
|
||
- Johannes Koomer
|
||
- Steven Kennedy
|
||
- Matthew Grogan
|
||
- Sean Reed
|
||
- Christoph Körner
|
||
- Andreas Beham
|
||
- Larissa Reis
|
||
- Peter Grayson
|
||
- Cristian Klein
|
||
|
||
|