petri_net 0.7.9.1 → 0.8.0

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: 424a324ddce6aa016935fbf72566df141a908ac0
4
- data.tar.gz: f642d0f9451834d2d4ceb602c56ee2ade52e649c
3
+ metadata.gz: 6280711333c42af2d42f9f72dc8d7e9addf491d0
4
+ data.tar.gz: 0f5c88804ad2453ac2ac5f58ed48b402e6a46332
5
5
  SHA512:
6
- metadata.gz: 203e591a97198ae311563099b29305b0499f16024e57984a9152dff16fa929739e049a9ef00e6c0f0c58f61f67df3ff440e1e57960fc7d1026774fed0c8583df
7
- data.tar.gz: 21a108f4151259a0e9bdefaa693e93b777524b13971b6fd8d61142c81f8c1e5956889458b2ff46c7196651e9f72fc2fbadd84c51690410bc833516d8f4ba08c9
6
+ metadata.gz: d11cb20273590228cc3324d6e5483eb6f6d79fb2cf8e3217200fb86e4464d511126eb2c9a2843c11ec8f69a54ff061d63f3c4037fd9b7c637dabe749eda05d4c
7
+ data.tar.gz: 4bf91f1daf2975b146139be896386cc1704d393f33d3d4936afc4e7e607b97ad214d09c674dd6c189c3b51b5a25a323308a78a8201bcc7e3ba5ad249c530f0b1
@@ -15,7 +15,8 @@ class PetriNet::Graph::Edge < PetriNet::Base
15
15
  attr_reader :transition
16
16
 
17
17
  # Creates an edge for PetriNet::Graph
18
- def initialize(options = {}, &block)
18
+ def initialize(graph, options = {}, &block)
19
+ @graph = graph
19
20
  @id = next_object_id
20
21
  @name = (options[:name] or "Edge#{@id}")
21
22
  @description = (options[:description] or "Edge #{@id}")
@@ -4,7 +4,12 @@ class PetriNet::InfiniteReachabilityGraphError < RuntimeError
4
4
  end
5
5
 
6
6
  class PetriNet::Graph < PetriNet::Base
7
+
8
+ # The PetriNet this graph belongs to
9
+ attr_reader :net
10
+
7
11
  def initialize(net, options = Hash.new)
12
+ @net = net
8
13
  @objects = Array.new
9
14
  @nodes = Hash.new
10
15
  @edges = Hash.new
@@ -55,7 +60,15 @@ class PetriNet::Graph < PetriNet::Base
55
60
  alias_method :add_object, :<<
56
61
 
57
62
  def get_node(id)
58
- return @objects[id]
63
+ @objects[id]
64
+ end
65
+
66
+ def get_nodes
67
+ res = Array.new
68
+ @nodes.each_value do |n|
69
+ res << @objects[n]
70
+ end
71
+ res
59
72
  end
60
73
 
61
74
  def to_gv(output = 'png', filename = '')
@@ -20,7 +20,8 @@ class PetriNet::Graph::Node < PetriNet::Base
20
20
  # True if this is the start-marking
21
21
  attr_reader :start
22
22
 
23
- def initialize(options = {}, &block)
23
+ def initialize(graph, options = {}, &block)
24
+ @graph = graph
24
25
  @id = next_object_id
25
26
  @name = (options[:name] or "Node#{@id}")
26
27
  @description = (options[:description] or "Node #{@id}")
@@ -72,6 +73,19 @@ class PetriNet::Graph::Node < PetriNet::Base
72
73
  ret
73
74
  end
74
75
 
76
+ def include_place(place)
77
+ places = @graph.net.get_place_list
78
+ included_places = Array.new
79
+ i = 0
80
+ @markings.each do |m|
81
+ if m > 0
82
+ included_places << places[i]
83
+ end
84
+ i += 1
85
+ end
86
+ included_places.include? place
87
+ end
88
+
75
89
  def validate
76
90
  true
77
91
  end
data/lib/petri_net/net.rb CHANGED
@@ -247,7 +247,7 @@ Arcs
247
247
  def generate_coverability_graph()
248
248
  startmarkings = get_markings
249
249
  @graph = PetriNet::CoverabilityGraph.new(self)
250
- @graph.add_node current_node = PetriNet::CoverabilityGraph::Node.new(markings: get_markings, start: true)
250
+ @graph.add_node current_node = PetriNet::CoverabilityGraph::Node.new(@graph, markings: get_markings, start: true)
251
251
 
252
252
  coverability_helper startmarkings, current_node
253
253
 
@@ -258,7 +258,7 @@ Arcs
258
258
  def generate_reachability_graph()
259
259
  startmarkings = get_markings
