Module scenariogeneration.xosc.triggers
scenariogeneration https://github.com/pyoscx/scenariogeneration
This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
Copyright (c) 2022 The scenariogeneration Authors.
Expand source code
"""
scenariogeneration
https://github.com/pyoscx/scenariogeneration
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at https://mozilla.org/MPL/2.0/.
Copyright (c) 2022 The scenariogeneration Authors.
"""
import xml.etree.ElementTree as ET
from .utils import (
EntityRef,
convert_bool,
convert_int,
convert_float,
get_bool_string,
_PositionType,
_ValueTriggerType,
_EntityTriggerType,
_TriggerType,
convert_enum,
)
from .enumerations import (
CoordinateSystem,
DirectionalDimension,
ObjectType,
RoutingAlgorithm,
Rule,
ConditionEdge,
TriggeringEntitiesRule,
RelativeDistanceType,
StoryboardElementType,
StoryboardElementState,
VersionBase,
)
from .exceptions import (
OpenSCENARIOVersionError,
ToManyOptionalArguments,
NotAValidElement,
NotEnoughInputArguments,
)
from .position import _PositionFactory
class EmptyTrigger(_TriggerType):
"""EmptyTrigger creates an empty trigger
Parameters
----------
triggeringpoint (str): start or stop
Attributes
----------
Methods
-------
get_element()
Returns the full ElementTree of the class
"""
def __init__(self, triggeringpoint="start"):
"""initalizes the emtpy trigger
Parameters
----------
triggeringpoint (str): start or stop
"""
if triggeringpoint not in ["start", "stop"]:
raise ValueError("not a valid triggering point, valid start or stop")
if triggeringpoint == "start":
self._triggerpoint = "StartTrigger"
else:
self._triggerpoint = "StopTrigger"
def __eq__(self, other):
if isinstance(other, EmptyTrigger):
if self._triggerpoint == other._triggerpoint:
return True
elif isinstance(other, Trigger):
if (
len(other.conditiongroups) == 0
and self._triggerpoint == other._triggerpoint
):
return True
return False
def get_element(self):
"""returns the elementTree of the Trigger"""
return ET.Element(self._triggerpoint)
class _EntityConditionFactory:
@staticmethod
def parse_entity_condition(element):
if element.find("EndOfRoadCondition") is not None:
return EndOfRoadCondition.parse(element)
elif element.find("CollisionCondition") is not None:
return CollisionCondition.parse(element)
elif element.find("OffroadCondition") is not None:
return OffroadCondition.parse(element)
elif element.find("TimeHeadwayCondition") is not None:
return TimeHeadwayCondition.parse(element)
elif element.find("TimeToCollisionCondition") is not None:
return TimeToCollisionCondition.parse(element)
elif element.find("AccelerationCondition") is not None:
return AccelerationCondition.parse(element)
elif element.find("StandStillCondition") is not None:
return StandStillCondition.parse(element)
elif element.find("SpeedCondition") is not None:
return SpeedCondition.parse(element)
elif element.find("RelativeSpeedCondition") is not None:
return RelativeSpeedCondition.parse(element)
elif element.find("TraveledDistanceCondition") is not None:
return TraveledDistanceCondition.parse(element)
elif element.find("ReachPositionCondition") is not None:
return ReachPositionCondition.parse(element)
elif element.find("DistanceCondition") is not None:
return DistanceCondition.parse(element)
elif element.find("RelativeDistanceCondition") is not None:
return RelativeDistanceCondition.parse(element)
else:
raise NotAValidElement(
"element ", element, "is not a valid entity condition"
)
class _ValueConditionFactory:
@staticmethod
def parse_value_condition(element):
if element.find("ParameterCondition") is not None:
return ParameterCondition.parse(element.find("ParameterCondition"))
elif element.find("VariableCondition") is not None:
return VariableCondition.parse(element.find("VariableCondition"))
elif element.find("TimeOfDayCondition") is not None:
return TimeOfDayCondition.parse(element.find("TimeOfDayCondition"))
elif element.find("SimulationTimeCondition") is not None:
return SimulationTimeCondition.parse(
element.find("SimulationTimeCondition")
)
elif element.find("StoryboardElementStateCondition") is not None:
return StoryboardElementStateCondition.parse(
element.find("StoryboardElementStateCondition")
)
elif element.find("UserDefinedValueCondition") is not None:
return UserDefinedValueCondition.parse(
element.find("UserDefinedValueCondition")
)
elif element.find("TrafficSignalCondition") is not None:
return TrafficSignalCondition.parse(element.find("TrafficSignalCondition"))
elif element.find("TrafficSignalControllerCondition") is not None:
return TrafficSignalControllerCondition.parse(
element.find("TrafficSignalControllerCondition")
)
else:
raise NotAValidElement(
"element ", element, "is not a valid entity condition"
)
class _ConditionFactory:
@staticmethod
def parse_condition(element):
if element.find("ByEntityCondition/EntityCondition") is not None:
return EntityTrigger.parse(element)
elif element.find("ByValueCondition") is not None:
return ValueTrigger.parse(element)
else:
raise NotAValidElement("element ", element, "is not a valid condition")
class Trigger(_TriggerType):
"""The Trigger class creates a Trigger that can be used if multiple ConditionGroups are wanted
The Trigger acts like an "OR" logic for all added ConditionGroups
Parameters
----------
triggeringpoint (str): start or stop
Default: start
Attributes
----------
triggeringpoint (str): start or stop
conditiongroups (list of ConditionGroup): a list of all conditiongroups
Methods
-------
get_element()
Returns the full ElementTree of the class
add_conditiongroup(conditiongroup)
Adds a conditiongroup to the trigger
"""
def __init__(self, triggeringpoint="start"):
"""initalize the Trigger
Parameters
----------
triggeringpoint (str): start or stop
"""
if triggeringpoint not in ["start", "stop"]:
raise ValueError("not a valid triggering point, valid start or stop")
if triggeringpoint == "start":
self._triggerpoint = "StartTrigger"
else:
self._triggerpoint = "StopTrigger"
self.conditiongroups = []
def __eq__(self, other):
if isinstance(other, Trigger):
if (
self.conditiongroups == other.conditiongroups
and self._triggerpoint == other._triggerpoint
):
return True
elif isinstance(other, EntityTrigger) or isinstance(other, ValueTrigger):
if (
len(self.conditiongroups) == 1
and len(self.conditiongroups[0].conditions) == 1
):
if (
self._triggerpoint == other._triggerpoint
and self.conditiongroups[0].conditions[0] == other
):
return True
elif isinstance(other, ConditionGroup):
if len(self.conditiongroups) == 1:
if (
self._triggerpoint == other._triggerpoint
and self.conditiongroups[0] == other
):
return True
elif isinstance(other, EmptyTrigger):
if (
len(self.conditiongroups) == 0
and self._triggerpoint == other._triggerpoint
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of ConditionGroup
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
conditiongroup (ConditionGroup): a ConditionGroup object
"""
trigger = Trigger()
trigger._triggerpoint = element.tag
conditiongroups = element.findall("ConditionGroup")
for condgr in conditiongroups:
trigger.add_conditiongroup(ConditionGroup.parse(condgr))
return trigger
def add_conditiongroup(self, conditiongroup):
"""Adds a conditiongroup to the trigger
Parameters
----------
conditiongroup (ConditionGroup): a conditiongroup to add to the trigger
"""
if not isinstance(conditiongroup, ConditionGroup):
raise TypeError("conditiongroup input not of type ConditionGroup")
conditiongroup._set_used_by_parent()
self.conditiongroups.append(conditiongroup)
return self
def get_element(self):
"""returns the elementTree of the Trigger"""
element = ET.Element(self._triggerpoint)
if not self.conditiongroups:
ValueError("No conditiongroups were added to the trigger")
for c in self.conditiongroups:
element.append(c.get_element())
return element
class ConditionGroup(_TriggerType):
"""The ConditionGroup class creates a Trigger that can be used if multiple Conditions are wanted
The ConditionGroups acts like an "AND" logic for all added conditions
Parameters
----------
triggeringpoint (str): start or stop (not needed if used with the Trigger class)
Default: start
Attributes
----------
triggeringpoint (str): start or stop
conditions (list of EntityTriggers and Valuetriggers): a list of all conditions
Methods
-------
get_element()
Returns the full ElementTree of the class
add_condition(condition)
Adds a condition to the ConditionGroup
"""
def __init__(self, triggeringpoint="start"):
"""initalize the ConditionGroup
Parameters
----------
triggeringpoint (str): start or stop
"""
if triggeringpoint not in ["start", "stop"]:
raise ValueError("not a valid triggering point, valid start or stop")
if triggeringpoint == "start":
self._triggerpoint = "StartTrigger"
else:
self._triggerpoint = "StopTrigger"
self.conditions = []
def __eq__(self, other):
if isinstance(other, ConditionGroup):
if (
self.conditions == other.conditions
and self._triggerpoint == other._triggerpoint
):
return True
elif isinstance(other, Trigger):
if len(other.conditiongroups) == 1:
if (
self._triggerpoint == other._triggerpoint
and other.conditiongroups[0] == self
):
return True
elif isinstance(other, EntityTrigger) or isinstance(other, ValueTrigger):
if len(self.conditions) == 1:
if (
self._triggerpoint == other._triggerpoint
and self.conditions[0] == other
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of ConditionGroup
Note: if
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
conditiongroup (ConditionGroup): a ConditionGroup object
"""
condgr = ConditionGroup()
conditions = element.findall("Condition")
for cond in conditions:
condgr.add_condition(_ConditionFactory().parse_condition(cond))
return condgr
def add_condition(self, condition):
"""Adds a condition (EntityTrigger or ValueTrigger) to the ConditionGroup
Parameters
----------
condition (EntityTrigger, or ValueTrigger): a condition to add to the ConditionGroup
"""
if not (
isinstance(condition, EntityTrigger) or isinstance(condition, ValueTrigger)
):
raise TypeError("condition input not of type EntityTrigger or ValueTrigger")
condition._set_used_by_parent()
self.conditions.append(condition)
self._used_by_parent = False
return self
def _set_used_by_parent(self):
"""_set_used_by_parent is used internaly if the condition group is added to a Trigger"""
self._used_by_parent = True
def get_element(self):
"""returns the elementTree of the ConditionGroup"""
if not self.conditions:
raise ValueError("No conditions were added to the ConditionGroup")
condgroup = ET.Element("ConditionGroup")
for c in self.conditions:
condgroup.append(c.get_element())
if self._used_by_parent:
return condgroup
else:
# could create a new Trigger here, but went with this solution for now
element = ET.Element(self._triggerpoint)
element.append(condgroup)
return element
class EntityTrigger(_TriggerType):
"""the EntityTrigger creates an Trigger containing an EntityTrigger
Parameters
----------
name (str): name of the trigger
delay (float): the delay of the trigger
conditionedge (ConditionEdge): on what conditionedge the trigger should act
entitycondotion (*Condition): an entity condition
triggeringentity (str): the entity of the trigger
triggeringrule (TriggeringEntitiesRule): rule of the trigger
Default: 'any'
triggeringpoint (str): start or stop
Attributes
----------
name (str): name of the trigger
delay (float): the delay of the trigger
conditionedge (ConditionEdge): the condition edge
entitycondition (*EntityCondition): the entitycondition
triggerentity (TriggeringEntities): the triggering entity
Methods
-------
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(
self,
name,
delay,
conditionedge,
entitycondition,
triggerentity,
triggeringrule=TriggeringEntitiesRule.any,
triggeringpoint="start",
):
"""initalize the EntityTrigger
Parameters
----------
name (str): name of the trigger
delay (float): the delay of the trigger
conditionedge (ConditionEdge): on what conditionedge the trigger should act
entitycondotion (*EntityCondition): an entity condition
triggeringentity (str): the entity of the trigger
triggeringrule (TriggeringEntitiesRule): rule of the trigger
Default: 'any'
triggeringpoint (str): start or stop
"""
self.name = name
if triggeringpoint not in ["start", "stop"]:
raise ValueError("not a valid triggering point, valid start or stop")
if triggeringpoint == "start":
self._triggerpoint = "StartTrigger"
else:
self._triggerpoint = "StopTrigger"
self.delay = convert_float(delay)
self.conditionedge = convert_enum(conditionedge, ConditionEdge)
if not isinstance(entitycondition, _EntityTriggerType):
raise TypeError("entitycondition is not a valid EntityCondition")
self.entitycondition = entitycondition
self.triggerentity = TriggeringEntities(triggeringrule)
self.triggerentity.add_entity(triggerentity)
self._used_by_parent = False
def __eq__(self, other):
if isinstance(other, EntityTrigger):
if (
self.get_attributes() == other.get_attributes()
and self.triggerentity == other.triggerentity
and self.entitycondition == other.entitycondition
and self._triggerpoint == other._triggerpoint
):
return True
elif isinstance(other, Trigger):
if (
len(other.conditiongroups) == 1
and len(other.conditiongroups[0].conditions) == 1
):
if (
self._triggerpoint == other._triggerpoint
and other.conditiongroups[0].conditions[0] == self
):
return True
elif isinstance(other, ConditionGroup):
if len(other.conditions) == 1:
if (
self._triggerpoint == other._triggerpoint
and other.conditions[0] == self
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of EntityTrigger
NOTE: this parser will ONLY parse the Condition itself, not the CondintionGroup or Trigger that it can generate
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (EntityTrigger): a EntityTrigger object
"""
if element.tag != "Condition":
raise NotAValidElement(
"ValueTrigger only parses a Condition, not ", element
)
name = element.attrib["name"]
delay = convert_float(element.attrib["delay"])
conditionedge = convert_enum(element.attrib["conditionEdge"], ConditionEdge)
entityconditionelement = element.find("ByEntityCondition")
triggering_entities = TriggeringEntities.parse(
entityconditionelement.find("TriggeringEntities")
)
condition = _EntityConditionFactory.parse_entity_condition(
entityconditionelement.find("EntityCondition")
)
enttrig = EntityTrigger(name, delay, conditionedge, condition, "")
enttrig.triggerentity = triggering_entities
return enttrig
def _set_used_by_parent(self):
"""_set_used_by_parent is used internaly if the condition is added to a ConditionGroup"""
self._used_by_parent = True
def add_triggering_entity(self, triggerentity):
"""adds additional triggering entities to a trigger
Parameters
----------
triggeringentity (str)
"""
self.triggerentity.add_entity(triggerentity)
return self
def get_attributes(self):
"""returns the attributes of the LaneOffsetAction as a dict"""
return {
"name": self.name,
"delay": str(self.delay),
"conditionEdge": self.conditionedge.get_name(),
}
def get_element(self):
"""returns the elementTree of the LaneOffsetAction"""
condition = ET.Element("Condition", attrib=self.get_attributes())
byentity = ET.SubElement(condition, "ByEntityCondition")
byentity.append(self.triggerentity.get_element())
byentity.append(self.entitycondition.get_element())
if self._used_by_parent:
return condition
else:
# could create a new Trigger ConditionGroup here, but went with this solution for now
element = ET.Element(self._triggerpoint)
condgroup = ET.SubElement(element, "ConditionGroup")
condgroup.append(condition)
return element
class ValueTrigger(_TriggerType):
"""the ValueTrigger creates a Trigger of the type ValueTrigger of openscenario
Parameters
----------
name (str): name of the trigger
delay (float): the delay of the trigger
conditionedge (ConditionEdge): on what conditionedge the trigger should act
valuecondition (*ValueCondition): a value condition
triggeringentity (str): the entity of the trigger
triggeringrule (str): rule of the trigger
Default: 'any'
triggeringpoint (str): start or stop
Attributes
----------
name (str): name of the trigger
delay (float): the delay of the trigger
conditionedge (ConditionEdge): the condition edge
valuecondition (*ValueCondition): the value condition
triggerentity (TriggeringEntities): the triggering entity
Methods
-------
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(
self, name, delay, conditionedge, valuecondition, triggeringpoint="start"
):
"""initalize the ValueTrigger
Parameters
----------
name (str): name of the trigger
delay (float): the delay of the trigger
conditionedge (ConditionEdge): on what conditionedge the trigger should act
valuecondition (*ValueCondition): a value condition
triggeringentity (str): the entity of the trigger
triggeringrule (str): rule of the trigger
Default: 'any'
#TODO CHECK THIS
triggeringpoint (str): start or stop
"""
self.name = name
if triggeringpoint not in ["start", "stop"]:
raise ValueError("not a valid triggering point, valid start or stop")
if triggeringpoint == "start":
self._triggerpoint = "StartTrigger"
else:
self._triggerpoint = "StopTrigger"
self.delay = convert_float(delay)
self.conditionedge = convert_enum(conditionedge, ConditionEdge)
if not isinstance(valuecondition, _ValueTriggerType):
raise TypeError("entitycondition is not a valid EntityCondition")
self.valuecondition = valuecondition
self._used_by_parent = False
def __eq__(self, other):
if isinstance(other, ValueTrigger):
if (
self.get_attributes() == other.get_attributes()
and self.valuecondition == other.valuecondition
and self._triggerpoint == other._triggerpoint
):
return True
elif isinstance(other, Trigger):
if (
len(other.conditiongroups) == 1
and len(other.conditiongroups[0].conditions) == 1
):
if (
self._triggerpoint == other._triggerpoint
and other.conditiongroups[0].conditions[0] == self
):
return True
elif isinstance(other, ConditionGroup):
if len(other.conditions) == 1:
if (
self._triggerpoint == other._triggerpoint
and other.conditions[0] == self
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of ValueTrigger
NOTE: this parser will ONLY parse the Condition itself, not the CondintionGroup or Trigger that it can generate
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (ValueTrigger): a ValueTrigger object
"""
if element.tag != "Condition":
raise NotAValidElement(
"ValueTrigger only parses a Condition, not ", element
)
name = element.attrib["name"]
delay = convert_float(element.attrib["delay"])
conditionedge = convert_enum(element.attrib["conditionEdge"], ConditionEdge)
condition = _ValueConditionFactory.parse_value_condition(
element.find("ByValueCondition")
)
return ValueTrigger(name, delay, conditionedge, condition)
def _set_used_by_parent(self):
"""_set_used_by_parent is used internaly if the condition is added to a ConditionGroup"""
self._used_by_parent = True
def get_attributes(self):
"""returns the attributes of the LaneOffsetAction as a dict"""
return {
"name": self.name,
"delay": str(self.delay),
"conditionEdge": self.conditionedge.get_name(),
}
def get_element(self):
"""returns the elementTree of the LaneOffsetAction"""
condition = ET.Element("Condition", attrib=self.get_attributes())
byvalue = ET.SubElement(condition, "ByValueCondition")
byvalue.append(self.valuecondition.get_element())
if self._used_by_parent:
return condition
else:
# could create a new Trigger ConditionGroup here, but went with this solution for now
element = ET.Element(self._triggerpoint)
condgroup = ET.SubElement(element, "ConditionGroup")
condgroup.append(condition)
return element
class TriggeringEntities(VersionBase):
"""the TriggeringEntities class is used by Value and Entity Triggers to defined the trigger entity
Parameters
----------
triggeringrule (TriggeringEntitiesRule): all or any
Attributes
----------
entity (list of EntityRef): refernce to the entity
triggeringrule (TriggeringEntitiesRule): all or any
Methods
-------
add_entity(entity)
adds a entityref to the triggering entities
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, triggeringrule):
"""initalize the TriggeringEntities
Parameters
----------
entity (TriggeringEntitiesRule): name of the entity
triggeringrule (str): all or any
"""
self.entity = []
self.triggeringrule = convert_enum(triggeringrule, TriggeringEntitiesRule)
def __eq__(self, other):
if isinstance(other, TriggeringEntities):
if (
self.get_attributes() == other.get_attributes()
and self.entity == other.entity
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of TriggeringEntities
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
triggeringentities (TriggeringEntities): a TriggeringEntities object
"""
rule = convert_enum(
element.attrib["triggeringEntitiesRule"], TriggeringEntitiesRule
)
triggeringentities = TriggeringEntities(rule)
entrefs = element.findall("EntityRef")
for ent in entrefs:
entityref = EntityRef.parse(ent)
triggeringentities.add_entity(entityref.entity)
return triggeringentities
def add_entity(self, entity):
"""add_entity adds an entity to the TriggeringEntities
Parameters
----------
entity (str): name of the entity to add
"""
self.entity.append(EntityRef(entity))
return self
def get_attributes(self):
"""returns the attributes of the LaneOffsetAction as a dict"""
return {"triggeringEntitiesRule": self.triggeringrule.get_name()}
def get_element(self):
"""returns the elementTree of the LaneOffsetAction"""
element = ET.Element("TriggeringEntities", attrib=self.get_attributes())
if len(self.entity) == 0:
raise NotEnoughInputArguments("No TriggereingEntities has been added")
for ent in self.entity:
element.append(ent.get_element())
return element
""" Entity conditions
"""
class EndOfRoadCondition(_EntityTriggerType):
"""the EndOfRoadCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
duration (float): the duration at the en of road
Attributes
----------
duration (float): the duration at the en of road
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, duration):
"""initalize the EndOfRoadCondition
Parameters
----------
duration (float): the duration after the condition
"""
self.duration = convert_float(duration)
def __eq__(self, other):
if isinstance(other, EndOfRoadCondition):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of EndOfRoadCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (EndOfRoadCondition): a EndOfRoadCondition object
"""
condition = element.find("EndOfRoadCondition")
duration = convert_float(condition.attrib["duration"])
return EndOfRoadCondition(duration)
def get_attributes(self):
"""returns the attributes of the EndOfRoadCondition as a dict"""
return {"duration": str(self.duration)}
def get_element(self):
"""returns the elementTree of the EndOfRoadCondition"""
element = ET.Element("EntityCondition")
ET.SubElement(element, "EndOfRoadCondition", attrib=self.get_attributes())
return element
class CollisionCondition(_EntityTriggerType):
"""the CollisionCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
entity (str or ObjectType): name of the entity to collide with
Attributes
----------
entity (str or ObjectType): name of the entity to collide with
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, entity):
"""the CollisionCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
entity (str or ObjectType): name of the entity to collide with
"""
self.entity = entity
if not isinstance(self.entity, str):
self.entity = convert_enum(self.entity, ObjectType)
def __eq__(self, other):
if isinstance(other, CollisionCondition):
if self.entity == other.entity:
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of CollisionCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (CollisionCondition): a CollisionCondition object
"""
condition = element.find("CollisionCondition")
bytype = condition.find("ByType")
if bytype is not None:
entity = convert_enum(bytype.attrib["type"], ObjectType)
else:
entityref = EntityRef.parse(condition.find("EntityRef"))
entity = entityref.entity
return CollisionCondition(entity)
def get_element(self):
"""returns the elementTree of the CollisionCondition"""
element = ET.Element("EntityCondition")
colcond = ET.SubElement(element, "CollisionCondition")
if isinstance(self.entity, str):
colcond.append(EntityRef(self.entity).get_element())
else:
ET.SubElement(colcond, "ByType", {"type": self.entity.get_name()})
return element
class OffroadCondition(_EntityTriggerType):
"""the OffroadCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
duration (float): the duration of offroad
Attributes
----------
duration (float): the duration of offroad
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, duration):
"""initalize the OffroadCondition
Parameters
----------
duration (float): the duration of offroad
"""
self.duration = convert_float(duration)
def __eq__(self, other):
if isinstance(other, OffroadCondition):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of OffroadCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (OffroadCondition): a OffroadCondition object
"""
condition = element.find("OffroadCondition")
duration = convert_float(condition.attrib["duration"])
return OffroadCondition(duration)
def get_attributes(self):
"""returns the attributes of the OffroadCondition as a dict"""
return {"duration": str(self.duration)}
def get_element(self):
"""returns the elementTree of the OffroadCondition"""
element = ET.Element("EntityCondition")
ET.SubElement(element, "OffroadCondition", attrib=self.get_attributes())
return element
class TimeHeadwayCondition(_EntityTriggerType):
"""the TimeHeadwayCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
entity (str): name of the entity for the headway
value (float): time of headway
rule (Rule): condition rule of triggering
alongroute (bool): if the route should count
Default: True
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
Default: True
distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1)
Default: RelativeDistanceType.longitudinal
coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1)
Default: CoordinateSystem.road
routing_algorithm (RoutingAlgorithm): the routing algorithm for the condition (valid from V1.2)
Default: None
Attributes
----------
entity (str): name of the entity for the headway
value (float): time of headway
rule (Rule): condition rule of triggering
alongroute (bool): if the route should count
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1)
coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1)
routing_algorithm (RoutingAlgorithm): the routing algorithm for the condition (valid from V1.2)
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(
self,
entity,
value,
rule,
alongroute=True,
freespace=True,
distance_type=RelativeDistanceType.longitudinal,
coordinate_system=CoordinateSystem.road,
routing_algorithm=None,
):
"""initalize the TimeHeadwayCondition
Parameters
----------
entity (str): name of the entity for the headway
value (float): time of headway
rule (Rule): condition rule of triggering
alongroute (bool): if the route should count
Default: True
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
Default: True
distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1)
Default: RelativeDistanceType.longitudinal
coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1)
Default: CoordinateSystem.road
routing_algorithm (RoutingAlgorithm): the routing algorithm for the condition (valid from V1.2)
Default: None
"""
self.entity = entity
self.value = convert_float(value)
self.alongroute = convert_bool(alongroute)
self.freespace = convert_bool(freespace)
self.rule = convert_enum(rule, Rule)
self.relative_distance_type = convert_enum(distance_type, RelativeDistanceType)
self.coordinate_system = convert_enum(coordinate_system, CoordinateSystem)
self.routing_algorithm = convert_enum(routing_algorithm, RoutingAlgorithm, True)
def __eq__(self, other):
if isinstance(other, TimeHeadwayCondition):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of TimeHeadwayCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (TimeHeadwayCondition): a TimeHeadwayCondition object
"""
condition = element.find("TimeHeadwayCondition")
entity = condition.attrib["entityRef"]
value = condition.attrib["value"]
rule = getattr(Rule, condition.attrib["rule"])
routing_algorithm = None
if "alongRoute" in condition.attrib:
alongroute = convert_bool(condition.attrib["alongRoute"])
else:
alongroute = True
if "relativeDistanceType" in condition.attrib:
reldisttype = convert_enum(
condition.attrib["relativeDistanceType"], RelativeDistanceType
)
else:
reldisttype = RelativeDistanceType.longitudinal
if "coordinateSystem" in condition.attrib:
coordsystem = convert_enum(
condition.attrib["coordinateSystem"], CoordinateSystem
)
else:
coordsystem = CoordinateSystem.road
freespace = convert_bool(condition.attrib["freespace"])
if "routingAlgorithm" in condition.attrib:
routing_algorithm = convert_enum(
condition.attrib["routingAlgorithm"], RoutingAlgorithm
)
return TimeHeadwayCondition(
entity,
value,
rule,
alongroute,
freespace,
reldisttype,
coordsystem,
routing_algorithm,
)
def get_attributes(self):
"""returns the attributes of the TimeHeadwayCondition as a dict"""
basedict = {}
basedict["entityRef"] = self.entity
basedict["value"] = str(self.value)
if self.isVersion(minor=0):
basedict["alongRoute"] = get_bool_string(self.alongroute)
else:
basedict["relativeDistanceType"] = self.relative_distance_type.get_name()
basedict["coordinateSystem"] = self.coordinate_system.get_name()
basedict["freespace"] = get_bool_string(self.freespace)
basedict["rule"] = self.rule.get_name()
if self.routing_algorithm:
if self.version_minor < 2:
raise OpenSCENARIOVersionError(
"RoutingAlgorithm in TimeHeadwayCondition was added in OSC V1.2"
)
basedict["routingAlgorithm"] = self.routing_algorithm.get_name()
return basedict
def get_element(self):
"""returns the elementTree of the TimeHeadwayCondition"""
element = ET.Element("EntityCondition")
ET.SubElement(element, "TimeHeadwayCondition", attrib=self.get_attributes())
return element
class TimeToCollisionCondition(_EntityTriggerType):
"""the TimeToCollisionCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
value (float): time to collision
rule (Rule): condition rule of triggering
alongroute (bool): if the route should count
Default: True
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
Default: True
optionals:
entity (str): the entity to trigger collision on
position (*Position): a position for collision
distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1)
Default: RelativeDistanceType.longitudinal
coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1)
Default: CoordinateSystem.road
routing_algorithm (RoutingAlgorithm): the routing algorithm for the condition (valid from V1.2)
Default: None
Attributes
----------
value (float): time before collision
rule (Rule): condition rule of triggering
alongroute (bool): if the route should count
Default: True
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
Default: True
optionals:
entity (EntityRef): entity for the collision
position (*Position): a position for collision
distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1)
coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1)
routing_algorithm (RoutingAlgorithm): the routing algorithm for the condition (valid from V1.2)
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(
self,
value,
rule,
alongroute=True,
freespace=True,
entity=None,
position=None,
distance_type=RelativeDistanceType.longitudinal,
coordinate_system=CoordinateSystem.road,
routing_algorithm=None,
):
"""initalize the TimeToCollisionCondition
Parameters
----------
value (float): time to collision
rule (Rule): condition rule of triggering
alongroute (bool): if the route should count
Default: True
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
Default: True
optionals:
entity (str): the entity to trigger collision on
position (*Position): a position for collision
distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1)
Default: RelativeDistanceType.longitudinal
coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1)
Default: CoordinateSystem.road
routing_algorithm (RoutingAlgorithm): the routing algorithm for the condition (valid from V1.2)
Default: None
"""
self.value = convert_float(value)
self.freespace = convert_bool(freespace)
self.alongroute = convert_bool(alongroute)
self.rule = convert_enum(rule, Rule)
self.use_entity = None
if (entity != None) and (position != None):
raise ToManyOptionalArguments(
"Can only have either entity of position, not both"
)
if entity:
self.entity = EntityRef(entity)
self.use_entity = True
if position:
if not isinstance(position, _PositionType):
raise TypeError("input position is not a valid Position")
self.position = position
self.use_entity = False
if self.use_entity == None:
raise ValueError("neither position or entity was set.")
self.relative_distance_type = convert_enum(distance_type, RelativeDistanceType)
self.coordinate_system = convert_enum(coordinate_system, CoordinateSystem)
self.routing_algorithm = convert_enum(routing_algorithm, RoutingAlgorithm, True)
def __eq__(self, other):
if isinstance(other, TimeToCollisionCondition):
if self.get_attributes() == other.get_attributes():
if (
self.use_entity
and other.use_entity
and self.entity
and other.entity
) or (
not self.use_entity
and not other.use_entity
and self.position
and other.position
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of TimeToCollisionCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (TimeToCollisionCondition): a TimeToCollisionCondition object
"""
condition = element.find("TimeToCollisionCondition")
value = condition.attrib["value"]
rule = convert_enum(condition.attrib["rule"], Rule)
freespace = convert_bool(condition.attrib["freespace"])
routing_algorithm = None
if "alongRoute" in condition.attrib:
alongroute = convert_bool(condition.attrib["alongRoute"])
else:
alongroute = True
if "relativeDistanceType" in condition.attrib:
reldisttype = convert_enum(
condition.attrib["relativeDistanceType"], RelativeDistanceType
)
else:
reldisttype = RelativeDistanceType.longitudinal
if "coordinateSystem" in condition.attrib:
coordsystem = convert_enum(
condition.attrib["coordinateSystem"], CoordinateSystem
)
else:
coordsystem = CoordinateSystem.road
entity = None
position = None
if condition.find("TimeToCollisionConditionTarget/EntityRef") is not None:
entityref = EntityRef.parse(
condition.find("TimeToCollisionConditionTarget/EntityRef")
)
entity = entityref.entity
elif condition.find("TimeToCollisionConditionTarget/Position") is not None:
position = _PositionFactory.parse_position(
condition.find("TimeToCollisionConditionTarget/Position")
)
else:
raise ValueError(
"No TimeToCollisionConditionTarget found while parsing TimeToCollisionCondition."
)
if "routingAlgorithm" in condition.attrib:
routing_algorithm = convert_enum(
condition.attrib["routingAlgorithm"], RoutingAlgorithm
)
return TimeToCollisionCondition(
value,
rule,
alongroute,
freespace,
entity,
position,
reldisttype,
coordsystem,
routing_algorithm,
)
def get_attributes(self):
"""returns the attributes of the TimeToCollisionCondition as a dict"""
basedict = {}
basedict["value"] = str(self.value)
if self.isVersion(minor=0):
basedict["alongRoute"] = get_bool_string(self.alongroute)
else:
basedict["relativeDistanceType"] = self.relative_distance_type.name
basedict["coordinateSystem"] = self.coordinate_system.name
basedict["freespace"] = get_bool_string(self.freespace)
basedict["rule"] = self.rule.get_name()
if self.routing_algorithm:
if self.version_minor < 2:
raise OpenSCENARIOVersionError(
"RoutingAlgorithm in TimeHeadwayCondition was added in OSC V1.2"
)
basedict["routingAlgorithm"] = self.routing_algorithm.get_name()
return basedict
def get_element(self):
"""returns the elementTree of the TimeToCollisionCondition"""
element = ET.Element("EntityCondition")
collisionevent = ET.SubElement(
element, "TimeToCollisionCondition", attrib=self.get_attributes()
)
targetelement = ET.SubElement(collisionevent, "TimeToCollisionConditionTarget")
if self.use_entity:
targetelement.append(self.entity.get_element())
else:
targetelement.append(self.position.get_element())
return element
class AccelerationCondition(_EntityTriggerType):
"""the AccelerationCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
value (float): acceleration
rule (Rule): condition rule of triggering
direction (DirectionalDimension) Direction of the acceleration (if not given, the total acceleration is considered)
Default: None
Attributes
----------
value (float): acceleration
rule (Rule): condition rule of triggering
direction (DirectionalDimension) Direction of the acceleration (if not given, the total acceleration is considered)
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, value, rule, direction=None):
"""the AccelerationCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
value (float): acceleration
rule (Rule): condition rule of triggering
direction (DirectionalDimension) Direction of the acceleration (if not given, the total acceleration is considered). Valid since OSC 1.2
"""
self.value = convert_float(value)
self.rule = convert_enum(rule, Rule)
self.direction = convert_enum(direction, DirectionalDimension, True)
def __eq__(self, other):
if isinstance(other, AccelerationCondition):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of AccelerationCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (AccelerationCondition): a AccelerationCondition object
"""
direction = None
condition = element.find("AccelerationCondition")
value = convert_float(condition.attrib["value"])
rule = convert_enum(condition.attrib["rule"], Rule)
if "direction" in condition.attrib:
direction = convert_enum(
condition.attrib["direction"], DirectionalDimension
)
return AccelerationCondition(value, rule, direction)
def get_attributes(self):
"""returns the attributes of the AccelerationCondition as a dict"""
retdict = {}
retdict["value"] = str(self.value)
retdict["rule"] = self.rule.get_name()
if self.direction is not None:
if self.isVersionEqLess(minor=1):
raise OpenSCENARIOVersionError("Direction was introduced in OSC 1.2")
retdict["direction"] = self.direction.get_name()
return retdict
def get_element(self):
"""returns the elementTree of the AccelerationCondition"""
element = ET.Element("EntityCondition")
ET.SubElement(element, "AccelerationCondition", attrib=self.get_attributes())
return element
class StandStillCondition(_EntityTriggerType):
"""the StandStillCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
duration (float): time of standstill
Attributes
----------
duration (float): time of standstill
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, duration):
"""the StandStillCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
duration (float): time of standstill
"""
self.duration = convert_float(duration)
def __eq__(self, other):
if isinstance(other, StandStillCondition):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of StandStillCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (StandStillCondition): a StandStillCondition object
"""
condition = element.find("StandStillCondition")
duration = convert_float(condition.attrib["duration"])
return StandStillCondition(duration)
def get_attributes(self):
"""returns the attributes of the StandStillCondition as a dict"""
return {"duration": str(self.duration)}
def get_element(self):
"""returns the elementTree of the StandStillCondition"""
element = ET.Element("EntityCondition")
ET.SubElement(element, "StandStillCondition", attrib=self.get_attributes())
return element
class SpeedCondition(_EntityTriggerType):
"""the SpeedCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
value (float): speed to trigger on
rule (Rule): condition rule of triggering
directional_dimension (DirectionalDimension): direction of the speed to compare (if not used, total speed is considered)
Default: None
Attributes
----------
value (float): speed to trigger on
rule (Rule): condition rule of triggering
directional_dimension (DirectionalDimension): direction of the speed to compare (if not used, total speed is considered)
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, value, rule, directional_dimension=None):
"""initalize the SpeedCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
value (float): speed to trigger on
rule (Rule): condition rule of triggering
directional_dimension (DirectionalDimension): direction of the speed to compare (if not used, total speed is considered)
Default: None
"""
self.value = convert_float(value)
self.rule = convert_enum(rule, Rule)
self.directional_dimension = convert_enum(
directional_dimension, DirectionalDimension, True
)
def __eq__(self, other):
if isinstance(other, SpeedCondition):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of SpeedCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (SpeedCondition): a SpeedCondition object
"""
condition = element.find("SpeedCondition")
value = convert_float(condition.attrib["value"])
rule = convert_enum(condition.attrib["rule"], Rule)
direction = None
if "direction" in condition.attrib:
direction = convert_enum(
condition.attrib["direction"], DirectionalDimension
)
return SpeedCondition(value, rule, direction)
def get_attributes(self):
"""returns the attributes of the SpeedCondition as a dict"""
basedict = {}
basedict["value"] = str(self.value)
basedict["rule"] = self.rule.get_name()
if self.directional_dimension is not None:
if self.isVersionEqLess(minor=1):
raise OpenSCENARIOVersionError("Direction was introduced in OSC 1.2")
basedict["direction"] = self.directional_dimension.get_name()
return basedict
# return merge_dicts({'value':str(self.value)},self.rule.get_attributes())
def get_element(self):
"""returns the elementTree of the SpeedCondition"""
element = ET.Element("EntityCondition")
ET.SubElement(element, "SpeedCondition", attrib=self.get_attributes())
return element
class RelativeSpeedCondition(_EntityTriggerType):
"""the RelativeSpeedCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
value (float): acceleration
rule (Rule): condition rule of triggering
entity (str): name of the entity to be relative to
directional_dimension (DirectionalDimension): direction of the speed to compare (if not used, total speed is considered)
Default: None
Attributes
----------
value (float): acceleration
rule (Rule): condition rule of triggering
entity (str): name of the entity to be relative to
directional_dimension (DirectionalDimension): direction of the speed to compare (if not used, total speed is considered)
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, value, rule, entity, directional_dimension=None):
"""initalize the RelativeSpeedCondition
Parameters
----------
value (float): acceleration
rule (Rule): condition rule of triggering
entity (str): name of the entity to be relative to
directional_dimension (DirectionalDimension): direction of the speed to compare (if not used, total speed is considered)
Default: None
"""
self.value = convert_float(value)
self.rule = convert_enum(rule, Rule)
self.entity = entity
self.directional_dimension = convert_enum(
directional_dimension, DirectionalDimension, True
)
def __eq__(self, other):
if isinstance(other, RelativeSpeedCondition):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of RelativeSpeedCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (RelativeSpeedCondition): a RelativeSpeedCondition object
"""
condition = element.find("RelativeSpeedCondition")
value = convert_float(condition.attrib["value"])
entity = condition.attrib["entityRef"]
rule = convert_enum(condition.attrib["rule"], Rule)
direction = None
if "direction" in condition.attrib:
direction = convert_enum(
condition.attrib["direction"], DirectionalDimension
)
return RelativeSpeedCondition(value, rule, entity, direction)
def get_attributes(self):
"""returns the attributes of the RelativeSpeedCondition as a dict"""
basedict = {}
basedict["value"] = str(self.value)
basedict["rule"] = self.rule.get_name()
basedict["entityRef"] = self.entity
if self.directional_dimension is not None:
if self.isVersionEqLess(minor=1):
raise OpenSCENARIOVersionError("Direction was introduced in OSC 1.2")
basedict["direction"] = self.directional_dimension.get_name()
return basedict
# return merge_dicts({'value':str(self.value),'entityRef':self.entity},self.rule.get_attributes())
def get_element(self):
"""returns the elementTree of the RelativeSpeedCondition"""
element = ET.Element("EntityCondition")
ET.SubElement(element, "RelativeSpeedCondition", attrib=self.get_attributes())
return element
class TraveledDistanceCondition(_EntityTriggerType):
"""the TraveledDistanceCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
value (float): how far it has traveled
Attributes
----------
value (float): how far it has traveled
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, value):
"""the TraveledDistanceCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
value (float): how far it has traveled
"""
self.value = convert_float(value)
def __eq__(self, other):
if isinstance(other, TraveledDistanceCondition):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of TraveledDistanceCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (TraveledDistanceCondition): a TraveledDistanceCondition object
"""
condition = element.find("TraveledDistanceCondition")
value = convert_float(condition.attrib["value"])
return TraveledDistanceCondition(value)
def get_attributes(self):
"""returns the attributes of the TraveledDistanceCondition as a dict"""
return {"value": str(self.value)}
def get_element(self):
"""returns the elementTree of the TraveledDistanceCondition"""
element = ET.Element("EntityCondition")
ET.SubElement(
element, "TraveledDistanceCondition", attrib=self.get_attributes()
)
return element
class ReachPositionCondition(_EntityTriggerType):
"""the ReachPositionCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
position (*Position): any position to reach
tolerance (float): tolerance of the position
Attributes
----------
position (*Position): any position to reach
tolerance (float): tolerance of the position
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, position, tolerance):
"""initalize the ReachPositionCondition
Parameters
----------
position (*Position): any position to reach
tolerance (float): tolerance of the position
"""
if not (isinstance(position, _PositionType)):
raise TypeError("position input is not a valid Position")
self.position = position
self.tolerance = convert_float(tolerance)
def __eq__(self, other):
if isinstance(other, ReachPositionCondition):
if (
self.get_attributes() == other.get_attributes()
and self.position == other.position
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of ReachPositionCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (ReachPositionCondition): a ReachPositionCondition object
"""
condition = element.find("ReachPositionCondition")
tolerance = convert_float(condition.attrib["tolerance"])
position = _PositionFactory.parse_position(condition.find("Position"))
return ReachPositionCondition(position, tolerance)
def get_attributes(self):
"""returns the attributes of the ReachPositionCondition as a dict"""
return {"tolerance": str(self.tolerance)}
def get_element(self):
"""returns the elementTree of the ReachPositionCondition"""
element = ET.Element("EntityCondition")
reachposcond = ET.SubElement(
element, "ReachPositionCondition", attrib=self.get_attributes()
)
reachposcond.append(self.position.get_element())
if self.isVersion(minor=2):
Warning(
"ReachPositionCondition is deprecrated, please use DistanceCondition instead"
)
return element
class DistanceCondition(_EntityTriggerType):
"""the DistanceCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
value (float): distance to position
rule (Rule): condition rule of triggering
position (*Position): any position to reach
alongroute (bool): if the route should count (depricated in V.1.0)
Default: True
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
Default: True
distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1)
Default: RelativeDistanceType.longitudinal
coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1)
Default: CoordinateSystem.road
routing_algorithm (RoutingAlgorithm): the routing algorithm to use if a relevant coordinate system is used (road/lane)
Default: RoutingAlgorithm.undefined
Attributes
----------
value (float): distance to position
rule (Rule): condition rule of triggering
position (*Position): any position to reach
alongroute (bool): if the route should count
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
distance_type (RelativeDistanceType): how the relative distance should be calculated
coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance
routing_algorithm (RoutingAlgorithm): the routing algorithm to use if a relevant coordinate system is used (road/lane)
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(
self,
value,
rule,
position,
alongroute=True,
freespace=True,
distance_type=RelativeDistanceType.longitudinal,
coordinate_system=CoordinateSystem.road,
routing_algorithm=None,
):
self.value = value
self.alongroute = convert_bool(alongroute)
self.freespace = convert_bool(freespace)
self.rule = convert_enum(rule, Rule)
if not (isinstance(position, _PositionType)):
raise TypeError("position input is not a valid Position")
self.position = position
self.relative_distance_type = convert_enum(distance_type, RelativeDistanceType)
self.coordinate_system = convert_enum(coordinate_system, CoordinateSystem)
self.routing_algorithm = convert_enum(routing_algorithm, RoutingAlgorithm, True)
def __eq__(self, other):
if isinstance(other, DistanceCondition):
if (
self.get_attributes() == other.get_attributes()
and self.position == other.position
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of DistanceCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (DistanceCondition): a DistanceCondition object
"""
condition = element.find("DistanceCondition")
value = condition.attrib["value"]
rule = convert_enum(condition.attrib["rule"], Rule)
freespace = convert_bool(condition.attrib["freespace"])
if "alongRoute" in condition.attrib:
alongroute = convert_bool(condition.attrib["alongRoute"])
else:
alongroute = True
if "relativeDistanceType" in condition.attrib:
reldisttype = convert_enum(
condition.attrib["relativeDistanceType"], RelativeDistanceType
)
else:
reldisttype = RelativeDistanceType.longitudinal
if "coordinateSystem" in condition.attrib:
coordsystem = convert_enum(
condition.attrib["coordinateSystem"], CoordinateSystem
)
else:
coordsystem = CoordinateSystem.road
if "routingAlgorithm" in condition.attrib:
routing_algorithm = convert_enum(
condition.attrib["routingAlgorithm"], RoutingAlgorithm
)
else:
routing_algorithm = None
position = None
position = _PositionFactory.parse_position(condition.find("Position"))
return DistanceCondition(
value,
rule,
position,
alongroute,
freespace,
reldisttype,
coordsystem,
routing_algorithm,
)
def get_attributes(self):
"""returns the attributes of the DistanceCondition as a dict"""
basedict = {}
basedict["value"] = str(self.value)
basedict["freespace"] = get_bool_string(self.freespace)
basedict["rule"] = self.rule.get_name()
if self.isVersion(minor=0):
basedict["alongRoute"] = get_bool_string(self.alongroute)
else:
basedict["relativeDistanceType"] = self.relative_distance_type.get_name()
basedict["coordinateSystem"] = self.coordinate_system.get_name()
if self.routing_algorithm is not None:
if self.isVersionEqLess(minor=1):
raise OpenSCENARIOVersionError(
"routing algorithm was introduced in OSC 1.2"
)
basedict["routingAlgorithm"] = self.routing_algorithm.get_name()
return basedict
def get_element(self):
"""returns the elementTree of the DistanceCondition"""
element = ET.Element("EntityCondition")
distancecond = ET.SubElement(
element, "DistanceCondition", attrib=self.get_attributes()
)
distancecond.append(self.position.get_element())
return element
class RelativeDistanceCondition(_EntityTriggerType):
"""the RelativeDistanceCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
value (float): distance to position
rule (Rule): condition rule of triggering
dist_type (RelativeDistanceType): type of relative distance
entity (str): name of the entity fore relative distance
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
Default: True
coordinate_system (CoordinateSystem): what coordinate system to use (valid from V1.1)
Default: CoordinateSystem.entity
routing_algorithm (RoutingAlgorithm): if coordinate_system road/lane is used, this can be set (valid from V1.2)
Default: None
Attributes
----------
value (float): distance to position
rule (Rule): condition rule of triggering
entity (str): name of the entity fore relative distance
dist_type (RelativeDistanceType): type of relative distance
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
coordinate_system (CoordinateSystem): what coordinate system to use (valid from V1.1)
routing_algorithm (RoutingAlgorithm): if coordinate_system road/lane is used, this can be set (valid from V1.2)
Default: None
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(
self,
value,
rule,
dist_type,
entity,
alongroute=True,
freespace=True,
coordinate_system=CoordinateSystem.entity,
routing_algorithm=None,
):
"""initalize the RelativeDistanceCondition
Parameters
----------
value (float): distance to position
rule (Rule): condition rule of triggering
dist_type (RelativeDistanceType): type of relative distance
entity (str): name of the entity fore relative distance
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
Default: True
coordinate_system (CoordinateSystem): what coordinate system to use (valid from V1.1)
Default: CoordinateSystem.entity
routing_algorithm (RoutingAlgorithm): if coordinate_system road/lane is used, this can be set (valid from V1.2)
Default: None
"""
self.value = value
self.alongroute = convert_bool(alongroute)
self.freespace = convert_bool(freespace)
self.dist_type = convert_enum(dist_type, RelativeDistanceType)
self.rule = convert_enum(rule, Rule)
self.entity = entity
self.coordinate_system = convert_enum(coordinate_system, CoordinateSystem)
self.routing_algorithm = convert_enum(routing_algorithm, RoutingAlgorithm, True)
def __eq__(self, other):
if isinstance(other, RelativeDistanceCondition):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of RelativeDistanceCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (RelativeDistanceCondition): a RelativeDistanceCondition object
"""
condition = element.find("RelativeDistanceCondition")
value = condition.attrib["value"]
rule = convert_enum(condition.attrib["rule"], Rule)
freespace = convert_bool(condition.attrib["freespace"])
entity = condition.attrib["entityRef"]
if "alongRoute" in condition.attrib:
alongroute = convert_bool(condition.attrib["alongRoute"])
else:
alongroute = True
if "relativeDistanceType" in condition.attrib:
reldisttype = convert_enum(
condition.attrib["relativeDistanceType"], RelativeDistanceType
)
else:
reldisttype = RelativeDistanceType.longitudinal
if "coordinateSystem" in condition.attrib:
coordsystem = convert_enum(
condition.attrib["coordinateSystem"], CoordinateSystem
)
else:
coordsystem = CoordinateSystem.road
if "routingAlgorithm" in condition.attrib:
routing_algorithm = convert_enum(
condition.attrib["routingAlgorithm"], RoutingAlgorithm
)
else:
routing_algorithm = None
return RelativeDistanceCondition(
value,
rule,
reldisttype,
entity,
alongroute,
freespace,
coordsystem,
routing_algorithm,
)
def get_attributes(self):
"""returns the attributes of the RelativeDistanceCondition as a dict"""
basedict = {}
basedict["value"] = str(self.value)
basedict["freespace"] = get_bool_string(self.freespace)
basedict["entityRef"] = self.entity
basedict["rule"] = self.rule.get_name()
basedict["relativeDistanceType"] = self.dist_type.get_name()
if not self.isVersion(minor=0):
basedict["coordinateSystem"] = self.coordinate_system.get_name()
if self.routing_algorithm:
if self.isVersionEqLarger(minor=2):
basedict["routingAlgorithm"] = self.routing_algorithm.get_name()
else:
raise OpenSCENARIOVersionError(
"RoutingAlgorithm was introduced in V1.2"
)
return basedict
def get_element(self):
"""returns the elementTree of the RelativeDistanceCondition"""
element = ET.Element("EntityCondition")
ET.SubElement(
element, "RelativeDistanceCondition", attrib=self.get_attributes()
)
return element
class RelativeClearanceCondition(_EntityTriggerType):
"""the RelativeClearanceCondition class is an Entity Condition used by the EntityTrigger
Parameters
----------
distance_backward (float): distance backwards
distance_forward (float): distance forward
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
opposite_lanes (bool): if lanes in opposite direction are considered
Attributes
----------
distance_backward (float): distance backwards
distance_forward (float): distance forward
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
opposite_lanes (bool): if lanes in opposite direction are considered
entities (list of EntityRef): specific entities to look for
lane_ranges (list of tuple): lanes to be checked
Methods
-------
add_entity(entity)
adds an entity to the RelativeClearanceCondition
add_relative_lane_range(from, to)
adds a RelativeLaneRange to the RelativeClearanceCondition
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(
self,
opposite_lanes,
distance_backward=0,
distance_forward=0,
freespace=True,
):
"""initalize the RelativeDistanceCondition
Parameters
----------
distance_backward (float): distance backwards
distance_forward (float): distance forward
freespace (bool): (True) distance between bounding boxes, (False) distance between ref point
opposite_lanes (bool): if lanes in opposite direction are considered
"""
self.freespace = convert_bool(freespace)
self.opposite_lanes = convert_bool(opposite_lanes)
self.distance_backward = convert_float(distance_backward)
self.distance_forward = convert_float(distance_forward)
self.entities = []
self.lane_ranges = []
def __eq__(self, other):
if isinstance(other, RelativeClearanceCondition):
if (
self.get_attributes() == other.get_attributes()
and self.entities == other.entities
and self.lane_ranges == other.lane_ranges
):
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of RelativeClearanceCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (RelativeClearanceCondition): a RelativeClearanceCondition object
"""
condition = element.find("RelativeClearanceCondition")
if "freespace" in condition.attrib:
freespace = convert_bool(condition.attrib["freespace"])
else:
freespace = convert_bool(condition.attrib["freeSpace"])
opposite_lanes = convert_bool(condition.attrib["oppositeLanes"])
if "distanceBackward" in condition.attrib:
back_dist = convert_float(condition.attrib["distanceBackward"])
else:
back_dist = None
if "distanceForward" in condition.attrib:
fwd_dist = convert_float(condition.attrib["distanceForward"])
else:
fwd_dist = None
retval = RelativeClearanceCondition(
opposite_lanes, back_dist, fwd_dist, freespace
)
for er in condition.findall("EntityRef"):
retval.add_entity(er.attrib["entityRef"])
for r in condition.findall("RelativeLaneRange"):
retval.add_relative_lane_range(
convert_int(r.attrib["from"]), convert_int(r.attrib["to"])
)
return retval
def add_entity(self, entity):
"""adds an entity to the RelativeClearanceCondition
Parameters
----------
entity (str): name of the entity
"""
self.entities.append(EntityRef(entity))
def add_relative_lane_range(self, from_lane, to_lane):
"""adds an RelativeLaneRange to the RelativeClearanceCondition
Parameters
----------
from_lane (int): start lane
to_lane (int): end lane
"""
self.lane_ranges.append((from_lane, to_lane))
def get_attributes(self):
"""returns the attributes of the RelativeClearanceCondition as a dict"""
basedict = {}
basedict["oppositeLanes"] = get_bool_string(self.opposite_lanes)
# TODO: wrong in the spec, should be lower case s
basedict["freeSpace"] = get_bool_string(self.freespace)
if self.distance_backward is not None:
basedict["distanceBackward"] = str(self.distance_backward)
if self.distance_forward is not None:
basedict["distanceForward"] = str(self.distance_forward)
return basedict
def get_element(self):
"""returns the elementTree of the RelativeClearanceCondition"""
if self.isVersionEqLess(minor=1):
raise OpenSCENARIOVersionError(
"RelativeClearanceCondition was added in OSC 1.2"
)
element = ET.Element("EntityCondition")
relative_clearence_element = ET.SubElement(
element, "RelativeClearanceCondition", attrib=self.get_attributes()
)
for r in self.lane_ranges:
ET.SubElement(
relative_clearence_element,
"RelativeLaneRange",
{"from": str(r[0]), "to": str(r[1])},
)
for e in self.entities:
relative_clearence_element.append(e.get_element())
return element
""" Value Conditions
"""
class ParameterCondition(_ValueTriggerType):
"""the ParameterCondition class is an Value Condition used by the ValueTrigger
Parameters
----------
parameter (str): the parameter to trigger on
value (int): value to trigger on
rule (Rule): condition rule of triggering
Attributes
----------
parameter (str): the parameter to trigger on
value (int): value to trigger on
rule (Rule): condition rule of triggering
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, parameter, value, rule):
"""initalize the ParameterCondition
Parameters
----------
parameter (str): the parameter to trigger on
value (int): value to trigger on
rule (Rule): condition rule of triggering
"""
self.parameter = parameter
self.value = value
self.rule = convert_enum(rule, Rule)
def __eq__(self, other):
if isinstance(other, ParameterCondition):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of ParameterCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (ParameterCondition): a ParameterCondition object
"""
parameter = element.attrib["parameterRef"]
value = element.attrib["value"]
rule = convert_enum(element.attrib["rule"], Rule)
return ParameterCondition(parameter, value, rule)
def get_attributes(self):
"""returns the attributes of the ParameterCondition as a dict"""
basedict = {"parameterRef": self.parameter, "value": str(self.value)}
basedict["rule"] = self.rule.get_name()
return basedict
def get_element(self):
"""returns the elementTree of the ParameterCondition"""
return ET.Element("ParameterCondition", attrib=self.get_attributes())
class VariableCondition(_ValueTriggerType):
"""the VariableCondition class is an Value Condition used by the ValueTrigger (valid from V1.2)
Parameters
----------
variable (str): the variable to trigger on
value (int): value to trigger on
rule (Rule): condition rule of triggering
Attributes
----------
variable (str): the variable to trigger on
value (int): value to trigger on
rule (Rule): condition rule of triggering
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, variable, value, rule):
"""initalize the VariableCondition
Parameters
----------
variable (str): the variable to trigger on
value (int): value to trigger on
rule (Rule): condition rule of triggering
"""
self.variable = variable
self.value = value
self.rule = convert_enum(rule, Rule)
def __eq__(self, other):
if isinstance(other, VariableCondition):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of VariableCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (VariableCondition): a VariableCondition object
"""
variable = element.attrib["variableRef"]
value = element.attrib["value"]
rule = convert_enum(element.attrib["rule"], Rule)
return VariableCondition(variable, value, rule)
def get_attributes(self):
"""returns the attributes of the VariableCondition as a dict"""
basedict = {"variableRef": self.variable, "value": str(self.value)}
basedict["rule"] = self.rule.get_name()
return basedict
def get_element(self):
"""returns the elementTree of the VariableCondition"""
if self.isVersionEqLess(minor=1):
raise OpenSCENARIOVersionError("VariableCondition was added in OSC 1.2")
return ET.Element("VariableCondition", attrib=self.get_attributes())
class TimeOfDayCondition(_ValueTriggerType):
"""the TimeOfDayCondition class is an Value Condition used by the ValueTrigger
Parameters
----------
rule (Rule): condition rule of triggering
time of day (str): datetime ??? format unknown
Attributes
----------
rule (Rule): condition rule of triggering
time of day (str): datetime ??? format unknown
Methods
-------
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, rule, year, month, day, hour, minute, second):
"""initalize the TimeOfDayCondition
Parameters
----------
rule (Rule): condition rule of triggering
time of day (str): datetime ??? format unknown
"""
self.rule = convert_enum(rule, Rule)
self.year = convert_int(year)
self.month = convert_int(month)
self.day = convert_int(day)
self.hour = convert_int(hour)
self.minute = convert_int(minute)
self.second = convert_int(second)
def __eq__(self, other):
if isinstance(other, TimeOfDayCondition):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of TimeOfDayCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (TimeOfDayCondition): a TimeOfDayCondition object
"""
var = element.attrib["dateTime"]
year = convert_int(var[0:4])
month = convert_int(var[5:7])
day = convert_int(var[8:10])
hour = convert_int(var[11:13])
minute = convert_int(var[14:16])
second = convert_int(var[17:19])
rule = convert_enum(element.attrib["rule"], Rule)
return TimeOfDayCondition(rule, year, month, day, hour, minute, second)
def get_attributes(self):
"""returns the attributes of the TimeOfDayCondition as a dict"""
basedict = {}
dt = (
str(self.year)
+ "-"
+ "{:0>2}".format(self.month)
+ "-"
+ "{:0>2}".format(self.day)
+ "T"
+ "{:0>2}".format(self.hour)
+ ":"
+ "{:0>2}".format(self.minute)
+ ":"
+ "{:0>2}".format(self.second)
)
basedict["dateTime"] = dt
basedict["rule"] = self.rule.get_name()
return basedict
def get_element(self):
"""returns the elementTree of the TimeOfDayCondition"""
return ET.Element("TimeOfDayCondition", attrib=self.get_attributes())
class SimulationTimeCondition(_ValueTriggerType):
"""the SimulationTimeCondition class is an Value Condition used by the ValueTrigger
Parameters
----------
value (float): simulation time
rule (Rule): condition rule of triggering
Attributes
----------
value (int): simulation time
rule (Rule): condition rule of triggering
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, value, rule):
"""initalize the SimulationTimeCondition
Parameters
----------
value (float): simulation time
rule (Rule): condition rule of triggering
"""
self.value = convert_float(value)
self.rule = convert_enum(rule, Rule)
def __eq__(self, other):
if isinstance(other, SimulationTimeCondition):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of SimulationTimeCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (SimulationTimeCondition): a SimulationTimeCondition object
"""
condition = element.find("SimulationTimeCondition")
value = convert_float(element.attrib["value"])
rule = convert_enum(element.attrib["rule"], Rule)
return SimulationTimeCondition(value, rule)
def get_attributes(self):
"""returns the attributes of the SimulationTimeCondition as a dict"""
basedict = {}
basedict["value"] = str(self.value)
basedict["rule"] = self.rule.get_name()
return basedict
def get_element(self):
"""returns the elementTree of the SimulationTimeCondition"""
return ET.Element("SimulationTimeCondition", attrib=self.get_attributes())
class StoryboardElementStateCondition(_ValueTriggerType):
"""the StoryboardElementStateCondition class is an Value Condition used by the ValueTrigger
Parameters
----------
element (StoryboardElementType): the element to trigger on
reference (str): reference of the parameter
state (StoryboardElementState): state to trigger on
Attributes
----------
element (StoryboardElementType): the element to trigger on
reference (str): reference of the parameter
state (StoryboardElementState): state to trigger on
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, element, reference, state):
"""initalize the StoryboardElementStateCondition
Parameters
----------
element (StoryboardElementType): the element to trigger on
reference (str): reference of the parameter
state (StoryBoardElementState): state to trigger on
"""
self.element = convert_enum(element, StoryboardElementType)
self.reference = reference
self.state = convert_enum(state, StoryboardElementState)
def __eq__(self, other):
if isinstance(other, StoryboardElementStateCondition):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of StoryboardElementStateCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (StoryboardElementStateCondition): a StoryboardElementStateCondition object
"""
ref = element.attrib["storyboardElementRef"]
sbet = convert_enum(
element.attrib["storyboardElementType"], StoryboardElementType
)
state = convert_enum(element.attrib["state"], StoryboardElementState)
return StoryboardElementStateCondition(sbet, ref, state)
def get_attributes(self):
"""returns the attributes of the StoryboardElementStateCondition as a dict"""
return {
"storyboardElementType": self.element.get_name(),
"storyboardElementRef": self.reference,
"state": self.state.get_name(),
}
def get_element(self):
"""returns the elementTree of the StoryboardElementStateCondition"""
return ET.Element(
"StoryboardElementStateCondition", attrib=self.get_attributes()
)
class UserDefinedValueCondition(_ValueTriggerType):
"""the UserDefinedValueCondition class is an Value Condition used by the ValueTrigger
Parameters
----------
name (str): name of the parameter
value (int): value to trigger on
rule (Rule): condition rule of triggering
Attributes
----------
name (str): name of the parameter
value (int): value to trigger on
rule (Rule): condition rule of triggering
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, name, value, rule):
"""initalize the UserDefinedValueCondition
Parameters
----------
name (str): name of the parameter
value (int): value to trigger on
rule (Rule): condition rule of triggering
"""
self.name = name
self.value = value
self.rule = convert_enum(rule, Rule)
def __eq__(self, other):
if isinstance(other, UserDefinedValueCondition):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of UserDefinedValueCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (UserDefinedValueCondition): a UserDefinedValueCondition object
"""
name = element.attrib["name"]
value = convert_int(element.attrib["value"])
rule = convert_enum(element.attrib["rule"], Rule)
return UserDefinedValueCondition(name, value, rule)
def get_attributes(self):
"""returns the attributes of the UserDefinedValueCondition as a dict"""
basedict = {"name": self.name, "value": str(self.value)}
basedict["rule"] = self.rule.get_name()
return basedict
def get_element(self):
"""returns the elementTree of the UserDefinedValueCondition"""
return ET.Element("UserDefinedValueCondition", attrib=self.get_attributes())
class TrafficSignalCondition(_ValueTriggerType):
"""the TrafficSignalCondition class is an Value Condition used by the ValueTrigger
Parameters
----------
name (str): name of the traficsignal ???
state (str): state of the signal
Attributes
----------
name (str): name of the traficsignal ???
state (str): state of the signal
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, name, state):
"""initalize the TrafficSignalCondition
Parameters
----------
name (str): name of the traficsignal ???
state (str): state of the signal
"""
self.name = name
self.state = state
def __eq__(self, other):
if isinstance(other, TrafficSignalCondition):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of TrafficSignalCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (TrafficSignalCondition): a TrafficSignalCondition object
"""
name = element.attrib["name"]
state = element.attrib["state"]
return TrafficSignalCondition(name, state)
def get_attributes(self):
"""returns the attributes of the TrafficSignalCondition as a dict"""
return {"name": self.name, "state": self.state}
def get_element(self):
"""returns the elementTree of the TrafficSignalCondition"""
return ET.Element("TrafficSignalCondition", attrib=self.get_attributes())
class TrafficSignalControllerCondition(_ValueTriggerType):
"""the TrafficSignalControllerCondition class is an Value Condition used by the ValueTrigger
Parameters
----------
trafficsignalref (str): ???
phase (str): ???
Attributes
----------
trafficsignalref (str): ???
phase (str): ???
Methods
-------
parse(element)
parses a ElementTree created by the class and returns an instance of the class
get_element()
Returns the full ElementTree of the class
get_attributes()
Returns a dictionary of all attributes of the class
"""
def __init__(self, trafficsignalref, phase):
"""initalize the TrafficSignalControllerCondition
Parameters
----------
trafficsignalref (str): ???
phase (str): ???
"""
self.trafficsignalref = trafficsignalref
self.phase = phase
def __eq__(self, other):
if isinstance(other, TrafficSignalControllerCondition):
if self.get_attributes() == other.get_attributes():
return True
return False
@staticmethod
def parse(element):
"""Parses the xml element of TrafficSignalControllerCondition
Parameters
----------
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
-------
condition (TrafficSignalControllerCondition): a TrafficSignalControllerCondition object
"""
trafficsignalref = element.attrib["trafficSignalControllerRef"]
phase = element.attrib["phase"]
return TrafficSignalControllerCondition(trafficsignalref, phase)
def get_attributes(self):
"""returns the attributes of the TrafficSignalControllerCondition as a dict"""
return {
"trafficSignalControllerRef": self.trafficsignalref,
"phase": self.phase,
}
def get_element(self):
"""returns the elementTree of the TrafficSignalControllerCondition"""
return ET.Element(
"TrafficSignalControllerCondition", attrib=self.get_attributes()
)
Classes
class AccelerationCondition (value, rule, direction=None)
-
the AccelerationCondition class is an Entity Condition used by the EntityTrigger
Parameters
value (float): acceleration rule (Rule): condition rule of triggering direction (DirectionalDimension) Direction of the acceleration (if not given, the total acceleration is considered) Default: None
Attributes
value (float): acceleration rule (Rule): condition rule of triggering direction (DirectionalDimension) Direction of the acceleration (if not given, the total acceleration is considered)
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
the AccelerationCondition class is an Entity Condition used by the EntityTrigger
Parameters
value (float): acceleration rule (Rule): condition rule of triggering direction (DirectionalDimension) Direction of the acceleration (if not given, the total acceleration is considered). Valid since OSC 1.2
Expand source code
class AccelerationCondition(_EntityTriggerType): """the AccelerationCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- value (float): acceleration rule (Rule): condition rule of triggering direction (DirectionalDimension) Direction of the acceleration (if not given, the total acceleration is considered) Default: None Attributes ---------- value (float): acceleration rule (Rule): condition rule of triggering direction (DirectionalDimension) Direction of the acceleration (if not given, the total acceleration is considered) Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, value, rule, direction=None): """the AccelerationCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- value (float): acceleration rule (Rule): condition rule of triggering direction (DirectionalDimension) Direction of the acceleration (if not given, the total acceleration is considered). Valid since OSC 1.2 """ self.value = convert_float(value) self.rule = convert_enum(rule, Rule) self.direction = convert_enum(direction, DirectionalDimension, True) def __eq__(self, other): if isinstance(other, AccelerationCondition): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of AccelerationCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (AccelerationCondition): a AccelerationCondition object """ direction = None condition = element.find("AccelerationCondition") value = convert_float(condition.attrib["value"]) rule = convert_enum(condition.attrib["rule"], Rule) if "direction" in condition.attrib: direction = convert_enum( condition.attrib["direction"], DirectionalDimension ) return AccelerationCondition(value, rule, direction) def get_attributes(self): """returns the attributes of the AccelerationCondition as a dict""" retdict = {} retdict["value"] = str(self.value) retdict["rule"] = self.rule.get_name() if self.direction is not None: if self.isVersionEqLess(minor=1): raise OpenSCENARIOVersionError("Direction was introduced in OSC 1.2") retdict["direction"] = self.direction.get_name() return retdict def get_element(self): """returns the elementTree of the AccelerationCondition""" element = ET.Element("EntityCondition") ET.SubElement(element, "AccelerationCondition", attrib=self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.utils._EntityTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of AccelerationCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (AccelerationCondition): a AccelerationCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of AccelerationCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (AccelerationCondition): a AccelerationCondition object """ direction = None condition = element.find("AccelerationCondition") value = convert_float(condition.attrib["value"]) rule = convert_enum(condition.attrib["rule"], Rule) if "direction" in condition.attrib: direction = convert_enum( condition.attrib["direction"], DirectionalDimension ) return AccelerationCondition(value, rule, direction)
Methods
def get_attributes(self)
-
returns the attributes of the AccelerationCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the AccelerationCondition as a dict""" retdict = {} retdict["value"] = str(self.value) retdict["rule"] = self.rule.get_name() if self.direction is not None: if self.isVersionEqLess(minor=1): raise OpenSCENARIOVersionError("Direction was introduced in OSC 1.2") retdict["direction"] = self.direction.get_name() return retdict
def get_element(self)
-
returns the elementTree of the AccelerationCondition
Expand source code
def get_element(self): """returns the elementTree of the AccelerationCondition""" element = ET.Element("EntityCondition") ET.SubElement(element, "AccelerationCondition", attrib=self.get_attributes()) return element
class CollisionCondition (entity)
-
the CollisionCondition class is an Entity Condition used by the EntityTrigger
Parameters
entity (str or ObjectType): name of the entity to collide with
Attributes
entity (str or ObjectType): name of the entity to collide with
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
the CollisionCondition class is an Entity Condition used by the EntityTrigger
Parameters
entity (str or ObjectType): name of the entity to collide with
Expand source code
class CollisionCondition(_EntityTriggerType): """the CollisionCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- entity (str or ObjectType): name of the entity to collide with Attributes ---------- entity (str or ObjectType): name of the entity to collide with Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, entity): """the CollisionCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- entity (str or ObjectType): name of the entity to collide with """ self.entity = entity if not isinstance(self.entity, str): self.entity = convert_enum(self.entity, ObjectType) def __eq__(self, other): if isinstance(other, CollisionCondition): if self.entity == other.entity: return True return False @staticmethod def parse(element): """Parses the xml element of CollisionCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (CollisionCondition): a CollisionCondition object """ condition = element.find("CollisionCondition") bytype = condition.find("ByType") if bytype is not None: entity = convert_enum(bytype.attrib["type"], ObjectType) else: entityref = EntityRef.parse(condition.find("EntityRef")) entity = entityref.entity return CollisionCondition(entity) def get_element(self): """returns the elementTree of the CollisionCondition""" element = ET.Element("EntityCondition") colcond = ET.SubElement(element, "CollisionCondition") if isinstance(self.entity, str): colcond.append(EntityRef(self.entity).get_element()) else: ET.SubElement(colcond, "ByType", {"type": self.entity.get_name()}) return element
Ancestors
- scenariogeneration.xosc.utils._EntityTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of CollisionCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (CollisionCondition): a CollisionCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of CollisionCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (CollisionCondition): a CollisionCondition object """ condition = element.find("CollisionCondition") bytype = condition.find("ByType") if bytype is not None: entity = convert_enum(bytype.attrib["type"], ObjectType) else: entityref = EntityRef.parse(condition.find("EntityRef")) entity = entityref.entity return CollisionCondition(entity)
Methods
def get_element(self)
-
returns the elementTree of the CollisionCondition
Expand source code
def get_element(self): """returns the elementTree of the CollisionCondition""" element = ET.Element("EntityCondition") colcond = ET.SubElement(element, "CollisionCondition") if isinstance(self.entity, str): colcond.append(EntityRef(self.entity).get_element()) else: ET.SubElement(colcond, "ByType", {"type": self.entity.get_name()}) return element
class ConditionGroup (triggeringpoint='start')
-
The ConditionGroup class creates a Trigger that can be used if multiple Conditions are wanted The ConditionGroups acts like an "AND" logic for all added conditions
Parameters
triggeringpoint (str): start or stop (not needed if used with the Trigger class) Default: start
Attributes
triggeringpoint (str): start or stop conditions (list of EntityTriggers and Valuetriggers): a list of all conditions
Methods
get_element() Returns the full ElementTree of the class add_condition(condition) Adds a condition to the ConditionGroup
initalize the ConditionGroup
Parameters
triggeringpoint (str): start or stop
Expand source code
class ConditionGroup(_TriggerType): """The ConditionGroup class creates a Trigger that can be used if multiple Conditions are wanted The ConditionGroups acts like an "AND" logic for all added conditions Parameters ---------- triggeringpoint (str): start or stop (not needed if used with the Trigger class) Default: start Attributes ---------- triggeringpoint (str): start or stop conditions (list of EntityTriggers and Valuetriggers): a list of all conditions Methods ------- get_element() Returns the full ElementTree of the class add_condition(condition) Adds a condition to the ConditionGroup """ def __init__(self, triggeringpoint="start"): """initalize the ConditionGroup Parameters ---------- triggeringpoint (str): start or stop """ if triggeringpoint not in ["start", "stop"]: raise ValueError("not a valid triggering point, valid start or stop") if triggeringpoint == "start": self._triggerpoint = "StartTrigger" else: self._triggerpoint = "StopTrigger" self.conditions = [] def __eq__(self, other): if isinstance(other, ConditionGroup): if ( self.conditions == other.conditions and self._triggerpoint == other._triggerpoint ): return True elif isinstance(other, Trigger): if len(other.conditiongroups) == 1: if ( self._triggerpoint == other._triggerpoint and other.conditiongroups[0] == self ): return True elif isinstance(other, EntityTrigger) or isinstance(other, ValueTrigger): if len(self.conditions) == 1: if ( self._triggerpoint == other._triggerpoint and self.conditions[0] == other ): return True return False @staticmethod def parse(element): """Parses the xml element of ConditionGroup Note: if Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- conditiongroup (ConditionGroup): a ConditionGroup object """ condgr = ConditionGroup() conditions = element.findall("Condition") for cond in conditions: condgr.add_condition(_ConditionFactory().parse_condition(cond)) return condgr def add_condition(self, condition): """Adds a condition (EntityTrigger or ValueTrigger) to the ConditionGroup Parameters ---------- condition (EntityTrigger, or ValueTrigger): a condition to add to the ConditionGroup """ if not ( isinstance(condition, EntityTrigger) or isinstance(condition, ValueTrigger) ): raise TypeError("condition input not of type EntityTrigger or ValueTrigger") condition._set_used_by_parent() self.conditions.append(condition) self._used_by_parent = False return self def _set_used_by_parent(self): """_set_used_by_parent is used internaly if the condition group is added to a Trigger""" self._used_by_parent = True def get_element(self): """returns the elementTree of the ConditionGroup""" if not self.conditions: raise ValueError("No conditions were added to the ConditionGroup") condgroup = ET.Element("ConditionGroup") for c in self.conditions: condgroup.append(c.get_element()) if self._used_by_parent: return condgroup else: # could create a new Trigger here, but went with this solution for now element = ET.Element(self._triggerpoint) element.append(condgroup) return element
Ancestors
- scenariogeneration.xosc.utils._TriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of ConditionGroup Note: if
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
conditiongroup (ConditionGroup): a ConditionGroup object
Expand source code
@staticmethod def parse(element): """Parses the xml element of ConditionGroup Note: if Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- conditiongroup (ConditionGroup): a ConditionGroup object """ condgr = ConditionGroup() conditions = element.findall("Condition") for cond in conditions: condgr.add_condition(_ConditionFactory().parse_condition(cond)) return condgr
Methods
def add_condition(self, condition)
-
Adds a condition (EntityTrigger or ValueTrigger) to the ConditionGroup
Parameters
condition (EntityTrigger, or ValueTrigger): a condition to add to the ConditionGroup
Expand source code
def add_condition(self, condition): """Adds a condition (EntityTrigger or ValueTrigger) to the ConditionGroup Parameters ---------- condition (EntityTrigger, or ValueTrigger): a condition to add to the ConditionGroup """ if not ( isinstance(condition, EntityTrigger) or isinstance(condition, ValueTrigger) ): raise TypeError("condition input not of type EntityTrigger or ValueTrigger") condition._set_used_by_parent() self.conditions.append(condition) self._used_by_parent = False return self
def get_element(self)
-
returns the elementTree of the ConditionGroup
Expand source code
def get_element(self): """returns the elementTree of the ConditionGroup""" if not self.conditions: raise ValueError("No conditions were added to the ConditionGroup") condgroup = ET.Element("ConditionGroup") for c in self.conditions: condgroup.append(c.get_element()) if self._used_by_parent: return condgroup else: # could create a new Trigger here, but went with this solution for now element = ET.Element(self._triggerpoint) element.append(condgroup) return element
class DistanceCondition (value, rule, position, alongroute=True, freespace=True, distance_type=<scenariogeneration.xosc.enumerations._OscEnum object>, coordinate_system=<scenariogeneration.xosc.enumerations._OscEnum object>, routing_algorithm=None)
-
the DistanceCondition class is an Entity Condition used by the EntityTrigger
Parameters
value (float): distance to position rule (Rule): condition rule of triggering position (*Position): any position to reach alongroute (bool): if the route should count (depricated in V.1.0) Default: True freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1) Default: RelativeDistanceType.longitudinal coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1) Default: CoordinateSystem.road routing_algorithm (RoutingAlgorithm): the routing algorithm to use if a relevant coordinate system is used (road/lane) Default: RoutingAlgorithm.undefined
Attributes
value (float): distance to position rule (Rule): condition rule of triggering position (*Position): any position to reach alongroute (bool): if the route should count freespace (bool): (True) distance between bounding boxes, (False) distance between ref point distance_type (RelativeDistanceType): how the relative distance should be calculated coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance routing_algorithm (RoutingAlgorithm): the routing algorithm to use if a relevant coordinate system is used (road/lane)
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
Expand source code
class DistanceCondition(_EntityTriggerType): """the DistanceCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- value (float): distance to position rule (Rule): condition rule of triggering position (*Position): any position to reach alongroute (bool): if the route should count (depricated in V.1.0) Default: True freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1) Default: RelativeDistanceType.longitudinal coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1) Default: CoordinateSystem.road routing_algorithm (RoutingAlgorithm): the routing algorithm to use if a relevant coordinate system is used (road/lane) Default: RoutingAlgorithm.undefined Attributes ---------- value (float): distance to position rule (Rule): condition rule of triggering position (*Position): any position to reach alongroute (bool): if the route should count freespace (bool): (True) distance between bounding boxes, (False) distance between ref point distance_type (RelativeDistanceType): how the relative distance should be calculated coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance routing_algorithm (RoutingAlgorithm): the routing algorithm to use if a relevant coordinate system is used (road/lane) Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__( self, value, rule, position, alongroute=True, freespace=True, distance_type=RelativeDistanceType.longitudinal, coordinate_system=CoordinateSystem.road, routing_algorithm=None, ): self.value = value self.alongroute = convert_bool(alongroute) self.freespace = convert_bool(freespace) self.rule = convert_enum(rule, Rule) if not (isinstance(position, _PositionType)): raise TypeError("position input is not a valid Position") self.position = position self.relative_distance_type = convert_enum(distance_type, RelativeDistanceType) self.coordinate_system = convert_enum(coordinate_system, CoordinateSystem) self.routing_algorithm = convert_enum(routing_algorithm, RoutingAlgorithm, True) def __eq__(self, other): if isinstance(other, DistanceCondition): if ( self.get_attributes() == other.get_attributes() and self.position == other.position ): return True return False @staticmethod def parse(element): """Parses the xml element of DistanceCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (DistanceCondition): a DistanceCondition object """ condition = element.find("DistanceCondition") value = condition.attrib["value"] rule = convert_enum(condition.attrib["rule"], Rule) freespace = convert_bool(condition.attrib["freespace"]) if "alongRoute" in condition.attrib: alongroute = convert_bool(condition.attrib["alongRoute"]) else: alongroute = True if "relativeDistanceType" in condition.attrib: reldisttype = convert_enum( condition.attrib["relativeDistanceType"], RelativeDistanceType ) else: reldisttype = RelativeDistanceType.longitudinal if "coordinateSystem" in condition.attrib: coordsystem = convert_enum( condition.attrib["coordinateSystem"], CoordinateSystem ) else: coordsystem = CoordinateSystem.road if "routingAlgorithm" in condition.attrib: routing_algorithm = convert_enum( condition.attrib["routingAlgorithm"], RoutingAlgorithm ) else: routing_algorithm = None position = None position = _PositionFactory.parse_position(condition.find("Position")) return DistanceCondition( value, rule, position, alongroute, freespace, reldisttype, coordsystem, routing_algorithm, ) def get_attributes(self): """returns the attributes of the DistanceCondition as a dict""" basedict = {} basedict["value"] = str(self.value) basedict["freespace"] = get_bool_string(self.freespace) basedict["rule"] = self.rule.get_name() if self.isVersion(minor=0): basedict["alongRoute"] = get_bool_string(self.alongroute) else: basedict["relativeDistanceType"] = self.relative_distance_type.get_name() basedict["coordinateSystem"] = self.coordinate_system.get_name() if self.routing_algorithm is not None: if self.isVersionEqLess(minor=1): raise OpenSCENARIOVersionError( "routing algorithm was introduced in OSC 1.2" ) basedict["routingAlgorithm"] = self.routing_algorithm.get_name() return basedict def get_element(self): """returns the elementTree of the DistanceCondition""" element = ET.Element("EntityCondition") distancecond = ET.SubElement( element, "DistanceCondition", attrib=self.get_attributes() ) distancecond.append(self.position.get_element()) return element
Ancestors
- scenariogeneration.xosc.utils._EntityTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of DistanceCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (DistanceCondition): a DistanceCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of DistanceCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (DistanceCondition): a DistanceCondition object """ condition = element.find("DistanceCondition") value = condition.attrib["value"] rule = convert_enum(condition.attrib["rule"], Rule) freespace = convert_bool(condition.attrib["freespace"]) if "alongRoute" in condition.attrib: alongroute = convert_bool(condition.attrib["alongRoute"]) else: alongroute = True if "relativeDistanceType" in condition.attrib: reldisttype = convert_enum( condition.attrib["relativeDistanceType"], RelativeDistanceType ) else: reldisttype = RelativeDistanceType.longitudinal if "coordinateSystem" in condition.attrib: coordsystem = convert_enum( condition.attrib["coordinateSystem"], CoordinateSystem ) else: coordsystem = CoordinateSystem.road if "routingAlgorithm" in condition.attrib: routing_algorithm = convert_enum( condition.attrib["routingAlgorithm"], RoutingAlgorithm ) else: routing_algorithm = None position = None position = _PositionFactory.parse_position(condition.find("Position")) return DistanceCondition( value, rule, position, alongroute, freespace, reldisttype, coordsystem, routing_algorithm, )
Methods
def get_attributes(self)
-
returns the attributes of the DistanceCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the DistanceCondition as a dict""" basedict = {} basedict["value"] = str(self.value) basedict["freespace"] = get_bool_string(self.freespace) basedict["rule"] = self.rule.get_name() if self.isVersion(minor=0): basedict["alongRoute"] = get_bool_string(self.alongroute) else: basedict["relativeDistanceType"] = self.relative_distance_type.get_name() basedict["coordinateSystem"] = self.coordinate_system.get_name() if self.routing_algorithm is not None: if self.isVersionEqLess(minor=1): raise OpenSCENARIOVersionError( "routing algorithm was introduced in OSC 1.2" ) basedict["routingAlgorithm"] = self.routing_algorithm.get_name() return basedict
def get_element(self)
-
returns the elementTree of the DistanceCondition
Expand source code
def get_element(self): """returns the elementTree of the DistanceCondition""" element = ET.Element("EntityCondition") distancecond = ET.SubElement( element, "DistanceCondition", attrib=self.get_attributes() ) distancecond.append(self.position.get_element()) return element
class EmptyTrigger (triggeringpoint='start')
-
EmptyTrigger creates an empty trigger
Parameters
triggeringpoint (str): start or stop
Attributes
Methods
get_element() Returns the full ElementTree of the class
initalizes the emtpy trigger
Parameters
triggeringpoint (str): start or stop
Expand source code
class EmptyTrigger(_TriggerType): """EmptyTrigger creates an empty trigger Parameters ---------- triggeringpoint (str): start or stop Attributes ---------- Methods ------- get_element() Returns the full ElementTree of the class """ def __init__(self, triggeringpoint="start"): """initalizes the emtpy trigger Parameters ---------- triggeringpoint (str): start or stop """ if triggeringpoint not in ["start", "stop"]: raise ValueError("not a valid triggering point, valid start or stop") if triggeringpoint == "start": self._triggerpoint = "StartTrigger" else: self._triggerpoint = "StopTrigger" def __eq__(self, other): if isinstance(other, EmptyTrigger): if self._triggerpoint == other._triggerpoint: return True elif isinstance(other, Trigger): if ( len(other.conditiongroups) == 0 and self._triggerpoint == other._triggerpoint ): return True return False def get_element(self): """returns the elementTree of the Trigger""" return ET.Element(self._triggerpoint)
Ancestors
- scenariogeneration.xosc.utils._TriggerType
- VersionBase
Methods
def get_element(self)
-
returns the elementTree of the Trigger
Expand source code
def get_element(self): """returns the elementTree of the Trigger""" return ET.Element(self._triggerpoint)
class EndOfRoadCondition (duration)
-
the EndOfRoadCondition class is an Entity Condition used by the EntityTrigger
Parameters
duration (float): the duration at the en of road
Attributes
duration (float): the duration at the en of road
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the EndOfRoadCondition
Parameters
duration (float): the duration after the condition
Expand source code
class EndOfRoadCondition(_EntityTriggerType): """the EndOfRoadCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- duration (float): the duration at the en of road Attributes ---------- duration (float): the duration at the en of road Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, duration): """initalize the EndOfRoadCondition Parameters ---------- duration (float): the duration after the condition """ self.duration = convert_float(duration) def __eq__(self, other): if isinstance(other, EndOfRoadCondition): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of EndOfRoadCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (EndOfRoadCondition): a EndOfRoadCondition object """ condition = element.find("EndOfRoadCondition") duration = convert_float(condition.attrib["duration"]) return EndOfRoadCondition(duration) def get_attributes(self): """returns the attributes of the EndOfRoadCondition as a dict""" return {"duration": str(self.duration)} def get_element(self): """returns the elementTree of the EndOfRoadCondition""" element = ET.Element("EntityCondition") ET.SubElement(element, "EndOfRoadCondition", attrib=self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.utils._EntityTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of EndOfRoadCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (EndOfRoadCondition): a EndOfRoadCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of EndOfRoadCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (EndOfRoadCondition): a EndOfRoadCondition object """ condition = element.find("EndOfRoadCondition") duration = convert_float(condition.attrib["duration"]) return EndOfRoadCondition(duration)
Methods
def get_attributes(self)
-
returns the attributes of the EndOfRoadCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the EndOfRoadCondition as a dict""" return {"duration": str(self.duration)}
def get_element(self)
-
returns the elementTree of the EndOfRoadCondition
Expand source code
def get_element(self): """returns the elementTree of the EndOfRoadCondition""" element = ET.Element("EntityCondition") ET.SubElement(element, "EndOfRoadCondition", attrib=self.get_attributes()) return element
class EntityTrigger (name, delay, conditionedge, entitycondition, triggerentity, triggeringrule=<scenariogeneration.xosc.enumerations._OscEnum object>, triggeringpoint='start')
-
the EntityTrigger creates an Trigger containing an EntityTrigger
Parameters
name (str): name of the trigger delay (float): the delay of the trigger conditionedge (ConditionEdge): on what conditionedge the trigger should act entitycondotion (*Condition): an entity condition triggeringentity (str): the entity of the trigger triggeringrule (TriggeringEntitiesRule): rule of the trigger Default: 'any' triggeringpoint (str): start or stop
Attributes
name (str): name of the trigger delay (float): the delay of the trigger conditionedge (ConditionEdge): the condition edge entitycondition (*EntityCondition): the entitycondition triggerentity (TriggeringEntities): the triggering entity
Methods
get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the EntityTrigger
Parameters
name (str): name of the trigger delay (float): the delay of the trigger conditionedge (ConditionEdge): on what conditionedge the trigger should act entitycondotion (*EntityCondition): an entity condition triggeringentity (str): the entity of the trigger triggeringrule (TriggeringEntitiesRule): rule of the trigger Default: 'any' triggeringpoint (str): start or stop
Expand source code
class EntityTrigger(_TriggerType): """the EntityTrigger creates an Trigger containing an EntityTrigger Parameters ---------- name (str): name of the trigger delay (float): the delay of the trigger conditionedge (ConditionEdge): on what conditionedge the trigger should act entitycondotion (*Condition): an entity condition triggeringentity (str): the entity of the trigger triggeringrule (TriggeringEntitiesRule): rule of the trigger Default: 'any' triggeringpoint (str): start or stop Attributes ---------- name (str): name of the trigger delay (float): the delay of the trigger conditionedge (ConditionEdge): the condition edge entitycondition (*EntityCondition): the entitycondition triggerentity (TriggeringEntities): the triggering entity Methods ------- get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__( self, name, delay, conditionedge, entitycondition, triggerentity, triggeringrule=TriggeringEntitiesRule.any, triggeringpoint="start", ): """initalize the EntityTrigger Parameters ---------- name (str): name of the trigger delay (float): the delay of the trigger conditionedge (ConditionEdge): on what conditionedge the trigger should act entitycondotion (*EntityCondition): an entity condition triggeringentity (str): the entity of the trigger triggeringrule (TriggeringEntitiesRule): rule of the trigger Default: 'any' triggeringpoint (str): start or stop """ self.name = name if triggeringpoint not in ["start", "stop"]: raise ValueError("not a valid triggering point, valid start or stop") if triggeringpoint == "start": self._triggerpoint = "StartTrigger" else: self._triggerpoint = "StopTrigger" self.delay = convert_float(delay) self.conditionedge = convert_enum(conditionedge, ConditionEdge) if not isinstance(entitycondition, _EntityTriggerType): raise TypeError("entitycondition is not a valid EntityCondition") self.entitycondition = entitycondition self.triggerentity = TriggeringEntities(triggeringrule) self.triggerentity.add_entity(triggerentity) self._used_by_parent = False def __eq__(self, other): if isinstance(other, EntityTrigger): if ( self.get_attributes() == other.get_attributes() and self.triggerentity == other.triggerentity and self.entitycondition == other.entitycondition and self._triggerpoint == other._triggerpoint ): return True elif isinstance(other, Trigger): if ( len(other.conditiongroups) == 1 and len(other.conditiongroups[0].conditions) == 1 ): if ( self._triggerpoint == other._triggerpoint and other.conditiongroups[0].conditions[0] == self ): return True elif isinstance(other, ConditionGroup): if len(other.conditions) == 1: if ( self._triggerpoint == other._triggerpoint and other.conditions[0] == self ): return True return False @staticmethod def parse(element): """Parses the xml element of EntityTrigger NOTE: this parser will ONLY parse the Condition itself, not the CondintionGroup or Trigger that it can generate Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (EntityTrigger): a EntityTrigger object """ if element.tag != "Condition": raise NotAValidElement( "ValueTrigger only parses a Condition, not ", element ) name = element.attrib["name"] delay = convert_float(element.attrib["delay"]) conditionedge = convert_enum(element.attrib["conditionEdge"], ConditionEdge) entityconditionelement = element.find("ByEntityCondition") triggering_entities = TriggeringEntities.parse( entityconditionelement.find("TriggeringEntities") ) condition = _EntityConditionFactory.parse_entity_condition( entityconditionelement.find("EntityCondition") ) enttrig = EntityTrigger(name, delay, conditionedge, condition, "") enttrig.triggerentity = triggering_entities return enttrig def _set_used_by_parent(self): """_set_used_by_parent is used internaly if the condition is added to a ConditionGroup""" self._used_by_parent = True def add_triggering_entity(self, triggerentity): """adds additional triggering entities to a trigger Parameters ---------- triggeringentity (str) """ self.triggerentity.add_entity(triggerentity) return self def get_attributes(self): """returns the attributes of the LaneOffsetAction as a dict""" return { "name": self.name, "delay": str(self.delay), "conditionEdge": self.conditionedge.get_name(), } def get_element(self): """returns the elementTree of the LaneOffsetAction""" condition = ET.Element("Condition", attrib=self.get_attributes()) byentity = ET.SubElement(condition, "ByEntityCondition") byentity.append(self.triggerentity.get_element()) byentity.append(self.entitycondition.get_element()) if self._used_by_parent: return condition else: # could create a new Trigger ConditionGroup here, but went with this solution for now element = ET.Element(self._triggerpoint) condgroup = ET.SubElement(element, "ConditionGroup") condgroup.append(condition) return element
Ancestors
- scenariogeneration.xosc.utils._TriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of EntityTrigger NOTE: this parser will ONLY parse the Condition itself, not the CondintionGroup or Trigger that it can generate
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (EntityTrigger): a EntityTrigger object
Expand source code
@staticmethod def parse(element): """Parses the xml element of EntityTrigger NOTE: this parser will ONLY parse the Condition itself, not the CondintionGroup or Trigger that it can generate Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (EntityTrigger): a EntityTrigger object """ if element.tag != "Condition": raise NotAValidElement( "ValueTrigger only parses a Condition, not ", element ) name = element.attrib["name"] delay = convert_float(element.attrib["delay"]) conditionedge = convert_enum(element.attrib["conditionEdge"], ConditionEdge) entityconditionelement = element.find("ByEntityCondition") triggering_entities = TriggeringEntities.parse( entityconditionelement.find("TriggeringEntities") ) condition = _EntityConditionFactory.parse_entity_condition( entityconditionelement.find("EntityCondition") ) enttrig = EntityTrigger(name, delay, conditionedge, condition, "") enttrig.triggerentity = triggering_entities return enttrig
Methods
def add_triggering_entity(self, triggerentity)
-
adds additional triggering entities to a trigger
Parameters
triggeringentity (str)
Expand source code
def add_triggering_entity(self, triggerentity): """adds additional triggering entities to a trigger Parameters ---------- triggeringentity (str) """ self.triggerentity.add_entity(triggerentity) return self
def get_attributes(self)
-
returns the attributes of the LaneOffsetAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the LaneOffsetAction as a dict""" return { "name": self.name, "delay": str(self.delay), "conditionEdge": self.conditionedge.get_name(), }
def get_element(self)
-
returns the elementTree of the LaneOffsetAction
Expand source code
def get_element(self): """returns the elementTree of the LaneOffsetAction""" condition = ET.Element("Condition", attrib=self.get_attributes()) byentity = ET.SubElement(condition, "ByEntityCondition") byentity.append(self.triggerentity.get_element()) byentity.append(self.entitycondition.get_element()) if self._used_by_parent: return condition else: # could create a new Trigger ConditionGroup here, but went with this solution for now element = ET.Element(self._triggerpoint) condgroup = ET.SubElement(element, "ConditionGroup") condgroup.append(condition) return element
class OffroadCondition (duration)
-
the OffroadCondition class is an Entity Condition used by the EntityTrigger
Parameters
duration (float): the duration of offroad
Attributes
duration (float): the duration of offroad
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the OffroadCondition
Parameters
duration (float): the duration of offroad
Expand source code
class OffroadCondition(_EntityTriggerType): """the OffroadCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- duration (float): the duration of offroad Attributes ---------- duration (float): the duration of offroad Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, duration): """initalize the OffroadCondition Parameters ---------- duration (float): the duration of offroad """ self.duration = convert_float(duration) def __eq__(self, other): if isinstance(other, OffroadCondition): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of OffroadCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (OffroadCondition): a OffroadCondition object """ condition = element.find("OffroadCondition") duration = convert_float(condition.attrib["duration"]) return OffroadCondition(duration) def get_attributes(self): """returns the attributes of the OffroadCondition as a dict""" return {"duration": str(self.duration)} def get_element(self): """returns the elementTree of the OffroadCondition""" element = ET.Element("EntityCondition") ET.SubElement(element, "OffroadCondition", attrib=self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.utils._EntityTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of OffroadCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (OffroadCondition): a OffroadCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of OffroadCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (OffroadCondition): a OffroadCondition object """ condition = element.find("OffroadCondition") duration = convert_float(condition.attrib["duration"]) return OffroadCondition(duration)
Methods
def get_attributes(self)
-
returns the attributes of the OffroadCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the OffroadCondition as a dict""" return {"duration": str(self.duration)}
def get_element(self)
-
returns the elementTree of the OffroadCondition
Expand source code
def get_element(self): """returns the elementTree of the OffroadCondition""" element = ET.Element("EntityCondition") ET.SubElement(element, "OffroadCondition", attrib=self.get_attributes()) return element
class ParameterCondition (parameter, value, rule)
-
the ParameterCondition class is an Value Condition used by the ValueTrigger
Parameters
parameter (str): the parameter to trigger on value (int): value to trigger on rule (Rule): condition rule of triggering
Attributes
parameter (str): the parameter to trigger on value (int): value to trigger on rule (Rule): condition rule of triggering
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the ParameterCondition
Parameters
parameter (str): the parameter to trigger on value (int): value to trigger on rule (Rule): condition rule of triggering
Expand source code
class ParameterCondition(_ValueTriggerType): """the ParameterCondition class is an Value Condition used by the ValueTrigger Parameters ---------- parameter (str): the parameter to trigger on value (int): value to trigger on rule (Rule): condition rule of triggering Attributes ---------- parameter (str): the parameter to trigger on value (int): value to trigger on rule (Rule): condition rule of triggering Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, parameter, value, rule): """initalize the ParameterCondition Parameters ---------- parameter (str): the parameter to trigger on value (int): value to trigger on rule (Rule): condition rule of triggering """ self.parameter = parameter self.value = value self.rule = convert_enum(rule, Rule) def __eq__(self, other): if isinstance(other, ParameterCondition): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of ParameterCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (ParameterCondition): a ParameterCondition object """ parameter = element.attrib["parameterRef"] value = element.attrib["value"] rule = convert_enum(element.attrib["rule"], Rule) return ParameterCondition(parameter, value, rule) def get_attributes(self): """returns the attributes of the ParameterCondition as a dict""" basedict = {"parameterRef": self.parameter, "value": str(self.value)} basedict["rule"] = self.rule.get_name() return basedict def get_element(self): """returns the elementTree of the ParameterCondition""" return ET.Element("ParameterCondition", attrib=self.get_attributes())
Ancestors
- scenariogeneration.xosc.utils._ValueTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of ParameterCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (ParameterCondition): a ParameterCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of ParameterCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (ParameterCondition): a ParameterCondition object """ parameter = element.attrib["parameterRef"] value = element.attrib["value"] rule = convert_enum(element.attrib["rule"], Rule) return ParameterCondition(parameter, value, rule)
Methods
def get_attributes(self)
-
returns the attributes of the ParameterCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the ParameterCondition as a dict""" basedict = {"parameterRef": self.parameter, "value": str(self.value)} basedict["rule"] = self.rule.get_name() return basedict
def get_element(self)
-
returns the elementTree of the ParameterCondition
Expand source code
def get_element(self): """returns the elementTree of the ParameterCondition""" return ET.Element("ParameterCondition", attrib=self.get_attributes())
class ReachPositionCondition (position, tolerance)
-
the ReachPositionCondition class is an Entity Condition used by the EntityTrigger
Parameters
position (*Position): any position to reach tolerance (float): tolerance of the position
Attributes
position (*Position): any position to reach tolerance (float): tolerance of the position
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the ReachPositionCondition
Parameters
position (*Position): any position to reach tolerance (float): tolerance of the position
Expand source code
class ReachPositionCondition(_EntityTriggerType): """the ReachPositionCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- position (*Position): any position to reach tolerance (float): tolerance of the position Attributes ---------- position (*Position): any position to reach tolerance (float): tolerance of the position Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, position, tolerance): """initalize the ReachPositionCondition Parameters ---------- position (*Position): any position to reach tolerance (float): tolerance of the position """ if not (isinstance(position, _PositionType)): raise TypeError("position input is not a valid Position") self.position = position self.tolerance = convert_float(tolerance) def __eq__(self, other): if isinstance(other, ReachPositionCondition): if ( self.get_attributes() == other.get_attributes() and self.position == other.position ): return True return False @staticmethod def parse(element): """Parses the xml element of ReachPositionCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (ReachPositionCondition): a ReachPositionCondition object """ condition = element.find("ReachPositionCondition") tolerance = convert_float(condition.attrib["tolerance"]) position = _PositionFactory.parse_position(condition.find("Position")) return ReachPositionCondition(position, tolerance) def get_attributes(self): """returns the attributes of the ReachPositionCondition as a dict""" return {"tolerance": str(self.tolerance)} def get_element(self): """returns the elementTree of the ReachPositionCondition""" element = ET.Element("EntityCondition") reachposcond = ET.SubElement( element, "ReachPositionCondition", attrib=self.get_attributes() ) reachposcond.append(self.position.get_element()) if self.isVersion(minor=2): Warning( "ReachPositionCondition is deprecrated, please use DistanceCondition instead" ) return element
Ancestors
- scenariogeneration.xosc.utils._EntityTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of ReachPositionCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (ReachPositionCondition): a ReachPositionCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of ReachPositionCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (ReachPositionCondition): a ReachPositionCondition object """ condition = element.find("ReachPositionCondition") tolerance = convert_float(condition.attrib["tolerance"]) position = _PositionFactory.parse_position(condition.find("Position")) return ReachPositionCondition(position, tolerance)
Methods
def get_attributes(self)
-
returns the attributes of the ReachPositionCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the ReachPositionCondition as a dict""" return {"tolerance": str(self.tolerance)}
def get_element(self)
-
returns the elementTree of the ReachPositionCondition
Expand source code
def get_element(self): """returns the elementTree of the ReachPositionCondition""" element = ET.Element("EntityCondition") reachposcond = ET.SubElement( element, "ReachPositionCondition", attrib=self.get_attributes() ) reachposcond.append(self.position.get_element()) if self.isVersion(minor=2): Warning( "ReachPositionCondition is deprecrated, please use DistanceCondition instead" ) return element
class RelativeClearanceCondition (opposite_lanes, distance_backward=0, distance_forward=0, freespace=True)
-
the RelativeClearanceCondition class is an Entity Condition used by the EntityTrigger
Parameters
distance_backward (float): distance backwards distance_forward (float): distance forward freespace (bool): (True) distance between bounding boxes, (False) distance between ref point opposite_lanes (bool): if lanes in opposite direction are considered
Attributes
distance_backward (float): distance backwards distance_forward (float): distance forward freespace (bool): (True) distance between bounding boxes, (False) distance between ref point opposite_lanes (bool): if lanes in opposite direction are considered entities (list of EntityRef): specific entities to look for lane_ranges (list of tuple): lanes to be checked
Methods
add_entity(entity) adds an entity to the RelativeClearanceCondition add_relative_lane_range(from, to) adds a RelativeLaneRange to the RelativeClearanceCondition parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the RelativeDistanceCondition
Parameters
distance_backward (float): distance backwards distance_forward (float): distance forward freespace (bool): (True) distance between bounding boxes, (False) distance between ref point opposite_lanes (bool): if lanes in opposite direction are considered
Expand source code
class RelativeClearanceCondition(_EntityTriggerType): """the RelativeClearanceCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- distance_backward (float): distance backwards distance_forward (float): distance forward freespace (bool): (True) distance between bounding boxes, (False) distance between ref point opposite_lanes (bool): if lanes in opposite direction are considered Attributes ---------- distance_backward (float): distance backwards distance_forward (float): distance forward freespace (bool): (True) distance between bounding boxes, (False) distance between ref point opposite_lanes (bool): if lanes in opposite direction are considered entities (list of EntityRef): specific entities to look for lane_ranges (list of tuple): lanes to be checked Methods ------- add_entity(entity) adds an entity to the RelativeClearanceCondition add_relative_lane_range(from, to) adds a RelativeLaneRange to the RelativeClearanceCondition parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__( self, opposite_lanes, distance_backward=0, distance_forward=0, freespace=True, ): """initalize the RelativeDistanceCondition Parameters ---------- distance_backward (float): distance backwards distance_forward (float): distance forward freespace (bool): (True) distance between bounding boxes, (False) distance between ref point opposite_lanes (bool): if lanes in opposite direction are considered """ self.freespace = convert_bool(freespace) self.opposite_lanes = convert_bool(opposite_lanes) self.distance_backward = convert_float(distance_backward) self.distance_forward = convert_float(distance_forward) self.entities = [] self.lane_ranges = [] def __eq__(self, other): if isinstance(other, RelativeClearanceCondition): if ( self.get_attributes() == other.get_attributes() and self.entities == other.entities and self.lane_ranges == other.lane_ranges ): return True return False @staticmethod def parse(element): """Parses the xml element of RelativeClearanceCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (RelativeClearanceCondition): a RelativeClearanceCondition object """ condition = element.find("RelativeClearanceCondition") if "freespace" in condition.attrib: freespace = convert_bool(condition.attrib["freespace"]) else: freespace = convert_bool(condition.attrib["freeSpace"]) opposite_lanes = convert_bool(condition.attrib["oppositeLanes"]) if "distanceBackward" in condition.attrib: back_dist = convert_float(condition.attrib["distanceBackward"]) else: back_dist = None if "distanceForward" in condition.attrib: fwd_dist = convert_float(condition.attrib["distanceForward"]) else: fwd_dist = None retval = RelativeClearanceCondition( opposite_lanes, back_dist, fwd_dist, freespace ) for er in condition.findall("EntityRef"): retval.add_entity(er.attrib["entityRef"]) for r in condition.findall("RelativeLaneRange"): retval.add_relative_lane_range( convert_int(r.attrib["from"]), convert_int(r.attrib["to"]) ) return retval def add_entity(self, entity): """adds an entity to the RelativeClearanceCondition Parameters ---------- entity (str): name of the entity """ self.entities.append(EntityRef(entity)) def add_relative_lane_range(self, from_lane, to_lane): """adds an RelativeLaneRange to the RelativeClearanceCondition Parameters ---------- from_lane (int): start lane to_lane (int): end lane """ self.lane_ranges.append((from_lane, to_lane)) def get_attributes(self): """returns the attributes of the RelativeClearanceCondition as a dict""" basedict = {} basedict["oppositeLanes"] = get_bool_string(self.opposite_lanes) # TODO: wrong in the spec, should be lower case s basedict["freeSpace"] = get_bool_string(self.freespace) if self.distance_backward is not None: basedict["distanceBackward"] = str(self.distance_backward) if self.distance_forward is not None: basedict["distanceForward"] = str(self.distance_forward) return basedict def get_element(self): """returns the elementTree of the RelativeClearanceCondition""" if self.isVersionEqLess(minor=1): raise OpenSCENARIOVersionError( "RelativeClearanceCondition was added in OSC 1.2" ) element = ET.Element("EntityCondition") relative_clearence_element = ET.SubElement( element, "RelativeClearanceCondition", attrib=self.get_attributes() ) for r in self.lane_ranges: ET.SubElement( relative_clearence_element, "RelativeLaneRange", {"from": str(r[0]), "to": str(r[1])}, ) for e in self.entities: relative_clearence_element.append(e.get_element()) return element
Ancestors
- scenariogeneration.xosc.utils._EntityTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of RelativeClearanceCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (RelativeClearanceCondition): a RelativeClearanceCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of RelativeClearanceCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (RelativeClearanceCondition): a RelativeClearanceCondition object """ condition = element.find("RelativeClearanceCondition") if "freespace" in condition.attrib: freespace = convert_bool(condition.attrib["freespace"]) else: freespace = convert_bool(condition.attrib["freeSpace"]) opposite_lanes = convert_bool(condition.attrib["oppositeLanes"]) if "distanceBackward" in condition.attrib: back_dist = convert_float(condition.attrib["distanceBackward"]) else: back_dist = None if "distanceForward" in condition.attrib: fwd_dist = convert_float(condition.attrib["distanceForward"]) else: fwd_dist = None retval = RelativeClearanceCondition( opposite_lanes, back_dist, fwd_dist, freespace ) for er in condition.findall("EntityRef"): retval.add_entity(er.attrib["entityRef"]) for r in condition.findall("RelativeLaneRange"): retval.add_relative_lane_range( convert_int(r.attrib["from"]), convert_int(r.attrib["to"]) ) return retval
Methods
def add_entity(self, entity)
-
adds an entity to the RelativeClearanceCondition
Parameters
entity (str): name of the entity
Expand source code
def add_entity(self, entity): """adds an entity to the RelativeClearanceCondition Parameters ---------- entity (str): name of the entity """ self.entities.append(EntityRef(entity))
def add_relative_lane_range(self, from_lane, to_lane)
-
adds an RelativeLaneRange to the RelativeClearanceCondition
Parameters
from_lane (int): start lane to_lane (int): end lane
Expand source code
def add_relative_lane_range(self, from_lane, to_lane): """adds an RelativeLaneRange to the RelativeClearanceCondition Parameters ---------- from_lane (int): start lane to_lane (int): end lane """ self.lane_ranges.append((from_lane, to_lane))
def get_attributes(self)
-
returns the attributes of the RelativeClearanceCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the RelativeClearanceCondition as a dict""" basedict = {} basedict["oppositeLanes"] = get_bool_string(self.opposite_lanes) # TODO: wrong in the spec, should be lower case s basedict["freeSpace"] = get_bool_string(self.freespace) if self.distance_backward is not None: basedict["distanceBackward"] = str(self.distance_backward) if self.distance_forward is not None: basedict["distanceForward"] = str(self.distance_forward) return basedict
def get_element(self)
-
returns the elementTree of the RelativeClearanceCondition
Expand source code
def get_element(self): """returns the elementTree of the RelativeClearanceCondition""" if self.isVersionEqLess(minor=1): raise OpenSCENARIOVersionError( "RelativeClearanceCondition was added in OSC 1.2" ) element = ET.Element("EntityCondition") relative_clearence_element = ET.SubElement( element, "RelativeClearanceCondition", attrib=self.get_attributes() ) for r in self.lane_ranges: ET.SubElement( relative_clearence_element, "RelativeLaneRange", {"from": str(r[0]), "to": str(r[1])}, ) for e in self.entities: relative_clearence_element.append(e.get_element()) return element
class RelativeDistanceCondition (value, rule, dist_type, entity, alongroute=True, freespace=True, coordinate_system=<scenariogeneration.xosc.enumerations._OscEnum object>, routing_algorithm=None)
-
the RelativeDistanceCondition class is an Entity Condition used by the EntityTrigger
Parameters
value (float): distance to position rule (Rule): condition rule of triggering dist_type (RelativeDistanceType): type of relative distance entity (str): name of the entity fore relative distance freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True coordinate_system (CoordinateSystem): what coordinate system to use (valid from V1.1) Default: CoordinateSystem.entity routing_algorithm (RoutingAlgorithm): if coordinate_system road/lane is used, this can be set (valid from V1.2) Default: None
Attributes
value (float): distance to position rule (Rule): condition rule of triggering entity (str): name of the entity fore relative distance dist_type (RelativeDistanceType): type of relative distance freespace (bool): (True) distance between bounding boxes, (False) distance between ref point coordinate_system (CoordinateSystem): what coordinate system to use (valid from V1.1) routing_algorithm (RoutingAlgorithm): if coordinate_system road/lane is used, this can be set (valid from V1.2) Default: None
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the RelativeDistanceCondition
Parameters
value (float): distance to position rule (Rule): condition rule of triggering dist_type (RelativeDistanceType): type of relative distance entity (str): name of the entity fore relative distance freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True coordinate_system (CoordinateSystem): what coordinate system to use (valid from V1.1) Default: CoordinateSystem.entity routing_algorithm (RoutingAlgorithm): if coordinate_system road/lane is used, this can be set (valid from V1.2) Default: None
Expand source code
class RelativeDistanceCondition(_EntityTriggerType): """the RelativeDistanceCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- value (float): distance to position rule (Rule): condition rule of triggering dist_type (RelativeDistanceType): type of relative distance entity (str): name of the entity fore relative distance freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True coordinate_system (CoordinateSystem): what coordinate system to use (valid from V1.1) Default: CoordinateSystem.entity routing_algorithm (RoutingAlgorithm): if coordinate_system road/lane is used, this can be set (valid from V1.2) Default: None Attributes ---------- value (float): distance to position rule (Rule): condition rule of triggering entity (str): name of the entity fore relative distance dist_type (RelativeDistanceType): type of relative distance freespace (bool): (True) distance between bounding boxes, (False) distance between ref point coordinate_system (CoordinateSystem): what coordinate system to use (valid from V1.1) routing_algorithm (RoutingAlgorithm): if coordinate_system road/lane is used, this can be set (valid from V1.2) Default: None Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__( self, value, rule, dist_type, entity, alongroute=True, freespace=True, coordinate_system=CoordinateSystem.entity, routing_algorithm=None, ): """initalize the RelativeDistanceCondition Parameters ---------- value (float): distance to position rule (Rule): condition rule of triggering dist_type (RelativeDistanceType): type of relative distance entity (str): name of the entity fore relative distance freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True coordinate_system (CoordinateSystem): what coordinate system to use (valid from V1.1) Default: CoordinateSystem.entity routing_algorithm (RoutingAlgorithm): if coordinate_system road/lane is used, this can be set (valid from V1.2) Default: None """ self.value = value self.alongroute = convert_bool(alongroute) self.freespace = convert_bool(freespace) self.dist_type = convert_enum(dist_type, RelativeDistanceType) self.rule = convert_enum(rule, Rule) self.entity = entity self.coordinate_system = convert_enum(coordinate_system, CoordinateSystem) self.routing_algorithm = convert_enum(routing_algorithm, RoutingAlgorithm, True) def __eq__(self, other): if isinstance(other, RelativeDistanceCondition): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of RelativeDistanceCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (RelativeDistanceCondition): a RelativeDistanceCondition object """ condition = element.find("RelativeDistanceCondition") value = condition.attrib["value"] rule = convert_enum(condition.attrib["rule"], Rule) freespace = convert_bool(condition.attrib["freespace"]) entity = condition.attrib["entityRef"] if "alongRoute" in condition.attrib: alongroute = convert_bool(condition.attrib["alongRoute"]) else: alongroute = True if "relativeDistanceType" in condition.attrib: reldisttype = convert_enum( condition.attrib["relativeDistanceType"], RelativeDistanceType ) else: reldisttype = RelativeDistanceType.longitudinal if "coordinateSystem" in condition.attrib: coordsystem = convert_enum( condition.attrib["coordinateSystem"], CoordinateSystem ) else: coordsystem = CoordinateSystem.road if "routingAlgorithm" in condition.attrib: routing_algorithm = convert_enum( condition.attrib["routingAlgorithm"], RoutingAlgorithm ) else: routing_algorithm = None return RelativeDistanceCondition( value, rule, reldisttype, entity, alongroute, freespace, coordsystem, routing_algorithm, ) def get_attributes(self): """returns the attributes of the RelativeDistanceCondition as a dict""" basedict = {} basedict["value"] = str(self.value) basedict["freespace"] = get_bool_string(self.freespace) basedict["entityRef"] = self.entity basedict["rule"] = self.rule.get_name() basedict["relativeDistanceType"] = self.dist_type.get_name() if not self.isVersion(minor=0): basedict["coordinateSystem"] = self.coordinate_system.get_name() if self.routing_algorithm: if self.isVersionEqLarger(minor=2): basedict["routingAlgorithm"] = self.routing_algorithm.get_name() else: raise OpenSCENARIOVersionError( "RoutingAlgorithm was introduced in V1.2" ) return basedict def get_element(self): """returns the elementTree of the RelativeDistanceCondition""" element = ET.Element("EntityCondition") ET.SubElement( element, "RelativeDistanceCondition", attrib=self.get_attributes() ) return element
Ancestors
- scenariogeneration.xosc.utils._EntityTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of RelativeDistanceCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (RelativeDistanceCondition): a RelativeDistanceCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of RelativeDistanceCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (RelativeDistanceCondition): a RelativeDistanceCondition object """ condition = element.find("RelativeDistanceCondition") value = condition.attrib["value"] rule = convert_enum(condition.attrib["rule"], Rule) freespace = convert_bool(condition.attrib["freespace"]) entity = condition.attrib["entityRef"] if "alongRoute" in condition.attrib: alongroute = convert_bool(condition.attrib["alongRoute"]) else: alongroute = True if "relativeDistanceType" in condition.attrib: reldisttype = convert_enum( condition.attrib["relativeDistanceType"], RelativeDistanceType ) else: reldisttype = RelativeDistanceType.longitudinal if "coordinateSystem" in condition.attrib: coordsystem = convert_enum( condition.attrib["coordinateSystem"], CoordinateSystem ) else: coordsystem = CoordinateSystem.road if "routingAlgorithm" in condition.attrib: routing_algorithm = convert_enum( condition.attrib["routingAlgorithm"], RoutingAlgorithm ) else: routing_algorithm = None return RelativeDistanceCondition( value, rule, reldisttype, entity, alongroute, freespace, coordsystem, routing_algorithm, )
Methods
def get_attributes(self)
-
returns the attributes of the RelativeDistanceCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the RelativeDistanceCondition as a dict""" basedict = {} basedict["value"] = str(self.value) basedict["freespace"] = get_bool_string(self.freespace) basedict["entityRef"] = self.entity basedict["rule"] = self.rule.get_name() basedict["relativeDistanceType"] = self.dist_type.get_name() if not self.isVersion(minor=0): basedict["coordinateSystem"] = self.coordinate_system.get_name() if self.routing_algorithm: if self.isVersionEqLarger(minor=2): basedict["routingAlgorithm"] = self.routing_algorithm.get_name() else: raise OpenSCENARIOVersionError( "RoutingAlgorithm was introduced in V1.2" ) return basedict
def get_element(self)
-
returns the elementTree of the RelativeDistanceCondition
Expand source code
def get_element(self): """returns the elementTree of the RelativeDistanceCondition""" element = ET.Element("EntityCondition") ET.SubElement( element, "RelativeDistanceCondition", attrib=self.get_attributes() ) return element
class RelativeSpeedCondition (value, rule, entity, directional_dimension=None)
-
the RelativeSpeedCondition class is an Entity Condition used by the EntityTrigger
Parameters
value (float): acceleration rule (Rule): condition rule of triggering entity (str): name of the entity to be relative to directional_dimension (DirectionalDimension): direction of the speed to compare (if not used, total speed is considered) Default: None
Attributes
value (float): acceleration rule (Rule): condition rule of triggering entity (str): name of the entity to be relative to directional_dimension (DirectionalDimension): direction of the speed to compare (if not used, total speed is considered)
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the RelativeSpeedCondition
Parameters
value (float): acceleration rule (Rule): condition rule of triggering entity (str): name of the entity to be relative to directional_dimension (DirectionalDimension): direction of the speed to compare (if not used, total speed is considered) Default: None
Expand source code
class RelativeSpeedCondition(_EntityTriggerType): """the RelativeSpeedCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- value (float): acceleration rule (Rule): condition rule of triggering entity (str): name of the entity to be relative to directional_dimension (DirectionalDimension): direction of the speed to compare (if not used, total speed is considered) Default: None Attributes ---------- value (float): acceleration rule (Rule): condition rule of triggering entity (str): name of the entity to be relative to directional_dimension (DirectionalDimension): direction of the speed to compare (if not used, total speed is considered) Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, value, rule, entity, directional_dimension=None): """initalize the RelativeSpeedCondition Parameters ---------- value (float): acceleration rule (Rule): condition rule of triggering entity (str): name of the entity to be relative to directional_dimension (DirectionalDimension): direction of the speed to compare (if not used, total speed is considered) Default: None """ self.value = convert_float(value) self.rule = convert_enum(rule, Rule) self.entity = entity self.directional_dimension = convert_enum( directional_dimension, DirectionalDimension, True ) def __eq__(self, other): if isinstance(other, RelativeSpeedCondition): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of RelativeSpeedCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (RelativeSpeedCondition): a RelativeSpeedCondition object """ condition = element.find("RelativeSpeedCondition") value = convert_float(condition.attrib["value"]) entity = condition.attrib["entityRef"] rule = convert_enum(condition.attrib["rule"], Rule) direction = None if "direction" in condition.attrib: direction = convert_enum( condition.attrib["direction"], DirectionalDimension ) return RelativeSpeedCondition(value, rule, entity, direction) def get_attributes(self): """returns the attributes of the RelativeSpeedCondition as a dict""" basedict = {} basedict["value"] = str(self.value) basedict["rule"] = self.rule.get_name() basedict["entityRef"] = self.entity if self.directional_dimension is not None: if self.isVersionEqLess(minor=1): raise OpenSCENARIOVersionError("Direction was introduced in OSC 1.2") basedict["direction"] = self.directional_dimension.get_name() return basedict # return merge_dicts({'value':str(self.value),'entityRef':self.entity},self.rule.get_attributes()) def get_element(self): """returns the elementTree of the RelativeSpeedCondition""" element = ET.Element("EntityCondition") ET.SubElement(element, "RelativeSpeedCondition", attrib=self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.utils._EntityTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of RelativeSpeedCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (RelativeSpeedCondition): a RelativeSpeedCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of RelativeSpeedCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (RelativeSpeedCondition): a RelativeSpeedCondition object """ condition = element.find("RelativeSpeedCondition") value = convert_float(condition.attrib["value"]) entity = condition.attrib["entityRef"] rule = convert_enum(condition.attrib["rule"], Rule) direction = None if "direction" in condition.attrib: direction = convert_enum( condition.attrib["direction"], DirectionalDimension ) return RelativeSpeedCondition(value, rule, entity, direction)
Methods
def get_attributes(self)
-
returns the attributes of the RelativeSpeedCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the RelativeSpeedCondition as a dict""" basedict = {} basedict["value"] = str(self.value) basedict["rule"] = self.rule.get_name() basedict["entityRef"] = self.entity if self.directional_dimension is not None: if self.isVersionEqLess(minor=1): raise OpenSCENARIOVersionError("Direction was introduced in OSC 1.2") basedict["direction"] = self.directional_dimension.get_name() return basedict # return merge_dicts({'value':str(self.value),'entityRef':self.entity},self.rule.get_attributes())
def get_element(self)
-
returns the elementTree of the RelativeSpeedCondition
Expand source code
def get_element(self): """returns the elementTree of the RelativeSpeedCondition""" element = ET.Element("EntityCondition") ET.SubElement(element, "RelativeSpeedCondition", attrib=self.get_attributes()) return element
class SimulationTimeCondition (value, rule)
-
the SimulationTimeCondition class is an Value Condition used by the ValueTrigger
Parameters
value (float): simulation time rule (Rule): condition rule of triggering
Attributes
value (int): simulation time rule (Rule): condition rule of triggering
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the SimulationTimeCondition
Parameters
value (float): simulation time rule (Rule): condition rule of triggering
Expand source code
class SimulationTimeCondition(_ValueTriggerType): """the SimulationTimeCondition class is an Value Condition used by the ValueTrigger Parameters ---------- value (float): simulation time rule (Rule): condition rule of triggering Attributes ---------- value (int): simulation time rule (Rule): condition rule of triggering Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, value, rule): """initalize the SimulationTimeCondition Parameters ---------- value (float): simulation time rule (Rule): condition rule of triggering """ self.value = convert_float(value) self.rule = convert_enum(rule, Rule) def __eq__(self, other): if isinstance(other, SimulationTimeCondition): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of SimulationTimeCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (SimulationTimeCondition): a SimulationTimeCondition object """ condition = element.find("SimulationTimeCondition") value = convert_float(element.attrib["value"]) rule = convert_enum(element.attrib["rule"], Rule) return SimulationTimeCondition(value, rule) def get_attributes(self): """returns the attributes of the SimulationTimeCondition as a dict""" basedict = {} basedict["value"] = str(self.value) basedict["rule"] = self.rule.get_name() return basedict def get_element(self): """returns the elementTree of the SimulationTimeCondition""" return ET.Element("SimulationTimeCondition", attrib=self.get_attributes())
Ancestors
- scenariogeneration.xosc.utils._ValueTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of SimulationTimeCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (SimulationTimeCondition): a SimulationTimeCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of SimulationTimeCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (SimulationTimeCondition): a SimulationTimeCondition object """ condition = element.find("SimulationTimeCondition") value = convert_float(element.attrib["value"]) rule = convert_enum(element.attrib["rule"], Rule) return SimulationTimeCondition(value, rule)
Methods
def get_attributes(self)
-
returns the attributes of the SimulationTimeCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the SimulationTimeCondition as a dict""" basedict = {} basedict["value"] = str(self.value) basedict["rule"] = self.rule.get_name() return basedict
def get_element(self)
-
returns the elementTree of the SimulationTimeCondition
Expand source code
def get_element(self): """returns the elementTree of the SimulationTimeCondition""" return ET.Element("SimulationTimeCondition", attrib=self.get_attributes())
class SpeedCondition (value, rule, directional_dimension=None)
-
the SpeedCondition class is an Entity Condition used by the EntityTrigger
Parameters
value (float): speed to trigger on rule (Rule): condition rule of triggering directional_dimension (DirectionalDimension): direction of the speed to compare (if not used, total speed is considered) Default: None
Attributes
value (float): speed to trigger on rule (Rule): condition rule of triggering directional_dimension (DirectionalDimension): direction of the speed to compare (if not used, total speed is considered)
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the SpeedCondition class is an Entity Condition used by the EntityTrigger
Parameters
value (float): speed to trigger on rule (Rule): condition rule of triggering directional_dimension (DirectionalDimension): direction of the speed to compare (if not used, total speed is considered) Default: None
Expand source code
class SpeedCondition(_EntityTriggerType): """the SpeedCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- value (float): speed to trigger on rule (Rule): condition rule of triggering directional_dimension (DirectionalDimension): direction of the speed to compare (if not used, total speed is considered) Default: None Attributes ---------- value (float): speed to trigger on rule (Rule): condition rule of triggering directional_dimension (DirectionalDimension): direction of the speed to compare (if not used, total speed is considered) Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, value, rule, directional_dimension=None): """initalize the SpeedCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- value (float): speed to trigger on rule (Rule): condition rule of triggering directional_dimension (DirectionalDimension): direction of the speed to compare (if not used, total speed is considered) Default: None """ self.value = convert_float(value) self.rule = convert_enum(rule, Rule) self.directional_dimension = convert_enum( directional_dimension, DirectionalDimension, True ) def __eq__(self, other): if isinstance(other, SpeedCondition): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of SpeedCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (SpeedCondition): a SpeedCondition object """ condition = element.find("SpeedCondition") value = convert_float(condition.attrib["value"]) rule = convert_enum(condition.attrib["rule"], Rule) direction = None if "direction" in condition.attrib: direction = convert_enum( condition.attrib["direction"], DirectionalDimension ) return SpeedCondition(value, rule, direction) def get_attributes(self): """returns the attributes of the SpeedCondition as a dict""" basedict = {} basedict["value"] = str(self.value) basedict["rule"] = self.rule.get_name() if self.directional_dimension is not None: if self.isVersionEqLess(minor=1): raise OpenSCENARIOVersionError("Direction was introduced in OSC 1.2") basedict["direction"] = self.directional_dimension.get_name() return basedict # return merge_dicts({'value':str(self.value)},self.rule.get_attributes()) def get_element(self): """returns the elementTree of the SpeedCondition""" element = ET.Element("EntityCondition") ET.SubElement(element, "SpeedCondition", attrib=self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.utils._EntityTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of SpeedCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (SpeedCondition): a SpeedCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of SpeedCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (SpeedCondition): a SpeedCondition object """ condition = element.find("SpeedCondition") value = convert_float(condition.attrib["value"]) rule = convert_enum(condition.attrib["rule"], Rule) direction = None if "direction" in condition.attrib: direction = convert_enum( condition.attrib["direction"], DirectionalDimension ) return SpeedCondition(value, rule, direction)
Methods
def get_attributes(self)
-
returns the attributes of the SpeedCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the SpeedCondition as a dict""" basedict = {} basedict["value"] = str(self.value) basedict["rule"] = self.rule.get_name() if self.directional_dimension is not None: if self.isVersionEqLess(minor=1): raise OpenSCENARIOVersionError("Direction was introduced in OSC 1.2") basedict["direction"] = self.directional_dimension.get_name() return basedict # return merge_dicts({'value':str(self.value)},self.rule.get_attributes())
def get_element(self)
-
returns the elementTree of the SpeedCondition
Expand source code
def get_element(self): """returns the elementTree of the SpeedCondition""" element = ET.Element("EntityCondition") ET.SubElement(element, "SpeedCondition", attrib=self.get_attributes()) return element
class StandStillCondition (duration)
-
the StandStillCondition class is an Entity Condition used by the EntityTrigger
Parameters
duration (float): time of standstill
Attributes
duration (float): time of standstill
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
the StandStillCondition class is an Entity Condition used by the EntityTrigger
Parameters
duration (float): time of standstill
Expand source code
class StandStillCondition(_EntityTriggerType): """the StandStillCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- duration (float): time of standstill Attributes ---------- duration (float): time of standstill Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, duration): """the StandStillCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- duration (float): time of standstill """ self.duration = convert_float(duration) def __eq__(self, other): if isinstance(other, StandStillCondition): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of StandStillCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (StandStillCondition): a StandStillCondition object """ condition = element.find("StandStillCondition") duration = convert_float(condition.attrib["duration"]) return StandStillCondition(duration) def get_attributes(self): """returns the attributes of the StandStillCondition as a dict""" return {"duration": str(self.duration)} def get_element(self): """returns the elementTree of the StandStillCondition""" element = ET.Element("EntityCondition") ET.SubElement(element, "StandStillCondition", attrib=self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.utils._EntityTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of StandStillCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (StandStillCondition): a StandStillCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of StandStillCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (StandStillCondition): a StandStillCondition object """ condition = element.find("StandStillCondition") duration = convert_float(condition.attrib["duration"]) return StandStillCondition(duration)
Methods
def get_attributes(self)
-
returns the attributes of the StandStillCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the StandStillCondition as a dict""" return {"duration": str(self.duration)}
def get_element(self)
-
returns the elementTree of the StandStillCondition
Expand source code
def get_element(self): """returns the elementTree of the StandStillCondition""" element = ET.Element("EntityCondition") ET.SubElement(element, "StandStillCondition", attrib=self.get_attributes()) return element
class StoryboardElementStateCondition (element, reference, state)
-
the StoryboardElementStateCondition class is an Value Condition used by the ValueTrigger
Parameters
element (StoryboardElementType): the element to trigger on reference (str): reference of the parameter state (StoryboardElementState): state to trigger on
Attributes
element (StoryboardElementType): the element to trigger on reference (str): reference of the parameter state (StoryboardElementState): state to trigger on
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the StoryboardElementStateCondition
Parameters
element (StoryboardElementType): the element to trigger on reference (str): reference of the parameter state (StoryBoardElementState): state to trigger on
Expand source code
class StoryboardElementStateCondition(_ValueTriggerType): """the StoryboardElementStateCondition class is an Value Condition used by the ValueTrigger Parameters ---------- element (StoryboardElementType): the element to trigger on reference (str): reference of the parameter state (StoryboardElementState): state to trigger on Attributes ---------- element (StoryboardElementType): the element to trigger on reference (str): reference of the parameter state (StoryboardElementState): state to trigger on Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, element, reference, state): """initalize the StoryboardElementStateCondition Parameters ---------- element (StoryboardElementType): the element to trigger on reference (str): reference of the parameter state (StoryBoardElementState): state to trigger on """ self.element = convert_enum(element, StoryboardElementType) self.reference = reference self.state = convert_enum(state, StoryboardElementState) def __eq__(self, other): if isinstance(other, StoryboardElementStateCondition): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of StoryboardElementStateCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (StoryboardElementStateCondition): a StoryboardElementStateCondition object """ ref = element.attrib["storyboardElementRef"] sbet = convert_enum( element.attrib["storyboardElementType"], StoryboardElementType ) state = convert_enum(element.attrib["state"], StoryboardElementState) return StoryboardElementStateCondition(sbet, ref, state) def get_attributes(self): """returns the attributes of the StoryboardElementStateCondition as a dict""" return { "storyboardElementType": self.element.get_name(), "storyboardElementRef": self.reference, "state": self.state.get_name(), } def get_element(self): """returns the elementTree of the StoryboardElementStateCondition""" return ET.Element( "StoryboardElementStateCondition", attrib=self.get_attributes() )
Ancestors
- scenariogeneration.xosc.utils._ValueTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of StoryboardElementStateCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (StoryboardElementStateCondition): a StoryboardElementStateCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of StoryboardElementStateCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (StoryboardElementStateCondition): a StoryboardElementStateCondition object """ ref = element.attrib["storyboardElementRef"] sbet = convert_enum( element.attrib["storyboardElementType"], StoryboardElementType ) state = convert_enum(element.attrib["state"], StoryboardElementState) return StoryboardElementStateCondition(sbet, ref, state)
Methods
def get_attributes(self)
-
returns the attributes of the StoryboardElementStateCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the StoryboardElementStateCondition as a dict""" return { "storyboardElementType": self.element.get_name(), "storyboardElementRef": self.reference, "state": self.state.get_name(), }
def get_element(self)
-
returns the elementTree of the StoryboardElementStateCondition
Expand source code
def get_element(self): """returns the elementTree of the StoryboardElementStateCondition""" return ET.Element( "StoryboardElementStateCondition", attrib=self.get_attributes() )
class TimeHeadwayCondition (entity, value, rule, alongroute=True, freespace=True, distance_type=<scenariogeneration.xosc.enumerations._OscEnum object>, coordinate_system=<scenariogeneration.xosc.enumerations._OscEnum object>, routing_algorithm=None)
-
the TimeHeadwayCondition class is an Entity Condition used by the EntityTrigger
Parameters
entity (str): name of the entity for the headway value (float): time of headway rule (Rule): condition rule of triggering alongroute (bool): if the route should count Default: True freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1) Default: RelativeDistanceType.longitudinal coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1) Default: CoordinateSystem.road routing_algorithm (RoutingAlgorithm): the routing algorithm for the condition (valid from V1.2) Default: None
Attributes
entity (str): name of the entity for the headway value (float): time of headway rule (Rule): condition rule of triggering alongroute (bool): if the route should count freespace (bool): (True) distance between bounding boxes, (False) distance between ref point distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1) coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1) routing_algorithm (RoutingAlgorithm): the routing algorithm for the condition (valid from V1.2)
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the TimeHeadwayCondition
Parameters
entity (str): name of the entity for the headway value (float): time of headway rule (Rule): condition rule of triggering alongroute (bool): if the route should count Default: True freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1) Default: RelativeDistanceType.longitudinal coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1) Default: CoordinateSystem.road routing_algorithm (RoutingAlgorithm): the routing algorithm for the condition (valid from V1.2) Default: None
Expand source code
class TimeHeadwayCondition(_EntityTriggerType): """the TimeHeadwayCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- entity (str): name of the entity for the headway value (float): time of headway rule (Rule): condition rule of triggering alongroute (bool): if the route should count Default: True freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1) Default: RelativeDistanceType.longitudinal coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1) Default: CoordinateSystem.road routing_algorithm (RoutingAlgorithm): the routing algorithm for the condition (valid from V1.2) Default: None Attributes ---------- entity (str): name of the entity for the headway value (float): time of headway rule (Rule): condition rule of triggering alongroute (bool): if the route should count freespace (bool): (True) distance between bounding boxes, (False) distance between ref point distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1) coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1) routing_algorithm (RoutingAlgorithm): the routing algorithm for the condition (valid from V1.2) Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__( self, entity, value, rule, alongroute=True, freespace=True, distance_type=RelativeDistanceType.longitudinal, coordinate_system=CoordinateSystem.road, routing_algorithm=None, ): """initalize the TimeHeadwayCondition Parameters ---------- entity (str): name of the entity for the headway value (float): time of headway rule (Rule): condition rule of triggering alongroute (bool): if the route should count Default: True freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1) Default: RelativeDistanceType.longitudinal coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1) Default: CoordinateSystem.road routing_algorithm (RoutingAlgorithm): the routing algorithm for the condition (valid from V1.2) Default: None """ self.entity = entity self.value = convert_float(value) self.alongroute = convert_bool(alongroute) self.freespace = convert_bool(freespace) self.rule = convert_enum(rule, Rule) self.relative_distance_type = convert_enum(distance_type, RelativeDistanceType) self.coordinate_system = convert_enum(coordinate_system, CoordinateSystem) self.routing_algorithm = convert_enum(routing_algorithm, RoutingAlgorithm, True) def __eq__(self, other): if isinstance(other, TimeHeadwayCondition): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of TimeHeadwayCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (TimeHeadwayCondition): a TimeHeadwayCondition object """ condition = element.find("TimeHeadwayCondition") entity = condition.attrib["entityRef"] value = condition.attrib["value"] rule = getattr(Rule, condition.attrib["rule"]) routing_algorithm = None if "alongRoute" in condition.attrib: alongroute = convert_bool(condition.attrib["alongRoute"]) else: alongroute = True if "relativeDistanceType" in condition.attrib: reldisttype = convert_enum( condition.attrib["relativeDistanceType"], RelativeDistanceType ) else: reldisttype = RelativeDistanceType.longitudinal if "coordinateSystem" in condition.attrib: coordsystem = convert_enum( condition.attrib["coordinateSystem"], CoordinateSystem ) else: coordsystem = CoordinateSystem.road freespace = convert_bool(condition.attrib["freespace"]) if "routingAlgorithm" in condition.attrib: routing_algorithm = convert_enum( condition.attrib["routingAlgorithm"], RoutingAlgorithm ) return TimeHeadwayCondition( entity, value, rule, alongroute, freespace, reldisttype, coordsystem, routing_algorithm, ) def get_attributes(self): """returns the attributes of the TimeHeadwayCondition as a dict""" basedict = {} basedict["entityRef"] = self.entity basedict["value"] = str(self.value) if self.isVersion(minor=0): basedict["alongRoute"] = get_bool_string(self.alongroute) else: basedict["relativeDistanceType"] = self.relative_distance_type.get_name() basedict["coordinateSystem"] = self.coordinate_system.get_name() basedict["freespace"] = get_bool_string(self.freespace) basedict["rule"] = self.rule.get_name() if self.routing_algorithm: if self.version_minor < 2: raise OpenSCENARIOVersionError( "RoutingAlgorithm in TimeHeadwayCondition was added in OSC V1.2" ) basedict["routingAlgorithm"] = self.routing_algorithm.get_name() return basedict def get_element(self): """returns the elementTree of the TimeHeadwayCondition""" element = ET.Element("EntityCondition") ET.SubElement(element, "TimeHeadwayCondition", attrib=self.get_attributes()) return element
Ancestors
- scenariogeneration.xosc.utils._EntityTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of TimeHeadwayCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (TimeHeadwayCondition): a TimeHeadwayCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of TimeHeadwayCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (TimeHeadwayCondition): a TimeHeadwayCondition object """ condition = element.find("TimeHeadwayCondition") entity = condition.attrib["entityRef"] value = condition.attrib["value"] rule = getattr(Rule, condition.attrib["rule"]) routing_algorithm = None if "alongRoute" in condition.attrib: alongroute = convert_bool(condition.attrib["alongRoute"]) else: alongroute = True if "relativeDistanceType" in condition.attrib: reldisttype = convert_enum( condition.attrib["relativeDistanceType"], RelativeDistanceType ) else: reldisttype = RelativeDistanceType.longitudinal if "coordinateSystem" in condition.attrib: coordsystem = convert_enum( condition.attrib["coordinateSystem"], CoordinateSystem ) else: coordsystem = CoordinateSystem.road freespace = convert_bool(condition.attrib["freespace"]) if "routingAlgorithm" in condition.attrib: routing_algorithm = convert_enum( condition.attrib["routingAlgorithm"], RoutingAlgorithm ) return TimeHeadwayCondition( entity, value, rule, alongroute, freespace, reldisttype, coordsystem, routing_algorithm, )
Methods
def get_attributes(self)
-
returns the attributes of the TimeHeadwayCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the TimeHeadwayCondition as a dict""" basedict = {} basedict["entityRef"] = self.entity basedict["value"] = str(self.value) if self.isVersion(minor=0): basedict["alongRoute"] = get_bool_string(self.alongroute) else: basedict["relativeDistanceType"] = self.relative_distance_type.get_name() basedict["coordinateSystem"] = self.coordinate_system.get_name() basedict["freespace"] = get_bool_string(self.freespace) basedict["rule"] = self.rule.get_name() if self.routing_algorithm: if self.version_minor < 2: raise OpenSCENARIOVersionError( "RoutingAlgorithm in TimeHeadwayCondition was added in OSC V1.2" ) basedict["routingAlgorithm"] = self.routing_algorithm.get_name() return basedict
def get_element(self)
-
returns the elementTree of the TimeHeadwayCondition
Expand source code
def get_element(self): """returns the elementTree of the TimeHeadwayCondition""" element = ET.Element("EntityCondition") ET.SubElement(element, "TimeHeadwayCondition", attrib=self.get_attributes()) return element
class TimeOfDayCondition (rule, year, month, day, hour, minute, second)
-
the TimeOfDayCondition class is an Value Condition used by the ValueTrigger
Parameters
rule (Rule): condition rule of triggering time of day (str): datetime ??? format unknown
Attributes
rule (Rule): condition rule of triggering time of day (str): datetime ??? format unknown
Methods
get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the TimeOfDayCondition Parameters
rule (Rule): condition rule of triggering time of day (str): datetime ??? format unknown
Expand source code
class TimeOfDayCondition(_ValueTriggerType): """the TimeOfDayCondition class is an Value Condition used by the ValueTrigger Parameters ---------- rule (Rule): condition rule of triggering time of day (str): datetime ??? format unknown Attributes ---------- rule (Rule): condition rule of triggering time of day (str): datetime ??? format unknown Methods ------- get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, rule, year, month, day, hour, minute, second): """initalize the TimeOfDayCondition Parameters ---------- rule (Rule): condition rule of triggering time of day (str): datetime ??? format unknown """ self.rule = convert_enum(rule, Rule) self.year = convert_int(year) self.month = convert_int(month) self.day = convert_int(day) self.hour = convert_int(hour) self.minute = convert_int(minute) self.second = convert_int(second) def __eq__(self, other): if isinstance(other, TimeOfDayCondition): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of TimeOfDayCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (TimeOfDayCondition): a TimeOfDayCondition object """ var = element.attrib["dateTime"] year = convert_int(var[0:4]) month = convert_int(var[5:7]) day = convert_int(var[8:10]) hour = convert_int(var[11:13]) minute = convert_int(var[14:16]) second = convert_int(var[17:19]) rule = convert_enum(element.attrib["rule"], Rule) return TimeOfDayCondition(rule, year, month, day, hour, minute, second) def get_attributes(self): """returns the attributes of the TimeOfDayCondition as a dict""" basedict = {} dt = ( str(self.year) + "-" + "{:0>2}".format(self.month) + "-" + "{:0>2}".format(self.day) + "T" + "{:0>2}".format(self.hour) + ":" + "{:0>2}".format(self.minute) + ":" + "{:0>2}".format(self.second) ) basedict["dateTime"] = dt basedict["rule"] = self.rule.get_name() return basedict def get_element(self): """returns the elementTree of the TimeOfDayCondition""" return ET.Element("TimeOfDayCondition", attrib=self.get_attributes())
Ancestors
- scenariogeneration.xosc.utils._ValueTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of TimeOfDayCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (TimeOfDayCondition): a TimeOfDayCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of TimeOfDayCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (TimeOfDayCondition): a TimeOfDayCondition object """ var = element.attrib["dateTime"] year = convert_int(var[0:4]) month = convert_int(var[5:7]) day = convert_int(var[8:10]) hour = convert_int(var[11:13]) minute = convert_int(var[14:16]) second = convert_int(var[17:19]) rule = convert_enum(element.attrib["rule"], Rule) return TimeOfDayCondition(rule, year, month, day, hour, minute, second)
Methods
def get_attributes(self)
-
returns the attributes of the TimeOfDayCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the TimeOfDayCondition as a dict""" basedict = {} dt = ( str(self.year) + "-" + "{:0>2}".format(self.month) + "-" + "{:0>2}".format(self.day) + "T" + "{:0>2}".format(self.hour) + ":" + "{:0>2}".format(self.minute) + ":" + "{:0>2}".format(self.second) ) basedict["dateTime"] = dt basedict["rule"] = self.rule.get_name() return basedict
def get_element(self)
-
returns the elementTree of the TimeOfDayCondition
Expand source code
def get_element(self): """returns the elementTree of the TimeOfDayCondition""" return ET.Element("TimeOfDayCondition", attrib=self.get_attributes())
class TimeToCollisionCondition (value, rule, alongroute=True, freespace=True, entity=None, position=None, distance_type=<scenariogeneration.xosc.enumerations._OscEnum object>, coordinate_system=<scenariogeneration.xosc.enumerations._OscEnum object>, routing_algorithm=None)
-
the TimeToCollisionCondition class is an Entity Condition used by the EntityTrigger
Parameters
value (float): time to collision rule (Rule): condition rule of triggering alongroute (bool): if the route should count Default: True freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True optionals: entity (str): the entity to trigger collision on position (*Position): a position for collision distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1) Default: RelativeDistanceType.longitudinal coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1) Default: CoordinateSystem.road routing_algorithm (RoutingAlgorithm): the routing algorithm for the condition (valid from V1.2) Default: None
Attributes
value (float): time before collision rule (Rule): condition rule of triggering alongroute (bool): if the route should count Default: True freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True optionals: entity (EntityRef): entity for the collision position (*Position): a position for collision distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1) coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1) routing_algorithm (RoutingAlgorithm): the routing algorithm for the condition (valid from V1.2)
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the TimeToCollisionCondition
Parameters
value (float): time to collision rule (Rule): condition rule of triggering alongroute (bool): if the route should count Default: True freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True optionals: entity (str): the entity to trigger collision on position (*Position): a position for collision distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1) Default: RelativeDistanceType.longitudinal coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1) Default: CoordinateSystem.road routing_algorithm (RoutingAlgorithm): the routing algorithm for the condition (valid from V1.2) Default: None
Expand source code
class TimeToCollisionCondition(_EntityTriggerType): """the TimeToCollisionCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- value (float): time to collision rule (Rule): condition rule of triggering alongroute (bool): if the route should count Default: True freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True optionals: entity (str): the entity to trigger collision on position (*Position): a position for collision distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1) Default: RelativeDistanceType.longitudinal coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1) Default: CoordinateSystem.road routing_algorithm (RoutingAlgorithm): the routing algorithm for the condition (valid from V1.2) Default: None Attributes ---------- value (float): time before collision rule (Rule): condition rule of triggering alongroute (bool): if the route should count Default: True freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True optionals: entity (EntityRef): entity for the collision position (*Position): a position for collision distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1) coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1) routing_algorithm (RoutingAlgorithm): the routing algorithm for the condition (valid from V1.2) Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__( self, value, rule, alongroute=True, freespace=True, entity=None, position=None, distance_type=RelativeDistanceType.longitudinal, coordinate_system=CoordinateSystem.road, routing_algorithm=None, ): """initalize the TimeToCollisionCondition Parameters ---------- value (float): time to collision rule (Rule): condition rule of triggering alongroute (bool): if the route should count Default: True freespace (bool): (True) distance between bounding boxes, (False) distance between ref point Default: True optionals: entity (str): the entity to trigger collision on position (*Position): a position for collision distance_type (RelativeDistanceType): how the relative distance should be calculated (valid from V1.1) Default: RelativeDistanceType.longitudinal coordinate_system (CoordinateSystem): what coordinate system to use for the relative distance (valid from V1.1) Default: CoordinateSystem.road routing_algorithm (RoutingAlgorithm): the routing algorithm for the condition (valid from V1.2) Default: None """ self.value = convert_float(value) self.freespace = convert_bool(freespace) self.alongroute = convert_bool(alongroute) self.rule = convert_enum(rule, Rule) self.use_entity = None if (entity != None) and (position != None): raise ToManyOptionalArguments( "Can only have either entity of position, not both" ) if entity: self.entity = EntityRef(entity) self.use_entity = True if position: if not isinstance(position, _PositionType): raise TypeError("input position is not a valid Position") self.position = position self.use_entity = False if self.use_entity == None: raise ValueError("neither position or entity was set.") self.relative_distance_type = convert_enum(distance_type, RelativeDistanceType) self.coordinate_system = convert_enum(coordinate_system, CoordinateSystem) self.routing_algorithm = convert_enum(routing_algorithm, RoutingAlgorithm, True) def __eq__(self, other): if isinstance(other, TimeToCollisionCondition): if self.get_attributes() == other.get_attributes(): if ( self.use_entity and other.use_entity and self.entity and other.entity ) or ( not self.use_entity and not other.use_entity and self.position and other.position ): return True return False @staticmethod def parse(element): """Parses the xml element of TimeToCollisionCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (TimeToCollisionCondition): a TimeToCollisionCondition object """ condition = element.find("TimeToCollisionCondition") value = condition.attrib["value"] rule = convert_enum(condition.attrib["rule"], Rule) freespace = convert_bool(condition.attrib["freespace"]) routing_algorithm = None if "alongRoute" in condition.attrib: alongroute = convert_bool(condition.attrib["alongRoute"]) else: alongroute = True if "relativeDistanceType" in condition.attrib: reldisttype = convert_enum( condition.attrib["relativeDistanceType"], RelativeDistanceType ) else: reldisttype = RelativeDistanceType.longitudinal if "coordinateSystem" in condition.attrib: coordsystem = convert_enum( condition.attrib["coordinateSystem"], CoordinateSystem ) else: coordsystem = CoordinateSystem.road entity = None position = None if condition.find("TimeToCollisionConditionTarget/EntityRef") is not None: entityref = EntityRef.parse( condition.find("TimeToCollisionConditionTarget/EntityRef") ) entity = entityref.entity elif condition.find("TimeToCollisionConditionTarget/Position") is not None: position = _PositionFactory.parse_position( condition.find("TimeToCollisionConditionTarget/Position") ) else: raise ValueError( "No TimeToCollisionConditionTarget found while parsing TimeToCollisionCondition." ) if "routingAlgorithm" in condition.attrib: routing_algorithm = convert_enum( condition.attrib["routingAlgorithm"], RoutingAlgorithm ) return TimeToCollisionCondition( value, rule, alongroute, freespace, entity, position, reldisttype, coordsystem, routing_algorithm, ) def get_attributes(self): """returns the attributes of the TimeToCollisionCondition as a dict""" basedict = {} basedict["value"] = str(self.value) if self.isVersion(minor=0): basedict["alongRoute"] = get_bool_string(self.alongroute) else: basedict["relativeDistanceType"] = self.relative_distance_type.name basedict["coordinateSystem"] = self.coordinate_system.name basedict["freespace"] = get_bool_string(self.freespace) basedict["rule"] = self.rule.get_name() if self.routing_algorithm: if self.version_minor < 2: raise OpenSCENARIOVersionError( "RoutingAlgorithm in TimeHeadwayCondition was added in OSC V1.2" ) basedict["routingAlgorithm"] = self.routing_algorithm.get_name() return basedict def get_element(self): """returns the elementTree of the TimeToCollisionCondition""" element = ET.Element("EntityCondition") collisionevent = ET.SubElement( element, "TimeToCollisionCondition", attrib=self.get_attributes() ) targetelement = ET.SubElement(collisionevent, "TimeToCollisionConditionTarget") if self.use_entity: targetelement.append(self.entity.get_element()) else: targetelement.append(self.position.get_element()) return element
Ancestors
- scenariogeneration.xosc.utils._EntityTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of TimeToCollisionCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (TimeToCollisionCondition): a TimeToCollisionCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of TimeToCollisionCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (TimeToCollisionCondition): a TimeToCollisionCondition object """ condition = element.find("TimeToCollisionCondition") value = condition.attrib["value"] rule = convert_enum(condition.attrib["rule"], Rule) freespace = convert_bool(condition.attrib["freespace"]) routing_algorithm = None if "alongRoute" in condition.attrib: alongroute = convert_bool(condition.attrib["alongRoute"]) else: alongroute = True if "relativeDistanceType" in condition.attrib: reldisttype = convert_enum( condition.attrib["relativeDistanceType"], RelativeDistanceType ) else: reldisttype = RelativeDistanceType.longitudinal if "coordinateSystem" in condition.attrib: coordsystem = convert_enum( condition.attrib["coordinateSystem"], CoordinateSystem ) else: coordsystem = CoordinateSystem.road entity = None position = None if condition.find("TimeToCollisionConditionTarget/EntityRef") is not None: entityref = EntityRef.parse( condition.find("TimeToCollisionConditionTarget/EntityRef") ) entity = entityref.entity elif condition.find("TimeToCollisionConditionTarget/Position") is not None: position = _PositionFactory.parse_position( condition.find("TimeToCollisionConditionTarget/Position") ) else: raise ValueError( "No TimeToCollisionConditionTarget found while parsing TimeToCollisionCondition." ) if "routingAlgorithm" in condition.attrib: routing_algorithm = convert_enum( condition.attrib["routingAlgorithm"], RoutingAlgorithm ) return TimeToCollisionCondition( value, rule, alongroute, freespace, entity, position, reldisttype, coordsystem, routing_algorithm, )
Methods
def get_attributes(self)
-
returns the attributes of the TimeToCollisionCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the TimeToCollisionCondition as a dict""" basedict = {} basedict["value"] = str(self.value) if self.isVersion(minor=0): basedict["alongRoute"] = get_bool_string(self.alongroute) else: basedict["relativeDistanceType"] = self.relative_distance_type.name basedict["coordinateSystem"] = self.coordinate_system.name basedict["freespace"] = get_bool_string(self.freespace) basedict["rule"] = self.rule.get_name() if self.routing_algorithm: if self.version_minor < 2: raise OpenSCENARIOVersionError( "RoutingAlgorithm in TimeHeadwayCondition was added in OSC V1.2" ) basedict["routingAlgorithm"] = self.routing_algorithm.get_name() return basedict
def get_element(self)
-
returns the elementTree of the TimeToCollisionCondition
Expand source code
def get_element(self): """returns the elementTree of the TimeToCollisionCondition""" element = ET.Element("EntityCondition") collisionevent = ET.SubElement( element, "TimeToCollisionCondition", attrib=self.get_attributes() ) targetelement = ET.SubElement(collisionevent, "TimeToCollisionConditionTarget") if self.use_entity: targetelement.append(self.entity.get_element()) else: targetelement.append(self.position.get_element()) return element
class TrafficSignalCondition (name, state)
-
the TrafficSignalCondition class is an Value Condition used by the ValueTrigger
Parameters
name (str): name of the traficsignal ??? state (str): state of the signal
Attributes
name (str): name of the traficsignal ??? state (str): state of the signal
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the TrafficSignalCondition
Parameters
name (str): name of the traficsignal ??? state (str): state of the signal
Expand source code
class TrafficSignalCondition(_ValueTriggerType): """the TrafficSignalCondition class is an Value Condition used by the ValueTrigger Parameters ---------- name (str): name of the traficsignal ??? state (str): state of the signal Attributes ---------- name (str): name of the traficsignal ??? state (str): state of the signal Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, name, state): """initalize the TrafficSignalCondition Parameters ---------- name (str): name of the traficsignal ??? state (str): state of the signal """ self.name = name self.state = state def __eq__(self, other): if isinstance(other, TrafficSignalCondition): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of TrafficSignalCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (TrafficSignalCondition): a TrafficSignalCondition object """ name = element.attrib["name"] state = element.attrib["state"] return TrafficSignalCondition(name, state) def get_attributes(self): """returns the attributes of the TrafficSignalCondition as a dict""" return {"name": self.name, "state": self.state} def get_element(self): """returns the elementTree of the TrafficSignalCondition""" return ET.Element("TrafficSignalCondition", attrib=self.get_attributes())
Ancestors
- scenariogeneration.xosc.utils._ValueTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of TrafficSignalCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (TrafficSignalCondition): a TrafficSignalCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of TrafficSignalCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (TrafficSignalCondition): a TrafficSignalCondition object """ name = element.attrib["name"] state = element.attrib["state"] return TrafficSignalCondition(name, state)
Methods
def get_attributes(self)
-
returns the attributes of the TrafficSignalCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the TrafficSignalCondition as a dict""" return {"name": self.name, "state": self.state}
def get_element(self)
-
returns the elementTree of the TrafficSignalCondition
Expand source code
def get_element(self): """returns the elementTree of the TrafficSignalCondition""" return ET.Element("TrafficSignalCondition", attrib=self.get_attributes())
class TrafficSignalControllerCondition (trafficsignalref, phase)
-
the TrafficSignalControllerCondition class is an Value Condition used by the ValueTrigger
Parameters
trafficsignalref (str): ??? phase (str): ???
Attributes
trafficsignalref (str): ??? phase (str): ???
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the TrafficSignalControllerCondition
Parameters
trafficsignalref (str): ??? phase (str): ???
Expand source code
class TrafficSignalControllerCondition(_ValueTriggerType): """the TrafficSignalControllerCondition class is an Value Condition used by the ValueTrigger Parameters ---------- trafficsignalref (str): ??? phase (str): ??? Attributes ---------- trafficsignalref (str): ??? phase (str): ??? Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, trafficsignalref, phase): """initalize the TrafficSignalControllerCondition Parameters ---------- trafficsignalref (str): ??? phase (str): ??? """ self.trafficsignalref = trafficsignalref self.phase = phase def __eq__(self, other): if isinstance(other, TrafficSignalControllerCondition): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of TrafficSignalControllerCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (TrafficSignalControllerCondition): a TrafficSignalControllerCondition object """ trafficsignalref = element.attrib["trafficSignalControllerRef"] phase = element.attrib["phase"] return TrafficSignalControllerCondition(trafficsignalref, phase) def get_attributes(self): """returns the attributes of the TrafficSignalControllerCondition as a dict""" return { "trafficSignalControllerRef": self.trafficsignalref, "phase": self.phase, } def get_element(self): """returns the elementTree of the TrafficSignalControllerCondition""" return ET.Element( "TrafficSignalControllerCondition", attrib=self.get_attributes() )
Ancestors
- scenariogeneration.xosc.utils._ValueTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of TrafficSignalControllerCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (TrafficSignalControllerCondition): a TrafficSignalControllerCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of TrafficSignalControllerCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (TrafficSignalControllerCondition): a TrafficSignalControllerCondition object """ trafficsignalref = element.attrib["trafficSignalControllerRef"] phase = element.attrib["phase"] return TrafficSignalControllerCondition(trafficsignalref, phase)
Methods
def get_attributes(self)
-
returns the attributes of the TrafficSignalControllerCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the TrafficSignalControllerCondition as a dict""" return { "trafficSignalControllerRef": self.trafficsignalref, "phase": self.phase, }
def get_element(self)
-
returns the elementTree of the TrafficSignalControllerCondition
Expand source code
def get_element(self): """returns the elementTree of the TrafficSignalControllerCondition""" return ET.Element( "TrafficSignalControllerCondition", attrib=self.get_attributes() )
class TraveledDistanceCondition (value)
-
the TraveledDistanceCondition class is an Entity Condition used by the EntityTrigger
Parameters
value (float): how far it has traveled
Attributes
value (float): how far it has traveled
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
the TraveledDistanceCondition class is an Entity Condition used by the EntityTrigger
Parameters
value (float): how far it has traveled
Expand source code
class TraveledDistanceCondition(_EntityTriggerType): """the TraveledDistanceCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- value (float): how far it has traveled Attributes ---------- value (float): how far it has traveled Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, value): """the TraveledDistanceCondition class is an Entity Condition used by the EntityTrigger Parameters ---------- value (float): how far it has traveled """ self.value = convert_float(value) def __eq__(self, other): if isinstance(other, TraveledDistanceCondition): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of TraveledDistanceCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (TraveledDistanceCondition): a TraveledDistanceCondition object """ condition = element.find("TraveledDistanceCondition") value = convert_float(condition.attrib["value"]) return TraveledDistanceCondition(value) def get_attributes(self): """returns the attributes of the TraveledDistanceCondition as a dict""" return {"value": str(self.value)} def get_element(self): """returns the elementTree of the TraveledDistanceCondition""" element = ET.Element("EntityCondition") ET.SubElement( element, "TraveledDistanceCondition", attrib=self.get_attributes() ) return element
Ancestors
- scenariogeneration.xosc.utils._EntityTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of TraveledDistanceCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (TraveledDistanceCondition): a TraveledDistanceCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of TraveledDistanceCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (TraveledDistanceCondition): a TraveledDistanceCondition object """ condition = element.find("TraveledDistanceCondition") value = convert_float(condition.attrib["value"]) return TraveledDistanceCondition(value)
Methods
def get_attributes(self)
-
returns the attributes of the TraveledDistanceCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the TraveledDistanceCondition as a dict""" return {"value": str(self.value)}
def get_element(self)
-
returns the elementTree of the TraveledDistanceCondition
Expand source code
def get_element(self): """returns the elementTree of the TraveledDistanceCondition""" element = ET.Element("EntityCondition") ET.SubElement( element, "TraveledDistanceCondition", attrib=self.get_attributes() ) return element
class Trigger (triggeringpoint='start')
-
The Trigger class creates a Trigger that can be used if multiple ConditionGroups are wanted The Trigger acts like an "OR" logic for all added ConditionGroups
Parameters
triggeringpoint (str): start or stop Default: start
Attributes
triggeringpoint (str): start or stop conditiongroups (list of ConditionGroup): a list of all conditiongroups
Methods
get_element() Returns the full ElementTree of the class add_conditiongroup(conditiongroup) Adds a conditiongroup to the trigger
initalize the Trigger
Parameters
triggeringpoint (str): start or stop
Expand source code
class Trigger(_TriggerType): """The Trigger class creates a Trigger that can be used if multiple ConditionGroups are wanted The Trigger acts like an "OR" logic for all added ConditionGroups Parameters ---------- triggeringpoint (str): start or stop Default: start Attributes ---------- triggeringpoint (str): start or stop conditiongroups (list of ConditionGroup): a list of all conditiongroups Methods ------- get_element() Returns the full ElementTree of the class add_conditiongroup(conditiongroup) Adds a conditiongroup to the trigger """ def __init__(self, triggeringpoint="start"): """initalize the Trigger Parameters ---------- triggeringpoint (str): start or stop """ if triggeringpoint not in ["start", "stop"]: raise ValueError("not a valid triggering point, valid start or stop") if triggeringpoint == "start": self._triggerpoint = "StartTrigger" else: self._triggerpoint = "StopTrigger" self.conditiongroups = [] def __eq__(self, other): if isinstance(other, Trigger): if ( self.conditiongroups == other.conditiongroups and self._triggerpoint == other._triggerpoint ): return True elif isinstance(other, EntityTrigger) or isinstance(other, ValueTrigger): if ( len(self.conditiongroups) == 1 and len(self.conditiongroups[0].conditions) == 1 ): if ( self._triggerpoint == other._triggerpoint and self.conditiongroups[0].conditions[0] == other ): return True elif isinstance(other, ConditionGroup): if len(self.conditiongroups) == 1: if ( self._triggerpoint == other._triggerpoint and self.conditiongroups[0] == other ): return True elif isinstance(other, EmptyTrigger): if ( len(self.conditiongroups) == 0 and self._triggerpoint == other._triggerpoint ): return True return False @staticmethod def parse(element): """Parses the xml element of ConditionGroup Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- conditiongroup (ConditionGroup): a ConditionGroup object """ trigger = Trigger() trigger._triggerpoint = element.tag conditiongroups = element.findall("ConditionGroup") for condgr in conditiongroups: trigger.add_conditiongroup(ConditionGroup.parse(condgr)) return trigger def add_conditiongroup(self, conditiongroup): """Adds a conditiongroup to the trigger Parameters ---------- conditiongroup (ConditionGroup): a conditiongroup to add to the trigger """ if not isinstance(conditiongroup, ConditionGroup): raise TypeError("conditiongroup input not of type ConditionGroup") conditiongroup._set_used_by_parent() self.conditiongroups.append(conditiongroup) return self def get_element(self): """returns the elementTree of the Trigger""" element = ET.Element(self._triggerpoint) if not self.conditiongroups: ValueError("No conditiongroups were added to the trigger") for c in self.conditiongroups: element.append(c.get_element()) return element
Ancestors
- scenariogeneration.xosc.utils._TriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of ConditionGroup
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
conditiongroup (ConditionGroup): a ConditionGroup object
Expand source code
@staticmethod def parse(element): """Parses the xml element of ConditionGroup Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- conditiongroup (ConditionGroup): a ConditionGroup object """ trigger = Trigger() trigger._triggerpoint = element.tag conditiongroups = element.findall("ConditionGroup") for condgr in conditiongroups: trigger.add_conditiongroup(ConditionGroup.parse(condgr)) return trigger
Methods
def add_conditiongroup(self, conditiongroup)
-
Adds a conditiongroup to the trigger
Parameters
conditiongroup (ConditionGroup): a conditiongroup to add to the trigger
Expand source code
def add_conditiongroup(self, conditiongroup): """Adds a conditiongroup to the trigger Parameters ---------- conditiongroup (ConditionGroup): a conditiongroup to add to the trigger """ if not isinstance(conditiongroup, ConditionGroup): raise TypeError("conditiongroup input not of type ConditionGroup") conditiongroup._set_used_by_parent() self.conditiongroups.append(conditiongroup) return self
def get_element(self)
-
returns the elementTree of the Trigger
Expand source code
def get_element(self): """returns the elementTree of the Trigger""" element = ET.Element(self._triggerpoint) if not self.conditiongroups: ValueError("No conditiongroups were added to the trigger") for c in self.conditiongroups: element.append(c.get_element()) return element
class TriggeringEntities (triggeringrule)
-
the TriggeringEntities class is used by Value and Entity Triggers to defined the trigger entity
Parameters
triggeringrule (TriggeringEntitiesRule): all or any
Attributes
entity (list of EntityRef): refernce to the entity triggeringrule (TriggeringEntitiesRule): all or any
Methods
add_entity(entity) adds a entityref to the triggering entities get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the TriggeringEntities
Parameters
entity (TriggeringEntitiesRule): name of the entity triggeringrule (str): all or any
Expand source code
class TriggeringEntities(VersionBase): """the TriggeringEntities class is used by Value and Entity Triggers to defined the trigger entity Parameters ---------- triggeringrule (TriggeringEntitiesRule): all or any Attributes ---------- entity (list of EntityRef): refernce to the entity triggeringrule (TriggeringEntitiesRule): all or any Methods ------- add_entity(entity) adds a entityref to the triggering entities get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, triggeringrule): """initalize the TriggeringEntities Parameters ---------- entity (TriggeringEntitiesRule): name of the entity triggeringrule (str): all or any """ self.entity = [] self.triggeringrule = convert_enum(triggeringrule, TriggeringEntitiesRule) def __eq__(self, other): if isinstance(other, TriggeringEntities): if ( self.get_attributes() == other.get_attributes() and self.entity == other.entity ): return True return False @staticmethod def parse(element): """Parses the xml element of TriggeringEntities Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- triggeringentities (TriggeringEntities): a TriggeringEntities object """ rule = convert_enum( element.attrib["triggeringEntitiesRule"], TriggeringEntitiesRule ) triggeringentities = TriggeringEntities(rule) entrefs = element.findall("EntityRef") for ent in entrefs: entityref = EntityRef.parse(ent) triggeringentities.add_entity(entityref.entity) return triggeringentities def add_entity(self, entity): """add_entity adds an entity to the TriggeringEntities Parameters ---------- entity (str): name of the entity to add """ self.entity.append(EntityRef(entity)) return self def get_attributes(self): """returns the attributes of the LaneOffsetAction as a dict""" return {"triggeringEntitiesRule": self.triggeringrule.get_name()} def get_element(self): """returns the elementTree of the LaneOffsetAction""" element = ET.Element("TriggeringEntities", attrib=self.get_attributes()) if len(self.entity) == 0: raise NotEnoughInputArguments("No TriggereingEntities has been added") for ent in self.entity: element.append(ent.get_element()) return element
Ancestors
Static methods
def parse(element)
-
Parses the xml element of TriggeringEntities
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
triggeringentities (TriggeringEntities): a TriggeringEntities object
Expand source code
@staticmethod def parse(element): """Parses the xml element of TriggeringEntities Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- triggeringentities (TriggeringEntities): a TriggeringEntities object """ rule = convert_enum( element.attrib["triggeringEntitiesRule"], TriggeringEntitiesRule ) triggeringentities = TriggeringEntities(rule) entrefs = element.findall("EntityRef") for ent in entrefs: entityref = EntityRef.parse(ent) triggeringentities.add_entity(entityref.entity) return triggeringentities
Methods
def add_entity(self, entity)
-
add_entity adds an entity to the TriggeringEntities
Parameters
entity (str): name of the entity to add
Expand source code
def add_entity(self, entity): """add_entity adds an entity to the TriggeringEntities Parameters ---------- entity (str): name of the entity to add """ self.entity.append(EntityRef(entity)) return self
def get_attributes(self)
-
returns the attributes of the LaneOffsetAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the LaneOffsetAction as a dict""" return {"triggeringEntitiesRule": self.triggeringrule.get_name()}
def get_element(self)
-
returns the elementTree of the LaneOffsetAction
Expand source code
def get_element(self): """returns the elementTree of the LaneOffsetAction""" element = ET.Element("TriggeringEntities", attrib=self.get_attributes()) if len(self.entity) == 0: raise NotEnoughInputArguments("No TriggereingEntities has been added") for ent in self.entity: element.append(ent.get_element()) return element
class UserDefinedValueCondition (name, value, rule)
-
the UserDefinedValueCondition class is an Value Condition used by the ValueTrigger
Parameters
name (str): name of the parameter value (int): value to trigger on rule (Rule): condition rule of triggering
Attributes
name (str): name of the parameter value (int): value to trigger on rule (Rule): condition rule of triggering
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the UserDefinedValueCondition
Parameters
name (str): name of the parameter value (int): value to trigger on rule (Rule): condition rule of triggering
Expand source code
class UserDefinedValueCondition(_ValueTriggerType): """the UserDefinedValueCondition class is an Value Condition used by the ValueTrigger Parameters ---------- name (str): name of the parameter value (int): value to trigger on rule (Rule): condition rule of triggering Attributes ---------- name (str): name of the parameter value (int): value to trigger on rule (Rule): condition rule of triggering Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, name, value, rule): """initalize the UserDefinedValueCondition Parameters ---------- name (str): name of the parameter value (int): value to trigger on rule (Rule): condition rule of triggering """ self.name = name self.value = value self.rule = convert_enum(rule, Rule) def __eq__(self, other): if isinstance(other, UserDefinedValueCondition): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of UserDefinedValueCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (UserDefinedValueCondition): a UserDefinedValueCondition object """ name = element.attrib["name"] value = convert_int(element.attrib["value"]) rule = convert_enum(element.attrib["rule"], Rule) return UserDefinedValueCondition(name, value, rule) def get_attributes(self): """returns the attributes of the UserDefinedValueCondition as a dict""" basedict = {"name": self.name, "value": str(self.value)} basedict["rule"] = self.rule.get_name() return basedict def get_element(self): """returns the elementTree of the UserDefinedValueCondition""" return ET.Element("UserDefinedValueCondition", attrib=self.get_attributes())
Ancestors
- scenariogeneration.xosc.utils._ValueTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of UserDefinedValueCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (UserDefinedValueCondition): a UserDefinedValueCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of UserDefinedValueCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (UserDefinedValueCondition): a UserDefinedValueCondition object """ name = element.attrib["name"] value = convert_int(element.attrib["value"]) rule = convert_enum(element.attrib["rule"], Rule) return UserDefinedValueCondition(name, value, rule)
Methods
def get_attributes(self)
-
returns the attributes of the UserDefinedValueCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the UserDefinedValueCondition as a dict""" basedict = {"name": self.name, "value": str(self.value)} basedict["rule"] = self.rule.get_name() return basedict
def get_element(self)
-
returns the elementTree of the UserDefinedValueCondition
Expand source code
def get_element(self): """returns the elementTree of the UserDefinedValueCondition""" return ET.Element("UserDefinedValueCondition", attrib=self.get_attributes())
class ValueTrigger (name, delay, conditionedge, valuecondition, triggeringpoint='start')
-
the ValueTrigger creates a Trigger of the type ValueTrigger of openscenario
Parameters
name (str): name of the trigger delay (float): the delay of the trigger conditionedge (ConditionEdge): on what conditionedge the trigger should act valuecondition (*ValueCondition): a value condition triggeringentity (str): the entity of the trigger triggeringrule (str): rule of the trigger Default: 'any' triggeringpoint (str): start or stop
Attributes
name (str): name of the trigger delay (float): the delay of the trigger conditionedge (ConditionEdge): the condition edge valuecondition (*ValueCondition): the value condition triggerentity (TriggeringEntities): the triggering entity
Methods
get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the ValueTrigger
Parameters
name (str): name of the trigger delay (float): the delay of the trigger conditionedge (ConditionEdge): on what conditionedge the trigger should act valuecondition (*ValueCondition): a value condition triggeringentity (str): the entity of the trigger triggeringrule (str): rule of the trigger Default: 'any' #TODO CHECK THIS triggeringpoint (str): start or stop
Expand source code
class ValueTrigger(_TriggerType): """the ValueTrigger creates a Trigger of the type ValueTrigger of openscenario Parameters ---------- name (str): name of the trigger delay (float): the delay of the trigger conditionedge (ConditionEdge): on what conditionedge the trigger should act valuecondition (*ValueCondition): a value condition triggeringentity (str): the entity of the trigger triggeringrule (str): rule of the trigger Default: 'any' triggeringpoint (str): start or stop Attributes ---------- name (str): name of the trigger delay (float): the delay of the trigger conditionedge (ConditionEdge): the condition edge valuecondition (*ValueCondition): the value condition triggerentity (TriggeringEntities): the triggering entity Methods ------- get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__( self, name, delay, conditionedge, valuecondition, triggeringpoint="start" ): """initalize the ValueTrigger Parameters ---------- name (str): name of the trigger delay (float): the delay of the trigger conditionedge (ConditionEdge): on what conditionedge the trigger should act valuecondition (*ValueCondition): a value condition triggeringentity (str): the entity of the trigger triggeringrule (str): rule of the trigger Default: 'any' #TODO CHECK THIS triggeringpoint (str): start or stop """ self.name = name if triggeringpoint not in ["start", "stop"]: raise ValueError("not a valid triggering point, valid start or stop") if triggeringpoint == "start": self._triggerpoint = "StartTrigger" else: self._triggerpoint = "StopTrigger" self.delay = convert_float(delay) self.conditionedge = convert_enum(conditionedge, ConditionEdge) if not isinstance(valuecondition, _ValueTriggerType): raise TypeError("entitycondition is not a valid EntityCondition") self.valuecondition = valuecondition self._used_by_parent = False def __eq__(self, other): if isinstance(other, ValueTrigger): if ( self.get_attributes() == other.get_attributes() and self.valuecondition == other.valuecondition and self._triggerpoint == other._triggerpoint ): return True elif isinstance(other, Trigger): if ( len(other.conditiongroups) == 1 and len(other.conditiongroups[0].conditions) == 1 ): if ( self._triggerpoint == other._triggerpoint and other.conditiongroups[0].conditions[0] == self ): return True elif isinstance(other, ConditionGroup): if len(other.conditions) == 1: if ( self._triggerpoint == other._triggerpoint and other.conditions[0] == self ): return True return False @staticmethod def parse(element): """Parses the xml element of ValueTrigger NOTE: this parser will ONLY parse the Condition itself, not the CondintionGroup or Trigger that it can generate Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (ValueTrigger): a ValueTrigger object """ if element.tag != "Condition": raise NotAValidElement( "ValueTrigger only parses a Condition, not ", element ) name = element.attrib["name"] delay = convert_float(element.attrib["delay"]) conditionedge = convert_enum(element.attrib["conditionEdge"], ConditionEdge) condition = _ValueConditionFactory.parse_value_condition( element.find("ByValueCondition") ) return ValueTrigger(name, delay, conditionedge, condition) def _set_used_by_parent(self): """_set_used_by_parent is used internaly if the condition is added to a ConditionGroup""" self._used_by_parent = True def get_attributes(self): """returns the attributes of the LaneOffsetAction as a dict""" return { "name": self.name, "delay": str(self.delay), "conditionEdge": self.conditionedge.get_name(), } def get_element(self): """returns the elementTree of the LaneOffsetAction""" condition = ET.Element("Condition", attrib=self.get_attributes()) byvalue = ET.SubElement(condition, "ByValueCondition") byvalue.append(self.valuecondition.get_element()) if self._used_by_parent: return condition else: # could create a new Trigger ConditionGroup here, but went with this solution for now element = ET.Element(self._triggerpoint) condgroup = ET.SubElement(element, "ConditionGroup") condgroup.append(condition) return element
Ancestors
- scenariogeneration.xosc.utils._TriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of ValueTrigger NOTE: this parser will ONLY parse the Condition itself, not the CondintionGroup or Trigger that it can generate
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (ValueTrigger): a ValueTrigger object
Expand source code
@staticmethod def parse(element): """Parses the xml element of ValueTrigger NOTE: this parser will ONLY parse the Condition itself, not the CondintionGroup or Trigger that it can generate Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (ValueTrigger): a ValueTrigger object """ if element.tag != "Condition": raise NotAValidElement( "ValueTrigger only parses a Condition, not ", element ) name = element.attrib["name"] delay = convert_float(element.attrib["delay"]) conditionedge = convert_enum(element.attrib["conditionEdge"], ConditionEdge) condition = _ValueConditionFactory.parse_value_condition( element.find("ByValueCondition") ) return ValueTrigger(name, delay, conditionedge, condition)
Methods
def get_attributes(self)
-
returns the attributes of the LaneOffsetAction as a dict
Expand source code
def get_attributes(self): """returns the attributes of the LaneOffsetAction as a dict""" return { "name": self.name, "delay": str(self.delay), "conditionEdge": self.conditionedge.get_name(), }
def get_element(self)
-
returns the elementTree of the LaneOffsetAction
Expand source code
def get_element(self): """returns the elementTree of the LaneOffsetAction""" condition = ET.Element("Condition", attrib=self.get_attributes()) byvalue = ET.SubElement(condition, "ByValueCondition") byvalue.append(self.valuecondition.get_element()) if self._used_by_parent: return condition else: # could create a new Trigger ConditionGroup here, but went with this solution for now element = ET.Element(self._triggerpoint) condgroup = ET.SubElement(element, "ConditionGroup") condgroup.append(condition) return element
class VariableCondition (variable, value, rule)
-
the VariableCondition class is an Value Condition used by the ValueTrigger (valid from V1.2)
Parameters
variable (str): the variable to trigger on value (int): value to trigger on rule (Rule): condition rule of triggering
Attributes
variable (str): the variable to trigger on value (int): value to trigger on rule (Rule): condition rule of triggering
Methods
parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class
initalize the VariableCondition
Parameters
variable (str): the variable to trigger on value (int): value to trigger on rule (Rule): condition rule of triggering
Expand source code
class VariableCondition(_ValueTriggerType): """the VariableCondition class is an Value Condition used by the ValueTrigger (valid from V1.2) Parameters ---------- variable (str): the variable to trigger on value (int): value to trigger on rule (Rule): condition rule of triggering Attributes ---------- variable (str): the variable to trigger on value (int): value to trigger on rule (Rule): condition rule of triggering Methods ------- parse(element) parses a ElementTree created by the class and returns an instance of the class get_element() Returns the full ElementTree of the class get_attributes() Returns a dictionary of all attributes of the class """ def __init__(self, variable, value, rule): """initalize the VariableCondition Parameters ---------- variable (str): the variable to trigger on value (int): value to trigger on rule (Rule): condition rule of triggering """ self.variable = variable self.value = value self.rule = convert_enum(rule, Rule) def __eq__(self, other): if isinstance(other, VariableCondition): if self.get_attributes() == other.get_attributes(): return True return False @staticmethod def parse(element): """Parses the xml element of VariableCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (VariableCondition): a VariableCondition object """ variable = element.attrib["variableRef"] value = element.attrib["value"] rule = convert_enum(element.attrib["rule"], Rule) return VariableCondition(variable, value, rule) def get_attributes(self): """returns the attributes of the VariableCondition as a dict""" basedict = {"variableRef": self.variable, "value": str(self.value)} basedict["rule"] = self.rule.get_name() return basedict def get_element(self): """returns the elementTree of the VariableCondition""" if self.isVersionEqLess(minor=1): raise OpenSCENARIOVersionError("VariableCondition was added in OSC 1.2") return ET.Element("VariableCondition", attrib=self.get_attributes())
Ancestors
- scenariogeneration.xosc.utils._ValueTriggerType
- VersionBase
Static methods
def parse(element)
-
Parses the xml element of VariableCondition
Parameters
element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself)
Returns
condition (VariableCondition): a VariableCondition object
Expand source code
@staticmethod def parse(element): """Parses the xml element of VariableCondition Parameters ---------- element (xml.etree.ElementTree.Element): A position element (same as generated by the class itself) Returns ------- condition (VariableCondition): a VariableCondition object """ variable = element.attrib["variableRef"] value = element.attrib["value"] rule = convert_enum(element.attrib["rule"], Rule) return VariableCondition(variable, value, rule)
Methods
def get_attributes(self)
-
returns the attributes of the VariableCondition as a dict
Expand source code
def get_attributes(self): """returns the attributes of the VariableCondition as a dict""" basedict = {"variableRef": self.variable, "value": str(self.value)} basedict["rule"] = self.rule.get_name() return basedict
def get_element(self)
-
returns the elementTree of the VariableCondition
Expand source code
def get_element(self): """returns the elementTree of the VariableCondition""" if self.isVersionEqLess(minor=1): raise OpenSCENARIOVersionError("VariableCondition was added in OSC 1.2") return ET.Element("VariableCondition", attrib=self.get_attributes())