Reference

Animation

class salabim.Animate(parent=None, layer=0, keep=True, visible=True, screen_coordinates=False, t0=None, x0=0, y0=0, offsetx0=0, offsety0=0, circle0=None, line0=None, polygon0=None, rectangle0=None, points0=None, image=None, text=None, font='', anchor='c', as_points=False, max_lines=0, text_anchor=None, linewidth0=None, fillcolor0=None, linecolor0='fg', textcolor0='fg', angle0=0, fontsize0=20, width0=None, t1=None, x1=None, y1=None, offsetx1=None, offsety1=None, circle1=None, line1=None, polygon1=None, rectangle1=None, points1=None, linewidth1=None, fillcolor1=None, linecolor1=None, textcolor1=None, angle1=None, fontsize1=None, width1=None, xy_anchor='', env=None)

defines an animation object

Parameters:
  • parent (Component) – component where this animation object belongs to (default None)
    if given, the animation object will be removed automatically upon termination of the parent
  • layer (int) – layer value
    lower layer values are on top of higher layer values (default 0)
  • keep (bool) – keep
    if False, animation object is hidden after t1, shown otherwise (default True)
  • visible (bool) – visible
    if False, animation object is not shown, shown otherwise (default True)
  • screen_coordinates (bool) – use screen_coordinates
    normally, the scale parameters are use for positioning and scaling objects.
    if True, screen_coordinates will be used instead.
  • xy_anchor (str) – specifies where x and y (i.e. x0, y0, x1 and y1) are relative to
    possible values are (default: sw) :
    nw    n    ne
    w     c     e
    sw    s    se
    If null string, the given coordimates are used untranslated
  • t0 (float) – time of start of the animation (default: now)
  • x0 (float) – x-coordinate of the origin at time t0 (default 0)
  • y0 (float) – y-coordinate of the origin at time t0 (default 0)
  • offsetx0 (float) – offsets the x-coordinate of the object at time t0 (default 0)
  • offsety0 (float) – offsets the y-coordinate of the object at time t0 (default 0)
  • circle0 (float or tuple/list) – the circle spec of the circle at time t0
    - radius
    - one item tuple/list containing the radius
    - five items tuple/list cntaining radius, radius1, arc_angle0, arc_angle1 and draw_arc (see class AnimateCircle for details)
  • line0 (tuple) – the line(s) (xa,ya,xb,yb,xc,yc, …) at time t0
  • polygon0 (tuple) – the polygon (xa,ya,xb,yb,xc,yc, …) at time t0
    the last point will be auto connected to the start
  • rectangle0 (tuple) – the rectangle (xlowerleft,ylowerleft,xupperright,yupperright) at time t0
  • image (str or PIL image) – the image to be displayed
    This may be either a filename or a PIL image
  • text (str, tuple or list) – the text to be displayed
    if text is str, the text may contain linefeeds, which are shown as individual lines
  • max_lines (int) – the maximum of lines of text to be displayed
    if positive, it refers to the first max_lines lines
    if negative, it refers to the first -max_lines lines
    if zero (default), all lines will be displayed
  • font (str or list/tuple) – font to be used for texts
    Either a string or a list/tuple of fontnames. If not found, uses calibri or arial
  • anchor (str) – anchor position
    specifies where to put images or texts relative to the anchor point
    possible values are (default: c):
    nw    n    ne
    w     c     e
    sw    s    se
  • as_points (bool) – if False (default), lines in line, rectangle and polygon are drawn
    if True, only the end points are shown in line, rectangle and polygon
  • linewidth0 (float) – linewidth of the contour at time t0 (default 0 for polygon, rectangle and circle, 1 for line)
    if as_point is True, the default size is 3
  • fillcolor0 (colorspec) – color of interior at time t0 (default foreground_color)
    if as_points is True, fillcolor0 defaults to transparent
  • linecolor0 (colorspec) – color of the contour at time t0 (default foreground_color)
  • textcolor0 (colorspec) – color of the text at time 0 (default foreground_color)
  • angle0 (float) – angle of the polygon at time t0 (in degrees) (default 0)
  • fontsize0 (float) – fontsize of text at time t0 (default 20)
  • width0 (float) – width of the image to be displayed at time t0
    if omitted or None, no scaling
  • t1 (float) – time of end of the animation (default inf)
    if keep=True, the animation will continue (frozen) after t1
  • x1 (float) – x-coordinate of the origin at time t1(default x0)
  • y1 (float) – y-coordinate of the origin at time t1 (default y0)
  • offsetx1 (float) – offsets the x-coordinate of the object at time t1 (default offsetx0)
  • offsety1 (float) – offsets the y-coordinate of the object at time t1 (default offsety0)
  • circle1 (float or tuple/list) – the circle spec of the circle at time t1 (default: circle0)
    - radius
    - one item tuple/list containing the radius
    - five items tuple/list cntaining radius, radius1, arc_angle0, arc_angle1 and draw_arc (see class AnimateCircle for details)
  • line1 (tuple) – the line(s) at time t1 (xa,ya,xb,yb,xc,yc, …) (default: line0)
    should have the same number of elements as line0
  • polygon1 (tuple) – the polygon at time t1 (xa,ya,xb,yb,xc,yc, …) (default: polygon0)
    should have the same number of elements as polygon0
  • rectangle1 (tuple) – the rectangle (xlowerleft,ylowerleft,xupperright,yupperright) at time t1 (default: rectangle0)
  • linewidth1 (float) – linewidth of the contour at time t1 (default linewidth0)
  • fillcolor1 (colorspec) – color of interior at time t1 (default fillcolor0)
  • linecolor1 (colorspec) – color of the contour at time t1 (default linecolor0)
  • textcolor1 (colorspec) – color of text at time t1 (default textcolor0)
  • angle1 (float) – angle of the polygon at time t1 (in degrees) (default angle0)
  • fontsize1 (float) – fontsize of text at time t1 (default: fontsize0)
  • width1 (float) – width of the image to be displayed at time t1 (default: width0)

Note

one (and only one) of the following parameters is required:
  • circle0
  • image
  • line0
  • polygon0
  • rectangle0
  • text
colors may be specified as a
  • valid colorname
  • hexname
  • tuple (R,G,B) or (R,G,B,A)
  • “fg” or “bg”

