y_petri 2.1.42 → 2.1.44

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: 9369cc58d87b6dc7099f4852e0c1d65b6a115389
4
- data.tar.gz: 7fb31e526e167b754b573a16e8d5cd0157beafa0
3
+ metadata.gz: 0e7e84620c9fabe978f5052540808f8533dc6263
4
+ data.tar.gz: 8bbd7f73ee8d5bd53f3e4c4ff160f11615752109
5
5
  SHA512:
6
- metadata.gz: 90562c12028bb711b27e2cfce1e3436d0100da72c9aae434ed87c38146e7d85974a5fbda2c3ac953e7b093055aa1fff1c13e9d07878045e05a2b95d785068d91
7
- data.tar.gz: 77d2083ca5e0db3c5c5c95ec214f0804608f65857e228e77fc1d32d13396be48c1fee4d84254eb600d43025cbc2d2c6c1788eceae651f1bdbaba637b49773d43
6
+ metadata.gz: 9ed28df4ab7414b9a9aa165eff7861789a881caebfadba84c2e73d41a989f609a04117dddb2df78180861986a2b4bc957945ba446cfa1a0a369f5a4d15f49307
7
+ data.tar.gz: e591a344d139ae9ff39ee4459879341038154cd1509ea5f62a315755fb0764a9f7f2e2a505e891613fa88d177da5b15c54f6747e7560eb1fd65abe9983521832
@@ -73,7 +73,9 @@ class YPetri::Net::State::Features::Record < Array
73
73
  #
74
74
  def reconstruct **settings
75
75
  marking_clamps = settings[:marking_clamps] || {}
76
- m_hsh = features.marking.map { |feat| feat.place } >> marking
76
+ clamped_places = net.places( marking_clamps.keys )
77
+ ff = features.marking - net.State.marking( clamped_places )
78
+ m_hsh = ff.map { |feat| feat.place } >> marking
77
79
  net.simulation marking_clamps: marking_clamps, marking: m_hsh, **settings
78
80
  end
79
81
 
@@ -119,12 +119,17 @@ class YPetri::Net::State::Features < Array
119
119
  #
120
120
  def infer_from_elements( net_elements )
121
121
  new net_elements.map { |e| net.element( e ) }.map { |e|
122
- element, element_type = begin
123
- [ net.place( e ), :place ]
124
- rescue TypeError, NameError
125
- [ net.transition( e ), :transition ]
122
+ element, element_type = case e
123
+ when Feature() then [ e, :feature ]
124
+ else
125
+ begin
126
+ [ net.place( e ), :place ]
127
+ rescue TypeError, NameError
128
+ [ net.transition( e ), :transition ]
129
+ end
126
130
  end
127
131
  case element_type
132
+ when :feature then element
128
133
  when :place then Marking( element )
129
134
  when :transition then
130
135
  fail TypeError, "Flux / firing features can only be auto-inferred " +
@@ -153,6 +153,7 @@ module YPetri::Simulation::Timed
153
153
  #
154
154
  def init **settings
155
155
  method = settings[:method] # the simulation method
156
+ features_to_record = settings[:record]
156
157
  if settings.has? :time, syn!: :time_range then # time range given
157
158
  case settings[:time]
158
159
  when Range then
@@ -177,7 +178,19 @@ module YPetri::Simulation::Timed
177
178
  @step = settings[:step] || time_unit
178
179
  @default_sampling = settings[:sampling] || step
179
180
  @core = Core().new( method: method, guarded: guarded )
180
- @recorder = Recorder().new sampling: settings[:sampling]
181
+ @recorder = if features_to_record then
182
+ # we'll have to figure out features
183
+ ff = case features_to_record
184
+ when Array then
185
+ net.State.Features
186
+ .infer_from_elements( features_to_record )
187
+ when Hash then
188
+ net.State.features( features_to_record )
189
+ end
190
+ Recorder().new( sampling: settings[:sampling], features: ff )
191
+ else
192
+ Recorder().new( sampling: settings[:sampling] )
193
+ end
181
194
  end
182
195
 
183
196
  # Sets up subclasses of +Core+ (the simulator) and +Recorder+ (the sampler)
@@ -20,9 +20,22 @@ class YPetri::Simulation
20
20
  #
21
21
  def init **settings
22
22
  method = settings[:method] # the simulation method
23
+ features_to_record = settings[:record]
23
24
  init_core_and_recorder_subclasses
24
25
  @core = Core().new( method: method, guarded: guarded )
25
- @recorder = Recorder().new # init the recorder
26
+ @recorder = if features_to_record then
27
+ # we'll have to figure out features
28
+ ff = case features_to_record
29
+ when Array then
30
+ net.State.Features
31
+ .infer_from_elements( features_to_record )
32
+ when Hash then
33
+ net.State.features( features_to_record )
34
+ end
35
+ Recorder().new( features: ff )
36
+ else
37
+ Recorder().new # init the recorder
38
+ end
26
39
  end
27
40
 
28
41
  # Sets up subclasses of +Core+ (the simulator) and +Recorder+ (the sampler)
@@ -79,6 +79,12 @@ class YPetri::Simulation
79
79
  delegate :recording,
80
80
  to: :recorder
81
81
 
82
+ alias r recording
83
+
84
+ delegate :plot,
85
+ :print,
86
+ to: :recording
87
+
82
88
  # The basic simulation parameter is :net – +YPetri::Net+ instance which to
83
89
  # simulate. Net implies the collection of places and transitions. Other
84
90
  # required attributes are +:marking_clamps+ and +:initial_marking+
@@ -124,17 +130,12 @@ class YPetri::Simulation
124
130
  # Clamped places' mapping to the clamp values.
125
131
  @marking_clamps = MarkingClamps().load( m_clamps )
126
132
  # Free places' mapping to the initial marking values.
127
-
128
- # Use :marking as :initial_marking when possible.
129
- if m then
130
- init_m_from_init_m = PlaceMapping().load( init_m )
131
- init_m_from_marking = PlaceMapping().load( m )
132
- rslt = init_m_from_marking.merge init_m_from_init_m
133
- @initial_marking = InitialMarking().load( rslt )
134
- else
135
- @initial_marking = InitialMarking().load( init_m )
136
- end
137
-
133
+ @initial_marking = InitialMarking()
134
+ .load( if m then # use :marking as :initial_marking when possible
135
+ init_m_from_init_m = PlaceMapping().load( init_m )
136
+ init_m_from_marking = PlaceMapping().load( m )
137
+ init_m_from_marking.merge init_m_from_init_m
138
+ else init_m end )
138
139
  # Set up the place and transition collections.
139
140
  @places.complete_initial_marking( use_default_marking: use_default_marking )
140
141
  # Correspondence matrix free --> all
@@ -1,4 +1,4 @@
1
1
  module YPetri
2
- VERSION = "2.1.42"
2
+ VERSION = "2.1.44"
3
3
  DEBUG = false
4
4
  end
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.42
4
+ version: 2.1.44
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-23 00:00:00.000000000 Z
11
+ date: 2013-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: y_support