y_petri 2.1.10 → 2.1.11
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 +4 -4
- data/lib/y_petri/agent/petri_net_related.rb +2 -2
- data/lib/y_petri/agent/simulation_related.rb +12 -3
- data/lib/y_petri/net/data_set.rb +5 -6
- data/lib/y_petri/net/state/features/record.rb +7 -0
- data/lib/y_petri/place.rb +9 -4
- data/lib/y_petri/simulation/elements.rb +3 -3
- data/lib/y_petri/simulation/transition_representation/A.rb +36 -4
- data/lib/y_petri/simulation/transition_representation/t.rb +4 -4
- data/lib/y_petri/simulation/transition_representation/types.rb +5 -5
- data/lib/y_petri/simulation/transitions/types.rb +9 -9
- data/lib/y_petri/simulation/transitions.rb +1 -1
- data/lib/y_petri/version.rb +1 -1
- data/lib/y_petri.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6265e2cf605fc8fcadcbb29f89be1f12284d88dc
|
4
|
+
data.tar.gz: 96d5da54420128ee32cad846d1715dfe497a3841
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 224b656a992fa458689eebc065da7157f07ec65ea6837fe76b4a317e6fd6fbb80380114394f10a7fd9fe71048c575bc71d37f224dc6cfa31115d4337f96d9c93
|
7
|
+
data.tar.gz: 382dfd8a98e9d444902f5055a10953b6a2903e3055695fe65a5aa8451361eb6eb0fcb6e39e8c6be493a4f921c64ea27f3be13fb4e5c5726d1adb36a860f87b2a
|
@@ -23,7 +23,7 @@ module YPetri::Agent::PetriNetRelated
|
|
23
23
|
|
24
24
|
# Elements and selections:
|
25
25
|
#
|
26
|
-
delegate :place, :transition, :element,
|
26
|
+
delegate :place, :transition, :element,
|
27
27
|
:nets, :places, :transitions,
|
28
28
|
to: :world
|
29
29
|
|
@@ -112,7 +112,7 @@ module YPetri::Agent::PetriNetRelated
|
|
112
112
|
|
113
113
|
# Net constructor: Creates a new Net instance in the current world.
|
114
114
|
#
|
115
|
-
def Net *
|
115
|
+
def Net *args, &block
|
116
116
|
world.Net.send( :new, *ordered, **named, &block )
|
117
117
|
end
|
118
118
|
|
@@ -101,10 +101,19 @@ module YPetri::Agent::SimulationRelated
|
|
101
101
|
:set_clamp_collection, :ncc,
|
102
102
|
:set_initial_marking_collection, :nimc,
|
103
103
|
:set_simulation_settings_collection, :set_ssc,
|
104
|
-
:new_simulation,
|
105
|
-
:
|
104
|
+
:new_simulation, :clamp_cc,
|
105
|
+
:initial_marking_cc, :simulation_settings_cc,
|
106
106
|
to: :world
|
107
107
|
|
108
|
+
delegate :pm, to: :simulation
|
109
|
+
|
110
|
+
# Pretty print the state.
|
111
|
+
#
|
112
|
+
def state
|
113
|
+
pp pm
|
114
|
+
return nil
|
115
|
+
end
|
116
|
+
|
108
117
|
# Returns the simulation identified by the argument, or one at simulation
|
109
118
|
# point, if no argument given. The simulation is identified in the same way
|
110
119
|
# as for #simulation_point_to method.
|
@@ -341,7 +350,7 @@ module YPetri::Agent::SimulationRelated
|
|
341
350
|
tt = transitions.nil? ? simulation.tt : tranisitions
|
342
351
|
tt = simulation.tt( tt )
|
343
352
|
tt -= simulation.ee( except )
|
344
|
-
rec.delta( pp, transitions: tt,
|
353
|
+
rec.delta( pp, transitions: tt, Δt: options[:delta_time] )
|
345
354
|
.plot( title: title, ylabel: ylabel, **options )
|
346
355
|
end
|
347
356
|
end # module YPetri::Agent::SimulationRelated
|
data/lib/y_petri/net/data_set.rb
CHANGED
@@ -212,26 +212,25 @@ class YPetri::Net::DataSet < Hash
|
|
212
212
|
def plot( time: nil, **nn )
|
213
213
|
events = events()
|
214
214
|
data_ss = series
|
215
|
-
x_range = if time.
|
215
|
+
x_range = if time.nil? then
|
216
|
+
"[#{events.first}:#{events.last}]"
|
217
|
+
elsif time.is_a? Range then
|
216
218
|
"[#{time.begin}:#{time.end}]"
|
217
219
|
else
|
218
220
|
"[-0:#{SY::Time.magnitude( time ).amount rescue time}]"
|
219
221
|
end
|
220
|
-
|
221
222
|
Gnuplot.open do |gp|
|
222
223
|
Gnuplot::Plot.new gp do |plot|
|
223
224
|
plot.xrange x_range
|
224
225
|
plot.title nn[:title] || "#{net} plot"
|
225
226
|
plot.ylabel nn[:ylabel] || "Values"
|
226
227
|
plot.xlabel nn[:xlabel] || "Time [s]"
|
227
|
-
|
228
|
-
features.labels.zip( data_ss )
|
229
|
-
.each { |label, data_array|
|
228
|
+
features.labels.zip( data_ss ).each do |label, data_array|
|
230
229
|
plot.data << Gnuplot::DataSet.new( [ events, data_array ] ) { |ds|
|
231
230
|
ds.with = "linespoints"
|
232
231
|
ds.title = label
|
233
232
|
}
|
234
|
-
|
233
|
+
end
|
235
234
|
end
|
236
235
|
end
|
237
236
|
end
|
@@ -27,6 +27,13 @@ class YPetri::Net::State::Features::Record < Array
|
|
27
27
|
features.map { |f| fetch( f ).round( precision ) }
|
28
28
|
end
|
29
29
|
|
30
|
+
# Pretty prints the record with feature names.
|
31
|
+
#
|
32
|
+
def print gap: 4, precision: 4
|
33
|
+
hsh = features.labels >> dump( precision: precision )
|
34
|
+
hsh.pretty_print_numeric_values gap: gap, precision: precision
|
35
|
+
end
|
36
|
+
|
30
37
|
# Returns an identified feature, or fails.
|
31
38
|
#
|
32
39
|
def fetch feature
|
data/lib/y_petri/place.rb
CHANGED
@@ -14,7 +14,6 @@ class YPetri::Place
|
|
14
14
|
|
15
15
|
class << self
|
16
16
|
★ YPetri::World::Dependency
|
17
|
-
|
18
17
|
private :new
|
19
18
|
end
|
20
19
|
|
@@ -79,7 +78,9 @@ class YPetri::Place
|
|
79
78
|
|
80
79
|
# Getter of +@marking+ attribute.
|
81
80
|
#
|
82
|
-
def m
|
81
|
+
def m
|
82
|
+
@marking
|
83
|
+
end
|
83
84
|
alias value m
|
84
85
|
|
85
86
|
# This method, which acts as a simple getter of +@marking+ attribute if no
|
@@ -108,11 +109,15 @@ class YPetri::Place
|
|
108
109
|
|
109
110
|
# Alias for #marking=
|
110
111
|
#
|
111
|
-
def value=( marking )
|
112
|
+
def value=( marking )
|
113
|
+
self.marking = marking
|
114
|
+
end
|
112
115
|
|
113
116
|
# Alias for #marking=
|
114
117
|
#
|
115
|
-
def m=( marking )
|
118
|
+
def m=( marking )
|
119
|
+
self.marking = marking
|
120
|
+
end
|
116
121
|
|
117
122
|
# Adds tokens to the place.
|
118
123
|
#
|
@@ -5,7 +5,7 @@
|
|
5
5
|
class YPetri::Simulation
|
6
6
|
class Elements < Array
|
7
7
|
★ Dependency
|
8
|
-
|
8
|
+
|
9
9
|
class << self
|
10
10
|
# New collection constructor
|
11
11
|
#
|
@@ -15,13 +15,13 @@ class YPetri::Simulation
|
|
15
15
|
end
|
16
16
|
|
17
17
|
delegate :simulation, to: "self.class"
|
18
|
-
|
18
|
+
|
19
19
|
# Loads elements to this collection.
|
20
20
|
#
|
21
21
|
def load elements
|
22
22
|
elements.each{ |e| push e }
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
# Creates a subset of this collection (of the same class).
|
26
26
|
#
|
27
27
|
def subset element_ids=nil, &block
|
@@ -4,7 +4,7 @@
|
|
4
4
|
#
|
5
5
|
module YPetri::Simulation::TransitionRepresentation::Type_A
|
6
6
|
attr_reader :assignment_closure
|
7
|
-
|
7
|
+
|
8
8
|
# Assignment action -- true for A transitions.
|
9
9
|
#
|
10
10
|
def A?
|
@@ -19,26 +19,58 @@ module YPetri::Simulation::TransitionRepresentation::Type_A
|
|
19
19
|
false
|
20
20
|
end
|
21
21
|
|
22
|
+
# Nil for assignment transitions. Though technically timeless, assignment
|
23
|
+
# transitions are considered outside the t/T types.
|
24
|
+
#
|
25
|
+
def T?
|
26
|
+
nil
|
27
|
+
end
|
28
|
+
alias timed? T?
|
29
|
+
|
30
|
+
# Nil for assignment transitions. Though technically timeless, assignment
|
31
|
+
# transitions are considered outside the t/T types.
|
32
|
+
#
|
33
|
+
def t?
|
34
|
+
nil
|
35
|
+
end
|
36
|
+
alias timeless? t?
|
37
|
+
|
38
|
+
# Nil for assignment transitions. Though technically timeless, assignment
|
39
|
+
# transitions are considered outside the s/S types.
|
40
|
+
#
|
41
|
+
def S?
|
42
|
+
nil
|
43
|
+
end
|
44
|
+
alias timed? T?
|
45
|
+
|
46
|
+
# Nil for assignment transitions. Though technically timeless, assignment
|
47
|
+
# transitions are considered outside the s/S types.
|
48
|
+
#
|
49
|
+
def s?
|
50
|
+
nil
|
51
|
+
end
|
52
|
+
alias timeless? t?
|
53
|
+
|
22
54
|
# Initialization subroutine.
|
23
55
|
#
|
24
56
|
def init
|
25
57
|
@assignment_closure = to_assignment_closure
|
26
58
|
end
|
27
|
-
|
59
|
+
|
28
60
|
# Returns the assignments, as they would happen if this A transition fired,
|
29
61
|
# as hash places >> action.
|
30
62
|
#
|
31
63
|
def action
|
32
64
|
act.select { |pl, v| pl.free? }
|
33
65
|
end
|
34
|
-
|
66
|
+
|
35
67
|
# Returns the assignments to all places, as they would happen if A transition
|
36
68
|
# could change their values.
|
37
69
|
#
|
38
70
|
def act
|
39
71
|
codomain >> Array( function.( *domain_marking ) )
|
40
72
|
end
|
41
|
-
|
73
|
+
|
42
74
|
# Builds an assignment closure, which, when called, directly affects the
|
43
75
|
# simulation's marking vector (free places only).
|
44
76
|
#
|
@@ -5,28 +5,28 @@
|
|
5
5
|
class YPetri::Simulation::TransitionRepresentation
|
6
6
|
module Type_t
|
7
7
|
include Type_a
|
8
|
-
|
8
|
+
|
9
9
|
# False for timed transitions.
|
10
10
|
#
|
11
11
|
def T?
|
12
12
|
false
|
13
13
|
end
|
14
14
|
alias timed? T?
|
15
|
-
|
15
|
+
|
16
16
|
# True for timed transitions.
|
17
17
|
#
|
18
18
|
def t?
|
19
19
|
true
|
20
20
|
end
|
21
21
|
alias timeless? t?
|
22
|
-
|
22
|
+
|
23
23
|
# Initialization subroutine.
|
24
24
|
#
|
25
25
|
def init
|
26
26
|
super
|
27
27
|
@function = source.action_closure
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
# Change, as it would happen if the transition fired, returned as hash
|
31
31
|
# codomain places >> change.
|
32
32
|
#
|
@@ -27,32 +27,32 @@ class YPetri::Simulation::TransitionRepresentation
|
|
27
27
|
else fail TypeError, "Unknown tr. type #{source.type}!" end
|
28
28
|
init
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
# The transition's type.
|
32
32
|
#
|
33
33
|
def type
|
34
34
|
return :A if A?
|
35
35
|
if T? then S? ? :TS : :Ts else S? ? :tS : :ts end
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
# Is this a TS transition?
|
39
39
|
#
|
40
40
|
def TS?
|
41
41
|
type == :TS
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
# Is this a Ts transition?
|
45
45
|
#
|
46
46
|
def Ts?
|
47
47
|
type == :Ts
|
48
48
|
end
|
49
|
-
|
49
|
+
|
50
50
|
# Is this a tS transition?
|
51
51
|
#
|
52
52
|
def tS?
|
53
53
|
type == :tS
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
# Is this a ts transition?
|
57
57
|
#
|
58
58
|
def ts?
|
@@ -22,7 +22,7 @@ class YPetri::Simulation::Transitions
|
|
22
22
|
klass.class_exec { include Type_s }
|
23
23
|
end ).load subset( &:s? )
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
# Subset of S type transitions, if any.
|
27
27
|
#
|
28
28
|
def S
|
@@ -30,7 +30,7 @@ class YPetri::Simulation::Transitions
|
|
30
30
|
klass.class_exec { include Type_S }
|
31
31
|
end ).load subset( &:S? )
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
# Subset of t type transitions, if any.
|
35
35
|
#
|
36
36
|
def t
|
@@ -38,7 +38,7 @@ class YPetri::Simulation::Transitions
|
|
38
38
|
klass.class_exec { include Type_t }
|
39
39
|
end ).load subset( &:t? )
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
# Subset of T type transitions, if any.
|
43
43
|
#
|
44
44
|
def T
|
@@ -46,7 +46,7 @@ class YPetri::Simulation::Transitions
|
|
46
46
|
klass.class_exec { include Type_T }
|
47
47
|
end ).load subset( &:T? )
|
48
48
|
end
|
49
|
-
|
49
|
+
|
50
50
|
# Subset of ts type transitions, if any.
|
51
51
|
#
|
52
52
|
def ts
|
@@ -54,7 +54,7 @@ class YPetri::Simulation::Transitions
|
|
54
54
|
klass.class_exec { include Type_ts }
|
55
55
|
end ).load subset( &:ts? )
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
58
|
# Subset of tS type transitions, if any.
|
59
59
|
#
|
60
60
|
def tS
|
@@ -62,7 +62,7 @@ class YPetri::Simulation::Transitions
|
|
62
62
|
klass.class_exec { include Type_tS }
|
63
63
|
end ).load subset( &:tS? )
|
64
64
|
end
|
65
|
-
|
65
|
+
|
66
66
|
# Subset of Ts type transitions, if any.
|
67
67
|
#
|
68
68
|
def Ts
|
@@ -70,7 +70,7 @@ class YPetri::Simulation::Transitions
|
|
70
70
|
klass.class_exec { include Type_Ts }
|
71
71
|
end ).load subset( &:Ts? )
|
72
72
|
end
|
73
|
-
|
73
|
+
|
74
74
|
# Subset of TS type transitions, if any.
|
75
75
|
#
|
76
76
|
def TS
|
@@ -78,7 +78,7 @@ class YPetri::Simulation::Transitions
|
|
78
78
|
klass.class_exec { include Type_TS }
|
79
79
|
end ).load subset( &:TS? )
|
80
80
|
end
|
81
|
-
|
81
|
+
|
82
82
|
# Subset of A type transitions, if any.
|
83
83
|
#
|
84
84
|
def A
|
@@ -86,7 +86,7 @@ class YPetri::Simulation::Transitions
|
|
86
86
|
klass.class_exec { include Type_A }
|
87
87
|
end ).load subset( &:A? )
|
88
88
|
end
|
89
|
-
|
89
|
+
|
90
90
|
# Subset of a type transitions, if any.
|
91
91
|
#
|
92
92
|
def a
|
data/lib/y_petri/version.rb
CHANGED
data/lib/y_petri.rb
CHANGED
@@ -8,6 +8,7 @@ require 'active_support/inflector'
|
|
8
8
|
require 'gnuplot' # used for graph visualization
|
9
9
|
require 'csv' # not used at the moment
|
10
10
|
require 'graphviz' # used for Petri net visualization
|
11
|
+
require 'pp' # usef for pretty
|
11
12
|
|
12
13
|
# The following are the YSupport components used by YPetri:
|
13
14
|
require 'y_support/local_object' # object aware of its creation scope
|
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.
|
4
|
+
version: 2.1.11
|
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-
|
11
|
+
date: 2013-08-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: y_support
|