y_petri 2.1.7 → 2.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7ea7adac33bd23959ee963e2851c77d591abbd6b
4
- data.tar.gz: 0a31445de87006e8f6621b0eae44c17111316b37
3
+ metadata.gz: 70791aeefd6b43e56ccdbf4fb980d51768e4ecec
4
+ data.tar.gz: d3b852100353e1df976a7c8f3ffd84e0cd2c6dce
5
5
  SHA512:
6
- metadata.gz: 8c3123d34cdff6f50fc9962aaf188578b1228325d713c6ee16986d0d4507d6e0a4cd415b817b217e70abf395e82ecb42f65bb631d8cdcad713a2f2dac02b77b1
7
- data.tar.gz: ab7df7db2696bec33d0cf4c5baa2dea48450688f10412f2b1fbf8246db3ca00826da585ec4806db216263e79d5ce3dbfe50a6609fedd20de1016c76d04b0b094
6
+ metadata.gz: a03c5f1c57429be512c5e023e99a92a9973c7ad94df76f75d04cdca96e02fa530d91383ea360c06a4e354d3a8824b8b6885d3ff76bb4d3a553e395813aa321ba
7
+ data.tar.gz: 844311666d998f34bec07216f7ea0cd37233b0f4309ed88860dcda7f4dfc44e61931c08e246f024f4fee33741dbbe32ac443cca0829e7bdb9893e66fbfa127a4
@@ -65,13 +65,13 @@ module YPetri::Agent::PetriNetRelated
65
65
  named_args.update( guard: block ) if block # use block as a guard
66
66
  named_args.may_have :default_marking, syn!: :m!
67
67
  named_args.may_have :marking, syn!: :m
68
- world.Place.new *ordered_args, **named_args
68
+ world.Place.send( :new, *ordered_args, **named_args, &block )
69
69
  end
70
70
 
71
71
  # Transition constructor: Creates a new transition in the current world.
72
72
  #
73
73
  def Transition( *ordered, **named, &block )
74
- world.Transition.new *ordered, **named, &block
74
+ world.Transition.send( :new, *ordered, **named, &block )
75
75
  end
76
76
 
77
77
  # Timed transition constructor: Creates a new timed transition in the current
@@ -80,7 +80,7 @@ module YPetri::Agent::PetriNetRelated
80
80
  def T( *ordered, **named, &block )
81
81
  fail ArgumentError, "Timed transition constructor requires a block " +
82
82
  "defining the rate function!" unless block
83
- world.Transition.new *ordered, **named.update( rate: block )
83
+ world.Transition.send( :new, *ordered, **named.update( rate: block ) )
84
84
  end
85
85
 
86
86
  # Timed stoichiometric transition constructor, that expects stoichiometry
@@ -103,16 +103,17 @@ module YPetri::Agent::PetriNetRelated
103
103
  def A( *codomain, **nn, &block )
104
104
  fail ArgumentError, "Assignment transition constructor requires a block " +
105
105
  "defining the assignment function!" unless block
106
- world.Transition.new codomain: codomain,
107
- assignment: true,
108
- action: block,
109
- **nn
106
+ world.Transition.send( :new,
107
+ codomain: codomain,
108
+ assignment: true,
109
+ action: block,
110
+ **nn )
110
111
  end
111
112
 
112
113
  # Net constructor: Creates a new Net instance in the current world.
113
114
  #
114
115
  def Net *ordered, **named, &block
115
- world.Net.new *ordered, **named, &block
116
+ world.Net.send( :new, *ordered, **named, &block )
116
117
  end
117
118
 
118
119
  # Returns the net identified, or the net at point (if no argument given).
@@ -234,8 +234,8 @@ module YPetri::Agent::SimulationRelated
234
234
 
235
235
  # Create a new timed simulation and run it.
236
236
  #
237
- def run!
238
- new_simulation.run!
237
+ def run! *args
238
+ new_simulation.run! *args
239
239
  end
240
240
 
