salabim 24.0.8__tar.gz → 24.0.9__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (26) hide show
  1. {salabim-24.0.8 → salabim-24.0.9}/PKG-INFO +1 -1
  2. {salabim-24.0.8 → salabim-24.0.9}/pyproject.toml +1 -1
  3. {salabim-24.0.8 → salabim-24.0.9}/salabim/salabim.py +49 -20
  4. {salabim-24.0.8 → salabim-24.0.9}/salabim.egg-info/PKG-INFO +1 -1
  5. {salabim-24.0.8 → salabim-24.0.9}/README.md +0 -0
  6. {salabim-24.0.8 → salabim-24.0.9}/salabim/DejaVuSansMono.ttf +0 -0
  7. {salabim-24.0.8 → salabim-24.0.9}/salabim/LICENSE.txt +0 -0
  8. {salabim-24.0.8 → salabim-24.0.9}/salabim/__init__.py +0 -0
  9. {salabim-24.0.8 → salabim-24.0.9}/salabim/calibri.ttf +0 -0
  10. {salabim-24.0.8 → salabim-24.0.9}/salabim/mplus-1m-regular.ttf +0 -0
  11. {salabim-24.0.8 → salabim-24.0.9}/salabim.egg-info/SOURCES.txt +0 -0
  12. {salabim-24.0.8 → salabim-24.0.9}/salabim.egg-info/dependency_links.txt +0 -0
  13. {salabim-24.0.8 → salabim-24.0.9}/salabim.egg-info/top_level.txt +0 -0
  14. {salabim-24.0.8 → salabim-24.0.9}/setup.cfg +0 -0
  15. {salabim-24.0.8 → salabim-24.0.9}/tests/test salabim.py +0 -0
  16. {salabim-24.0.8 → salabim-24.0.9}/tests/test_cap_now.py +0 -0
  17. {salabim-24.0.8 → salabim-24.0.9}/tests/test_componentgenerator.py +0 -0
  18. {salabim-24.0.8 → salabim-24.0.9}/tests/test_datetime.py +0 -0
  19. {salabim-24.0.8 → salabim-24.0.9}/tests/test_distributions.py +0 -0
  20. {salabim-24.0.8 → salabim-24.0.9}/tests/test_misc.py +0 -0
  21. {salabim-24.0.8 → salabim-24.0.9}/tests/test_monitor.py +0 -0
  22. {salabim-24.0.8 → salabim-24.0.9}/tests/test_process.py +0 -0
  23. {salabim-24.0.8 → salabim-24.0.9}/tests/test_queue.py +0 -0
  24. {salabim-24.0.8 → salabim-24.0.9}/tests/test_state.py +0 -0
  25. {salabim-24.0.8 → salabim-24.0.9}/tests/test_store.py +0 -0
  26. {salabim-24.0.8 → salabim-24.0.9}/tests/test_timeunit.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: salabim
3
- Version: 24.0.8
3
+ Version: 24.0.9
4
4
  Summary: salabim - discrete event simulation in Python
5
5
  Author-email: Ruud van der Ham <rt.van.der.ham@gmail.com>
6
6
  Project-URL: Homepage, https://salabim.org
@@ -8,7 +8,7 @@ authors = [
8
8
  {name = "Ruud van der Ham", email = "rt.van.der.ham@gmail.com"}
9
9
  ]
10
10
  description = "salabim - discrete event simulation in Python"
