[Python-announce] Salabim 23.2.0 released

2023-07-04 Thread Ruud van der Ham
This is to announce the release of salabim 23.2.0 .
Salabim is a discrete event simulation package that has applications in
logistics, communications, production, mining, hospital operations, etc.
It supports powerful realtime 2D and 3D animations, monitoring, statistical
sampling functions, ...
In contrast to SimPy, salabim is build around dynamic objects (components)
that interact with each other.
Up to now, that was done with generator functions (coroutines), like
class Car(sim.Component):
def process(self):
yield self.hold(5)
pump.activate()
yield self.passivate()
But as from this version, salabim processes can also run as greenlets, so
yields are not required anymore:
class Car(sim.Component):
def process(self):
self.hold(5)
pump.activate()
self.passivate()
This makes modeling much more natural and less error prone.

For more information, including the full documentation, changelog, etc.
goto www.salabim.org .
___
Python-announce-list mailing list -- python-announce-list@python.org
To unsubscribe send an email to python-announce-list-le...@python.org
https://mail.python.org/mailman3/lists/python-announce-list.python.org/
Member address: arch...@mail-archive.com


[Python-announce] Python 3.10 for iPads and iPhone

2023-04-30 Thread Ruud van der Ham
This is to announce that Pythonista 3.4 is released.
This it the successor of the Pythonista 3.3 app that was not maintained for
years and still on Python 3.6 with outdate packages.
Now you can enjoy a very nice IDE/debugger with modern Python with many
popular packages, like numpy, pandas, matplotlib, Flask on your mobile
device.
You can find it in the Apple app store under Pythonista 3. Or goto
http://omz-software.com/pythonista/
for more information.

Posted by a happy user, not the developer.
___
Python-announce-list mailing list -- python-announce-list@python.org
To unsubscribe send an email to python-announce-list-le...@python.org
https://mail.python.org/mailman3/lists/python-announce-list.python.org/
Member address: arch...@mail-archive.com


[Python-announce] unrepl: a new module to translate REPL code fragments to proper Python code

2022-08-12 Thread Ruud van der Ham
In many blogs, articles, books, etc. code if often presented as REPL code
fragments, like
>>> a = 1
>>> b = 2
>>> a + b
3

If you actually want to run that code, you have to remove the >>> (and ...)
and add a print  statement.

With unrepl, you can do that just by copying the above code to the
clipboard and run repl.py.
The clipboard will then be changed to
a = 1
b = 2
_ = a + b; print(_) # a + b
#  3

And you can just run this code!

Unrepl can be used as a command line tool but also a module.

Instructions to create a hotkey to execute the translation of the clipboard
under Windows are in the readme.md file.

You can find unrepl (including an extensive readme) on GitHub:
www.github.com/salabim/unrepl
or you can install it from PyPI with
pip install unrepl
___
Python-announce-list mailing list -- python-announce-list@python.org
To unsubscribe send an email to python-announce-list-le...@python.org
https://mail.python.org/mailman3/lists/python-announce-list.python.org/
Member address: arch...@mail-archive.com


[Python-announce] New module pil_printer released * correction*

2022-07-25 Thread Ruud van der Ham
I have just released a new module, called pil_printer:

With the pil_printer module it is possible to print a PIL image or several
PIL images to a printer under Windows.
The most common use case is to print JPG or PNG file(s) at an exact point
with an exact scaling.
Most graphics programs don’t support exact placement and the user has
nearly always to manually control this placement/scaling for each image.

The package can be downloaded here:

github.com/salabim/pil_printer
___
Python-announce-list mailing list -- python-announce-list@python.org
To unsubscribe send an email to python-announce-list-le...@python.org
https://mail.python.org/mailman3/lists/python-announce-list.python.org/
Member address: arch...@mail-archive.com


[Python-announce] New module pil_printer released

2022-07-25 Thread Ruud van der Ham
I have just released a new module, called pil_printer:

