y_petri 2.1.37 → 2.1.39

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e8bd3d0de26cf79301633503c11a780226ec1e1b
4
- data.tar.gz: a8da1ce1d92d383d917116dde22356b97a42aabf
3
+ metadata.gz: ebb46216e3628b410a2044e7e70c45bf30c2171b
4
+ data.tar.gz: 8a784e74c722d887fcde91472b535b8ae851aaf9
5
5
  SHA512:
6
- metadata.gz: 76b36988750b6ba018af3efe5f33a2017838d702a49331b8e529b05149cfbff662d78e2eeaa02dfb9f3971956be04a597483c4efb4173aa49799d946a3419eb1
7
- data.tar.gz: 26d6113132e1154ba1a534429316a61382f62e88d7574a6f28339d8b220e9388bd278286011f92e10f5baef4670fb0e59db1bd1d749ce794670e71a874062bf7
6
+ metadata.gz: 203b23f6e4e783adf8b2c0c26e3b9bdb9f4a51e858eaf8a980ac88d6218c9d8ef313c7eafe641d8a76d07d689a5af24fed3d546f9e11fd6f12d8025163c1c5a7
7
+ data.tar.gz: 351303f21b5dca23a3ff11102ee50a338c89465b817961d17c2af61e3b8b2f209633d9d18c55c44d92aced8721002838832ea9edb250c78cba6d4949e9a2a865
@@ -259,14 +259,30 @@ class YPetri::Net::DataSet < Hash
259
259
  map { |lbl, rec| [ lbl, *rec ].join ',' }.join "\n"
260
260
  end
261
261
 
262
- # Plots the dataset. Takes several optional arguments: The list of features
263
- # to plot as the first ordered argument,
262
+ # Plots the dataset. Takes several optional arguments: The list of elements
263
+ # can be supplied as optional first ordered argument, which are then converted
264
+ # into features using +Net::State::Features.infer_from_elements+ method.
265
+ # Similarly, the features to exclude can be specifies as a list of elements
266
+ # (or a feature-specifying hash) supplied under +except:+ keyword. Otherwise,
267
+ # feature specification can be passed to the method as named arguments. If
268
+ # no feature specification is explicitly provided, it is assumed that all the
269
+ # features of this dataset are meant to be plotted.
264
270
  #
265
- def plot( feature_ids=nil, time: nil, except: [], **nn )
271
+ def plot( element_ids=nil, time: nil, except: [], **nn )
266
272
  time = nn.may_have :time, syn!: :time_range
267
273
  events = events()
268
- ff = feature_ids.nil? ? features : net.state.features( feature_ids )
269
- ff -= net.state.features( except )
274
+ if element_ids.nil? then
275
+ ff = if nn.empty? then features else net.State.features( nn ) end
276
+ else
277
+ ff = net.State.Features.infer_from_elements( element_ids )
278
+ end
279
+ xff = case except
280
+ when Array then net.State.Features.infer_from_elements( except )
281
+ when Hash then net.State.features( except )
282
+ else
283
+ fail TypeError, "Wrong type of :except argument: #{except.class}"
284
+ end
285
+ ff -= xff
270
286
  data_ss = series( ff )
271
287
  x_range = if time.nil? then
272
288
  from = events.first || 0
@@ -147,6 +147,7 @@ class YPetri::Net::State::Feature::Delta < YPetri::Net::State::Feature
147
147
  # Inspect string of the delta feature.
148
148
  #
149
149
  def inspect
150
- "<Feature::Delta Δ:#{place.name || place}:#{transitions.size}tt>"
150
+ "<Feature::Delta Δ:#{place.name || place}:[%s]>" %
151
+ transitions.names( true ).join( ', ' )
151
152
  end
152
153
  end # class YPetri::Net::State::Feature::Delta
@@ -87,6 +87,6 @@ class YPetri::Net::State::Feature::Firing < YPetri::Net::State::Feature
87
87
  # Inspect string of the firing feature.
88
88
  #
89
89
  def inspect
90
- "<Feature::Firing of #{transition}>"
90
+ "<Feature::Firing of #{transition.name ? transition.name : transition}>"
91
91
  end
92
92
  end # YPetri::Net::State::Feature::Firing
@@ -87,6 +87,6 @@ class YPetri::Net::State::Feature::Flux < YPetri::Net::State::Feature
87
87
  # Inspect string of the flux feature.
88
88
  #
89
89
  def inspect
90
- "<Feature::Flux of #{transition}>"
90
+ "<Feature::Flux of #{transition.name ? transition.name : transition}>"
91
91
  end
92
92
  end # class YPetri::Net::State::Feature::Flux
@@ -99,6 +99,7 @@ class YPetri::Net::State::Feature::Gradient < YPetri::Net::State::Feature
99
99
  # Inspect string of the gradient feature.
100
100
  #
101
101
  def inspect
102
- "<Feature::Gradient ∂:#{place.name || place}:#{transitions.size}tt>"
102
+ "<Feature::Gradient ∂:#{place.name || place}:[%s]>" %
103
+ transitions.names( true ).join( ', ' )
103
104
  end
104
105
  end # class YPetri::Net::State::Feature::Gradient
@@ -59,6 +59,7 @@ class YPetri::Net::State::Feature::Marking < YPetri::Net::State::Feature
59
59
  def extract_from arg, **nn
60
60
  case arg
61
61
  when YPetri::Simulation then
62
+ # now we have to investigate the case when place.name is A_phase, why the heck does it fail
62
63
  arg.m( [ place ] ).first
63
64
  else
64
65
  fail TypeError, "Argument type not supported!"
