y_petri 2.1.16 → 2.1.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/y_petri.rb +11 -10
- data/lib/y_petri/net/data_set.rb +19 -4
- data/lib/y_petri/net/state/feature/delta.rb +17 -0
- data/lib/y_petri/net/state/feature/firing.rb +24 -0
- data/lib/y_petri/net/state/feature/flux.rb +24 -0
- data/lib/y_petri/net/state/feature/gradient.rb +24 -5
- data/lib/y_petri/net/state/feature/marking.rb +21 -1
- data/lib/y_petri/net/state/features.rb +14 -0
- data/lib/y_petri/version.rb +1 -1
- 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: 2328ba306b41ea9642ef62fca6a3636d4d095d41
|
4
|
+
data.tar.gz: 3c6681ef9997d219fa94451dcc5af1e67e3e643b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 229068a2726963c754dc2cb29c1a0403975dad8699469659ea94c1f13dce35e4ee52e3f6e7ffbbe3b88aae0f769e40767115c0d8b9c16f4628f7aad37584ced7
|
7
|
+
data.tar.gz: 165e17b35a5f4573a4eb6b36003d62d48223dd7ef75e262c03646fc3102d7ba6d79ed21907b307a9465b05a862ba079b8049a9bb955f30284d432805b6740342
|
data/lib/y_petri.rb
CHANGED
@@ -1,15 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
require 'active_support/core_ext/module/delegation'
|
4
|
-
require 'active_support/core_ext/array/extract_options'
|
5
|
-
require 'active_support/inflector'
|
6
|
-
|
7
|
-
# The following are the Ruby libraries used by YPetri:
|
8
|
-
require 'gnuplot' # used for graph visualization
|
9
|
-
require 'csv' # not used at the moment
|
10
|
-
require 'graphviz' # used for Petri net visualization
|
11
|
-
require 'pp' # usef for pretty
|
12
|
-
|
13
3
|
# The following are the YSupport components used by YPetri:
|
14
4
|
require 'y_support/local_object' # object aware of its creation scope
|
15
5
|
require 'y_support/respond_to' # Symbol#~@ + RespondTo#===
|
@@ -22,6 +12,17 @@ require 'y_support/stdlib_ext/matrix' # matrix extensions
|
|
22
12
|
require 'y_support/abstract_algebra' #
|
23
13
|
require 'y_support/kde' # popup file with kioclient
|
24
14
|
|
15
|
+
# ActiveSupport components:
|
16
|
+
require 'active_support/core_ext/module/delegation'
|
17
|
+
require 'active_support/core_ext/array/extract_options'
|
18
|
+
require 'active_support/inflector'
|
19
|
+
|
20
|
+
# The following are the Ruby libraries used by YPetri:
|
21
|
+
require 'gnuplot' # used for graph visualization
|
22
|
+
require 'csv' # not used at the moment
|
23
|
+
require 'graphviz' # used for Petri net visualization
|
24
|
+
require 'pp' # usef for pretty
|
25
|
+
|
25
26
|
require_relative 'y_petri/version'
|
26
27
|
require_relative 'y_petri/fixed_assets'
|
27
28
|
require_relative 'y_petri/world'
|
data/lib/y_petri/net/data_set.rb
CHANGED
@@ -100,8 +100,8 @@ class YPetri::Net::DataSet < Hash
|
|
100
100
|
end
|
101
101
|
reduced_features = net.State.features *args
|
102
102
|
rf_Record = reduced_features.Record
|
103
|
-
reduced_features.new_dataset( type: type ).tap
|
104
|
-
( events >> records ).each_pair
|
103
|
+
reduced_features.new_dataset( type: type ).tap { |dataset|
|
104
|
+
( events >> records ).each_pair { |event, record|
|
105
105
|
absent_features = reduced_features - features()
|
106
106
|
if absent_features.empty? then # it is a subset
|
107
107
|
line = reduced_features.map { |feature| record.fetch feature }
|
@@ -132,8 +132,8 @@ class YPetri::Net::DataSet < Hash
|
|
132
132
|
end
|
133
133
|
end
|
134
134
|
dataset.update event => rf_Record.load( line )
|
135
|
-
|
136
|
-
|
135
|
+
}
|
136
|
+
}
|
137
137
|
end
|
138
138
|
|
139
139
|
# Returns a subset of this dataset with only the specified marking features
|
@@ -237,4 +237,19 @@ class YPetri::Net::DataSet < Hash
|
|
237
237
|
end
|
238
238
|
end
|
239
239
|
end
|
240
|
+
|
241
|
+
# Returns a string briefly discribing the dataset.
|
242
|
+
#
|
243
|
+
def to_s
|
244
|
+
"#<DataSet: " +
|
245
|
+
"#{keys.size} records, " +
|
246
|
+
"features: #{features}" +
|
247
|
+
">"
|
248
|
+
end
|
249
|
+
|
250
|
+
# Inspect string of the instance.
|
251
|
+
#
|
252
|
+
def inspect
|
253
|
+
to_s
|
254
|
+
end
|
240
255
|
end # YPetri::Net::Dataset
|
@@ -6,6 +6,8 @@ class YPetri::Net::State::Feature::Delta < YPetri::Net::State::Feature
|
|
6
6
|
attr_reader :place, :transitions, :step
|
7
7
|
|
8
8
|
class << self
|
9
|
+
# Customization of the Class#parametrize method.
|
10
|
+
#
|
9
11
|
def parametrize *args
|
10
12
|
Class.instance_method( :parametrize ).bind( self ).( *args ).tap do |ç|
|
11
13
|
# First, prepare the hash of instances.
|
@@ -83,6 +85,11 @@ class YPetri::Net::State::Feature::Delta < YPetri::Net::State::Feature
|
|
83
85
|
alias of new
|
84
86
|
end
|
85
87
|
|
88
|
+
# The constructor of a delta feature takes one ordered argument (place
|
89
|
+
# identifier), and one named argument, +:transitions+, expecting an array
|
90
|
+
# of transition identifiers, whose contribution is taken into account in
|
91
|
+
# this delta feature.
|
92
|
+
#
|
86
93
|
def initialize place, transitions: net.tt
|
87
94
|
@place = net.place( place )
|
88
95
|
@transitions = net.transitions( transitions )
|
@@ -119,11 +126,21 @@ class YPetri::Net::State::Feature::Delta < YPetri::Net::State::Feature
|
|
119
126
|
! timed?
|
120
127
|
end
|
121
128
|
|
129
|
+
# A string briefly describing this delta feature.
|
130
|
+
#
|
122
131
|
def to_s
|
123
132
|
place.name
|
124
133
|
end
|
125
134
|
|
135
|
+
# Label for the delta feature (to use in graphics etc.)
|
136
|
+
#
|
126
137
|
def label
|
127
138
|
"Δ:#{place.name}:#{transitions.size}tt"
|
128
139
|
end
|
140
|
+
|
141
|
+
# Inspect string of the delta feature.
|
142
|
+
#
|
143
|
+
def inspect
|
144
|
+
"<Feature::Delta Δ:#{place.name || place}:#{transitions.size}tt>"
|
145
|
+
end
|
129
146
|
end # class YPetri::Net::State::Feature::Delta
|
@@ -6,6 +6,8 @@ class YPetri::Net::State::Feature::Firing < YPetri::Net::State::Feature
|
|
6
6
|
attr_reader :transition
|
7
7
|
|
8
8
|
class << self
|
9
|
+
# Customization of the Class#parametrize method.
|
10
|
+
#
|
9
11
|
def parametrize *args
|
10
12
|
Class.instance_method( :parametrize ).bind( self ).( *args ).tap do |ç|
|
11
13
|
ç.instance_variable_set( :@instances,
|
@@ -38,15 +40,23 @@ class YPetri::Net::State::Feature::Firing < YPetri::Net::State::Feature
|
|
38
40
|
instances[ id ]
|
39
41
|
end
|
40
42
|
|
43
|
+
# Alias of #new method.
|
44
|
+
#
|
41
45
|
def of id
|
42
46
|
new id
|
43
47
|
end
|
44
48
|
end
|
45
49
|
|
50
|
+
# The constructor of a marking feature takes exactly one argument (transition
|
51
|
+
# identifier).
|
52
|
+
#
|
46
53
|
def initialize transition
|
47
54
|
@transition = net.transition( transition )
|
48
55
|
end
|
49
56
|
|
57
|
+
# Extracts the receiver marking feature from the argument. This can be
|
58
|
+
# typically a simulation instance.
|
59
|
+
#
|
50
60
|
def extract_from arg, **nn
|
51
61
|
case arg
|
52
62
|
when YPetri::Simulation then
|
@@ -56,7 +66,21 @@ class YPetri::Net::State::Feature::Firing < YPetri::Net::State::Feature
|
|
56
66
|
end
|
57
67
|
end
|
58
68
|
|
69
|
+
# A string briefly describing the firing feature.
|
70
|
+
#
|
71
|
+
def to_s
|
72
|
+
label
|
73
|
+
end
|
74
|
+
|
75
|
+
# Label for the firing feature (to use in the graphics etc.)
|
76
|
+
#
|
59
77
|
def label
|
60
78
|
"F:#{transition.name}"
|
61
79
|
end
|
80
|
+
|
81
|
+
# Inspect string of the firing feature.
|
82
|
+
#
|
83
|
+
def inspect
|
84
|
+
"<Feature::Firing of #{transition}>"
|
85
|
+
end
|
62
86
|
end # YPetri::Net::State::Feature::Firing
|
@@ -6,6 +6,8 @@ class YPetri::Net::State::Feature::Flux < YPetri::Net::State::Feature
|
|
6
6
|
attr_reader :transition
|
7
7
|
|
8
8
|
class << self
|
9
|
+
# Customization of the Class#parametrize method.
|
10
|
+
#
|
9
11
|
def parametrize *args
|
10
12
|
Class.instance_method( :parametrize ).bind( self ).( *args ).tap do |ç|
|
11
13
|
ç.instance_variable_set( :@instances,
|
@@ -38,15 +40,23 @@ class YPetri::Net::State::Feature::Flux < YPetri::Net::State::Feature
|
|
38
40
|
instances[ id ]
|
39
41
|
end
|
40
42
|
|
43
|
+
# Alias of #new method.
|
44
|
+
#
|
41
45
|
def of transition_id
|
42
46
|
new transition_id
|
43
47
|
end
|
44
48
|
end
|
45
49
|
|
50
|
+
# The constructor of a marking feature takes exactly one argument (transition
|
51
|
+
# identifier).
|
52
|
+
#
|
46
53
|
def initialize id
|
47
54
|
@transition = net.transition( id.is_a?( Flux ) ? id.transition : id )
|
48
55
|
end
|
49
56
|
|
57
|
+
# Extracts the receiver marking feature from the argument. This can be
|
58
|
+
# typically a simulation instance.
|
59
|
+
#
|
50
60
|
def extract_from arg, **nn
|
51
61
|
case arg
|
52
62
|
when YPetri::Simulation then
|
@@ -56,7 +66,21 @@ class YPetri::Net::State::Feature::Flux < YPetri::Net::State::Feature
|
|
56
66
|
end
|
57
67
|
end
|
58
68
|
|
69
|
+
# A string briefly describing the flux feature.
|
70
|
+
#
|
71
|
+
def to_s
|
72
|
+
label
|
73
|
+
end
|
74
|
+
|
75
|
+
# Label for the flux feature (to use in the graphics etc.)
|
76
|
+
#
|
59
77
|
def label
|
60
78
|
"Φ:#{transition.name}"
|
61
79
|
end
|
80
|
+
|
81
|
+
# Inspect string of the flux feature.
|
82
|
+
#
|
83
|
+
def inspect
|
84
|
+
"<Feature::Flux of #{transition}>"
|
85
|
+
end
|
62
86
|
end # class YPetri::Net::State::Feature::Flux
|
@@ -6,6 +6,8 @@ class YPetri::Net::State::Feature::Gradient < YPetri::Net::State::Feature
|
|
6
6
|
attr_reader :place, :transitions
|
7
7
|
|
8
8
|
class << self
|
9
|
+
# Customization of the Class#parametrize method.
|
10
|
+
#
|
9
11
|
def parametrize *args
|
10
12
|
Class.instance_method( :parametrize ).bind( self ).( *args ).tap do |ç|
|
11
13
|
# First, prepare the hash of instances.
|
@@ -45,21 +47,28 @@ class YPetri::Net::State::Feature::Gradient < YPetri::Net::State::Feature
|
|
45
47
|
|
46
48
|
alias __new__ new
|
47
49
|
|
50
|
+
# Constructor #new is redefined to use instance cache.
|
51
|
+
#
|
48
52
|
def new *args
|
49
53
|
return instances[ *args ] if args.size == 1
|
50
54
|
instances[ args ]
|
51
55
|
end
|
52
|
-
|
53
|
-
def of *args
|
54
|
-
new *args
|
55
|
-
end
|
56
|
+
alias of new
|
56
57
|
end
|
57
58
|
|
59
|
+
# The constructor of a gradient feature takes one ordered argument (place
|
60
|
+
# identifier), and one named argument, +:transitions+, expecting an array
|
61
|
+
# of transition identifiers, whose contribution is taken into account in
|
62
|
+
# this gradient feature.
|
63
|
+
#
|
58
64
|
def initialize *id
|
59
65
|
@place = net.place id.fetch( 0 )
|
60
66
|
@transitions = net.transitions id.fetch( 1 ).fetch( :transitions )
|
61
67
|
end
|
62
68
|
|
69
|
+
# Extracts the receiver gradient feature from the argument. This can be
|
70
|
+
# typically a simulation instance.
|
71
|
+
#
|
63
72
|
def extract_from arg, **nn
|
64
73
|
case arg
|
65
74
|
when YPetri::Simulation then
|
@@ -69,11 +78,21 @@ class YPetri::Net::State::Feature::Gradient < YPetri::Net::State::Feature
|
|
69
78
|
end
|
70
79
|
end
|
71
80
|
|
81
|
+
# A string briefly describing the gradient feature.
|
82
|
+
#
|
72
83
|
def to_s
|
73
|
-
|
84
|
+
label
|
74
85
|
end
|
75
86
|
|
87
|
+
# Label for the gradient feature (to use in graphics etc.)
|
88
|
+
#
|
76
89
|
def label
|
77
90
|
"∂:#{place.name}:#{transitions.size}tt"
|
78
91
|
end
|
92
|
+
|
93
|
+
# Inspect string of the gradient feature.
|
94
|
+
#
|
95
|
+
def inspect
|
96
|
+
"<Feature::Gradient ∂:#{place.name || place}:#{transitions.size}tt>"
|
97
|
+
end
|
79
98
|
end # class YPetri::Net::State::Feature::Gradient
|
@@ -6,6 +6,8 @@ class YPetri::Net::State::Feature::Marking < YPetri::Net::State::Feature
|
|
6
6
|
attr_reader :place
|
7
7
|
|
8
8
|
class << self
|
9
|
+
# Customization of the Class#parametrize method.
|
10
|
+
#
|
9
11
|
def parametrize *args
|
10
12
|
Class.instance_method( :parametrize ).bind( self ).( *args ).tap do |ç|
|
11
13
|
ç.instance_variable_set( :@instances,
|
@@ -37,15 +39,23 @@ class YPetri::Net::State::Feature::Marking < YPetri::Net::State::Feature
|
|
37
39
|
instances[ id ]
|
38
40
|
end
|
39
41
|
|
42
|
+
# Alias of #new method.
|
43
|
+
#
|
40
44
|
def of id
|
41
45
|
new id
|
42
46
|
end
|
43
47
|
end
|
44
48
|
|
49
|
+
# The constructor of a marking feature takes exactly one argument (place
|
50
|
+
# identifier).
|
51
|
+
#
|
45
52
|
def initialize place
|
46
53
|
@place = net.place( place )
|
47
54
|
end
|
48
55
|
|
56
|
+
# Extracts the receiver marking feature from the argument. This can be
|
57
|
+
# typically a simulation instance.
|
58
|
+
#
|
49
59
|
def extract_from arg, **nn
|
50
60
|
case arg
|
51
61
|
when YPetri::Simulation then
|
@@ -55,11 +65,21 @@ class YPetri::Net::State::Feature::Marking < YPetri::Net::State::Feature
|
|
55
65
|
end
|
56
66
|
end
|
57
67
|
|
68
|
+
# A string briefly describing the marking feature.
|
69
|
+
#
|
58
70
|
def to_s
|
59
|
-
|
71
|
+
"m:#{label}"
|
60
72
|
end
|
61
73
|
|
74
|
+
# Label for the marking feature (to use in graphics etc.)
|
75
|
+
#
|
62
76
|
def label
|
63
77
|
":#{place.name}"
|
64
78
|
end
|
79
|
+
|
80
|
+
# Inspect string of the marking feature.
|
81
|
+
#
|
82
|
+
def inspect
|
83
|
+
"<Feature::Marking of #{place}>"
|
84
|
+
end
|
65
85
|
end # YPetri::Net::State::Feature::Marking
|
@@ -279,4 +279,18 @@ class YPetri::Net::State::Features < Array
|
|
279
279
|
end
|
280
280
|
end
|
281
281
|
end
|
282
|
+
|
283
|
+
# Returns a string briefly describing the feature set.
|
284
|
+
#
|
285
|
+
def to_s
|
286
|
+
group_by( &:type )
|
287
|
+
.map { |feature_type, ff| "#{feature_type}: #{ff.size}" }
|
288
|
+
.join ', '
|
289
|
+
end
|
290
|
+
|
291
|
+
# Inspect string of the instance.
|
292
|
+
#
|
293
|
+
def inspect
|
294
|
+
"#<Features: #{to_s}>"
|
295
|
+
end
|
282
296
|
end # YPetri::Net::State::Features
|
data/lib/y_petri/version.rb
CHANGED
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.17
|
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-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: y_support
|