colornames may contain an additional alpha, like red#7f
hexnames may be either 3 of 4 bytes long (#rrggbb or #rrggbbaa)
both colornames and hexnames may be given as a tuple with an additional alpha between 0 and 255, e.g. (255,0,255,128), (“red”,127)`` or ("#ff00ff",128)
fg is the foreground color
bg is the background color

Permitted parameters

parameter circle image line polygon rectangle text
parent
layer
keep
screen_coordinates
xy_anchor
t0,t1
x0,x1
y0,y1
offsetx0,offsetx1
offsety0,offsety1
circle0,circle1
         
image  
       
line0,line1    
     
polygon0,polygon1      
   
rectangle0,rectangle1        
 
text          
anchor  
     
linewidth0,linewidth1
 
 
fillcolor0,fillcolor1
   
 
linecolor0,linecolor1
 
 
textcolor0,textcolor1          
angle0,angle1  
as_points    
 
font          
fontsize0,fontsize1          
width0,width1  
       
anchor(t=None)

anchor of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:anchor – default behaviour: self.anchor0 (anchor given at creation or update)
Return type:str
angle(t=None)

angle of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:angle – default behaviour: linear interpolation between self.angle0 and self.angle1
Return type:float
as_points(t=None)

as_points of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:as_points – default behaviour: self.as_points (text given at creation or update)
Return type:bool
circle(t=None)

circle of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:circle – either
- radius
- one item tuple/list containing the radius
- five items tuple/list cntaining radius, radius1, arc_angle0, arc_angle1 and draw_arc
(see class AnimateCircle for details)
default behaviour: linear interpolation between self.circle0 and self.circle1
Return type:float or tuple/list
fillcolor(t=None)

fillcolor of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:fillcolor – default behaviour: linear interpolation between self.fillcolor0 and self.fillcolor1
Return type:colorspec
font(t=None)

font of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:font – default behaviour: self.font0 (font given at creation or update)
Return type:str
fontsize(t=None)

fontsize of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:fontsize – default behaviour: linear interpolation between self.fontsize0 and self.fontsize1
Return type:float
image(t=None)

image of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:image – use function spec_to_image to load a file default behaviour: self.image0 (image given at creation or update)
Return type:PIL.Image.Image
layer(t=None)

layer of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:layer – default behaviour: self.layer0 (layer given at creation or update)
Return type:int or float
line(t=None)

line of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:line – series of x- and y-coordinates (xa,ya,xb,yb,xc,yc, …)
default behaviour: linear interpolation between self.line0 and self.line1
Return type:tuple
linecolor(t=None)

linecolor of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:linecolor – default behaviour: linear interpolation between self.linecolor0 and self.linecolor1
Return type:colorspec
linewidth(t=None)

linewidth of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:linewidth – default behaviour: linear interpolation between self.linewidth0 and self.linewidth1
Return type:float
max_lines(t=None)

maximum number of lines to be displayed of text. May be overridden.

Parameters:t (float) – current time
Returns:max_lines – default behaviour: self.max_lines0 (max_lines given at creation or update)
Return type:int
offsetx(t=None)

offsetx of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:offsetx – default behaviour: linear interpolation between self.offsetx0 and self.offsetx1
Return type:float
offsety(t=None)

offsety of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:offsety – default behaviour: linear interpolation between self.offsety0 and self.offsety1
Return type:float
points(t=None)

points of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:points – series of x- and y-coordinates (xa,ya,xb,yb,xc,yc, …)
default behaviour: linear interpolation between self.points0 and self.points1
Return type:tuple
polygon(t=None)

polygon of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:polygon – series of x- and y-coordinates describing the polygon (xa,ya,xb,yb,xc,yc, …)
default behaviour: linear interpolation between self.polygon0 and self.polygon1
Return type:tuple
rectangle(t=None)

rectangle of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:rectangle – (xlowerleft,ylowerlef,xupperright,yupperright)
default behaviour: linear interpolation between self.rectangle0 and self.rectangle1
Return type:tuple
remove()

removes the animation object from the animation queue, so effectively ending this animation.

Note

The animation object might be still updated, if required

text(t=None)

text of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:text – default behaviour: self.text0 (text given at creation or update)
Return type:str
text_anchor(t=None)

text_anchor of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:text_anchor – default behaviour: self.text_anchor0 (text_anchor given at creation or update)
Return type:str
textcolor(t=None)

textcolor of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:textcolor – default behaviour: linear interpolation between self.textcolor0 and self.textcolor1
Return type:colorspec
update(layer=None, keep=None, visible=None, t0=None, x0=None, y0=None, offsetx0=None, offsety0=None, circle0=None, line0=None, polygon0=None, rectangle0=None, points0=None, image=None, text=None, font=None, anchor=None, max_lines=None, text_anchor=None, linewidth0=None, fillcolor0=None, linecolor0=None, textcolor0=None, angle0=None, fontsize0=None, width0=None, as_points=None, t1=None, x1=None, y1=None, offsetx1=None, offsety1=None, circle1=None, line1=None, polygon1=None, rectangle1=None, points1=None, linewidth1=None, fillcolor1=None, linecolor1=None, textcolor1=None, angle1=None, fontsize1=None, width1=None, xy_anchor=None)

updates an animation object

Parameters:
  • layer (int) – layer value
    lower layer values are on top of higher layer values (default see below)
  • keep (bool) – keep
    if False, animation object is hidden after t1, shown otherwise (default see below)
  • visible (bool) – visible
    if False, animation object is not shown, shown otherwise (default see below)
  • xy_anchor (str) – specifies where x and y (i.e. x0, y0, x1 and y1) are relative to
    possible values are:
    nw    n    ne
    w     c     e
    sw    s    se
    If null string, the given coordimates are used untranslated
    default see below
  • t0 (float) – time of start of the animation (default: now)
  • x0 (float) – x-coordinate of the origin at time t0 (default see below)
  • y0 (float) – y-coordinate of the origin at time t0 (default see below)
  • offsetx0 (float) – offsets the x-coordinate of the object at time t0 (default see below)
  • offsety0 (float) – offsets the y-coordinate of the object at time t0 (default see below)
  • circle0 (float or tuple/list) – the circle spec of the circle at time t0
    - radius
    - one item tuple/list containing the radius
    - five items tuple/list cntaining radius, radius1, arc_angle0, arc_angle1 and draw_arc (see class AnimateCircle for details)
  • line0 (tuple) – the line(s) at time t0 (xa,ya,xb,yb,xc,yc, …) (default see below)
  • polygon0 (tuple) – the polygon at time t0 (xa,ya,xb,yb,xc,yc, …)
    the last point will be auto connected to the start (default see below)
  • rectangle0 (tuple) – the rectangle at time t0
    (xlowerleft,ylowerlef,xupperright,yupperright) (default see below)
  • points0 (tuple) – the points(s) at time t0 (xa,ya,xb,yb,xc,yc, …) (default see below)
  • image (str or PIL image) – the image to be displayed
    This may be either a filename or a PIL image (default see below)
  • text (str) – the text to be displayed (default see below)
  • font (str or list/tuple) – font to be used for texts
    Either a string or a list/tuple of fontnames. (default see below) If not found, uses calibri or arial
  • max_lines (int) – the maximum of lines of text to be displayed
    if positive, it refers to the first max_lines lines
    if negative, it refers to the first -max_lines lines
    if zero (default), all lines will be displayed
  • anchor (str) – anchor position
    specifies where to put images or texts relative to the anchor point (default see below)
    possible values are (default: c):
    nw    n    ne
    w     c     e
    sw    s    se
  • linewidth0 (float) – linewidth of the contour at time t0 (default see below)
  • fillcolor0 (colorspec) – color of interior/text at time t0 (default see below)
  • linecolor0 (colorspec) – color of the contour at time t0 (default see below)
  • angle0 (float) – angle of the polygon at time t0 (in degrees) (default see below)
  • fontsize0 (float) – fontsize of text at time t0 (default see below)
  • width0 (float) – width of the image to be displayed at time t0 (default see below)
    if None, the original width of the image will be used
  • t1 (float) – time of end of the animation (default: inf)
    if keep=True, the animation will continue (frozen) after t1
  • x1 (float) – x-coordinate of the origin at time t1 (default x0)
  • y1 (float) – y-coordinate of the origin at time t1 (default y0)
  • offsetx1 (float) – offsets the x-coordinate of the object at time t1 (default offsetx0)
  • offsety1 (float) – offsets the y-coordinate of the object at time t1 (default offset0)
  • circle1 (float or tuple/ist) – the circle spec of the circle at time t1
    - radius
    - one item tuple/list containing the radius
    - five items tuple/list cntaining radius, radius1, arc_angle0, arc_angle1 and draw_arc (see class AnimateCircle for details)
  • line1 (tuple) – the line(s) at time t1 (xa,ya,xb,yb,xc,yc, …) (default: line0)
    should have the same number of elements as line0
  • polygon1 (tuple) – the polygon at time t1 (xa,ya,xb,yb,xc,yc, …) (default: polygon0)
    should have the same number of elements as polygon0
  • rectangle1 (tuple) – the rectangle at time t (xlowerleft,ylowerleft,xupperright,yupperright) (default: rectangle0)
  • points1 (tuple) – the points(s) at time t1 (xa,ya,xb,yb,xc,yc, …) (default: points0)
    should have the same number of elements as points1
  • linewidth1 (float) – linewidth of the contour at time t1 (default linewidth0)
  • fillcolor1 (colorspec) – color of interior/text at time t1 (default fillcolor0)
  • linecolor1 (colorspec) – color of the contour at time t1 (default linecolor0)
  • angle1 (float) – angle of the polygon at time t1 (in degrees) (default angle0)
  • fontsize1 (float) – fontsize of text at time t1 (default: fontsize0)
  • width1 (float) – width of the image to be displayed at time t1 (default: width0)

Note

The type of the animation cannot be changed with this method.
The default value of most of the parameters is the current value (at time now)

visible(t=None)

visible attribute of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:visible – default behaviour: self.visible0 (visible given at creation or update)
Return type:bool
width(t=None)

width position of an animated image object. May be overridden.

Parameters:t (float) – current time
Returns:width – default behaviour: linear interpolation between self.width0 and self.width1
if None, the original width of the image will be used
Return type:float
x(t=None)

x-position of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:x – default behaviour: linear interpolation between self.x0 and self.x1
Return type:float
xy_anchor(t=None)

xy_anchor attribute of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:xy_anchor – default behaviour: self.xy_anchor0 (xy_anchor given at creation or update)
Return type:str
y(t=None)

y-position of an animate object. May be overridden.

Parameters:t (float) – current time
Returns:y – default behaviour: linear interpolation between self.y0 and self.y1
Return type:float
class salabim.AnimateButton(x=0, y=0, width=80, height=30, linewidth=0, fillcolor='fg', linecolor='fg', color='bg', text='', font='', fontsize=15, action=None, env=None, xy_anchor='sw')

defines a button

Parameters:
  • x (int) – x-coordinate of centre of the button in screen coordinates (default 0)
  • y (int) – y-coordinate of centre of the button in screen coordinates (default 0)
  • width (int) – width of button in screen coordinates (default 80)
  • height (int) – height of button in screen coordinates (default 30)
  • linewidth (int) – width of contour in screen coordinates (default 0=no contour)
  • fillcolor (colorspec) – color of the interior (foreground_color)
  • linecolor (colorspec) – color of contour (default foreground_color)
  • color (colorspec) – color of the text (default background_color)
  • text (str or function) – text of the button (default null string)
    if text is an argumentless function, this will be called each time; the button is shown/updated
  • font (str) – font of the text (default Helvetica)
  • fontsize (int) – fontsize of the text (default 15)
  • action (function) – action to take when button is pressed
    executed when the button is pressed (default None) the function should have no arguments
  • xy_anchor (str) – specifies where x and y are relative to
    possible values are (default: sw):
    nw    n    ne
    w     c     e
    sw    s    se
  • env (Environment) – environment where the component is defined
    if omitted, default_env will be used

Note

All measures are in screen coordinates
On Pythonista, this functionality is emulated by salabim On other platforms, the tkinter functionality is used.

remove()

removes the button object.
the ui object is removed from the ui queue, so effectively ending this ui

class salabim.AnimateCircle(radius=100, radius1=None, arc_angle0=0, arc_angle1=360, draw_arc=False, x=0, y=0, fillcolor='fg', linecolor='', linewidth=1, text='', fontsize=15, textcolor='bg', font='', angle=0, xy_anchor='', layer=0, max_lines=0, offsetx=0, offsety=0, text_anchor='c', text_offsetx=0, text_offsety=0, arg=None, parent=None, visible=True, env=None, screen_coordinates=False)

Displays a (partial) circle or (partial) ellipse , optionally with a text

Parameters:
  • radius (float) – radius of the circle
  • radius1 (float) – the ‘height’ of the ellipse. If None (default), a circle will be drawn
  • arc_angle0 (float) – start angle of the circle (default 0)
  • arc_angle1 (float) – end angle of the circle (default 360)
    when arc_angle1 > arc_angle0 + 360, only 360 degrees will be shown
  • draw_arc (bool) – if False (default), no arcs will be drawn if True, the arcs from and to the center will be drawn
  • x (float) – position of anchor point (default 0)
  • y (float) – position of anchor point (default 0)
  • xy_anchor (str) – specifies where x and y are relative to
    possible values are (default: sw) :
    nw    n    ne
    w     c     e
    sw    s    se
    If null string, the given coordimates are used untranslated
    The positions corresponds to a full circle even if arc_angle0 and/or arc_angle1 are specified.
  • offsetx (float) – offsets the x-coordinate of the circle (default 0)
  • offsety (float) – offsets the y-coordinate of the circle (default 0)
  • linewidth (float) – linewidth of the contour
    default 1
  • fillcolor (colorspec) – color of interior (default foreground_color)
    default transparent
  • linecolor (colorspec) – color of the contour (default transparent)
  • angle (float) – angle of the circle/ellipse and/or text (in degrees)
    default: 0
  • text (str, tuple or list) – the text to be displayed
    if text is str, the text may contain linefeeds, which are shown as individual lines
  • max_lines (int) – the maximum of lines of text to be displayed
    if positive, it refers to the first max_lines lines
    if negative, it refers to the last -max_lines lines
    if zero (default), all lines will be displayed
  • font (str or list/tuple) – font to be used for texts
    Either a string or a list/tuple of fontnames. If not found, uses calibri or arial
  • text_anchor (str) – anchor position of text|n| specifies where to texts relative to the polygon point
    possible values are (default: c):
    nw    n    ne
    w     c     e
    sw    s    se
  • textcolor (colorspec) – color of the text (default foreground_color)
  • textoffsetx (float) – extra x offset to the text_anchor point
  • textoffsety (float) – extra y offset to the text_anchor point
  • fontsize (float) – fontsize of text (default 15)
  • arg (any) – this is used when a parameter is a function with two parameters, as the first argument or if a parameter is a method as the instance
    default: self (instance itself)
  • parent (Component) – component where this animation object belongs to (default None)
    if given, the animation object will be removed automatically upon termination of the parent

Note

All measures are in screen coordinates

All parameters, apart from queue and arg can be specified as:
- a scalar, like 10
- a function with zero arguments, like lambda: title
- a function with one argument, being the time t, like lambda t: t + 10
- a function with two parameters, being arg (as given) and the time, like lambda comp, t: comp.state
- a method instance arg for time t, like self.state, actually leading to arg.state(t) to be called

class salabim.AnimateEntry(x=0, y=0, number_of_chars=20, value='', fillcolor='fg', color='bg', text='', action=None, env=None, xy_anchor='sw')

defines a button

Parameters:
  • x (int) – x-coordinate of centre of the button in screen coordinates (default 0)
  • y (int) – y-coordinate of centre of the button in screen coordinates (default 0)
  • number_of_chars (int) – number of characters displayed in the entry field (default 20)
  • fillcolor (colorspec) – color of the entry background (default foreground_color)
  • color (colorspec) – color of the text (default background_color)
  • value (str) – initial value of the text of the entry (default null string)
  • action (function) – action to take when the Enter-key is pressed
    the function should have no arguments
  • xy_anchor (str) – specifies where x and y are relative to
    possible values are (default: sw):
    nw    n    ne
    w     c     e
    sw    s    se
  • env (Environment) – environment where the component is defined
    if omitted, default_env will be used

Note

All measures are in screen coordinates
This class is not available under Pythonista.

get()

get the current value of the entry

Returns:Current value of the entry
Return type:str
remove()

removes the entry object.
the ui object is removed from the ui queue, so effectively ending this ui

class salabim.AnimateImage(spec='', x=0, y=0, width=None, text='', fontsize=15, textcolor='bg', font='', angle=0, xy_anchor='', layer=0, max_lines=0, offsetx=0, offsety=0, text_anchor='c', text_offsetx=0, text_offsety=0, arg=None, parent=None, anchor='sw', visible=True, env=None, screen_coordinates=False)

Displays an image, optionally with a text

Parameters:
  • image (str) – image to be displayed
    if used as function or method or in direct assigmnent, the image should be a PIL image (most likely via spec_to_image)
  • x (float) – position of anchor point (default 0)
  • y (float) – position of anchor point (default 0)
  • xy_anchor (str) – specifies where x and y are relative to
    possible values are (default: sw) :
    nw    n    ne
    w     c     e
    sw    s    se
    If null string, the given coordimates are used untranslated
  • anchor (str) – specifies where the x and refer to
    possible values are (default: sw) :
    nw    n    ne
    w     c     e
    sw    s    se
  • offsetx (float) – offsets the x-coordinate of the circle (default 0)
  • offsety (float) – offsets the y-coordinate of the circle (default 0)
  • angle (float) – angle of the text (in degrees)
    default: 0
  • text (str, tuple or list) – the text to be displayed
    if text is str, the text may contain linefeeds, which are shown as individual lines
  • max_lines (int) – the maximum of lines of text to be displayed
    if positive, it refers to the first max_lines lines
    if negative, it refers to the last -max_lines lines
    if zero (default), all lines will be displayed
  • font (str or list/tuple) – font to be used for texts
    Either a string or a list/tuple of fontnames. If not found, uses calibri or arial
  • text_anchor (str) – anchor position of text|n| specifies where to texts relative to the polygon point
    possible values are (default: c):
    nw    n    ne
    w     c     e
    sw    s    se
  • textcolor (colorspec) – color of the text (default foreground_color)
  • textoffsetx (float) – extra x offset to the text_anchor point
  • textoffsety (float) – extra y offset to the text_anchor point
  • fontsize (float) – fontsize of text (default 15)
  • arg (any) – this is used when a parameter is a function with two parameters, as the first argument or if a parameter is a method as the instance
    default: self (instance itself)
  • parent (Component) – component where this animation object belongs to (default None)
    if given, the animation object will be removed automatically upon termination of the parent

Note

All measures are in screen coordinates

All parameters, apart from queue and arg can be specified as:
- a scalar, like 10
- a function with zero arguments, like lambda: title
- a function with one argument, being the time t, like lambda t: t + 10
- a function with two parameters, being arg (as given) and the time, like lambda comp, t: comp.state
- a method instance arg for time t, like self.state, actually leading to arg.state(t) to be called

class salabim.AnimateLine(spec=(), x=0, y=0, linecolor='fg', linewidth=1, text='', fontsize=15, textcolor='fg', font='', angle=0, xy_anchor='', layer=0, max_lines=0, offsetx=0, offsety=0, as_points=False, text_anchor='c', text_offsetx=0, text_offsety=0, arg=None, parent=None, visible=True, env=None, screen_coordinates=False)

Displays a line, optionally with a text

Parameters:
  • spec (tuple or list) – should specify x0, y0, x1, y1, …
  • x (float) – position of anchor point (default 0)
  • y (float) – position of anchor point (default 0)
  • xy_anchor (str) – specifies where x and y are relative to
    possible values are (default: sw) :
    nw    n    ne
    w     c     e
    sw    s    se
    If null string, the given coordimates are used untranslated
  • offsetx (float) – offsets the x-coordinate of the line (default 0)
  • offsety (float) – offsets the y-coordinate of the line (default 0)
  • linewidth (float) – linewidth of the contour
    default 1
  • linecolor (colorspec) – color of the contour (default foreground_color)
  • angle (float) – angle of the line (in degrees)
    default: 0
  • as_points (bool) – if False (default), the contour lines are drawn
    if True, only the corner points are shown
  • text (str, tuple or list) – the text to be displayed
    if text is str, the text may contain linefeeds, which are shown as individual lines
  • max_lines (int) – the maximum of lines of text to be displayed
    if positive, it refers to the first max_lines lines
    if negative, it refers to the last -max_lines lines
    if zero (default), all lines will be displayed
  • font (str or list/tuple) – font to be used for texts
    Either a string or a list/tuple of fontnames. If not found, uses calibri or arial
  • text_anchor (str) – anchor position of text|n| specifies where to texts relative to the polygon point
    possible values are (default: c):
    nw    n    ne
    w     c     e
    sw    s    se
  • textcolor (colorspec) – color of the text (default foreground_color)
  • textoffsetx (float) – extra x offset to the text_anchor point
  • textoffsety (float) – extra y offset to the text_anchor point
  • fontsize (float) – fontsize of text (default 15)
  • arg (any) – this is used when a parameter is a function with two parameters, as the first argument or if a parameter is a method as the instance
    default: self (instance itself)
  • parent (Component) – component where this animation object belongs to (default None)
    if given, the animation object will be removed automatically upon termination of the parent

Note

All measures are in screen coordinates

All parameters, apart from queue and arg can be specified as:
- a scalar, like 10
- a function with zero arguments, like lambda: title
- a function with one argument, being the time t, like lambda t: t + 10
- a function with two parameters, being arg (as given) and the time, like lambda comp, t: comp.state
- a method instance arg for time t, like self.state, actually leading to arg.state(t) to be called

class salabim.AnimateMonitor(monitor, linecolor='fg', linewidth=None, fillcolor='', bordercolor='fg', borderlinewidth=1, titlecolor='fg', nowcolor='red', titlefont='', titlefontsize=15, title=None, x=0, y=0, vertical_offset=2, parent=None, vertical_scale=5, horizontal_scale=None, width=200, height=75, xy_anchor='sw', layer=0)

animates a monitor in a panel

Parameters:
  • linecolor (colorspec) – color of the line or points (default foreground color)
  • linewidth (int) – width of the line or points (default 1 for line, 3 for points)
  • fillcolor (colorspec) – color of the panel (default transparent)
  • bordercolor (colorspec) – color of the border (default foreground color)
  • borderlinewidth (int) – width of the line around the panel (default 1)
  • nowcolor (colorspec) – color of the line indicating now (default red)
  • titlecolor (colorspec) – color of the title (default foreground color)
  • titlefont (font) – font of the title (default null string)
  • titlefontsize (int) – size of the font of the title (default 15)
  • title (str) – title to be shown above panel
    default: name of the monitor
  • x (int) – x-coordinate of panel, relative to xy_anchor, default 0
  • y (int) – y-coordinate of panel, relative to xy_anchor. default 0
  • xy_anchor (str) – specifies where x and y are relative to
    possible values are (default: sw):
    nw    n    ne
    w     c     e
    sw    s    se
  • vertical_offset (float) –
    the vertical position of x within the panel is
    vertical_offset + x * vertical_scale (default 0)
  • vertical_scale (float) – the vertical position of x within the panel is vertical_offset + x * vertical_scale (default 5)
  • horizontal_scale (float) – the relative horizontal position of time t within the panel is on t * horizontal_scale, possibly shifted (default 1)|n|
  • width (int) – width of the panel (default 200)
  • height (int) – height of the panel (default 75)
  • layer (int) – layer (default 0)
  • parent (Component) – component where this animation object belongs to (default None)
    if given, the animation object will be removed automatically upon termination of the parent

Note

All measures are in screen coordinates

remove()

removes the animate object and thus closes this animation

class salabim.AnimatePoints(spec=(), x=0, y=0, linecolor='fg', linewidth=4, text='', fontsize=15, textcolor='fg', font='', angle=0, xy_anchor='', layer=0, max_lines=0, offsetx=0, offsety=0, text_anchor='c', text_offsetx=0, text_offsety=0, arg=None, parent=None, visible=True, env=None, screen_coordinates=False)

Displays a series of points, optionally with a text

Parameters:
  • spec (tuple or list) – should specify x0, y0, x1, y1, …
  • x (float) – position of anchor point (default 0)
  • y (float) – position of anchor point (default 0)
  • xy_anchor (str) – specifies where x and y are relative to
    possible values are (default: sw) :
    nw    n    ne
    w     c     e
    sw    s    se
    If null string, the given coordimates are used untranslated
  • offsetx (float) – offsets the x-coordinate of the points (default 0)
  • offsety (float) – offsets the y-coordinate of the points (default 0)
  • linewidth (float) – width of the points
    default 1
  • linecolor (colorspec) – color of the points (default foreground_color)
  • angle (float) – angle of the points (in degrees)
    default: 0
  • as_points (bool) – if False (default), the contour lines are drawn
    if True, only the corner points are shown
  • text (str, tuple or list) – the text to be displayed
    if text is str, the text may contain linefeeds, which are shown as individual lines
  • max_lines (int) – the maximum of lines of text to be displayed
    if positive, it refers to the first max_lines lines
    if negative, it refers to the last -max_lines lines
    if zero (default), all lines will be displayed
  • font (str or list/tuple) – font to be used for texts
    Either a string or a list/tuple of fontnames. If not found, uses calibri or arial
  • text_anchor (str) – anchor position of text|n| specifies where to texts relative to the polygon point
    possible values are (default: c):
    nw    n    ne
    w     c     e
    sw    s    se
  • textcolor (colorspec) – color of the text (default foreground_color)
  • textoffsetx (float) – extra x offset to the text_anchor point
  • textoffsety (float) – extra y offset to the text_anchor point
  • fontsize (float) – fontsize of text (default 15)
  • arg (any) – this is used when a parameter is a function with two parameters, as the first argument or if a parameter is a method as the instance
    default: self (instance itself)
  • parent (Component) – component where this animation object belongs to (default None)
    if given, the animation object will be removed automatically upon termination of the parent

Note

All measures are in screen coordinates

All parameters, apart from queue and arg can be specified as:
- a scalar, like 10
- a function with zero arguments, like lambda: title
- a function with one argument, being the time t, like lambda t: t + 10
- a function with two parameters, being arg (as given) and the time, like lambda comp, t: comp.state
- a method instance arg for time t, like self.state, actually leading to arg.state(t) to be called

class salabim.AnimatePolygon(spec=(), x=0, y=0, fillcolor='fg', linecolor='', linewidth=1, text='', fontsize=15, textcolor='bg', font='', angle=0, xy_anchor='', layer=0, max_lines=0, offsetx=0, offsety=0, as_points=False, text_anchor='c', text_offsetx=0, text_offsety=0, arg=None, parent=None, visible=True, env=None, screen_coordinates=False)

Displays a polygon, optionally with a text

Parameters:
  • spec (tuple or list) – should specify x0, y0, x1, y1, …
  • x (float) – position of anchor point (default 0)
  • y (float) – position of anchor point (default 0)
  • xy_anchor (str) – specifies where x and y are relative to
    possible values are (default: sw) :
    nw    n    ne
    w     c     e
    sw    s    se
    If null string, the given coordimates are used untranslated
  • offsetx (float) – offsets the x-coordinate of the polygon (default 0)
  • offsety (float) – offsets the y-coordinate of the polygon (default 0)
  • linewidth (float) – linewidth of the contour
    default 1
  • fillcolor (colorspec) – color of interior (default foreground_color)
    default transparent
  • linecolor (colorspec) – color of the contour (default transparent)
  • angle (float) – angle of the polygon (in degrees)
    default: 0
  • as_points (bool) – if False (default), the contour lines are drawn
    if True, only the corner points are shown
  • text (str, tuple or list) – the text to be displayed
    if text is str, the text may contain linefeeds, which are shown as individual lines
  • max_lines (int) – the maximum of lines of text to be displayed
    if positive, it refers to the first max_lines lines
    if negative, it refers to the last -max_lines lines
    if zero (default), all lines will be displayed
  • font (str or list/tuple) – font to be used for texts
    Either a string or a list/tuple of fontnames. If not found, uses calibri or arial
  • text_anchor (str) – anchor position of text|n| specifies where to texts relative to the polygon point
    possible values are (default: c):
    nw    n    ne
    w     c     e
    sw    s    se
  • textcolor (colorspec) – color of the text (default foreground_color)
  • textoffsetx (float) – extra x offset to the text_anchor point
  • textoffsety (float) – extra y offset to the text_anchor point
  • fontsize (float) – fontsize of text (default 15)
  • arg (any) – this is used when a parameter is a function with two parameters, as the first argument or if a parameter is a method as the instance
    default: self (instance itself)
  • parent (Component) – component where this animation object belongs to (default None)
    if given, the animation object will be removed automatically upon termination of the parent

Note

All measures are in screen coordinates

All parameters, apart from queue and arg can be specified as:
- a scalar, like 10
- a function with zero arguments, like lambda: title
- a function with one argument, being the time t, like lambda t: t + 10
- a function with two parameters, being arg (as given) and the time, like lambda comp, t: comp.state
- a method instance arg for time t, like self.state, actually leading to arg.state(t) to be called

class salabim.AnimateQueue(queue, x=50, y=50, direction='w', max_length=None, xy_anchor='sw', reverse=False, title=None, titlecolor='fg', titlefontsize=15, titlefont='', titleoffsetx=None, titleoffsety=None, layer=0, id=None, arg=None, parent=None)

Animates the component in a queue.

Parameters:
  • queue (Queue) –
  • x (float) – x-position of the first component in the queue
    default: 50
  • y (float) – y-position of the first component in the queue
    default: 50
  • direction (str) – if “w”, waiting line runs westwards (i.e. from right to left)
    if “n”, waiting line runs northeards (i.e. from bottom to top)
    if “e”, waiting line runs eastwards (i.e. from left to right) (default)
    if “s”, waiting line runs southwards (i.e. from top to bottom)
  • reverse (bool) – if False (default), display in normal order. If True, reversed.
  • max_length (int) – maximum number of components to be displayed
  • xy_anchor (str) – specifies where x and y are relative to
    possible values are (default: sw):
    nw    n    ne
    w     c     e
    sw    s    se
  • titlecolor (colorspec) – color of the title (default foreground color)
  • titlefont (font) – font of the title (default null string)
  • titlefontsize (int) – size of the font of the title (default 15)
  • title (str) – title to be shown above queue
    default: name of the queue
  • titleoffsetx (float) – x-offset of the title relative to the start of the queue
    default: 25 if direction is w, -25 otherwise
  • titleoffsety (float) – y-offset of the title relative to the start of the queue
    default: -25 if direction is s, -25 otherwise
  • layer (int) – layer (default 0)
  • id (any) – the animation works by calling the animation_objects method of each component, optionally with id. By default, this is self, but can be overriden, particularly with the queue
  • arg (any) – this is used when a parameter is a function with two parameters, as the first argument or if a parameter is a method as the instance
    default: self (instance itself)
  • parent (Component) – component where this animation object belongs to (default None)
    if given, the animation object will be removed automatically upon termination of the parent

Note

All measures are in screen coordinates

All parameters, apart from queue, id, arg and parent can be specified as:
- a scalar, like 10
- a function with zero arguments, like lambda: title
- a function with one argument, being the time t, like lambda t: t + 10
- a function with two parameters, being arg (as given) and the time, like lambda comp, t: comp.state
- a method instance arg for time t, like self.state, actually leading to arg.state(t) to be called

class salabim.AnimateRectangle(spec=(), x=0, y=0, fillcolor='fg', linecolor='', linewidth=1, text='', fontsize=15, textcolor='bg', font='', angle=0, xy_anchor='', layer=0, max_lines=0, offsetx=0, offsety=0, as_points=False, text_anchor='c', text_offsetx=0, text_offsety=0, arg=None, parent=None, visible=True, env=None, screen_coordinates=False)

Displays a rectangle, optionally with a text

Parameters:
  • spec (four item tuple or list) – should specify xlowerleft, ylowerleft, xupperright, yupperright
  • x (float) – position of anchor point (default 0)
  • y (float) – position of anchor point (default 0)
  • xy_anchor (str) – specifies where x and y are relative to
    possible values are (default: sw) :
    nw    n    ne
    w     c     e
    sw    s    se
    If null string, the given coordimates are used untranslated
  • offsetx (float) – offsets the x-coordinate of the rectangle (default 0)
  • offsety (float) – offsets the y-coordinate of the rectangle (default 0)
  • linewidth (float) – linewidth of the contour
    default 1
  • fillcolor (colorspec) – color of interior (default foreground_color)
    default transparent
  • linecolor (colorspec) – color of the contour (default transparent)
  • angle (float) – angle of the rectangle (in degrees)
    default: 0
  • as_points (bool) – if False (default), the contour lines are drawn
    if True, only the corner points are shown
  • text (str, tuple or list) – the text to be displayed
    if text is str, the text may contain linefeeds, which are shown as individual lines
  • max_lines (int) – the maximum of lines of text to be displayed
    if positive, it refers to the first max_lines lines
    if negative, it refers to the last -max_lines lines
    if zero (default), all lines will be displayed
  • font (str or list/tuple) – font to be used for texts
    Either a string or a list/tuple of fontnames. If not found, uses calibri or arial
  • text_anchor (str) – anchor position of text|n| specifies where to texts relative to the rectangle point
    possible values are (default: c):
    nw    n    ne
    w     c     e
    sw    s    se
  • textcolor (colorspec) – color of the text (default foreground_color)
  • textoffsetx (float) – extra x offset to the text_anchor point
  • textoffsety (float) – extra y offset to the text_anchor point
  • fontsize (float) – fontsize of text (default 15)
  • arg (any) – this is used when a parameter is a function with two parameters, as the first argument or if a parameter is a method as the instance
    default: self (instance itself)
  • parent (Component) – component where this animation object belongs to (default None)
    if given, the animation object will be removed automatically upon termination of the parent

Note

All measures are in screen coordinates

All parameters, apart from queue and arg can be specified as:
- a scalar, like 10
- a function with zero arguments, like lambda: title
- a function with one argument, being the time t, like lambda t: t + 10
- a function with two parameters, being arg (as given) and the time, like lambda comp, t: comp.state
- a method instance arg for time t, like self.state, actually leading to arg.state(t) to be called

class salabim.AnimateSlider(layer=0, x=0, y=0, width=100, height=20, vmin=0, vmax=10, v=None, resolution=1, linecolor='fg', labelcolor='fg', label='', font='', fontsize=12, action=None, xy_anchor='sw', env=None)

defines a slider

Parameters:
  • x (int) – x-coordinate of centre of the slider in screen coordinates (default 0)
  • y (int) – y-coordinate of centre of the slider in screen coordinates (default 0)
  • vmin (float) – minimum value of the slider (default 0)
  • vmax (float) – maximum value of the slider (default 0)
  • v (float) – initial value of the slider (default 0)
    should be between vmin and vmax
  • resolution (float) – step size of value (default 1)
  • width (float) – width of slider in screen coordinates (default 100)
  • height (float) – height of slider in screen coordinates (default 20)
  • linewidth (float) – width of contour in screen coordinate (default 0 = no contour)
  • linecolor (colorspec) – color of contour (default foreground_color)
  • labelcolor (colorspec) – color of the label (default foreground_color)
  • label (str) – label if the slider (default null string)
    if label is an argumentless function, this function will be used to display as label, otherwise the label plus the current value of the slider will be shown
  • font (str) – font of the text (default Helvetica)
  • fontsize (int) – fontsize of the text (default 12)
  • action (function) – function executed when the slider value is changed (default None)
    the function should one arguments, being the new value
    if None (default), no action
  • xy_anchor (str) – specifies where x and y are relative to
    possible values are (default: sw):
    nw    n    ne
    w     c     e
    sw    s    se
  • env (Environment) – environment where the component is defined
    if omitted, default_env will be used

Note

The current value of the slider is the v attibute of the slider.
All measures are in screen coordinates
On Pythonista, this functionality is emulated by salabim On other platforms, the tkinter functionality is used.

remove()

removes the slider object
The ui object is removed from the ui queue, so effectively ending this ui

v(value=None)

value

Parameters:value (float) – new value
if omitted, no change
Returns:Current value of the slider
Return type:float
class salabim.AnimateText(text='', x=0, y=0, fontsize=15, textcolor='fg', font='', text_anchor='sw', angle=0, visible=True, xy_anchor='', layer=0, env=None, screen_coordinates=False, arg=None, parent=None, offsetx=0, offsety=0, max_lines=0)

Displays a text

Parameters:
  • text (str, tuple or list) – the text to be displayed
    if text is str, the text may contain linefeeds, which are shown as individual lines if text is tple or list, each item is displayed on a separate line
  • x (float) – position of anchor point (default 0)
  • y (float) – position of anchor point (default 0)
  • xy_anchor (str) – specifies where x and y are relative to
    possible values are (default: sw) :
    nw    n    ne
    w     c     e
    sw    s    se
    If null string, the given coordimates are used untranslated
  • offsetx (float) – offsets the x-coordinate of the rectangle (default 0)
  • offsety (float) – offsets the y-coordinate of the rectangle (default 0)
  • angle (float) – angle of the text (in degrees)
    default: 0
  • max_lines (int) – the maximum of lines of text to be displayed
    if positive, it refers to the first max_lines lines
    if negative, it refers to the last -max_lines lines
    if zero (default), all lines will be displayed
  • font (str or list/tuple) – font to be used for texts
    Either a string or a list/tuple of fontnames. If not found, uses calibri or arial
  • text_anchor (str) – anchor position of text|n| specifies where to texts relative to the rectangle point
    possible values are (default: c):
    nw    n    ne
    w     c     e
    sw    s    se
  • textcolor (colorspec) – color of the text (default foreground_color)
  • fontsize (float) – fontsize of text (default 15)
  • arg (any) – this is used when a parameter is a function with two parameters, as the first argument or if a parameter is a method as the instance
    default: self (instance itself)
  • parent (Component) – component where this animation object belongs to (default None)
    if given, the animation object will be removed automatically upon termination of the parent

Note

All measures are in screen coordinates

All parameters, apart from queue and arg can be specified as:
- a scalar, like 10
- a function with zero arguments, like lambda: title
- a function with one argument, being the time t, like lambda t: t + 10
- a function with two parameters, being arg (as given) and the time, like lambda comp, t: comp.state
- a method instance arg for time t, like self.state, actually leading to arg.state(t) to be called

Distributions

class salabim._Distribution
bounded_sample(lowerbound=None, upperbound=None, fail_value=None, number_of_retries=None, include_lowerbound=True, include_upperbound=True)
Parameters:
  • lowerbound (float) – sample values < lowerbound will be rejected (at most 100 retries)
    if omitted, no lowerbound check
  • upperbound (float) – sample values > upperbound will be rejected (at most 100 retries)
    if omitted, no upperbound check
  • fail_value (float) – value to be used if. after number_of_tries retries, sample is still not within bounds
    default: lowerbound, if specified, otherwise upperbound
  • number_of_tries (int) – number of tries before fail_value is returned
    default: 100
  • include_lowerbound (bool) – if True (default), the lowerbound may be included. if False, the lowerbound will be excluded.
  • include_upperbound (bool) – if True (default), the upperbound may be included. if False, the upperbound will be excluded.
Returns:

Bounded sample of a distribution

Return type:

depending on distribution type (usually float)

Note

If, after number_of_tries retries, the sampled value is still not within the given bounds, fail_value will be returned
Samples that cannot be converted (only possible with Pdf and CumPdf) to float are assumed to be within the bounds.

class salabim._Expression(dis0, dis1, op)

expression distribution

This class is only created when using an expression with one ore more distributions.

Note

The randomstream of the distribution(s) in the expression are used.

mean()
Returns:Mean of the expression of distribution(s) – returns nan if mean can’t be calculated
Return type:float
print_info(as_str=False, file=None)

prints information about the expression of distribution(s)

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

sample()
Returns:Sample of the expression of distribution(s)
Return type:float
class salabim.Beta(alpha, beta, randomstream=None)

beta distribution

Parameters:
  • alpha (float) – alpha shape of the distribution
    should be >0
  • beta (float) – beta shape of the distribution
    should be >0
  • randomstream (randomstream) – randomstream to be used
    if omitted, random will be used
    if used as random.Random(12299) it assigns a new stream with the specified seed
mean()
Returns:Mean of the distribution
Return type:float
print_info(as_str=False, file=None)

prints information about the distribution

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

sample()
Returns:Sample of the distribution
Return type:float
class salabim.Cdf(spec, time_unit=None, randomstream=None, env=None)

Cumulative distribution function

Parameters:
  • spec (list or tuple) –

    list with x-values and corresponding cumulative density (x1,c1,x2,c2, …xn,cn)
    Requirements:

    x1<=x2<= …<=xn
    c1<=c2<=cn
    c1=0
    cn>0
    all cumulative densities are auto scaled according to cn, so no need to set cn to 1 or 100.
  • time_unit (str) – specifies the time unit
    must be one of “years”, “weeks”, “days”, “hours”, “minutes”, “seconds”, “milliseconds”, “microseconds”
    default : no conversion
  • randomstream (randomstream) – if omitted, random will be used
    if used as random.Random(12299) it defines a new stream with the specified seed
  • env (Environment) – environment where the distribution is defined
    if omitted, default_env will be used
mean()
Returns:Mean of the distribution
Return type:float
print_info(as_str=False, file=None)

prints information about the distribution

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

sample()
Returns:Sample of the distribution
Return type:float
class salabim.Constant(value, time_unit=None, randomstream=None, env=None)

constant distribution

Parameters:
  • value (float) – value to be returned in sample
  • time_unit (str) – specifies the time unit
    must be one of “years”, “weeks”, “days”, “hours”, “minutes”, “seconds”, “milliseconds”, “microseconds”
    default : no conversion
  • randomstream (randomstream) – randomstream to be used
    if omitted, random will be used
    if used as random.Random(12299) it assigns a new stream with the specified seed
    Note that this is only for compatibility with other distributions
  • env (Environment) – environment where the distribution is defined
    if omitted, default_env will be used
mean()
Returns:mean of the distribution (= the specified constant)
Return type:float
print_info(as_str=False, file=None)

prints information about the distribution

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

sample()
Returns:sample of the distribution (= the specified constant)
Return type:float
class salabim.Distribution(spec, randomstream=None)

Generate a distribution from a string

Parameters:
  • spec (str) –
    • string containing a valid salabim distribution, where only the first letters are relevant and casing is not important. Note that Erlang, Cdf, CumPdf and Poisson require at least two letters (Er, Cd, Cu and Po)
    • string containing one float (c1), resulting in Constant(c1)
    • string containing two floats seperated by a comma (c1,c2), resulting in a Uniform(c1,c2)
    • string containing three floats, separated by commas (c1,c2,c3), resulting in a Triangular(c1,c2,c3)
  • randomstream (randomstream) – if omitted, random will be used
    if used as random.Random(12299) it assigns a new stream with the specified seed

Note

The randomstream in the specifying string is ignored.
It is possible to use expressions in the specification, as long these are valid within the context of the salabim module, which usually implies a global variable of the salabim package.

Examples

Uniform(13) ==> Uniform(13)
Uni(12,15) ==> Uniform(12,15)
UNIF(12,15) ==> Uniform(12,15)
N(12,3) ==> Normal(12,3)
Tri(10,20). ==> Triangular(10,20,15)
10. ==> Constant(10)
12,15 ==> Uniform(12,15)
(12,15) ==> Uniform(12,15)
Exp(a) ==> Exponential(100), provided sim.a=100
E(2) ==> Exponential(2) Er(2,3) ==> Erlang(2,3)

mean()
Returns:Mean of the distribution
Return type:float
print_info(as_str=False, file=None)

prints information about the distribution

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

sample()
Returns:Sample of the distribution
Return type:any (usually float)
class salabim.Erlang(shape, rate=None, time_unit=None, scale=None, randomstream=None, env=None)

erlang distribution

Parameters:
  • shape (int) – shape of the distribution (k)
    should be >0
  • rate (float) – rate parameter (lambda)
    if omitted, the scale is used
    should be >0
  • time_unit (str) – specifies the time unit
    must be one of “years”, “weeks”, “days”, “hours”, “minutes”, “seconds”, “milliseconds”, “microseconds”
    default : no conversion
  • scale (float) – scale of the distribution (mu)
    if omitted, the rate is used
    should be >0
  • randomstream (randomstream) – randomstream to be used
    if omitted, random will be used
    if used as random.Random(12299) it assigns a new stream with the specified seed
  • env (Environment) – environment where the distribution is defined
    if omitted, default_env will be used

Note

Either rate or scale has to be specified, not both.

mean()
Returns:Mean of the distribution
Return type:float
print_info(as_str=False, file=None)

prints information about the distribution

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

sample()
Returns:Sample of the distribution
Return type:float
class salabim.Exponential(mean=None, time_unit=None, rate=None, randomstream=None, env=None)

exponential distribution

Parameters:
  • mean (float) – mean of the distribtion (beta)|n| if omitted, the rate is used
    must be >0
  • time_unit (str) – specifies the time unit
    must be one of “years”, “weeks”, “days”, “hours”, “minutes”, “seconds”, “milliseconds”, “microseconds”
    default : no conversion
  • rate (float) – rate of the distribution (lambda)|n| if omitted, the mean is used
    must be >0
  • randomstream (randomstream) – randomstream to be used
    if omitted, random will be used
    if used as random.Random(12299) it assigns a new stream with the specified seed
  • env (Environment) – environment where the distribution is defined
    if omitted, default_env will be used

Note

Either mean or rate has to be specified, not both

mean()
Returns:Mean of the distribution
Return type:float
print_info(as_str=False, file=None)

prints information about the distribution

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

sample()
Returns:Sample of the distribution
Return type:float
class salabim.Gamma(shape, scale=None, time_unit=None, rate=None, randomstream=None, env=None)

gamma distribution

Parameters:
  • shape (float) – shape of the distribution (k)
    should be >0
  • scale (float) – scale of the distribution (teta)
    should be >0
  • time_unit (str) – specifies the time unit
    must be one of “years”, “weeks”, “days”, “hours”, “minutes”, “seconds”, “milliseconds”, “microseconds”
    default : no conversion
  • rate (float) – rate of the distribution (beta)
    should be >0
  • randomstream (randomstream) – randomstream to be used
    if omitted, random will be used
    if used as random.Random(12299) it assigns a new stream with the specified seed
env : Environment
environment where the distribution is defined
if omitted, default_env will be used

Note

Either scale or rate has to be specified, not both.

mean()
Returns:Mean of the distribution
Return type:float
print_info(as_str=False, file=None)

prints information about the distribution

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

sample()
Returns:Sample of the distribution
Return type:float
class salabim.Normal(mean, standard_deviation=None, time_unit=None, coefficient_of_variation=None, use_gauss=False, randomstream=None, env=None)

normal distribution

Parameters:
  • mean (float) – mean of the distribution
  • standard_deviation (float) – standard deviation of the distribution
    if omitted, coefficient_of_variation, is used to specify the variation if neither standard_devation nor coefficient_of_variation is given, 0 is used, thus effectively a contant distribution
    must be >=0
  • coefficient_of_variation (float) – coefficient of variation of the distribution
    if omitted, standard_deviation is used to specify variation
    the resulting standard_deviation must be >=0
  • use_gauss (bool) – if False (default), use the random.normalvariate method
    if True, use the random.gauss method
    the documentation for random states that the gauss method should be slightly faster, although that statement is doubtful.
  • randomstream (randomstream) – randomstream to be used
    if omitted, random will be used
    if used as random.Random(12299) it assigns a new stream with the specified seed
  • env (Environment) – environment where the distribution is defined
    if omitted, default_env will be used
mean()
Returns:Mean of the distribution
Return type:float
print_info(as_str=False, file=None)

prints information about the distribution

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

sample()
Returns:Sample of the distribution
Return type:float
class salabim.Pdf(spec, probabilities=None, time_unit=None, randomstream=None, env=None)

Probability distribution function

Parameters:
  • spec (list or tuple) –

    either

    • if no probabilities specified:
      list with x-values and corresponding probability (x0, p0, x1, p1, …xn,pn)
    • if probabilities is specified:
      list with x-values
  • probabilities (list, tuple or float) – if omitted, spec contains the probabilities
    the list (p0, p1, …pn) contains the probabilities of the corresponding x-values from spec.
    alternatively, if a float is given (e.g. 1), all x-values have equal probability. The value is not important.
  • time_unit (str) – specifies the time unit
    must be one of “years”, “weeks”, “days”, “hours”, “minutes”, “seconds”, “milliseconds”, “microseconds”
    default : no conversion
  • randomstream (randomstream) – if omitted, random will be used
    if used as random.Random(12299) it assigns a new stream with the specified seed
  • env (Environment) – environment where the distribution is defined
    if omitted, default_env will be used

Note

p0+p1=…+pn>0
all densities are auto scaled according to the sum of p0 to pn, so no need to have p0 to pn add up to 1 or 100.
The x-values can be any type.
If it is a salabim distribution, not the distribution, but a sample will be returned when calling sample.

mean()
Returns:mean of the distribution – if the mean can’t be calculated (if not all x-values are scalars or distributions), nan will be returned.
Return type:float
print_info(as_str=False, file=None)

prints information about the distribution

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

sample(n=None)
Parameters:n (number of samples : int) – if not specified, specifies just return one sample, as usual
if specified, return a list of n sampled values from the distribution without replacement. This requires that all probabilities are equal.
If n > number of values in the Pdf distribution, n is assumed to be the number of values in the distribution.
If a sampled value is a distribution, a sample from that distribution will be returned.
Returns:Sample of the distribution – In case n is specified, returns a list of n values
Return type:any (usually float) or list
class salabim.Poisson(mean, randomstream=None)

Poisson distribution

Parameters:
  • mean (float) – mean (lambda) of the distribution
  • randomstream (randomstream) – randomstream to be used
    if omitted, random will be used
    if used as random.Random(12299) it assigns a new stream with the specified seed

Note

The run time of this function increases when mean (lambda) increases.
It is not recommended to use mean (lambda) > 100

mean()
Returns:Mean of the distribution
Return type:float
print_info(as_str=False, file=None)

prints information about the distribution

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

sample()
Returns:Sample of the distribution
Return type:int
class salabim.Triangular(low, high=None, mode=None, time_unit=None, randomstream=None, env=None)

triangular distribution

Parameters:
  • low (float) – lowerbound of the distribution
  • high (float) – upperbound of the distribution
    if omitted, low will be used, thus effectively a constant distribution
    high must be >= low
  • mode (float) – mode of the distribution
    if omitted, the average of low and high will be used, thus a symmetric triangular distribution
    mode must be between low and high
  • time_unit (str) – specifies the time unit
    must be one of “years”, “weeks”, “days”, “hours”, “minutes”, “seconds”, “milliseconds”, “microseconds”
    default : no conversion
  • randomstream (randomstream) – randomstream to be used
    if omitted, random will be used
    if used as random.Random(12299) it assigns a new stream with the specified seed
  • env (Environment) – environment where the distribution is defined
    if omitted, default_env will be used
mean()
Returns:Mean of the distribution
Return type:float
print_info(as_str=False, file=None)

prints information about the distribution

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

sample()
Returns:Sample of the distribtion
Return type:float
class salabim.Uniform(lowerbound, upperbound=None, time_unit=None, randomstream=None, env=None)

uniform distribution

Parameters:
  • lowerbound (float) – lowerbound of the distribution
  • upperbound (float) – upperbound of the distribution
    if omitted, lowerbound will be used
    must be >= lowerbound
  • time_unit (str) – specifies the time unit
    must be one of “years”, “weeks”, “days”, “hours”, “minutes”, “seconds”, “milliseconds”, “microseconds”
    default : no conversion
  • randomstream (randomstream) – randomstream to be used
    if omitted, random will be used
    if used as random.Random(12299) it assigns a new stream with the specified seed
  • env (Environment) – environment where the distribution is defined
    if omitted, default_env will be used
mean()
Returns:Mean of the distribution
Return type:float
print_info(as_str=False, file=None)

prints information about the distribution

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

sample()
Returns:Sample of the distribution
Return type:float
class salabim.Weibull(scale, shape, time_unit=None, randomstream=None, env=None)

weibull distribution

Parameters:
  • scale (float) – scale of the distribution (alpha or k)
  • shape (float) – shape of the distribution (beta or lambda)|n| should be >0
  • time_unit (str) – specifies the time unit
    must be one of “years”, “weeks”, “days”, “hours”, “minutes”, “seconds”, “milliseconds”, “microseconds”
    default : no conversion
  • randomstream (randomstream) – randomstream to be used
    if omitted, random will be used
    if used as random.Random(12299) it assigns a new stream with the specified seed
  • env (Environment) – environment where the distribution is defined
    if omitted, default_env will be used
mean()
Returns:Mean of the distribution
Return type:float
print_info(as_str=False, file=None)

prints information about the distribution

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

sample()
Returns:Sample of the distribution
Return type:float

Component

class salabim.Component(name=None, at=None, delay=None, urgent=None, process=None, suppress_trace=False, suppress_pause_at_step=False, skip_standby=False, mode=None, env=None, **kwargs)

Component object

A salabim component is used as component (primarily for queueing) or as a component with a process
Usually, a component will be defined as a subclass of Component.

Parameters:
  • name (str) – name of the component.
    if the name ends with a period (.), auto serializing will be applied
    if the name end with a comma, auto serializing starting at 1 will be applied
    if omitted, the name will be derived from the class it is defined in (lowercased)
  • at (float) – schedule time
    if omitted, now is used
  • delay (float) – schedule with a delay
    if omitted, no delay
  • urgent (bool) – urgency indicator
    if False (default), the component will be scheduled behind all other components scheduled for the same time
    if True, the component will be scheduled in front of all components scheduled for the same time
  • process (str) – name of process to be started.
    if None (default), it will try to start self.process()
    if null string, no process will be started even if self.process() exists, i.e. become a data component.
    note that the function must be a generator, i.e. contains at least one yield.
  • suppress_trace (bool) – suppress_trace indicator
    if True, this component will be excluded from the trace
    If False (default), the component will be traced
    Can be queried or set later with the suppress_trace method.
  • suppress_pause_at_step (bool) – suppress_pause_at_step indicator
    if True, if this component becomes current, do not pause when stepping
    If False (default), the component will be paused when stepping
    Can be queried or set later with the suppress_pause_at_step method.
  • skip_standby (bool) – skip_standby indicator
    if True, after this component became current, do not activate standby components
    If False (default), after the component became current activate standby components
    Can be queried or set later with the skip_standby method.
  • mode (str preferred) – mode
    will be used in trace and can be used in animations
    if omitted, the mode will be None.
    also mode_time will be set to now.
  • env (Environment) – environment where the component is defined
    if omitted, default_env will be used
activate(at=None, delay=0, urgent=False, process=None, keep_request=False, keep_wait=False, mode=None, **kwargs)

activate component

Parameters:
  • at (float) – schedule time
    if omitted, now is used
    inf is allowed
  • delay (float) – schedule with a delay
    if omitted, no delay
  • urgent (bool) – urgency indicator
    if False (default), the component will be scheduled behind all other components scheduled for the same time
    if True, the component will be scheduled in front of all components scheduled for the same time
  • process (str) – name of process to be started.
    if None (default), process will not be changed
    if the component is a data component, the generator function process will be used as the default process.
    note that the function must be a generator, i.e. contains at least one yield.
  • keep_request (bool) – this affects only components that are requesting.
    if True, the requests will be kept and thus the status will remain requesting
    if False (the default), the request(s) will be canceled and the status will become scheduled
  • keep_wait (bool) – this affects only components that are waiting.
    if True, the waits will be kept and thus the status will remain waiting
    if False (the default), the wait(s) will be canceled and the status will become scheduled
  • mode (str preferred) – mode
    will be used in the trace and can be used in animations
    if nothing specified, the mode will be unchanged.
    also mode_time will be set to now, if mode is set.

Note

if to be applied to the current component, use yield self.activate().
if both at and delay are specified, the component becomes current at the sum of the two values.

animation_objects(id)

defines how to display a component in AnimateQueue

Parameters:id (any) – id as given by AnimateQueue. Note that by default this the reference to the AnimateQueue object.
Returns:size_x : how much to displace the next component in x-direction, if applicable
size_y : how much to displace the next component in y-direction, if applicable
animation objects : instances of Animate class
default behaviour:
square of size 40 (displacements 50), with the sequence number centered.
Return type:List or tuple containg

Note

If you override this method, be sure to use the same header, either with or without the id parameter.

base_name()
Returns:base name of the component (the name used at initialization)
Return type:str
cancel(mode=None)

cancel component (makes the component data)

Parameters:mode (str preferred) – mode
will be used in trace and can be used in animations
if nothing specified, the mode will be unchanged.
also mode_time will be set to now, if mode is set.

Note

if to be used for the current component, use yield self.cancel().

claimed_quantity(resource)
Parameters:resource (Resoure) – resource to be queried
Returns:the claimed quantity from a resource – if the resource is not claimed, 0 will be returned
Return type:float or int
claimed_resources()
Returns:list of claimed resources
Return type:list
count(q=None)

queue count

Parameters:q (Queue) – queue to check or
if omitted, the number of queues where the component is in
Returns:1 if component is in q, 0 otherwise
if q is omitted, the number of queues where the component is in
Return type:int
creation_time()
Returns:time the component was created
Return type:float
deregister(registry)

deregisters the component in the registry

Parameters:registry (list) – list of registered components
Returns:component (self)
Return type:Component
enter(q)

enters a queue at the tail

Parameters:q (Queue) – queue to enter

Note

the priority will be set to the priority of the tail component of the queue, if any or 0 if queue is empty

enter_at_head(q)

enters a queue at the head

Parameters:q (Queue) – queue to enter

Note

the priority will be set to the priority of the head component of the queue, if any or 0 if queue is empty

enter_behind(q, poscomponent)

enters a queue behind a component

Parameters:
  • q (Queue) – queue to enter
  • poscomponent (Component) – component to be entered behind

Note

the priority will be set to the priority of poscomponent

enter_in_front_of(q, poscomponent)

enters a queue in front of a component

Parameters:
  • q (Queue) – queue to enter
  • poscomponent (Component) – component to be entered in front of

Note

the priority will be set to the priority of poscomponent

enter_sorted(q, priority)

enters a queue, according to the priority

Parameters:
  • q (Queue) – queue to enter
  • priority (type that can be compared with other priorities in the queue) – priority in the queue

Note

The component is placed just before the first component with a priority > given priority

enter_time(q)
Parameters:q (Queue) – queue where component belongs to
Returns:time the component entered the queue
Return type:float
failed()
Returns:
  • True, if the latest request/wait has failed (either by timeout or external) (bool)
  • False, otherwise
hold(duration=None, till=None, urgent=False, mode=None)

hold the component

Parameters:
  • duration (float) – specifies the duration
    if omitted, 0 is used
    inf is allowed
  • till (float) – specifies at what time the component will become current
    if omitted, now is used
    inf is allowed
  • urgent (bool) – urgency indicator
    if False (default), the component will be scheduled behind all other components scheduled for the same time
    if True, the component will be scheduled in front of all components scheduled for the same time
  • mode (str preferred) – mode
    will be used in trace and can be used in animations
    if nothing specified, the mode will be unchanged.
    also mode_time will be set to now, if mode is set.

Note

if to be used for the current component, use yield self.hold(...).

if both duration and till are specified, the component will become current at the sum of these two.

index(q)
Parameters:q (Queue) – queue to be queried
Returns:index of component in q – if component belongs to q
-1 if component does not belong to q
Return type:int
interrupt(mode=None)

interrupt the component

Parameters:mode (str preferred) – mode
will be used in trace and can be used in animations
if nothing is specified, the mode will be unchanged.
also mode_time will be set to now, if mode is set.

Note

Cannot be applied on the current component.
Use resume() to resume

interrupt_level()

returns interrupt level of an interrupted component
non interrupted components return 0

interrupted_status()

returns the original status of an interrupted component

possible values are
  • passive
  • scheduled
  • requesting
  • waiting
  • standby
iscurrent()
Returns:True if status is current, False otherwise
Return type:bool

Note

Be sure to always include the parentheses, otherwise the result will be always True!

isdata()
Returns:True if status is data, False otherwise
Return type:bool

Note

Be sure to always include the parentheses, otherwise the result will be always True!

isinterrupted()
Returns:True if status is interrupted, False otherwise
Return type:bool

Note

Be sure to always include the parentheses, otherwise the result will be always True

ispassive()
Returns:True if status is passive, False otherwise
Return type:bool

Note

Be sure to always include the parentheses, otherwise the result will be always True!

isrequesting()
Returns:True if status is requesting, False otherwise
Return type:bool

Note

Be sure to always include the parentheses, otherwise the result will be always True!

isscheduled()
Returns:True if status is scheduled, False otherwise
Return type:bool

Note

Be sure to always include the parentheses, otherwise the result will be always True!

isstandby()
Returns:True if status is standby, False otherwise
Return type:bool

Note

Be sure to always include the parentheses, otherwise the result will be always True

iswaiting()
Returns:True if status is waiting, False otherwise
Return type:bool

Note

Be sure to always include the parentheses, otherwise the result will be always True!

leave(q=None)

leave queue

Parameters:q (Queue) – queue to leave

Note

statistics are updated accordingly

mode(value=None)
Parameters:value (any, str recommended) – new mode
if omitted, no change
mode_time will be set if a new mode is specified
Returns:mode of the component – the mode is useful for tracing and animations.
Usually the mode will be set in a call to passivate, hold, activate, request or standby.
Return type:any, usually str
mode_time()
Returns:time the component got it’s latest mode – For a new component this is the time the component was created.
this function is particularly useful for animations.
Return type:float
name(value=None)
Parameters:value (str) – new name of the component if omitted, no change
Returns:Name of the component
Return type:str

Note

base_name and sequence_number are not affected if the name is changed

passivate(mode=None)

passivate the component

Parameters:mode (str preferred) – mode
will be used in trace and can be used in animations
if nothing is specified, the mode will be unchanged.
also mode_time will be set to now, if mode is set.

Note

if to be used for the current component (nearly always the case), use yield self.passivate().

predecessor(q)
Parameters:
  • q (Queue) – queue where the component belongs to
  • Returns (Component) – predecessor of the component in the queue if component is not at the head.
    returns None if component is at the head.
print_info(as_str=False, file=None)

prints information about the component

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

priority(q, priority=None)

gets/sets the priority of a component in a queue

Parameters:
  • q (Queue) – queue where the component belongs to
  • priority (type that can be compared with other priorities in the queue) – priority in queue
    if omitted, no change
Returns:

the priority of the component in the queue

Return type:

float

Note

if you change the priority, the order of the queue may change

queues()
Returns:set of queues where the component belongs to
Return type:set
register(registry)

registers the component in the registry

Parameters:registry (list) – list of (to be) registered objects
Returns:component (self)
Return type:Component

Note

Use Component.deregister if component does not longer need to be registered.

release(*args)

release a quantity from a resource or resources

Parameters:args (sequence of items, where each items can be) –
  • a resources, where quantity=current claimed quantity
  • a tuple/list containing a resource and the quantity to be released

Note

It is not possible to release from an anonymous resource, this way. Use Resource.release() in that case.

Example

yield self.request(r1,(r2,2),(r3,3,100))
–> requests 1 from r1, 2 from r2 and 3 from r3 with priority 100

c1.release
–> releases 1 from r1, 2 from r2 and 3 from r3

yield self.request(r1,(r2,2),(r3,3,100))
c1.release((r2,1))
–> releases 1 from r2

yield self.request(r1,(r2,2),(r3,3,100))
c1.release((r2,1),r3)
–> releases 2 from r2,and 3 from r3

remaining_duration(value=None, urgent=False)
Parameters:
  • value (float) – set the remaining_duration
    The action depends on the status where the component is in:
    - passive: the remaining duration is update according to the given value
    - standby and current: not allowed
    - scheduled: the component is rescheduled according to the given value
    - waiting or requesting: the fail_at is set according to the given value
    - interrupted: the remaining_duration is updated according to the given value
  • urgent (bool) – urgency indicator
    if False (default), the component will be scheduled behind all other components scheduled for the same time
    if True, the component will be scheduled in front of all components scheduled for the same time
Returns:

remaining duration – if passive, remaining time at time of passivate
if scheduled, remaing time till scheduled time
if requesting or waiting, time till fail_at time
else: 0

Return type:

float

Note

This method is usefu for interrupting a process and then resuming it, after some (breakdown) time

request(*args, **kwargs)

request from a resource or resources

Parameters:
  • args (sequence of items where each item can be:) –
    • resource, where quantity=1, priority=tail of requesters queue
    • tuples/list containing a resource, a quantity and optionally a priority.
      if the priority is not specified, the request for the resource be added to the tail of the requesters queue
  • fail_at (float) – time out
    if the request is not honored before fail_at, the request will be cancelled and the parameter failed will be set.
    if not specified, the request will not time out.
  • fail_delay (float) – time out
    if the request is not honored before now+fail_delay, the request will be cancelled and the parameter failed will be set.
    if not specified, the request will not time out.
  • mode (str preferred) – mode
    will be used in trace and can be used in animations
    if nothing specified, the mode will be unchanged.
    also mode_time will be set to now, if mode is set.

Note

Not allowed for data components or main.

If to be used for the current component (which will be nearly always the case), use yield self.request(...).

If the same resource is specified more that once, the quantities are summed

The requested quantity may exceed the current capacity of a resource

The parameter failed will be reset by a calling request or wait

Example

yield self.request(r1)
–> requests 1 from r1
yield self.request(r1,r2)
–> requests 1 from r1 and 1 from r2
yield self.request(r1,(r2,2),(r3,3,100))
–> requests 1 from r1, 2 from r2 and 3 from r3 with priority 100
yield self.request((r1,1),(r2,2))
–> requests 1 from r1, 2 from r2

requested_quantity(resource)
Parameters:resource (Resoure) – resource to be queried
Returns:the requested (not yet honored) quantity from a resource – if there is no request for the resource, 0 will be returned
Return type:float or int
requested_resources()
Returns:list of requested resources
Return type:list
resume(all=False, mode=None, urgent=False)

resumes an interrupted component

Parameters:
  • all (bool) – if True, the component returns to the original status, regardless of the number of interrupt levels
    if False (default), the interrupt level will be decremented and if the level reaches 0, the component will return to the original status.
  • mode (str preferred) – mode
    will be used in trace and can be used in animations
    if nothing is specified, the mode will be unchanged.
    also mode_time will be set to now, if mode is set.
  • urgent (bool) – urgency indicator
    if False (default), the component will be scheduled behind all other components scheduled for the same time
    if True, the component will be scheduled in front of all components scheduled for the same time

Note

Can be only applied to interrupted components.

running_process()
Returns:name of the running process – if data component, None
Return type:str
scheduled_time()
Returns:time the component scheduled for, if it is scheduled – returns inf otherwise
Return type:float
sequence_number()
Returns:sequence_number of the component – (the sequence number at initialization)
normally this will be the integer value of a serialized name, but also non serialized names (without a dotcomma at the end) will be numbered)
Return type:int
setup()