241
241
  # Write the recorded samples in a file (csv).
data/lib/y_petri/dsl.rb CHANGED
@@ -56,7 +56,7 @@ module YPetri
56
56
  :print_recording,
57
57
  :plot,
58
58
  :plot_selected,
59
- # :plot_state,
59
+ # :plot_state,
60
60
  :plot_flux,
61
61
  to: :y_petri_agent
62
62
 
@@ -3,7 +3,7 @@
3
3
  # Flux of a Petri net TS transition.
4
4
  #
5
5
  class YPetri::Net::State::Feature::Flux < YPetri::Net::State::Feature
6
- attr_reader :transitionn
6
+ attr_reader :transition
7
7
 
8
8
  class << self
9
9
  def parametrize *args
data/lib/y_petri/net.rb CHANGED
@@ -26,6 +26,8 @@ class YPetri::Net
26
26
  def of *elements
27
27
  new.tap { |inst| elements.each { |e| inst << e } }
28
28
  end
29
+
30
+ private :new
29
31
  end
30
32
 
31
33
  delegate :world, to: "self.class"
data/lib/y_petri/place.rb CHANGED
@@ -14,6 +14,8 @@ class YPetri::Place
14
14
 
15
15
  class << self
16
16
  ★ YPetri::World::Dependency
17
+
18
+ private :new
17
19
  end
18
20
 
19
21
  delegate :world, to: "self.class"
@@ -38,7 +38,7 @@ module YPetri::Simulation::Timed
38
38
  initial_time..target_time
39
39
  end
40
40
 
41
- # Returnst the settings pertaining to the Timed aspect of the simulation,
41
+ # Returns the settings pertaining to the Timed aspect of the simulation,
42
42
  # that is, +:step+, +:sampling+ and +:time+.
43
43
  #
44
44
  def settings all=false
@@ -48,7 +48,7 @@ module YPetri::Simulation::Timed
48
48
  end
49
49
 
50
50
  # Same as +#run!+, but guards against run upto infinity.
51
- #
51
+ #
52
52
  def run( upto: target_time, final_step: :exact )
53
53
  fail "Upto time equals infinity!" if upto == Float::INFINITY
54
54
  run!( upto: upto, final_step: final_step )
@@ -57,7 +57,7 @@ module YPetri::Simulation::Timed
57
57
  # Near alias for +#run_upto+. Accepts +:upto+ named argument, using
58
58
  # @target_time attribute as a default. The second optional argument,
59
59
  # +:final_step+, has the same options as in +#run_upto+ method.
60
- #
60
+ #
61
61
  def run!( upto: target_time, final_step: :exact )
62
62
  run_upto( upto, final_step: final_step )
63
63
  end
@@ -101,6 +101,8 @@ class YPetri::Transition
101
101
 
102
102
  class << self
103
103
  ★ YPetri::World::Dependency
104
+
105
+ private :new
104
106
  end
105
107
 