260
260
  @graph = PetriNet::ReachabilityGraph.new(self)
261
- @graph.add_node current_node = PetriNet::ReachabilityGraph::Node.new(markings: get_markings, start: true)
261
+ @graph.add_node current_node = PetriNet::ReachabilityGraph::Node.new(@graph, markings: get_markings, start: true)
262
262
 
263
263
  reachability_helper startmarkings, current_node
264
264
 
@@ -309,6 +309,11 @@ Arcs
309
309
  changed_state
310
310
  end
311
311
 
312
+ def get_place_list
313
+ @places.map{|key,pid| @objects[pid]}
314
+ end
315
+
316
+
312
317
  def objects_size
313
318
  @objects.count{|o| !o.nil?}
314
319
  end
@@ -357,19 +362,19 @@ Arcs
357
362
  raise PetriNet::ReachabilityGraph::InfinityGraphError if @objects[tid].inputs.empty? && !@objects[tid].outputs.empty?
358
363
  next if @objects[tid].inputs.empty?
359
364
  if @objects[tid].fire
360
- current_node = PetriNet::ReachabilityGraph::Node.new(markings: get_markings)
365
+ current_node = PetriNet::ReachabilityGraph::Node.new(@graph, markings: get_markings)
361
366
  begin
362
367
  node_id = @graph.add_node current_node
363
368
  rescue
364
369
  @graph.add_node! current_node
365
- @graph.add_edge PetriNet::ReachabilityGraph::Edge.new(source: source, destination: current_node)
366
- infinity_node = PetriNet::ReachabilityGraph::InfinityNode.new
370
+ @graph.add_edge PetriNet::ReachabilityGraph::Edge.new(@graph, source: source, destination: current_node)
371
+ infinity_node = PetriNet::ReachabilityGraph::InfinityNode.new(@graph)
367
372
  @graph.add_node infinity_node
368
- @graph.add_edge PetriNet::ReachabilityGraph::Edge.new(source: current_node, destination: infinity_node)
373
+ @graph.add_edge PetriNet::ReachabilityGraph::Edge.new(@graph, source: current_node, destination: infinity_node)
369
374
  next
370
375
  end
371
- @graph.add_edge PetriNet::ReachabilityGraph::Edge.new(source: source, destination: current_node)
372
- reachability_helper get_markings, current_node unless node_id
376
+ @graph.add_edge PetriNet::ReachabilityGraph::Edge.new(@graph, source: source, destination: current_node)# if node_id
377
+ reachability_helper get_markings, current_node if node_id
373
378
  end
374
379
  set_markings markings
375
380
  end
@@ -378,9 +383,9 @@ Arcs
378
383
  def coverability_helper(markings, source, added_omega = false)
379
384
  @transitions.each_value do |tid|
380
385
  if @objects[tid].fire
381
- current_node = PetriNet::ReachabilityGraph::Node.new(markings: get_markings)
386
+ current_node = PetriNet::ReachabilityGraph::Node.new(@graph, markings: get_markings)
382
387
  current_node_id = @graph.add_node current_node
383
- @graph.add_edge PetriNet::ReachabilityGraph::Edge.new(source: source, destination: current_node, probability: @objects[tid].probability, transition: @objects[tid].name) if (!(current_node_id < 0))
388
+ @graph.add_edge PetriNet::ReachabilityGraph::Edge.new(@graph, source: source, destination: current_node, probability: @objects[tid].probability, transition: @objects[tid].name) if (!(current_node_id < 0))
384
389
  omega = false
385
390
  if current_node_id != -Float::INFINITY && current_node_id < 0 && @graph.get_node(current_node_id * -1) != current_node
386
391
  omega = true
@@ -389,7 +394,7 @@ Arcs
389
394
  if added_omega_old == added_omega
390
395
  break
391
396
  end
392
- @graph.add_edge PetriNet::ReachabilityGraph::Edge.new(source: source, destination: @graph.get_node(current_node_id * -1), probability: @objects[tid].probability, transition: @objects[tid].name)
397
+ @graph.add_edge PetriNet::ReachabilityGraph::Edge.new(@graph, source: source, destination: @graph.get_node(current_node_id * -1), probability: @objects[tid].probability, transition: @objects[tid].name)
393
398
  end
394
399
  coverability_helper get_markings, @graph.get_node(current_node_id.abs), added_omega if ((!(current_node_id < 0) || !omega) && current_node_id != -Float::INFINITY )
395
400
  end
@@ -1,7 +1,7 @@
1
1
  class PetriNet::ReachabilityGraph::Edge < PetriNet::Graph::Edge
2
2
  # Creates an edge for PetriNet::ReachabilityGraph