called immediately after initialization of a component.

by default this is a dummy method, but it can be overridden.

only keyword arguments will be passed

Example

class Car(sim.Component):
def setup(self, color):
self.color = color
def process(self):

redcar=Car(color=”red”)
bluecar=Car(color=”blue”)

skip_standby(value=None)
Parameters:value (bool) – new skip_standby value
if omitted, no change
Returns:skip_standby indicator – components with the skip_standby indicator of True, will not activate standby components after the component became current.
Return type:bool
standby(mode=None)

puts the component in standby mode

Parameters:mode (str preferred) – mode
will be used in trace and can be used in animations
if nothing specified, the mode will be unchanged.
also mode_time will be set to now, if mode is set.

Note

Not allowed for data components or main.

if to be used for the current component (which will be nearly always the case), use yield self.standby().

status()

returns the status of a component

possible values are
  • data
  • passive
  • scheduled
  • requesting
  • waiting
  • current
  • standby
  • interrupted
successor(q)
Parameters:q (Queue) – queue where the component belongs to
Returns:the successor of the component in the queue – if component is not at the tail.
returns None if component is at the tail.
Return type:Component
suppress_pause_at_step(value=None)
Parameters:value (bool) – new suppress_trace value
if omitted, no change
Returns:suppress_pause_at_step – components with the suppress_pause_at_step of True, will be ignored in a step
Return type:bool
suppress_trace(value=None)
Parameters:value (bool) – new suppress_trace value
if omitted, no change
Returns:suppress_trace – components with the suppress_status of True, will be ignored in the trace
Return type:bool
wait(*args, **kwargs)