106
108
  TYPES = {
@@ -1,4 +1,4 @@
1
1
  module YPetri
2
- VERSION = "2.1.7"
2
+ VERSION = "2.1.9"
3
3
  DEBUG = false
4
4
  end
@@ -1,8 +1,8 @@
1
- #encoding: utf-8
1
+ # encoding: utf-8
2
2
 
3
3
  # Provides basic skeleton for dependency injection for the triples of the
4
4
  # parametrized subclasses of Place, Transition and Net in different workspaces.
5
- #
5
+ #
6
6
  class YPetri::World
7
7
  module Dependency
8
8
  delegate :Place, :Transition, :Net, to: :world
@@ -13,19 +13,19 @@ module YPetri::World::PetriNetRelated
13
13
 
14
14
  # Returns a place instance identified by the argument.
15
15
  #
16
- def place id
16
+ def place( id )
17
17
  Place().instance( id )
18
18
  end
19
19
 
20
20
  # Returns a transition instance identified by the argument.
21
21
  #
22
- def transition id
22
+ def transition( id )
23
23
  Transition().instance( id )
24
24
  end
25
25
 
26
26
  # Returns a net instance identified by the argument.
27
27
  #
28
- def net id
28
+ def net( id )
29
29
  Net().instance( id )
30
30
  end
31
31
 
@@ -52,10 +52,10 @@ module YPetri::World::PetriNetRelated
52
52
  # Creates all-encompassing Net instance named :Top.
53
53
  #
54
54
  def set_up_Top_net
55
- Net().new name: :Top # all-encompassing :Top net
55
+ Net().send :new, name: :Top # all-encompassing :Top net
56
56
  # Hook new places to add themselves magically to the :Top net.
57
57
  Place().new_instance_closure { |new_inst| net( :Top ) << new_inst }
58
58
  # Hook new transitions to add themselves magically to the :Top net.
59
- Transition().new_instance_closure { |new_inst| net( :Top ) << new_inst }
59
+ Transition().new_instance_closure { |new_inst| net( :Top ) << new_inst }
60
60
  end
61
61
  end # module YPetri::World::PetriNetRelated
data/lib/y_petri/world.rb CHANGED
@@ -4,11 +4,10 @@ require_relative 'world/dependency'
4
4
  require_relative 'world/petri_net_related'
5
5
  require_relative 'world/simulation_related'
6
6
 
7
-
8
7
  # As the name suggests, represents the world. Holds places, transitions, nets
9
8
  # and other assets needed to set up and simulate Petri nets (settings, clamps,
10
- # initial markings etc.). Provides basic methods to do what is necessary.
11
- # More ergonomic and DSL-like methods are up to the YPetri::Agent.
9
+ # initial markings etc.). Provides basic methods to do what is necessary. More
10
+ # ergonomic and DSL-like methods are up to the YPetri::Agent.
12
11
  #
13
12
  class YPetri::World
14
13
  ★ NameMagic # ★ means include
data/test/net_test.rb CHANGED
@@ -14,7 +14,7 @@ describe YPetri::Net do
14
14
  end
15
15
 
16
16
  it "should initialize" do
17
- net = @w.Net.new
17
+ net = @w.Net.send :new
18
18
  net.places.must_equal []
19
19
  net.transitions.must_equal []
20
20
  net.pp.must_equal []
@@ -23,11 +23,11 @@ describe YPetri::Net do
23
23
 
24
24
  describe "element access" do
25
25
  before do
26
- @net = @w.Net.new
26
+ @net = @w.Net.send :new
27
27
  end
28
28
 
29
29
  it "should be able to include places" do
30
- p = @w.Place.new name: "A", quantum: 0.1, marking: 1.1
30
+ p = @w.Place.send :new, name: "A", quantum: 0.1, marking: 1.1
31
31
  @net.includes_place?( p ).must_equal false
32
32
  @net.include_place p
33
33
  @net.places.must_equal [ p ]
@@ -39,10 +39,10 @@ describe YPetri::Net do
39
39
 
40
40
  describe "world with 3 places" do
41
41
  before do
42
- @p1 = @w.Place.new name: "A", quantum: 0.1, marking: 1.1
43
- @p2 = @w.Place.new name: "B", quantum: 0.1, marking: 2.2
44
- @p3 = @w.Place.new name: "C", quantum: 0.1, marking: 3.3
45
- @p4 = @w.Place.new name: "X", marking: 0
42
+ @p1 = @w.Place.send :new, name: "A", quantum: 0.1, marking: 1.1
43
+ @p2 = @w.Place.send :new, name: "B", quantum: 0.1, marking: 2.2
44
+ @p3 = @w.Place.send :new, name: "C", quantum: 0.1, marking: 3.3
45
+ @p4 = @w.Place.send :new, name: "X", marking: 0
46
46
  end
47
47
 
48
48
  describe "net of 3 places and no transitions" do
@@ -59,7 +59,7 @@ describe YPetri::Net do
59
59
  it "should allow only right transitions to be included in it" do
60
60
  assert @net.include?( @p1 )
61
61
  assert ! @net.include?( @p4 )
62
- t = @w.Transition.new s: { @p4 => -1 }
62
+ t = @w.Transition.send :new, s: { @p4 => -1 }
63
63
  -> { @net.include_transition t }.must_raise RuntimeError
64
64
  end
65
65
 
@@ -71,7 +71,7 @@ describe YPetri::Net do
71
71
  it "should be able to tell its qualities" do
72
72
  assert_equal false, @net.functional?
73
73
  assert_equal false, @net.timed?
74
- assert @net.include?( @p1 ) && !@net.include?( YPetri::Place.new )
74
+ assert @net.include?( @p1 ) && !@net.include?( YPetri::Place.send :new )
75
75
  end
76
76
 
77
77
  it "should know its state and marking features" do
@@ -142,7 +142,7 @@ describe YPetri::Net do
142
142
 
143
143
  describe "plus 1 more nameless timeless functionless transition" do
144
144
  before do
145
- @t2 = @w.Transition.new s: { @p2 => -1, @p3 => 1 }
145
+ @t2 = @w.Transition.send :new, s: { @p2 => -1, @p3 => 1 }
146
146
  @net.include_transition @t2
147
147
  end
148
148
 
@@ -189,7 +189,7 @@ end
189
189
  describe YPetri::Net::State do
190
190
  before do
191
191
  @w = YPetri::World.new
192
- @net = @w.Net.new
192
+ @net = @w.Net.send :new
193
193
  end
194
194
 
195
195
  it "should be already parametrized on @w.Net" do
data/test/place_test.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #! /usr/bin/ruby
2
- # -*- coding: utf-8 -*-
2
+ # encoding: utf-8
3
3
 
4
4
  gem 'minitest', '=4.7.4'
5
5
  require 'minitest/autorun'
@@ -13,7 +13,7 @@ describe YPetri::Simulation do
13
13
  end
14
14
 
15
15
  it "should allow for creation of an empty simulation" do
16
- net = @w.Net.new
16
+ net = @w.Net.send :new
17
17
  sim = net.simulation
18
18
  sim.pp.must_equal []
19
19
  sim.pp( *[] ).must_equal []
@@ -23,8 +23,8 @@ describe YPetri::Simulation do
23
23
 
24
24
  describe "simulation setup" do
25
25
  before do
26
- @p = @w.Place.new name: :A, default_marking: 1
27
- @q = @w.Place.new name: :B, default_marking: 2
26
+ @p = @w.Place.send :new, name: :A, default_marking: 1
27
+ @q = @w.Place.send :new, name: :B, default_marking: 2
28
28
  @net = @w.Net.of @p, @q
29
29
  end
30
30
 
@@ -80,10 +80,10 @@ describe YPetri::Simulation do
80
80
 
81
81
  describe "transition representation aspects" do
82
82
  before do
83
- @ts = @w.Transition.new name: "T_ts", codomain: :A, action: -> { 1 }
84
- @tS = @w.Transition.new name: "T_tS", s: { B: -1, A: 1 }, action: proc { 1 }
85
- @Ts = @w.Transition.new name: "T_Ts", codomain: :A, rate: -> { 1 }
86
- @TS = @w.Transition.new name: "T_TS", s: { B: -1, A: 1 }, rate: proc { 1 }
83
+ @ts = @w.Transition.send :new, name: "T_ts", codomain: :A, action: -> { 1 }
84
+ @tS = @w.Transition.send :new, name: "T_tS", s: { B: -1, A: 1 }, action: proc { 1 }
85
+ @Ts = @w.Transition.send :new, name: "T_Ts", codomain: :A, rate: -> { 1 }
86
+ @TS = @w.Transition.send :new, name: "T_TS", s: { B: -1, A: 1 }, rate: proc { 1 }
87
87
  end
88
88
 
89
89
  it "should be what intended" do
@@ -25,33 +25,33 @@ describe ::YPetri::Transition do
25
25
  private :Place, :Transition
26
26
  }
