Skip to main content

BPMN-based creation of SimPy discrete event simulation models

Wouldn't it be cool to combine the block-based process modeling experience of commercial discrete event simulation packages with the amenities of proper IDE-based source-code editing? (Think Arena / Anylogic / ExtendSim / Plant Simulation / ... but with simple integration of third-party libraries, industry-standard interfaces, unit- and integration testing, dockerization, serverless execution in the cloud of your choice... and even actually working auto-completion! :D)

And all that not only for free, but using the worlds most popular language for data analytics and machine learning?

Casymda enables you to create SimPy3 simulation models, with help of BPMN and the battle-tested Camunda-Modeler.

Created BPMN process diagrams are parsed and converted to Python-code, combining visual oversight of model structure with code-based definition of model behavior. Immediately executable, including a token-based process animation, allowing for space-discrete entity movements, and ready to be wrapped as a gym-environment to let a machine-learning algorithm find a control strategy.

Further information and sample projects:

Installation

From PyPI:

pip install casymda

Features

  • connectable blocks for processing of entities
  • graphical model description via camunda modeler
  • process visualization browser-based or via tkinter
  • space-discrete tilemap-movements of entities
  • gradually typed (checkout pyright for vscode)

Coming soon:

  • automated model generation from process event-logs via PM4Py

Examples

Basic features are illustrated as part of the example models (which also serve as integration tests):

  • basics:
    • bpmn-based generation of a simple model file
    • run the generated model
    • process visualization via tkinter
    • browser-based visualization (served with flask, animated with pixijs)
  • resources:
    • seize and release a resource via graphical modeling
  • tilemap:

For setup just clone the repository and install casymda (virtual environment recommended). See basics-visual-run-tkinter for an example of how to cope with python-path issues.

Design

Development

This project trusts Black for formatting, Sonarqube for static code analysis, and pytest for unit & integration testing. Developed and tested on Linux (Ubuntu 20.04), Python 3.8.5. Tests can be carried out inside a docker-container, optionally including an installation from pypi to verify a successful upload.

Sonarqube

sonarqube server (public docker image):

docker-compose up sonarqube

sonar-scanner (public docker image):

docker-compose up analysis

(run a docker-based unit-test first for coverage-reporting)
(remember to share your drive via Docker-Desktop settings if necessary, to be re-applied after each password change)

Tests

pytest --cov-report term --cov=src/casymda/ tests/

integrations tests:

python3 -m pytest examples

(integration-tests require tkinter, which may be installed via sudo apt-get install python3-tk)

For Docker-based tests see docker-compose.yml

docker-compose run unit-test
docker-compose run examples-test
docker-compose run examples-test-pypi

Virtual environment setup

python3 -m venv venv

Editable installation

pip install -e .

Publish to pypi

python setup.py sdist

twine upload dist/*

pip install twine if necessary,
remember to set the version in setup.py and src/casymda as required

PyPy3

Tested PyPy3 (7.3.1-final). Install pypy3 pypy3-dev pypy-tk.

Runtime could be decreased by factor ~2 when using PyPy3 for longer simulations runs (e.g. from ~45s to ~25s for a simple example model test with MAX_ENTITIES set to 40.000 on an i5 notebook).

Contact

fladdi.mir@gmx.de

feedback / ideas / discussion / cheering / complaints welcome

MIT License

2020

Metadata

Release files for casymda 0.2.29

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for casymda 0.2.29
File Size Uploaded Provenance Actions
casymda-0.2.29.tar.gz 47.1 kB Without provenance Details for casymda-0.2.29.tar.gz

Release files / casymda-0.2.29.tar.gz

Download URL casymda-0.2.29.tar.gz
Size 47.1 kB
Tags Source
SHA-256 checksum
How to use checksums
e2c2b6b5f0ad469b7f03d29fa1faadec0d0ff2b760f226ad6a43423001eb9400
BLAKE2b-256 checksum
How to use checksums
de2c0b421e155bf87a4e9b49ecc83c4aad35375a126f4c4d9aa6e8f5765cbd8e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.6

Security for casymda 0.2.29

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.29 This release

1 release file No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page