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.
Files changed (34) hide show
  1. salabim-24.0.3.1/PKG-INFO +64 -0
  2. salabim-24.0.3.1/README.md +51 -0
  3. salabim-24.0.3.1/pyproject.toml +30 -0
  4. salabim-24.0.3.1/salabim/LICENSE.txt +20 -0
  5. {salabim-24.0.2 → salabim-24.0.3.1}/salabim/changelog.txt +11 -1
  6. {salabim-24.0.2 → salabim-24.0.3.1}/salabim/salabim.py +21 -49
  7. salabim-24.0.3.1/salabim.egg-info/PKG-INFO +64 -0
  8. salabim-24.0.3.1/salabim.egg-info/SOURCES.txt +24 -0
  9. salabim-24.0.3.1/setup.cfg +4 -0
  10. salabim-24.0.3.1/tests/test_cap_now.py +28 -0
  11. salabim-24.0.3.1/tests/test_componentgenerator.py +198 -0
  12. salabim-24.0.3.1/tests/test_datetime.py +108 -0
  13. salabim-24.0.3.1/tests/test_distributions.py +202 -0
  14. salabim-24.0.3.1/tests/test_misc.py +53 -0
  15. salabim-24.0.3.1/tests/test_monitor.py +644 -0
  16. salabim-24.0.3.1/tests/test_process.py +26 -0
  17. salabim-24.0.3.1/tests/test_queue.py +184 -0
  18. salabim-24.0.3.1/tests/test_salabim.py +5 -0
  19. salabim-24.0.3.1/tests/test_state.py +115 -0
  20. salabim-24.0.3.1/tests/test_store.py +17 -0
  21. salabim-24.0.3.1/tests/test_timeunit.py +122 -0
  22. salabim-24.0.2/MANIFEST.in +0 -5
  23. salabim-24.0.2/PKG-INFO +0 -65
  24. salabim-24.0.2/salabim/README.md +0 -38
  25. salabim-24.0.2/salabim/__init__.py +0 -2
  26. salabim-24.0.2/salabim.egg-info/PKG-INFO +0 -65
  27. salabim-24.0.2/salabim.egg-info/SOURCES.txt +0 -15
  28. salabim-24.0.2/setup.cfg +0 -7
  29. salabim-24.0.2/setup.py +0 -75
  30. {salabim-24.0.2 → salabim-24.0.3.1}/salabim/DejaVuSansMono.ttf +0 -0
  31. {salabim-24.0.2 → salabim-24.0.3.1}/salabim/calibri.ttf +0 -0
  32. {salabim-24.0.2 → salabim-24.0.3.1}/salabim/mplus-1m-regular.ttf +0 -0
  33. {salabim-24.0.2 → salabim-24.0.3.1}/salabim.egg-info/dependency_links.txt +0 -0
  34. {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) paramaters of sim.Animate.
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
- # Discrete event simulation in Python
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.2"
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() + 8,
13093
- y=y + 1,
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() + 69,
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 "salabim_logo_red_white_200" in globals(): # test for availabiitly, because of minimized version
13432
- if self.is_dark("bg"):
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) # make sure the arc fits
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 salabim_logo_red_white_200():
23901
- # picture created from salabim logo red white 200.png
23902
- from PIL import Image
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 salabim_logo_red_black_200.cached
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,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -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__])