class Pione::PNML::Net

‘Net` represents a net in PNML. PIONE handles PT-nets only, so this is consisted by places, transitions, and arcs.

Public Instance Methods

find_all_arcs_by_source_id(source_id) { |arc| ... } click to toggle source

Find all arcs by the source ID.

@param source_id [String]

source ID

@return [Array<Arc>]

result arcs
# File lib/pione/pnml/pnml-model.rb, line 72
def find_all_arcs_by_source_id(source_id)
  _arcs = arcs.select {|arc| arc.source_id == source_id}

  if block_given?
    _arcs.each {|arc| yield arc}
  else
    return _arcs
  end
end
find_all_arcs_by_target_id(target_id) { |arc| ... } click to toggle source

Find all arcs by the target ID.

@param target_id [String]

target ID

@return [Array<Arc>]

result arcs
# File lib/pione/pnml/pnml-model.rb, line 88
def find_all_arcs_by_target_id(target_id)
  _arcs = arcs.select {|arc| arc.target_id == target_id}

  if block_given?
    _arcs.each {|arc| yield arc}
  else
    return _arcs
  end
end
find_all_places_by_name(name) { |place| ... } click to toggle source

Find places by the name.

@param name [String]

place name

@return [Array<Place>]

places
# File lib/pione/pnml/pnml-model.rb, line 274
def find_all_places_by_name(name)
  _places = places.select {|place| place.name == name}

  if block_given?
    _places.each {|place| yield place}
  else
    return _places
  end
end
find_all_places_by_source_id(transition_id) { |place| ... } click to toggle source

Find all places by the source transition ID.

@param transition_id [String]

transition ID

@return [Array<Transition>]

result places
# File lib/pione/pnml/pnml-model.rb, line 307
def find_all_places_by_source_id(transition_id)
  _arcs = arcs.select {|arc| arc.source_id == transition_id}
  _places = _arcs.map do |arc|
    places.find {|place| place.id == arc.target_id}
  end.compact.uniq

  if block_given?
    _places.each {|place| yield place}
  else
    return _places
  end
end
find_all_places_by_target_id(transition_id) { |place| ... } click to toggle source

Find all places by the target transition ID.

@param transition_id [String]

transition ID

@return [Array<Transition>]

result places
# File lib/pione/pnml/pnml-model.rb, line 343
def find_all_places_by_target_id(transition_id)
  _arcs = arcs.select {|arc| arc.target_id == transition_id}
  _places = _arcs.map do |arc|
    places.find {|place| place.id == arc.source_id}
  end.compact.uniq

  if block_given?
    _places.each {|place| yield place}
  else
    return _places
  end
end
find_all_transitions_by_name(name) { |transition| ... } click to toggle source

Find all transitions by the name.

@param name [String]

transition's name

@return [Array<Transition>]

transitions
# File lib/pione/pnml/pnml-model.rb, line 159
def find_all_transitions_by_name(name)
  _transitions = transitions.select {|transition| transition.name == name}

  if block_given?
    _transitions.each {|transition| yield transition}
  else
    return _transitions
  end
end
find_all_transitions_by_source_id(place_id) { |transition| ... } click to toggle source

Find all transitions by the source place ID.

@param place_id [String]

place ID

@return [Array<Transition>]

result transitions
# File lib/pione/pnml/pnml-model.rb, line 192
def find_all_transitions_by_source_id(place_id)
  _arcs = arcs.select {|arc| arc.source_id == place_id}
  _transitions = _arcs.map do |arc|
    transitions.find {|transition| transition.id == arc.target_id}
  end.compact.uniq

  if block_given?
    _transitions.each {|transition| yield transition}
  else
    return _transitions
  end
end
find_all_transitions_by_target_id(target_id) { |transition| ... } click to toggle source

Find all transitions by the target place ID.

@param place_id [String]

place ID

@return [Array<Transition>]

result transitions
# File lib/pione/pnml/pnml-model.rb, line 228
def find_all_transitions_by_target_id(target_id)
  _arcs = arcs.select {|arc| arc.target_id == target_id}
  _transitions = _arcs.map do |arc|
    transitions.find {|transition| transition.id == arc.source_id}
  end.compact.uniq

  if block_given?
    _transitions.each {|transition| yield transition}
  else
    return _transitions
  end
end
find_arc(source_id, target_id) click to toggle source

Find the arc that connects from the source ID to the target ID. If no arcs found, return ‘nil`.

@param source_id [String]

source ID

@param target_id [String]

target ID

@return [PNML::Arc]

the arc, or `nil`
# File lib/pione/pnml/pnml-model.rb, line 55
def find_arc(source_id, target_id)
  _arcs = arcs.select {|arc| arc.source_id == source_id and arc.target_id == target_id}

  # the result shouldn't be ambiguous
  if _arcs.size > 1
    raise AmbiguousNetQueryResult.new(__method__, place_id, _transitions)
  end

  return _arcs.first
end
find_place(id) click to toggle source

Find a place by ID.

@param id [String]

the place ID

@return [Place]