wait for any or all of the given state values are met

Parameters:
  • args (sequence of items, where each item can be) –
    • a state, where value=True, priority=tail of waiters queue)
    • a tuple/list containing
      state, a value and optionally a priority.
      if the priority is not specified, this component will be added to the tail of the waiters queue
  • fail_at (float) – time out
    if the wait is not honored before fail_at, the wait will be cancelled and the parameter failed will be set.
    if not specified, the wait will not time out.
  • fail_delay (float) – time out
    if the wait is not honored before now+fail_delay, the request will be cancelled and the parameter failed will be set.
    if not specified, the wait will not time out.
  • all (bool) – if False (default), continue, if any of the given state/values is met
    if True, continue if all of the given state/values are met
  • mode (str preferred) – mode
    will be used in trace and can be used in animations
    if nothing specified, the mode will be unchanged.
    also mode_time will be set to now, if mode is set.

Note

Not allowed for data components or main.

If to be used for the current component (which will be nearly always the case), use yield self.wait(...).

It is allowed to wait for more than one value of a state
the parameter failed will be reset by a calling wait

If you want to check for all components to meet a value (and clause), use Component.wait(…, all=True)

The value may be specified in three different ways:

  • constant, that value is just compared to state.value()
    yield self.wait((light,”red”))
  • an expression, containg one or more $-signs the $ is replaced by state.value(), each time the condition is tested.
    self refers to the component under test, state refers to the state under test.
    yield self.wait((light,’$ in (“red”,”yellow”)’))
    yield self.wait((level,”$<30”))
  • a function. In that case the parameter should function that should accept three arguments: the value, the component under test and the state under test.
    usually the function will be a lambda function, but that’s not a requirement.
    yield self.wait((light,lambda t, comp, state: t in (“red”,”yellow”)))
    yield self.wait((level,lambda t, comp, state: t < 30))