27
27
  end
28
- @p1 = pç.new default_marking: 1.0
29
- @p2 = pç.new default_marking: 2.0
30
- @p3 = pç.new default_marking: 3.0
31
- @p4 = pç.new default_marking: 4.0
32
- @p5 = pç.new default_marking: 5.0
28
+ @p1 = pç.send :new, default_marking: 1.0
29
+ @p2 = pç.send :new, default_marking: 2.0
30
+ @p3 = pç.send :new, default_marking: 3.0
31
+ @p4 = pç.send :new, default_marking: 4.0
32
+ @p5 = pç.send :new, default_marking: 5.0
33
33
  end
34
34
 
35
35
  describe "ts transitions (timeless nonstoichiometric)" do
36
36
  # Note: ts transitions require a function, and thus are always functional
37
37
  before do
38
- @t1 = @ç.new codomain: [ @p1, @p3 ], domain: @p2, action: -> a { [ a, a ] }
39
- @t2 = @ç.new codomain: [ @p1, @p3 ] do |t| [ t, t ] end
40
- @t3 = @ç.new action: -> { [ 0.5, 0.5 ] }, codomain: [ @p1, @p3 ]
38
+ @t1 = @ç.send :new, codomain: [ @p1, @p3 ], domain: @p2, action: -> a { [ a, a ] }
39
+ @t2 = @ç.send :new, codomain: [ @p1, @p3 ] do |t| [ t, t ] end
40
+ @t3 = @ç.send :new, action: -> { [ 0.5, 0.5 ] }, codomain: [ @p1, @p3 ]
41
41
  end
