salabim 24.0.2__tar.gz → 24.0.3.1__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- salabim-24.0.3.1/PKG-INFO +64 -0
- salabim-24.0.3.1/README.md +51 -0
- salabim-24.0.3.1/pyproject.toml +30 -0
- salabim-24.0.3.1/salabim/LICENSE.txt +20 -0
- {salabim-24.0.2 → salabim-24.0.3.1}/salabim/changelog.txt +11 -1
- {salabim-24.0.2 → salabim-24.0.3.1}/salabim/salabim.py +21 -49
- salabim-24.0.3.1/salabim.egg-info/PKG-INFO +64 -0
- salabim-24.0.3.1/salabim.egg-info/SOURCES.txt +24 -0
- salabim-24.0.3.1/setup.cfg +4 -0
- salabim-24.0.3.1/tests/test_cap_now.py +28 -0
- salabim-24.0.3.1/tests/test_componentgenerator.py +198 -0
- salabim-24.0.3.1/tests/test_datetime.py +108 -0
- salabim-24.0.3.1/tests/test_distributions.py +202 -0
- salabim-24.0.3.1/tests/test_misc.py +53 -0
- salabim-24.0.3.1/tests/test_monitor.py +644 -0
- salabim-24.0.3.1/tests/test_process.py +26 -0
- salabim-24.0.3.1/tests/test_queue.py +184 -0
- salabim-24.0.3.1/tests/test_salabim.py +5 -0
- salabim-24.0.3.1/tests/test_state.py +115 -0
- salabim-24.0.3.1/tests/test_store.py +17 -0
- salabim-24.0.3.1/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.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.1}/salabim/DejaVuSansMono.ttf +0 -0
- {salabim-24.0.2 → salabim-24.0.3.1}/salabim/calibri.ttf +0 -0
- {salabim-24.0.2 → salabim-24.0.3.1}/salabim/mplus-1m-regular.ttf +0 -0
- {salabim-24.0.2 → salabim-24.0.3.1}/salabim.egg-info/dependency_links.txt +0 -0
- {salabim-24.0.2 → salabim-24.0.3.1}/salabim.egg-info/top_level.txt +0 -0
@@ -0,0 +1,64 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: salabim
|
3
|
+
Version: 24.0.3.1
|
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,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.1"
|
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", "*.txt"]
|
@@ -0,0 +1,20 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (C) 2017-2024 Ruud van der Ham, ruud@salabim.org
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
7
|
+
the Software without restriction, including without limitation the rights to
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
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, FITNESS
|
17
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -1,5 +1,15 @@
|
|
1
1
|
salabim changelog
|
2
2
|
|
3
|
+
version 24.0.3 2024-05-01
|
4
|
+
==========================
|
5
|
+
Internal organization completely changed. Now uses git for version
|
6
|
+
control.
|
7
|
+
|
8
|
+
Changed the styling of the salabim logo, which will be visible on the
|
9
|
+
website,readme, manual.
|
10
|
+
Also the Environment.modelname() method now shows the new styling.
|
11
|
+
|
12
|
+
|
3
13
|
version 24.0.2 2024-03-15
|
4
14
|
==========================
|
5
15
|
Added functionality (0)
|
@@ -9,7 +19,7 @@ Salabim now also supports rounded rectangles, which can result in more pleasing
|
|
9
19
|
Therefore, the spec argument (tuple) of sim.AnimateRectangle now has an optional fifth item,
|
10
20
|
which is the radius of the corners of the rounded rectangle.
|
11
21
|
|
12
|
-
The same holds for the rectangle0 and rectangle1 (tuple)
|
22
|
+
The same holds for the rectangle0 and rectangle1 (tuple) parameters of sim.Animate.
|
13
23
|
|
14
24
|
Note that if the radius is too big, the radius will be adjusted.
|
15
25
|
|
@@ -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.1
|
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,24 @@
|
|
1
|
+
README.md
|
2
|
+
pyproject.toml
|
3
|
+
salabim/DejaVuSansMono.ttf
|
4
|
+
salabim/LICENSE.txt
|
5
|
+
salabim/calibri.ttf
|
6
|
+
salabim/changelog.txt
|
7
|
+
salabim/mplus-1m-regular.ttf
|
8
|
+
salabim/salabim.py
|
9
|
+
salabim.egg-info/PKG-INFO
|
10
|
+
salabim.egg-info/SOURCES.txt
|
11
|
+
salabim.egg-info/dependency_links.txt
|
12
|
+
salabim.egg-info/top_level.txt
|
13
|
+
tests/test_cap_now.py
|
14
|
+
tests/test_componentgenerator.py
|
15
|
+
tests/test_datetime.py
|
16
|
+
tests/test_distributions.py
|
17
|
+
tests/test_misc.py
|
18
|
+
tests/test_monitor.py
|
19
|
+
tests/test_process.py
|
20
|
+
tests/test_queue.py
|
21
|
+
tests/test_salabim.py
|
22
|
+
tests/test_state.py
|
23
|
+
tests/test_store.py
|
24
|
+
tests/test_timeunit.py
|
@@ -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__])
|