Example

yield self.wait(s1)
–> waits for s1.value()==True
yield self.wait(s1,s2)
–> waits for s1.value()==True or s2.value==True
yield self.wait((s1,False,100),(s2,"on"),s3)
–> waits for s1.value()==False or s2.value==”on” or s3.value()==True
s1 is at the tail of waiters, because of the set priority
yield self.wait(s1,s2,all=True)
–> waits for s1.value()==True and s2.value==True

Environment

class salabim.Environment(trace=False, random_seed=None, time_unit='n/a', name=None, print_trace_header=True, isdefault_env=True, *args, **kwargs)

environment object

Parameters:
  • trace (bool) – defines whether to trace or not
    if omitted, False
  • random_seed (hashable object, usually int) – the seed for random, equivalent to random.seed()
    if “*”, a purely random value (based on the current time) will be used (not reproducable)
    if the null string, no action on random is taken
    if None (the default), 1234567 will be used.
  • time_unit (str) – Supported time_units:
    “years”, “weeks”, “days”, “hours”, “minutes”, “seconds”, “milliseconds”, “microseconds”, “n/a”
  • name (str) – name of the environment
    if the name ends with a period (.), auto serializing will be applied
    if the name end with a comma, auto serializing starting at 1 will be applied
    if omitted, the name will be derived from the class (lowercased) or “default environment” if isdefault_env is True.
  • print_trace_header (bool) – if True (default) print a (two line) header line as a legend
    if False, do not print a header
    note that the header is only printed if trace=True
  • isdefault_env (bool) – if True (default), this environment becomes the default environment
    if False, this environment will not be the default environment
    if omitted, this environment becomes the default environment

Note

The trace may be switched on/off later with trace
The seed may be later set with random_seed()
Initially, the random stream will be seeded with the value 1234567. If required to be purely, not not reproducable, values, use random_seed=”*”.

an_clocktext()

function to initialize the system clocktext
called by run(), if animation is True.
may be overridden to change the standard behaviour.

an_menu_buttons()

function to initialize the menu buttons
may be overridden to change the standard behaviour.

an_modelname()

function to show the modelname
called by run(), if animation is True.
may be overridden to change the standard behaviour.

an_synced_buttons()

function to initialize the synced buttons
may be overridden to change the standard behaviour.

an_unsynced_buttons()

function to initialize the unsynced buttons
may be overridden to change the standard behaviour.

animate(value=None)

animate indicator

Parameters:value (bool) – new animate indicator
if not specified, no change
Returns:animate status
Return type:bool

Note

When the run is not issued, no acction will be taken.

animation_parameters(animate=True, synced=None, speed=None, width=None, height=None, x0=None, y0=None, x1=None, background_color=None, foreground_color=None, fps=None, modelname=None, use_toplevel=None, show_fps=None, show_time=None, video=None, video_repeat=None, video_pingpong=None)

set animation parameters

Parameters:
  • animate (bool) – animate indicator
    if not specified, set animate on
  • synced (bool) – specifies whether animation is synced
    if omitted, no change. At init of the environment synced will be set to True
  • speed (float) – speed
    specifies how much faster or slower than real time the animation will run. e.g. if 2, 2 simulation time units will be displayed per second.
  • width (int) – width of the animation in screen coordinates
    if omitted, no change. At init of the environment, the width will be set to 1024 for non Pythonista and the current screen width for Pythonista.
  • height (int) – height of the animation in screen coordinates
    if omitted, no change. At init of the environment, the height will be set to 768 for non Pythonista and the current screen height for Pythonista.
  • x0 (float) – user x-coordinate of the lower left corner
    if omitted, no change. At init of the environment, x0 will be set to 0.
  • y0 (float) – user y_coordinate of the lower left corner
    if omitted, no change. At init of the environment, y0 will be set to 0.
  • x1 (float) – user x-coordinate of the lower right corner
    if omitted, no change. At init of the environment, x1 will be set to 1024 for non Pythonista and the current screen width for Pythonista.
  • background_color (colorspec) – color of the background
    if omitted, no change. At init of the environment, this will be set to white.
  • foreground_color (colorspec) – color of foreground (texts)
    if omitted and background_color is specified, either white of black will be used, in order to get a good contrast with the background color.
    if omitted and background_color is also omitted, no change. At init of the environment, this will be set to black.
  • fps (float) – number of frames per second
  • modelname (str) – name of model to be shown in upper left corner, along with text “a salabim model”
    if omitted, no change. At init of the environment, this will be set to the null string, which implies suppression of this feature.
  • use_toplevel (bool) – if salabim animation is used in parallel with other modules using tkinter, it might be necessary to initialize the root with tkinter.TopLevel(). In that case, set this parameter to True.
    if False (default), the root will be initialized with tkinter.Tk()
  • show_fps (bool) – if True, show the number of frames per second
    if False, do not show the number of frames per second (default)
  • show_time (bool) – if True, show the time (default)
    if False, do not show the time
  • video (str) – if video is not omitted, a video with the name video will be created.
    Normally, use .mp4 as extension.
    If the video extension is not .gif, a codec may be added by appending a plus sign and the four letter code name, like “myvideo.avi+DIVX”.
    If no codec is given, MP4V will be used as codec.
  • video_repeat (int) – number of times gif should be repeated
    0 means inifinite
    at init of the environment video_repeat is 1
    this only applies to gif files production.
  • video_pingpong (bool) – if True, all frames will be added reversed at the end of the video (useful for smooth loops) at init of the environment video_pingpong is False
    this only applies to gif files production.

Note

The y-coordinate of the upper right corner is determined automatically in such a way that the x and scaling are the same.

animation_post_tick(t)

called just after the animation object loop.
Default behaviour: just return

Parameters:t (float) – Current (animation) time.
animation_pre_tick(t)

called just before the animation object loop.
Default behaviour: just return

Parameters:t (float) – Current (animation) time.
background_color(value=None)

background_color of the animation

Parameters:value (colorspec) – new background_color
if not specified, no change
Returns:background_color of animation
Return type:colorspec
base_name()

returns the base name of the environment (the name used at initialization)

beep()

Beeps

Works only on Windows and iOS (Pythonista). For other platforms this is just a dummy method.

colorinterpolate(t, t0, t1, v0, v1)

does linear interpolation of colorspecs

Parameters:
  • t (float) – value to be interpolated from
  • t0 (float) – f(t0)=v0
  • t1 (float) – f(t1)=v1
  • v0 (colorspec) – f(t0)=v0
  • v1 (colorspec) – f(t1)=v1
Returns:

linear interpolation between v0 and v1 based on t between t0 and t

Return type:

colorspec

Note

Note that no extrapolation is done, so if t<t0 ==> v0 and t>t1 ==> v1
This function is heavily used during animation

colorspec_to_tuple(colorspec)

translates a colorspec to a tuple