11
- version = "24.0.8"
11
+ version = "24.0.9"
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.7"
14
14
  dependencies = [
@@ -1,13 +1,13 @@
1
1
  # _ _ _ ____ _ _ ___ ___
2
- # ___ __ _ | | __ _ | |__ (_) _ __ ___ |___ \ | || | / _ \ ( _ )
3
- # / __| / _` || | / _` || '_ \ | || '_ ` _ \ __) || || |_ | | | | / _ \
4
- # \__ \| (_| || || (_| || |_) || || | | | | | / __/ |__ _| _ | |_| | _ | (_) |
5
- # |___/ \__,_||_| \__,_||_.__/ |_||_| |_| |_| |_____| |_| (_) \___/ (_) \___/
2
+ # ___ __ _ | | __ _ | |__ (_) _ __ ___ |___ \ | || | / _ \ / _ \
3
+ # / __| / _` || | / _` || '_ \ | || '_ ` _ \ __) || || |_ | | | | | (_) |
4
+ # \__ \| (_| || || (_| || |_) || || | | | | | / __/ |__ _| _ | |_| | _ \__, |
5
+ # |___/ \__,_||_| \__,_||_.__/ |_||_| |_| |_| |_____| |_| (_) \___/ (_) /_/
6
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.8"
10
+ __version__ = "24.0.9"
11
11
 
12
12
  import heapq
13
13
  import random
@@ -42,6 +42,7 @@ import datetime
42
42
  import urllib.request
43
43
  import urllib.error
44
44
  import base64
45
+ import zipfile
45
46
 
46
47
  from pathlib import Path
47
48
 
@@ -71,8 +72,7 @@ def a_log(*args):
71
72
  print(*args, file=a_logfile)
72
73
 
73
74
 
74
- class g:
75
- ...
75
+ class g: ...
76
76
 
77
77
 
78
78
  if PythonInExcel:
@@ -3384,7 +3384,6 @@ class _StateMonitor(Monitor):
3384
3384
  self.parent.set(value)
3385
3385
 
3386
3386
 
3387
-
3388
3387
  class _SystemMonitor(Monitor):
3389
3388
  @property
3390
3389
  def value(self) -> Any:
@@ -3444,6 +3443,10 @@ class DynamicClass:
3444
3443
  if callable(c):
3445
3444
  if inspect.isfunction(c):
3446
3445
  nargs = c.__code__.co_argcount
3446
+ if c.__defaults__ is not None:
3447
+ c.__defaults__ = tuple(self if x == object else x for x in c.__defaults__) # indicate that object refers to animation object itself
3448
+ nargs -= len(c.__defaults__)
3449
+
3447
3450
  if nargs == 0:
3448
3451
  return lambda t: c()
3449
3452
  if nargs == 1:
@@ -3456,7 +3459,7 @@ class DynamicClass:
3456
3459
  def getattribute_spec(self, attr):
3457
3460
  """
3458
3461
  special version of getattribute.
3459
- When it's dynamic it will return the value in case of a constan or a parameterless function
3462
+ When it's dynamic it will return the value in case of a constant or a parameterless function
3460
3463
  Used only in AnimateCombined
3461
3464
  """
3462
3465
 
@@ -8323,7 +8326,6 @@ by adding:
8323
8326
 
8324
8327
  for store in to_stores:
8325
8328
  self.enter(store._to_store_requesters)
8326
-
8327
8329
  self.status._value = requesting
8328
8330
  self._to_store_item = item
8329
8331
  self._to_store_priority = priority
@@ -9017,7 +9019,7 @@ by adding:
9017
9019
  self.status._value = waiting
9018
9020
  self._reschedule(scheduled_time, schedule_priority, urgent, "wait", cap_now)
9019
9021
  else:
9020
- return # ***
9022
+ return # ***
9021
9023
  if self.env._yieldless:
9022
9024
  if self is self.env._current_component:
9023
9025
  self.env._glet.switch()
@@ -10244,12 +10246,12 @@ class Environment:
10244
10246
 
10245
10247
  self.an_clocktext()
10246
10248
 
10247
- ap_parameters= [parameter for parameter in inspect.signature(self.animation_parameters).parameters]
10248
- ap_kwargs={}
10249
- for k,v in list(kwargs.items()):
10249
+ ap_parameters = [parameter for parameter in inspect.signature(self.animation_parameters).parameters]
10250
+ ap_kwargs = {}
10251
+ for k, v in list(kwargs.items()):
10250
10252
  if k in ap_parameters:
10251
- del kwargs[k]
10252
- ap_kwargs[k]=v
10253
+ del kwargs[k]
10254
+ ap_kwargs[k] = v
10253
10255
  if ap_kwargs:
10254
10256
  self.animation_parameters(**ap_kwargs)
10255
10257
 
@@ -15651,6 +15653,12 @@ class Animate:
15651
15653
 
15652
15654
  This may be either a filename or a PIL image
15653
15655
 
15656
+ if image is a string consisting of a zipfile-name, a bar (|) and a filename,
15657
+ the given filename will be read from the specified zip archive, e.g
15658
+
15659
+ sim.AnimateImage(image="cars.zip|bmw.png")
15660
+
15661
+
15654
15662
  text : str, tuple or list
15655
15663
  the text to be displayed
15656
15664
 
@@ -16191,6 +16199,11 @@ class Animate:
16191
16199
 
16192
16200
  This may be either a filename or a PIL image (default see below)
16193
16201
 
16202
+ if image is a string consisting of a zipfile-name, a bar (|) and a filename,
16203
+ the given filename will be read from the specified zip archive, e.g
16204
+
16205
+ sim.AnimateImage(image="cars.zip|bmw.png")
16206
+
16194
16207
  text : str
16195
16208
  the text to be displayed (default see below)
16196
16209
 
@@ -19352,6 +19365,11 @@ class AnimateImage(Animate2dBase):
19352
19365
  if used as function or method or in direct assigmnent,
19353
19366
  the image should be a file containing an image or a PIL image
19354
19367
 
19368
+ if image is a string consisting of a zipfile-name, a bar (|) and a filename,
19369
+ the given filename will be read from the specified zip archive, e.g
19370
+
19371
+ sim.AnimateImage(image="cars.zip|bmw.png")
19372
+
19355
19373
  x : float
19356
19374
  position of anchor point (default 0)
19357
19375
 
@@ -26680,7 +26698,7 @@ class ImageContainer:
26680
26698
  can_animate(try_only=True) # to load PIL
26681
26699
 
26682
26700
  if isinstance(spec, (str, Path)):
26683
- spec=str(spec) # to process Path correctly
26701
+ spec = str(spec) # to process Path correctly
26684
26702
 
26685
26703
  if spec == "":
26686
26704
  im = Image.new("RGBA", (1, 1), (0, 0, 0, 0))
@@ -26703,7 +26721,18 @@ class ImageContainer:
26703
26721
  except Exception as e:
26704
26722
  raise FileNotFoundError(f"could not open URL {spec}: {e}")
26705
26723
  else:
26706
- im = Image.open(spec)
26724
+ if "|" in spec:
26725
+ zip_part, image_part = spec.split("|")
26726
+ zip_part = zip_part.strip()
26727
+ if zip_part.lower().endswith(".zip"):
26728
+ image_part = image_part.strip()
26729
+ with zipfile.ZipFile(zip_part) as ziphandle:
26730
+ image_data = ziphandle.read(image_part)
26731
+ im = Image.open(io.BytesIO(image_data))
26732
+ else:
26733
+ im = Image.open(spec)
26734
+ else:
26735
+ im = Image.open(spec)
26707
26736
  else: # it's a PIL Image, for sure
26708
26737
  im = spec
26709
26738
 
@@ -27090,8 +27119,7 @@ class redirect_stdout:
27090
27119
  self.mode = mode
27091
27120
  sys.stdout = self
27092
27121
 
27093
- def __enter__(self):
27094
- ...
27122
+ def __enter__(self): ...
27095
27123
 
27096
27124
  def close(self):
27097
27125
  self.flush()
@@ -27119,6 +27147,7 @@ reset()
27119
27147
  set_environment_aliases()
27120
27148
 
27121
27149
  if __name__ == "__main__":
27150
+
27122
27151
  sys.path.insert(0, str(Path(__file__).parent / ".." / "misc"))
27123
27152
  try:
27124
27153
  import salabim_exp
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: salabim
3
- Version: 24.0.8
3
+ Version: 24.0.9
4
4
  Summary: salabim - discrete event simulation in Python
5
5
  Author-email: Ruud van der Ham <rt.van.der.ham@gmail.com>
6
6
  Project-URL: Homepage, https://salabim.org
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes