Source code for scenic.syntax.ast

import ast
import typing
from typing import Optional, Union


[docs]class AST(ast.AST): "Scenic AST base class" _attributes = ("lineno", "col_offset", "end_lineno", "end_col_offset") def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs)
# special statements
[docs]class TryInterrupt(AST): """Scenic AST node that represents try-interrupt statements""" __match_args__ = ( "body", "interrupt_when_handlers", "except_handlers", "orelse", "finalbody", ) def __init__( self, body: typing.List[ast.stmt], interrupt_when_handlers: typing.List["InterruptWhenHandler"], except_handlers: typing.List[ast.ExceptHandler], orelse: typing.List[ast.stmt], finalbody: typing.List[ast.AST], *args: any, **kwargs: any, ) -> None: super().__init__(*args, **kwargs) self.body = body self.interrupt_when_handlers = interrupt_when_handlers self.except_handlers = except_handlers self.orelse = orelse self.finalbody = finalbody self._fields = [ "body", "interrupt_when_handlers", "except_handlers", "orelse", "finalbody", ] self._attributes = []
class InterruptWhenHandler(AST): __match_args__ = ("cond", "body") def __init__( self, cond: ast.AST, body: typing.List[ast.AST], *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.cond = cond self.body = body self._fields = ["cond", "body"] class TrackedAssign(AST): __match_args__ = ( "target", "value", ) def __init__( self, target: Union["Ego", "Workspace"], value: ast.AST, *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.target = target self.value = value self._fields = ["target", "value"]
[docs]class Ego(AST): "`ego` tracked assign target" functionName = "ego"
[docs]class Workspace(AST): ":term:`workspace` tracked assign target" functionName = "workspace"
class InitialScenario(AST): pass class PropertyDef(AST): __match_args__ = ("property", "attributes", "value") def __init__( self, property: str, attributes: typing.List[Union["Additive", "Dynamic", "Final"]], value=ast.AST, *args: any, **kwargs: any, ) -> None: super().__init__(*args, **kwargs) self.property = property self.attributes = attributes self.value = value self._fields = ["property", "attributes", "value"] class Additive(AST): keyword = "additive" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) class Dynamic(AST): keyword = "dynamic" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) class Final(AST): keyword = "final" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) # behavior / monitor class BehaviorDef(AST): __match_args__ = ("name", "args", "docstring", "header", "body") def __init__( self, name: str, args: ast.arguments, docstring: Optional[str], header: typing.List[Union["Precondition", "Invariant"]], body: typing.List[any], *_args: any, **kwargs: any, ) -> None: super().__init__(*_args, **kwargs) self.name = name self.args = args self.docstring = docstring self.header = header self.body = body self._fields = ["name", "args", "docstring", "header", "body"] class MonitorDef(AST): __match_args__ = ("name", "args", "docstring", "body") def __init__( self, name: str, args: ast.arguments, docstring: Optional[str], body: typing.List[ast.AST], *_args: any, **kwargs: any, ) -> None: super().__init__(*_args, **kwargs) self.name = name self.args = args self.docstring = docstring self.body = body self._fields = ["name", "args", "docstring", "body"] class Precondition(AST): __match_args__ = ("value",) def __init__(self, value: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.value = value self._fields = ["value"] class Invariant(AST): __match_args__ = ("value",) def __init__(self, value: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.value = value self._fields = ["value"] # modular scenarios class ScenarioDef(AST): __match_args__ = ("name", "args", "docstring", "header", "setup", "compose") def __init__( self, name: str, args: ast.arguments, docstring: Optional[str], header: Optional[typing.List[Union[Precondition, Invariant]]], setup: typing.List[ast.AST], compose: typing.List[ast.AST], *_args: any, **kwargs: any, ) -> None: super().__init__(*_args, **kwargs) self.name = name self.args = args self.docstring = docstring self.header = header self.setup = setup self.compose = compose self._fields = ["name", "args", "docstring", "header", "setup", "compose"] # simple statements class Model(AST): __match_args__ = ("name",) def __init__(self, name: str, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.name = name self._fields = ["name"]
[docs]class Param(AST): ":keyword:`param` statements" __match_args__ = ("elts",) def __init__(self, elts: typing.List["parameter"], *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.elts = elts self._fields = ["elts"]
[docs]class parameter(AST): "represents a parameter that is defined with `param` statements" __match_args__ = ("identifier", "value") def __init__( self, identifier: str, value: ast.AST, *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.identifier = identifier self.value = value self._fields = ["identifier", "value"]
class Require(AST): __match_args__ = ("cond", "prob", "name") def __init__( self, cond: ast.AST, prob: Optional[float] = None, name: Optional[str] = None, *args: any, **kwargs: any, ) -> None: super().__init__(*args, **kwargs) self.cond = cond self.prob = prob self.name = name self._fields = ["cond", "prob", "name"] class RequireMonitor(AST): __match_args__ = ("monitor", "name") def __init__( self, monitor: ast.AST, name: Optional[str] = None, *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.monitor = monitor self.name = name self._fields = ["monitor", "name"] class Always(AST): __match_args__ = ("value",) def __init__(self, value: ast.AST, *args, **kwargs): super().__init__(*args, **kwargs) self.value = value self._fields = ["value"] def __reduce__(self): return ( type(self), (self.value,), { "lineno": self.lineno, "end_lineno": self.end_lineno, "col_offset": self.col_offset, "end_col_offset": self.end_col_offset, }, ) class Eventually(AST): __match_args__ = ("value",) def __init__(self, value: ast.AST, *args, **kwargs): super().__init__(*args, **kwargs) self.value = value self._fields = ["value"] def __reduce__(self): return ( type(self), (self.value,), { "lineno": self.lineno, "end_lineno": self.end_lineno, "col_offset": self.col_offset, "end_col_offset": self.end_col_offset, }, ) class Next(AST): __match_args__ = ("value",) def __init__(self, value: ast.AST, *args, **kwargs): super().__init__(*args, **kwargs) self.value = value self._fields = ["value"] def __reduce__(self): return ( type(self), (self.value,), { "lineno": self.lineno, "end_lineno": self.end_lineno, "col_offset": self.col_offset, "end_col_offset": self.end_col_offset, }, ) class Record(AST): __match_args__ = ("value", "name") def __init__( self, value: ast.AST, name: Optional[str] = None, *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.value = value self.name = name self._fields = ["value", "name"] class RecordInitial(AST): __match_args__ = ("value", "name") def __init__( self, value: ast.AST, name: Optional[str] = None, *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.value = value self.name = name self._fields = ["value", "name"] class RecordFinal(AST): __match_args__ = ("value", "name") def __init__( self, value: ast.AST, name: Optional[str] = None, *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.value = value self.name = name self._fields = ["value", "name"] class Mutate(AST): __match_args__ = ("elts", "scale") def __init__( self, elts: typing.List[ast.Name], scale: Optional[ast.AST] = None, *args: any, **kwargs: any, ) -> None: super().__init__(*args, **kwargs) self.elts = elts self.scale = scale self._fields = ["elts", "scale"] class Override(AST): __match_args__ = ("target", "specifiers") def __init__( self, target: ast.AST, specifiers: typing.List[ast.AST], *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.target = target self.specifiers = specifiers self._fields = ["target", "specifiers"] class Abort(AST): pass class Take(AST): __match_args__ = ("elts",) def __init__(self, elts: typing.List[ast.AST], *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.elts = elts self._fields = ["elts"] class Wait(AST): pass class Terminate(AST): pass class TerminateSimulation(AST): pass class TerminateSimulationWhen(AST): __match_args__ = ( "cond", "name", ) def __init__( self, cond: ast.AST, name: Optional[str] = None, *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.cond = cond self.name = name self._fields = ["cond", "name"] class TerminateWhen(AST): __match_args__ = ( "cond", "name", ) def __init__( self, cond: ast.AST, name: Optional[str] = None, *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.cond = cond self.name = name self._fields = ["cond", "name"] class TerminateAfter(AST): __match_args__ = ("duration",) def __init__( self, duration: Union["Seconds", "Steps"], *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.duration = duration self._fields = ["duration"] class DoFor(AST): __match_args__ = ("elts", "duration") def __init__( self, elts: typing.List[ast.AST], duration: Union["Seconds", "Steps"], *args: any, **kwargs: any, ) -> None: super().__init__(*args, **kwargs) self.elts = elts self.duration = duration self._fields = ["elts", "duration"] class Seconds(AST): __match_args__ = ("value",) unitStr = "seconds" def __init__(self, value: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.value = value self._fields = ["value"] class Steps(AST): __match_args__ = ("value",) unitStr = "steps" def __init__(self, value: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.value = value self._fields = ["value"] class DoUntil(AST): __match_args__ = ("elts", "cond") def __init__( self, elts: typing.List[ast.AST], cond: ast.AST, *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.elts = elts self.cond = cond self._fields = ["elts", "cond"] class DoChoose(AST): __match_args__ = ("elts",) def __init__(self, elts: typing.List[ast.AST], *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.elts = elts self._fields = ["elts"] class DoShuffle(AST): __match_args__ = ("elts",) def __init__(self, elts: typing.List[ast.AST], *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.elts = elts self._fields = ["elts"] class Do(AST): __match_args__ = ("elts",) def __init__(self, elts: typing.List[ast.AST], *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.elts = elts self._fields = ["elts"] class Simulator(AST): __match_args__ = ("value",) def __init__(self, value: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.value = value self._fields = ["value"] # Instance Creation class New(AST): __match_args__ = ("className", "specifiers") def __init__( self, className: str, specifiers: list, *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.className = className self.specifiers = specifiers if specifiers is not None else [] self._fields = ["className", "specifiers"] # Specifiers class WithSpecifier(AST): __match_args__ = ("prop", "value") def __init__(self, prop: str, value: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.prop = prop self.value = value self._fields = ["prob", "value"] class AtSpecifier(AST): __match_args__ = ("position",) def __init__(self, position: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.position = position self._fields = ["position"] class OffsetBySpecifier(AST): __match_args__ = ("offset",) def __init__(self, offset: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.offset = offset self._fields = ["offset"] class OffsetAlongSpecifier(AST): __match_args__ = ("direction", "offset") def __init__( self, direction: ast.AST, offset: ast.AST, *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.direction = direction self.offset = offset self._fields = ["direction", "offset"] class DirectionOfSpecifier(AST): __match_args__ = ("direction", "position", "distance") def __init__( self, direction: Union["LeftOf", "RightOf", "AheadOf", "Behind"], position: ast.AST, distance: Optional[ast.AST], *args: any, **kwargs: any, ) -> None: super().__init__(*args, **kwargs) self.direction = direction self.position = position self.distance = distance self._fields = ["direction", "position", "distance"] class LeftOf(AST): def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) class RightOf(AST): def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) class AheadOf(AST): def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) class Behind(AST): def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) class Above(AST): def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) class Below(AST): def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) class BeyondSpecifier(AST): __match_args__ = ("position", "offset", "base") def __init__( self, position: ast.AST, offset: ast.AST, base: Optional[ast.AST] = None, *args: any, **kwargs: any, ) -> None: super().__init__(*args, **kwargs) self.position = position self.offset = offset self.base = base self._fields = ["position", "offset", "base"] class VisibleSpecifier(AST): __match_args__ = ("base",) def __init__(self, base: Optional[ast.AST] = None, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.base = base self._fields = ["base"] class NotVisibleSpecifier(AST): __match_args__ = ("base",) def __init__(self, base: Optional[ast.AST] = None, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.base = base self._fields = ["base"] class InSpecifier(AST): __match_args__ = ("region",) def __init__(self, region: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.region = region self._fields = ["region"] class OnSpecifier(AST): __match_args__ = ("region",) def __init__(self, region: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.region = region self._fields = ["region"] class ContainedInSpecifier(AST): __match_args__ = ("region",) def __init__(self, region: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.region = region self._fields = ["region"] class FollowingSpecifier(AST): __match_args__ = ("field", "distance", "base") def __init__( self, field: ast.AST, distance: ast.AST, base: Optional[ast.AST] = None, *args: any, **kwargs: any, ) -> None: super().__init__(*args, **kwargs) self.field = field self.distance = distance self.base = base self._fields = ["field", "distance", "base"] class FacingSpecifier(AST): __match_args__ = ("heading",) def __init__(self, heading: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.heading = heading self._fields = ["heading"] class FacingTowardSpecifier(AST): __match_args__ = ("position",) def __init__(self, position: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.position = position self._fields = ["position"] class FacingAwayFromSpecifier(AST): __match_args__ = ("position",) def __init__(self, position: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.position = position self._fields = ["position"] class FacingDirectlyTowardSpecifier(AST): __match_args__ = ("position",) def __init__(self, position: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.position = position self._fields = ["position"] class FacingDirectlyAwayFromSpecifier(AST): __match_args__ = ("position",) def __init__(self, position: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.position = position self._fields = ["position"] class ApparentlyFacingSpecifier(AST): __match_args__ = ("heading", "base") def __init__( self, heading: ast.AST, base: Optional[ast.AST] = None, *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.heading = heading self.base = base self._fields = ["heading", "base"] # Operators class ImpliesOp(AST): __match_args__ = ("hypothesis", "conclusion") def __init__( self, hypothesis: ast.AST, conclusion: ast.AST, *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.hypothesis = hypothesis self.conclusion = conclusion self._fields = ["hypothesis", "conclusion"] def __reduce__(self): return ( type(self), (self.hypothesis, self.conclusion), { "lineno": self.lineno, "end_lineno": self.end_lineno, "col_offset": self.col_offset, "end_col_offset": self.end_col_offset, }, ) class UntilOp(AST): __match_args__ = ("left", "right") def __init__(self, left: ast.AST, right: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.left = left self.right = right self._fields = ["left", "right"] def __reduce__(self): return ( type(self), (self.left, self.right), { "lineno": self.lineno, "end_lineno": self.end_lineno, "col_offset": self.col_offset, "end_col_offset": self.end_col_offset, }, ) class RelativePositionOp(AST): __match_args__ = ("target", "base") def __init__( self, target: ast.AST, base: ast.AST = None, *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.target = target self.base = base self._fields = ["target", "base"] class RelativeHeadingOp(AST): __match_args__ = ("target", "base") def __init__( self, target: ast.AST, base: ast.AST = None, *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.target = target self.base = base self._fields = ["target", "base"] class ApparentHeadingOp(AST): __match_args__ = ("target", "base") def __init__( self, target: ast.AST, base: ast.AST = None, *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.target = target self.base = base self._fields = ["target", "base"] class DistanceFromOp(AST): __match_args__ = ("target", "base") def __init__( self, # because `to` and `from` are symmetric, the first operand will be `target` and the second will be `base` target: ast.AST, base: Optional[ast.AST] = None, *args: any, **kwargs: any, ) -> None: super().__init__(*args, **kwargs) self.target = target self.base = base self._fields = ["target", "base"] class DistancePastOp(AST): __match_args__ = ("target", "base") def __init__( self, target: ast.AST, base: Optional[ast.AST] = None, *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.target = target self.base = base self._fields = ["target", "base"] class AngleFromOp(AST): __match_args__ = ("target", "base") def __init__( self, target: Optional[ast.AST] = None, base: Optional[ast.AST] = None, *args: any, **kwargs: any, ) -> None: super().__init__(*args, **kwargs) self.target = target self.base = base self._fields = ["target", "base"] class AltitudeFromOp(AST): __match_args__ = ("target", "base") def __init__( self, target: Optional[ast.AST] = None, base: Optional[ast.AST] = None, *args: any, **kwargs: any, ) -> None: super().__init__(*args, **kwargs) self.target = target self.base = base self._fields = ["target", "base"] class FollowOp(AST): __match_args__ = ("target", "base", "distance") def __init__( self, target: ast.AST, base: ast.AST, distance: ast.AST, *args: any, **kwargs: any ) -> None: super().__init__(*args, **kwargs) self.target = target self.base = base self.distance = distance self._fields = ["target", "base", "distance"] class VisibleOp(AST): __match_args__ = ("region",) def __init__(self, region: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.region = region self._fields = ["region"] class NotVisibleOp(AST): __match_args__ = ("region",) def __init__(self, region: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.region = region self._fields = ["region"] class VisibleFromOp(AST): __match_args__ = ("region", "base") def __init__(self, region: ast.AST, base: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.region = region self.base = base self._fields = ["region", "base"] class NotVisibleFromOp(AST): __match_args__ = ("region", "base") def __init__(self, region: ast.AST, base: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.region = region self.base = base self._fields = ["region", "base"] class PositionOfOp(AST): __match_args__ = ("position", "target") def __init__( self, position: Union[ "Front", "Back", "Left", "Right", "Top", "Bottom", "FrontLeft", "FrontRight", "BackLeft", "BackRight", "TopFrontLeft", "TopFrontRight", "TopBackLeft", "TopBackRight", "BottomFrontLeft", "BottomFrontRight", "BottomBackLeft", "BottomBackRight", ], target: ast.AST, *args: any, **kwargs: any, ) -> None: super().__init__(*args, **kwargs) self.position = position self.target = target self._fields = ["position", "target"]
[docs]class Front(AST): "Represents position of :scenic:`front of` operator" functionName = "Front" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs)
[docs]class Back(AST): "Represents position of :scenic:`back of` operator" functionName = "Back" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs)
[docs]class Left(AST): "Represents position of :scenic:`left of` operator" functionName = "Left" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs)
[docs]class Top(AST): "Represents position of :scenic:`top of` operator" functionName = "Top" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs)
[docs]class Bottom(AST): "Represents position of :scenic:`bottom of` operator" functionName = "Bottom" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs)
[docs]class FrontLeft(AST): "Represents position of :scenic:`front left of` operator" functionName = "FrontLeft" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs)
[docs]class FrontRight(AST): "Represents position of :scenic:`front right of` operator" functionName = "FrontRight" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs)
[docs]class BackLeft(AST): "Represents position of :scenic:`back left of` operator" functionName = "BackLeft" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs)
[docs]class BackRight(AST): "Represents position of :scenic:`back right of` operator" functionName = "BackRight" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs)
[docs]class TopFrontLeft(AST): "Represents position of :scenic:`top front left of` operator" functionName = "TopFrontLeft" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs)
[docs]class TopFrontRight(AST): "Represents position of :scenic:`top front right of` operator" functionName = "TopFrontRight" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs)
[docs]class TopBackLeft(AST): "Represents position of :scenic:`top back left of` operator" functionName = "TopBackLeft" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs)
[docs]class TopBackRight(AST): "Represents position of :scenic:`top back right of` operator" functionName = "TopBackRight" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs)
[docs]class BottomFrontLeft(AST): "Represents position of :scenic:`bottom front left of` operator" functionName = "BottomFrontLeft" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs)
[docs]class BottomFrontRight(AST): "Represents position of :scenic:`bottom front right of` operator" functionName = "BottomFrontRight" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs)
[docs]class BottomBackLeft(AST): "Represents position of :scenic:`bottom back left of` operator" functionName = "BottomBackLeft" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs)
[docs]class BottomBackRight(AST): "Represents position of :scenic:`bottom back right of` operator" functionName = "BottomBackRight" def __init__(self, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs)
class DegOp(AST): __match_args__ = ("operand",) def __init__(self, operand: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.operand = operand self._fields = ["operand"] class VectorOp(AST): __match_args__ = ("left", "right") def __init__(self, left: ast.AST, right: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.left = left self.right = right self._fields = ["left", "right"] class FieldAtOp(AST): __match_args__ = ("left", "right") def __init__(self, left: ast.AST, right: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.left = left self.right = right self._fields = ["left", "right"] class RelativeToOp(AST): __match_args__ = ("left", "right") def __init__(self, left: ast.AST, right: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.left = left self.right = right self._fields = ["left", "right"] class OffsetAlongOp(AST): __match_args__ = ("base", "direction", "offset") def __init__( self, base: ast.AST, direction: ast.AST, offset: ast.AST, *args: any, **kwargs: any, ) -> None: super().__init__(*args, **kwargs) self.base = base self.direction = direction self.offset = offset self._fields = ["base", "direction", "offset"] class CanSeeOp(AST): __match_args__ = ("left", "right") def __init__(self, left: ast.AST, right: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.left = left self.right = right self._fields = ["left", "right"] class IntersectsOp(AST): __match_args__ = ("left", "right") def __init__(self, left: ast.AST, right: ast.AST, *args: any, **kwargs: any) -> None: super().__init__(*args, **kwargs) self.left = left self.right = right self._fields = ["left", "right"]