With the pil_printer module it is possible to print a PIL image or several
PIL images to a printer under Windows.
The most common use case is to print JPG or PNG file(s) at an exact point
with an exact scaling.
Most graphics programs don’t support exact placement and the user has
nearly always to manually control this placement/scaling for each image.

The package can be downloaded here:

github.com/salabim/pil_printerIt is not (yet) available on PyPI.
___
Python-announce-list mailing list -- python-announce-list@python.org
To unsubscribe send an email to python-announce-list-le...@python.org
https://mail.python.org/mailman3/lists/python-announce-list.python.org/
Member address: arch...@mail-archive.com


Ycecream 1.3.5 released

2021-04-21 Thread Ruud van der Ham
I am pleased to announce the release of *ycecrean* 1.3.5.

Do you ever use `print()` or `log()` to debug your code? If so,  *ycecream*,
or `y` for short, will make printing debug information a lot sweeter.
And on top of that, you get some basic benchmarking functionality.

*Ycecream* is available on GitHub: www.github.com/salabim/ycecream and on
PyPI.

For this who know the *icecream* package, here's an overview of the
differences:


characteristicycecream IceCream

colourize no   yes (can be
disabled)
platform  Python 2.7, >=3.6, PyPy  Python 2.7,
>=3.5, PyPy
default name  yic
dependencies  none many
number of files   1several
usable without installation   yes  no
can be used as a decoratoryes  no
can be used as a context manager  yes  no
PEP8 (Pythonic) API   yes  no
sorts dicts   no by default, optional  yes
supports compact, indent and
depth parameters of pprintyes  no
use from a REPL   limited functionalityno
external configurationvia json fileno
observes line_length correctlyyes  no
indentation   4 blanks (overridable)   dependent on
length of prefix
forking and cloning   yes  no
test script   pytest   unittest


Recent changes:

version 1.3.5  2021-04-20
=
New functionality (0)
-
The attribute delta can now be used as an ordinary attribute,
including propagation and initialization from json.

New tests (0)
-
Tests for propagation of attributes added.
Tests for delta setting/reading added.

Bugfix (0)
--
The recently introduced show_traceback facility didn't work under Python
2.7. Fixed.

version 1.3.4  2021-04-16
=
New functionality (0)
-
Introduced a new attribute: show_traceback / st .

When show_traceback is True, the ordinary output of y() will be followed by
a printout of the
traceback, similar to an error traceback.

from ycecream import y
y.show_traceback=True
def x():
y()

x()
x()
prints
y| #4 in x()
Traceback (most recent call last)
File "c:\Users\Ruud\Dropbox (Personal)\Apps\Python
Ruud\ycecream\x.py", line 6, in 
x()
File "c:\Users\Ruud\Dropbox (Personal)\Apps\Python
Ruud\ycecream\x.py", line 4, in x
y()
y| #4 in x()
Traceback (most recent call last)
File "c:\Users\Ruud\Dropbox (Personal)\Apps\Python
Ruud\ycecream\x.py", line 7, in 
x()
File "c:\Users\Ruud\Dropbox (Personal)\Apps\Python
Ruud\ycecream\x.py", line 4, in x
y()

The show_traceback functionality is also available when y is used as a
decorator or context manager.

Documentation change (0)

The description of ycecream on PyPI is now (nearly) the same as the
readme.md file.

version 1.3.3  2021-04-14
=
New functionality (0)
-
Introduced a new attribute: enforce_line_length / ell .
If True, all output lines will be truncated to the current line_length.
This holds for all output lines, including as_str output.
Example:
y.configure(enforce_line_length=True, line_length=15)
s = "abcdefghijklmnopqrstuvwxyz"
y(s)
y(show_time=True)
prints something like
|y|
|s: 'abcdefg
|y| #35 @ 08:14:

New functionality (0)
-
New shorthand alternatives:
sdi  for sort_dicts
ifor indent
de   for depth
wi   for wrap_indent
ell  for enforce_line_length

version 1.3.2  2021-04-07
=
New functionality (0)
-
y.new() has a new parameter ignore_json that makes it possible to ignore
the ycecream.json file.
Thus, if you don't want to use any attributes that are overridden by an
ycecream.json file:
y = y.new(ignore_json=True)