place
# File lib/pione/pnml/pnml-model.rb, line 247
def find_place(id)
  places.find {|place| place.id == id}
end
find_place_by_name(name) click to toggle source

Find a place by the name.

@param name [String]

the place name

@return [Place]

a place, or nil
# File lib/pione/pnml/pnml-model.rb, line 257
def find_place_by_name(name)
  _places = find_all_places_by_name(name)

  # the result shouldn't be ambiguous
  if _places.size > 1
    raise AmbiguousNetQueryResult.new(__method__, name, _places)
  end

  return _places.first
end
find_place_by_source_id(transition_id) click to toggle source

Find a place by the source transition ID.

@param transition_id [String]

transition ID

@return [Array<Transition>]

a result place
# File lib/pione/pnml/pnml-model.rb, line 290
def find_place_by_source_id(transition_id)
  _places = find_all_places_by_source_id(transition_id)

  # the result shouldn't be ambiguous
  if _places.size > 1
    raise AmbiguousNetQueryResult.new(__method__, name, _places)
  end

  return _places.first
end
find_place_by_target_id(transition_id) click to toggle source

Find a place by the target transition ID.

@param transition_id [String]

transition ID

@return [Array<Transition>]

result places
# File lib/pione/pnml/pnml-model.rb, line 326
def find_place_by_target_id(transition_id)
  _places = find_all_places_by_target_id(transition_id)

  # the result shouldn't be ambiguous
  if _places.size > 1
    raise AmbiguousNetQueryResult.new(__method__, name, _places)
  end

  return _places.first
end
find_transition(id) click to toggle source

Find a transition by ID.

@param id [String]

transition ID

@return [Transition]

transition
# File lib/pione/pnml/pnml-model.rb, line 132
def find_transition(id)
  transitions.find {|transition| transition.id == id}
end
find_transition_by_name(name) click to toggle source

Find a transition by the name.

@param name [String]

the transition name

@return [Transition]

a transition, or nil
# File lib/pione/pnml/pnml-model.rb, line 142
def find_transition_by_name(name)
  _transitions = find_all_transitions_by_name(name)

  # the result shouldn't be ambiguous
  if _transitions.size > 1
    raise AmbiguousNetQueryResult.new(__method__, place_id, _transitions)
  end

  return _transitions.first
end
find_transition_by_source_id(place_id) click to toggle source

Find a transition by the source place ID.

@param place_id [String]

place ID

@return [Array<Transition>]

result transitions
# File lib/pione/pnml/pnml-model.rb, line 175
def find_transition_by_source_id(place_id)
  _transitions = find_all_transitions_by_source_id(place_id)

  # the result shouldn't be ambiguous
  if _transitions.size > 1
    raise AmbiguousNetQueryResult.new(__method__, place_id, _transitions)
  end

  return _transitions.first
end
find_transition_by_target_id(place_id) click to toggle source

Find a transition by the target place ID.

@param place_id [String]

place ID

@return [Array<Transition>]

result transitions
# File lib/pione/pnml/pnml-model.rb, line 211
def find_transition_by_target_id(place_id)
  _transitions = find_all_transitions_by_target_id(place_id)

  # the result shouldn't be ambiguous
  if _transitions.size > 1
    raise AmbiguousNetQueryResult.new(__method__, place_id, _transitions)
  end

  return _transitions.first
end
generate_id() click to toggle source

Generate a new PNML’s ID.

# File lib/pione/pnml/pnml-model.rb, line 16
def generate_id
  Util::UUID.generate
end
pt_arcs() { |arc| ... } click to toggle source

Return all arcs which have the direction from place to transition.

@return [Array<PNML::Arc>]

arcs
# File lib/pione/pnml/pnml-model.rb, line 116
def pt_arcs
  _arcs = arcs.select {|arc| arc.from_place_to_transition?}

  if block_given?
    _arcs.each {|arc| yield arc}
  else
    return _arcs
  end
end
tp_arcs() { |arc| ... } click to toggle source

Return all arcs which have the direction from transtion to place.

@return [Array<PNML::Arc>]

arcs
# File lib/pione/pnml/pnml-model.rb, line 102
def tp_arcs
  _arcs = arcs.select {|arc| arc.from_transition_to_place?}

  if block_given?
    _arcs.each {|arc| yield arc}
  else
    return _arcs
  end
end
valid?() click to toggle source

Return true if the net is valid. The criterion of validness is that all arcs connect places and transitions.

@return [Boolean]

true if the net is valid
# File lib/pione/pnml/pnml-model.rb, line 25
def valid?
  arcs.each do |arc|
    source_transition = find_transition(arc.source_id)
    source_place = find_place(arc.source_id)
    target_transition = find_transition(arc.target_id)
    target_place = find_place(arc.target_id)

    # arc from transition to place
    cond1 = not(source_transition.nil?) && not(target_place.nil?)

    # arc from place to transition
    cond2 = not(source_place.nil?) && not(target_transition.nil?)

    unless cond1 or cond2
      return false
    end
  end

  return true
end