{ "info": { "author": "Will Larson", "author_email": "lethain@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "\n# Systems\n\n`systems` is a set of tools for describing, running and visualizing\n[systems diagrams](https://lethain.com/systems-thinking/).\n\n\nInstallation directions are below, and then get started by [working through the tutorial](./docs/tutorial.md)\nor reading through the [Jupyter notebook example](../notebooks/hiring.ipynb) example.\n\nFor a more in-depth look at the system syntax, please read [the syntax specification](./docs/spec.md).\n\n## Quickest start\n\nFollow the installation instructions below, then write a system definition\nsuch as:\n\n Start(10)\n Start > Middle @ 2\n Middle > End\n\nYou can then evaluate your system (use `--csv` for an importable format):\n\n cat tmp.txt | systems-run -r 3\n\n Start Middle End\n 0 10 0 0\n 1 8 2 0\n 2 6 3 1\n 3 4 4 2\n\nSee [the tutorial](./docs/tutorial.md) for more detailed starting information.\n\n## Jupyter notebooks\n\nLikely the easiest way to iterate on a model is within a Jupyter notebook.\nSee an [example notebook here](./notebooks/hiring.ipynb).\n[Read this blog post for more installation details](https://lethain.com/systems-jupyter-notebook/).\n\n## Installation\n\nTo install via PyPi:\n\n pip install systems\n\nTo install for local development:\n\n git clone https://github.com/lethain/systems.git\n cd systems\n python3 -m venv ./env\n source ./env/bin/activate\n python setup.py develop\n\nRun tests via:\n\n python3 -m unittest tests/test_*.py\n\nOr run a single test via:\n\n python3 tests/test_parse.py TestParse.test_parse_complex_formula\n\nPlease open an Github issue if you run into any problems!\n\n## Using the command line tools\n\nThere are four command line tools that you'll use when creating and debugging\nsystems/\n\n`systems-run` is used to run models:\n\n $ cat examples/hiring.txt | systems-run -r 3\n PhoneScreens Onsites Offers Hires Employees Departures\n 0 0 0 0 0 5 0\n 1 25 0 0 0 5 0\n 2 25 12 0 0 5 0\n 3 25 12 6 0 5 0\n\n`systems-viz` is used to visualize models into [Graphviz](https://www.graphviz.org/):\n\n $ cat examples/hiring.txt | systems-viz\n // Parsed\n digraph {\n rankdir=LR\n 0 [label=Candidates]\n 1 [label=PhoneScreens]\n // etc, etc, some other stuff\n }\n\nTypically you'll pipe the output of `systems-viz` into `dot`, for example\n\n $ cat examples/hiring.txt | systems-viz | dot -Tpng -o tmp.png\n\n`systems-format` reads in a model, tokenizes it and formats the tokens\ninto properly formatted results. This is similar to `gofmt`, and could\nbe used for ensuring a consistent house formatting style for your diagrams.\n(It was primarily implemented to support generating human readable error\nmessages instead of surfacing the tokens to humans when errors arise.)\n\n $ cat examples/hiring.txt | systems-fmt\n [Candidates] > PhoneScreens @ 25\n PhoneScreens > Onsites @ 0.5\n # etc etc\n\n`systems-lex` generates the tokens for a given system file.\nThis is typically most useful when you're extending the lexer\nto support new types of functionality, but can also be useful\nfor other kinds of debugging:\n\n $ cat examples/hiring.txt | systems-lex\n ('lines',\n [('line',\n 1,\n [('comment', '# wrap with [] to indicate an infinite stock that')]),\n ('line', 2, [('comment', \"# isn't included in each table\")]),\n\t('line', 3, [('comment', '# integers are implicitly steady rates')]),\n\t('line',\n\t 4,\n [('infinite_stock', 'Candidates', ('params', [])),\n\t ('flow_direction', '>'),\n ('stock', 'PhoneScreens', ('params', ())),\n ('flow_delimiter', '@'),\n ('flow', '', ('params', (('formula', [('whole', '25')]),)))]),\n\t...\n ]\n )\n\n\n## Error messages\n\nThe parser will do its best to give you a useful error message.\nFor example, if you're missing delimiters:\n\n cat examples/no_delim.txt | systems-run\n line 1 is missing delimiter '>': \"[a] < b @ 25\"\n\nAt worst, it will give you the line number and line that is\ncreating an issue:\n\n cat examples/invalid_flow.txt | systems-run\n line 1 could not be parsed: \"a > b @ 0..2\"\n\n## Uploading distribution\n\nIf you are trying to install this on PyPi, the steps are roughly:\n\n python3 -m pip install --user --upgrade pip\n python3 -m pip install --user --upgrade wheel\n python3 -m pip install --user --upgrade twine\n python3 setup.py sdist bdist_wheel\n twine upload --repository-url https://upload.pypi.org/legacy/ dist/*\n\nThat should more or less work. :)\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/lethain/systems", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "systems", "package_url": "https://pypi.org/project/systems/", "platform": "", "project_url": "https://pypi.org/project/systems/", "project_urls": { "Homepage": "https://github.com/lethain/systems" }, "release_url": "https://pypi.org/project/systems/0.1.0/", "requires_dist": [ "graphviz" ], "requires_python": "", "summary": "Describe and run systems diagrams.", "version": "0.1.0" }, "last_serial": 4829594, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "6499dfd6785cdf5ea1e439ebb2321915", "sha256": "05f115c69c90c87699148eb43402ad1bf66a669c2f95a3aec85b0e2b3a938c03" }, "downloads": -1, "filename": "systems-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "6499dfd6785cdf5ea1e439ebb2321915", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10407, "upload_time": "2018-09-17T14:10:35", "url": "https://files.pythonhosted.org/packages/50/38/03f6371c987d2b1c0f88b09ada55fa68baee110fb469d0ad528b9ce692c4/systems-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cd0f10bdd2b393f70ec3a97a69272ba1", "sha256": "fbb6d245e02bf27b3507dd70087fa3b872b79ed4cc52400565f4bd731f90d7cb" }, "downloads": -1, "filename": "systems-0.0.1.tar.gz", "has_sig": false, "md5_digest": "cd0f10bdd2b393f70ec3a97a69272ba1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11533, "upload_time": "2018-09-17T14:10:37", "url": "https://files.pythonhosted.org/packages/84/fe/7a3276477abaf3755e40d64cbb25f0abd979a53223a83be5ac06ab067376/systems-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "9a6255e1f99607e2c65690443bffa9d8", "sha256": "d2d1e9d16a1ea889fe58a0856626ce17f97a49f7a69828cdebe0e1349824d165" }, "downloads": -1, "filename": "systems-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "9a6255e1f99607e2c65690443bffa9d8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13532, "upload_time": "2018-09-30T17:59:29", "url": "https://files.pythonhosted.org/packages/01/bc/efbedac266abc2bc82abf1cdc4de94ae493a0af35bc6449fe199d2ffb0a6/systems-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8fd57f455af111bc31374a008700ee72", "sha256": "32538d7fcd5a7cc633d14d40cd801246e593581dfc3d9486522965a7ecb31a33" }, "downloads": -1, "filename": "systems-0.0.2.tar.gz", "has_sig": false, "md5_digest": "8fd57f455af111bc31374a008700ee72", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12286, "upload_time": "2018-09-30T17:59:31", "url": "https://files.pythonhosted.org/packages/5f/6d/4f80b482e15f90e99d2fd2232cb162dee25d7370256d2b91ee373cb575a9/systems-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "cb19b10eb76f6fd3c3a075102e0dd5dc", "sha256": "3b0799df62a14c1b2f0a42403b999edbc3e0a956a9328c5e1f88aa282117bcf6" }, "downloads": -1, "filename": "systems-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "cb19b10eb76f6fd3c3a075102e0dd5dc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14180, "upload_time": "2018-10-03T21:06:50", "url": "https://files.pythonhosted.org/packages/25/f3/f5fa434906e5931a0fab1155bcebdd35d5f69ebec2aee63fb7cd2984f21c/systems-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5a64b5e1b93c272c110d4bd31cf3d67b", "sha256": "d4d61dfc16618491af7c3c2fce3ca42b74cdbd621c76e8ab6282b1cddce7bb40" }, "downloads": -1, "filename": "systems-0.0.3.tar.gz", "has_sig": false, "md5_digest": "5a64b5e1b93c272c110d4bd31cf3d67b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12667, "upload_time": "2018-10-03T21:06:54", "url": "https://files.pythonhosted.org/packages/9b/42/e1ffae9d7be6cb4ba9908a65e4967d1e7b0566de3489c21da778d3c45488/systems-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "0e87bf3fa49f741b9ca6070e22c61e08", "sha256": "55f9c830a297f3d07edc2aa10ddcb7cb964b545b3d9d2251aaf13bc411e832f8" }, "downloads": -1, "filename": "systems-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "0e87bf3fa49f741b9ca6070e22c61e08", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14806, "upload_time": "2018-10-04T19:58:07", "url": "https://files.pythonhosted.org/packages/7b/9a/1d2c6d24fdd1ddcc7795188f2776b1fb9b7e8361be4078cc755ab97af737/systems-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d64e9c91795bb5cc8823844031a35031", "sha256": "b809ed3f3c3facbd58550f6b4491515aa737bef4d1ccbd71882574e25ebba152" }, "downloads": -1, "filename": "systems-0.0.4.tar.gz", "has_sig": false, "md5_digest": "d64e9c91795bb5cc8823844031a35031", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13315, "upload_time": "2018-10-04T19:58:10", "url": "https://files.pythonhosted.org/packages/7d/cf/c5b0db97333561f14d8cab015d458f0de53a00418fae1683c78b92a85e67/systems-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "c7a63debfde81f601a1c4aa1a99aba4f", "sha256": "67a5a1d29db5df186f98df6d7335c62c28afd55d4b85d974bedb997fbc0a4fc3" }, "downloads": -1, "filename": "systems-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "c7a63debfde81f601a1c4aa1a99aba4f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13721, "upload_time": "2018-10-06T23:47:54", "url": "https://files.pythonhosted.org/packages/f7/03/985815278e4173ad2b0d9c222665397f7f5611d1446d2f74ec7389a16ae0/systems-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "824311113624a5ce7cab5119491e3d4c", "sha256": "811625e4d3a0f2cc47e6123c87ce7e32f45d9d652c7653e74a7516d8b27a4449" }, "downloads": -1, "filename": "systems-0.0.5.tar.gz", "has_sig": false, "md5_digest": "824311113624a5ce7cab5119491e3d4c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10291, "upload_time": "2018-10-06T23:47:58", "url": "https://files.pythonhosted.org/packages/e7/8c/02844da92236e114bcc3264e082c7223d9f5807f2d6bc186b005fb248033/systems-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "4ff86fbe9e4f8238a20d4b5e856470d2", "sha256": "a6be20d72a54541199eef231a97b5dd82ce011de79c0ed13895579459431e536" }, "downloads": -1, "filename": "systems-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "4ff86fbe9e4f8238a20d4b5e856470d2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14489, "upload_time": "2018-10-06T23:55:53", "url": "https://files.pythonhosted.org/packages/a9/d4/35cd5e4d41947b073e8a8d8679ec5c725db8ca40532a3274eddc194239b8/systems-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "23b4053a23760e70ee8276fc1f34f193", "sha256": "1047cf9dba0c4911f20f0f5ae1e715f93189d774e6caff06dd3867a906f43534" }, "downloads": -1, "filename": "systems-0.0.6.tar.gz", "has_sig": false, "md5_digest": "23b4053a23760e70ee8276fc1f34f193", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10415, "upload_time": "2018-10-06T23:55:54", "url": "https://files.pythonhosted.org/packages/6a/13/d6138c3b99bbd9cdf919c313ae6c68ace6f52a07a67e2a5d00d555ea9ba9/systems-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "2bdedaafef7dd9a52b9b79f864854f6e", "sha256": "034d3f18bdb4765431e1dcfa9c24ef9717d28e5487fdb0dc2fde20f51123ee3e" }, "downloads": -1, "filename": "systems-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "2bdedaafef7dd9a52b9b79f864854f6e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16121, "upload_time": "2018-10-07T20:32:07", "url": "https://files.pythonhosted.org/packages/36/fd/fe4c1554ed1307bd2c8b02c160a7efc0e1a51070ddcacaa068aa70be57a4/systems-0.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8f5fb7751e1eb12a99e2687fdceb7221", "sha256": "4e0984c2c886a90eaa896a047dbaff6660c4d24ad3bced27522f7e9c41410d73" }, "downloads": -1, "filename": "systems-0.0.7.tar.gz", "has_sig": false, "md5_digest": "8f5fb7751e1eb12a99e2687fdceb7221", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12607, "upload_time": "2018-10-07T20:32:09", "url": "https://files.pythonhosted.org/packages/7c/8e/c904a41d49ffb431ce84ae9613f6af252b97c265db2c054b3b5d84c084db/systems-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "7b0a0a2d458af09af21c2dbccfd12255", "sha256": "35a52d37960db88582e4d02b04180318e0f6d3c5ab427e5bb6ecec5927d6b162" }, "downloads": -1, "filename": "systems-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "7b0a0a2d458af09af21c2dbccfd12255", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16202, "upload_time": "2019-02-10T19:23:22", "url": "https://files.pythonhosted.org/packages/93/bf/5ef1264794f9e2d5b75c279dd4e9c14bc2d695aedfec8dd102f0b38c2a10/systems-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ff4f3647b10274f166633daca6d497b8", "sha256": "23d42b1a35e975b1a241be7eb2074386fc825673bad8f62f8e2780b2efd75f19" }, "downloads": -1, "filename": "systems-0.0.8.tar.gz", "has_sig": false, "md5_digest": "ff4f3647b10274f166633daca6d497b8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10717, "upload_time": "2019-02-10T19:23:26", "url": "https://files.pythonhosted.org/packages/45/be/3acc3cf10063dde7e8f484f34c36fb94ebd0ae4f8cc83907b06d5b768d43/systems-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "6f426cc41307522b6399f4b5e85ebe9b", "sha256": "e9789abd1745e3d6b95497ab6f7d435158772e047c231eb22ee091f851926c73" }, "downloads": -1, "filename": "systems-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "6f426cc41307522b6399f4b5e85ebe9b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16274, "upload_time": "2019-02-16T18:26:05", "url": "https://files.pythonhosted.org/packages/03/ff/2be657a417142e8d7d8d7ad5b4f0667cd9d0897b71e651520c44536cd48f/systems-0.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "65613387346aae88284f2e19eb8c797d", "sha256": "f5787ef89fc2415683e831ee9b9839a7e45c0b3ab8ac9be0ed4fea6abd95fc71" }, "downloads": -1, "filename": "systems-0.0.9.tar.gz", "has_sig": false, "md5_digest": "65613387346aae88284f2e19eb8c797d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10757, "upload_time": "2019-02-16T18:26:10", "url": "https://files.pythonhosted.org/packages/3c/1d/87c02fdadd30c0f23b5405900299f284d7f95158124e98e377a9f6aa3eb1/systems-0.0.9.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "e8e500a28227deacc28d79806f051569", "sha256": "d7384871175debcdc2c7cd9f2972fe4b39a81fdbae2a563e6bd574a2dbe90562" }, "downloads": -1, "filename": "systems-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e8e500a28227deacc28d79806f051569", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16278, "upload_time": "2019-02-16T19:52:58", "url": "https://files.pythonhosted.org/packages/4a/47/cad0d9393e7dc6b0079a0a8712e5f27a31d1ae69bb1ddfd462e29a76b0be/systems-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aecc3347c472cad9de7b04d1534cc2d5", "sha256": "73f299c024d8295fd6ff6df0bf4e18df67530912067e1d8dfe4baa489316621d" }, "downloads": -1, "filename": "systems-0.1.0.tar.gz", "has_sig": false, "md5_digest": "aecc3347c472cad9de7b04d1534cc2d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10761, "upload_time": "2019-02-16T19:53:04", "url": "https://files.pythonhosted.org/packages/9d/a5/ff64ceed64442d12f95d01fbdedd33d21025e187363c4d43dd121e13750e/systems-0.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e8e500a28227deacc28d79806f051569", "sha256": "d7384871175debcdc2c7cd9f2972fe4b39a81fdbae2a563e6bd574a2dbe90562" }, "downloads": -1, "filename": "systems-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e8e500a28227deacc28d79806f051569", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16278, "upload_time": "2019-02-16T19:52:58", "url": "https://files.pythonhosted.org/packages/4a/47/cad0d9393e7dc6b0079a0a8712e5f27a31d1ae69bb1ddfd462e29a76b0be/systems-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aecc3347c472cad9de7b04d1534cc2d5", "sha256": "73f299c024d8295fd6ff6df0bf4e18df67530912067e1d8dfe4baa489316621d" }, "downloads": -1, "filename": "systems-0.1.0.tar.gz", "has_sig": false, "md5_digest": "aecc3347c472cad9de7b04d1534cc2d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10761, "upload_time": "2019-02-16T19:53:04", "url": "https://files.pythonhosted.org/packages/9d/a5/ff64ceed64442d12f95d01fbdedd33d21025e187363c4d43dd121e13750e/systems-0.1.0.tar.gz" } ] }