Manager Options¶
Each manager has a *ManagerOptions container and a *TermOptions class for one of its terms. You rarely build a
term options object by hand: <Term>.configure(...) returns one. The container holds terms as named fields, and the
name is the key other code uses (env.reward_manager, get_term("<name>"), a reward's command_name, ...).
Observation and reward terms are grouped one level further (ObservationGroupOptions, RewardGroupOptions). The
terms guide explains configuring terms.
from eden.options.managers.observations import ObservationGroupOptions, ObservationManagerOptions
from eden.options.managers.rewards import RewardManagerOptions
Base¶
ManagerTermOptions is the base of every term's options; FunctionTermOptions adds the params dict that
configure(func=...) fills, for the kinds that accept function terms. ManagerOptions is the base of the containers.
Base manager-options class with dynamic per-term fields.
Attributes¶
T_TermOptions
module-attribute
¶
T_TermOptions = TypeVar('T_TermOptions', bound=ConfigurableOptions)
Classes¶
ManagerTermOptions
¶
Bases: DynamicConfigurableOptions
Base for all per-term options (RewardTermOptions, EventTermOptions, ...).
Term options stay extra="allow" because class-based terms carry their per-term
parameters as extras (the options class is shared by every term of the kind). Typo
protection comes from validating those extras against the registered term instead:
- At construction and on attribute assignment (
model_post_init/__setattr__): whennameresolves in the kind's term registry — stamped onto this class as_term_registry_byTermRegistry.__init__— extras must be parameters of the registered term, and for function terms theparamskeys must be arguments of the registered function.RewardTermOptions(name="upright", wieght=2.0)andoptions.wieght = 2.0both raise in the config file that contains the typo (a rejected assignment is rolled back). - On copy-with-changes (
updated(...)/model_copy(update=...)): the same check runs on the copy — pydantic'supdate=is otherwise unvalidated and would park{"wieght": 2.0}as an extra next to the untouchedweight. - At build (
ConfigurableMixin.__init__): the pre-existing invalid-parameter check backstops options whosenamewas missing or not yet registered at construction time.
Source code in eden/options/options.py
FunctionTermOptions
¶
Bases: ManagerTermOptions
Term options for the function-capable kinds — the ones with a *TermFuncWrapper.
Declares the params dict that configure(func=...) fills and the wrapper's
compute() forwards to the wrapped function. Kinds whose terms are class-based only
(action, command, recorder, motion and the three modifier kinds) subclass :class:ManagerTermOptions
directly; a new kind that grows a function wrapper should switch its options base to
this class.
Source code in eden/options/options.py
ManagerOptions
¶
Bases: DynamicConfigurableOptions, Generic[T_TermOptions]
Generic base class for manager options.
Stores term options as extra fields, validates their types via model_post_init,
and provides disable_term for runtime removal.
Usage::
class EventManagerOptions(ManagerOptions[EventTermOptions]):
pass
# Entries forming a union parametrize with `|` — accepted types stay visible
# in the class signature (e.g. reward managers accept flat terms or groups):
class RewardManagerOptions(ManagerOptions[RewardTermOptions | RewardGroupOptions]):
pass
The term options class (or union) is automatically extracted from the generic
parameter; isinstance accepts union types directly.
Source code in eden/options/options.py
Methods:¶
term_keys
¶
Return only the registered ManagerTerm entry names.
These are the extras validated by :meth:model_post_init to be
_term_options_class_ instances.
This is intentionally distinct from :meth:ConfigurableOptions.keys,
which returns every named child of the options object — including
declared model fields that are config knobs (e.g.
RecorderManagerOptions.dataset_filename), not terms.
Source code in eden/options/managers/base.py
Functions:¶
Actions¶
Action manager and action-term configuration options.
Classes¶
ActionTermOptions
¶
Bases: ManagerTermOptions
Action term specification.
| PARAMETER | DESCRIPTION |
|---|---|
entity_name
|
The name of the entity to control.
|
dofs_name
|
The names of the DOFs to control.
|
Source code in eden/options/options.py
ActionManagerOptions
¶
Bases: ManagerOptions[ActionTermOptions]
Action manager options.
Source code in eden/options/options.py
Observations¶
Observation manager, group, and term configuration options.
Attributes¶
Classes¶
ObservationTermOptions
¶
Bases: FunctionTermOptions
Observation term specification.
The manager processes each frame of the term's output in this order: modifiers, noise,
clip, scale, then the group's nan_policy, and last the history window.
| PARAMETER | DESCRIPTION |
|---|---|
modifiers
|
Transforms applied to the term's output in list order, before noise (default=[], none). Each entry
is a registered :class:
|
noise
|
Noise model applied to the observation, in training only (default=None, no noise).
|
clip
|
Range to clip the observation values (default=None, no clipping).
|
scale
|
Scaling factor applied to the observation (default=1.0). A list gives a per-component
scale matched against the term's feature dim — the last dimension of its raw
|
history_length
|
Number of previous observations to include (default=0, no history).
|
flatten_history_dim
|
Whether to flatten the history into the feature axis, giving
|
backfill
|
Whether to backfill the history with the first observation (default=True). If False, the history will be filled with zeros.
|
Source code in eden/options/options.py
Attributes¶
ObservationGroupOptions
¶
Bases: DynamicConfigurableOptions
Observation group options.
| PARAMETER | DESCRIPTION |
|---|---|
concatenate_terms
|
Whether to concatenate the terms (default=True).
|
concatenate_dim
|
The dimension to concatenate the terms (default=-1).
|
terms_order
|
The order of the terms in the group (default=None).
|
enable_corruption
|
Whether to allow adding noise to each term in the group (default=True).
|
history_length
|
The history length enforced for all terms in the group (default=None).
|
flatten_history_dim
|
Whether to flatten the history dimension (default=True).
|
backfill
|
Whether to backfill the history with the first observation (default=True). If False, the history will be filled with zeros.
|
nan_policy
|
What to do when a term delivers a non-finite value (NaN or ±Inf) (default="disabled", no
check). The check is on each term's frame after its modifiers, noise, clip and scale, just
before the history window, so a report names the term. A
|
Source code in eden/options/options.py
Attributes¶
nan_policy
class-attribute
instance-attribute
¶
nan_policy: Literal['disabled', 'warn', 'sanitize', 'error'] = 'disabled'
Methods:¶
term_keys
¶
Return the names of this group's terms (the counterpart of ManagerOptions.term_keys).
disable_term
¶
disable_term(name: str) -> None
Remove a term from this group by name, and from terms_order when the group declares one.
terms_order must list exactly the group's terms, so a name left behind there would fail
the next load or the observation manager's build, far from this call.
Raises KeyError (listing the terms that exist) for an unknown name and
RuntimeError on a locked config.
Source code in eden/options/managers/observations.py
ObservationManagerOptions
¶
Bases: ManagerOptions[ObservationGroupOptions]
Observation manager options.
Source code in eden/options/options.py
Rewards¶
Reward manager, group, and reward-term configuration options.
Classes¶
RewardTermOptions
¶
Bases: FunctionTermOptions
Reward term specification.
| PARAMETER | DESCRIPTION |
|---|---|
range_s
|
The time window(s) in seconds where the reward is active, as
|
weight
|
A reward weight for the term. Default is 1.0.
|
tags
|
Optional labels for grouping reward terms (e.g.
|
Source code in eden/options/options.py
RewardGroupOptions
¶
Bases: ManagerOptions[RewardTermOptions]
A named group of reward terms.
Groups give downstream consumers a per-group reward readout (multi-channel critics, CMDP task/style/penalty splits, per-group logging) without changing the scalar reward the environment returns — the reward manager always sums over all groups. Unlike observation groups, reward groups partition one flat term set: active term names must be unique across the whole reward manager, groups included.
Extras type-checking, term_keys(), and disable_term() all come from
:class:ManagerOptions via the generic parameter.
Source code in eden/options/options.py
RewardManagerOptions
¶
Bases: ManagerOptions[RewardTermOptions | RewardGroupOptions]
Reward manager options.
Entries are flat reward terms, named groups of reward terms, or a mix of both. Flat terms implicitly belong to the manager's default group.
| PARAMETER | DESCRIPTION |
|---|---|
log_per_term_rewards
|
Whether
|
Source code in eden/options/options.py
Attributes¶
Methods:¶
disable_term
¶
disable_term(name: str) -> None
Remove a flat term, a whole group, or a term nested inside exactly one group, by name.
The name must resolve unambiguously. If it matches more than one entry (a term
declared in several groups, or a top-level entry and a nested term), this raises
ValueError — disable through the owning group instead:
getattr(options, group).disable_term(name). Ambiguity here is name-based, not
activity-based: a weight-0 (inert) duplicate still counts as a match, unlike the
manager's build-time uniqueness check, because options can't know final weights.
Source code in eden/options/managers/rewards.py
Terminations¶
Termination manager and termination-term configuration options.
Classes¶
TerminationTermOptions
¶
Bases: FunctionTermOptions
Termination term specification.
| PARAMETER | DESCRIPTION |
|---|---|
time_out
|
Whether the term contributes towards episodic timeouts. Defaults to False.
|
Source code in eden/options/options.py
TerminationManagerOptions
¶
Bases: ManagerOptions[TerminationTermOptions]
Termination manager options.
Source code in eden/options/options.py
Commands¶
Command manager and command-term configuration options.
Classes¶
CommandTermOptions
¶
Bases: ManagerTermOptions
Command term specification.
| PARAMETER | DESCRIPTION |
|---|---|
resampling_time_range
|
The
|
debug_vis
|
Whether to visualize debug information. Defaults to False.
|
Source code in eden/options/options.py
CommandManagerOptions
¶
Bases: ManagerOptions[CommandTermOptions]
Command manager options.
Source code in eden/options/options.py
Events¶
Event manager and event-term configuration options.
Classes¶
EventTermOptions
¶
Bases: FunctionTermOptions
Event term specification.
| PARAMETER | DESCRIPTION |
|---|---|
mode
|
The mode of the event term. Accepts either an
|
interval_range_s
|
|
is_global_time
|
Interval mode only: one countdown shared by all envs (the term fires with no
|
min_step_count_between_reset
|
Reset mode only: the minimum number of global env steps since the term last fired on an env
before a reset fires it on that env again.
|
priority
|
Lower numbers run first within the same mode. Default is 0.
|
Source code in eden/options/options.py
EventManagerOptions
¶
Bases: ManagerOptions[EventTermOptions]
Event manager options.
Source code in eden/options/options.py
Curricula¶
Curriculum manager and curriculum-term configuration options.
Classes¶
CurriculumTermOptions
¶
Bases: FunctionTermOptions
Curriculum term specification.
Source code in eden/options/options.py
CurriculumManagerOptions
¶
Bases: ManagerOptions[CurriculumTermOptions]
Curriculum manager options.
Source code in eden/options/options.py
Metrics¶
Metric manager and metric-term configuration options.
Classes¶
MetricTermOptions
¶
Bases: FunctionTermOptions
Metric term specification.
| PARAMETER | DESCRIPTION |
|---|---|
success_threshold
|
The threshold for success. The threshold is inclusive. Defaults to 1.0.
|
direction
|
The metric direction. Accepts either a
|
metric_mode
|
The metric success mode. Accepts either a
|
is_cumulative
|
Whether the metric is cumulative. Defaults to False.
|
contributes_to_success
|
Whether the term participates in task-success accounting (
|
Source code in eden/options/options.py
Attributes¶
PhaseOptions
¶
Bases: ConfigurableOptions
Configuration for a single phase in SequentialMetricTerm.
| PARAMETER | DESCRIPTION |
|---|---|
term
|
Inline term configuration (from
TYPE:
|
ref
|
Reference to a sibling term in
TYPE:
|
name
|
Phase display name. Auto-derived from the term if empty.
TYPE:
|
threshold
|
Phase advancement threshold. Defaults to 1.0.
TYPE:
|
hold
|
If
TYPE:
|
hold_term
|
Separate hold predicate (overrides
TYPE:
|
hold_until
|
Scoped hold expiration — a phase name or index. |
hold_guard
|
Name of another phase whose hold must also be failing for this
hold to be enforced. If the guard phase's hold is still passing,
this hold is suppressed. For example,
TYPE:
|
Source code in eden/options/options.py
Attributes¶
CriterionOptions
¶
Bases: ConfigurableOptions
One criterion of a :class:~eden.managers.terms.metrics.sequence.RubricMetricTerm.
| PARAMETER | DESCRIPTION |
|---|---|
name
|
The criterion's name, which the
TYPE:
|
term
|
The predicate (from
TYPE:
|
after
|
Earlier criteria that must have been reached, in this step or before, for this one to count. |
Source code in eden/options/options.py
MetricManagerOptions
¶
Bases: ManagerOptions[MetricTermOptions]
Metric manager options.
Source code in eden/options/options.py
Recorders¶
Recorder manager and recorder-term configuration options.
Classes¶
RecorderTermOptions
¶
Bases: ManagerTermOptions
Recorder term specification.
Source code in eden/options/options.py
RecorderManagerOptions
¶
Bases: ManagerOptions[RecorderTermOptions]
Recorder manager options.
| PARAMETER | DESCRIPTION |
|---|---|
file_handler_options
|
The options for the file handler.
|
dataset_export_dir_path
|
The directory path where the recorded datasets are exported.
|
dataset_filename
|
Dataset file name without file extension.
|
dataset_export_mode
|
The mode to handle episode exports.
|
override
|
Whether to overwrite an existing dataset file.
|
Source code in eden/options/options.py
Attributes¶
file_handler_options
class-attribute
instance-attribute
¶
file_handler_options: FileHandlerOptions = Field(default_factory=_default_file_handler_options)
dataset_export_dir_path
class-attribute
instance-attribute
¶
dataset_export_mode
class-attribute
instance-attribute
¶
dataset_export_mode: DatasetExportMode = DatasetExportMode.EXPORT_ALL
Motions¶
Motion manager and motion-term configuration options.
Classes¶
MotionGroupOptions
¶
Bases: ConfigurableOptions
Restrict each env to the clips that match the variant of a heterogeneous entity it holds.
A heterogeneous entity (GroupedEntityOptions) gives each env one variant for the whole run — one object
mesh out of a bank. A reference clip that manipulates object A is meaningless in an env holding object B, so
with this set every motion draw (initial assignment, reset, adaptive start bins) samples only among the clips
whose per-clip label equals the env's variant label.
| PARAMETER | DESCRIPTION |
|---|---|
entity_name
|
The heterogeneous scene entity whose per-env variant selects the group, e.g.
TYPE:
|
metadata_key
|
The dataset's per-clip label list the groups are matched against (
TYPE:
|
variant_labels
|
One label per variant, in the entity's |
Source code in eden/options/options.py
MotionTermOptions
¶
Bases: ManagerTermOptions
Configuration for the motion buffer.
| PARAMETER | DESCRIPTION |
|---|---|
dataset_options
|
The options for the dataset.
|
entities_map
|
Maps each environment entity name (key) to its motion sequence key in the dataset (value).
|
target_dofs_name
|
Per entity, the names of the degrees of freedom to target. The reference's DOF columns follow this list's order, which need not match the dataset's.
|
target_links_name
|
Per entity, the names of the links to target. The reference's link rows follow this list's order, which need not match the dataset's.
|
env_starting_stub_sampling_strategy
|
How a motion and its start time are drawn.
|
motion_start_from_middle_range
|
|
motion_bin_length_s
|
Width [s] of the start-time bins. Setting it enables bin-weighted start sampling; required by
|
adaptive_sampling
|
Master toggle for adaptive start-time (intra-motion bin) sampling. Defaults to False.
|
adaptive_kernel_size
|
Temporal smoothing kernel width
|
adaptive_lambda
|
Exponential decay for kernel weights: the death bin weighs
|
adaptive_uniform_ratio
|
Minimum uniform floor in sampling probabilities. Defaults to 0.1.
|
adaptive_alpha
|
EMA blend rate for failure counts. Defaults to 0.001.
|
adaptive_failure_rate_max_over_mean
|
Per-START-bin concentration clamp for adaptive start-time sampling.
A bin whose (smoothed) failure rate exceeds
|
motion_weights
|
Initial per-motion-id sampling weights, one entry per loaded trajectory
in motion-id order.
|
adaptive_motion_weights
|
Master toggle for adaptive per-motion-id sampling (hard-motion mining).
Orthogonal to
|
motion_weight_success_discount
|
Per-success multiplicative decay applied to a motion's weight when its
motion plays to its natural end (regardless of whether the env also
terminated this step).
|
motion_weight_failure_amplify
|
Per-failure multiplicative gain applied to a motion's weight when an
episode terminates early without the motion completing.
|
motion_weight_floor
|
Lower clamp on per-motion weight (before re-normalization), so no motion
can be permanently zeroed out. Defaults to 1e-3. Only consulted by
|
motion_weight_update_mode
|
How
|
motion_weight_uniform_mix
|
Applied AFTER the curriculum update under either mode:
|
motion_weight_failure_rate_max_over_mean
|
Snapshot-mode-only outlier clamp. A motion with failure rate
greater than
|
motion_weight_update_every_n_iters
|
Apply the curriculum update every N PPO iterations. Outcomes accumulate in between. Defaults to 1.
|
log_per_motion_metrics
|
Emit per-motion-id distributions as Useful for diagnosing curriculum collapse: a long tail forming in the
weight distribution shows up immediately as a skewed histogram. One
scalar series per motion-id would be ~47k series per iteration at
AMASS scale (~9.4k motions × 5 fields), which overwhelms the wandb
backend and slows rsl-rl's logger; histograms keep the diagnostic at
constant cost.
|
log_motion_id_to_filename
|
When True, additionally emit
|
start_at_timestep_zero_prob
|
On reset, with this probability force the start time to 0 instead of
sampling via
|
freeze_at_timestep_zero_prob
|
Per-step probability that
|
compute_per_motion_metrics
|
When True, accumulate per-step tracking error against the
reference (MPJPE in world frame, root position L2 error, root
quaternion geodesic error) into per-env running sums, then
scatter to per-motion-id aggregators at episode reset. Drained
alongside the success/failure curriculum counts (same
Hot-path cost when enabled: one extra
|
metric_anchor_link_name
|
Optional anchor link (e.g.
|
env_motion_groups
|
Per-env clip groups keyed on a heterogeneous entity's variant (see :class:
|
Source code in eden/options/options.py
Attributes¶
target_dofs_name
class-attribute
instance-attribute
¶
target_links_name
class-attribute
instance-attribute
¶
env_starting_stub_sampling_strategy
class-attribute
instance-attribute
¶
env_starting_stub_sampling_strategy: Literal['independent', 'concat_motion_bins'] = 'independent'
motion_start_from_middle_range
class-attribute
instance-attribute
¶
adaptive_failure_rate_max_over_mean
class-attribute
instance-attribute
¶
adaptive_failure_rate_max_over_mean: float = 10.0
motion_weight_success_discount
class-attribute
instance-attribute
¶
motion_weight_success_discount: float = 0.999
motion_weight_failure_amplify
class-attribute
instance-attribute
¶
motion_weight_failure_amplify: float = 2.0
motion_weight_update_mode
class-attribute
instance-attribute
¶
motion_weight_update_mode: Literal['compound', 'snapshot'] = 'snapshot'
motion_weight_uniform_mix
class-attribute
instance-attribute
¶
motion_weight_uniform_mix: float = 0.0
motion_weight_failure_rate_max_over_mean
class-attribute
instance-attribute
¶
motion_weight_failure_rate_max_over_mean: float = 200.0
motion_weight_update_every_n_iters
class-attribute
instance-attribute
¶
motion_weight_update_every_n_iters: int = 1
start_at_timestep_zero_prob
class-attribute
instance-attribute
¶
start_at_timestep_zero_prob: float = 0.0
freeze_at_timestep_zero_prob
class-attribute
instance-attribute
¶
freeze_at_timestep_zero_prob: float = 0.0
compute_per_motion_metrics
class-attribute
instance-attribute
¶
compute_per_motion_metrics: bool = False
metric_anchor_link_name
class-attribute
instance-attribute
¶
metric_anchor_link_name: str | None = None
log_motion_id_to_filename
class-attribute
instance-attribute
¶
log_motion_id_to_filename: bool = False
env_motion_groups
class-attribute
instance-attribute
¶
env_motion_groups: MotionGroupOptions | None = None
MotionManagerOptions
¶
Bases: ManagerOptions[MotionTermOptions]
Configuration for the motion reference manager.
| PARAMETER | DESCRIPTION |
|---|---|
entities_map
|
Not read by the motion manager; each term's own
|
num_frames
|
The number of future reference frames generated per step. Defaults to 1.
|
data_start_from
|
Where the 0-th reference frame sits:
|
frame_interval_s_range
|
|
mp_split_method
|
How the motion library is split across DDP ranks:
|
symmetric_augmentation
|
Whether to enable symmetric augmentation of motion data (mirroring across the x-z plane). When True, the required mapping fields below must also be provided.
|
symmetric_augmentation_joint_mapping
|
The joint index permutation for symmetric augmentation. Maps each joint to its mirrored counterpart.
|
symmetric_augmentation_joint_reverse_buf
|
Per-joint sign multipliers for symmetric augmentation (e.g., -1.0 for joints that flip sign when mirrored). Required when symmetric_augmentation is True.
|
symmetric_augmentation_links_mapping
|
Link index permutation for symmetric augmentation (in the order of links_of_interests). Required when symmetric_augmentation is True and links are referenced.
|
reference_prim_path
|
Not read by the motion manager.
|
resync_on_motion_end
|
When True, an env whose reference reaches the end of its clip is soft-reset
mid-episode: a fresh start phase is resampled and the robot is teleported
onto the new reference start (via the ReferenceStateInitialization event
term), WITHOUT ending the episode. Mirrors the clip-wrap behavior of
|
Source code in eden/options/options.py
Attributes¶
data_start_from
class-attribute
instance-attribute
¶
data_start_from: Literal['one_frame_interval', 'current_time'] = 'one_frame_interval'
frame_interval_s_range
class-attribute
instance-attribute
¶
mp_split_method
class-attribute
instance-attribute
¶
mp_split_method: Literal['None', 'Even', 'Segment'] = 'None'
symmetric_augmentation_joint_mapping
class-attribute
instance-attribute
¶
symmetric_augmentation_joint_reverse_buf
class-attribute
instance-attribute
¶
symmetric_augmentation_joint_reverse_buf: Sequence | None = None
symmetric_augmentation_links_mapping
class-attribute
instance-attribute
¶
Methods:¶
adaptive_motion_terms
¶
The motion terms that mine hard motions (adaptive_motion_weights), whose weights a curriculum steps.
Source code in eden/options/managers/motions.py
Modifiers¶
Options for action modifiers, observation modifiers and noise models.
Configuration options for action/observation modifiers (including noise).
Classes¶
NoiseOptions
¶
Bases: ManagerTermOptions
Noise options.
| PARAMETER | DESCRIPTION |
|---|---|
operation
|
The operation to apply to the noise. Default is NoiseOperation.ADD.
|
Source code in eden/options/options.py
Attributes¶
ActionModifierOptions
¶
Bases: ManagerTermOptions
Options for action modifiers.
Source code in eden/options/options.py
ObservationModifierOptions
¶
Bases: ManagerTermOptions
Options for an observation modifier — one entry of an observation term's modifiers list.
Built by <ModifierClass>.configure(...); the modifier's own parameters ride as extras, validated
against the registered class like any term's.