emulsim 0.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. emulsim-0.5.0/.github/workflows/continous_integration.yml +61 -0
  2. emulsim-0.5.0/.github/workflows/docs.yml +21 -0
  3. emulsim-0.5.0/.github/workflows/release_pip.yml +39 -0
  4. emulsim-0.5.0/.gitignore +154 -0
  5. emulsim-0.5.0/.readthedocs.yaml +24 -0
  6. emulsim-0.5.0/LICENSE +21 -0
  7. emulsim-0.5.0/PKG-INFO +86 -0
  8. emulsim-0.5.0/README.md +53 -0
  9. emulsim-0.5.0/docs/Makefile +19 -0
  10. emulsim-0.5.0/docs/build_all.sh +5 -0
  11. emulsim-0.5.0/docs/methods/FirstOrderReactions.nb +5328 -0
  12. emulsim-0.5.0/docs/methods/FirstOrderReactions.pdf +0 -0
  13. emulsim-0.5.0/docs/methods/LinearReactionsBalance.nb +4068 -0
  14. emulsim-0.5.0/docs/methods/Linearized_Fluxes.nb +7348 -0
  15. emulsim-0.5.0/docs/methods/Linearized_Fluxes.pdf +0 -0
  16. emulsim-0.5.0/docs/requirements.txt +6 -0
  17. emulsim-0.5.0/docs/source/__init__.py +0 -0
  18. emulsim-0.5.0/docs/source/_static/custom.css +7 -0
  19. emulsim-0.5.0/docs/source/classlist.rst +25 -0
  20. emulsim-0.5.0/docs/source/conf.py +312 -0
  21. emulsim-0.5.0/docs/source/dev_guide/coding_style.rst +29 -0
  22. emulsim-0.5.0/docs/source/dev_guide/data_model.rst +127 -0
  23. emulsim-0.5.0/docs/source/dev_guide/index.rst +16 -0
  24. emulsim-0.5.0/docs/source/dev_guide/tests.rst +21 -0
  25. emulsim-0.5.0/docs/source/index.rst +31 -0
  26. emulsim-0.5.0/docs/source/installation.rst +85 -0
  27. emulsim-0.5.0/docs/source/parse_classes.py +82 -0
  28. emulsim-0.5.0/docs/source/parse_examples.py +37 -0
  29. emulsim-0.5.0/docs/source/quickstart/first_steps.rst +41 -0
  30. emulsim-0.5.0/docs/source/quickstart/index.rst +9 -0
  31. emulsim-0.5.0/docs/source/quickstart/overview.rst +14 -0
  32. emulsim-0.5.0/docs/source/run_autodoc.py +78 -0
  33. emulsim-0.5.0/docs/source/sphinx_simplify_typehints.py +100 -0
  34. emulsim-0.5.0/docs/sphinx_ext/toctree_filter.py +35 -0
  35. emulsim-0.5.0/emulsim/__init__.py +32 -0
  36. emulsim-0.5.0/emulsim/_version.py +24 -0
  37. emulsim-0.5.0/emulsim/actors/__init__.py +59 -0
  38. emulsim-0.5.0/emulsim/actors/autonomous/__init__.py +31 -0
  39. emulsim-0.5.0/emulsim/actors/autonomous/active_particles.py +128 -0
  40. emulsim-0.5.0/emulsim/actors/autonomous/box.py +177 -0
  41. emulsim-0.5.0/emulsim/actors/autonomous/brownian_motion.py +135 -0
  42. emulsim-0.5.0/emulsim/actors/autonomous/coalescence.py +125 -0
  43. emulsim-0.5.0/emulsim/actors/autonomous/emitters.py +104 -0
  44. emulsim-0.5.0/emulsim/actors/autonomous/fields.py +448 -0
  45. emulsim-0.5.0/emulsim/actors/base.py +237 -0
  46. emulsim-0.5.0/emulsim/actors/coupling/__init__.py +21 -0
  47. emulsim-0.5.0/emulsim/actors/coupling/fields.py +557 -0
  48. emulsim-0.5.0/emulsim/actors/coupling/multicomponent_droplet.py +775 -0
  49. emulsim-0.5.0/emulsim/actors/coupling/nucleation.py +302 -0
  50. emulsim-0.5.0/emulsim/actors/coupling/point_droplet.py +455 -0
  51. emulsim-0.5.0/emulsim/actors/coupling/spherical_droplet.py +1728 -0
  52. emulsim-0.5.0/emulsim/actors/function.py +162 -0
  53. emulsim-0.5.0/emulsim/elements/__init__.py +33 -0
  54. emulsim-0.5.0/emulsim/elements/base.py +822 -0
  55. emulsim-0.5.0/emulsim/elements/fields.py +1165 -0
  56. emulsim-0.5.0/emulsim/elements/multicomponent_droplets.py +236 -0
  57. emulsim-0.5.0/emulsim/elements/points.py +269 -0
  58. emulsim-0.5.0/emulsim/elements/spherical_droplets.py +340 -0
  59. emulsim-0.5.0/emulsim/py.typed +1 -0
  60. emulsim-0.5.0/emulsim/simulation.py +940 -0
  61. emulsim-0.5.0/emulsim/state.py +513 -0
  62. emulsim-0.5.0/emulsim/trackers.py +353 -0
  63. emulsim-0.5.0/emulsim.egg-info/PKG-INFO +86 -0
  64. emulsim-0.5.0/emulsim.egg-info/SOURCES.txt +125 -0
  65. emulsim-0.5.0/emulsim.egg-info/dependency_links.txt +1 -0
  66. emulsim-0.5.0/emulsim.egg-info/not-zip-safe +1 -0
  67. emulsim-0.5.0/emulsim.egg-info/requires.txt +10 -0
  68. emulsim-0.5.0/emulsim.egg-info/top_level.txt +1 -0
  69. emulsim-0.5.0/examples/README.txt +5 -0
  70. emulsim-0.5.0/examples/active_particles.py +28 -0
  71. emulsim-0.5.0/examples/bulk_boundary_coupling.py +35 -0
  72. emulsim-0.5.0/examples/custom_brownian_particles.py +37 -0
  73. emulsim-0.5.0/examples/droplets_active.py +38 -0
  74. emulsim-0.5.0/examples/droplets_coalescence.py +32 -0
  75. emulsim-0.5.0/examples/droplets_image_based.py +63 -0
  76. emulsim-0.5.0/examples/droplets_interactive.py +27 -0
  77. emulsim-0.5.0/examples/droplets_simple.py +29 -0
  78. emulsim-0.5.0/examples/droplets_trackers.py +44 -0
  79. emulsim-0.5.0/examples/droplets_with_emitters.py +36 -0
  80. emulsim-0.5.0/examples/multicomp_droplets.py +44 -0
  81. emulsim-0.5.0/examples/multicomp_droplets_active.py +46 -0
  82. emulsim-0.5.0/examples/pde_collection.py +38 -0
  83. emulsim-0.5.0/examples/pde_simple.py +26 -0
  84. emulsim-0.5.0/examples/random_field_actor.py +50 -0
  85. emulsim-0.5.0/examples/storing_data.py +35 -0
  86. emulsim-0.5.0/examples/trajectory.zip +0 -0
  87. emulsim-0.5.0/pyproject.toml +156 -0
  88. emulsim-0.5.0/requirements.txt +10 -0
  89. emulsim-0.5.0/scripts/format_code.sh +11 -0
  90. emulsim-0.5.0/scripts/run_tests.py +224 -0
  91. emulsim-0.5.0/scripts/tests_all.sh +13 -0
  92. emulsim-0.5.0/scripts/tests_codestyle.sh +6 -0
  93. emulsim-0.5.0/scripts/tests_coverage.sh +5 -0
  94. emulsim-0.5.0/scripts/tests_debug.sh +12 -0
  95. emulsim-0.5.0/scripts/tests_parallel.sh +12 -0
  96. emulsim-0.5.0/scripts/tests_run.sh +12 -0
  97. emulsim-0.5.0/scripts/tests_types.sh +3 -0
  98. emulsim-0.5.0/setup.cfg +4 -0
  99. emulsim-0.5.0/tests/actors/autonomous/test_active_particles.py +55 -0
  100. emulsim-0.5.0/tests/actors/autonomous/test_autonomous_field_actors.py +159 -0
  101. emulsim-0.5.0/tests/actors/autonomous/test_box.py +63 -0
  102. emulsim-0.5.0/tests/actors/autonomous/test_brownian_motion.py +50 -0
  103. emulsim-0.5.0/tests/actors/autonomous/test_coalescence.py +35 -0
  104. emulsim-0.5.0/tests/actors/autonomous/test_emitter.py +35 -0
  105. emulsim-0.5.0/tests/actors/coupling/test_coupling_field_actors.py +200 -0
  106. emulsim-0.5.0/tests/actors/coupling/test_multicomponent_droplets.py +315 -0
  107. emulsim-0.5.0/tests/actors/coupling/test_nucleation.py +66 -0
  108. emulsim-0.5.0/tests/actors/coupling/test_point_droplet.py +216 -0
  109. emulsim-0.5.0/tests/actors/coupling/test_spherical_droplet.py +468 -0
  110. emulsim-0.5.0/tests/actors/test_base.py +57 -0
  111. emulsim-0.5.0/tests/actors/test_field_actors.py +97 -0
  112. emulsim-0.5.0/tests/conftest.py +59 -0
  113. emulsim-0.5.0/tests/elements/__init__.py +0 -0
  114. emulsim-0.5.0/tests/elements/test_fields.py +195 -0
  115. emulsim-0.5.0/tests/elements/test_generic.py +141 -0
  116. emulsim-0.5.0/tests/elements/test_multicomponent_droplets.py +79 -0
  117. emulsim-0.5.0/tests/elements/test_points.py +25 -0
  118. emulsim-0.5.0/tests/elements/test_spherical_droplets.py +85 -0
  119. emulsim-0.5.0/tests/helpers/__init__.py +6 -0
  120. emulsim-0.5.0/tests/helpers/asserts.py +62 -0
  121. emulsim-0.5.0/tests/helpers/recarray.py +19 -0
  122. emulsim-0.5.0/tests/requirements.txt +6 -0
  123. emulsim-0.5.0/tests/requirements_full.txt +2 -0
  124. emulsim-0.5.0/tests/test_examples.py +68 -0
  125. emulsim-0.5.0/tests/test_simulation.py +197 -0
  126. emulsim-0.5.0/tests/test_state.py +130 -0
  127. emulsim-0.5.0/tests/test_trackers.py +73 -0