42
42
 
43
43
  it "should raise errors for bad parameters" do
44
44
  # codomain omitted
45
- -> { @ç.new domain: @p2, action: -> t { [ t, t ] } }
45
+ -> { @ç.send :new, domain: @p2, action: -> t { [ t, t ] } }
46
46
  .must_raise ArgumentError
47
47
  # mangled codomain
48
- -> { @ç.new codomain: [ @p1, :a ], action: -> t { [ t, t ] } }
48
+ -> { @ç.send :new, codomain: [ @p1, :a ], action: -> t { [ t, t ] } }
49
49
  .must_raise TypeError
50
50
  # domain omitted
51
- -> { @ç.new codomain: [ @p1, :a ], action: -> t { [ t, t ] } }
51
+ -> { @ç.send :new, codomain: [ @p1, :a ], action: -> t { [ t, t ] } }
52
52
  .must_raise TypeError
53
53
  # action closure arity greater than the domain
54
- -> { @ç.new codomain: [ @p1, @p3 ], action: -> t { [ t, t ] }, domain: [] }
54
+ -> { @ç.send :new, codomain: [ @p1, @p3 ], action: -> t { [ t, t ] }, domain: [] }
55
55
  .must_raise TypeError
56
56
  end
57
57
 
@@ -77,8 +77,8 @@ describe ::YPetri::Transition do
77
77
 
78
78
  describe "tS transitions" do
79
79
  before do
80
- @t1 = @ç.new s: { @p5 => -1, @p1 => 1 }, action: proc { 1 }
81
- @t2 = @ç.new s: { @p5 => -1, @p1 => 1 } # should be "functionless"
80
+ @t1 = @ç.send :new, s: { @p5 => -1, @p1 => 1 }, action: proc { 1 }
81
+ @t2 = @ç.send :new, s: { @p5 => -1, @p1 => 1 } # should be "functionless"
82
82
  end
83
83
 
84
84
  it "should work" do
@@ -109,7 +109,7 @@ describe ::YPetri::Transition do
109
109
 
110
110
  describe "Ts transitions" do
111
111
  before do
112
- @t1 = @ç.new domain: @p5, codomain: [@p5, @p1], rate: proc { [-1, 1] }
112
+ @t1 = @ç.send :new, domain: @p5, codomain: [@p5, @p1], rate: proc { [-1, 1] }
113
113
  end
