Module: YPetri::Transition::Type_t
- Defined in:
- lib/y_petri/transition/t.rb
Overview
Mixin for timeless non-assignment Petri net transitions.
Instance Method Summary collapse
-
#action ⇒ Object
Result of the transition’s “function”, regardless of the #enabled? status.
-
#enabled? ⇒ Boolean
Timeless transition is enabled if its action would result in a legal codomain marking.
-
#fir(simulation = world.simulation) ⇒ Object
Transition’s firing under current simulation.
-
#fire ⇒ Object
Fires the transition, honoring cocking.
-
#fire! ⇒ Object
Fires the transition regardless of cocking.
-
#function ⇒ Object
For timeless transitions, “function” refers to their action closure.
-
#pa(simulation = world.simulation, **nn) ⇒ Object
Prints the transition’s action under current simulation.
Instance Method Details
#action ⇒ Object
Result of the transition’s “function”, regardless of the #enabled? status.
14 15 16 17 18 19 20 21 |
# File 'lib/y_petri/transition/t.rb', line 14 def action if stoichiometric? then rslt = action_closure.( *domain_marking ) stoichiometry.map { |coeff| rslt * coeff } else action_closure.( *domain_marking ) end end |
#enabled? ⇒ Boolean
Timeless transition is enabled if its action would result in a legal codomain marking.
46 47 48 49 50 51 |
# File 'lib/y_petri/transition/t.rb', line 46 def enabled? codomain.zip( action ).all? do |place, change| begin; place.guard.( place.marking + change ) rescue YPetri::GuardError; false end end end |
#fir(simulation = world.simulation) ⇒ Object
Transition’s firing under current simulation.
55 56 57 |
# File 'lib/y_petri/transition/t.rb', line 55 def fir simulation=world.simulation simulation.net.State.Feature.Firing( self ) % simulation end |
#fire ⇒ Object
Fires the transition, honoring cocking. Returns true if the transition fired, false if it wasn’t cocked.
26 27 28 |
# File 'lib/y_petri/transition/t.rb', line 26 def fire cocked?.tap { |x| ( uncock; fire! ) if x } end |
#fire! ⇒ Object
Fires the transition regardless of cocking.
32 33 34 35 36 37 38 39 40 41 |
# File 'lib/y_petri/transition/t.rb', line 32 def fire! act = Array( action ) fail TypeError, "Wrong output arity of the action " + "closure of #{self}!" if act.size != codomain.size codomain.each_with_index do |place, index| # adding action node no. index to place place.add act.fetch( index ) end return nil end |
#function ⇒ Object
For timeless transitions, “function” refers to their action closure.
8 9 10 |
# File 'lib/y_petri/transition/t.rb', line 8 def function action_closure end |
#pa(simulation = world.simulation, **nn) ⇒ Object
Prints the transition’s action under current simulation.
61 62 63 64 |
# File 'lib/y_petri/transition/t.rb', line 61 def pa simulation=world.simulation, **nn ff = simulation.net.State.Features.Delta( codomain, transitions: self ) ( ff >> ff % simulation ).pretty_print_numeric_values **nn end |