Parameters:colorspec (tuple, list or str) – #rrggbb ==> alpha = 255 (rr, gg, bb in hex)
#rrggbbaa ==> alpha = aa (rr, gg, bb, aa in hex)
colorname ==> alpha = 255
(colorname, alpha)
(r, g, b) ==> alpha = 255
(r, g, b, alpha)
"fg" ==> foreground_color
"bg" ==> background_color
Returns:
Return type:(r, g, b, a)
current_component()
Returns:the current_component
Return type:Component
days(t)

convert the given time in days to the current time unit

Parameters:t (float) – time in days
Returns:time in days, converted to the current time_unit
Return type:float
foreground_color(value=None)

foreground_color of the animation

Parameters:value (colorspec) – new foreground_color
if not specified, no change
Returns:foreground_color of animation
Return type:colorspec
fps(value=None)
Parameters:value (int) – new fps
if not specified, no change
Returns:fps
Return type:bool
get_time_unit()

gets time unit

Returns:Current time unit dimension (default “n/a”)
Return type:str
height(value=None)

height of the animation in screen coordinates

Parameters:value (int) – new height
if not specified, no change
Returns:height of animation
Return type:int
hours(t)

convert the given time in hours to the current time unit

Parameters:t (float) – time in hours
Returns:time in hours, converted to the current time_unit
Return type:float
is_dark(colorspec)
Parameters:colorspec (colorspec) – color to check
Returns:True, if the colorspec is dark (rather black than white)
False, if the colorspec is light (rather white than black
if colorspec has alpha=0 (total transparent), the background_color will be tested
Return type:bool
main()
Returns:the main component
Return type:Component
microseconds(t)

convert the given time in microseconds to the current time unit

Parameters:t (float) – time in microseconds
Returns:time in microseconds, converted to the current time_unit
Return type:float
milliseconds(t)

convert the given time in milliseconds to the current time unit

Parameters:t (float) – time in milliseconds
Returns:time in milliseconds, converted to the current time_unit
Return type:float
minutes(t)

convert the given time in minutes to the current time unit

Parameters:t (float) – time in minutes
Returns:time in minutes, converted to the current time_unit
Return type:float
modelname(value=None)
Parameters:value (str) – new modelname
if not specified, no change
Returns:modelname
Return type:str

Note

If modelname is the null string, nothing will be displayed.

name(value=None)
Parameters:value (str) – new name of the environment if omitted, no change
Returns:Name of the environment
Return type:str

Note

base_name and sequence_number are not affected if the name is changed

now()
Returns:the current simulation time
Return type:float
peek()

returns the time of the next component to become current
if there are no more events, peek will return inf
Only for advance use with animation / GUI event loops

print_info(as_str=False, file=None)

prints information about the environment

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

print_trace(s1='', s2='', s3='', s4='', s0=None, _optional=False)

prints a trace line

Parameters:
  • s1 (str) – part 1 (usually formatted now), padded to 10 characters
  • s2 (str) – part 2 (usually only used for the compoent that gets current), padded to 20 characters
  • s3 (str) – part 3, padded to 35 characters
  • s4 (str) – part 4
  • s0 (str) – part 0. if omitted, the line number from where the call was given will be used at the start of the line. Otherwise s0, left padded to 7 characters will be used at the start of the line.
  • _optional (bool) – for internal use only. Do not set this flag!

Note

if self.trace is False, nothing is printed
if the current component’s suppress_trace is True, nothing is printed

print_trace_header()

print a (two line) header line as a legend
also the legend for line numbers will be printed
not that the header is only printed if trace=True

reset_now(new_now=0)

reset the current time

Parameters:new_now (float) – now will be set to new_now
default: 0

Note

Internally, salabim still works with the ‘old’ time. Only in the interface from and to the user program, a correction will be applied.

The registered time in monitors will be always is the ‘old’ time. This is only relevant when using the time value in Monitor.xt() or Monitor.tx().

run(duration=None, till=None, urgent=False)

start execution of the simulation

Parameters:
  • duration (float) – schedule with a delay of duration
    if 0, now is used
  • till (float) – schedule time
    if omitted, inf is assumed. See also not below
  • urgent (bool) – urgency indicator
    if False (default), main will be scheduled behind all other components scheduled for the same time
    if True, main will be scheduled in front of all components scheduled for the same time

Note

if neither till nor duration is specified, the main component will be reactivated at the time there are no more events on the eventlist, i.e. possibly not at inf.
if you want to run till inf (particularly when animating), issue run(sim.inf)
only issue run() from the main level

scale()

scale of the animation, i.e. width / (x1 - x0)

Returns:scale
Return type:float

Note

It is not possible to set this value explicitely.

screen_to_usercoordinates_size(screensize)

converts a screen size to a value to be used with user coordinates

Parameters:screensize (float) – screen size to be converted
Returns:value corresponding with screensize in user coordinates
Return type:float
screen_to_usercoordinates_x(screenx)

converts a screen x coordinate to a user x coordinate

Parameters:screenx (float) – screen x coordinate to be converted
Returns:user x coordinate
Return type:float
screen_to_usercoordinates_y(screeny)

converts a screen x coordinate to a user x coordinate

Parameters:screeny (float) – screen y coordinate to be converted
Returns:user y coordinate
Return type:float
seconds(t)

convert the given time in seconds to the current time unit

Parameters:t (float) – time in seconds
Returns:time in secoonds, converted to the current time_unit
Return type:float
sequence_number()
Returns:sequence_number of the environment – (the sequence number at initialization)
normally this will be the integer value of a serialized name, but also non serialized names (without a dot or a comma at the end) will be numbered)
Return type:int
setup()

called immediately after initialization of an environment.

by default this is a dummy method, but it can be overridden.

only keyword arguments are passed

show_fps(value=None)
Parameters:value (bool) – new show_fps
if not specified, no change
Returns:show_fps
Return type:bool
show_time(value=None)
Parameters:value (bool) – new show_time
if not specified, no change
Returns:show_time
Return type:bool
snapshot(filename)

Takes a snapshot of the current animated frame (at time = now()) and saves it to a file

Parameters:filename (str) – file to save the current animated frame to.
The following formats are accepted: .PNG, .JPG, .BMP, .GIF and .TIFF are supported. Other formats are not possible. Note that, apart from .JPG files. the background may be semi transparent by setting the alpha value to something else than 255.
speed(value=None)
Parameters:value (float) – new speed
if not specified, no change
Returns:speed
Return type:float
step()

executes the next step of the future event list

for advanced use with animation / GUI loops

suppress_trace_standby(value=None)

suppress_trace_standby status

Parameters:value (bool) – new suppress_trace_standby status
if omitted, no change
Returns:suppress trace status
Return type:bool

Note

By default, suppress_trace_standby is True, meaning that standby components are (apart from when they become non standby) suppressed from the trace.
If you set suppress_trace_standby to False, standby components are fully traced.

synced(value=None)
Parameters:value (bool) – new synced
if not specified, no change
Returns:synced
Return type:bool
time_to_str_format(format=None)

sets / gets the the format to display times in trace, animation, etc.

Parameters:format (str) – specifies how the time should be displayed in trace, animation, etc.
the format specifier should result in 10 characters. Examples:
“{:10.3f}”, “{:10.4f}”, “{:10.0f}” and “{:8.1f} h”
Make sure that the returned length is exactly 10 characters.
Returns:current specifier (initialized to “{
Return type:10.3f}”)
to_days(t)

convert time t to days

Parameters:t (time) –
Returns:Time t converted to days
Return type:float
to_hours(t)

convert time t to hours

Parameters:t (time) –
Returns:Time t converted to hours
Return type:float
to_microseconds(t)

convert time t to microseconds

Parameters:t (time in microseconds) –
Returns:Time t converted to microseconds
Return type:float
to_milliseconds(t)

convert time t to milliseconds

Parameters:t (time in milliseconds) –
Returns:Time t converted to milliseconds
Return type:float
to_minutes(t)

convert time t to minutes

Parameters:t (time) –
Returns:Time t converted to minutes
Return type:float
to_seconds(t)

convert time t to seconds

Parameters:t (time) –
Returns:Time t converted to seconds
Return type:float
to_weeks(t)

convert time t to weeks

Parameters:t (time) –
Returns:Time t converted to weeks
Return type:float
to_years(t)

convert time t to years

Parameters:t (time) –
Returns:Time t converted to years
Return type:float
trace(value=None)

trace status

Parameters:value (bool) – new trace status
if omitted, no change
Returns:trace status
Return type:bool

Note

If you want to test the status, always include parentheses, like

if env.trace():
user_to_screencoordinates_size(usersize)

converts a user size to a value to be used with screen coordinates

Parameters:usersize (float) – user size to be converted
Returns:value corresponding with usersize in screen coordinates
Return type:float
user_to_screencoordinates_x(userx)

converts a user x coordinate to a screen x coordinate

Parameters:userx (float) – user x coordinate to be converted
Returns:screen x coordinate
Return type:float
user_to_screencoordinates_y(usery)

converts a user x coordinate to a screen x coordinate

Parameters:usery (float) – user y coordinate to be converted
Returns:screen y coordinate
Return type:float
video(value=None)

video name

Parameters:value (str, list or tuple) – new video name
if not specified, no change
for explanation see animation_parameters()
Returns:video
Return type:str, list or tuple

Note

If video is the null string, the video (if any) will be closed.

video_close()

closes the current animation video recording, if any.

video_pingpong(value=None)

video pingponf

Parameters:value (bool) – new video pingpong
if not specified, no change
Returns:video pingpong
Return type:bool

Note

Applies only to gif animation.

video_repeat(value=None)

video repeat

Parameters:value (int) – new video repeat
if not specified, no change
Returns:video repeat
Return type:int

Note

Applies only to gif animation.

weeks(t)

convert the given time in weeks to the current time unit

Parameters:t (float) – time in weeks
Returns:time in weeks, converted to the current time_unit
Return type:float
width(value=None)

width of the animation in screen coordinates

Parameters:value (int) – new width
if not specified, no change
Returns:width of animation
Return type:int
x0(value=None)

x coordinate of lower left corner of animation

Parameters:value (float) – new x coordinate
Returns:x coordinate of lower left corner of animation
Return type:float
x1(value=None)

x coordinate of upper right corner of animation : float

Parameters:value (float) – new x coordinate
if not specified, no change
Returns:x coordinate of upper right corner of animation
Return type:float
y0(value=None)

y coordinate of lower left corner of animation

Parameters:value (float) – new y coordinate
if not specified, no change
Returns:y coordinate of lower left corner of animation
Return type:float
y1()

y coordinate of upper right corner of animation

Returns:y coordinate of upper right corner of animation
Return type:float

Note

It is not possible to set this value explicitely.

years(t)

convert the given time in years to the current time unit

Parameters:t (float) – time in years
Returns:time in years, converted to the current time_unit
Return type:float

ItemFile

class salabim.ItemFile(filename)

define an item file to be used with read_item, read_item_int, read_item_float and read_item_bool

Parameters:filename (str) – file to be used for subsequent read_item, read_item_int, read_item_float and read_item_bool calls
or
content to be interpreted used in subsequent read_item calls. The content should have at least one linefeed character and will be usually triple quoted.

Note

It is advised to use ItemFile with a context manager, like

with sim.ItemFile("experiment0.txt") as f:
    run_length = f.read_item_float() |n|
    run_name = f.read_item() |n|

Alternatively, the file can be opened and closed explicitely, like

f = sim.ItemFile("experiment0.txt")
run_length = f.read_item_float()
run_name = f.read_item()
f.close()

Item files consist of individual items separated by whitespace (blank or tab)|n| If a blank or tab is required in an item, use single or double quotes
All text following # on a line is ignored
All texts on a line within curly brackets {} is ignored and considered white space.
Curly braces cannot spawn multiple lines and cannot be nested.

Example

Item1
"Item 2"
    Item3 Item4 # comment
Item5 {five} Item6 {six}
'Double quote" in item'
"Single quote' in item"
True
read_item()

read next item from the ItemFile

if the end of file is reached, EOFError is raised

read_item_bool()

read next item from the ItemFile as bool

A value of False (not case sensitive) will return False
A value of 0 will return False
The null string will return False
Any other value will return True

if the end of file is reached, EOFError is raised

read_item_float()

read next item from the ItemFile as float

if the end of file is reached, EOFError is raised

read_item_int()

read next field from the ItemFile as int.

if the end of file is reached, EOFError is raised

Monitor

class salabim.Monitor(name=None, monitor=True, level=False, initial_tally=None, type=None, weight_legend=None, env=None, *args, **kwargs)

Monitor object

