{ "info": { "author": "Jason Liu", "author_email": "jasonxliu2010@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "\n# Quick Start\n\nSimulus is an open-source discrete-event simulator in Python. Simulus implements a process-oriented simulation world-view with several advanced features to ease modeling and simulation tasks with both events and processes. Simulus also supports parallel and distributed simulation (since version 1.2). We will soon add support for real-time simulation (planned for version 1.3).\n\n* Online documentation:\nhttp://simulus.readthedocs.io/\n\n* Source code repository:\nhttps://github.com/liuxfiu/simulus/\n\n* License:\nMIT -- see the file LICENSE for details.\n\n## Installation\n\nSimulus should run with Python version 2.8 and above. If your python is too old, you should consider updating your Python as well as `pip` (Python\u2019s package manager).\n\nYou should be able to install simulus with `pip`:\n\n```\npip install simulus\n```\n\nThis will install simulus system-wide for all users (assuming you have the necessary privilege on your machine). The installation will also automatically include all Python packages needed by simulus.\n\nYou can also install simulus for just yourself, using:\n\n```\npip install --user simulus\n```\n\nIf you had simulus installed previously, you can always upgrade the existing simulus installation with the newest release, using:\n\n```\npip install --upgrade --user simulus\n```\n\nYou can also install the most recent development version via:\n\n```\npip install -e git+https://github.com/liuxfiu/simulus.git#egg=simulus\n```\n\n## Basic Usage\n\nWe show the basic use of simulus in the following. The purpose here is show some of the basic capabilities of simulus. For more detailed explanation and to learn to use simulus, you should check out the simulus tutorial mentioned above.\n\nSimulus can work in two ways. One way is through events. The user schedules events. Simulus makes sure all events are sorted in timestamp order. When an event happens, simulus advances the simulation time to the event and calls the event handler, which is just a user-defined function. While processing the event, the user can schedule new events into the simulated future. We call this approach *direct event scheduling*. \n\nThe other way is through processes. The user can create processes and have them run and interact. Each process is a separate thread of control. During its execution, a process may be suspended, by either sleeping for some time or getting blocked when requesting for some resources currently unavailable. The process resumes execution when the specified time has passed or after the resource blocking conditions have been removed. We call this approach *process scheduling*. \n\nIn simulus, both direct event scheduling and process scheduling can be used together seamlessly to achieve the modeling tasks.\n\nThe following is a hello-world example, which simply schedules a function (a.k.a. an event handler) to be invoked in the simulated future. Inside the function, the user schedules the same function again.\n\n\n```python\nimport simulus\n\ndef print_message():\n print(\"Hello world at time\", sim.now)\n sim.sched(print_message, offset=10)\n\nsim = simulus.simulator()\nsim.sched(print_message, until=10)\nsim.run(100)\n```\n\n Hello world at time 10\n Hello world at time 20\n Hello world at time 30\n Hello world at time 40\n Hello world at time 50\n Hello world at time 60\n Hello world at time 70\n Hello world at time 80\n Hello world at time 90\n\n\nThe following is the same hello-world example, but instead we use a process. A process is a continuous thread of execution. In the example, once started, the process loops forever. Inside each iteration, the process prints out a message and then sleeps for some time.\n\n\n```python\nimport simulus\n\ndef print_message():\n while True:\n print(\"Hello world at time\", sim.now)\n sim.sleep(10)\n\nsim = simulus.simulator()\nsim.process(print_message, until=10)\nsim.run(100)\n```\n\n Hello world at time 10\n Hello world at time 20\n Hello world at time 30\n Hello world at time 40\n Hello world at time 50\n Hello world at time 60\n Hello world at time 70\n Hello world at time 80\n Hello world at time 90\n\n\nSimulus allows events and processes to coexist. For example, simulus supports conditional-wait on both events and processes. The following shows an example that models Tom and Jerry entering a race. \n\nTom is modeled by processes. Each time Tom enters the race, we create a process, which calls `sleep()` to represent the time duration for the run. The time duration is a random variable from a normal distribution with a mean of 100 and a standard deviation of 50 (and a cutoff below zero). Jerry is modeled by events. Each time Jerry enters the race, we schedule an event using `sched()` with a time offset representing the time duration for the run. The time duration is a random variable from a uniform distribution between 50 and 100. \n\nTom and Jerry compete for ten times; the next race would start as soon as the previous one finishes. For each race, whoever runs the fastest wins. But if they run for more than 100, both are disqualified for that race. The simulation finds out who eventually wins more races.\n\n\n```python\nimport simulus\n\nfrom random import seed, gauss, uniform\nseed(321)\n\ndef tom():\n sim.sleep(max(0, gauss(100, 50)))\n print(\"%g: tom finished\" % sim.now)\n\ndef jerry():\n print(\"%g: jerry finished\" % sim.now)\n\ndef compete():\n tom_won, jerry_won = 0, 0\n for _ in range(10):\n print(\"<--- competition starts at %g -->\" % sim.now)\n\n p = sim.process(tom) # run, tom, run!\n e = sim.sched(jerry, offset=uniform(50, 150)) # run, jerry, run!\n\n # let the race begin...\n (r1, r2), timedout = sim.wait((p, e), 100, method=any)\n # the return values indicate which wait conditions have been satisfied\n if timedout:\n print(\"%g: both disqualified\" % sim.now)\n sim.cancel(p) # both tom and ...\n sim.cancel(e) # jerry can stop running now\n elif r1: \n print(\"%g: tom wins\" % sim.now)\n tom_won += 1\n sim.cancel(e) # jerry can stop running now\n else:\n print(\"%g: jerry wins\" % sim.now)\n jerry_won += 1\n sim.cancel(p) # tom can stop running now\n print(\"final result: tom:jerry=%d:%d\" % (tom_won, jerry_won))\n\nsim = simulus.simulator()\nsim.process(compete)\nsim.run()\n```\n\n <--- competition starts at 0 -->\n 77.5459: jerry finished\n 77.5459: jerry wins\n <--- competition starts at 77.5459 -->\n 171.749: jerry finished\n 171.749: jerry wins\n <--- competition starts at 171.749 -->\n 271.749: both disqualified\n <--- competition starts at 271.749 -->\n 357.072: tom finished\n 357.072: tom wins\n <--- competition starts at 357.072 -->\n 430.387: tom finished\n 430.387: tom wins\n <--- competition starts at 430.387 -->\n 485.297: tom finished\n 485.297: tom wins\n <--- competition starts at 485.297 -->\n 585.297: both disqualified\n <--- competition starts at 585.297 -->\n 611.838: tom finished\n 611.838: tom wins\n <--- competition starts at 611.838 -->\n 711.838: both disqualified\n <--- competition starts at 711.838 -->\n 811.838: both disqualified\n final result: tom:jerry=4:2\n\n\nSimulus also provides several advanced features to ease the common modeling and simulation tasks, including those for modeling single-server or multi-server queues, for performing producer-consumer synchronization over bounded buffers, and for conducting message-passing communication among the processes.\n\nFor example, simulus provides the modeling abstraction of a \"store\", which is a facility for storing countable objects (such as jobs in a queue, packets in a network router, and i/o requests arrived at a storage device), or for storing uncountable quantities or volumes (such as gas in a tank, water in a reservoir, and battery power in a mobile device). The following example shows the use of store as a bounded buffer with multiple producers and consumers.\n\n\n```python\nimport simulus\n\nfrom random import seed, expovariate\nseed(12345)\n\nitems_produced = 0 # keep track the number of items being produced\n\ndef producer(idx):\n global items_produced\n while True:\n sim.sleep(expovariate(1)) # take time to produce an item\n serial_no = items_produced\n items_produced += 1\n print(\"%f: producer %d produces item [%d]\" % (sim.now, idx, serial_no))\n s.put(obj=serial_no)\n print(\"%f: producer %d stores item [%d] in buffer\" % \n (sim.now, idx, serial_no))\n\ndef consumer(idx):\n while True:\n serial_no = s.get()\n print(\"%f: consumer %d retrieves item [%d] from buffer\" %\n (sim.now, idx, serial_no))\n sim.sleep(expovariate(1)) # take time to consume the item\n print(\"%f: consumer %d consumes item [%d]\" % (sim.now, idx, serial_no))\n\nsim = simulus.simulator()\n\n# create a buffer with 3 slots\ns = sim.store(capacity=3)\n\n# create 2 producers and 3 consumers\nfor i in range(2): \n sim.process(producer, i)\nfor i in range(3):\n sim.process(consumer, i)\n\nsim.run(5)\n\n```\n\n 0.010221: producer 1 produces item [0]\n 0.010221: producer 1 stores item [0] in buffer\n 0.010221: consumer 0 retrieves item [0] from buffer\n 0.364955: consumer 0 consumes item [0]\n 0.538916: producer 0 produces item [1]\n 0.538916: producer 0 stores item [1] in buffer\n 0.538916: consumer 2 retrieves item [1] from buffer\n 0.754168: consumer 2 consumes item [1]\n 0.998434: producer 0 produces item [2]\n 0.998434: producer 0 stores item [2] in buffer\n 0.998434: consumer 1 retrieves item [2] from buffer\n 1.174799: consumer 1 consumes item [2]\n 1.754371: producer 1 produces item [3]\n 1.754371: producer 1 stores item [3] in buffer\n 1.754371: consumer 0 retrieves item [3] from buffer\n 1.833163: producer 0 produces item [4]\n 1.833163: producer 0 stores item [4] in buffer\n 1.833163: consumer 2 retrieves item [4] from buffer\n 1.887065: producer 1 produces item [5]\n 1.887065: producer 1 stores item [5] in buffer\n 1.887065: consumer 1 retrieves item [5] from buffer\n 2.024740: consumer 2 consumes item [4]\n 2.321655: consumer 0 consumes item [3]\n 2.325417: consumer 1 consumes item [5]\n 2.658879: producer 0 produces item [6]\n 2.658879: producer 0 stores item [6] in buffer\n 2.658879: consumer 2 retrieves item [6] from buffer\n 2.692757: producer 1 produces item [7]\n 2.692757: producer 1 stores item [7] in buffer\n 2.692757: consumer 0 retrieves item [7] from buffer\n 2.754613: consumer 2 consumes item [6]\n 3.223988: consumer 0 consumes item [7]\n\n\n## Credits\n\nSimulus is developed and maintained by Jason Liu (jasonxliu2010@gmail.com). The project started as a summer pet project in 2019. Simulus is open source and free. The author hopes that you'll find simulus useful in your projects, for teaching, for research development, or for any endeavors.\n\nIf you are using simulus in any extended way, the author would appreciate if you can drop a brief email to let him know about your projects using simulus. If you have any questions or comments about simulus, send emails to him too. The author would certainly try his best to respond to them in a timely fashion.\n\n\n```python\n\n```\n## 1.2.1 (2019-09-09)\n\n### New\n\n* Added LANL benchmark model. [Jason Liu]\n\n### Changes\n\n* Added bucket for uncountable quantities (as opposed of using store), and added muxtree example. [Jason Liu]\n\n\n## 1.2.0 (2019-08-14)\n\n### New\n\n* Finished parallel simulation tutorial. [Jason Liu]\n\n* Changed simulator's run() to run up to but not including the given time; updated parallel simulation tutorial. [Jason Liu]\n\n* Changed argparse to happen at import time; added simulator.sync() function; fixed phold.py in advanced example. [Jason Liu]\n\n* Added ability for sync to have multiple runs and enabled runtime performance reporting. [Jason Liu]\n\n* Added parallel simulation support, including SPMD (using MPI), SMP (using processes), and both. [Jason Liu]\n\n* Preliminary performance tuning; disabled expensive debug logging; added context manager for resource. [Jason Liu]\n\n### Changes\n\n* Some UI updates and added parallel simulation tutorial. [Jason Liu]\n\n## 1.1.5 (2019-07-26)\n\n### New\n\n* Added logging support and runtime performance metrics. [Jason Liu]\n\n* Added jupyter notebooks for queuing models. [Jason Liu]\n\n* Tagged 1.1.4 and release. [Jason Liu]\n\n\n## 1.1.4 (2019-07-17)\n\n### New\n\n* Added support for dynamic process priorities. [Jason Liu]\n\n* Added data collector support; tagged 1.1.3. [Jason Liu]\n\n### Changes\n\n* Changed RunStats name to DataSeries, and QDIS.RANDOM to QDIS.SIRO. [Jason Liu]\n\n* Removed dependence on runstats. [Jason Liu]\n\n\n# Changelog\n\n\n## 1.1.3 (2019-07-15)\n\n### New\n\n* Updated data collectors for resources and facilities. [Jason Liu]\n\n* Tag and release version 1.1.2. [Jason Liu]\n\n* Added mechanisms for consistent, independent random number generators. [Jason Liu]\n\n### Changes\n\n* Restructured tutorial document.\n\n\n## 1.1.2 (2019-07-10)\n\n### New\n\n* Added documentation for mailbox and examples. [Jason Liu]\n\n### Changes\n\n* Added section on using store with examples. [Jason Liu]\n\n\n## 1.1.1 (2019-07-09)\n\n### New\n\n* Sphinx generated documents for simulus api. [Jason Liu]\n\n### Changes\n\n* Moved to github, fixed pipenv requirements, changed cancel() to also kill process, and made trappable a public interface with retval. \n\n* Updated README.md from readme.ipynb; updated tutorial. [Jason Liu]\n\n### Other\n\n* Set theme jekyll-theme-cayman. [liuxfiu]\n\n* Tagged and published version 1.1.0. [Jason Liu]\n\n\n## 1.1.0 (2019-07-07)\n\n### New\n\n* Added sections to explain the use of resource and store in tutorial; also added readme jupyter notebook.\n\n* Added store facility and some examples, including most simpy examples. [Jason Liu]\n\n* Added a couple simpy examples (carwash, moviegoers). [Jason Liu]\n\n* Changed sched() and process() to allow arbitrary functions; examples and documents have been updated accordingly. [Jason Liu]\n\n* Added regression pytest and tox support. [Jason Liu]\n\n* Changed the use of super() in init methods. \n\n* Changed tomjerry.py; gauss distribution may return negative time. [Jason Liu]\n\n## 1.0.5 (2019-07-04)\n\n### New\n\n* New trappables and conditional waits (1.0.5). \n\n* Added support for changelogs generated from git logs. \n\n* Changed resource reserve to acquire. [Jason Liu]\n\n* Redesigned trappables; the processes, events, semaphores, traps, and resources now work with a more intuitive interface design. [Jason Liu]\n\n* Added initial implementation of resource and qstats. [Jason Liu]\n\n\n## 1.0.4 (2019-07-04)\n\n### New\n\n* Finished trappables and timed waits implementation and accompanying documents (1.0.4). [Jason Liu]\n\n* Updated documents for using trappables and timed wait; and a bug fix. [Jason Liu]\n\n* Added support for conditional wait (wait on multiple trappables and timed wait). [Jason Liu]\n\n\n## 1.0.1 (2019-07-04)\n\n### New\n\n* Pip ready; simulus has been published on pypi (1.0.1, 1.0.2, 1.0.3). [Jason Liu]\n\n\n## 0.0.3 (2019-07-04)\n\n### New\n\n* Adding trapping mechanisms for inter-process communication. [Jason Liu]\n\n\n## 0.0.2 (2019-07-04)\n\n### New\n\n* Added some examples using processes for user document. [Jason Liu]\n\n* Added useful functions for direct event scheduling (including resched, cancel, peek, step, and show_calendar). [Jason Liu]\n\n* Added phold example (to test processes). [Jason Liu]\n\n### Changes\n\n* Restructured examples directory (0.0.2). [Jason Liu]\n\n### Fix\n\n* Fixed process scheduling issue. [Jason Liu]\n\n\n## 0.0.1 (2019-07-04)\n\n### New\n\n* First implementation of simulus, with support of events, processes, semaphores, and simulators; and also the jupyter notebook establishing the simple use cases. [Jason Liu]\n\n* This project got started in the evening on June 14, 2019 with a simple idea of creating an easy-to-use python simulator to replace our somewhat dilapitated Simian simulator and also outdoing the esoteric SimPy simulator. [Jason Liu]\n\n### Changes\n\n* Updated the jupyter notebooks. [Jason Liu]\n\n* Updated README.md (mindless update). [Jason Liu]\n\n* Updated README.md. [Jason Liu]\n\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://simulus.readthedocs.io/", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "simulus", "package_url": "https://pypi.org/project/simulus/", "platform": "", "project_url": "https://pypi.org/project/simulus/", "project_urls": { "Homepage": "http://simulus.readthedocs.io/" }, "release_url": "https://pypi.org/project/simulus/1.2.1/", "requires_dist": [ "greenlet" ], "requires_python": ">=2.8", "summary": "A Discrete-Event Simulator in Python", "version": "1.2.1" }, "last_serial": 5802942, "releases": { "1.0.1": [ { "comment_text": "", "digests": { "md5": "8ccdd0dcce99312ab90e9c8e9f428188", "sha256": "0fd38aafc29853ec46ea938ef26b4255b55380b256b8ab3e715a3611383334fb" }, "downloads": -1, "filename": "simulus-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8ccdd0dcce99312ab90e9c8e9f428188", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18863, "upload_time": "2019-07-01T01:18:00", "url": "https://files.pythonhosted.org/packages/23/d6/c83dd0e75a7da66e4c142365951aaf76aec4d4cc8aed550b565fe9e76de8/simulus-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "606fb849e2b3c8bcf363c69dddcce7d6", "sha256": "b908e48a04505b2a8dec6edbe54b545a1f2f8b3d85641b91f0f9b27682b5a234" }, "downloads": -1, "filename": "simulus-1.0.1.tar.gz", "has_sig": false, "md5_digest": "606fb849e2b3c8bcf363c69dddcce7d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15416, "upload_time": "2019-07-01T01:18:03", "url": "https://files.pythonhosted.org/packages/86/5d/cfd5af316d7aeff25ecf252d1ecfe9031a0b02763cd8317435cde0276106/simulus-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "16a9ee21234a1ef45c5571459e070865", "sha256": "1826b83f2b812354d42ca17c09930c9b490457f3bd9dcbe664ee45f61cb2c7ef" }, "downloads": -1, "filename": "simulus-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "16a9ee21234a1ef45c5571459e070865", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 18914, "upload_time": "2019-07-01T02:23:43", "url": "https://files.pythonhosted.org/packages/2a/99/226aa0f2610e1ff4c693c119300d697d494f68555acf0a5e1372ed334823/simulus-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "33092330a4d476e410954ab93a69c9c5", "sha256": "92b0edd6bc7a1d27b25cc946d18969a8a47d371e0fe3f5bbcc5e7ca205c79167" }, "downloads": -1, "filename": "simulus-1.0.2.tar.gz", "has_sig": false, "md5_digest": "33092330a4d476e410954ab93a69c9c5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 22479, "upload_time": "2019-07-01T02:23:45", "url": "https://files.pythonhosted.org/packages/11/d5/2f6d6ced9e405f1a637bae4a90ef106df4bdf30c380ff2f0b77c3bf500fb/simulus-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "bd8a4d504d3695981ac34883f0945805", "sha256": "43dd08d192e50aed4ad2b65eedbecafcc51195c9a303f50705a5281f4e462a27" }, "downloads": -1, "filename": "simulus-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "bd8a4d504d3695981ac34883f0945805", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 18914, "upload_time": "2019-07-01T02:44:39", "url": "https://files.pythonhosted.org/packages/85/d1/85a16749b05ab34ff9cbd9bd63f31130de83a25152b5777fae116ce285f9/simulus-1.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2f190e140bc7b689e2df35216d995900", "sha256": "ab6b7c89de6299ae0ea83fb38f5667c7d7d173c7cf41daff0041ec3fac5e5c63" }, "downloads": -1, "filename": "simulus-1.0.3.tar.gz", "has_sig": false, "md5_digest": "2f190e140bc7b689e2df35216d995900", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 42050, "upload_time": "2019-07-01T02:44:43", "url": "https://files.pythonhosted.org/packages/3d/50/1ce0480c77083b5aa02a4931b9aceaedffc2ee76eb0a036242805ae0ca84/simulus-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "76b527d3e4cd10bcdad051e39f16325a", "sha256": "a2968ff60ddfa9f548ef9f1bfb3ddf18aa77142c34307ce82dd5848fb375541f" }, "downloads": -1, "filename": "simulus-1.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "76b527d3e4cd10bcdad051e39f16325a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 19718, "upload_time": "2019-07-02T10:27:35", "url": "https://files.pythonhosted.org/packages/b7/5e/c5827371d541dea3c15d851ca3e5cce42df7928b681d2e70ab9e6283f258/simulus-1.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fd8dc47ca8df8ec14478f041303617fc", "sha256": "5230fa2afb0fe356e1d23ff770df834ef8b05736b98bc3bfa739777c82ae78a6" }, "downloads": -1, "filename": "simulus-1.0.4.tar.gz", "has_sig": false, "md5_digest": "fd8dc47ca8df8ec14478f041303617fc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 44739, "upload_time": "2019-07-02T10:27:37", "url": "https://files.pythonhosted.org/packages/74/db/c43e3670c7ebd500914ac911478fc0d547e9289cfd00c212c1861716f3be/simulus-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "c6a2f2652fe5c77828ce9b115d29eb2c", "sha256": "b9a3b3f940e772ac87cc50494624cf8e5446e63f73ca62eff2a37fd62788b3e9" }, "downloads": -1, "filename": "simulus-1.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "c6a2f2652fe5c77828ce9b115d29eb2c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 26782, "upload_time": "2019-07-04T20:17:12", "url": "https://files.pythonhosted.org/packages/00/b2/cd91513c66275cbdd65d0339023e8aed334ca0173556e941fcc6b1fa5275/simulus-1.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "41ec9ba0fdf05d3854073df70eedc037", "sha256": "2e7d14a6c7407ffd9f0583a187717de32f542301d46c2fd608f0c12ce9bc9dd2" }, "downloads": -1, "filename": "simulus-1.0.5.tar.gz", "has_sig": false, "md5_digest": "41ec9ba0fdf05d3854073df70eedc037", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 52322, "upload_time": "2019-07-04T20:17:14", "url": "https://files.pythonhosted.org/packages/48/bf/c8c0e086484f869a2df0e0047cbba7b0a8e2eed5bdae8b24503b07d5103e/simulus-1.0.5.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "5868359ac6807b3d406b4c64d438ff26", "sha256": "aba618fac1f10709b5718a71cf202e6adc88cd7ffbb52fb17a3098910053792a" }, "downloads": -1, "filename": "simulus-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5868359ac6807b3d406b4c64d438ff26", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.8", "size": 31493, "upload_time": "2019-07-07T15:47:32", "url": "https://files.pythonhosted.org/packages/b8/91/79bac8b265b24d6f842e0f66194c03a48f2c3ad963a82a88cc8f989e27cc/simulus-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c59a5c5cd21c06a41efb978916d7b9f3", "sha256": "2d92f86dcaedf67566421a680666956db8b929b1f0a2e10d311b63a18558c805" }, "downloads": -1, "filename": "simulus-1.1.0.tar.gz", "has_sig": false, "md5_digest": "c59a5c5cd21c06a41efb978916d7b9f3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.8", "size": 67993, "upload_time": "2019-07-07T15:47:34", "url": "https://files.pythonhosted.org/packages/04/2f/af650d3c79bde2a9b47476b472baaea6ba39d6613827634057875b6fc8ec/simulus-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "3f1b908287260adeb2876ae69b89b246", "sha256": "139b92378e51a1cfa3025b5bd003b2c6472be41791403ec07df2802a2c291593" }, "downloads": -1, "filename": "simulus-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3f1b908287260adeb2876ae69b89b246", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.8", "size": 33205, "upload_time": "2019-07-09T15:53:41", "url": "https://files.pythonhosted.org/packages/38/96/ed273390075aff29676cd1476e06fa2be1201e42c8a876e9f6f092ec7a0a/simulus-1.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7407cb1a368ce5b63510287aff6b2700", "sha256": "7f71842a8ac2d85ea75b61991b7427f548b627fa9f34161a6aa614b4168c2bec" }, "downloads": -1, "filename": "simulus-1.1.1.tar.gz", "has_sig": false, "md5_digest": "7407cb1a368ce5b63510287aff6b2700", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.8", "size": 73605, "upload_time": "2019-07-09T15:53:43", "url": "https://files.pythonhosted.org/packages/74/bf/395b3ee101f108477774300b15f20f5530e0a3a3c48b4f94febc2176c449/simulus-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "40251df4e40fa043ff854745cdb0f2c4", "sha256": "583cfc29c72249c90a276808df1241d2fcfa593d2aaf0ea6d2ed2c0e6215fc5b" }, "downloads": -1, "filename": "simulus-1.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "40251df4e40fa043ff854745cdb0f2c4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.8", "size": 37577, "upload_time": "2019-07-10T18:24:45", "url": "https://files.pythonhosted.org/packages/ac/20/e76896d714ac42c0c3be1e138d9762052b7e54699eb0746f84d720b13b53/simulus-1.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ae8886ee031044b9d65d171e2c2407b", "sha256": "248fe740962d096f53aa781c537291d52b0f960c3a504e7c338ec500ad285ba9" }, "downloads": -1, "filename": "simulus-1.1.2.tar.gz", "has_sig": false, "md5_digest": "8ae8886ee031044b9d65d171e2c2407b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.8", "size": 81849, "upload_time": "2019-07-10T18:24:47", "url": "https://files.pythonhosted.org/packages/f4/99/0f983282c8741db9cb6bb3f1fea9702179c34d310ea6d4de7d50b98ab22e/simulus-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "1e334d500b258f9fd38bc76085b54fb2", "sha256": "b828dc0f58c373a98b050b13d5a6b58b077da0a0625f6f7b60c94ee2d1ad2e84" }, "downloads": -1, "filename": "simulus-1.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "1e334d500b258f9fd38bc76085b54fb2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.8", "size": 41326, "upload_time": "2019-07-15T14:46:35", "url": "https://files.pythonhosted.org/packages/88/31/925cc379d322fdc1d613142d022ec0ad88a21483dd9fe2a0e8c2dd2534a1/simulus-1.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "22783c68ed528232add4495f1bc7ea6e", "sha256": "249408040baa08e581e449237384258be437140f456285d65c03247427541a74" }, "downloads": -1, "filename": "simulus-1.1.3.tar.gz", "has_sig": false, "md5_digest": "22783c68ed528232add4495f1bc7ea6e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.8", "size": 155056, "upload_time": "2019-07-15T14:46:37", "url": "https://files.pythonhosted.org/packages/14/b0/0dc92fa0c3d0c14283e0cae90392cdb4ae6a31df1fc8c0380b097ae48a43/simulus-1.1.3.tar.gz" } ], "1.1.4": [ { "comment_text": "", "digests": { "md5": "3495ad75615acc797c46785e328c9952", "sha256": "d6016272f828e04c31a07281a9622c1512daa6835fd1be17bdface1f7d7b2f19" }, "downloads": -1, "filename": "simulus-1.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "3495ad75615acc797c46785e328c9952", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.8", "size": 41897, "upload_time": "2019-07-17T23:28:00", "url": "https://files.pythonhosted.org/packages/00/ed/f3c557ca83e3443391295a81df864cc1d52ae6e7dffc2fe8740c571659f3/simulus-1.1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "04a820b4396ab7fae5e599637eec38bd", "sha256": "c7529315b8a2eeb307726e02091574f93dc8c9aa9949bb92de0faca3dda95d2b" }, "downloads": -1, "filename": "simulus-1.1.4.tar.gz", "has_sig": false, "md5_digest": "04a820b4396ab7fae5e599637eec38bd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.8", "size": 157083, "upload_time": "2019-07-17T23:28:02", "url": "https://files.pythonhosted.org/packages/89/1c/b49b86997cb49362ccabf815418e4b69b9dd6a38143ec41396365f045476/simulus-1.1.4.tar.gz" } ], "1.1.5": [ { "comment_text": "", "digests": { "md5": "3c64b67bf0eafda42116d7434e0640d5", "sha256": "b1d8b47f4edd6993ec0941d224abcd138b7c9828fa8d81a4aafc81e0b9962e26" }, "downloads": -1, "filename": "simulus-1.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "3c64b67bf0eafda42116d7434e0640d5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.8", "size": 43817, "upload_time": "2019-07-26T01:13:57", "url": "https://files.pythonhosted.org/packages/2b/be/43a529222e286a35dec8e9fbec101f4f715ce4604c4761c01af2ee44dcec/simulus-1.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d33c70ccd451d3af93c5c8a6bf5fd9f9", "sha256": "faf2d9ca3b68e394ef7743a2d1bf72b091364105491c53db8cec5c0c57469cd0" }, "downloads": -1, "filename": "simulus-1.1.5.tar.gz", "has_sig": false, "md5_digest": "d33c70ccd451d3af93c5c8a6bf5fd9f9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.8", "size": 235228, "upload_time": "2019-07-26T01:13:59", "url": "https://files.pythonhosted.org/packages/c7/34/1e6cda4f3354e29ba0356914d91c1e1cb3d2bfffda71d5452f0aa1f7db6d/simulus-1.1.5.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "5a54ad34dfae306a16e700082a3cf7ea", "sha256": "0394d32684b0629298ae87b237fdb52f243bd263b3ef2cf9b22b53408693d631" }, "downloads": -1, "filename": "simulus-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5a54ad34dfae306a16e700082a3cf7ea", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.8", "size": 53328, "upload_time": "2019-08-14T17:21:17", "url": "https://files.pythonhosted.org/packages/29/40/f5b37197b58b376ab221713f2ec88db1d1f50779ffc6e0e53216bb71c4c6/simulus-1.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0b8d6147a1bf06de281792007bea11ab", "sha256": "af1419a6ca2a9729c654a0ace180893a547176cd0da9cd375926b546b399a680" }, "downloads": -1, "filename": "simulus-1.2.0.tar.gz", "has_sig": false, "md5_digest": "0b8d6147a1bf06de281792007bea11ab", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.8", "size": 267397, "upload_time": "2019-08-14T17:21:19", "url": "https://files.pythonhosted.org/packages/42/1d/c4d784ca4ff18fea20534e7d94f883dd5b05a83365d3e69eb19eeee8ba81/simulus-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "53d227f59a606b9f574fbbb068d2b604", "sha256": "3875179534b4925dabf08150827e3abe7bde639daf6eee801e19f7408932294a" }, "downloads": -1, "filename": "simulus-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "53d227f59a606b9f574fbbb068d2b604", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.8", "size": 57131, "upload_time": "2019-09-09T10:25:38", "url": "https://files.pythonhosted.org/packages/d2/37/0411515e5c746f14f34652b76c5ac6b7bc878beed3ef9281fc99885da33a/simulus-1.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "704ccfb8d6ff01f34eb04e08b81d9b44", "sha256": "84d39cffe592dd60f250628790d3daf80ce70f2ee846eb9933cec0006d9259d7" }, "downloads": -1, "filename": "simulus-1.2.1.tar.gz", "has_sig": false, "md5_digest": "704ccfb8d6ff01f34eb04e08b81d9b44", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.8", "size": 276312, "upload_time": "2019-09-09T10:25:40", "url": "https://files.pythonhosted.org/packages/2b/9e/5ff4babffe163b6aefe086974181c7630457d00cda4ad44db48a687a6206/simulus-1.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "53d227f59a606b9f574fbbb068d2b604", "sha256": "3875179534b4925dabf08150827e3abe7bde639daf6eee801e19f7408932294a" }, "downloads": -1, "filename": "simulus-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "53d227f59a606b9f574fbbb068d2b604", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.8", "size": 57131, "upload_time": "2019-09-09T10:25:38", "url": "https://files.pythonhosted.org/packages/d2/37/0411515e5c746f14f34652b76c5ac6b7bc878beed3ef9281fc99885da33a/simulus-1.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "704ccfb8d6ff01f34eb04e08b81d9b44", "sha256": "84d39cffe592dd60f250628790d3daf80ce70f2ee846eb9933cec0006d9259d7" }, "downloads": -1, "filename": "simulus-1.2.1.tar.gz", "has_sig": false, "md5_digest": "704ccfb8d6ff01f34eb04e08b81d9b44", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.8", "size": 276312, "upload_time": "2019-09-09T10:25:40", "url": "https://files.pythonhosted.org/packages/2b/9e/5ff4babffe163b6aefe086974181c7630457d00cda4ad44db48a687a6206/simulus-1.2.1.tar.gz" } ] }