SNAKES is a Python library that provides all then necessary to define and execute many sorts of Petri nets, in particular those of the PBC and M-nets family. Its main aim is to be a general Petri net library, being able to cope with most Petri nets models, and providing the researcher with a tool to quickly prototype its new ideas. SNAKES should be suitable to provide the data model for editors or simulators; actually, any editor that use SNAKES may also be a simulator as SNAKES can execute any net.
A key feature of SNAKES is the ability to use arbitrary Python objects as tokens and arbitrary Python expressions in many points, for instance in transitions guards or arcs outgoing of transitions. This is what makes SNAKES that general. This relies on the capability of Python to run dynamically provided Python code (the eval function). This feature may not be efficient enough for model-checking: speed is the price to pay for the wide generality. However, in the case of a new model, SNAKES may happen to be the only available tool.
Another important feature of SNAKES is the plugin system that allows to extend the features and work with specialised classes of Petri nets. Currently, the following plugins are provided:
pos adds to nodes the capability of holding their position. Nodes can be moved or shifted, Petri nets can be shifted globally and their bounding box can be computed.
graphviz adds a method to draw a Petri net using the tool GraphViz. The layout is provided by the user that provides the coordinate of the nodes (using the plugin pos).
status extends the Petri net model by adding status to the nodes. This is similar to what is used in the models of the PBC or Mnets family. Nodes can then merged automatically according to their status.
ops this plugins defines control flow operations on Petri nets usually found in the PBC and Mnets family. Nets can be composed in parallel, sequence, choice and iteration. These operations rely on the places status.
posops combines the features of pos and ops plugins: the control flow operations are modified in order to rearrange the nodes position in order to provide well shaped nets.
lashdata allows to define data that is not handled in the places of the Petri net but stored instead in the special structures handled by the library Lash. This allows in particular to aggregate possibly infinite states into one meta-state.
What's New in This Release: [ read full changelog ]
· added inhibitor arcs
· added Ubuntu Lucid (10.04) package
· fixed data.WordSet.fresh when base is used
· fixed reduce(xor, ) in some __hash__ methods
· added PetriNet.layout method in snakes.plugins.gv