y_nelson 0.1.5 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/config/mongoid.yml +6 -0
- data/lib/y_nelson/{manipulator.rb → agent.rb} +41 -23
- data/lib/y_nelson/dimension.rb +2 -1
- data/lib/y_nelson/dsl.rb +77 -0
- data/lib/y_nelson/net.rb +0 -8
- data/lib/y_nelson/place.rb +12 -9
- data/lib/y_nelson/transition.rb +0 -6
- data/lib/y_nelson/version.rb +1 -1
- data/lib/y_nelson/yzz.rb +1 -1
- data/lib/y_nelson.rb +45 -105
- data/test/mongoid_example.rb +100 -0
- data/test/y_nelson_test.rb +13 -11
- data/test/zz.png +0 -0
- data/zz.png +0 -0
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ea818e5d4cb9055a77287cadec64a7050333f638
|
4
|
+
data.tar.gz: 152909e30337e411763ad7f1c5b4d0edcddfa3a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e15d5d83f1adb7299448d2517193f0b7caee251bd10a97480537d73d7c472dd7b1cf645fc0a187a0e73196905cbf7f0d001db90bc8697aa11e505240a66e3966
|
7
|
+
data.tar.gz: c77ff082eb96e5f092d1624c72f019dce938f70ff329bc82c12f7f111f6183a2ec3aa7fe582a19ee8ae26cc624abd679f85c5cbae407074413dc22b62537c2cd
|
data/.gitignore
CHANGED
data/config/mongoid.yml
ADDED
@@ -1,30 +1,34 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
#
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# YNelson's user inteface. As the name suggests, represents an agent that
|
4
|
+
# manipulates the YNelson world. In his introduction to zz structures,
|
5
|
+
# Ted Nelson has remarks regarding the desired UI, such as:
|
4
6
|
#
|
5
7
|
# <em>Selection</em> is a pointer to a collection of cells.
|
6
8
|
# <em>View</em> consists of selection and a coordinate system.
|
7
9
|
# <em>Field<em> is a connected (contiguous) selection.
|
8
10
|
# <em>Coordinate system</em> is a collection of oriented dimensions.
|
9
11
|
#
|
10
|
-
# Apart from
|
11
|
-
# YPetri::
|
12
|
-
#
|
12
|
+
# Apart from these author's suggestions, the interface should offer similar
|
13
|
+
# functionality as YPetri::Agent – that is, should allow constructing a Petri
|
14
|
+
# net with the same commands as YPetri does.
|
13
15
|
#
|
14
|
-
class YNelson::
|
15
|
-
attr_reader :
|
16
|
+
class YNelson::Agent
|
17
|
+
attr_reader :world
|
16
18
|
|
17
|
-
include YPetri::
|
18
|
-
include YPetri::
|
19
|
+
include YPetri::Agent::PetriNetRelated
|
20
|
+
include YPetri::Agent::SimulationRelated
|
19
21
|
|
22
|
+
# Initialization of a YNelson::Agent instance. For YNelson manipulators, the
|
23
|
+
# world is always YNelson itself.
|
24
|
+
#
|
20
25
|
def initialize
|
21
|
-
|
22
|
-
@workspace = ::YNelson
|
26
|
+
@world = ::YNelson
|
23
27
|
super
|
24
|
-
# A hash of sheets. For the moment being, YNelson acts
|
28
|
+
# A hash of sheets. (For the moment being, YNelson acts like a spreadsheet.)
|
25
29
|
@sheets = {}
|
26
30
|
# Default dimension of this manipulator.
|
27
|
-
@default_dimension = YNelson.Dimension :row
|
31
|
+
@default_dimension = YNelson.Dimension( :row )
|
28
32
|
# Zz object pointers of this manipulator.
|
29
33
|
@primary_point = YNelson::ZzPoint.new
|
30
34
|
@secondary_point = YNelson::ZzPoint.new
|
@@ -45,7 +49,7 @@ class YNelson::Manipulator
|
|
45
49
|
|
46
50
|
# Dimension convenience constructor from
|
47
51
|
delegate( :Dimension,
|
48
|
-
to: :
|
52
|
+
to: :world )
|
49
53
|
|
50
54
|
# Creation of a single-output formula known well from spreadseets. Given a
|
51
55
|
# place, it creates a new assignment transition.
|
@@ -60,24 +64,38 @@ class YNelson::Manipulator
|
|
60
64
|
|
61
65
|
# Now let's look into the graph visualization.
|
62
66
|
|
63
|
-
def default_dimension
|
67
|
+
def default_dimension
|
68
|
+
@default_dimension
|
69
|
+
end
|
64
70
|
|
65
|
-
def primary_point
|
71
|
+
def primary_point
|
72
|
+
@primary_point
|
73
|
+
end
|
66
74
|
alias p1 primary_point
|
67
75
|
|
68
|
-
def secondary_point
|
76
|
+
def secondary_point
|
77
|
+
@secondary_point
|
78
|
+
end
|
69
79
|
alias p2 secondary_point
|
70
80
|
|
71
|
-
def primary_dimension_point
|
81
|
+
def primary_dimension_point
|
82
|
+
@primary_dimension_point
|
83
|
+
end
|
72
84
|
alias d1 primary_dimension_point
|
73
85
|
|
74
|
-
def secondary_dimension_point
|
86
|
+
def secondary_dimension_point
|
87
|
+
@secondary_dimension_point
|
88
|
+
end
|
75
89
|
alias d2 secondary_dimension_point
|
76
90
|
|
77
|
-
# Define function to display it with kioclient
|
78
|
-
|
91
|
+
# Define function to display it with kioclient.
|
92
|
+
#
|
93
|
+
def visualize *args, &block
|
94
|
+
graphviz *args, &block
|
95
|
+
end
|
79
96
|
|
80
|
-
# Define graphviz places
|
97
|
+
# Define graphviz places.
|
98
|
+
#
|
81
99
|
def graphviz dim1=primary_dimension_point, dim2=secondary_dimension_point
|
82
100
|
γ = GraphViz.new :G, type: :digraph # Create a new graph
|
83
101
|
|
data/lib/y_nelson/dimension.rb
CHANGED
data/lib/y_nelson/dsl.rb
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module YNelson
|
4
|
+
# YNelson DSL.
|
5
|
+
#
|
6
|
+
module DSL
|
7
|
+
def y_nelson_agent
|
8
|
+
@y_nelson_agent ||= Agent.new
|
9
|
+
.tap { puts "Defining YNelson agent for #{self}" if YNelson::DEBUG }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
delegate :world, to: :y_nelson_agent
|
14
|
+
|
15
|
+
# Petri net aspect.
|
16
|
+
delegate( :Place,
|
17
|
+
:Transition, :T, :A,
|
18
|
+
:Net,
|
19
|
+
:place, :transition, :pl, :tr,
|
20
|
+
:places, :transitions, :nets,
|
21
|
+
:pn, :tn, :nn,
|
22
|
+
:net_point,
|
23
|
+
:net_selection,
|
24
|
+
:net, :nnet,
|
25
|
+
:net_point_reset,
|
26
|
+
:net_point=,
|
27
|
+
to: :y_nelson_agent )
|
28
|
+
|
29
|
+
# Simulation aspect.
|
30
|
+
delegate( :simulation_point, :ssc_point, :cc_point, :imc_point,
|
31
|
+
:simulation_selection, :ssc_selection,
|
32
|
+
:cc_selection, :imc_selection,
|
33
|
+
:simulations,
|
34
|
+
:clamp_collections,
|
35
|
+
:initial_marking_collections,
|
36
|
+
:simulation_settings_collections,
|
37
|
+
:clamp_collection_names, :ncc,
|
38
|
+
:initial_marking_collection_names, :nimc,
|
39
|
+
:simulation_settings_collection_names, :nssc,
|
40
|
+
:set_clamp_collection, :set_cc,
|
41
|
+
:set_initial_marking_collection, :set_imc,
|
42
|
+
:set_simulation_settings_collection, :set_ssc,
|
43
|
+
:new_simulation,
|
44
|
+
:clamp_cc, :initial_marking_cc, :simulation_settings_cc,
|
45
|
+
:simulation_point_position,
|
46
|
+
:simulation,
|
47
|
+
:clamp_collection, :cc,
|
48
|
+
:initial_marking_collection, :imc,
|
49
|
+
:simulation_settings_collection, :ssc,
|
50
|
+
:clamp,
|
51
|
+
:initial_marking,
|
52
|
+
:set_step, :set_step_size,
|
53
|
+
:set_time, :set_target_time,
|
54
|
+
:set_sampling,
|
55
|
+
:set_simulation_method,
|
56
|
+
:new_timed_simulation,
|
57
|
+
:run!,
|
58
|
+
:print_recording,
|
59
|
+
:plot,
|
60
|
+
:plot_selected,
|
61
|
+
:plot_state,
|
62
|
+
:plot_flux,
|
63
|
+
to: :y_nelson_agent )
|
64
|
+
|
65
|
+
|
66
|
+
# Zz aspect.
|
67
|
+
delegate( :Dimension,
|
68
|
+
:ϝ,
|
69
|
+
:default_dimension,
|
70
|
+
:primary_point, :p1,
|
71
|
+
:secondary_point, :p2,
|
72
|
+
:primary_dimension_point, :d1,
|
73
|
+
:secondary_dimension_point, :d2,
|
74
|
+
:visualize,
|
75
|
+
:graphviz,
|
76
|
+
to: :y_nelson_agent )
|
77
|
+
end # module YNelson
|
data/lib/y_nelson/net.rb
CHANGED
@@ -1,12 +1,4 @@
|
|
1
1
|
# Represents Petri nets inside the Nelson net.
|
2
2
|
#
|
3
3
|
class YNelson::Net < YPetri::Net
|
4
|
-
|
5
|
-
private
|
6
|
-
|
7
|
-
# Place, Transition, Net class
|
8
|
-
#
|
9
|
-
def Place; ::YNelson::Place end
|
10
|
-
def Transition; ::YNelson::Transition end
|
11
|
-
def Net; ::YNelson::Net end
|
12
4
|
end # class YNelson::Net
|
data/lib/y_nelson/place.rb
CHANGED
@@ -3,26 +3,29 @@
|
|
3
3
|
#
|
4
4
|
class YNelson::Place < YPetri::Place
|
5
5
|
include YNelson::Yzz
|
6
|
+
|
7
|
+
# include Mongoid::Document
|
8
|
+
# store_in collection: "places", database: "y_nelson"
|
9
|
+
|
6
10
|
alias call along # .( :dim ) instead of .along( :dim )
|
7
11
|
|
8
12
|
class << self
|
13
|
+
private :new
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize( *args )
|
17
|
+
super
|
18
|
+
|
9
19
|
end
|
10
20
|
|
11
21
|
# Subclass of YTed::Zz::Side.
|
12
22
|
#
|
13
23
|
class Side < Side
|
14
|
-
# "Budding": creation of new cells from the cell sides
|
24
|
+
# "Budding": creation of new cells from the cell sides.
|
25
|
+
#
|
15
26
|
def bud( value: L!, f: nil )
|
16
27
|
# FIXME
|
17
28
|
end
|
18
29
|
alias :>> :bud
|
19
30
|
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
# Place, Transition, Net class
|
24
|
-
#
|
25
|
-
def Place; ::YNelson::Place end
|
26
|
-
def Transition; ::YNelson::Transition end
|
27
|
-
def Net; ::YNelson::Net end
|
28
31
|
end
|
data/lib/y_nelson/transition.rb
CHANGED
data/lib/y_nelson/version.rb
CHANGED
data/lib/y_nelson/yzz.rb
CHANGED
data/lib/y_nelson.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# encoding: utf-8
|
2
|
+
|
2
3
|
require 'yzz'
|
3
4
|
require 'y_petri'
|
4
5
|
require 'y_support/kde'
|
@@ -13,134 +14,73 @@ require_relative 'y_nelson/transition'
|
|
13
14
|
require_relative 'y_nelson/net'
|
14
15
|
require_relative 'y_nelson/zz_point'
|
15
16
|
require_relative 'y_nelson/dimension_point'
|
16
|
-
require_relative 'y_nelson/
|
17
|
+
require_relative 'y_nelson/agent'
|
18
|
+
require_relative 'y_nelson/dsl'
|
17
19
|
|
18
20
|
# YNelson is an implementation of a cross between Ted Nelson's Zz structure, and
|
19
|
-
#
|
20
|
-
# qualities of FPNs with those of relational databases, I refer to as Nelson
|
21
|
-
# throughout this text.
|
21
|
+
# the functional Petri net (FPN). The resulting data structure, which combines
|
22
|
+
# the qualities of FPNs with those of relational databases, I refer to as Nelson
|
23
|
+
# net throughout this text.
|
22
24
|
#
|
23
|
-
#
|
24
|
-
# his explanations of Zz structures, Ted Nelson makes
|
25
|
-
# metaphors: cells, ranks, rows,
|
26
|
-
#
|
25
|
+
# A Nelson net, from a certain point of view, is as a genralization of a
|
26
|
+
# spreadsheet software. In his explanations of Zz structures, Ted Nelson makes
|
27
|
+
# wide use of metaphors well known from spreadsheets: cells, ranks, rows,
|
28
|
+
# columns, cursors, selections... Nelson net, as implemented here, adds
|
29
|
+
# "formulas" to the mix: Spreadsheet "formulas" are simply represented by FPN
|
30
|
+
# transitions.
|
27
31
|
#
|
28
|
-
# Nelson net disposes of the arbitrary constraints on FPNs
|
29
|
-
# orthogonal structure of "cells" seen in
|
30
|
-
# implementations:
|
32
|
+
# Nelson net disposes of the arbitrary constraints on FPNs, and also extends the
|
33
|
+
# plain orthogonal structure of spreadsheet "cells", as can be seen in the
|
34
|
+
# existing spreadsheet implementations:
|
31
35
|
#
|
32
36
|
# 1. Both places and transitions of the FPN take part in zz structure.
|
33
37
|
# 2. Formula-based transitions are upgraded to standalone FPN transitions.
|
34
38
|
#
|
35
|
-
# The implications of the zz structure
|
36
|
-
# structures
|
37
|
-
# growing body of literature on zz structure applications,
|
38
|
-
# bioinformatics.
|
39
|
+
# The implications of the differences of a zz structure from ordinary
|
40
|
+
# hyperorthogonal structures have been, to a degree, explained by Ted Nelson
|
41
|
+
# himself. There is a growing body of literature on zz structure applications,
|
42
|
+
# including the applications in bioinformatics.
|
39
43
|
#
|
40
44
|
# As for functional Petri nets, their power in computing is well recognized (eg.
|
41
45
|
# Funnel, Odersky 2000). FPNs are sometimes just called functional nets, because
|
42
46
|
# Petri originally described his nets as timeless and functionless. However, in
|
43
47
|
# special-purpose applications, such as biochemical applications, to which I
|
44
48
|
# incline, it is appropriate to honor Petri, who designed his nets specifically
|
45
|
-
# with chemical modeling in mind
|
46
|
-
#
|
49
|
+
# with chemical modeling in mind. In biochemistry, it is common to call
|
50
|
+
# functional nets Petri nets (Miyano, 200?).
|
47
51
|
#
|
48
52
|
module YNelson
|
49
|
-
# Singleton class of YNelson is partial descendant of YPetri::
|
50
|
-
#
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
#
|
53
|
+
# Singleton class of YNelson is a partial descendant of YPetri::World. It
|
54
|
+
# aspires to be a database that represents the world. More specifically, it
|
55
|
+
# mixes in most of the YPetri::World methods, and provides interface, which
|
56
|
+
# is a superset of YPetri::World interface. The difference is, that while
|
57
|
+
# YPetri::World can have multiple instances – workspaces in which we possibly
|
58
|
+
# represent the world in different ways – YNelson::World is a singleton.
|
55
59
|
#
|
56
60
|
class << self
|
57
|
-
|
58
|
-
|
59
|
-
|
61
|
+
attr_reader :dimensions
|
62
|
+
|
63
|
+
# Including instance methods of YPetri::World:
|
64
|
+
include YPetri::World::PetriNetRelated
|
65
|
+
include YPetri::World::SimulationRelated
|
60
66
|
|
61
|
-
# Allows summoning DSL by 'include YNelson'
|
67
|
+
# Allows summoning YNelson::DSL by 'include YNelson'.
|
62
68
|
#
|
63
69
|
def included receiver
|
64
|
-
|
65
|
-
|
66
|
-
receiver.module_exec {
|
67
|
-
define_method :nelson_manipulator do
|
68
|
-
singleton_class.instance_variable_get :@NelsonManipulator or
|
69
|
-
( puts "defining Manipulator for #{self} singleton class" if YNelson::DEBUG
|
70
|
-
singleton_class.instance_variable_set :@NelsonManipulator, Manipulator.new )
|
71
|
-
end
|
72
|
-
}
|
70
|
+
receiver.extend YNelson::DSL
|
71
|
+
receiver.delegate :y_nelson_agent, to: "self.class"
|
73
72
|
end
|
74
|
-
|
75
|
-
def dimensions; @dimensions end
|
76
73
|
end # class << self
|
77
74
|
|
78
|
-
#
|
79
|
-
|
80
|
-
|
75
|
+
# Parametrize the Place / Transition / Net classes.
|
76
|
+
param_class!( { Place: YNelson::Place,
|
77
|
+
Transition: YNelson::Transition,
|
78
|
+
Net: YNelson::Net },
|
79
|
+
with: { world: self } )
|
81
80
|
|
82
|
-
#
|
83
|
-
|
84
|
-
|
85
|
-
delegate( :workspace, to: :nelson_manipulator )
|
81
|
+
# Make them their own namespaces.
|
82
|
+
[ Place(), Transition(), Net() ].each &:namespace!
|
86
83
|
|
87
|
-
#
|
88
|
-
|
89
|
-
:place, :transition, :pl, :tr,
|
90
|
-
:places, :transitions, :nets,
|
91
|
-
:pp, :tt, :nn,
|
92
|
-
:net_point,
|
93
|
-
:net_selection,
|
94
|
-
:net, :ne,
|
95
|
-
:net_point_reset,
|
96
|
-
:net_point_set,
|
97
|
-
to: :nelson_manipulator )
|
98
|
-
|
99
|
-
# Simulation aspect.
|
100
|
-
delegate( :simulation_point, :ssc_point, :cc_point, :imc_point,
|
101
|
-
:simulation_selection, :ssc_selection,
|
102
|
-
:cc_selection, :imc_selection,
|
103
|
-
:simulations,
|
104
|
-
:clamp_collections,
|
105
|
-
:initial_marking_collections,
|
106
|
-
:simulation_settings_collections,
|
107
|
-
:clamp_collection_names, :cc_names,
|
108
|
-
:initial_marking_collection_names, :imc_names,
|
109
|
-
:simulation_settings_collection_names, :ssc_names,
|
110
|
-
:set_clamp_collection, :set_cc,
|
111
|
-
:set_initial_marking_collection, :set_imc,
|
112
|
-
:set_simulation_settings_collection, :set_ssc,
|
113
|
-
:new_timed_simulation,
|
114
|
-
:clamp_cc, :initial_marking_cc, :simulation_settings_cc,
|
115
|
-
:simulation_point_position,
|
116
|
-
:simulation,
|
117
|
-
:clamp_collection, :cc,
|
118
|
-
:initial_marking_collection, :imc,
|
119
|
-
:simulation_settings_collection, :ssc,
|
120
|
-
:clamp,
|
121
|
-
:initial_marking,
|
122
|
-
:set_step, :set_step_size,
|
123
|
-
:set_time, :set_target_time,
|
124
|
-
:set_sampling,
|
125
|
-
:set_simulation_method,
|
126
|
-
:new_timed_simulation,
|
127
|
-
:run!,
|
128
|
-
:print_recording,
|
129
|
-
:plot,
|
130
|
-
:plot_selected,
|
131
|
-
:plot_state,
|
132
|
-
:plot_flux,
|
133
|
-
to: :nelson_manipulator )
|
134
|
-
|
135
|
-
# Zz aspect.
|
136
|
-
delegate( :Dimension,
|
137
|
-
:ϝ,
|
138
|
-
:default_dimension,
|
139
|
-
:primary_point, :p1,
|
140
|
-
:secondary_point, :p2,
|
141
|
-
:primary_dimension_point, :d1,
|
142
|
-
:secondary_dimension_point, :d2,
|
143
|
-
:visualize,
|
144
|
-
:graphviz,
|
145
|
-
to: :nelson_manipulator )
|
84
|
+
# Atypical initialize call.
|
85
|
+
initialize
|
146
86
|
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'y_support/all'
|
2
|
+
|
3
|
+
# Places are basically glorified variables, with current contents (marking), and
|
4
|
+
# default contents (default_marking).
|
5
|
+
#
|
6
|
+
class Place
|
7
|
+
attr_reader :name, :default_marking
|
8
|
+
attr_accessor :marking
|
9
|
+
def initialize name, default_marking=0
|
10
|
+
@name, @default_marking = name, default_marking
|
11
|
+
end
|
12
|
+
def reset!; @marking = default_marking end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Transitions specify how marking changes when the transition "fires" (activates).
|
16
|
+
# "Arcs" attribute is a hash of { place => change } pairs.
|
17
|
+
#
|
18
|
+
class Transition
|
19
|
+
attr_reader :name, :arcs
|
20
|
+
def initialize( name, arcs: {} )
|
21
|
+
@name, @arcs = name, arcs
|
22
|
+
end
|
23
|
+
def fire!
|
24
|
+
arcs.each { |place, change| place.marking = place.marking + change }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
A, B, C = Place.new( "A" ), Place.new( "B" ), Place.new( "C" )
|
29
|
+
|
30
|
+
# Marking of A is incremented by 1
|
31
|
+
AddA = Transition.new( "AddA", arcs: { A => 1 } )
|
32
|
+
|
33
|
+
# 1 piece of A dissociates into 1 piece of B and 1 piece of C
|
34
|
+
DissocA = Transition.new( "DissocA", arcs: { A => -1, B => +1, C => +1 } )
|
35
|
+
|
36
|
+
[ A, B, C ].each &:reset!
|
37
|
+
[ A, B, C ].map &:marking #=> [0, 0, 0]
|
38
|
+
AddA.fire!
|
39
|
+
[ A, B, C ].map &:marking #=> [1, 0, 0]
|
40
|
+
DissocA.fire!
|
41
|
+
[ A, B, C ].map &:marking #=> [0, 1, 1]
|
42
|
+
|
43
|
+
require 'yaml'
|
44
|
+
|
45
|
+
class Place
|
46
|
+
def to_yaml
|
47
|
+
YAML.dump( { name: name, default_marking: default_marking } )
|
48
|
+
end
|
49
|
+
|
50
|
+
def to_ruby
|
51
|
+
"Place( name: #{name}, default_marking: #{default_marking} )\n"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
puts A.to_yaml
|
56
|
+
puts B.to_yaml
|
57
|
+
puts C.to_yaml
|
58
|
+
puts A.to_ruby
|
59
|
+
puts B.to_ruby
|
60
|
+
puts C.to_ruby
|
61
|
+
|
62
|
+
class Transition
|
63
|
+
def to_yaml
|
64
|
+
YAML.dump( { name: name, arcs: arcs.modify { |k, v| [k.name, v] } } )
|
65
|
+
end
|
66
|
+
|
67
|
+
def to_ruby
|
68
|
+
"Transition( name: #{name}, default_marking: #{arcs.modify { |k, v| [k.name.to_sym, v] }} )\n"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
puts AddA.to_yaml
|
73
|
+
puts DissocA.to_yaml
|
74
|
+
puts AddA.to_ruby
|
75
|
+
puts DissocA.to_ruby
|
76
|
+
|
77
|
+
# Now save that to a file
|
78
|
+
# and use
|
79
|
+
|
80
|
+
Place.from_yaml YAML.load( yaml_place_string )
|
81
|
+
Transition.from_yaml YAML.load( yaml_transition_string )
|
82
|
+
# or
|
83
|
+
YNelson::Manipulator.load( yaml: YAML.load( system_definition ) )
|
84
|
+
|
85
|
+
# then decorate #to_yaml and #to_ruby methods with Zz-structure-specific parts.
|
86
|
+
|
87
|
+
class Zz
|
88
|
+
def to_yaml
|
89
|
+
super + "\n" +
|
90
|
+
YAML.dump( { along: dump_connectivity() } )
|
91
|
+
end
|
92
|
+
|
93
|
+
def to_ruby
|
94
|
+
super + "\n" +
|
95
|
+
"#{name}.along( #{dimension} ).posward #{along( dimension ).posward.name}\n" +
|
96
|
+
"#{name}.along( #{dimension} ).negward #{along( dimension ).negward.name}"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# etc.
|
data/test/y_nelson_test.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
|
-
|
2
|
-
# -*- coding: utf-8 -*-
|
1
|
+
# encoding: utf-8
|
3
2
|
|
4
|
-
require 'minitest/spec'
|
5
3
|
require 'minitest/autorun'
|
6
4
|
# tested component itself
|
7
5
|
require './../lib/y_nelson'
|
@@ -9,11 +7,10 @@ require './../lib/y_nelson'
|
|
9
7
|
# **************************************************************************
|
10
8
|
# Nelson net test
|
11
9
|
# **************************************************************************
|
12
|
-
#
|
10
|
+
#
|
13
11
|
describe YNelson do
|
14
12
|
before do
|
15
|
-
|
16
|
-
@m = YNelson::Manipulator.new
|
13
|
+
@m = YNelson::Agent.new
|
17
14
|
@p = @m.Place default_marking: 3.2,
|
18
15
|
marking: 1.1,
|
19
16
|
quantum: 0.1
|
@@ -29,9 +26,11 @@ describe YNelson do
|
|
29
26
|
it "should work as expected" do
|
30
27
|
assert_equal [], @p.neighbors
|
31
28
|
assert_equal [], @p.connectivity # 'connectivity' now exclusively a zz keyword
|
32
|
-
t = @m.Transition codomain: @p,
|
29
|
+
t = @m.Transition codomain: @p,
|
30
|
+
action: -> { 0.1 },
|
31
|
+
assignment: true
|
33
32
|
assert_equal [ @p ], t.neighbors
|
34
|
-
dim = @m.Dimension( :codomain, 0 )
|
33
|
+
dim = @m.Dimension( t, :codomain, 0 )
|
35
34
|
assert_equal @p, t.along( dim ).posward.neighbor
|
36
35
|
# And then, it would be the job of dimension reduction to determine if
|
37
36
|
# some dimensions should be visualized or otherwise used together.
|
@@ -77,7 +76,7 @@ end
|
|
77
76
|
|
78
77
|
describe "visualization" do
|
79
78
|
before do
|
80
|
-
@m = YNelson::
|
79
|
+
@m = YNelson::Agent.new
|
81
80
|
@m.Place name: :A, m!: 3.2
|
82
81
|
@m.Place name: :B, m!: 5
|
83
82
|
@m.Transition name: :T1, s: { A: -1, B: 1 }, rate: 1
|
@@ -86,8 +85,11 @@ describe "visualization" do
|
|
86
85
|
end
|
87
86
|
|
88
87
|
it "should work" do
|
89
|
-
dim1 = YNelson::Dimension( :domain, 0 )
|
90
|
-
dim2 = YNelson::Dimension( :
|
88
|
+
dim1 = YNelson::Dimension( @m.transition( :T1 ), :domain, 0 )
|
89
|
+
dim2 = YNelson::Dimension( @m.transition( :T2 ), :domain, 0 )
|
90
|
+
@m.visualize dim1, dim2
|
91
|
+
dim1 = YNelson::Dimension( @m.transition( :T1 ), :codomain, 0 )
|
92
|
+
dim2 = YNelson::Dimension( @m.transition( :T2 ), :codomain, 0 )
|
91
93
|
@m.visualize dim1, dim2
|
92
94
|
end
|
93
95
|
end
|
data/test/zz.png
CHANGED
Binary file
|
data/zz.png
ADDED
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: y_nelson
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- boris
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yzz
|
@@ -78,10 +78,12 @@ files:
|
|
78
78
|
- LICENSE.txt
|
79
79
|
- README.md
|
80
80
|
- Rakefile
|
81
|
+
- config/mongoid.yml
|
81
82
|
- lib/y_nelson.rb
|
83
|
+
- lib/y_nelson/agent.rb
|
82
84
|
- lib/y_nelson/dimension.rb
|
83
85
|
- lib/y_nelson/dimension_point.rb
|
84
|
-
- lib/y_nelson/
|
86
|
+
- lib/y_nelson/dsl.rb
|
85
87
|
- lib/y_nelson/net.rb
|
86
88
|
- lib/y_nelson/place.rb
|
87
89
|
- lib/y_nelson/transition.rb
|
@@ -89,9 +91,11 @@ files:
|
|
89
91
|
- lib/y_nelson/yzz.rb
|
90
92
|
- lib/y_nelson/zz.png
|
91
93
|
- lib/y_nelson/zz_point.rb
|
94
|
+
- test/mongoid_example.rb
|
92
95
|
- test/y_nelson_test.rb
|
93
96
|
- test/zz.png
|
94
97
|
- y_nelson.gemspec
|
98
|
+
- zz.png
|
95
99
|
homepage: ''
|
96
100
|
licenses:
|
97
101
|
- MIT
|
@@ -117,5 +121,6 @@ signing_key:
|
|
117
121
|
specification_version: 4
|
118
122
|
summary: A fusion of functional Petri net with a zz structure.
|
119
123
|
test_files:
|
124
|
+
- test/mongoid_example.rb
|
120
125
|
- test/y_nelson_test.rb
|
121
126
|
- test/zz.png
|