@@ -0,0 +1,61 @@
1
+ name: "CI"
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ pull_request:
8
+ types: [opened, reopened, synchronize, ready_for_review]
9
+
10
+ jobs:
11
+ tests:
12
+ name: ${{ matrix.os }}, python ${{ matrix.python-version }}, ${{ matrix.uv-resolution }} dependencies
13
+ if: github.event_name == 'push' || github.event.pull_request.draft == false
14
+ runs-on: ${{ matrix.os }}
15
+ timeout-minutes: 30
16
+
17
+ strategy:
18
+ matrix:
19
+ os: [ubuntu-latest]
20
+ python-version: ["3.10", "3.13"]
21
+ uv-resolution:
22
+ - "lowest"
23
+ - "highest"
24
+
25
+ steps:
26
+ - uses: actions/checkout@v4
27
+
28
+ - name: Set up Python ${{ matrix.python-version }}
29
+ uses: actions/setup-python@v5
30
+ with:
31
+ python-version: ${{ matrix.python-version }}
32
+
33
+ - name: Install uv
34
+ uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
35
+ with:
36
+ resolution-strategy: ${{ matrix.uv-resolution }}
37
+
38
+ - name: Install dependencies
39
+ # install all requirements. Note that the full requirements are installed separately
40
+ # so the job does not fail if one of the packages cannot be installed. This allows
41
+ # testing the package for newer python version even when some of the optional
42
+ # packages are not yet available.
43
+ run: |
44
+ python -m pip install --upgrade pip
45
+ uv pip install -r requirements.txt --system
46
+ cat tests/requirements_full.txt | sed -e '/^\s*#.*$/d' -e '/^\s*$/d' | xargs -I % sh -c "uv pip install % --system || true"
47
+ uv pip install -r tests/requirements.txt --system
48
+
49
+ - name: Test with pytest
50
+ env:
51
+ NUMBA_WARNINGS: 1
52
+ MPLBACKEND: agg
53
+ run: |
54
+ uv pip install pytest --system
55
+ cd scripts
56
+ python run_tests.py --unit --parallel
57
+
58
+ - name: Test types with mypy
59
+ continue-on-error: true
60
+ run: |
61
+ python -m mypy --config-file pyproject.toml --pretty --package emulsim
@@ -0,0 +1,21 @@
1
+ name: "Build documentation"
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ pull_request:
8
+ types: [opened, reopened, synchronize, ready_for_review]
9
+
10
+ jobs:
11
+ docs:
12
+ if: github.event_name == 'push' || github.event.pull_request.draft == false
13
+ runs-on: ubuntu-latest
14
+ timeout-minutes: 10
15
+
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+
19
+ - uses: ammaraskar/sphinx-action@master
20
+ with:
21
+ docs-folder: "docs/"
@@ -0,0 +1,39 @@
1
+ name: Upload Python Package
2
+
3
+ on:
4
+ release:
5
+ types: [released]
6
+
7
+ jobs:
8
+ deploy:
9
+ runs-on: ubuntu-latest
10
+ timeout-minutes: 15
11
+
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ with:
15
+ fetch-depth: 0 # https://github.com/pypa/setuptools_scm/issues/480
16
+
17
+ - name: Set up Python
18
+ uses: actions/setup-python@v5
19
+ with:
20
+ python-version: "3.10"
21
+
22
+ - name: Install dependencies
23
+ run: |
24
+ python -m pip install --upgrade pip
25
+ pip install build twine
26
+
27
+ - name: Prepare build
28
+ run: |
29
+ python -m build 2>&1 | tee build.log
30
+ # exit `fgrep -i warning build.log | wc -l`
31
+
32
+ - name: Check the package
33
+ run: twine check --strict dist/*
34
+
35
+ - name: Build and publish
36
+ env:
37
+ TWINE_USERNAME: __token__
38
+ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
39
+ run: python -m twine upload dist/*
@@ -0,0 +1,154 @@
1
+ # project specific folders
2
+ docs/source/packages
3
+ docs/source/examples
4
+ docs/source/examples_gallery
5
+ docs/source/snippets
6
+ tests/coverage/
7
+ .DS_Store
8
+ .settings
9
+ debug/
10
+
11
+ # Byte-compiled / optimized / DLL files
12
+ __pycache__/
13
+ *.py[cod]
14
+ *$py.class
15
+
16
+ # C extensions
17
+ *.so
18
+
19
+ # LaTeX
20
+ *.aux
21
+ *.bbl
22
+ *.blg
23
+ *.bgl
24
+ *.out
25
+ *.synctex.gz
26
+ *.toc
27
+ *Notes.bib
28
+
29
+ # Distribution / packaging
30
+ .Python
31
+ build/
32
+ develop-eggs/
33
+ dist/
34
+ downloads/
35
+ eggs/
36
+ .eggs/
37
+ lib/
38
+ lib64/
39
+ parts/
40
+ sdist/
41
+ var/
42
+ wheels/
43
+ pip-wheel-metadata/
44
+ share/python-wheels/
45
+ *.egg-info/
46
+ .installed.cfg
47
+ *.egg
48
+ MANIFEST
49
+
50
+ # PyInstaller
51
+ # Usually these files are written by a python script from a template
52
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
53
+ *.manifest
54
+ *.spec
55
+
56
+ # Installer logs
57
+ pip-log.txt
58
+ pip-delete-this-directory.txt
59
+
60
+ # Unit test / coverage reports
61
+ htmlcov/
62
+ .tox/
63
+ .nox/
64
+ .coverage
65
+ .coverage.*
66
+ .cache
67
+ nosetests.xml
68
+ coverage.xml
69
+ *.cover
70
+ *.py,cover
71
+ .hypothesis/
72
+ .pytest_cache/
73
+
74
+ # Translations
75
+ *.mo
76
+ *.pot
77
+
78
+ # Django stuff:
79
+ *.log
80
+ local_settings.py
81
+ db.sqlite3
82
+ db.sqlite3-journal
83
+
84
+ # Flask stuff:
85
+ instance/
86
+ .webassets-cache
87
+
88
+ # Scrapy stuff:
89
+ .scrapy
90
+
91
+ # Sphinx documentation
92
+ docs/_build/
93
+
94
+ # PyBuilder
95
+ target/
96
+
97
+ # Jupyter Notebook
98
+ .ipynb_checkpoints
99
+
100
+ # IPython
101
+ profile_default/
102
+ ipython_config.py
103
+
104
+ # pyenv
105
+ .python-version
106
+
107
+ # pipenv
108
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
109
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
110
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
111
+ # install all needed dependencies.
112
+ #Pipfile.lock
113
+
114
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
115
+ __pypackages__/
116
+
117
+ # Celery stuff
118
+ celerybeat-schedule
119
+ celerybeat.pid
120
+
121
+ # SageMath parsed files
122
+ *.sage.py
123
+
124
+ # Environments
125
+ .env
126
+ .venv
127
+ env/
128
+ venv/
129
+ ENV/
130
+ env.bak/
131
+ venv.bak/
132
+
133
+ # Spyder project settings
134
+ .spyderproject
135
+ .spyproject
136
+
137
+ # Rope project settings
138
+ .ropeproject
139
+
140
+ # mkdocs documentation
141
+ /site
142
+
143
+ # mypy
144
+ .mypy_cache/
145
+ .dmypy.json
146
+ dmypy.json
147
+
148
+ # Pyre type checker
149
+ .pyre/
150
+ /.project
151
+ /.pydevproject
152
+ .vscode/settings.json
153
+ docs/source/sg_execution_times.rst
154
+ docs/methods/effective_droplet_model
@@ -0,0 +1,24 @@
1
+ # Read the Docs configuration file
2
+ # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
3
+
4
+ # Required
5
+ version: 2
6
+
7
+ # Set the OS, Python version, and other tools you might need
8
+ build:
9
+ os: ubuntu-24.04
10
+ tools:
11
+ python: "3.13"
12
+
13
+ # Build documentation in the "docs/" directory with Sphinx
14
+ sphinx:
15
+ configuration: docs/source/conf.py
16
+
17
+ # If using Sphinx, optionally build your docs in additional formats such as PDF
18
+ formats:
19
+ - epub
20
+ - pdf
21
+
22
+ python:
23
+ install:
24
+ - requirements: docs/requirements.txt
emulsim-0.5.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2019 David Zwicker
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
emulsim-0.5.0/PKG-INFO ADDED
@@ -0,0 +1,86 @@
1
+ Metadata-Version: 2.4
2
+ Name: emulsim
3
+ Version: 0.5.0
4
+ Summary: Python framework for simulating physical systems consisting of multiple, interacting droplets.
5
+ Author-email: David Zwicker <david.zwicker@ds.mpg.de>
6
+ License-Expression: MIT
7
+ Project-URL: homepage, https://github.com/zwicker-group/emulsim
8
+ Project-URL: documentation, http://emulsim.readthedocs.io
9
+ Project-URL: repository, https://github.com/zwicker-group/emulsim
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: Topic :: Scientific/Engineering
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Requires-Python: <3.14,>=3.10
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Requires-Dist: matplotlib>=3.1
23
+ Requires-Dist: networkx>=2
24
+ Requires-Dist: numba>=0.59
25
+ Requires-Dist: numpy>=1.22
26
+ Requires-Dist: py-droplets>=0.23
27
+ Requires-Dist: py-modelrunner<0.20,>=0.18
28
+ Requires-Dist: py-pde>=0.38
29
+ Requires-Dist: scipy>=1.4
30
+ Requires-Dist: sympy>=1.5
31
+ Requires-Dist: zarr<3,>=2.16
32
+ Dynamic: license-file
33
+
34
+ # emulsim
35
+
36
+ Framework for simulating physical systems consisting of multiple, interacting entities.
37
+ The current focus of the package lies on simulating interacting droplets in a common
38
+ environment, but the framework is extensible and flexible.
39
+
40
+
41
+ ## Main idea
42
+
43
+ The main idea is that the physical system consists of multiple `elements`, which
44
+ together describe the state of the system. The dynamical rules are encoded in `actors`,
45
+ which either act on individual elements, encoding their autonomous dynamics, or on
46
+ multiple elements, introducing couplings.
47
+
48
+
49
+ ## Installation
50
+
51
+ The package is not yet available on `pip` and must thus be cloned from Github. The
52
+ necessary python packages can be installed using `pip`. To install the package together
53
+ with the requirements, the following commands can be used:
54
+
55
+ ```bash
56
+ git clone https://github.com/david-zwicker/emulsim.git
57
+ pip install -r emulsim/requirements.txt
58
+ ```
59
+
60
+ ## Documentation
61
+
62
+ The [documentation for this package is available online](https://emulsim.readthedocs.io/)
63
+
64
+
65
+ ## Running tests
66
+
67
+ The package comes with automated tests that reside in `tests` directory. The purpose of
68
+ these tests is to ensure some basic functionality of the package. Consequently, it is
69
+ good practice to run the tests and fix problems before committing to the repository. To
70
+ run tests, first install the the necessary python modules:
71
+
72
+ ```bash
73
+ pip install -r tests/requirements.txt
74
+ ```
75
+
76
+ The tests can be run using pytest or using the convenient scripts collected in the
77
+ `scripts` directory:
78
+
79
+ * `tests_run.sh` runs all tests in sequential order. The script takes an
80
+ optional argument that selects which tests are run: Only test files or methods
81
+ that match the argument will be run.
82
+ * `tests_parallel.sh` runs all tests in parallel. Also takes a pattern argument.
83
+ * `tests_coverage.sh` checks how much of the code is covered by tests.
84
+ * `tests_types.sh` tests the type annotations in the python files. Type annotations are
85
+ optional in python, but they can be helpful to spot subtle programming problems.
86
+ * `format_code.sh` enforces the code style on all files.
@@ -0,0 +1,53 @@
1
+ # emulsim
2
+
3
+ Framework for simulating physical systems consisting of multiple, interacting entities.
4
+ The current focus of the package lies on simulating interacting droplets in a common
5
+ environment, but the framework is extensible and flexible.
6
+
7
+
8
+ ## Main idea
9
+
10
+ The main idea is that the physical system consists of multiple `elements`, which
11
+ together describe the state of the system. The dynamical rules are encoded in `actors`,
12
+ which either act on individual elements, encoding their autonomous dynamics, or on
13
+ multiple elements, introducing couplings.
14
+
15
+
16
+ ## Installation
17
+
18
+ The package is not yet available on `pip` and must thus be cloned from Github. The
19
+ necessary python packages can be installed using `pip`. To install the package together
20
+ with the requirements, the following commands can be used:
21
+
22
+ ```bash
23
+ git clone https://github.com/david-zwicker/emulsim.git
24
+ pip install -r emulsim/requirements.txt
25
+ ```
26
+
27
+ ## Documentation
28
+
29
+ The [documentation for this package is available online](https://emulsim.readthedocs.io/)
30
+
31
+
32
+ ## Running tests
33
+
34
+ The package comes with automated tests that reside in `tests` directory. The purpose of
35
+ these tests is to ensure some basic functionality of the package. Consequently, it is
36
+ good practice to run the tests and fix problems before committing to the repository. To
37
+ run tests, first install the the necessary python modules:
38
+
39
+ ```bash
40
+ pip install -r tests/requirements.txt
41
+ ```
42
+
43
+ The tests can be run using pytest or using the convenient scripts collected in the
44
+ `scripts` directory:
45
+
46
+ * `tests_run.sh` runs all tests in sequential order. The script takes an
47
+ optional argument that selects which tests are run: Only test files or methods
48
+ that match the argument will be run.
49
+ * `tests_parallel.sh` runs all tests in parallel. Also takes a pattern argument.
50
+ * `tests_coverage.sh` checks how much of the code is covered by tests.
51
+ * `tests_types.sh` tests the type annotations in the python files. Type annotations are
52
+ optional in python, but they can be helpful to spot subtle programming problems.
53
+ * `format_code.sh` enforces the code style on all files.
@@ -0,0 +1,19 @@
1
+ # Minimal makefile for Sphinx documentation
2
+ #
3
+
4
+ # You can set these variables from the command line.
5
+ SPHINXOPTS =
6
+ SPHINXBUILD = sphinx-build
7
+ SOURCEDIR = source
8
+ BUILDDIR = build
9
+
10
+ # Put it first so that "make" without argument is like "make help".
11
+ help:
12
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
13
+
14
+ .PHONY: help Makefile
15
+
16
+ # Catch-all target: route all unknown targets to Sphinx using the new
17
+ # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
18
+ %: Makefile
19
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
@@ -0,0 +1,5 @@
1
+ #!/bin/sh
2
+
3
+ make html
4
+ make latexpdf
5
+ make linkcheck