Syntax Guide
This page summarizes the syntax of Scenic, excluding the basic syntax of variable assignments, functions, loops, etc., which is identical to Python (see the Python Tutorial for an introduction). For more details, click the links for individual language constructs to go to the corresponding section of the Language Reference.
Primitive Data Types
expressing truth values |
|
representing distances, angles, etc. as floating-point numbers |
|
representing positions and offsets in space |
|
representing 2D orientations in the XY plane |
|
representing 3D orientations in space |
|
associating an orientation to each point in space |
|
representing sets of points in space |
|
representing shapes (regions modulo similarity) |
Distributions
uniformly-distributed real number in the interval |
|
uniformly-distributed integer in the (fixed) interval |
|
normal distribution with the given mean and standard deviation |
|
normal distribution truncated to the given window |
|
uniform over a finite set of values |
|
discrete with given values and weights |
|
uniformly-distributed Point in a region |
Statements
Compound Statements
Syntax |
Meaning |
---|---|
Defines a Scenic class. |
|
Defines a dynamic behavior. |
|
Defines a monitor. |
|
Defines a modular scenario. |
|
Run code with interrupts inside a dynamic behavior or modular scenario. |
Simple Statements
Syntax |
Meaning |
---|---|
Select the world model. |
|
Import a Scenic or Python module. |
|
Define global parameters of the scenario. |
|
Define a hard requirement. |
|
Define a soft requirement. |
|
Define a dynamic hard requirement. |
|
Define a dynamic requirement using a monitor. |
|
Define a termination condition. |
|
Set the scenario to terminate after a given amount of time. |
|
Enable mutation of the given list of objects. |
|
Save a value at every time step or only at the start/end of the simulation. |
Dynamic Statements
These statements can only be used inside a dynamic behavior, monitor, or compose
block of a modular scenario.
Syntax |
Meaning |
---|---|
Take the action(s) specified. |
|
Take no actions this time step. |
|
Immediately end the scenario. |
|
Immediately end the entire simulation. |
|
Run one or more sub-behaviors/sub-scenarios until they complete. |
|
Run sub-behaviors/scenarios until they complete or a condition is met. |
|
Run sub-behaviors/scenarios for (at most) a specified period of time. |
|
Run one choice of sub-behavior/scenario whose preconditions are satisfied. |
|
Run several sub-behaviors/scenarios in a random order, satisfying preconditions. |
|
Break out of the current |
|
Override properties of an object for the duration of the current scenario. |
Objects
The syntax new class specifier, ...
creates an instance of a Scenic class.
The Scenic class Point provides the basic position properties in the first table below; its subclass OrientedPoint adds the orientation properties in the second table. Finally, the class Object, which represents physical objects and is the default superclass of user-defined Scenic classes, adds the properties in the third table. See the Objects and Classes Reference for details.
Property |
Default |
Meaning |
position [1] |
(0, 0, 0) |
position in global coordinates |
visibleDistance |
50 |
distance for the ‘can see’ operator |
viewRayDensity |
5 |
determines ray count (if ray count is not provided) |
viewRayDistanceScaling |
False |
whether to scale number of rays with distance (if ray count is not provided) |
viewRayCount |
None |
tuple of number of rays to send in each dimension. |
mutationScale |
0 |
overall scale of mutations |
positionStdDev |
(1,1,0) |
mutation standard deviation for |
Properties added by OrientedPoint:
Property |
Default |
Meaning |
yaw [1] |
0 |
yaw in local coordinates |
pitch [1] |
0 |
pitch in local coordinates |
roll [1] |
0 |
roll in local coordinates |
parentOrientation |
global |
basis for local coordinate system |
viewAngles |
(2π, π) |
angles for visibility calculations |
orientationStdDev |
(5°, 0, 0) |
mutation standard deviation for |
Properties added by Object:
Property |
Default |
Meaning |
width |
1 |
width of bounding box (X axis) |
length |
1 |
length of bounding box (Y axis) |
height |
1 |
height of bounding box (Z axis) |
shape |
shape of the object |
|
allowCollisions |
whether collisions are allowed |
|
regionContainedIn |
Region the object must lie within |
|
baseOffset |
(0, 0, -self.height/2) |
offset determining the base of the object |
contactTolerance |
1e-4 |
max distance to be considered on a surface |
sideComponentThresholds |
(-0.5, 0.5) per side |
thresholds to determine side surfaces |
cameraOffset |
(0, 0, 0) |
position of camera for |
requireVisible |
whether object must be visible from ego |
|
occluding |
whether object occludes visibility |
|
showVisibleRegion |
whether to display the visible region |
|
color |
None |
color of object |
velocity [1] |
from |
initial (instantaneous) velocity |
speed [1] |
0 |
initial (later, instantaneous) speed |
angularVelocity [1] |
(0, 0, 0) |
initial (instantaneous) angular velocity |
angularSpeed [1] |
0 |
angular speed (change in |
behavior |
dynamic behavior, if any |
|
lastActions |
tuple of actions taken in last timestamp |
Specifiers
The with property value
specifier can specify any property, including new properties not built into Scenic.
Additional specifiers for the position
and orientation
properties are listed below.
Specifier for |
Meaning |
---|---|
Positions the object at the given global coordinates |
|
Positions the object uniformly at random in the given Region |
|
Positions the object uniformly at random entirely contained in the given Region |
|
Positions the base of the object at the given global coordinates |
|
Positions the object uniformly at random or modifies the position so that base of the Object is in the given Region/on the given Object. |
|
Positions the object at the given coordinates in the local coordinate system of ego (which must already be defined) |
|
Positions the object at the given coordinates, in a local coordinate system centered at ego and oriented along the given direction |
|
|
Positions the object with respect to the line of sight from a point or the ego |
Ensures the object is visible from the ego, or from the given Point/OrientedPoint if given, while optionally specifying position to be uniformly random over all positions that result in a visible object. |
|
Ensures the object is not visible from the ego, or from the given Point/OrientedPoint if given, while optionally specifying position to be uniformly random over all positions that result in a non-visible object. |
|
|
Positions the object to the left/right by the given scalar distance. |
|
Positions the object to the front/back by the given scalar distance |
|
Positions the object above/below by the given scalar distance |
Position by following the given vector field for the given distance starting from ego or the given vector |
Specifier for |
Meaning |
---|---|
Orients the object along the given orientation in global coordinates |
|
Orients the object along the given vector field at the object’s position |
|
Orients the object toward/away from the given position (thereby depending on the object’s position) |
|
Orients the object directly toward/away from the given position (thereby depending on the object’s position) |
|
Orients the object so that it has the given heading with respect to the line of sight from ego (or the given vector) |
Operators
In the following tables, operators are grouped by the type of value they return.
Scalar Operators |
Meaning |
---|---|
The relative heading of the given heading with respect to ego (or the |
|
The apparent heading of the OrientedPoint, with respect to the line of sight from ego (or the given vector) |
|
The distance to the given position from ego (or the |
|
The heading (azimuth) to the given position from ego (or the |
|
The altitude to the given position from ego (or the |
Boolean Operators |
Meaning |
---|---|
Whether or not a position or Object is visible from a Point or OrientedPoint |
|
Whether a position or Object lies in the region |
|
Orientation Operators |
Meaning |
---|---|
The given angle, interpreted as being in degrees |
|
The orientation specified by the vector field at the given position |
|
The first direction (a heading, orientation, or vector field), interpreted as an offset relative to the second direction |
Vector Operators |
Meaning |
---|---|
The first vector, interpreted as an offset relative to the second vector (or vice versa) |
|
The second vector, interpreted in a local coordinate system centered at the first vector and oriented along the given direction |
Region Operators |
Meaning |
---|---|
The part of the given region visible from ego |
|
The part of the given region not visible from ego |
|
The part of the given region visible from the given Point or OrientedPoint. |
|
The part of the given region not visible from the given Point or OrientedPoint. |
OrientedPoint Operators |
Meaning |
---|---|
The given vector, interpreted in the local coordinate system of the OrientedPoint |
|
Equivalent to |
|
The midpoint of the corresponding side of the bounding box of the Object, inheriting the Object’s orientation. |
|
The midpoint of the corresponding edge of the bounding box of the Object, inheriting the Object’s orientation. |
|
The midpoint of the corresponding edge of the bounding box of the Object, inheriting the Object’s orientation. |
|
The corresponding corner of the bounding box of the Object, inheriting the Object’s orientation. |
Temporal Operators |
Meaning |
---|---|
Require the condition to hold at every time step. |
|
Require the condition to hold at some time step. |
|
Require the condition to hold in the next time step. |
|
Require the first condition to hold until the second becomes true. |
|
Require the second condition to hold if the first condition holds. |
Built-in Functions
Function |
Description |
---|---|
Various Python functions including |
|
Filter a possibly-random list (allowing limited randomized control flow). |
|
Sample a new value from a distribution. |
|
Convert a relative path to an absolute path, based on the current directory. |
|
Like |
|
Get the the current simulation object. |