Parameters:
  • name (str) – name of the monitor
    if the name ends with a period (.), auto serializing will be applied
    if the name end with a comma, auto serializing starting at 1 will be applied
    if omitted, the name will be derived from the class it is defined in (lowercased)
  • monitor (bool) – if True (default), monitoring will be on.
    if False, monitoring is disabled
    it is possible to control monitoring later, with the monitor method
  • level (bool) – if False (default), individual values are tallied, optionally with weight
    if True, the tallied vslues are interpreted as levels
  • initial_tally (any, preferably int, float or translatable into int or float) – initial value for the a level monitor
    it is important to set the value correctly. default: 0
    not available for non level monitors
  • type (str) –
    specifies how tallied values are to be stored
    • ”any” (default) stores values in a list. This allows
      non numeric values. In calculations the values are forced to a numeric value (0 if not possible)
    • ”bool” (True, False) Actually integer >= 0 <= 255 1 byte
    • ”int8” integer >= -128 <= 127 1 byte
    • ”uint8” integer >= 0 <= 255 1 byte
    • ”int16” integer >= -32768 <= 32767 2 bytes
    • ”uint16” integer >= 0 <= 65535 2 bytes
    • ”int32” integer >= -2147483648<= 2147483647 4 bytes
    • ”uint32” integer >= 0 <= 4294967295 4 bytes
    • ”int64” integer >= -9223372036854775808 <= 9223372036854775807 8 bytes
    • ”uint64” integer >= 0 <= 18446744073709551615 8 bytes
    • ”float” float 8 bytes
  • weight_legend (str) – used in print_statistics and print_histogram to indicate the dimension of weight or duration (for level monitors, e.g. minutes. Default: weight for non level monitors, duration for level monitors.
  • env (Environment) – environment where the monitor is defined
    if omitted, default_env will be used
animate(*args, **kwargs)

animates the monitor in a panel

Parameters:
  • linecolor (colorspec) – color of the line or points (default foreground color)
  • linewidth (int) – width of the line or points (default 1 for line, 3 for points)
  • fillcolor (colorspec) – color of the panel (default transparent)
  • bordercolor (colorspec) – color of the border (default foreground color)
  • borderlinewidth (int) – width of the line around the panel (default 1)
  • nowcolor (colorspec) – color of the line indicating now (default red)
  • titlecolor (colorspec) – color of the title (default foreground color)
  • titlefont (font) – font of the title (default null string)
  • titlefontsize (int) – size of the font of the title (default 15)
  • title (str) – title to be shown above panel
    default: name of the monitor
  • x (int) – x-coordinate of panel, relative to xy_anchor, default 0
  • y (int) – y-coordinate of panel, relative to xy_anchor. default 0
  • xy_anchor (str) – specifies where x and y are relative to
    possible values are (default: sw):
    nw    n    ne
    w     c     e
    sw    s    se
  • vertical_offset (float) –
    the vertical position of x within the panel is
    vertical_offset + x * vertical_scale (default 0)
  • vertical_scale (float) – the vertical position of x within the panel is vertical_offset + x * vertical_scale (default 5)
  • horizontal_scale (float) – for timescaled monitors the relative horizontal position of time t within the panel is on t * horizontal_scale, possibly shifted (default 1)|n| for non timescaled monitors, the relative horizontal position of index i within the panel is on i * horizontal_scale, possibly shifted (default 5)|n|
  • width (int) – width of the panel (default 200)
  • height (int) – height of the panel (default 75)
  • layer (int) – layer (default 0)
Returns:

reference to AnimateMonitor object

Return type:

AnimateMonitor

Note

It is recommended to use sim.AnimateMonitor instead

All measures are in screen coordinates

base_name()
Returns:base name of the monitor (the name used at initialization)
Return type:str
bin_duration(lowerbound, upperbound)

total duration of tallied values in range (lowerbound,upperbound]

Parameters:
  • lowerbound (float) – non inclusive lowerbound
  • upperbound (float) – inclusive upperbound
  • ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
Returns:

total duration of values >lowerbound and <=upperbound

Return type:

int

Note

Not available for level monitors

bin_number_of_entries(lowerbound, upperbound, ex0=False)

count of the number of tallied values in range (lowerbound,upperbound]

Parameters:
  • lowerbound (float) – non inclusive lowerbound
  • upperbound (float) – inclusive upperbound
  • ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
Returns:

number of values >lowerbound and <=upperbound

Return type:

int

Note

Not available for level monitors

bin_weight(lowerbound, upperbound)

total weight of tallied values in range (lowerbound,upperbound]

Parameters:
  • lowerbound (float) – non inclusive lowerbound
  • upperbound (float) – inclusive upperbound
  • ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
Returns:

total weight of values >lowerbound and <=upperbound

Return type:

int

Note

Not available for level monitors

deregister(registry)

deregisters the monitor in the registry

Parameters:registry (list) – list of registered objects
Returns:monitor (self)
Return type:Monitor
duration(ex0=False)

total duration

Parameters:ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
Returns:total duration
Return type:float

Note

Not available for non level monitors

duration_zero()

total duratiom of zero entries

Returns:total duration of zero entries
Return type:float

Note

Not available for non level monitors

get(t=None)
Parameters:t (float) – time at which the value of the level is to be returned
default: now
Returns:last tallied value – Instead of this method, the level monitor can also be called directly, like

level = sim.Monitor(“level”, level=True)

print(level())
print(level.get()) # identical

Return type:any, usually float

Note

If the value is not available, self.off will be returned.

histogram_autoscale(ex0=False)

used by histogram_print to autoscale
may be overridden.

Parameters:ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
Returns:bin_width, lowerbound, number_of_bins
Return type:tuple
maximum(ex0=False)

maximum of tallied values

Parameters:ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
Returns:maximum
Return type:float
mean(ex0=False)

mean of tallied values

Parameters:ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
Returns:mean
Return type:float

Note

For weighs are applied , the weighted mean is returned

median(ex0=False)

median of tallied values

Parameters:ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
Returns:median
Return type:float

Note

If weight are applied, the weighted median is returned

merge(*monitors, **kwargs)

merges this monitor with other monitors

Parameters:
  • monitors (sequence) – zero of more monitors to be merged to this monitor
  • name (str) – name of the merged monitor
    default: name of this monitor + “.merged”
Returns:

merged monitor

Return type:

Monitor

Note

Level monitors can only be merged with level monitors
Non level monitors can only be merged with non level monitors
Only monitors with the same type can be merged
If no monitors are specified, a copy is created.
For level monitors, merging means summing the available x-values|n|

minimum(ex0=False)

minimum of tallied values

Parameters:ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
Returns:minimum
Return type:float
monitor(value=None)

enables/disables monitor

Parameters:value (bool) – if True, monitoring will be on.
if False, monitoring is disabled
if omitted, no change
Returns:True, if monitoring enabled. False, if not
Return type:bool
name(value=None)
Parameters:value (str) – new name of the monitor if omitted, no change
Returns:Name of the monitor
Return type:str

Note

base_name and sequence_number are not affected if the name is changed

number_of_entries(ex0=False)

count of the number of entries

Parameters:ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
Returns:number of entries
Return type:int

Note

Not available for level monitors

number_of_entries_zero()

count of the number of zero entries

Returns:number of zero entries
Return type:int

Note

Not available for level monitors

percentile(q, ex0=False)

q-th percentile of tallied values

Parameters:
  • q (float) – percentage of the distribution
    values <0 are treated a 0
    values >100 are treated as 100
  • ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
Returns:

q-th percentile
0 returns the minimum, 50 the median and 100 the maximum

Return type:

float

Note

If weights are applied, the weighted percentile is returned

print_histogram(number_of_bins=None, lowerbound=None, bin_width=None, values=False, ex0=False, as_str=False, file=None)

print monitor statistics and histogram

Parameters:
  • number_of_bins (int) – number of bins
    default: 30
    if <0, also the header of the histogram will be surpressed
  • lowerbound (float) – first bin
    default: 0
  • bin_width (float) – width of the bins
    default: 1
  • values (bool) – if False (default), bins will be used
    if True, the individual values will be shown (in the right order). in that case, no cumulative values will be given
  • ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
as_str: bool
if False (default), print the histogram if True, return a string containing the histogram
file: file
if None(default), all output is directed to stdout
otherwise, the output is directed to the file
Returns:histogram (if as_str is True)
Return type:str

Note

If number_of_bins, lowerbound and bin_width are omitted, the histogram will be autoscaled, with a maximum of 30 classes.

print_histograms(number_of_bins=None, lowerbound=None, bin_width=None, values=False, ex0=False, as_str=False, file=None)

print monitor statistics and histogram

Parameters:
  • number_of_bins (int) – number of bins
    default: 30
    if <0, also the header of the histogram will be surpressed
  • lowerbound (float) – first bin
    default: 0
  • bin_width (float) – width of the bins
    default: 1
  • values (bool) – if False (default), bins will be used
    if True, the individual values will be shown (sorted on the value). in that case, no cumulative values will be given
  • ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
  • as_str (bool) – if False (default), print the histogram if True, return a string containing the histogram
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

histogram (if as_str is True)

Return type:

str

Note

If number_of_bins, lowerbound and bin_width are omitted, the histogram will be autoscaled, with a maximum of 30 classes.
Exactly same functionality as Monitor.print_histogram()

print_statistics(show_header=True, show_legend=True, do_indent=False, as_str=False, file=None)

print monitor statistics

Parameters:
  • show_header (bool) – primarily for internal use
  • show_legend (bool) – primarily for internal use
  • do_indent (bool) – primarily for internal use
  • as_str (bool) – if False (default), print the statistics if True, return a string containing the statistics
  • file (file) – if Noneb(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

statistics (if as_str is True)

Return type:

str

register(registry)

registers the monitor in the registry

Parameters:registry (list) – list of (to be) registered objects
Returns:monitor (self)
Return type:Monitor

Note

Use Monitor.deregister if monitor does not longer need to be registered.

reset(monitor=None)

resets monitor

Parameters:monitor (bool) – if True, monitoring will be on.
if False, monitoring is disabled if omitted, no change of monitoring state
reset_monitors(monitor=None)

resets monitor

Parameters:monitor (bool) – if True (default), monitoring will be on.
if False, monitoring is disabled
if omitted, the monitor state remains unchanged

Note

Exactly same functionality as Monitor.reset()

sequence_number()
Returns:sequence_number of the monitor – (the sequence number at initialization)
normally this will be the integer value of a serialized name, but also non serialized names (without a dot or a comma at the end) will be numbered)
Return type:int
setup()

called immediately after initialization of a monitor.

by default this is a dummy method, but it can be overridden.

only keyword arguments are passed

slice(start=None, stop=None, modulo=None, name=None)

slices this monitor (creates a subset)

Parameters:
  • start (float) – if modulo is not given, the start of the slice
    if modulo is given, this is indicates the slice period start (modulo modulo)
  • stop (float) – if modulo is not given, the end of the slice
    if modulo is given, this is indicates the slice period end (modulo modulo)
    note that stop is excluded from the slice (open at right hand side)
  • modulo (float) – specifies the distance between slice periods
    if not specified, just one slice subset is used.
  • name (str) – name of the sliced monitor
    default: name of this monitor + “.sliced”
Returns:

sliced monitor

Return type:

Monitor

std(ex0=False)

standard deviation of tallied values

Parameters:ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
Returns:standard deviation
Return type:float

Note

For weights are applied, the weighted standard deviation is returned

tally(value, weight=1)
Parameters:
  • x (any, preferably int, float or translatable into int or float) – value to be tallied
  • weight (float) – weight to be tallied
    default : 1
tx(ex0=False, exoff=False, force_numeric=False, add_now=True)

tuple of array with timestamps and array/list with x-values

Parameters:
  • ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
  • exoff (bool) – if False (default), include self.off. if True, exclude self.off’s
    non level monitors will return all values, regardless of exoff
  • force_numeric (bool) – if True (default), convert non numeric tallied values numeric if possible, otherwise assume 0
    if False, do not interpret x-values, return as list if type is list
  • add_now (bool) – if True (default), the last tallied x-value and the current time is added to the result
    if False, the result ends with the last tallied value and the time that was tallied
    non level monitors will never add now
Returns:

array with timestamps and array/list with x-values

Return type:

tuple

Note

The value self.off is stored when monitoring is turned off
The timestamps are not corrected for any reset_now() adjustment.

value_duration(value)

total duration of tallied values equal to value or in value

Parameters:value (any) – if list, tuple or set, check whether the tallied value is in value
otherwise, check whether the tallied value equals the given value
Returns:total of duration of tallied values in value or equal to value
Return type:int

Note

Not available for non level monitors

value_number_of_entries(value)

count of the number of tallied values equal to value or in value

Parameters:value (any) – if list, tuple or set, check whether the tallied value is in value
otherwise, check whether the tallied value equals the given value
Returns:number of tallied values in value or equal to value
Return type:int

Note

Not available for level monitors

value_weight(value)

total weight of tallied values equal to value or in value

Parameters:value (any) – if list, tuple or set, check whether the tallied value is in value
otherwise, check whether the tallied value equals the given value
Returns:total of weights of tallied values in value or equal to value
Return type:int

Note

Not available for level monitors

weight(ex0=False)

sum of weights

Parameters:ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
Returns:sum of weights
Return type:float

Note

Not available for level monitors

weight_zero()

sum of weights of zero entries

Returns:sum of weights of zero entries
Return type:float

Note

Not available for level monitors

x(ex0=False, force_numeric=True)

array/list of tallied values

Parameters:
  • ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
  • force_numeric (bool) – if True (default), convert non numeric tallied values numeric if possible, otherwise assume 0
    if False, do not interpret x-values, return as list if type is any (list)
Returns:

all tallied values

Return type:

array/list

Note

Not available for level monitors. Use xduration(), xt() or tx() instead.

xduration(ex0=False, force_numeric=True)

array/list of tallied values

Parameters:
  • ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
  • force_numeric (bool) – if True (default), convert non numeric tallied values numeric if possible, otherwise assume 0
    if False, do not interpret x-values, return as list if type is list
Returns:

all tallied values

Return type:

array/list

Note

not available for non level monitors

xt(ex0=False, exoff=False, force_numeric=True, add_now=True)

tuple of array/list with x-values and array with timestamp

Parameters:
  • ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
  • exoff (bool) – if False (default), include self.off. if True, exclude self.off’s
    non level monitors will return all values, regardless of exoff
  • force_numeric (bool) – if True (default), convert non numeric tallied values numeric if possible, otherwise assume 0
    if False, do not interpret x-values, return as list if type is list
  • add_now (bool) – if True (default), the last tallied x-value and the current time is added to the result
    if False, the result ends with the last tallied value and the time that was tallied
    non level monitors will never add now
Returns:

array/list with x-values and array with timestamps

Return type:

tuple

Note

The value self.off is stored when monitoring is turned off
The timestamps are not corrected for any reset_now() adjustment.

xweight(ex0=False, force_numeric=True)

array/list of tallied values

Parameters:
  • ex0 (bool) – if False (default), include zeroes. if True, exclude zeroes
  • force_numeric (bool) – if True (default), convert non numeric tallied values numeric if possible, otherwise assume 0
    if False, do not interpret x-values, return as list if type is list
Returns:

all tallied values

Return type:

array/list

Note

not available for level monitors

Queue

class salabim.Queue(name=None, monitor=True, fill=None, env=None, *args, **kwargs)

Queue object

Parameters:
  • fill (Queue, list or tuple) – fill the queue with the components in fill
    if omitted, the queue will be empty at initialization
  • name (str) – name of the queue
    if the name ends with a period (.), auto serializing will be applied
    if the name end with a comma, auto serializing starting at 1 will be applied
    if omitted, the name will be derived from the class it is defined in (lowercased)
  • monitor (bool) – if True (default) , both length and length_of_stay are monitored
    if False, monitoring is disabled.
  • env (Environment) – environment where the queue is defined
    if omitted, default_env will be used
add(component)

adds a component to the tail of a queue

Parameters:component (Component) – component to be added to the tail of the queue
may not be member of the queue yet

Note

the priority will be set to the priority of the tail of the queue, if any or 0 if queue is empty
This method is equivalent to append()

add_at_head(component)

adds a component to the head of a queue

Parameters:component (Component) – component to be added to the head of the queue
may not be member of the queue yet

Note

the priority will be set to the priority of the head of the queue, if any or 0 if queue is empty

add_behind(component, poscomponent)

adds a component to a queue, just behind a component

Parameters:
  • component (Component) – component to be added to the queue
    may not be member of the queue yet
  • poscomponent (Component) – component behind which component will be inserted
    must be member of the queue

Note

the priority of component will be set to the priority of poscomponent

add_in_front_of(component, poscomponent)

adds a component to a queue, just in front of a component

Parameters:
  • component (Component) – component to be added to the queue
    may not be member of the queue yet
  • poscomponent (Component) – component in front of which component will be inserted
    must be member of the queue

Note

the priority of component will be set to the priority of poscomponent

add_sorted(component, priority)

adds a component to a queue, according to the priority

Parameters:
  • component (Component) – component to be added to the queue
    may not be member of the queue yet
  • priority (type that can be compared with other priorities in the queue) – priority in the queue

Note

The component is placed just before the first component with a priority > given priority

animate(*args, **kwargs)

Animates the components in the queue.

Parameters:
  • x (float) – x-position of the first component in the queue
    default: 50
  • y (float) – y-position of the first component in the queue
    default: 50
  • direction (str) – if “w”, waiting line runs westwards (i.e. from right to left)
    if “n”, waiting line runs northeards (i.e. from bottom to top)
    if “e”, waiting line runs eastwards (i.e. from left to right) (default)
    if “s”, waiting line runs southwards (i.e. from top to bottom)
  • reverse (bool) – if False (default), display in normal order. If True, reversed.
  • max_length (int) – maximum number of components to be displayed
  • xy_anchor (str) – specifies where x and y are relative to
    possible values are (default: sw):
    nw    n    ne
    w     c     e
    sw    s    se
  • id (any) – the animation works by calling the animation_objects method of each component, optionally with id. By default, this is self, but can be overriden, particularly with the queue
  • arg (any) – this is used when a parameter is a function with two parameters, as the first argument or if a parameter is a method as the instance
    default: self (instance itself)
Returns:

reference to AnimationQueue object

Return type:

AnimationQueue

Note

It is recommended to use sim.AnimateQueue instead

All measures are in screen coordinates

All parameters, apart from queue and arg can be specified as:
- a scalar, like 10
- a function with zero arguments, like lambda: title
- a function with one argument, being the time t, like lambda t: t + 10
- a function with two parameters, being arg (as given) and the time, like lambda comp, t: comp.state
- a method instance arg for time t, like self.state, actually leading to arg.state(t) to be called

append(component)

appends a component to the tail of a queue

Parameters:component (Component) – component to be appened to the tail of the queue
may not be member of the queue yet

Note

the priority will be set to the priority of the tail of the queue, if any or 0 if queue is empty
This method is equivalent to add()

base_name()
Returns:base name of the queue (the name used at initialization)
Return type:str
clear()

empties a queue

removes all components from a queue

component_with_name(txt)

returns a component in the queue according to its name

Parameters:txt (str) – name of component to be retrieved
Returns:the first component in the queue with name txt – returns None if not found
Return type:Component
copy(name=None, monitor=<function Queue.monitor>)

returns a copy of two queues

Parameters:
  • name (str) – name of the new queue
    if omitted, “copy of ” + self.name()
  • monitor (bool) – if True, monitor the queue
    if False (default), do not monitor the queue
Returns:

queue with all elements of self

Return type:

Queue

Note

The priority will be copied from original queue. Also, the order will be maintained.

count(component)

component count

Parameters:component (Component) – component to count
Returns:
Return type:number of occurences of component in the queue

Note

The result can only be 0 or 1

deregister(registry)

deregisters the queue in the registry

Parameters:registry (list) – list of registered queues
Returns:queue (self)
Return type:Queue
difference(q, name=None, monitor=<function Queue.monitor>)

returns the difference of two queues

Parameters:
  • q (Queue) – queue to be ‘subtracted’ from self
  • name (str) – name of the new queue
    if omitted, self.name() - q.name()
  • monitor (bool) – if True, monitor the queue
    if False (default), do not monitor the queue
Returns:

Return type:

queue containing all elements of self that are not in q

Note

the priority will be copied from the original queue. Also, the order will be maintained.
Alternatively, the more pythonic - operator is also supported, e.g. q1 - q2

extend(q)

extends the queue with components of q that are not already in self

Parameters:q (queue, list or tuple) –

Note

The components added to the queue will get the priority of the tail of self.

head()
Returns:the head component of the queue, if any. None otherwise
Return type:Component

Note

q[0] is a more Pythonic way to access the head of the queue

index(component)

get the index of a component in the queue

Parameters:component (Component) – component to be queried
does not need to be in the queue
Returns:index of component in the queue – 0 denotes the head,
returns -1 if component is not in the queue
Return type:int
insert(index, component)

Insert component before index-th element of the queue

Parameters:
  • index (int) – component to be added just before index’th element
    should be >=0 and <=len(self)
  • component (Component) – component to be added to the queue

Note

the priority of component will be set to the priority of the index’th component, or 0 if the queue is empty

intersection(q, name=None, monitor=False)

returns the intersect of two queues

Parameters:
  • q (Queue) – queue to be intersected with self
  • name (str) – name of the new queue
    if omitted, self.name() + q.name()
  • monitor (bool) – if True, monitor the queue
    if False (default), do not monitor the queue
Returns:

queue with all elements that are in self and q

Return type:

Queue

Note

the priority will be set to 0 for all components in the resulting queue
the order of the resulting queue is as follows:
in the same order as in self.
Alternatively, the more pythonic & operator is also supported, e.g. q1 & q2

monitor(value)

enables/disables monitoring of length_of_stay and length

Parameters:value (bool) – if True, monitoring will be on.
if False, monitoring is disabled

Note

it is possible to individually control monitoring with length_of_stay.monitor() and length.monitor()

move(name=None, monitor=<function Queue.monitor>)

makes a copy of a queue and empties the original

Parameters:
  • name (str) – name of the new queue
  • monitor (bool) – if True, monitor the queue
    if False (default), do not monitor the yqueue
Returns:

queue containing all elements of self

Return type:

Queue

Note

Priorities will be kept
self will be emptied

name(value=None)
Parameters:value (str) – new name of the queue if omitted, no change
Returns:Name of the queue
Return type:str

Note

base_name and sequence_number are not affected if the name is changed
All derived named are updated as well.

pop(index=None)

removes a component by its position (or head)

Parameters:index (int) – index-th element to remove, if any
if omitted, return the head of the queue, if any
Returns:The i-th component or head – None if not existing
Return type:Component
predecessor(component)

predecessor in queue

Parameters:component (Component) – component whose predecessor to return
must be member of the queue
Returns:predecessor of component, if any – None otherwise.
Return type:Component
print_histograms(exclude=(), as_str=False, file=None)

prints the histograms of the length and length_of_stay monitor of the queue

Parameters:
  • exclude (tuple or list) – specifies which monitors to exclude
    default: ()
  • as_str (bool) – if False (default), print the histograms if True, return a string containing the histograms
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

histograms (if as_str is True)

Return type:

str

print_info(as_str=False, file=None)

prints information about the queue

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

print_statistics(as_str=False, file=None)

prints a summary of statistics of a queue

Parameters:
  • as_str (bool) – if False (default), print the statistics if True, return a string containing the statistics
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

statistics (if as_str is True)

Return type:

str

register(registry)

registers the queue in the registry

Parameters:registry (list) – list of (to be) registered objects
Returns:queue (self)
Return type:Queue

Note

Use Queue.deregister if queue does not longer need to be registered.

remove(component=None)

removes component from the queue

Parameters:component (Component) – component to be removed
if omitted, all components will be removed.

Note

component must be member of the queue

reset_monitors(monitor=None)

resets queue monitor length_of_stay and length

Parameters:monitor (bool) – if True, monitoring will be on.
if False, monitoring is disabled
if omitted, no change of monitoring state

Note

it is possible to reset individual monitoring with length_of_stay.reset() and length.reset()

sequence_number()
Returns:sequence_number of the queue – (the sequence number at initialization)
normally this will be the integer value of a serialized name, but also non serialized names (without a dot or a comma at the end) will be numbered)
Return type:int
setup()

