unilab.dr

Domain randomization package.

Invariant: this package must not depend on unilab.base.*

class unilab.dr.DomainRandomizationCapabilities[source]

Bases: object

Backend domain-randomization capability declaration.

supported_interval_terms is the authoritative set-based declaration of interval term support. The five supports_interval_* bools are deprecated (kept for backward compatibility; removed in the next major release): supports_interval_term() consults them only as a fallback when the term is absent from supported_interval_terms, so old constructor call sites keep their meaning.

Parameters:
  • supported_reset_terms (frozenset[str])

  • supports_interval_push (bool)

  • supports_interval_body_velocity_delta (bool)

  • supports_interval_body_angular_velocity_delta (bool)

  • supports_interval_body_force (bool)

  • supports_interval_body_torque (bool)

  • supported_interval_terms (frozenset[str])

supported_reset_terms: frozenset[str]
supports_interval_push: bool = False
supports_interval_body_velocity_delta: bool = False
supports_interval_body_angular_velocity_delta: bool = False
supports_interval_body_force: bool = False
supports_interval_body_torque: bool = False
supported_interval_terms: frozenset[str]
supports_reset_term(term)[source]
Parameters:

term (str)

Return type:

bool

supports_interval_term(term)[source]

Return whether the backend declares support for one interval term.

Set membership in supported_interval_terms wins; otherwise the deprecated legacy bool mapped to term decides.

Parameters:

term (str)

Return type:

bool

get_unsupported_interval_terms(terms)[source]
Parameters:

terms (Iterable[str])

Return type:

frozenset[str]

get_unsupported_reset_terms(requested_terms)[source]
Parameters:

requested_terms (frozenset[str])

Return type:

frozenset[str]

filter_reset_payload(payload)[source]
Parameters:

payload (ResetRandomizationPayload)

Return type:

tuple[ResetRandomizationPayload | None, frozenset[str]]

__init__(supported_reset_terms=<factory>, supports_interval_push=False, supports_interval_body_velocity_delta=False, supports_interval_body_angular_velocity_delta=False, supports_interval_body_force=False, supports_interval_body_torque=False, supported_interval_terms=<factory>)
Parameters:
  • supported_reset_terms (frozenset[str])

  • supports_interval_push (bool)

  • supports_interval_body_velocity_delta (bool)

  • supports_interval_body_angular_velocity_delta (bool)

  • supports_interval_body_force (bool)

  • supports_interval_body_torque (bool)

  • supported_interval_terms (frozenset[str])

class unilab.dr.DomainRandomizationManager[source]

Bases: object

Parameters:
__init__(env, provider)[source]
Parameters:
property last_reset_timing_ms: dict[str, float]
apply_init_randomization()[source]
Return type:

bool

reset(env_ids)[source]
Parameters:

env_ids (ndarray)

Return type:

tuple[dict[str, ndarray], dict]

apply_interval_randomization_if_due(step_counter)[source]
Parameters:

step_counter (int)

Return type:

None

class unilab.dr.DomainRandomizationProvider[source]

Bases: ABC

abstract validate(env, capabilities)[source]
Parameters:
Return type:

None

build_init_randomization_plan(env)[source]
Parameters:

env (Any)

Return type:

InitRandomizationPlan | None

abstract build_reset_plan(env, env_ids)[source]
Parameters:
Return type:

ResetPlan

abstract build_reset_observation(env, env_ids, info_updates)[source]
Parameters:
Return type:

dict[str, ndarray]

build_interval_randomization_plan(env, step_counter)[source]

Build the interval randomization plan for the upcoming step.

Populate the plan’s ops tuple with IntervalTermOp entries. Returning plans via the legacy fields (push_perturbation_limit, body_ids, body_linear_velocity_delta, body_angular_velocity_delta, body_force, body_torque) is deprecated: they are still adapted 1:1 through IntervalRandomizationPlan.iter_ops(), but they will be removed in the next unisim-core major release.

Parameters:
  • env (Any)

  • step_counter (int)

Return type:

IntervalRandomizationPlan | None

class unilab.dr.GeomSizeOverride[source]

Bases: object

GeomSizeOverride(geom_name: ‘str’, size: ‘tuple[float, …]’)

Parameters:
geom_name: str
size: tuple[float, ...]
__init__(geom_name, size)
Parameters:
class unilab.dr.InitRandomizationPlan[source]

Bases: object

InitRandomizationPlan(model_assignments: ‘np.ndarray’, model_variants: ‘tuple[ModelVariantSpec, …]’)

Parameters:
model_assignments: ndarray
model_variants: tuple[ModelVariantSpec, ...]
is_empty()[source]
Return type:

bool