3
- def initialize(options = {}, &block)
4
- super(options)
3
+ def initialize(graph, options = {}, &block)
4
+ super(graph, options)
5
5
  yield self unless block.nil?
6
6
  end
7
7
 
@@ -1,13 +1,13 @@
1
1
  class PetriNet::ReachabilityGraph::Node < PetriNet::Graph::Node
2
- def initialize(options = {}, &block)
3
- super(options)
2
+ def initialize(graph, options = {}, &block)
3
+ super(graph, options)
4
4
  yield self unless block.nil?
5
5
  end
6
6
 
7
7
  end
8
8
 
9
9
  class PetriNet::ReachabilityGraph::InfinityNode < PetriNet::ReachabilityGraph::Node
10
- def initialize()
11
- super(markings: [Float::INFINITY])
10
+ def initialize(graph)
11
+ super(graph, markings: [Float::INFINITY])
12
12
  end
13
13
  end
@@ -1,6 +1,6 @@
1
1
  module PetriNet
2
2
  # Current Version
3
- VERSION = "0.7.9.1"
3
+ VERSION = "0.8.0"
4
4
  # True if this is a debug-version and should not be used in productive systems
5
5
  DEBUG = false
6
6
  end
@@ -6,7 +6,8 @@ require "#{File.dirname(__FILE__)}/../../lib/petri_net"
6
6
  class TestReachabilityGraphNode < Test::Unit::TestCase
7
7
  def setup
8
8
  @net = PetriNet::Net.new(:name => 'Water', :description => 'Creation of water from base elements.')
9
- @node = PetriNet::ReachabilityGraph::Node.new(markings: [1,3,5,4,0])
9
+ @graph = PetriNet::ReachabilityGraph.new(@net)
10
+ @node = PetriNet::ReachabilityGraph::Node.new(@graph, markings: [1,3,5,4,0])
10
11
  end
11
12
 
12
13
  def teardown
@@ -14,7 +15,7 @@ class TestReachabilityGraphNode < Test::Unit::TestCase
14
15
  end
15
16
 
16
17
  def test_create_node
17
- node = PetriNet::ReachabilityGraph::Node.new(markings: [1,3,5,4,0])
18
+ node = PetriNet::ReachabilityGraph::Node.new(@graph, markings: [1,3,5,4,0])
18
19
  assert_not_nil node
19
20
  assert_equal "Node2", node.name
20
21
  assert_equal [], node.inputs
@@ -25,7 +26,7 @@ class TestReachabilityGraphNode < Test::Unit::TestCase
25
26
  end
26
27
 
27
28
  def test_omega_marking
28
- node = PetriNet::ReachabilityGraph::Node.new(markings: [1,3,5,Float::INFINITY,0])
29
+ node = PetriNet::ReachabilityGraph::Node.new(@graph, markings: [1,3,5,Float::INFINITY,0])
29
30
  assert node.omega_marked, "should be omega_marked as there is an omega marking"
30
31
  end
31
32
 
@@ -37,12 +38,12 @@ class TestReachabilityGraphNode < Test::Unit::TestCase
37
38
  end
38
39
 
39
40
  def test_compare
40
- node1 = PetriNet::ReachabilityGraph::Node.new(markings: [0,1,0,0,1])
41
- node2 = PetriNet::ReachabilityGraph::Node.new(markings: [0,1,0,0,1])
42
- node3 = PetriNet::ReachabilityGraph::Node.new(markings: [0,0,1,0,1])
43
- node4 = PetriNet::ReachabilityGraph::Node.new(markings: [0,2,0,0,1])
44
- node5 = PetriNet::ReachabilityGraph::Node.new(markings: [1,1,0,0,1])
45
- node6 = PetriNet::ReachabilityGraph::Node.new(markings: [1,1,0,0,0])
41
+ node1 = PetriNet::ReachabilityGraph::Node.new(@graph, markings: [0,1,0,0,1])
42
+ node2 = PetriNet::ReachabilityGraph::Node.new(@graph, markings: [0,1,0,0,1])
43
+ node3 = PetriNet::ReachabilityGraph::Node.new(@graph, markings: [0,0,1,0,1])
44
+ node4 = PetriNet::ReachabilityGraph::Node.new(@graph, markings: [0,2,0,0,1])
45
+ node5 = PetriNet::ReachabilityGraph::Node.new(@graph, markings: [1,1,0,0,1])
46
+ node6 = PetriNet::ReachabilityGraph::Node.new(@graph, markings: [1,1,0,0,0])
46
47
 
47
48
  assert node1 == node1
48
49
  assert node2 == node2
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: petri_net
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.9.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - cclausen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-10 00:00:00.000000000 Z
11
+ date: 2014-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-graphviz