called immediately after initialization of a queue.

by default this is a dummy method, but it can be overridden.

only keyword arguments are passed

successor(component)

successor in queue

Parameters:component (Component) – component whose successor to return
must be member of the queue
Returns:successor of component, if any – None otherwise
Return type:Component
symmetric_difference(q, name=None, monitor=<function Queue.monitor>)

returns the symmetric difference of two queues

Parameters:
  • q (Queue) – queue to be ‘subtracted’ from self
  • name (str) – name of the new queue
    if omitted, self.name() - q.name()
  • monitor (bool) – if True, monitor the queue
    if False (default), do not monitor the queue
Returns:

Return type:

queue containing all elements that are either in self or q, but not in both

Note

the priority of all elements will be set to 0 for all components in the new queue. Order: First, elelements in self (in that order), then elements in q (in that order) Alternatively, the more pythonic ^ operator is also supported, e.g. q1 ^ q2

tail()
Returns:the tail component of the queue, if any. None otherwise
Return type:Component

Note

q[-1] is a more Pythonic way to access the tail of the queue

union(q, name=None, monitor=False)
Parameters:
  • q (Queue) – queue to be unioned with self
  • name (str) – name of the new queue
    if omitted, self.name() + q.name()
  • monitor (bool) – if True, monitor the queue
    if False (default), do not monitor the queue
Returns:

queue containing all elements of self and q

Return type:

Queue

Note

the priority will be set to 0 for all components in the resulting queue
the order of the resulting queue is as follows:
first all components of self, in that order, followed by all components in q that are not in self, in that order.
Alternatively, the more pythonic | operator is also supported, e.g. q1 | q2

Resource

class salabim.Resource(name=None, capacity=1, anonymous=False, monitor=True, env=None, *args, **kwargs)
Parameters:
  • name (str) – name of the resource
    if the name ends with a period (.), auto serializing will be applied
    if the name end with a comma, auto serializing starting at 1 will be applied
    if omitted, the name will be derived from the class it is defined in (lowercased)
  • capacity (float) – capacity of the resouce
    if omitted, 1
  • anonymous (bool) – anonymous specifier
    if True, claims are not related to any component. This is useful if the resource is actually just a level.
    if False, claims belong to a component.
  • monitor (bool) – if True (default) , the requesters queue, the claimers queue, the capacity, the available_quantity and the claimed_quantity are monitored
    if False, monitoring is disabled.
  • env (Environment) – environment to be used
    if omitted, default_env is used
base_name()
Returns:base name of the resource (the name used at initialization)
Return type:str
claimers()
Returns:queue with all components claiming from the resource – will be an empty queue for an anonymous resource
Return type:Queue
deregister(registry)

deregisters the resource in the registry

Parameters:registry (list) – list of registered components
Returns:resource (self)
Return type:Resource
monitor(value)

enables/disables the resource monitors

Parameters:value (bool) – if True, monitoring is enabled
if False, monitoring is disabled

Note

it is possible to individually control monitoring with claimers().monitor() and requesters().monitor(), capacity.monitor(), available_quantity.monitor), claimed_quantity.monitor() or occupancy.monitor()

name(value=None)
Parameters:value (str) – new name of the resource if omitted, no change
Returns:Name of the resource
Return type:str

Note

base_name and sequence_number are not affected if the name is changed
All derived named are updated as well.

print_histograms(exclude=(), as_str=False, file=None)

prints histograms of the requesters and claimers queue as well as the capacity, available_quantity and claimed_quantity timstamped monitors of the resource

Parameters:
  • exclude (tuple or list) – specifies which queues or monitors to exclude
    default: ()
  • as_str (bool) – if False (default), print the histograms if True, return a string containing the histograms
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

histograms (if as_str is True)

Return type:

str

print_info(as_str=False, file=None)

prints info about the resource

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

print_statistics(as_str=False, file=None)

prints a summary of statistics of a resource

Parameters:
  • as_str (bool) – if False (default), print the statistics if True, return a string containing the statistics
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

statistics (if as_str is True)

Return type:

str

register(registry)

registers the resource in the registry

Parameters:registry (list) – list of (to be) registered objects
Returns:resource (self)
Return type:Resource

Note

Use Resource.deregister if resource does not longer need to be registered.

release(quantity=None)

releases all claims or a specified quantity

Parameters:quantity (float) – quantity to be released
if not specified, the resource will be emptied completely
for non-anonymous resources, all components claiming from this resource will be released.

Note

quantity may not be specified for a non-anomymous resoure

requesters()
Returns:queue containing all components with not yet honored requests
Return type:Queue
reset_monitors(monitor=None)

resets the resource monitors

Parameters:monitor (bool) – if True, monitoring will be on.
if False, monitoring is disabled
if omitted, no change of monitoring state

Note

it is possible to reset individual monitoring with claimers().reset_monitors(), requesters().reset_monitors, capacity.reset(), available_quantity.reset() or claimed_quantity.reset() or occupancy.reset()

sequence_number()
Returns:sequence_number of the resource – (the sequence number at initialization)
normally this will be the integer value of a serialized name, but also non serialized names (without a dot or a comma at the end) will be numbered)
Return type:int
set_capacity(cap)
Parameters:cap (float or int) – capacity of the resource
this may lead to honoring one or more requests.
if omitted, no change
setup()

called immediately after initialization of a resource.

by default this is a dummy method, but it can be overridden.

only keyword arguments are passed

State

class salabim.State(name=None, value=False, type='any', monitor=True, animation_objects=None, env=None, *args, **kwargs)
Parameters:
  • name (str) – name of the state
    if the name ends with a period (.), auto serializing will be applied
    if the name end with a comma, auto serializing starting at 1 will be applied
    if omitted, the name will be derived from the class it is defined in (lowercased)
  • value (any, preferably printable) – initial value of the state
    if omitted, False
  • monitor (bool) – if True (default) , the waiters queue and the value are monitored
    if False, monitoring is disabled.
  • type (str) –

    specifies how the state values are monitored. Using a int, uint of float type results in less memory usage and better performance. Note that you should avoid the number not to use as this is used to indicate ‘off’

    • ”any” (default) stores values in a list. This allows for non numeric values. In calculations the values are forced to a numeric value (0 if not possible) do not use -inf
    • ”bool” bool (False, True). Actually integer >= 0 <= 254 1 byte do not use 255
    • ”int8” integer >= -127 <= 127 1 byte do not use -128
    • ”uint8” integer >= 0 <= 254 1 byte do not use 255
    • ”int16” integer >= -32767 <= 32767 2 bytes do not use -32768
    • ”uint16” integer >= 0 <= 65534 2 bytes do not use 65535
    • ”int32” integer >= -2147483647 <= 2147483647 4 bytes do not use -2147483648
    • ”uint32” integer >= 0 <= 4294967294 4 bytes do not use 4294967295
    • ”int64” integer >= -9223372036854775807 <= 9223372036854775807 8 bytes do not use -9223372036854775808
    • ”uint64” integer >= 0 <= 18446744073709551614 8 bytes do not use 18446744073709551615
    • ”float” float 8 bytes do not use -inf
  • animation_objects (list or tuple) – overrides the default animation_object method
    the method should have a header like
    def animation_objects(self, value):
    and should return a list or tuple of animation objects, which will be used when the state changes value.
    The default method displays a square of size 40. If the value is a valid color, that will be the color of the square. Otherwise, the square will be black with the value displayed in white in the centre.
  • env (Environment) – environment to be used
    if omitted, default_env is used
base_name()
Returns:base name of the state (the name used at initialization)
Return type:str
deregister(registry)

deregisters the state in the registry

Parameters:registry (list) – list of registered states
Returns:state (self)
Return type:State
get()

get value of the state

Returns:value of the state – Instead of this method, the state can also be called directly, like

level = sim.State(“level”)

print(level())
print(level.get()) # identical

Return type:any
monitor(value=None)

enables/disables the state monitors and value monitor

Parameters:value (bool) – if True, monitoring will be on.
if False, monitoring is disabled
if not specified, no change

Note

it is possible to individually control requesters().monitor(),
value.monitor()
name(value=None)
Parameters:value (str) – new name of the state if omitted, no change
Returns:Name of the state
Return type:str

Note

base_name and sequence_number are not affected if the name is changed
All derived named are updated as well.

print_histograms(exclude=(), as_str=False, file=None)

print histograms of the waiters queue and the value monitor

Parameters:
  • exclude (tuple or list) – specifies which queues or monitors to exclude
    default: ()
  • as_str (bool) – if False (default), print the histograms if True, return a string containing the histograms
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

histograms (if as_str is True)

Return type:

str

print_info(as_str=False, file=None)

prints info about the state

Parameters:
  • as_str (bool) – if False (default), print the info if True, return a string containing the info
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

info (if as_str is True)

Return type:

str

print_statistics(as_str=False, file=None)

prints a summary of statistics of the state

Parameters:
  • as_str (bool) – if False (default), print the statistics if True, return a string containing the statistics
  • file (file) – if None(default), all output is directed to stdout
    otherwise, the output is directed to the file
Returns:

statistics (if as_str is True)

Return type:

str

register(registry)

registers the state in the registry

Parameters:registry (list) – list of (to be) registered objetcs
Returns:state (self)
Return type:State

Note

Use State.deregister if state does not longer need to be registered.

reset(value=False)

reset the value of the state

Parameters:value (any (preferably printable)) – if omitted, False
if there is a change, the waiters queue will be checked to see whether there are waiting components to be honored

Note

This method is identical to set, except the default value is False.

reset_monitors(monitor=None)

resets the monitor for the state’s value and the monitors of the waiters queue

Parameters:monitor (bool) – if True, monitoring will be on.
if False, monitoring is disabled
if omitted, no change of monitoring state
sequence_number()
Returns:sequence_number of the state – (the sequence number at initialization)
normally this will be the integer value of a serialized name, but also non serialized names (without a dot or a comma at the end) will be numbered)
Return type:int
set(value=True)

set the value of the state

Parameters:value (any (preferably printable)) – if omitted, True
if there is a change, the waiters queue will be checked to see whether there are waiting components to be honored

Note

This method is identical to reset, except the default value is True.

setup()

called immediately after initialization of a state.

by default this is a dummy method, but it can be overridden.

only keyword arguments will be passed

trigger(value=True, value_after=None, max=inf)

triggers the value of the state

Parameters:
  • value (any (preferably printable)) – if omitted, True
  • value_after (any (preferably printable)) – after the trigger, this will be the new value.
    if omitted, return to the the before the trigger.
  • max (int) – maximum number of components to be honored for the trigger value
    default: inf

Note

The value of the state will be set to value, then at most max waiting components for this state will be honored and next the value will be set to value_after and again checked for possible honors.

waiters()
Returns:queue containing all components waiting for this state
Return type:Queue

Miscellaneous

salabim.arrow_polygon(size)

creates a polygon tuple with a centerd arrow for use with sim.Animate

Parameters:size (float) – length of the arrow
salabim.can_animate(try_only=True)

Tests whether animation is supported.

Parameters:try_only (bool) – if True (default), the function does not raise an error when the required modules cannot be imported
if False, the function will only return if the required modules could be imported.
Returns:True, if required modules could be imported, False otherwise
Return type:bool
salabim.can_video(try_only=True)

Tests whether video is supported.

Parameters:try_only (bool) – if True (default), the function does not raise an error when the required modules cannot be imported
if False, the function will only return if the required modules could be imported.
Returns:True, if required modules could be imported, False otherwise
Return type:bool
salabim.centered_rectangle(width, height)

creates a rectangle tuple with a centered rectangle for use with sim.Animate

Parameters:
  • width (float) – width of the rectangle
  • height (float) – height of the rectangle
salabim.colornames()

available colornames

Returns:dict with name of color as key, #rrggbb or #rrggbbaa as value
Return type:dict
salabim.default_env()
Returns:default environment
Return type:Environment
salabim.interpolate(t, t0, t1, v0, v1)

does linear interpolation

Parameters:
  • t (float) – value to be interpolated from
  • t0 (float) – f(t0)=v0
  • t1 (float) – f(t1)=v1
  • v0 (float, list or tuple) – f(t0)=v0
  • v1 (float, list or tuple) – f(t1)=v1
    if list or tuple, len(v0) should equal len(v1)
Returns:

linear interpolation between v0 and v1 based on t between t0 and t1

Return type:

float or tuple

Note

Note that no extrapolation is done, so if t<t0 ==> v0 and t>t1 ==> v1
This function is heavily used during animation.

salabim.random_seed(seed, randomstream=None)

Reseeds a randomstream

Parameters:
  • seed (hashable object, usually int) – the seed for random, equivalent to random.seed()
    if None or “*”, a purely random value (based on the current time) will be used (not reproducable)
  • randomstream (randomstream) – randomstream to be used
    if omitted, random will be used
salabim.regular_polygon(radius=1, number_of_sides=3, initial_angle=0)

creates a polygon tuple with a regular polygon (within a circle) for use with sim.Animate

Parameters:
  • radius (float) – radius of the corner points of the polygon
    default : 1
  • number_of_sides (int) – number of sides (corners)
    must be >= 3
    default : 3
  • initial_angle (float) – angle of the first corner point, relative to the origin
    default : 0
salabim.reset()

resets global variables

used internally at import of salabim

might be useful for REPLs or for Pythonista

salabim.show_colornames()

show (print) all available color names and their value.

salabim.show_fonts()

show (print) all available fonts on this machine

salabim.spec_to_image(spec)

convert an image specification to an image

Parameters:image (str or PIL.Image.Image) – if str: filename of file to be loaded
if null string: dummy image will be returned
if PIL.Image.Image: return this image untranslated
Returns:image
Return type:PIL.Image.Image