__init__(model_assignments, model_variants)
Parameters:
class unilab.dr.IntervalRandomizationPlan[source]

Bases: object

Scheduled interval randomization request.

The five legacy fields (push_perturbation_limit, body_ids, body_linear_velocity_delta, body_angular_velocity_delta, body_force, body_torque) are deprecated: they are kept for backward compatibility and will be removed in the next major release. New code should populate ops with IntervalTermOp entries. iter_ops() translates each set legacy field into one op; mixing legacy fields and explicit ops is allowed and both are yielded.

Parameters:
push_perturbation_limit: Sequence[float] | ndarray | None = None
body_ids: ndarray | None = None
body_linear_velocity_delta: ndarray | None = None
body_angular_velocity_delta: ndarray | None = None
body_force: ndarray | None = None
body_torque: ndarray | None = None
ops: tuple[IntervalTermOp, ...] = ()
iter_ops()[source]

Return ops derived 1:1 from set legacy fields, then explicit ops.

Return type:

tuple[IntervalTermOp, ...]

is_empty()[source]
Return type:

bool

__init__(push_perturbation_limit=None, body_ids=None, body_linear_velocity_delta=None, body_angular_velocity_delta=None, body_force=None, body_torque=None, ops=())
Parameters:
class unilab.dr.IntervalTermOp[source]

Bases: object

One interval randomization operation: term, payload, optional bodies.

Parameters:
term: str
payload: ndarray
body_ids: ndarray | None = None
validate()[source]

Check the builtin spec contract; custom terms pass through.

Return type:

None

__init__(term, payload, body_ids=None)
Parameters:
class unilab.dr.ModelVariantSpec[source]

Bases: object

ModelVariantSpec(geom_size_overrides: ‘tuple[GeomSizeOverride, …]’ = <factory>)

Parameters:

geom_size_overrides (tuple[GeomSizeOverride, ...])

geom_size_overrides: tuple[GeomSizeOverride, ...]
is_empty()[source]
Return type:

bool

__init__(geom_size_overrides=<factory>)
Parameters:

geom_size_overrides (tuple[GeomSizeOverride, ...])

class unilab.dr.ResetPlan[source]

Bases: object

ResetPlan(env_ids: ‘np.ndarray’, qpos: ‘np.ndarray’, qvel: ‘np.ndarray’, info_updates: ‘dict[str, Any]’, randomization: ‘ResetRandomizationPayload | None’ = None)

Parameters:
env_ids: ndarray
qpos: ndarray
qvel: ndarray
info_updates: dict[str, Any]
randomization: ResetRandomizationPayload | None = None
__init__(env_ids, qpos, qvel, info_updates, randomization=None)
Parameters:
class unilab.dr.ResetRandomizationPayload[source]

Bases: object

ResetRandomizationPayload(base_mass_delta: ‘np.ndarray | None’ = None, base_com_offset: ‘np.ndarray | None’ = None, gravity: ‘np.ndarray | None’ = None, body_iquat: ‘np.ndarray | None’ = None, body_inertia: ‘np.ndarray | None’ = None, body_ipos: ‘np.ndarray | None’ = None, body_mass: ‘np.ndarray | None’ = None, dof_armature: ‘np.ndarray | None’ = None, geom_friction: ‘np.ndarray | None’ = None, kp: ‘np.ndarray | None’ = None, kd: ‘np.ndarray | None’ = None, geom_size: ‘np.ndarray | None’ = None, geom_solref: ‘np.ndarray | None’ = None, geom_solimp: ‘np.ndarray | None’ = None, dof_damping: ‘np.ndarray | None’ = None, dof_frictionloss: ‘np.ndarray | None’ = None)

Parameters:
base_mass_delta: ndarray | None = None
base_com_offset: ndarray | None = None
gravity: ndarray | None = None
body_iquat: ndarray | None = None
body_inertia: ndarray | None = None
body_ipos: ndarray | None = None
body_mass: ndarray | None = None
dof_armature: ndarray | None = None
geom_friction: ndarray | None = None
kp: ndarray | None = None
kd: ndarray | None = None
geom_size: ndarray | None = None
geom_solref: ndarray | None = None
geom_solimp: ndarray | None = None
dof_damping: ndarray | None = None
dof_frictionloss: ndarray | None = None
requested_terms()[source]
Return type:

frozenset[str]

is_empty()[source]
Return type:

bool

__init__(base_mass_delta=None, base_com_offset=None, gravity=None, body_iquat=None, body_inertia=None, body_ipos=None, body_mass=None, dof_armature=None, geom_friction=None, kp=None, kd=None, geom_size=None, geom_solref=None, geom_solimp=None, dof_damping=None, dof_frictionloss=None)
Parameters:

Modules