Isaac Lab API, powered by MuJoCo-Warp, for RL and robotics research
This report summarizes scanner evidence for mujocolab/mjlab, a Python project with 3,200 GitHub stars. SynthScan examined 77,355 lines of code across 328 source files, recording 1675 pattern matches distributed across 19 syntactic categories. The legacy adjusted pattern signal is 27.1 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 1090 finding(s).
Are imports declared and package/API names verified? 420 finding(s).
Are wrappers, guards, and repeated structures necessary? 1117 finding(s).
Which changes need focused human review? 1675 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 1675 distinct pattern matches across 19 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | typings/postprocess_stubs.py | 84 | def sanitize_machine_specific() -> None: | CODE |
| LOW | tests/test_builtin_group.py | 57 | def test_different_delay_configs_separate_groups(device): | CODE |
| LOW | tests/test_builtin_group.py | 78 | def test_non_builtin_delayed_not_fused(device): | CODE |
| LOW | tests/test_builtin_group.py | 104 | def test_delayed_controls_written(device): | CODE |
| LOW | tests/test_builtin_group.py | 123 | def test_delay_actually_delays(device): | CODE |
| LOW | tests/test_circular_buffer.py | 16 | def test_circular_buffer_basic_append(device): | CODE |
| LOW | tests/test_circular_buffer.py | 35 | def test_circular_buffer_overwrite(device): | CODE |
| LOW | tests/test_circular_buffer.py | 48 | def test_circular_buffer_reset_single_batch(device): | CODE |
| LOW | tests/test_circular_buffer.py | 69 | def test_circular_buffer_first_append_fills(device): | CODE |
| LOW | tests/test_circular_buffer.py | 83 | def test_current_length_counts_and_clamps(device): | CODE |
| LOW | tests/test_circular_buffer.py | 122 | def test_getitem_lifo_and_clamp(device): | CODE |
| LOW | tests/test_circular_buffer.py | 139 | def test_backfill_after_per_batch_reset(device): | CODE |
| LOW | tests/test_circular_buffer.py | 164 | def test_backfill_multidimensional_data(device): | CODE |
| LOW | tests/test_circular_buffer.py | 211 | def test_dtype_and_device_preserved(device): | CODE |
| LOW | tests/test_circular_buffer.py | 220 | def test_backfill_only_touches_given_rows(device): | CODE |
| LOW | tests/test_circular_buffer.py | 252 | def test_backfill_uninitialized_raises(device): | CODE |
| LOW | tests/test_circular_buffer.py | 258 | def test_getitem_lag_clamps_to_oldest_after_wrap(device): | CODE |
| LOW⚡ | tests/test_recorder_manager.py | 203 | def test_record_post_step_called_each_step( | CODE |
| LOW⚡ | tests/test_recorder_manager.py | 212 | def test_record_pre_reset_passes_env_ids( | CODE |
| LOW⚡ | tests/test_recorder_manager.py | 222 | def test_record_post_reset_passes_env_ids( | CODE |
| LOW⚡ | tests/test_recorder_manager.py | 232 | def test_close_propagates_to_all_terms(mock_env: Mock) -> None: | CODE |
| LOW⚡ | tests/test_recorder_manager.py | 309 | def test_function_based_term_raises(mock_env: Mock) -> None: | CODE |
| LOW⚡ | tests/test_recorder_manager.py | 315 | def test_cfg_params_accessible_on_term(mock_env: Mock) -> None: | CODE |
| LOW⚡ | tests/test_recorder_manager.py | 323 | def test_deepcopy_protects_original_cfg(mock_env: Mock) -> None: | CODE |
| LOW⚡ | tests/test_recorder_manager.py | 359 | def test_get_term_missing_raises(mock_env: Mock) -> None: | CODE |
| LOW⚡ | tests/test_recorder_manager.py | 367 | def test_contains_for_recorder_manager(mock_env: Mock) -> None: | CODE |
| LOW⚡ | tests/test_recorder_manager.py | 375 | def test_contains_and_get_term_for_null_manager() -> None: | CODE |
| LOW⚡ | tests/test_recorder_manager.py | 383 | def test_base_term_all_hooks_are_no_ops(mock_env: Mock) -> None: | CODE |
| LOW | tests/test_recorder_manager.py | 69 | def test_terminal_action_available_at_record_pre_reset(mock_env: Mock) -> None: | CODE |
| LOW | tests/test_recorder_manager.py | 122 | def test_record_pre_reset_obs_buf_is_previous_step(mock_env: Mock) -> None: | CODE |
| LOW | tests/test_recorder_manager.py | 158 | def test_record_post_reset_fires_after_obs_are_fresh(mock_env: Mock) -> None: | CODE |
| LOW | tests/test_recorder_manager.py | 180 | def test_record_pre_reset_before_record_post_step_in_step(mock_env: Mock) -> None: | CODE |
| LOW | tests/test_recorder_manager.py | 248 | def test_terms_called_in_registration_order(mock_env: Mock) -> None: | CODE |
| LOW | tests/test_recorder_manager.py | 269 | def test_multiple_terms_have_independent_state(mock_env: Mock) -> None: | CODE |
| LOW | tests/test_recorder_manager.py | 290 | def test_active_terms_matches_registration_order(mock_env: Mock) -> None: | CODE |
| LOW | tests/test_recorder_manager.py | 335 | def test_null_recorder_manager_no_ops() -> None: | CODE |
| LOW | tests/test_recorder_manager.py | 348 | def test_get_term_returns_registered_instance(mock_env: Mock) -> None: | CODE |
| LOW | tests/test_recorder_manager.py | 463 | def test_integration_terminal_action_available_at_record_pre_reset(device: str) -> None: | CODE |
| LOW | tests/test_terrains.py | 69 | def test_no_stone_centers_inside_platform(): | CODE |
| LOW | tests/test_terrains.py | 83 | def test_stone_size_decreases_with_difficulty(): | CODE |
| LOW | tests/test_terrains.py | 96 | def test_pyramid_stairs_border_present_at_zero_difficulty(cfg_cls): | CODE |
| LOW | tests/test_terrains.py | 126 | def test_preset_compiles_across_difficulty(preset_name, difficulty): | CODE |
| LOW | tests/test_terrains.py | 163 | def test_compile_preserves_custom_names_and_defaults_unnamed_geoms(): | CODE |
| LOW | tests/test_video_recorder.py | 31 | def test_step_trigger_writes_video(tmp_path: Path): | CODE |
| LOW⚡ | tests/test_builtin_pd_actuator.py | 83 | def test_two_ctrls_per_target_with_pos_then_vel_layout(device): | CODE |
| LOW⚡ | tests/test_builtin_pd_actuator.py | 99 | def test_site_transmission_rejected(): | CODE |
| LOW⚡ | tests/test_builtin_pd_actuator.py | 109 | def test_armature_applied_once(device): | CODE |
| LOW⚡ | tests/test_builtin_pd_actuator.py | 166 | def test_effort_limit_none_leaves_joint_unlimited(device): | CODE |
| LOW⚡ | tests/test_builtin_pd_actuator.py | 175 | def test_actuator_forcerange_not_set(device): | CODE |
| LOW⚡ | tests/test_builtin_pd_actuator.py | 189 | def test_delay_syncs_pos_and_vel(device): | CODE |
| LOW | tests/test_builtin_pd_actuator.py | 153 | def test_actfrcrange_sum_clamp(device): | CODE |
| LOW | tests/test_builtin_pd_actuator.py | 222 | def test_reset_clears_delay_buffer(device): | CODE |
| LOW | tests/test_builtin_pd_actuator.py | 285 | def test_dr_pd_gains_scales_halves_independently(device): | CODE |
| LOW | tests/test_builtin_pd_actuator.py | 338 | def test_dr_pd_gains_abs_writes_correct_columns(device): | CODE |
| LOW | tests/test_builtin_pd_actuator.py | 380 | def test_dr_effort_limits_writes_jnt_actfrcrange(device): | CODE |
| LOW | tests/test_builtin_pd_actuator.py | 415 | def test_dr_effort_limits_scale_multiplies_default(device): | CODE |
| LOW | tests/test_builtin_pd_actuator.py | 442 | def test_dr_effort_limits_writes_tendon_actfrcrange(device): | CODE |
| LOW | tests/test_xml_utils.py | 11 | def test_strip_buffer_textures(): | CODE |
| LOW | tests/test_xml_utils.py | 64 | def test_rough_terrain_write_xml_roundtrip(tmp_path): | CODE |
| LOW | tests/test_flat_patch_sampling.py | 22 | def test_patches_avoid_step_boundary(rng: np.random.Generator): | CODE |
| 888 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | typings/postprocess_stubs.py | 19 | CODE | |
| LOW | tests/test_velocity_rewards.py | 3 | CODE | |
| LOW | tests/test_terrain_proportion_spawning.py | 3 | CODE | |
| LOW | tests/test_contact_sensor.py | 3 | CODE | |
| LOW | tests/test_builtin_sensor.py | 3 | CODE | |
| LOW | tests/test_raycast_sensor.py | 3 | CODE | |
| LOW | tests/test_camera_sensor.py | 3 | CODE | |
| LOW | tests/test_viewer_tick.py | 3 | CODE | |
| LOW | tests/test_variants.py | 3 | CODE | |
| LOW | tests/test_notebooks.py | 13 | CODE | |
| LOW | tests/test_manipulation_commands.py | 21 | CODE | |
| LOW | tests/test_foot_height_sensor.py | 3 | CODE | |
| LOW | tests/test_projected_gravity_sensor.py | 11 | CODE | |
| LOW | tests/test_native_viewer_actions.py | 3 | CODE | |
| LOW | tests/test_velocity_command.py | 18 | CODE | |
| LOW | tests/test_manipulation_observations.py | 1 | CODE | |
| LOW | tests/test_manipulation_observations.py | 18 | CODE | |
| LOW | tests/test_sensor_caching.py | 3 | CODE | |
| LOW | scripts/tools/terrain_explorer.py | 10 | CODE | |
| LOW | scripts/tools/render_terrain_gallery.py | 10 | CODE | |
| LOW | scripts/benchmarks/measure_throughput.py | 7 | CODE | |
| LOW | scripts/benchmarks/generate_report.py | 7 | CODE | |
| LOW | scripts/demos/contact_sensor_decimation.py | 14 | CODE | |
| LOW | scripts/demos/flat_patch_terrain.py | 12 | CODE | |
| LOW | scripts/demos/differential_ik.py | 9 | CODE | |
| LOW | scripts/demos/raycast_sensor.py | 21 | CODE | |
| LOW | scripts/demos/body_impulse.py | 14 | CODE | |
| LOW | src/mjlab/tasks/manipulation/mdp/terminations.py | 1 | CODE | |
| LOW | src/mjlab/tasks/manipulation/mdp/observations.py | 1 | CODE | |
| LOW | src/mjlab/tasks/manipulation/mdp/__init__.py | 1 | CODE | |
| LOW | src/mjlab/tasks/manipulation/mdp/__init__.py | 3 | CODE | |
| LOW | src/mjlab/tasks/manipulation/mdp/__init__.py | 4 | CODE | |
| LOW | src/mjlab/tasks/manipulation/mdp/__init__.py | 5 | CODE | |
| LOW | src/mjlab/tasks/manipulation/mdp/__init__.py | 6 | CODE | |
| LOW | src/mjlab/tasks/manipulation/mdp/rewards.py | 1 | CODE | |
| LOW | src/mjlab/tasks/manipulation/mdp/commands.py | 1 | CODE | |
| LOW | src/mjlab/tasks/manipulation/rl/__init__.py | 1 | CODE | |
| LOW | src/mjlab/tasks/velocity/mdp/terminations.py | 1 | CODE | |
| LOW | src/mjlab/tasks/velocity/mdp/observations.py | 1 | CODE | |
| LOW | src/mjlab/tasks/velocity/mdp/__init__.py | 1 | CODE | |
| LOW | src/mjlab/tasks/velocity/mdp/__init__.py | 3 | CODE | |
| LOW | src/mjlab/tasks/velocity/mdp/__init__.py | 4 | CODE | |
| LOW | src/mjlab/tasks/velocity/mdp/__init__.py | 5 | CODE | |
| LOW | src/mjlab/tasks/velocity/mdp/__init__.py | 6 | CODE | |
| LOW | src/mjlab/tasks/velocity/mdp/__init__.py | 7 | CODE | |
| LOW | src/mjlab/tasks/velocity/mdp/velocity_command.py | 1 | CODE | |
| LOW | src/mjlab/tasks/velocity/mdp/velocity_command.py | 22 | CODE | |
| LOW | src/mjlab/tasks/velocity/mdp/rewards.py | 1 | CODE | |
| LOW | src/mjlab/tasks/velocity/mdp/terrain_utils.py | 3 | CODE | |
| LOW | src/mjlab/tasks/velocity/mdp/curriculums.py | 1 | CODE | |
| LOW | src/mjlab/tasks/velocity/rl/__init__.py | 1 | CODE | |
| LOW | src/mjlab/tasks/cartpole/cartpole_env_cfg.py | 3 | CODE | |
| LOW | src/mjlab/tasks/tracking/mdp/metrics.py | 1 | CODE | |
| LOW | src/mjlab/tasks/tracking/mdp/terminations.py | 1 | CODE | |
| LOW | src/mjlab/tasks/tracking/mdp/observations.py | 1 | CODE | |
| LOW | src/mjlab/tasks/tracking/mdp/__init__.py | 1 | CODE | |
| LOW | src/mjlab/tasks/tracking/mdp/__init__.py | 3 | CODE | |
| LOW | src/mjlab/tasks/tracking/mdp/__init__.py | 4 | CODE | |
| LOW | src/mjlab/tasks/tracking/mdp/__init__.py | 5 | CODE | |
| LOW | src/mjlab/tasks/tracking/mdp/__init__.py | 6 | CODE | |
| 342 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/test_builtin_pd_actuator.py | 78 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_builtin_pd_actuator.py | 80 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_builtin_pd_actuator.py | 119 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_builtin_pd_actuator.py | 121 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_builtin_pd_actuator.py | 184 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_builtin_pd_actuator.py | 186 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_builtin_pd_actuator.py | 234 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_builtin_pd_actuator.py | 236 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 141 | # ============================================================================= | COMMENT |
| MEDIUM | tests/conftest.py | 143 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_encoder_bias.py | 28 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_encoder_bias.py | 30 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_encoder_bias.py | 97 | # ============================================================================= | STRING |
| MEDIUM⚡ | tests/test_encoder_bias.py | 99 | # ============================================================================= | STRING |
| MEDIUM⚡ | tests/test_encoder_bias.py | 144 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_encoder_bias.py | 146 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_encoder_bias.py | 189 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_encoder_bias.py | 191 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_encoder_bias.py | 213 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_encoder_bias.py | 215 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_encoder_bias.py | 261 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_encoder_bias.py | 263 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_entity.py | 662 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_entity.py | 664 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_raycast_sensor.py | 1017 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_raycast_sensor.py | 1019 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_raycast_sensor.py | 456 | # ============================================================================ | STRING |
| MEDIUM⚡ | tests/test_raycast_sensor.py | 458 | # ============================================================================ | STRING |
| MEDIUM | tests/test_raycast_sensor.py | 577 | # ============================================================================ | STRING |
| MEDIUM | tests/test_raycast_sensor.py | 579 | # ============================================================================ | STRING |
| MEDIUM | tests/test_raycast_sensor.py | 855 | # ============================================================================ | STRING |
| MEDIUM | tests/test_raycast_sensor.py | 857 | # ============================================================================ | STRING |
| MEDIUM | tests/test_actuator.py | 94 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_actuator.py | 96 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_actuator.py | 156 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_actuator.py | 158 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_actuator.py | 265 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_actuator.py | 267 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_events.py | 508 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_events.py | 510 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_events.py | 560 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_events.py | 562 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_events.py | 774 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_events.py | 776 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_events.py | 865 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_events.py | 867 | # =========================================================================== | COMMENT |
| MEDIUM | tests/test_events.py | 26 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_events.py | 28 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_events.py | 198 | # =========================================================================== | COMMENT |
| MEDIUM | tests/test_events.py | 200 | # =========================================================================== | COMMENT |
| MEDIUM | tests/test_events.py | 968 | # =========================================================================== | COMMENT |
| MEDIUM | tests/test_events.py | 970 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_events.py | 80 | # =========================================================================== | STRING |
| MEDIUM⚡ | tests/test_events.py | 82 | # =========================================================================== | STRING |
| MEDIUM⚡ | tests/test_scene.py | 128 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_scene.py | 130 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_scene.py | 254 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_scene.py | 256 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_scene.py | 283 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_scene.py | 285 | # ============================================================================ | COMMENT |
| 18 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/conftest.py | 0 | <mujoco> <worldbody> <body name="ground" pos="0 0 0"> <geom name="ground_geom" type="plane" size="5 5 0.1" rgba="0.5 0.5 | STRING |
| HIGH | tests/test_contact_sensor.py | 0 | <mujoco> <worldbody> <body name="ground" pos="0 0 0"> <geom name="ground_geom" type="plane" size="5 5 0.1" rgba="0.5 0.5 | STRING |
| HIGH | tests/test_sensor_caching.py | 0 | <mujoco> <worldbody> <body name="ground" pos="0 0 0"> <geom name="ground_geom" type="plane" size="5 5 0.1" rgba="0.5 0.5 | STRING |
| HIGH | tests/test_spec_config.py | 0 | <mujoco> <worldbody> <body name="base" pos="0 0 1"> <freejoint name="free_joint"/> <geom name="base_geom" type="box" siz | STRING |
| HIGH | tests/test_actuator_builtin_group.py | 0 | <mujoco> <worldbody> <body name="base" pos="0 0 1"> <freejoint name="free_joint"/> <geom name="base_geom" type="box" siz | STRING |
| HIGH | tests/test_learned_actuator.py | 0 | <mujoco> <worldbody> <body name="base" pos="0 0 1"> <freejoint name="free_joint"/> <geom name="base_geom" type="box" siz | STRING |
| HIGH | tests/test_scene.py | 0 | <mujoco> <worldbody> <body name="base" pos="0 0 1"> <freejoint name="free_joint"/> <geom name="base_geom" type="box" siz | STRING |
| HIGH | tests/test_rl_exporter.py | 0 | <mujoco> <worldbody> <body name="base" pos="0 0 1"> <freejoint name="free_joint"/> <geom name="base_geom" type="box" siz | STRING |
| HIGH | tests/test_xml_actuator.py | 0 | <mujoco> <worldbody> <body name="base" pos="0 0 1"> <freejoint name="free_joint"/> <geom name="base_geom" type="box" siz | STRING |
| HIGH | tests/test_runner.py | 0 | <mujoco> <worldbody> <body name="base" pos="0 0 1"> <freejoint name="free_joint"/> <geom name="base_geom" type="box" siz | STRING |
| HIGH | src/mjlab/tasks/tracking/scripts/evaluate.py | 0 | optional checkpoint name within the w&b run to load (e.g. 'model_4000.pt'). | STRING |
| HIGH | src/mjlab/scripts/play.py | 0 | optional checkpoint name within the w&b run to load (e.g. 'model_4000.pt'). | STRING |
| HIGH | src/mjlab/scripts/train.py | 0 | optional checkpoint name within the w&b run to load (e.g. 'model_4000.pt'). | STRING |
| HIGH | src/mjlab/tasks/tracking/scripts/evaluate.py | 0 | root directory under which experiment logs are written. | STRING |
| HIGH | src/mjlab/scripts/play.py | 0 | root directory under which experiment logs are written. | STRING |
| HIGH | src/mjlab/scripts/train.py | 0 | root directory under which experiment logs are written. | STRING |
| HIGH | src/mjlab/envs/mdp/dr/body.py | 0 | randomize site orientation by composing an rpy perturbation. ranges are in radians. the sampled perturbation is composed | STRING |
| HIGH | src/mjlab/envs/mdp/dr/geom.py | 0 | randomize site orientation by composing an rpy perturbation. ranges are in radians. the sampled perturbation is composed | STRING |
| HIGH | src/mjlab/envs/mdp/dr/camera.py | 0 | randomize site orientation by composing an rpy perturbation. ranges are in radians. the sampled perturbation is composed | STRING |
| HIGH | src/mjlab/envs/mdp/dr/site.py | 0 | randomize site orientation by composing an rpy perturbation. ranges are in radians. the sampled perturbation is composed | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/mjlab/tasks/tracking/mdp/metrics.py | 86 | Get indices of specified bodies within the command's body list. Args: command: The motion command. body_names | STRING |
| HIGH | src/mjlab/managers/observation_manager.py | 264 | Check for NaN/Inf and handle according to policy. Args: tensor: Observation tensor to check. context: C | STRING |
| HIGH | src/mjlab/utils/color.py | 129 | Create a color ramp from a base RGB color using parameter t. This function creates a color variation by adjusting sat | STRING |
| HIGH | src/mjlab/utils/color.py | 167 | Darken an RGBA color by a given factor. Args: rgba: RGBA color tuple with values in range [0, 1]. factor: Dar | STRING |
| HIGH | src/mjlab/utils/color.py | 189 | Lighten an RGBA color by interpolating towards white. Args: rgba: RGBA color tuple with values in range [0, 1]. | STRING |
| HIGH | src/mjlab/utils/gpu.py | 12 | Select GPUs based on CUDA_VISIBLE_DEVICES and user specification. This function treats the `gpu_ids` parameter as ind | STRING |
| HIGH | src/mjlab/utils/lab_api/math.py | 204 | Converts quaternion from one convention to another. The convention to convert TO is specified as an optional argume | STRING |
| HIGH | src/mjlab/utils/lab_api/math.py | 530 | Multiply two quaternions together. Args: q1: The first quaternion in (w, x, y, z). Shape is (..., 4). | STRING |
| HIGH | src/mjlab/utils/lab_api/math.py | 706 | Computes the skew-symmetric matrix of a vector. Args: vec: The input vector. Shape is (3,) or (N, 3). | STRING |
| HIGH | src/mjlab/utils/lab_api/math.py | 876 | Compute the position and orientation error between source and target frames. Args: t01: Position of source | STRING |
| HIGH | src/mjlab/utils/lab_api/math.py | 967 | Transform input points in a given frame to a target frame. This function transform points from a source frame to a | STRING |
| HIGH | src/mjlab/utils/lab_api/math.py | 1042 | Converts perspective depth image to orthogonal depth image. Perspective depth images contain distances measured fro | STRING |
| HIGH | src/mjlab/utils/lab_api/math.py | 1134 | Un-project depth image into a pointcloud. This function converts orthogonal or perspective depth images into points | STRING |
| HIGH | src/mjlab/utils/lab_api/string.py | 21 | Converts a string from snake case to camel case. Args: snake_str: A string in snake case (i.e. with '_') | STRING |
| HIGH | src/mjlab/utils/lab_api/string.py | 109 | Converts a callable object to a string. Args: value: A callable object. Raises: ValueError: Wh | STRING |
| HIGH | src/mjlab/utils/lab_api/string.py | 139 | Resolves the module and function names to return the function. Args: name: The function name. The format sh | STRING |
| HIGH | src/mjlab/utils/lab_api/string.py | 181 | Match a list of query regular expressions against a list of strings and return the matched indices and names. When | STRING |
| HIGH | src/mjlab/utils/lab_api/string.py | 277 | Match a list of regular expressions in a dictionary against a list of strings and return the matched indices, names, | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/benchmarks/generate_report.py | 518 | if (elements.length > 0 && elements[0].datasetIndex === 0) {{ | CODE |
| HIGH | scripts/benchmarks/generate_report.py | 520 | if (d?.commit && d.commit !== 'unknown') {{ | CODE |
| HIGH | scripts/benchmarks/generate_report.py | 544 | return d?.commit && d.commit !== 'unknown' ? 'Click to view commit' : ''; | CODE |
| HIGH | scripts/benchmarks/generate_report.py | 571 | charts.push(chart); | CODE |
| HIGH | scripts/benchmarks/generate_report.py | 572 | trackingCharts.push(chart); | CODE |
| HIGH | scripts/benchmarks/generate_report.py | 583 | history.replaceState(null, '', '#' + tab.dataset.tab); | CODE |
| HIGH | scripts/benchmarks/generate_report.py | 648 | envData.push({{ ...point, y: result.env_sps / 1000 }}); | CODE |
| HIGH | scripts/benchmarks/generate_report.py | 649 | physicsData.push({{ ...point, y: result.physics_sps / 1000 }}); | CODE |
| HIGH | scripts/benchmarks/generate_report.py | 688 | if (d?.commit && d.commit !== 'unknown') {{ | CODE |
| HIGH⚡ | scripts/benchmarks/generate_report.py | 707 | const envY = items[0]?.raw?.y || 0; | CODE |
| HIGH⚡ | scripts/benchmarks/generate_report.py | 708 | const physY = items[1]?.raw?.y || 0; | CODE |
| HIGH⚡ | scripts/benchmarks/generate_report.py | 716 | return d?.commit && d.commit !== 'unknown' ? 'Click to view commit' : ''; | CODE |
| HIGH | scripts/benchmarks/generate_report.py | 739 | charts.push(chart); | CODE |
| HIGH | scripts/benchmarks/generate_report.py | 740 | throughputCharts.push(chart); | CODE |
| HIGH | scripts/benchmarks/generate_report.py | 760 | const min = days > 0 ? Date.now() - days * 86400000 : undefined; | CODE |
| HIGH | scripts/benchmarks/generate_report.py | 763 | c.options.scales.x.max = undefined; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_domain_randomization.py | 1324 | CODE | |
| LOW | tests/test_domain_randomization.py | 1339 | CODE | |
| LOW | tests/test_notebooks.py | 52 | CODE | |
| LOW | tests/test_viser_conversions.py | 94 | CODE | |
| LOW | tests/test_runner.py | 399 | CODE | |
| LOW | tests/test_tyro_flags.py | 12 | CODE | |
| LOW | scripts/benchmarks/generate_report.py | 791 | CODE | |
| LOW | src/mjlab/tasks/tracking/mdp/commands.py | 445 | CODE | |
| LOW | src/mjlab/entity/variants.py | 430 | CODE | |
| LOW | src/mjlab/entity/variants.py | 775 | CODE | |
| LOW | src/mjlab/entity/variants.py | 1107 | CODE | |
| LOW | src/mjlab/entity/variants.py | 1317 | CODE | |
| LOW | src/mjlab/entity/entity.py | 221 | CODE | |
| LOW | src/mjlab/managers/metrics_manager.py | 122 | CODE | |
| LOW | src/mjlab/managers/curriculum_manager.py | 76 | CODE | |
| LOW | src/mjlab/managers/curriculum_manager.py | 95 | CODE | |
| LOW | src/mjlab/managers/event_manager.py | 240 | CODE | |
| LOW | src/mjlab/managers/event_manager.py | 346 | CODE | |
| LOW | src/mjlab/managers/observation_manager.py | 123 | CODE | |
| LOW | src/mjlab/managers/observation_manager.py | 333 | CODE | |
| LOW | src/mjlab/managers/observation_manager.py | 412 | CODE | |
| LOW | src/mjlab/terrains/terrain_entity.py | 303 | CODE | |
| LOW | src/mjlab/terrains/terrain_generator.py | 150 | CODE | |
| LOW | src/mjlab/terrains/terrain_generator.py | 286 | CODE | |
| LOW | src/mjlab/terrains/primitive_terrains.py | 555 | CODE | |
| LOW | src/mjlab/terrains/primitive_terrains.py | 655 | CODE | |
| LOW | src/mjlab/terrains/primitive_terrains.py | 1481 | CODE | |
| LOW | src/mjlab/utils/color.py | 88 | CODE | |
| LOW | src/mjlab/utils/xml.py | 37 | CODE | |
| LOW | src/mjlab/utils/spec_config.py | 47 | CODE | |
| LOW | src/mjlab/utils/spec_config.py | 450 | CODE | |
| LOW | src/mjlab/utils/spec.py | 66 | CODE | |
| LOW | src/mjlab/utils/lab_api/string.py | 178 | CODE | |
| LOW | src/mjlab/utils/lab_api/string.py | 274 | CODE | |
| LOW | src/mjlab/utils/lab_api/tasks/importer.py | 46 | CODE | |
| LOW | src/mjlab/viewer/base.py | 349 | CODE | |
| LOW | src/mjlab/viewer/native/viewer.py | 450 | CODE | |
| LOW | src/mjlab/viewer/viser/viewer.py | 92 | CODE | |
| LOW | src/mjlab/viewer/viser/scene.py | 440 | CODE | |
| LOW | src/mjlab/viewer/viser/scene.py | 552 | CODE | |
| LOW | src/mjlab/viewer/viser/scene.py | 673 | CODE | |
| LOW | src/mjlab/viewer/viser/scene.py | 1187 | CODE | |
| LOW | src/mjlab/viewer/viser/term_plotter.py | 90 | CODE | |
| LOW | src/mjlab/sensor/terrain_height_sensor.py | 57 | CODE | |
| LOW | src/mjlab/sensor/raycast_sensor.py | 483 | CODE | |
| LOW | src/mjlab/sensor/raycast_sensor.py | 607 | CODE | |
| LOW | src/mjlab/sensor/contact_sensor.py | 505 | CODE | |
| LOW | src/mjlab/sensor/builtin_sensor.py | 213 | CODE | |
| LOW | src/mjlab/scripts/csv_to_npz.py | 187 | CODE | |
| LOW | src/mjlab/scripts/visualize_terrain.py | 94 | CODE | |
| LOW | src/mjlab/scripts/visualize_terrain.py | 221 | CODE | |
| LOW | src/mjlab/scripts/visualize_terrain.py | 328 | CODE | |
| LOW | src/mjlab/scripts/play.py | 59 | CODE | |
| LOW | src/mjlab/scripts/train.py | 49 | CODE | |
| LOW | src/mjlab/sim/sim.py | 354 | CODE | |
| LOW | src/mjlab/envs/mdp/curriculums.py | 69 | CODE | |
| LOW | src/mjlab/envs/mdp/dr/_core.py | 238 | CODE | |
| LOW | src/mjlab/envs/mdp/dr/actuator.py | 30 | CODE | |
| LOW | src/mjlab/envs/mdp/dr/actuator.py | 192 | CODE | |
| LOW | src/mjlab/rl/runner.py | 16 | CODE | |
| 1 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_command_manager.py | 32 | def _update_metrics(self) -> None: | CODE |
| LOW | tests/test_command_manager.py | 38 | def _update_command(self, env_ids: torch.Tensor | None = None) -> None: | CODE |
| LOW | tests/test_command_manager.py | 90 | def _update_command(self) -> None: # type: ignore[override] | CODE |
| LOW | tests/test_projected_gravity_sensor.py | 111 | def _set_root_quat(robot, q: tuple[float, float, float, float], device: str) -> None: | STRING |
| LOW | src/mjlab/tasks/manipulation/mdp/commands.py | 41 | def _update_metrics(self) -> None: | CODE |
| LOW | src/mjlab/tasks/manipulation/mdp/commands.py | 109 | def _update_command(self, env_ids: torch.Tensor | None = None) -> None: | CODE |
| LOW | src/mjlab/tasks/manipulation/mdp/commands.py | 194 | def _update_metrics(self) -> None: | CODE |
| LOW | src/mjlab/tasks/manipulation/mdp/commands.py | 250 | def _update_command(self, env_ids: torch.Tensor | None = None) -> None: | CODE |
| LOW | src/mjlab/tasks/velocity/mdp/velocity_command.py | 65 | def _update_metrics(self) -> None: | CODE |
| LOW | src/mjlab/tasks/velocity/mdp/velocity_command.py | 143 | def _update_command(self, env_ids: torch.Tensor | None = None) -> None: | CODE |
| LOW | src/mjlab/tasks/tracking/mdp/commands.py | 379 | def update_relative_body_poses(self) -> None: | CODE |
| LOW | src/mjlab/tasks/tracking/mdp/commands.py | 569 | def _set_scrubber_disabled(self, disabled: bool) -> None: | CODE |
| LOW | src/mjlab/managers/command_manager.py | 159 | def _update_metrics(self) -> None: | CODE |
| LOW | src/mjlab/managers/command_manager.py | 169 | def _update_command(self, env_ids: torch.Tensor | None) -> None: | CODE |
| LOW | src/mjlab/utils/spec_config.py | 67 | def _set_geom_attr(geom: mujoco.MjsGeom, name: str, value) -> None: | CODE |
| LOW | src/mjlab/utils/buffers/delay_buffer.py | 289 | def _update_lags(self) -> None: | CODE |
| LOW | src/mjlab/viewer/base.py | 433 | def _update_stats(self) -> None: | CODE |
| LOW | src/mjlab/viewer/native/viewer.py | 245 | def _set_status_overlay(self, viewer: mujoco.viewer.Handle) -> None: | CODE |
| LOW | src/mjlab/viewer/native/viewer.py | 265 | def _update_reward_figures(self, viewer: mujoco.viewer.Handle) -> None: | CODE |
| LOW⚡ | src/mjlab/viewer/native/viewer.py | 295 | def _update_debug_visualizers(self, viewer: mujoco.viewer.Handle) -> None: | CODE |
| LOW | src/mjlab/viewer/native/viewer.py | 533 | def _setup_camera(self) -> None: | CODE |
| LOW | src/mjlab/viewer/native/viewer.py | 558 | def _set_camera_auto_track(self) -> None: | CODE |
| LOW | src/mjlab/viewer/native/viewer.py | 573 | def _set_camera_world(self) -> None: | CODE |
| LOW | src/mjlab/viewer/native/viewer.py | 580 | def _set_camera_asset_root(self) -> None: | CODE |
| LOW | src/mjlab/viewer/native/viewer.py | 591 | def _set_camera_asset_body(self) -> None: | CODE |
| LOW | src/mjlab/viewer/viser/viewer.py | 362 | def _update_env_dependent_plots(self) -> None: | CODE |
| LOW | src/mjlab/viewer/viser/viewer.py | 377 | def _update_camera_feeds(self, sim: Simulation, has_pending_updates: bool) -> None: | CODE |
| LOW | src/mjlab/viewer/viser/viewer.py | 451 | def update_scene() -> None: | CODE |
| LOW | src/mjlab/viewer/viser/viewer.py | 553 | def _update_status_display(self) -> None: | CODE |
| LOW | src/mjlab/viewer/viser/camera_viewer.py | 111 | def _update_frustum(self, sim_data, env_idx: int, scene_offset: np.ndarray) -> None: | CODE |
| LOW | src/mjlab/viewer/viser/scene.py | 382 | def update_from_mjdata(self, mj_data: mujoco.MjData) -> None: | CODE |
| LOW | src/mjlab/viewer/viser/term_plotter.py | 147 | def update_env_idx(self, env_idx: int) -> None: | CODE |
| LOW | src/mjlab/sensor/camera_sensor.py | 208 | def set_context(self, ctx: SensorContext) -> None: | CODE |
| LOW | src/mjlab/sensor/raycast_sensor.py | 567 | def set_context(self, ctx: SensorContext) -> None: | CODE |
| LOW | src/mjlab/sensor/contact_sensor.py | 441 | def _update_air_time_tracking(self, dt: float) -> None: | CODE |
| LOW | src/mjlab/sensor/contact_sensor.py | 487 | def _update_history(self) -> None: | CODE |
| LOW | src/mjlab/scripts/nan_viz.py | 126 | def _update_state(self) -> None: | STRING |
| LOW | src/mjlab/sim/sim.py | 520 | def set_sensor_context(self, ctx: SensorContext) -> None: | CODE |
| LOW | src/mjlab/envs/manager_based_rl_env.py | 541 | def update_visualizers(self, visualizer: DebugVisualizer) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_dc_actuator.py | 51 | # Set target to produce positive torque demand >> saturation_effort. | COMMENT |
| LOW | tests/test_dc_actuator.py | 88 | # Set target to produce positive torque demand >> saturation_effort. | COMMENT |
| LOW | tests/test_dc_actuator.py | 201 | # Set target to produce negative torque demand. | COMMENT |
| LOW | tests/test_contact_sensor.py | 1128 | # Check if we have contact. | COMMENT |
| LOW | tests/test_viser_conversions.py | 127 | # Check if texture was extracted (procedural textures should work). | STRING |
| LOW | tests/test_delayed_actuator.py | 299 | # Set lag to 1. | COMMENT |
| LOW | tests/test_delayed_actuator.py | 347 | # Set lag to 2 (the only valid value, so set_lags won't clamp it). | COMMENT |
| LOW | tests/test_perlin_terrain.py | 54 | # Check if height variation is present. | COMMENT |
| LOW | tests/test_tyro_flags.py | 33 | # Check if this is a tyro.cli() call | COMMENT |
| LOW | tests/test_tyro_flags.py | 48 | # Check if config= keyword argument contains TYRO_FLAGS | COMMENT |
| LOW | src/mjlab/utils/spec.py | 170 | # Check if entity has freejoint (floating-base). | COMMENT |
| LOW | src/mjlab/utils/spec.py | 175 | # Check if root body is already mocap. | COMMENT |
| LOW | src/mjlab/utils/wrappers/video_recorder.py | 94 | # Check if we should start recording. | COMMENT |
| LOW | src/mjlab/utils/wrappers/video_recorder.py | 122 | # Check if we should stop recording. | COMMENT |
| LOW | src/mjlab/utils/lab_api/math.py | 1067 | # Check if inputs are batched | STRING |
| LOW | src/mjlab/scripts/play.py | 75 | # Check if this is a tracking task by checking for motion command. | COMMENT |
| LOW | src/mjlab/scripts/play.py | 101 | # Check if the registry name includes alias, if not, append ":latest". | COMMENT |
| LOW | src/mjlab/scripts/train.py | 61 | # Set seed to have diversity in different processes. | COMMENT |
| LOW | src/mjlab/scripts/train.py | 73 | # Check if this is a tracking task by checking for motion command. | COMMENT |
| LOW | src/mjlab/scripts/train.py | 82 | # Check if motion_file is already set (e.g., via CLI --env.commands.motion.motion-file). | COMMENT |
| LOW | src/mjlab/scripts/nan_viz.py | 151 | # Check if visualization settings changed and need a refresh. | COMMENT |
| LOW | src/mjlab/sim/sim_data.py | 172 | # Check if it's a struct-like object with attributes | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/smoke_test.py | 34 | except Exception as e: | CODE |
| LOW | tests/test_viser_conversions.py | 555 | except Exception as e: | CODE |
| LOW⚡ | tests/test_task_configs.py | 24 | except Exception as e: | CODE |
| LOW⚡ | tests/test_task_configs.py | 36 | except Exception as e: | CODE |
| LOW | scripts/tools/terrain_explorer.py | 88 | except Exception as e: # noqa: BLE001 - surface any generation failure in the UI. | CODE |
| LOW | src/mjlab/__init__.py | 57 | except Exception: | CODE |
| LOW | src/mjlab/tasks/manipulation/rl/runner.py | 29 | except Exception as e: | CODE |
| LOW | src/mjlab/tasks/velocity/rl/runner.py | 26 | except Exception as e: | CODE |
| LOW | src/mjlab/tasks/tracking/rl/runner.py | 116 | except Exception as e: | CODE |
| LOW | src/mjlab/utils/lab_api/tasks/importer.py | 78 | except Exception: | CODE |
| LOW | src/mjlab/viewer/base.py | 295 | except Exception: | CODE |
| LOW | src/mjlab/viewer/native/viewer.py | 489 | except Exception as e: | CODE |
| LOW | src/mjlab/viewer/viser/scene.py | 202 | except Exception: | CODE |
| LOW | src/mjlab/viewer/viser/scene.py | 214 | except Exception: | CODE |
| LOW | src/mjlab/viewer/viser/scene.py | 1290 | except Exception: | CODE |
| LOW | src/mjlab/scripts/gcs.py | 92 | except Exception as e: | CODE |
| MEDIUM | src/mjlab/scripts/visualize_terrain.py | 175 | print(f"Error: No visual geoms found for {state['robot_name']}") | CODE |
| LOW | src/mjlab/scripts/visualize_terrain.py | 261 | except Exception as e: | CODE |
| MEDIUM | src/mjlab/scripts/visualize_terrain.py | 262 | print(f"Error creating config: {e}") | CODE |
| LOW | src/mjlab/scripts/visualize_terrain.py | 476 | except Exception: | CODE |
| LOW | src/mjlab/scripts/list_envs.py | 31 | except Exception: | CODE |
| MEDIUM | src/mjlab/scripts/export_scene.py | 49 | print(f"Error: {e}") | CODE |
| LOW | src/mjlab/sim/sim_data.py | 50 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/mjlab/entity/entity.py | 250 | except ValueError: | CODE |
| HIGH | src/mjlab/entity/entity.py | 269 | except ValueError: | CODE |
| HIGH | src/mjlab/utils/wandb.py | 33 | except ImportError: | CODE |
| HIGH | src/mjlab/viewer/base.py | 409 | except ValueError: | CODE |
| HIGH | src/mjlab/scripts/visualize_terrain.py | 476 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | src/mjlab/viewer/viser/overlays.py | 146 | isinstance(s, CameraSensor) for s in self.env.unwrapped.scene.sensors.values() | CODE |
| CRITICAL | src/mjlab/viewer/viser/overlays.py | 153 | for sensor in self.env.unwrapped.scene.sensors.values() | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_rl_exporter.py | 56 | # Create a dummy ONNX model. | COMMENT |
| MEDIUM | tests/test_viser_conversions.py | 96 | # Create a model with procedural texture. | COMMENT |
| MEDIUM | scripts/fix_mjpython_macos.sh | 32 | # Create the symlink. | COMMENT |
| MEDIUM | src/mjlab/terrains/terrain_generator.py | 237 | # Create the terrain mesh and get the spawn origin in world coordinates. | COMMENT |
| MEDIUM | src/mjlab/utils/lab_api/math.py | 1932 | # Create the transformation matrix | STRING |
| MEDIUM | src/mjlab/scripts/visualize_terrain.py | 226 | # Create a copy with equal proportions to ensure all are shown once. | COMMENT |
| MEDIUM | src/mjlab/envs/manager_based_rl_env.py | 564 | # Create a nested dict for this group. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_velocity_rewards.py | 231 | # Step 1: both envs are in the air at 0.5 m, recording peak_heights = 0.5. | COMMENT |
| LOW⚡ | tests/test_velocity_rewards.py | 241 | # Step 2: env 0 swings to target_height (0.1 m) in the new episode. | COMMENT |
| LOW⚡ | tests/test_velocity_rewards.py | 245 | # Step 3: both envs land. Env 0 has zero error; env 1 is penalized for its 0.5 m peak. | COMMENT |
| LOW⚡ | tests/test_learned_actuator.py | 175 | # Step 0: pos_error = 1.0 | COMMENT |
| LOW⚡ | tests/test_learned_actuator.py | 176 | # Step 1: pos_error = 2.0 | COMMENT |
| LOW⚡ | tests/test_learned_actuator.py | 177 | # Step 2: pos_error = 3.0 | COMMENT |
| LOW⚡ | tests/test_metrics_manager.py | 327 | # Step 0: substeps [1, 2] -> avg = 1.5 | COMMENT |
| LOW⚡ | tests/test_metrics_manager.py | 332 | # Step 1: substeps [3, 4] -> avg = 3.5 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_velocity_rewards.py | 231 | # Step 1: both envs are in the air at 0.5 m, recording peak_heights = 0.5. | COMMENT |
| LOW⚡ | tests/test_velocity_rewards.py | 241 | # Step 2: env 0 swings to target_height (0.1 m) in the new episode. | COMMENT |
| LOW⚡ | tests/test_velocity_rewards.py | 245 | # Step 3: both envs land. Env 0 has zero error; env 1 is penalized for its 0.5 m peak. | COMMENT |
| LOW⚡ | tests/test_learned_actuator.py | 175 | # Step 0: pos_error = 1.0 | COMMENT |
| LOW⚡ | tests/test_learned_actuator.py | 176 | # Step 1: pos_error = 2.0 | COMMENT |
| LOW⚡ | tests/test_learned_actuator.py | 177 | # Step 2: pos_error = 3.0 | COMMENT |
| LOW⚡ | tests/test_metrics_manager.py | 327 | # Step 0: substeps [1, 2] -> avg = 1.5 | COMMENT |
| LOW⚡ | tests/test_metrics_manager.py | 332 | # Step 1: substeps [3, 4] -> avg = 3.5 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/benchmarks/nightly_train.sh | 7 | # Usage: | COMMENT |
| LOW | scripts/cloud/sweep-cluster.yaml | 6 | # Usage: | COMMENT |
| LOW | scripts/cloud/train.yaml | 5 | # Usage: | COMMENT |
| LOW | scripts/cloud/sweep-launch.sh | 8 | # Usage: | COMMENT |
| LOW | scripts/cloud/sweep.yaml | 4 | # Usage: | COMMENT |
| LOW | scripts/cloud/train-docker.yaml | 5 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | typings/generate_mujoco_stubs.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/run_docker.sh | 1 | #!/usr/bin/env sh | COMMENT |
| LOW | scripts/benchmarks/nightly_train.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/cloud/sweep-launch.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .github/workflows/claude.yml | 41 | actions: read | COMMENT |
| LOW | src/mjlab/entity/variants.py | 921 | ) | COMMENT |
| LOW | src/mjlab/utils/lab_api/math.py | 1 | # Copyright (c) 2022-2025, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTOR | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/mjlab/utils/spec.py | 406 | CODE | |
| LOW | src/mjlab/utils/buffers/delay_buffer.py | 126 | CODE | |
| LOW | src/mjlab/envs/mdp/dr/body.py | 422 | CODE | |
| LOW | src/mjlab/envs/mdp/dr/_core.py | 49 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/mjlab/sim/sim_data.py | 1 | """Bridge for seamless PyTorch-Warp interoperability with zero-copy memory sharing. | STRING |