salabim 24.0.2__tar.gz → 24.0.3__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- salabim-24.0.3/PKG-INFO +64 -0
- salabim-24.0.3/README.md +51 -0
- salabim-24.0.3/pyproject.toml +30 -0
- {salabim-24.0.2 → salabim-24.0.3}/salabim/salabim.py +21 -49
- salabim-24.0.3/salabim.egg-info/PKG-INFO +64 -0
- salabim-24.0.3/salabim.egg-info/SOURCES.txt +22 -0
- salabim-24.0.3/setup.cfg +4 -0
- salabim-24.0.3/tests/test_cap_now.py +28 -0
- salabim-24.0.3/tests/test_componentgenerator.py +198 -0
- salabim-24.0.3/tests/test_datetime.py +108 -0
- salabim-24.0.3/tests/test_distributions.py +202 -0
- salabim-24.0.3/tests/test_misc.py +53 -0
- salabim-24.0.3/tests/test_monitor.py +644 -0
- salabim-24.0.3/tests/test_process.py +26 -0
- salabim-24.0.3/tests/test_queue.py +184 -0
- salabim-24.0.3/tests/test_salabim.py +5 -0
- salabim-24.0.3/tests/test_state.py +115 -0
- salabim-24.0.3/tests/test_store.py +17 -0
- salabim-24.0.3/tests/test_timeunit.py +122 -0
- salabim-24.0.2/MANIFEST.in +0 -5
- salabim-24.0.2/PKG-INFO +0 -65
- salabim-24.0.2/salabim/README.md +0 -38
- salabim-24.0.2/salabim/__init__.py +0 -2
- salabim-24.0.2/salabim/changelog.txt +0 -7181
- salabim-24.0.2/salabim.egg-info/PKG-INFO +0 -65
- salabim-24.0.2/salabim.egg-info/SOURCES.txt +0 -15
- salabim-24.0.2/setup.cfg +0 -7
- salabim-24.0.2/setup.py +0 -75
- {salabim-24.0.2 → salabim-24.0.3}/salabim/DejaVuSansMono.ttf +0 -0
- {salabim-24.0.2 → salabim-24.0.3}/salabim/calibri.ttf +0 -0
- {salabim-24.0.2 → salabim-24.0.3}/salabim/mplus-1m-regular.ttf +0 -0
- {salabim-24.0.2 → salabim-24.0.3}/salabim.egg-info/dependency_links.txt +0 -0
- {salabim-24.0.2 → salabim-24.0.3}/salabim.egg-info/top_level.txt +0 -0
salabim-24.0.3/PKG-INFO
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: salabim
|
3
|
+
Version: 24.0.3
|
4
|
+
Summary: salabim - discrete event simulation in Python
|
5
|
+
Author-email: Ruud van der Ham <rt.van.der.ham@gmail.com>
|
6
|
+
Project-URL: Homepage, https://github.com/salabim/salabim
|
7
|
+
Project-URL: Repository, https://github.com/salabim/salabim
|
8
|
+
Classifier: Development Status :: 5 - Production/Stable
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
10
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
11
|
+
Requires-Python: >=3.7
|
12
|
+
Description-Content-Type: text/markdown
|
13
|
+
|
14
|
+
<img src="https://www.salabim.org/salabim_logo_payoff.png" />
|
15
|
+
|
16
|
+
</br>
|
17
|
+
|
18
|
+
Salabim is a Python library for object-oriented discrete event simulation (DES) and animation.
|
19
|
+
|
20
|
+
## Introduction
|
21
|
+
|
22
|
+
Discrete event simulation (DES) finds applications in various logistical domains including production facilities, warehousing, airports, hospitals, mining, materials handling, steel mills, and computer network analysis.
|
23
|
+
|
24
|
+
Salabim follows a well-proven and intuitive process description method similar to Tomas and Must.</br>The package provides:
|
25
|
+
|
26
|
+
- Components
|
27
|
+
- Queues
|
28
|
+
- Resources
|
29
|
+
- Stores
|
30
|
+
- States
|
31
|
+
- Monitors for data collection and presentation
|
32
|
+
- 2D and 3D animation (including video production)
|
33
|
+
- Tracing facilities
|
34
|
+
- Advanced statistical sampling
|
35
|
+
|
36
|
+
In contrast to some other Python DES packages, salabim does not require the use of yield statements for process control, making it more straightforward to use. Salabim has minimal requirements, especially when animation is disabled.
|
37
|
+
|
38
|
+
## Features and documentation
|
39
|
+
|
40
|
+
- Cross-platform support: salabim runs on Windows, macOS, Linux, iOS/iPadOS (Pythonista), and can even be used with "Python In Excel".
|
41
|
+
- Comprehensive documentation: Visit [www.salabim.org/manual](www.salabim.org/manual) for detailed documentation.
|
42
|
+
|
43
|
+
## Contributing and Reporting Issues
|
44
|
+
|
45
|
+
Contributions to salabim are highly appreciated! You can contribute by issuing a pull request or submitting an issue on [GitHub](https://github.com/salabim/salabim). Alternatively, you can use the [salabim Google user group](https://groups.google.com/g/salabim) for discussions and reporting issues.
|
46
|
+
|
47
|
+
## License
|
48
|
+
|
49
|
+
Salabim is licensed under the MIT License. For details, please refer to the [LICENSE](LICENSE) file.
|
50
|
+
|
51
|
+
## Support
|
52
|
+
|
53
|
+
Ruud van der Ham is available and willing to help users with issues related to the package and modeling in general. He also provides services such as code and model reviews, consultancy, and training.
|
54
|
+
|
55
|
+
## Getting Started
|
56
|
+
|
57
|
+
To start using salabim, visit [www.salabim.org](www.salabim.org) for installation instructions and further details.
|
58
|
+
|
59
|
+
## Badges
|
60
|
+
|
61
|
+
![PyPI](https://img.shields.io/pypi/v/salabim) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/salabim) ![PyPI - Implementation](https://img.shields.io/pypi/implementation/salabim)
|
62
|
+
|
63
|
+
![PyPI - License](https://img.shields.io/pypi/l/salabim) ![Black](https://img.shields.io/badge/code%20style-black-000000.svg)
|
64
|
+
![GitHub last commit](https://img.shields.io/github/last-commit/salabim/salabim)
|
salabim-24.0.3/README.md
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
<img src="https://www.salabim.org/salabim_logo_payoff.png" />
|
2
|
+
|
3
|
+
</br>
|
4
|
+
|
5
|
+
Salabim is a Python library for object-oriented discrete event simulation (DES) and animation.
|
6
|
+
|
7
|
+
## Introduction
|
8
|
+
|
9
|
+
Discrete event simulation (DES) finds applications in various logistical domains including production facilities, warehousing, airports, hospitals, mining, materials handling, steel mills, and computer network analysis.
|
10
|
+
|
11
|
+
Salabim follows a well-proven and intuitive process description method similar to Tomas and Must.</br>The package provides:
|
12
|
+
|
13
|
+
- Components
|
14
|
+
- Queues
|
15
|
+
- Resources
|
16
|
+
- Stores
|
17
|
+
- States
|
18
|
+
- Monitors for data collection and presentation
|
19
|
+
- 2D and 3D animation (including video production)
|
20
|
+
- Tracing facilities
|
21
|
+
- Advanced statistical sampling
|
22
|
+
|
23
|
+
In contrast to some other Python DES packages, salabim does not require the use of yield statements for process control, making it more straightforward to use. Salabim has minimal requirements, especially when animation is disabled.
|
24
|
+
|
25
|
+
## Features and documentation
|
26
|
+
|
27
|
+
- Cross-platform support: salabim runs on Windows, macOS, Linux, iOS/iPadOS (Pythonista), and can even be used with "Python In Excel".
|
28
|
+
- Comprehensive documentation: Visit [www.salabim.org/manual](www.salabim.org/manual) for detailed documentation.
|
29
|
+
|
30
|
+
## Contributing and Reporting Issues
|
31
|
+
|
32
|
+
Contributions to salabim are highly appreciated! You can contribute by issuing a pull request or submitting an issue on [GitHub](https://github.com/salabim/salabim). Alternatively, you can use the [salabim Google user group](https://groups.google.com/g/salabim) for discussions and reporting issues.
|
33
|
+
|
34
|
+
## License
|
35
|
+
|
36
|
+
Salabim is licensed under the MIT License. For details, please refer to the [LICENSE](LICENSE) file.
|
37
|
+
|
38
|
+
## Support
|
39
|
+
|
40
|
+
Ruud van der Ham is available and willing to help users with issues related to the package and modeling in general. He also provides services such as code and model reviews, consultancy, and training.
|
41
|
+
|
42
|
+
## Getting Started
|
43
|
+
|
44
|
+
To start using salabim, visit [www.salabim.org](www.salabim.org) for installation instructions and further details.
|
45
|
+
|
46
|
+
## Badges
|
47
|
+
|
48
|
+
![PyPI](https://img.shields.io/pypi/v/salabim) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/salabim) ![PyPI - Implementation](https://img.shields.io/pypi/implementation/salabim)
|
49
|
+
|
50
|
+
![PyPI - License](https://img.shields.io/pypi/l/salabim) ![Black](https://img.shields.io/badge/code%20style-black-000000.svg)
|
51
|
+
![GitHub last commit](https://img.shields.io/github/last-commit/salabim/salabim)
|
@@ -0,0 +1,30 @@
|
|
1
|
+
[build-system]
|
2
|
+
requires = ["setuptools"]
|
3
|
+
build-backend = "setuptools.build_meta"
|
4
|
+
|
5
|
+
[project]
|
6
|
+
name = "salabim"
|
7
|
+
authors = [
|
8
|
+
{name = "Ruud van der Ham", email = "rt.van.der.ham@gmail.com"}
|
9
|
+
]
|
10
|
+
description = "salabim - discrete event simulation in Python"
|
11
|
+
version = "24.0.3"
|
12
|
+
readme = "README.md"
|
13
|
+
requires-python = ">=3.7"
|
14
|
+
dependencies = [
|
15
|
+
]
|
16
|
+
classifiers = [
|
17
|
+
"Development Status :: 5 - Production/Stable",
|
18
|
+
"License :: OSI Approved :: MIT License",
|
19
|
+
"Programming Language :: Python :: 3 :: Only"
|
20
|
+
]
|
21
|
+
[project.urls]
|
22
|
+
Homepage = "https://github.com/salabim/salabim"
|
23
|
+
Repository = "https://github.com/salabim/salabim"
|
24
|
+
|
25
|
+
|
26
|
+
[tool.setuptools]
|
27
|
+
packages = ["salabim"]
|
28
|
+
|
29
|
+
[tool.setuptools.package-data]
|
30
|
+
"*" = ["*.ttf"]
|
@@ -1,13 +1,13 @@
|
|
1
|
-
# _ _ _ ____ _ _ ___
|
2
|
-
# ___ __ _ | | __ _ | |__ (_) _ __ ___ |___ \ | || | / _ \ |___
|
3
|
-
# / __| / _` || | / _` || '_ \ | || '_ ` _ \ __) || || |_ | | | |
|
4
|
-
# \__ \| (_| || || (_| || |_) || || | | | | | / __/ |__ _| _ | |_| | _
|
5
|
-
# |___/ \__,_||_| \__,_||_.__/ |_||_| |_| |_| |_____| |_| (_) \___/ (_)|
|
6
|
-
#
|
1
|
+
# _ _ _ ____ _ _ ___ _____
|
2
|
+
# ___ __ _ | | __ _ | |__ (_) _ __ ___ |___ \ | || | / _ \ |___ /
|
3
|
+
# / __| / _` || | / _` || '_ \ | || '_ ` _ \ __) || || |_ | | | | |_ \
|
4
|
+
# \__ \| (_| || || (_| || |_) || || | | | | | / __/ |__ _| _ | |_| | _ ___) |
|
5
|
+
# |___/ \__,_||_| \__,_||_.__/ |_||_| |_| |_| |_____| |_| (_) \___/ (_)|____/
|
6
|
+
# discrete event simulation
|
7
7
|
#
|
8
8
|
# see www.salabim.org for more information, the documentation and license information
|
9
9
|
|
10
|
-
__version__ = "24.0.
|
10
|
+
__version__ = "24.0.3"
|
11
11
|
|
12
12
|
import heapq
|
13
13
|
import random
|
@@ -4072,7 +4072,7 @@ if Pythonista:
|
|
4072
4072
|
else:
|
4073
4073
|
if (env._step_pressed or (not env._paused)) and env._animate:
|
4074
4074
|
env.step()
|
4075
|
-
env._t = env._now
|
4075
|
+
env._t = env._now
|
4076
4076
|
if not env._current_component._suppress_pause_at_step:
|
4077
4077
|
env._step_pressed = False
|
4078
4078
|
if not env._paused:
|
@@ -13089,8 +13089,8 @@ class Environment:
|
|
13089
13089
|
)
|
13090
13090
|
AnimateImage(
|
13091
13091
|
image=lambda: self.salabim_logo(),
|
13092
|
-
x=lambda: self.modelname_width() +
|
13093
|
-
y=y
|
13092
|
+
x=lambda: self.modelname_width() + 10,
|
13093
|
+
y=y - 4,
|
13094
13094
|
offsety=5,
|
13095
13095
|
anchor="w",
|
13096
13096
|
width=61,
|
@@ -13100,7 +13100,7 @@ class Environment:
|
|
13100
13100
|
)
|
13101
13101
|
an = AnimateText(
|
13102
13102
|
text=" model",
|
13103
|
-
x=lambda: self.modelname_width() +
|
13103
|
+
x=lambda: self.modelname_width() + 72,
|
13104
13104
|
y=y,
|
13105
13105
|
text_anchor="w",
|
13106
13106
|
fontsize=18,
|
@@ -13428,11 +13428,8 @@ class Environment:
|
|
13428
13428
|
raise ValueError("incorrect xy_anchor", xy_anchor)
|
13429
13429
|
|
13430
13430
|
def salabim_logo(self):
|
13431
|
-
if "
|
13432
|
-
|
13433
|
-
return salabim_logo_red_white_200()
|
13434
|
-
else:
|
13435
|
-
return salabim_logo_red_black_200()
|
13431
|
+
if "salabim_logo_200" in globals(): # test for availabiitly, because of minimized version
|
13432
|
+
return salabim_logo_200()
|
13436
13433
|
else:
|
13437
13434
|
return Image.new("RGBA", (1, 1), (0, 0, 0, 0))
|
13438
13435
|
|
@@ -14994,7 +14991,7 @@ class Animate2dBase(DynamicClass):
|
|
14994
14991
|
if not self.screen_coordinates:
|
14995
14992
|
r *= self.env._scale
|
14996
14993
|
|
14997
|
-
r = min(r, abs(px[0] - px[1]) / 2, abs(py[0] - py[1]) / 2)
|
14994
|
+
r = min(r, abs(px[0] - px[1]) / 2, abs(py[0] - py[1]) / 2) # make sure the arc fits
|
14998
14995
|
|
14999
14996
|
if self.screen_coordinates:
|
15000
14997
|
nsteps = int(math.sqrt(r) * 6)
|
@@ -15021,8 +15018,8 @@ class Animate2dBase(DynamicClass):
|
|
15021
15018
|
while True:
|
15022
15019
|
sint = math.sin(math.radians(arc_angle))
|
15023
15020
|
cost = math.cos(math.radians(arc_angle))
|
15024
|
-
p.append(x2 + r*cost)
|
15025
|
-
p.append(y2 + r*sint)
|
15021
|
+
p.append(x2 + r * cost)
|
15022
|
+
p.append(y2 + r * sint)
|
15026
15023
|
if ended:
|
15027
15024
|
break
|
15028
15025
|
arc_angle += tarc_angle
|
@@ -23897,42 +23894,17 @@ def colornames() -> Dict:
|
|
23897
23894
|
return colornames.cached
|
23898
23895
|
|
23899
23896
|
|
23900
|
-
def
|
23901
|
-
|
23902
|
-
|
23903
|
-
import io
|
23904
|
-
import base64
|
23905
|
-
|
23906
|
-
if not hasattr(salabim_logo_red_white_200, "cached"):
|
23907
|
-
salabim_logo_red_white_200.cached = Image.open(
|
23908
|
-
io.BytesIO(
|
23909
|
-
base64.b64decode(
|
23910
|
-
""
|
23911
|
-
"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" # NOQA
|
23912
|
-
"".encode("ascii")
|
23913
|
-
)
|
23914
|
-
)
|
23915
|
-
).convert("RGBA")
|
23916
|
-
return salabim_logo_red_white_200.cached
|
23917
|
-
|
23918
|
-
|
23919
|
-
def salabim_logo_red_black_200():
|
23920
|
-
# picture created from salabim logo red black 200.png
|
23921
|
-
from PIL import Image
|
23922
|
-
import io
|
23923
|
-
import base64
|
23924
|
-
|
23925
|
-
if not hasattr(salabim_logo_red_black_200, "cached"):
|
23926
|
-
salabim_logo_red_black_200.cached = Image.open(
|
23897
|
+
def salabim_logo_200():
|
23898
|
+
if not hasattr(salabim_logo_200, "cached"):
|
23899
|
+
salabim_logo_200.cached = Image.open(
|
23927
23900
|
io.BytesIO(
|
23928
23901
|
base64.b64decode(
|
23929
|
-
""
|
23930
|
-
"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" # NOQA
|
23902
|
+
"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" # NOQA
|
23931
23903
|
"".encode("ascii")
|
23932
23904
|
)
|
23933
23905
|
)
|
23934
23906
|
).convert("RGBA")
|
23935
|
-
return
|
23907
|
+
return salabim_logo_200.cached
|
23936
23908
|
|
23937
23909
|
|
23938
23910
|
def hex_to_rgb(v):
|
@@ -0,0 +1,64 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: salabim
|
3
|
+
Version: 24.0.3
|
4
|
+
Summary: salabim - discrete event simulation in Python
|
5
|
+
Author-email: Ruud van der Ham <rt.van.der.ham@gmail.com>
|
6
|
+
Project-URL: Homepage, https://github.com/salabim/salabim
|
7
|
+
Project-URL: Repository, https://github.com/salabim/salabim
|
8
|
+
Classifier: Development Status :: 5 - Production/Stable
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
10
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
11
|
+
Requires-Python: >=3.7
|
12
|
+
Description-Content-Type: text/markdown
|
13
|
+
|
14
|
+
<img src="https://www.salabim.org/salabim_logo_payoff.png" />
|
15
|
+
|
16
|
+
</br>
|
17
|
+
|
18
|
+
Salabim is a Python library for object-oriented discrete event simulation (DES) and animation.
|
19
|
+
|
20
|
+
## Introduction
|
21
|
+
|
22
|
+
Discrete event simulation (DES) finds applications in various logistical domains including production facilities, warehousing, airports, hospitals, mining, materials handling, steel mills, and computer network analysis.
|
23
|
+
|
24
|
+
Salabim follows a well-proven and intuitive process description method similar to Tomas and Must.</br>The package provides:
|
25
|
+
|
26
|
+
- Components
|
27
|
+
- Queues
|
28
|
+
- Resources
|
29
|
+
- Stores
|
30
|
+
- States
|
31
|
+
- Monitors for data collection and presentation
|
32
|
+
- 2D and 3D animation (including video production)
|
33
|
+
- Tracing facilities
|
34
|
+
- Advanced statistical sampling
|
35
|
+
|
36
|
+
In contrast to some other Python DES packages, salabim does not require the use of yield statements for process control, making it more straightforward to use. Salabim has minimal requirements, especially when animation is disabled.
|
37
|
+
|
38
|
+
## Features and documentation
|
39
|
+
|
40
|
+
- Cross-platform support: salabim runs on Windows, macOS, Linux, iOS/iPadOS (Pythonista), and can even be used with "Python In Excel".
|
41
|
+
- Comprehensive documentation: Visit [www.salabim.org/manual](www.salabim.org/manual) for detailed documentation.
|
42
|
+
|
43
|
+
## Contributing and Reporting Issues
|
44
|
+
|
45
|
+
Contributions to salabim are highly appreciated! You can contribute by issuing a pull request or submitting an issue on [GitHub](https://github.com/salabim/salabim). Alternatively, you can use the [salabim Google user group](https://groups.google.com/g/salabim) for discussions and reporting issues.
|
46
|
+
|
47
|
+
## License
|
48
|
+
|
49
|
+
Salabim is licensed under the MIT License. For details, please refer to the [LICENSE](LICENSE) file.
|
50
|
+
|
51
|
+
## Support
|
52
|
+
|
53
|
+
Ruud van der Ham is available and willing to help users with issues related to the package and modeling in general. He also provides services such as code and model reviews, consultancy, and training.
|
54
|
+
|
55
|
+
## Getting Started
|
56
|
+
|
57
|
+
To start using salabim, visit [www.salabim.org](www.salabim.org) for installation instructions and further details.
|
58
|
+
|
59
|
+
## Badges
|
60
|
+
|
61
|
+
![PyPI](https://img.shields.io/pypi/v/salabim) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/salabim) ![PyPI - Implementation](https://img.shields.io/pypi/implementation/salabim)
|
62
|
+
|
63
|
+
![PyPI - License](https://img.shields.io/pypi/l/salabim) ![Black](https://img.shields.io/badge/code%20style-black-000000.svg)
|
64
|
+
![GitHub last commit](https://img.shields.io/github/last-commit/salabim/salabim)
|
@@ -0,0 +1,22 @@
|
|
1
|
+
README.md
|
2
|
+
pyproject.toml
|
3
|
+
salabim/DejaVuSansMono.ttf
|
4
|
+
salabim/calibri.ttf
|
5
|
+
salabim/mplus-1m-regular.ttf
|
6
|
+
salabim/salabim.py
|
7
|
+
salabim.egg-info/PKG-INFO
|
8
|
+
salabim.egg-info/SOURCES.txt
|
9
|
+
salabim.egg-info/dependency_links.txt
|
10
|
+
salabim.egg-info/top_level.txt
|
11
|
+
tests/test_cap_now.py
|
12
|
+
tests/test_componentgenerator.py
|
13
|
+
tests/test_datetime.py
|
14
|
+
tests/test_distributions.py
|
15
|
+
tests/test_misc.py
|
16
|
+
tests/test_monitor.py
|
17
|
+
tests/test_process.py
|
18
|
+
tests/test_queue.py
|
19
|
+
tests/test_salabim.py
|
20
|
+
tests/test_state.py
|
21
|
+
tests/test_store.py
|
22
|
+
tests/test_timeunit.py
|
salabim-24.0.3/setup.cfg
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
import salabim as sim
|
2
|
+
import pytest
|
3
|
+
|
4
|
+
def test():
|
5
|
+
class X(sim.Component):
|
6
|
+
def process(self):
|
7
|
+
with pytest.raises(ValueError):
|
8
|
+
yield self.hold(-1)
|
9
|
+
assert env.now() == 0
|
10
|
+
yield self.hold(-1, cap_now=True)
|
11
|
+
assert env.now() == 0
|
12
|
+
|
13
|
+
class Y(sim.Component):
|
14
|
+
def process(self):
|
15
|
+
now = env.now()
|
16
|
+
yield self.hold(-1)
|
17
|
+
assert env.now() == now
|
18
|
+
|
19
|
+
env = sim.Environment(yieldless=False)
|
20
|
+
X()
|
21
|
+
|
22
|
+
env.run(-1, cap_now=True)
|
23
|
+
with sim.cap_now():
|
24
|
+
Y()
|
25
|
+
env.run(1)
|
26
|
+
|
27
|
+
if __name__ == "__main__":
|
28
|
+
pytest.main(["-vv", "-s", __file__])
|