114
114
 
115
115
  it "should work" do
@@ -128,12 +128,12 @@ describe ::YPetri::Transition do
128
128
  describe "TS transitions (timed stoichiometric)" do
129
129
  before do
130
130
  # This should give standard mass action by magic:
131
- @TS1 = @ç.new s: { @p1 => -1, @p2 => -1, @p4 => 1 }, rate: 0.1
131
+ @TS1 = @ç.send :new, s: { @p1 => -1, @p2 => -1, @p4 => 1 }, rate: 0.1
132
132
  # While this has custom closure:
133
- @TS2 = @ç.new s: { @p1 => -1, @p3 => 1 }, rate: -> a { a * 0.5 }
133
+ @TS2 = @ç.send :new, s: { @p1 => -1, @p3 => 1 }, rate: -> a { a * 0.5 }
134
134
  # While this one even has domain explicitly specified:
135
- @TS3 = @ç.new s: { @p1 => -1, @p2 => -1, @p4 => 1 },
136
- upstream_arcs: @p3, rate: -> a { a * 0.5 }
135
+ @TS3 = @ç.send :new, s: { @p1 => -1, @p2 => -1, @p4 => 1 },
136
+ upstream_arcs: @p3, rate: -> a { a * 0.5 }
137
137
  end
138
138
 
139
139
  it "should init and work" do
@@ -178,14 +178,14 @@ describe "upstream and downstream reference mτs of places and transitions" do
178
178
  private :Place, :Transition
179
179
  }
180
180
  }
181
- @a = @pç.new( default_marking: 1.0 )
182
- @b = @pç.new( default_marking: 2.0 )
183
- @c = @pç.new( default_marking: 3.0 )
181
+ @a = @pç.send :new, default_marking: 1.0
182
+ @b = @pç.send :new, default_marking: 2.0
183
+ @c = @pç.send :new, default_marking: 3.0
184
184
  end
185
185
 
186
186
  describe "Place" do
187
187
  it "should have #register_ustream/downstream_transition methods" do
188
- @t1 = @tç.new s: {}
188
+ @t1 = @tç.send :new, s: {}
189
189
  @a.instance_variable_get( :@upstream_arcs ).must_equal []
190
190
  @a.instance_variable_get( :@downstream_arcs ).must_equal []
191
191
  @a.send :register_upstream_transition, @t1
@@ -195,7 +195,7 @@ describe "upstream and downstream reference mτs of places and transitions" do
195
195
 
196
196
  describe "upstream and downstream reference methods" do
197
197
  before do
198
- @t1 = @tç.new s: { @a => -1, @b => 1 }, rate: 1
198
+ @t1 = @tç.send :new, s: { @a => -1, @b => 1 }, rate: 1
199
199
  end
200
200
 
201
201
  it "should show on the referencers" do
@@ -209,8 +209,8 @@ describe "upstream and downstream reference mτs of places and transitions" do
209
209
 
210
210
  describe "assignment action transitions" do
211
211
  before do
212
- @p = @pç.new default_marking: 1.0
213
- @t = @tç.new codomain: @p, action: -> { 1 }, assignment_action: true
212
+ @p = @pç.send :new, default_marking: 1.0
213
+ @t = @tç.send :new, codomain: @p, action: -> { 1 }, assignment_action: true
214
214
  end
215
215
 
216
216
  it "should work" do
data/test/y_petri_test.rb CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  gem 'minitest', '=4.7.4'
5
5
  require 'minitest/autorun'
6
- require_relative '../lib/y_petri' # tested component itself
6
+ require_relative '../lib/y_petri' # tested component itself
7
7
  # require 'y_petri'
8
8
  # require 'sy'
9
9
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: y_petri
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.7
4
+ version: 2.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - boris
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-09 00:00:00.000000000 Z
11
+ date: 2013-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: y_support