@@ -86,6 +87,6 @@ class YPetri::Net::State::Feature::Marking < YPetri::Net::State::Feature
86
87
  # Inspect string of the marking feature.
87
88
  #
88
89
  def inspect
89
- "<Feature::Marking of #{place}>"
90
+ "<Feature::Marking of #{place.name ? place.name : place}>"
90
91
  end
91
92
  end # YPetri::Net::State::Feature::Marking
@@ -41,7 +41,8 @@ class YPetri::Net::State::Features::Record < Array
41
41
  super begin
42
42
  Integer( feature )
43
43
  rescue TypeError
44
- features.index State().feature( feature )
44
+ feat = State().feature( feature )
45
+ features.index( feat )
45
46
  end
46
47
  end
47
48
 
@@ -110,6 +110,29 @@ class YPetri::Net::State::Features < Array
110
110
  new arg.map { |id| Delta id, transitions: transitions }
111
111
  end
112
112
  end
113
+
114
+ # Takes an array of the net elements (places and/or transitions), and infers
115
+ # a feature set from them in the following way: Places or place ids are
116
+ # converted to marking features. The remaining array elements are treated
117
+ # as transition ids, and are converted to either flux features (if the
118
+ # transition is timed), or firing features (if the transition is timeless).
119
+ #
120
+ def infer_from_elements( net_elements )
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 ]
126
+ end
127
+ case element_type
128
+ when :place then Marking( element )
129
+ when :transition then
130
+ fail TypeError, "Flux / firing features can only be auto-inferred " +
131
+ "from S transitions! (#{element} was given)" unless element.S?
132
+ element.timed? ? Flux( element ) : Firing( element )
133
+ end
134
+ }
135
+ end
113
136
  end
114
137
 
115
138
  delegate :State,
@@ -131,7 +154,14 @@ class YPetri::Net::State::Features < Array
131
154
  # Extracts the features from a given target
132
155
  #
133
156
  def extract_from target, **nn
134
- new_record( map { |feature| feature.extract_from( target, **nn ) } )
157
+ values = map { |feat| feat.extract_from( target, **nn ) }
158
+ new_record( values )
159
+ end
160
+
161
+ # Constructs a new record from these features.
162
+ #
163
+ def new_record values
164
+ Record().load values
135
165
  end
136
166
 
137
167
  # Constructs a new dataset from these features.
@@ -176,7 +206,6 @@ class YPetri::Net::State::Features < Array
176
206
 
177
207
  # Returns the subset of marking features.
178
208
 
179
-
180
209
  # Expects a marking feature identifier (place identifier or Marking instance),
181
210
  # and returns the corresponding feature from this feature set. If an array of
182
211
  # marking feature identifiers is supplied, it is mapped to the array of
@@ -29,6 +29,8 @@ class YPetri::Net::State < Array
29
29
  # Returns the feature identified by the argument.
30
30
  #
31
31
  def feature *id
32
+ puts "Hello from Net::State.feature. id is:"
33
+ Kernel::p id
32
34
  fail ArgumentError, "No feature identifier!" if id.empty?
33
35
  case id.first
34
36
  when Feature() then id.first
@@ -94,8 +94,11 @@ class YPetri::Simulation
94
94
  def reset! arg=self.class.starting
95
95
  case arg
96
96
  when Hash then
97
- mapping = simulation.PlaceMapping().load( arg )
98
- reset! places.map { |pl| mapping[ pl ] }
97
+ mp = simulation.PlaceMapping().load( arg )
98
+ updated = mp.each_with_object self.class.starting do |(place, value), mv|
99
+ mv.set place, value
100
+ end
101
+ reset! updated.column_to_a
99
102
  else # array arg assumed
100
103
  arg.each.to_a.zip( annotation ).map { |value, place| set place, value }
101
104
  end
@@ -43,12 +43,7 @@ module YPetri::Simulation::Timed
43
43
  t2 = next_time.round( 9 )
44
44
  if t >= t2 then # it's time to sample
45
45
  sample!
46
- begin
47
- @next_time += sampling
48
- rescue NoMethodError => err
49
- ( puts "Here go error #{err}"; Kernel::p @next_time; Kernel::p sampling )
50
- end
51
-
46
+ @next_time += sampling
52
47
  end
53
48
  end
54
49
 
@@ -115,7 +115,8 @@ class YPetri::Simulation
115
115
  PlaceMapping: PlaceMapping,
116
116
  InitialMarking: InitialMarking,
117
117
  MarkingClamps: MarkingClamps,
118
- MarkingVector: MarkingVector }, with: { simulation: self } )
118
+ MarkingVector: MarkingVector },
119
+ with: { simulation: self } )
119
120
  # Place and transition representation classes are their own namespaces.
120
121
  Place().namespace!
121
122
  Transition().namespace!
@@ -132,8 +133,8 @@ class YPetri::Simulation
132
133
  # Correspondence matrix clamped --> all
133
134
  @c2a = clamped_places.correspondence_matrix( places )
134
135
  # Conditionally extend self depending on net's timedness.
135
- extend( settings[:time] || settings[:step] || settings[:sampling] ?
136
- Timed : Timeless )
136
+ anything_time = settings[:time] || settings[:step] || settings[:sampling]
137
+ extend( anything_time ? Timed : Timeless )
137
138
  # Initialize the marking vector.
138
139
  @m_vector = MarkingVector().zero
139
140
  # Set up the transitions collection.
@@ -1,4 +1,4 @@
1
1
  module YPetri
2
- VERSION = "2.1.37"
2
+ VERSION = "2.1.39"
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.37
4
+ version: 2.1.39
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-22 00:00:00.000000000 Z
11
+ date: 2013-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: y_support