causality/DGPetri

class mod.DGPetriNet

Adaptation of a derivation graph into a Petri net. Importantly, if the underlying derivation graph is enlarged then syncSize() must be called before calling certain other methods on the object.

__init__(dg)

Calls syncSize().

Parameters:

dg (DG) – the derivation graph to adapt.

Returns:

a new Petri net, adapting the given derivation graph.

Raises:

LogicError if dg is None.

Raises:

LogicError if neither dg.hasActiveBuilder nor dg.locked.

dg

(Read-only) The underlying derivation graph.

Type:

DG

syncSize()

Enlarges the internal data structures to the current size of the underlying derivation graph.

getPostPlaces(e)
Parameters:

e (DGHyperEdge) – the hyperedge to find unique targets for.

Returns:

a list of unique targets for the given hyperedge.

Return type:

list[DGVertex]

Requires syncSize() to have been called since the last time the underlying derivation graph has changed size.

class mod.DGPetriNetMarking

Representation of a marking on a Petri net. Importantly, if the underlying derivation graph is enlarged then syncSize() must be called before calling certain other methods on the object.

__init__(net)
Parameters:

net (DGPetriNet) – the Petri net to construct a marking for.

Raises:

LogicError if net is None.

net

(Read-only) The underlying Petri net.

Type:

DGPetriNet

syncSize()

Enlarges the internal data structures to the current size of the underlying derivation graph.

Calls net.syncSize().

__eq__()
add(v, c)

Add c tokens on the place v.

Parameters:
  • v (DGVertex) – the place to add tokens to.

  • c (int) – the amount of tokens to add.

Returns:

the new total token count on v.

Return type:

int

Raises:

LogicError if not v.

Raises:

LogicError if v.dg != self.net.dg.

Throws:

LogicError if c < 0.

Requires syncSize() to have been called since the last time the underlying derivation graph has changed size.

remove(v, c)

Remove c tokens from the place v.

Parameters:
  • v (DGVertex) – the place to remove tokens from.

  • c (int) – the amount of tokens to remove.

Returns:

the new total token count on v.

Return type:

int

Raises:

LogicError if not v.

Raises:

LogicError if v.dg != self.net.dg.

Throws:

LogicError if c < 0.

Throws:

LogicError if not enough tokens are left to remove all c.

Requires syncSize() to have been called since the last time the underlying derivation graph has changed size.

__getitem__(v)
Parameters:

v (DGVertex) – the place to remove tokens from.

Returns:

the token count for v.

Return type:

int

Raises:

LogicError if not v.

Raises:

LogicError if v.dg != self.net.dg.

Requires syncSize() to have been called since the last time the underlying derivation graph has changed size.

numTokens

(Read-only) The total number of tokens in the marking.

Type:

int

getAllEnabled()
Returns:

a list of all hyperedges currently enabled for firing.

Return type:

list[DGHyperEdge]

getNonZeroPlaces()
Returns:

a list of all vertices with tokens.

Return type:

list[DGVertex]

getEmptyPostPlaces(e)
Parameters:

e (DGHyperEdge) – the edge to query for empty post places.

Returns:

a list of all target vertices of the given hyperedge that do not have any tokens. The list represents a set, so if vertex is a target multiple times it will only be included once.

Return type:

list[DGVertex]

Raises:

LogicError if not e.

Raises:

LogicError if e.dg != self.net.dg.

isEnabled(e)
Parameters:

e (DGHyperEdge) – the edge to query for being enabled.

Returns:

whether the given hyperedge is enabled for firing.

Return type:

bool

Raises:

LogicError if not e.

Raises:

LogicError if e.dg != self.net.dg.

fire(e)
Parameters:

e (DGHyperEdge) – the edge to fire.

Raises:

LogicError if not e.

Raises:

LogicError if e.dg != self.net.dg.

Raises:

LogicError if not self.isEnabled(e).