Internal changes (0)

The PY2/PY3 specific code is clustered now to make maintenance easier.
In the pprint 3.8 module, the PrettyPrinter class is not even created for
PY2,
so no more need to disable specifically several dispatch calls.


version 1.3.1  2021-04-02
=
New functionality (0)
-
The ycecream.json file may now also contain shorthand names,
like p for prefix.


Reannouncing ycecream 1.1.4

2021-03-03 Thread Ruud van der Ham
The announcement yesterday wasn’t formatted properly, so I repost it,
hopefully, more legible.

This is to announce the release of version 1.1.4 of ycecream, a package to
help printing (debug) information in a more intuitive and more versatile
way than just print statements. And you get simple benchmarking (timing)
functionality as a bonus.

The package can be installed from PyPI with pip install ycecream or
directly from GitHub: https://github.com/salabim/ycecream
Short introduction Inspect variables and expressions

Have you ever printed variables or expressions to debug your program? If
you’ve ever typed something like

print(add2(1000))

or the more thorough

print("add2(1000)", add2(1000)))
`

or (for Python >= 3.8 only):

print(f"{add2(1000) =}")

then y() is here to help. With arguments, y() inspects itself and prints
both its own arguments and the values of those arguments.

from ycecream import y
def add2(i):
return i + 2
y(add2(1000))

prints

y| add2(1000): 1002

Similarly,

from ycecream import y
class X:
a = 3
world = {"EN": "world", "NL": "wereld", "FR": "monde", "DE": "Welt"}
y(world, X.a)

prints

y| world: {"EN": "world", "NL": "wereld", "FR": "monde", "DE": "Welt"}, X.a: 3

Just give y() a variable or expression and you’re done. Sweet, isn’t it?
Inspect execution

Have you ever used print() to determine which parts of your program are
executed, and in which order they’re executed? For example, if you’ve ever
added print statements to debug code like

def add2(i):
print("enter")
result = i + 2
print("exit")
return result

then y() helps here, too. Without arguments, y() inspects itself and prints
the calling filename, line number, and parent function.

from ycecream import y
def add2(i):
y()
result = i + 2
y()
return result
y(add2(1000))

prints something like

y| x.py:3 in add2()
y| x.py:5 in add2()
y| add2(1000): 1002

Just call y() and you’re done. Isn’t that sweet?
Debug entry and exit of function calls

When you apply y as a decorator to a function or method, both the entry and
exit can be tracked. The (keyword) arguments passed will be shown and upon
return, the return value.

from ycecream import y
@y
def mul(x, y):
return x * y
print(mul(5, 7))

prints

y| called mul(5, 7)
y| returned 35 from mul(5, 7) in 0.06 seconds
35

Benchmarking with ycecream

If you decorate a function or method with y, you will be offered the
duration between entry and exit (in seconds) as a bonus.

That opens the door to simple benchmarking, like:

from ycecream import y
import time
@y(show_enter=False)
def do_sort(n):
x = sorted(list(range(10 ** n)))
for i in range(8):
do_sort(i)

the ouput will show the effects of the population size on the sort speed:

y| returned None from do_sort(0) in 0.11 seconds
y| returned None from do_sort(1) in 0.32 seconds
y| returned None from do_sort(2) in 0.10 seconds
y| returned None from do_sort(3) in 0.42 seconds
y| returned None from do_sort(4) in 0.000716 seconds
y| returned None from do_sort(5) in 0.004501 seconds
y| returned None from do_sort(6) in 0.049840 seconds
y| returned None from do_sort(7) in 0.490177 seconds

Acknowledgement

The ycecream pacakage is a fork of the IceCream package. See
https://github.com/gruns/icecream

Many thanks to the author Ansgar Grunseid / grunseid.com /
gruns...@gmail.com
Differences with IceCream

The ycecream module is a fork of IceCream with a number of differences:

   - ycecream can’t colourize the output (a nice feature of IceCream)
   - ycecream runs only on Python 3.6 and higher. (IceCream runs even on
   Python 2.7).
   - ycecream uses y as the standard interface, whereas IceCream uses ic.
   For compatibility, ycecream also supports ic.
   - yceceam has no dependencies. IceCream on the other hand has many
   (asttoken, colorize, pyglets, …).
   - ycecream is just one .py file, whereas IceCream consists of a number
   of .py files. That makes it possible to use ycecream without even (pip)
   installing it. Just copy ycecream.py to your work directory.
   - ycecream can be used as a decorator of a function showing the enter
   and/or exit event as well as the duration.
   - ycecream can be used as a context manager to benchamrk code.
   - ycecream has a PEP8 (Pythonic) API. Less important for the user, the
   actual code is also (more) PEP8 compatible. IceCream does not follow the
   PEP8 standard.
   - ycecream uses a completely different API to configure (rather than
   IceCream’s configureOutput method)
   - ycecream time showing can be controlled independently from context
   showing
   - ycecream can optionally show a delta (time since start of the program)
   - ycecream does not sort dicts by default. This behaviour can be
   controlled with the sort_dict parameter. (This is implemented by including
   the pprint 3.8 source code)
   - ycecream can be configured from a json file, thus overriding some or
   all default settings at import time.
   - 

Announcing ycecream 1.1.4

2021-03-03 Thread Ruud van der Ham
This is to announce the release of version 1.1.4 of *ycecream*, a package
to help printing (debug) information in a more intuitive and more versatile
way than just print statements. And you get simple benchmarking (timing)
functionality as a bonus.

The package can be installed from PyPI with *pip install ycecream* or
directly from GitHub: https://github.com/salabim/ycecream

*Short introduction:*

Inspect variables and expressions
Have you ever printed variables or expressions to debug your program? If
you've ever typed something like
*print(add2(1000))*
or the more thorough
*print("add2(1000)", add2(1000)))*
or (for Python >= 3.8 only):
*print(f"{add2(1000) =}")*
then y() is here to help. With arguments, y() inspects itself and prints
both its own arguments and the values of those arguments.





*   from ycecream import y   def add2(i):return i + 2
y(add2(1000))*prints
*y| add2(1000): 1002*

Similarly,





*from ycecream import yclass X:a = 3world = {"EN":
"world", "NL": "wereld", "FR": "monde", "DE": "Welt"}y(world, X.a)*
prints

*y| world: {"EN": "world", "NL": "wereld", "FR": "monde", "DE":
"Welt"}, X.a: 3*Just give y() a variable or expression and you're done.
Sweet, isn't it?

Inspect execution
Have you ever used print() to determine which parts of your program are
executed, and in which order they're executed? For example, if you've ever
added print statements to debug code like





*def add2(i):print("enter")result = i + 2
print("exit")return result*then y() helps here, too. Without
arguments, y() inspects itself and prints the calling filename, line
number, and parent function.







*from ycecream import ydef add2(i):y()result = i +
2y()return resulty(add2(1000))*prints something like



*y| x.py:3 in add2()y| x.py:5 in add2()y| add2(1000): 1002*Just
call y() and you're done. Isn't that sweet?

Debug entry and exit of function calls
When you apply y as a decorator to a function or method, both the entry and
exit can be tracked. The (keyword) arguments passed will be shown and upon
return, the return value.





*from ycecream import y@ydef mul(x, y):return x * y
print(mul(5, 7))*prints


*y| called mul(5, 7)y| returned 35 from mul(5, 7) in 0.06
seconds35*

Benchmarking with ycecream
If you decorate a function or method with y, you will be offered the
duration between entry and exit (in seconds) as a bonus.

That opens the door to simple benchmarking, like:







*from ycecream import yimport time@y(show_enter=False)def
do_sort(n):x = sorted(list(range(10 ** n)))for i in range(8):
  do_sort(i)*the ouput will show the effects of the population size on
the sort speed:








*y| returned None from do_sort(0) in 0.11 secondsy| returned
None from do_sort(1) in 0.32 secondsy| returned None from
do_sort(2) in 0.10 secondsy| returned None from do_sort(3) in
0.42 secondsy| returned None from do_sort(4) in 0.000716 seconds
y| returned None from do_sort(5) in 0.004501 secondsy| returned None
from do_sort(6) in 0.049840 secondsy| returned None from do_sort(7) in
0.490177 seconds*
Acknowledgement
The ycecream pacakage is a fork of the IceCream package. See
https://github.com/gruns/icecream

Many thanks to the author Ansgar Grunseid / grunseid.com /
gruns...@gmail.com

Differences with IceCream
The ycecream module is a fork of IceCream with a number of differences:

   - ycecream can't colourize the output (a nice feature of IceCream)
   - ycecream runs only on Python 3.6 and higher. (IceCream runs even on
   Python 2.7).
   - ycecream uses y as the standard interface, whereas IceCream uses ic.
   For compatibility, ycecream also supports ic.
   - yceceam has no dependencies. IceCream on the other hand has many
   (asttoken, colorize, pyglets, ...).
   - ycecream is just one .py file, whereas IceCream consists of a number
   of .py files. That makes it possible to use ycecream without even (pip)
   installing it. Just copy ycecream.py to your work directory.
   - ycecream can be used as a decorator of a function showing the enter
   and/or exit event as well as the duration.
   - ycecream can be used as a context manager to benchamrk code.
   - ycecream has a PEP8 (Pythonic) API. Less important for the user, the
   actual code is also (more) PEP8 compatible. IceCream does not follow the
   PEP8 standard.
   - ycecream uses a completely different API to configure (rather than
   IceCream's configureOutput method)
   - ycecream time showing can be controlled independently from context
   showing
   - ycecream can optionally show a delta (time since start of the program)
   - ycecream does not sort dicts by default. This behaviour can be
   controlled with the sort_dict parameter. (This is implemented by including
   the pprint 3.8 source code)
   - ycecream can 

salabim 20.0.4 released

2020-10-26 Thread Ruud van der Ham
Salabim is a powerful discrete event simulation package in pure Python that
can be used to model transport systems, production logistics, warehousing,
communication systems, healthcare, mining, etc,
It uses a process description methodology comparable to SimPy, but offers
much more functionality: real-time animation, queue handling, monitoring of
process characteristics, advanced statistical sampling and more.
Go to www.salabim.org for details and resources.

release notes salabim 20.0.4  2020-10-26

New functionality (0)
-
A component now supports a level monitor 'status' that keeps track of all
the statuses a component has been in.
For instance, component.status.print_histogram(values=True) will print
something like
Histogram of x.1.status
duration40

value duration %
data 4.300  10.8 
interrupted  4  10   
passive 11.500  28.7 ***
requesting  10.100  25.2 
scheduled   10.100  25.3 

And of course, it is possible to get the duration a component was in a
certain status, like
passive_time = component.status.value_duration(sim.passive).
You can even get the status of the component at a moment in the past, with
e.g.
status_4_units_ago = c1.status(env.now() - 4)

In line with this change, the various statutes (passive, scheduled, ...)
are no longer functions,
but just strings. So now, therefore it is also possible to say
 passive_time = component.status.value_duration("passive")
This will be quite transparent from the user. Only if the text
representation of a status was required,
status() had to be called, like
print(f"car status={car.status()()}")
>From this version on, this should read
print(f"car status={car.status()}")
, which is also more intuitive.
Alternatively, you can now also write
print(f"car status={car.status.value}")

This makes the methods Component.ispassive(), Component.isscheduled, etc.
less required as
component.status() == "passive" and
component.status() == "scheduled"
are arguably easier to understand.

The package salabim now has a function statuses() that returns a tuple with
all statuses a component can be in.
So
print(sim.statuses())
will print
('current', 'data', 'interrupted', 'passive', 'requesting',
'scheduled', 'standby', 'waiting')

New functionality (1)
-
Component.mode is now a monitor. That makes it possible to get an overview
of all modes a component
has been in, either as a histogram or an animated monitor.
And it is possible to get the duration a component was in a certain mode,
with e.g.
red_time = c1.mode.value_duration("red")
It is even possible to get the mode a component was in at a given moment,
like
mode_4_units_ago = c1.mode(env.now() - 4)
Because of this you can't use mode(x) anymore to set the mode directly. In
order to do that, you
have to use the new method set_mode:
c1.set_mode("green")
or
c1.mode.value = "green"
Both options do store the modetime correctly.
Please observe that the initial value for mode is now the null string and
not None.

New_functionality (3)
-
New method: Monitor.values() to assess all values in a monitor.
The values returned will be alphabetically sorted (not case sensitive),
just as in Monitor.print_histogram().
The method supports both ex0 and force_numeric parameter flags.
Example (with same monitor as above):
print(x1.status.values())
will print
['data', 'interrupted', 'passive', 'requesting', 'scheduled']

New functionality (4)
-
The values parameter of print_histogram() can now also be an iterable (i.e.
tuple, list or set).
In that case, the statistics of only these values will be shown.
Example (with same monitor as above):
x1.status.print_histogram(values = sim.statuses())
will print
Histogram of x.1.status
duration40

value duration %
current  0   0
data 4.300  10.8 
interrupted  4  10   
passive 11.500  28.7 ***
requesting  10.100  25.2 
scheduled   10.100  25.3 
standby  0   0
waiting  0   0

Any not shown values will be shown at the bottom as ''.
So, again with the same monitor as above:
x1.status.print_histogram(values = ("passive", "requesting", "error"))
will print
Histogram of x.1.status
duration40

value duration %
passive 11.500  28.7 ***
requesting  10.100  25.2 

MySimpleGUI version 1.1.6 released

2020-09-02 Thread Ruud van der Ham
I am glad to announce the release of MySimpleGUI version 1.1,6:
 GitHub salabim/MySimpleGUI


Enhancement for PySimpleGUI as an addon module. Contribute to
salabim/MySimpleGUI development by creating an account on GitHub.

MySimpleGUI is an extension to the popular PySimpleGUI (see
https://github.com/PySimpleGUI/PySimpleGUI) package, which adds
functionality and significantly changes exception handling, making it more
Pythonic and facilitates debugging of GUIs.

Major additions:

   - Attribute notation to *Window* and the *values parameter as returned
   from Window.read()*, e.g.

import MySimpleGUI as sg

layout = [[sg.Text('Your typed chars appear here:'),
sg.Text(size=(15,1), key='output')],
  [sg.Input(key='input')],
  [sg.Button('Show'), sg.Button('Exit')]]

window = sg.Window('Pattern 2B', layout)

while True:  # Event Loop
event, values = window.read()
if event == sg.WIN_CLOSED or event == 'Exit':
   break
if event == 'Show':
window.output.update(values.in)window.close()


   -

   A Multiline element can now be used as a file. That means, a user
   program can use the write function, but more importantly, can also use the
   print builtin, like print("This is a test",
file=window.mymultiline) Multiline
   elements can be closed and flushed as ordinary files. That also opens the
   door to more Pythonic redirections of stdout and stderr.
   -

   And Multiline files support ANSI colours, both for foreground and
   background colours. The escape sequences associated with the various
   colours can be used as such but also via the ansi dict like data structure.
   So, we can now do:

import MySimpleGUI as sg
from MySimpleGUI import ansi
...
window = [[sg.Multiline, size=(80, 10), key="results"]]
print(f"colour {ansi.red} red {ansi.onred}{ansi.white} red on
white {ansi.reset}", file=window.results)
print(f"still red on white {ansi.reset}{ansi.green} green",
file=window.result)


   -

   ANSI colours are also supported as the initial contents of Multiline and
   PopupScrolled.
   -

   MySimpleGUI provided functions to get/set the globals that can be
   normally only be defined with SetOptions:
   The value of a global variable can be retrieved by calling the function
   without an argument, like

   current_message_box_line_with = sg.message_box_line_width()

   The value of a global variable can be set by calling the function with
   the new value as its argument, like

   sg.message_box_line_width(20)

   And it is possible to use the function with an argument as a context
   manager. In that case, the global variable will be restored after finishing
   the context manager:

with sg.message_box_line_width(20):
sg.Popup("Hey, this is much more narrow than usual!")
sg.Popup("And now it's back to the usual 60 characters width, isn't it?")

   -

   MySimpleGUI can print Elements, Columns and Windows in a nice format,
   which can be very useful for debugging and just getting to know what
   MySimpleGUI/PySimpleGUI does internally.

MySimpleGUI is implemented as an add-on that actually patches an existing
PySimpleGUI installation (*source code injection*). This means that future
versions of PySimpleGUI will be automatically supported.
___
Python-announce-list mailing list -- python-announce-list@python.org
To unsubscribe send an email to python-announce-list-le...@python.org
https://mail.python.org/mailman3/lists/python-announce-list.python.org/
Member address: arch...@mail-archive.com


Salabim 19.0.0 released.

2019-01-07 Thread Ruud van der Ham
I have just released salabim 19.0.0, which is a package for discrete event
simulation and animation. See www.salabim.org for details.

Release notes
=
New functionality
-
Queues now register the arrival rate and the departure rate, defined as
   number of arrivals since last reset / duration since last reset
   number of departures since last reset / duration since last reset
The following methods are available:
Queue.arrival_rate()
Queue.departure_rate()
The registration can be reset with
Queue.arrival_rate(reset=True)
Queue.departure_rate(reset=True)
Note that this functionality is completely independent of the monitoring.


Added functionality
---
Video production now supports also the creation of a series of individual
frames, in
.jpg, .png, .tiff or .bmp format.
By specifying video with one of these extensions, the filename will be
padded with 6 increasing digits, e.g.
env.video('test.jpg')
will write individual autonumbered frames named
test00.jpg
test01.jpg
test02.jpg
...
Prior to creating the frames, all files matching the specification will be
removed, in order to get only
the required frames, most likely for post-processing with ffmpeg or similar.

Note that individual frame video production is available on all platforms,
including Pythonista.


The method Environment.delete_video() can be used to delete all
autonumbered files, like
env.delete_video('test.jpg')
will delete
test00.jpg
test01.jpg
test02.jpg
...
If this method is used with any other file type, like .mp4, the file does
not need to exist (i.e. no action is taken then).


Announcements
-
>From this version, salabim uses the CalVer (see www.calver.org) standard
for the version number.
This means that versions are numbered YY.major.minor, where
  YY is the year of the release minus 2000
  major is the major version number (0 based)
  minor is the minor version number (0 based)

>From this version, legacy Python (<= 2.7) is no longer officially supported.
-- 
https://mail.python.org/mailman/listinfo/python-announce-list

Support the Python Software Foundation:
http://www.python.org/psf/donations/


Salabim 2.3.2.6 rerleased

2018-08-10 Thread Ruud van der Ham
Version 2.3.2.6 of *salabim* has just been released.

This version fixes a number of bugs and adds some useful features.

The open source project *salabim* offers discrete event simulation that can
be used in a wide range of logistics application, ranging from (air)ports,
warehousing, job shop production, supply chain, hospitals to BPR.
Powerful animation facilities make it easy for a simulation builder to
validate and demonstrate the model.

See www.salabim.org for details.
-- 
https://mail.python.org/mailman/listinfo/python-announce-list

Support the Python Software Foundation:
http://www.python.org/psf/donations/


Salabim version 2.2.22 released

2018-05-24 Thread Ruud van der Ham
We have released version 2.2.22 of salabim.

Salabim is a discrete event simulation package that supports the process 
description methods,  queues, monitors, statistical distributions, resources 
and powerful animation.

See www.salabim.org for details.


-- 
https://mail.python.org/mailman/listinfo/python-announce-list

Support the Python Software Foundation:
http://www.python.org/psf/donations/


salabim version 2.2.17 released

2018-03-29 Thread Ruud van der Ham
We are pleased to announce the release of  salabim version 2.2.17.

Salabim is a discrete event simulation (DES) package which follows the
process description paradigm. It comes with powerful animation facilities,
statistical sampling, statistical data collection, etc.
For a sample animation: https://www.youtube.com/watch?v=ibQrZ3B76Fo

More information can be found on www.salabim.org.
-- 
https://mail.python.org/mailman/listinfo/python-announce-list

Support the Python Software Foundation:
http://www.python.org/psf/donations/


Salabim version 2.2.15 released

2018-03-01 Thread Ruud van der Ham






I am pleased to announce the release of salabim version 2.2.15.
Salabim is a Python package for discrete event simulation built on process 
description methodology.It supports queue handling, statistical monitoring, 
sampling from a wide range of statistical distributions, states and powerful 
real time animations.
Salabim runs on CPython, PyPy and iOS (Pythonista).
See www.salabim.org for details.


-- 
https://mail.python.org/mailman/listinfo/python-announce-list

Support the Python Software Foundation:
http://www.python.org/psf/donations/


salabim 2.2.11 released

2018-01-16 Thread Ruud van der Ham
salabim is a discrete event simulation package in Python, with powerful
process interaction, queues, resources, statistical sampling, monitoring
and -last but not least- real-time animation.

This version contains enhanced trace output, more statistical distributions
and several enhancements.

See www.salabim.org for details.
-- 
https://mail.python.org/mailman/listinfo/python-announce-list

Support the Python Software Foundation:
http://www.python.org/psf/donations/


salabim 2.2.8 released

2017-12-07 Thread Ruud van der Ham
The discrete event simulation package salabim has now an enhanced user
interface and allows for non synchronized animations.
With this version the stability on iOS is improved.
Available on PyPI and GitHub.

See www.salabim.org for details.
-- 
https://mail.python.org/mailman/listinfo/python-announce-list

Support the Python Software Foundation:
http://www.python.org/psf/donations/


Salabim 2.2.7 released

2017-11-28 Thread Ruud van der Ham
This is to announce salabim version 2.2.7 .

Salabim is a discrete event event simulation (DES) package with a very
powerful animation engine.

With this release, queues and 'states' can be animated with just a couple
of lines of code. See several examples
for a demonstration of these new features,

This release also contains some minor improvements and bug fixes.

Please refer to the changelog at GitHub, accessible via www.salabim.org.

Upgrading to the latest version can be done with *pip install -U salabim* .


Happy simulating!
-- 
https://mail.python.org/mailman/listinfo/python-announce-list

Support the Python Software Foundation:
http://www.python.org/psf/donations/


Salabim 2.2.6 released

2017-10-17 Thread Ruud van der Ham
The latest version of *salabim* (discrete event simulation) is available on
GitHub.
*Salabim* now runs with Python 2.7, 3.x and PyPy under Windows, OS X, Linux
as well as iOS (Pythonista).
The manual is now much improved.
See www.salabim.org for all details..
-- 
https://mail.python.org/mailman/listinfo/python-announce-list

Support the Python Software Foundation:
http://www.python.org/psf/donations/


Salabim 2.2.5 released

2017-09-28 Thread Ruud van der Ham
The latest version of *salabim* (discrete event simulation in Python) is
available on GitHub via www.salabim.org.
Apart from the process interaction (quite similar to SimPy 2), *salabim*
supports queue handling, resources, states
(a bit like semaphores/triggers), statistical distributions, automatic
monitoring and reporting as well a very flexible
and powerful animation engine.
*Salabim* runs with Python 3.x under Windows, OS X, Linux as well as iOS
(Pythonista).
If you don't know *salabim*, have a look at the new manual (
www.salabim.org/manual).
-- 
https://mail.python.org/mailman/listinfo/python-announce-list

Support the Python Software Foundation:
http://www.python.org/psf/donations/