Skip to content

Reduce the memory consumption of hydroelastic contacts#1609

Merged
nvtw merged 47 commits into
newton-physics:mainfrom
nvtw:dev/tw2/experiment
Feb 20, 2026
Merged

Reduce the memory consumption of hydroelastic contacts#1609
nvtw merged 47 commits into
newton-physics:mainfrom
nvtw:dev/tw2/experiment

Conversation

@nvtw

@nvtw nvtw commented Feb 11, 2026

Copy link
Copy Markdown
Member

Description

Reduce the memory consumption of hydroelastic contacts. It also removes moment matching for now in favor of one pass, on-the-fly contact reduction which saves a ton of memory.

Newton Migration Guide

Please ensure the migration guide for warp.sim users is up-to-date with the changes made in this PR.

  • The migration guide in docs/migration.rst is up-to date

Before your PR is "Ready for review"

  • Necessary tests have been added and new examples are tested (see newton/tests/test_examples.py)
  • Documentation is up-to-date
  • Code passes formatting and linting checks with pre-commit run -a

Summary by CodeRabbit

  • New Features

    • Added buffer_fraction/contact_buffer_fraction tuning and optional pre-prune workflow to reduce hydroelastic memory/work.
    • Switched contact normals to octahedral encoding and moved stiffness to per-entry storage.
    • Added nut-and-bolt hydro example, updated SDF example, asset-download helper, and a new contact benchmark.
  • Documentation

    • Documented buffer_fraction usage, overflow warnings, examples, and updated reduction guidance.
  • Chores

    • Removed legacy moment-matching behavior from hydroelastic pipelines.
  • Tests

    • Added tests for buffer_fraction behavior, pre-prune flows, and octahedral encode/decode.

@nvtw nvtw self-assigned this Feb 11, 2026
@nvtw nvtw marked this pull request as draft February 11, 2026 15:32
@nvtw nvtw requested a review from lenroe February 11, 2026 15:32
@coderabbitai

coderabbitai Bot commented Feb 11, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

Adds octahedral normal encoding and moves effective stiffness to per-entry storage; removes moment-matching; introduces hydroelastic pre-pruning and new HydroelasticSDF.Config fields (buffer_fraction, contact_buffer_fraction, pre_prune_contacts); updates kernels, allocations, diagnostics, docs, examples, and tests.

Changes

Cohort / File(s) Summary
Normal encoding & per-entry stiffness
newton/_src/geometry/contact_reduction_global.py, newton/tests/test_contact_reduction_global.py
Add encode_oct/decode_oct; store normals as oct-encoded wp.vec2; replace per-contact contact_k_eff with per-entry entry_k_eff; update data structures, kernels, export/unpack paths and tests for vec2 normals and per-entry stiffness.
Hydroelastic reduction refactor
newton/_src/geometry/contact_reduction_hydroelastic.py
Introduce _effective_stiffness; replace single reduce kernel with get_reduce_hydroelastic_contacts_kernel(skip_aggregates) variants; decode oct normals in reduction; cache per-entry entry_k_eff; remove moment-matching and related config.
SDF hydroelastic generation & pre-prune
newton/_src/geometry/sdf_hydroelastic.py, newton/tests/test_hydroelastic.py
Add pre-prune controls and constants; extend HydroelasticSDF.Config with pre_prune_contacts, buffer_fraction, contact_buffer_fraction, and accumulation flag; use scratch buffers, recompute capacity math with fractions, encode normals octahedrally, compute k_eff on decode, and surface overflow/hashtable warnings; propagate config through tests and scene builders.
Docs & examples
docs/concepts/collisions.rst, newton/examples/..., asv/benchmarks/simulation/bench_contacts.py
Update collisions docs to describe buffer_fraction and anchor_contact/config changes; add/download helpers and new examples for nut/bolt hydro SDF and SDF-based benchmarks; update example asset download call sites.
Tests & plumbing
newton/tests/test_hydroelastic.py, newton/tests/test_examples.py
Propagate new SDFHydroelastic.Config through helpers; add test_buffer_fraction_no_crash; update tests to instantiate/configure new fields and increase some numeric thresholds.

Sequence Diagram(s)

sequenceDiagram
  participant Generator as SDF Generator
  participant PrePrune as Local Pre-prune
  participant Reducer as Global Reducer (Hashtable)
  participant Exporter as Contact Exporter
  participant Simulation as Simulator

  Generator->>Generator: rasterize faces, compute normals, encode_oct → store wp.vec2
  alt pre_prune enabled
    Generator->>PrePrune: collect local penetrating & top candidates (batched)
    PrePrune->>Reducer: batch write compacted candidates into global buffer
  else
    Generator->>Reducer: write contacts directly into global buffer
  end
  Reducer->>Reducer: decode_oct normals → compute per-entry entry_k_eff via _effective_stiffness
  Reducer->>Exporter: reduce/aggregate entries and export reduced contacts (decoded normals + entry_k_eff)
  Exporter->>Simulation: supply final contacts for resolution
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested reviewers

  • eric-heiden
  • mzamoramora-nvidia
🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 65.85% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Reduce the memory consumption of hydroelastic contacts' clearly and concisely summarizes the main change: memory optimization for hydroelastic contact handling through removal of moment matching and adoption of a one-pass reduction approach.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov

codecov Bot commented Feb 11, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 95.31250% with 3 lines in your changes missing coverage. Please review.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
newton/_src/geometry/sdf_hydroelastic.py 93.75% 3 Missing ⚠️

📢 Thoughts on this report? Let us know!

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
newton/_src/geometry/contact_reduction_global.py (1)

468-472: ⚠️ Potential issue | 🟡 Minor

Stale docstring: normal is now vec2, not vec3.

The contact data storage documentation still describes normal as vec3(normal.x, normal.y, normal.z), but the actual storage is vec2 (octahedral-encoded).

Proposed fix
-    - normal: vec3(normal.x, normal.y, normal.z)
+    - normal: vec2 (octahedral-encoded unit normal, see encode_oct/decode_oct)
docs/concepts/collisions.rst (1)

557-564: ⚠️ Potential issue | 🟠 Major

Remove non-existent parameters from SDFHydroelasticConfig example.

The documentation example at lines 557–564 includes betas, sticky_contacts, and moment_matching, which do not exist in the SDFHydroelasticConfig dataclass. Using this example will raise a TypeError. Update the example to only include valid parameters: reduce_contacts, buffer_fraction, normal_matching, and optionally others such as anchor_contact, contact_buffer_fraction, etc.

🧹 Nitpick comments (4)
newton/_src/geometry/contact_reduction_hydroelastic.py (1)

150-164: shape_transform parameter is unused in the reduction kernel.

Static analysis correctly flags that shape_transform (Line 154) is never read inside this kernel. In the hydroelastic pipeline, contact positions are already in shape_b's local frame, so no world→local transform is needed for voxel computation (unlike the global reducer which operates in world space).

If kept for API symmetry with the global reducer, consider adding a brief inline comment explaining why. Otherwise, consider removing it to avoid confusion and reduce kernel argument overhead.

newton/_src/geometry/sdf_hydroelastic.py (3)

80-82: Duplicate of _effective_stiffness in contact_reduction_hydroelastic.py.

This function is identical to _effective_stiffness in contact_reduction_hydroelastic.py (Line 84-86). Consider consolidating into a single shared @wp.func (e.g., in contact_reduction_global.py) and importing it in both modules.


1250-1254: Unused kernel parameters are documented but should be cleaned up if unused in both code paths.

The comment at Line 1251 says these are "kept for signature compatibility," but they are unused in both the pre_prune=True and pre_prune=False code paths within the kernel body. If they were added anticipating future pre-prune in-kernel hashtable writes that never materialized, consider removing them from the kernel signature and the _generate_contacts call site to reduce kernel argument overhead.


462-473: _generate_contacts called without AABB arrays in both branches.

Both the reduce_contacts=True branch (Line 463) and the reduce_contacts=False branch (Line 473) call _generate_contacts without passing shape_local_aabb_lower, shape_local_aabb_upper, or shape_voxel_resolution. These default to None and are replaced by empty placeholder arrays in _generate_contacts. This is fine today since the kernel doesn't use them, but it creates a latent inconsistency: the kernel signature suggests they're meaningful inputs. If/when these parameters become genuinely needed, this silent fallback to empty arrays could mask bugs.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (5)
docs/concepts/collisions.rst (1)

555-564: ⚠️ Potential issue | 🟡 Minor

Remove moment_matching from the config example to match the API.

The example still lists moment_matching, but the config no longer exposes it. Please drop it here (and in the options table) to avoid stale docs.

newton/tests/test_hydroelastic.py (1)

83-140: ⚠️ Potential issue | 🟡 Minor

Update build_stacked_cubes_scene docstring for the new config parameter.

Please document sdf_hydroelastic_config and switch to Google-style Args/Returns for this helper.

As per coding guidelines, Use Google-style docstrings with clear, concise explanations of what the function does, its parameters, and return value.

newton/_src/geometry/sdf_hydroelastic.py (2)

115-141: ⚠️ Potential issue | 🟡 Minor

Validate contact_buffer_fraction range.

The docstring states (0, 1], but there’s no check. Add a validation alongside buffer_fraction to prevent zero/oversized buffers.

🔧 Suggested fix (in __init__)
         frac = float(self.config.buffer_fraction)
         if frac <= 0.0 or frac > 1.0:
             raise ValueError(f"SDFHydroelasticConfig.buffer_fraction must be in (0, 1], got {frac}")
+
+        contact_frac = float(self.config.contact_buffer_fraction)
+        if contact_frac <= 0.0 or contact_frac > 1.0:
+            raise ValueError(
+                f"SDFHydroelasticConfig.contact_buffer_fraction must be in (0, 1], got {contact_frac}"
+            )

1214-1490: ⚠️ Potential issue | 🟡 Minor

Add underscores to unused kernel parameters to silence Ruff ARG001.

These three parameters are kept for positional argument compatibility with callers but unused in the kernel body. Prefixing with _ silences the lint warning while maintaining signature compatibility since arguments are passed positionally via wp.launch().

🧹 Suggested fix
-        shape_local_aabb_lower: wp.array(dtype=wp.vec3),
-        shape_local_aabb_upper: wp.array(dtype=wp.vec3),
-        shape_voxel_resolution: wp.array(dtype=wp.vec3i),
+        _shape_local_aabb_lower: wp.array(dtype=wp.vec3),
+        _shape_local_aabb_upper: wp.array(dtype=wp.vec3),
+        _shape_voxel_resolution: wp.array(dtype=wp.vec3i),
newton/_src/geometry/contact_reduction_hydroelastic.py (1)

94-129: ⚠️ Potential issue | 🟡 Minor

k_eff parameter is unused—fix misleading docstring.

The function accepts k_eff but never uses it. The docstring incorrectly suggests the function stores stiffness data, when it only stores contact area. Effective stiffness is stored per hashtable entry elsewhere, not per contact.

📝 Suggested doc update
-    Extends :func:`export_contact_to_buffer` by storing additional hydroelastic
-    data (area and effective stiffness).
+    Extends :func:`export_contact_to_buffer` by storing additional hydroelastic
+    data (area). Per-entry stiffness is stored separately.
@@
-        k_eff: Effective stiffness coefficient k_a*k_b/(k_a+k_b)
+        k_eff: Unused (per-entry stiffness stored in reducer_data.entry_k_eff)
🤖 Fix all issues with AI agents
In `@newton/_src/geometry/contact_reduction_global.py`:
- Around line 278-327: encode_oct currently divides by the L1 norm without
guarding against a zero-length normal which yields NaNs; update encode_oct to
compute the L1 sum = (wp.abs(n[0]) + wp.abs(n[1]) + wp.abs(n[2])) and if that
sum is zero return wp.vec2(0.0, 0.0) (or set inv_l1 = 0.0 and ox/oy/oz = 0.0)
before doing the division, preserving the existing fold/reflect logic otherwise;
also add Google-style Args and Returns sections to the docstrings of both
encode_oct (documenting parameter n: wp.vec3 unit normal and return wp.vec2
encoded octahedral coords) and decode_oct (documenting parameter e: wp.vec2
encoded coords and return wp.vec3 decoded unit normal) so both functions comply
with the codebase docstring style.

In `@newton/_src/geometry/contact_reduction_hydroelastic.py`:
- Around line 84-86: Update the _effective_stiffness function to handle the
zero-denominator case and add a Google-style docstring: add a docstring
explaining the harmonic mean of two stiffnesses, parameters (k_a, k_b), return
value, and behavior when both are zero; implement a guard in
_effective_stiffness that returns 0.0 (or another specified safe value) if k_a +
k_b == 0.0 to avoid division by zero, otherwise compute (k_a * k_b) / (k_a +
k_b). Ensure you reference the function name _effective_stiffness and keep types
as wp.float32.
- Around line 150-159: The parameter shape_transform in the kernel
reduce_hydroelastic_contacts_kernel is unused and triggers linter warnings;
rename it to _shape_transform in the function signature and any internal
references (if any) to silence the warning without changing behavior, ensuring
the parameter order and types remain unchanged for the wp.kernel decorator.

In `@newton/tests/test_hydroelastic.py`:
- Around line 158-170: The docstring for run_stacked_cubes_hydroelastic_test is
missing documentation for the new config parameter; update the Google-style
docstring of run_stacked_cubes_hydroelastic_test to include an Args section that
lists and describes all parameters (test, device, solver_fn, shape_type,
cube_half, reduce_contacts, config: SDFHydroelasticConfig | None) and describe
what config controls, and update the Returns section to state what the function
returns (model, solver, state_0, state_1, control, collision_pipeline,
initial_positions, cube_half) so callers and readers can see the new parameter
and return values clearly.

Comment thread newton/_src/geometry/contact_reduction_global.py
Comment thread newton/_src/geometry/contact_reduction_hydroelastic.py Outdated
Comment thread newton/_src/geometry/contact_reduction_hydroelastic.py
Comment thread newton/tests/test_hydroelastic.py

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
newton/tests/test_hydroelastic.py (1)

83-150: ⚠️ Potential issue | 🟠 Major

reduce_contacts parameter can diverge from config.reduce_contacts, mis-sizing rigid_contact_max.

Line 143 sizes rigid_contact_max based on the standalone reduce_contacts parameter, but the pipeline's actual behavior is governed by config.reduce_contacts. If a caller supplies a custom config with reduce_contacts=False but omits the reduce_contacts keyword argument (which defaults to True), the buffer will be allocated for only 100 contacts while the pipeline generates up to 6000—risking silent truncation.

Consider deriving rigid_contact_max from the config rather than the separate parameter, or removing the standalone reduce_contacts parameter now that config carries it:

Suggested fix
 def build_stacked_cubes_scene(
     device,
     solver_fn,
     shape_type: ShapeType,
     cube_half: float = CUBE_HALF_LARGE,
-    reduce_contacts: bool = True,
     sdf_hydroelastic_config: SDFHydroelasticConfig | None = None,
 ):
     ...
     if sdf_hydroelastic_config is None:
         sdf_hydroelastic_config = SDFHydroelasticConfig(
             output_contact_surface=True,
-            reduce_contacts=reduce_contacts,
+            reduce_contacts=True,
             anchor_contact=True,
             buffer_fraction=1.0,
         )

     # Hydroelastic without contact reduction can generate many contacts
-    rigid_contact_max = 6000 if not reduce_contacts else 100
+    rigid_contact_max = 6000 if not sdf_hydroelastic_config.reduce_contacts else 100
🧹 Nitpick comments (1)
newton/tests/test_hydroelastic.py (1)

158-169: Inconsistent parameter naming: config vs sdf_hydroelastic_config.

This function names the parameter config (line 165) while build_stacked_cubes_scene calls it sdf_hydroelastic_config (line 89). Using the same name in both would reduce ambiguity, especially since config is very generic.

@nvtw nvtw marked this pull request as ready for review February 12, 2026 17:45
# Conflicts:
#	newton/tests/test_hydroelastic.py

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
newton/tests/test_hydroelastic.py (1)

83-152: ⚠️ Potential issue | 🟡 Minor

reduce_contacts is silently ignored when a caller supplies sdf_hydroelastic_config.

When a non-None config is passed, the reduce_contacts parameter on line 88 is never applied to it (lines 134-140 are skipped), yet it still governs rigid_contact_max on line 143. If someone later passes a config with reduce_contacts=False while relying on the function-parameter default (True), the contact-max budget will be wrong (100 instead of 6000).

Consider deriving rigid_contact_max from the config that is actually used:

Proposed fix
-    # Hydroelastic without contact reduction can generate many contacts
-    rigid_contact_max = 6000 if not reduce_contacts else 100
+    # Hydroelastic without contact reduction can generate many contacts
+    rigid_contact_max = 6000 if not sdf_hydroelastic_config.reduce_contacts else 100

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
newton/tests/test_hydroelastic.py (1)

134-150: ⚠️ Potential issue | 🟡 Minor

rigid_contact_max can diverge from the config's reduce_contacts flag.

When a caller supplies sdf_hydroelastic_config with reduce_contacts=False but leaves the function parameter reduce_contacts at its default (True), line 143 computes rigid_contact_max = 100 instead of 6000, which is likely too small and will silently drop contacts. Consider deriving the value from the config when one is provided:

Proposed fix
+    effective_reduce = sdf_hydroelastic_config.reduce_contacts if sdf_hydroelastic_config else reduce_contacts
     # Hydroelastic without contact reduction can generate many contacts
-    rigid_contact_max = 6000 if not reduce_contacts else 100
+    rigid_contact_max = 6000 if not effective_reduce else 100
🧹 Nitpick comments (1)
newton/tests/test_hydroelastic.py (1)

221-236: Stress-test configs omit anchor_contact=True and output_contact_surface=True unlike the default path.

When build_stacked_cubes_scene creates a default config (line 135-140), it sets anchor_contact=True and output_contact_surface=True. These stress-test configs only set buffer_mult_contact=2, so the other fields take class defaults (anchor_contact=False, output_contact_surface=False). If this is intentional (lighter config for stress tests), a brief comment would help; otherwise, consider aligning the fields.

@lenroe lenroe left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nvtw nice! I think this makes a lot of sense to save memory. Left a few comments above. Also: I guess adding wrench matching back in after this would likely need a 2nd pass, which would make it slow. But that's a tradeoff worth taking as opt-in?

Comment thread newton/_src/geometry/sdf_hydroelastic.py Outdated
Comment thread newton/_src/geometry/sdf_hydroelastic.py
Comment thread newton/_src/geometry/contact_reduction_hydroelastic.py Outdated

@adenzler-nvidia adenzler-nvidia left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Summary

Critical Issues (3)

  1. Docs reference non-existent SDFHydroelasticConfigcollisions.rst uses :class:~newton.SDFHydroelasticConfig and SDFHydroelasticConfig(...) in a code example. Should be HydroelasticSDF.Config.

  2. Docs still reference removed moment_matching — The Config code example at line 563 still has moment_matching=False (would raise TypeError), and the "Other reduction options" table still has a moment_matching row. These need to be removed.

  3. Wrong copyright year in new exampleexample_nut_bolt_hydro.py uses 2025 but AGENTS.md requires 2026 for new files.

Important Issues (3)

  1. contact_buffer_fraction has no validationbuffer_fraction validates (0, 1] with ValueError, but contact_buffer_fraction (documented as "Range: (0, 1]") has no validation. Values like 0.0, -1.0, or 5.0 are silently accepted.

  2. _effective_stiffness division by zero(k_a * k_b) / (k_a + k_b) produces NaN on GPU when both shapes have kh=0.0. Pre-existing pattern but duplicated in a new function. Consider guarding with if denom <= 0.0: return 0.0.

  3. encode_oct division by zero for degenerate normals1.0 / (abs(n[0]) + abs(n[1]) + abs(n[2])) produces Inf for (0,0,0) normals from degenerate marching-cubes triangles. Consider an L1-norm guard.

Suggestions (3)

  1. Parameter naming inconsistency — New example_nut_bolt_hydro.py uses num_worlds while sibling example_nut_bolt_sdf.py uses world_count.

  2. Commented-out codeexample_nut_bolt_hydro.py:313 has a commented-out model.collide() call. Either remove or explain.

  3. No unit test for octahedral encode/decode round-trip — A battery test asserting ||decode(encode(n)) - n|| < eps for various normals would catch sign errors in the z<0 hemisphere.

Strengths

  • Algorithmically sound: octahedral encoding, per-entry k_eff, pre-prune top-K, and aggregate accumulation are correctly implemented with consistent encode/decode at all store/load sites.
  • Good defensive coding: per-slot bounds checks, max(..., 64) floors, wp.min(num_contacts, capacity) caps.
  • Actionable overflow warnings mentioning buffer_fraction as a tuning knob.
  • Well-structured tests with monotonicity invariants (test_buffer_fraction_no_crash).
  • Clean moment-matching removal with friction_scale set to constant 1.0.

Comment thread docs/concepts/collisions.rst Outdated
Comment thread newton/examples/contacts/example_nut_bolt_hydro.py Outdated
Comment thread newton/_src/geometry/sdf_hydroelastic.py
Comment thread newton/_src/geometry/contact_reduction_hydroelastic.py Outdated
Comment thread newton/_src/geometry/contact_reduction_global.py Outdated
Comment thread newton/examples/contacts/example_nut_bolt_hydro.py Outdated
@nvtw

nvtw commented Feb 20, 2026

Copy link
Copy Markdown
Member Author

Review Summary

Critical Issues (3)

  1. Docs reference non-existent SDFHydroelasticConfigcollisions.rst uses :class:~newton.SDFHydroelasticConfig and SDFHydroelasticConfig(...) in a code example. Should be HydroelasticSDF.Config.
  2. Docs still reference removed moment_matching — The Config code example at line 563 still has moment_matching=False (would raise TypeError), and the "Other reduction options" table still has a moment_matching row. These need to be removed.
    ...

Strengths

  • Algorithmically sound: octahedral encoding, per-entry k_eff, pre-prune top-K, and aggregate accumulation are correctly implemented with consistent encode/decode at all store/load sites.
  • Good defensive coding: per-slot bounds checks, max(..., 64) floors, wp.min(num_contacts, capacity) caps.
  • Actionable overflow warnings mentioning buffer_fraction as a tuning knob.
  • Well-structured tests with monotonicity invariants (test_buffer_fraction_no_crash).
  • Clean moment-matching removal with friction_scale set to constant 1.0.

Most of it should now be addressed

@adenzler-nvidia adenzler-nvidia left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Second Review Pass

Critical Issues

1. Stale docs reference removed betas and sticky_contacts (docs/concepts/collisions.rst): The code example and "Other reduction options" table still reference betas=(10.0, -0.5) and sticky_contacts=0.0 — parameters from the old moment-matching system removed in this PR. Users copying the example will get TypeError. The "Understanding betas" subsection is also now obsolete.

2. body_key instead of body_label (example_nut_bolt_hydro.py): _init_test_tracking() uses self.model.body_key but the standard API attribute is body_label (see recent rename in 446b60da). Will cause AttributeError in test mode.

Important Issues

3. New example not registered in test_examples.py: example_nut_bolt_hydro has a test_final() method but no corresponding add_example_test() entry.

4. Hashtable full silently drops contacts with no warning (see inline comment).

5. verify_collision_step warnings only via wp.printf: In production (GUI apps, headless servers, redirected stdout), these are the only signal that contacts are being dropped, and they're easily missed. Consider also setting a GPU-visible flag that the host can check and issue a Python warnings.warn().

Suggestions

  1. GlobalContactReducer class docstring still says normal: vec3 — should be vec2 (octahedral-encoded).
  2. No test covers reduce_contacts=True, pre_prune_contacts=False — this is a distinct code path.
  3. entry_k_eff correctness not directly unit-tested — only indirectly via equilibrium checks.

Comment thread docs/concepts/collisions.rst Outdated
Comment thread newton/examples/contacts/example_nut_bolt_hydro.py Outdated
Comment thread newton/_src/geometry/contact_reduction_hydroelastic.py

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/concepts/collisions.rst (1)

556-564: ⚠️ Potential issue | 🟠 Major

Remove unsupported HydroelasticSDF.Config parameters from the example.

betas and sticky_contacts are not part of HydroelasticSDF.Config, so the snippet will error if copied verbatim.

✏️ Suggested fix
     config = HydroelasticSDF.Config(
         reduce_contacts=True,           # Enable contact reduction
         buffer_fraction=0.2,            # Reduce hydroelastic GPU buffer allocations
-        betas=(10.0, -0.5),             # Scoring thresholds (default)
-        sticky_contacts=0.0,            # Temporal persistence (0 = disabled)
         normal_matching=True,           # Align reduced normals with aggregate force
     )
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/concepts/collisions.rst` around lines 556 - 564, The example uses
unsupported parameters on HydroelasticSDF.Config (remove the invalid keys):
delete the betas and sticky_contacts entries from the config literal and leave
only supported fields (e.g., reduce_contacts, buffer_fraction, normal_matching);
update any inline comments to reflect the remaining valid options and ensure the
snippet constructs HydroelasticSDF.Config(...) with only valid attributes.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@asv/benchmarks/simulation/bench_contacts.py`:
- Around line 35-106: Add Google-style docstrings to the helper and benchmark
classes: document the function _import_example_class (describe its purpose,
Args: module_names: list[str], Returns: the Example class or raises
SkipNotImplemented) and add docstrings to FastExampleContactSdfDefaults and
FastExampleContactHydroWorkingDefaults (describe the benchmark purpose,
attributes like repeat/number/num_frames with units where applicable, and
setup/setup_cache/time_simulate behavior). Use Google-style sections (Args,
Returns, Raises) and include SI unit notation [unit] for any physical quantities
referenced.

In `@newton/_src/geometry/sdf_hydroelastic.py`:
- Around line 1333-1336: Rename the intentionally unused kernel parameters
shape_local_aabb_lower, shape_local_aabb_upper, and shape_voxel_resolution by
prefixing each with an underscore (e.g., _shape_local_aabb_lower,
_shape_local_aabb_upper, _shape_voxel_resolution) in the kernel/function
signature in sdf_hydroelastic.py to silence ARG001 warnings; also update any
internal references (if present) to the new underscore-prefixed names to keep
the signature consistent and avoid unused-variable linter errors.

In `@newton/examples/__init__.py`:
- Around line 38-41: The wrapper function download_external_git_folder currently
imports download_git_folder from the internal module
newton._src.utils.download_assets; change this to import the public re-export
(e.g., from newton.utils import download_git_folder) and remove the noqa comment
and any reference to newton._src; if the public re-export does not exist, add a
re-export of download_git_folder in the public module (newton.utils) that
imports from newton._src.utils.download_assets and exposes download_git_folder,
then update download_external_git_folder to import from newton.utils so examples
no longer import from internal modules.

In `@newton/examples/contacts/example_nut_bolt_hydro.py`:
- Around line 154-205: The two long ValueError messages in the scene and solver
selection branches (the raises in the scene handling after
_build_nut_bolt_scene/_build_gears_scene and the solver selection where
self.solver_type is checked) trigger Ruff TRY003; replace them with either short
error messages (e.g., "unknown scene" and "unknown solver") or introduce small
custom exception classes (e.g., class UnknownSceneError(Exception) and class
UnknownSolverError(Exception)) and raise those with concise messages; ensure the
new exception symbols (UnknownSceneError/UnknownSolverError) are defined near
the top of the module and used in place of the long f-string ValueError() calls
so the checks in scene and solver selection use the new exceptions.
- Around line 64-107: Add Google-style docstrings to the new helper functions
add_mesh_object and load_mesh_with_sdf: for each function add a short summary
line, an Args section that documents every parameter (e.g., builder:
ModelBuilder, mesh: Mesh, transform: wp.transform with position in [m],
shape_cfg: ModelBuilder.ShapeConfig or None, key: str or None, center_vec:
wp.vec3 [m] or None, scale: float [unitless], mesh_file: str, center_origin:
bool), include units for all physical quantities such as transform position [m]
and contact_margin [m], and a Returns section describing the return types
(add_mesh_object -> int body id; load_mesh_with_sdf -> tuple[newton.Mesh,
wp.vec3] with center_vec in [m]); follow Google docstring formatting and apply
the same docstring style and unit annotations to other new helper methods in
this file.

In `@newton/examples/contacts/example_nut_bolt_sdf.py`:
- Around line 243-245: Add an entry for the nut_bolt_sdf example to README.md
mirroring other example entries (Basic/Robot/Cable): mention the run command "uv
run -m newton.examples nut_bolt_sdf", include a short description referencing
the Example class in newton/examples/contacts/example_nut_bolt_sdf.py and its
meaningful test_final() method, and add a screenshot (thumbnail) and caption
showing the example output; follow the same formatting, section placement, and
caption style used by the other examples.

In `@newton/tests/test_contact_reduction_global.py`:
- Around line 620-651: The test function test_oct_encode_decode_roundtrip uses a
single-line docstring; replace it with a Google-style docstring that briefly
describes the test purpose and adds Args and Returns sections: describe the
parameters (test, device) under Args and state that the function returns None
under Returns; mention units where relevant (e.g., error is dimensionless) if
you reference the measured max_error, and keep the description concise; update
only the docstring for test_oct_encode_decode_roundtrip (no code changes to
roundtrip_error_kernel).

In `@newton/tests/test_hydroelastic.py`:
- Around line 267-417: Several tests and the helper
_compute_total_active_weight_sum use short single-line docstrings; update each
to Google-style docstrings including a short description, Args with parameter
names and SI units (e.g., cube_half [m], contact_margin [m], buffer_fraction
[unitless], device, test where applicable), and Returns (with types and units if
applicable). Specifically, replace the docstrings in
test_buffer_fraction_no_crash, _compute_total_active_weight_sum,
test_iso_scan_scratch_buffers_are_level_sized, and
test_pre_prune_accumulate_all_penetrating_aggregates_increases_total_weight_sum
with Google-style blocks that list Args and Returns and annotate all physical
quantities with [m] or other SI units; keep descriptions concise and consistent
with project guidelines.

---

Outside diff comments:
In `@docs/concepts/collisions.rst`:
- Around line 556-564: The example uses unsupported parameters on
HydroelasticSDF.Config (remove the invalid keys): delete the betas and
sticky_contacts entries from the config literal and leave only supported fields
(e.g., reduce_contacts, buffer_fraction, normal_matching); update any inline
comments to reflect the remaining valid options and ensure the snippet
constructs HydroelasticSDF.Config(...) with only valid attributes.

---

Duplicate comments:
In `@newton/_src/geometry/contact_reduction_global.py`:
- Around line 278-313: Update the encode_oct and decode_oct docstrings to
Google-style with explicit Args and Returns sections: for encode_oct(document
that n: wp.vec3 is a unit (normalized) surface normal, type wp.vec3,
unitless/normalized) and that it returns wp.vec2 (the octahedral 2D encoding,
unitless); for decode_oct(document that e: wp.vec2 is the oct-encoded vector,
type wp.vec2, unitless) and that it returns wp.vec3 (the reconstructed unit
normal, type wp.vec3, unitless/normalized). Keep the existing brief description,
mention precision/behavior as before, and follow the repo’s docstring formatting
(Args:, Returns:) for both functions (encode_oct, decode_oct).

In `@newton/_src/geometry/contact_reduction_hydroelastic.py`:
- Around line 83-88: Add a Google-style docstring to the _effective_stiffness
function describing the purpose and documenting Args and Returns with SI units:
explain k_a and k_b are stiffness values (units [N/m]) and the function returns
the effective stiffness (units [N/m]); also note the behavior when denom <= 0.0
(returns 0.0). Place the docstring immediately above the def
_effective_stiffness(...) and keep content concise following the project's
docstring conventions.
- Around line 152-160: The kernel reduce_hydroelastic_contacts_kernel has an
unused parameter shape_transform causing ARG001; rename it to _shape_transform
(or prefix with an underscore) in the function signature to silence the linter
and update any internal references to use the new name if they exist (leave
actual logic unchanged if the parameter truly isn’t used).

Comment thread asv/benchmarks/simulation/bench_contacts.py
Comment thread newton/_src/geometry/sdf_hydroelastic.py Outdated
Comment thread newton/examples/__init__.py
Comment thread newton/examples/contacts/example_nut_bolt_hydro.py
Comment thread newton/examples/contacts/example_nut_bolt_hydro.py Outdated
Comment thread newton/examples/contacts/example_nut_bolt_sdf.py
Comment thread newton/tests/test_contact_reduction_global.py
Comment thread newton/tests/test_hydroelastic.py

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (3)
newton/examples/robot/example_robot_panda_hydro.py (1)

234-234: Nit: -0.0 is misleading — simplify to 0.0.

-0.0 is IEEE 754 negative zero and is arithmetic-equivalent to 0.0 in all float operations (including addition on lines 500–501). The leading minus appears to be a leftover from the previous value (-0.015) and will confuse readers.

♻️ Proposed fix
-            self.place_offset = -0.0
+            self.place_offset = 0.0
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@newton/examples/robot/example_robot_panda_hydro.py` at line 234, The
assignment sets self.place_offset = -0.0 which is misleading; change the
initialization of the place_offset attribute (self.place_offset) to use 0.0
instead of -0.0 so the value is canonical and clearer (the rest of the code,
e.g., arithmetic using place_offset, remains unchanged).
newton/_src/geometry/sdf_hydroelastic.py (2)

1423-1543: Pre-prune local compaction logic is correct but carries high register load.

The top-2 penetrating + 1 non-penetrating selection is implemented correctly. The shift from pen0→pen1 on a new best score maintains the proper ranking invariant.

One note: the 9 face_verts vec3 variables (best_pen0_v0..v2, best_pen1_v0..v1, best_nonpen_v0..v2) are assigned unconditionally inside the face loop but only read when output_vertices=True. When visualization is disabled, these 27 floats may still consume registers depending on compiler dead-store elimination.

If register pressure becomes an issue on occupancy-sensitive workloads, consider guarding the vertex assignments with wp.static(output_vertices) as well:

Sketch
                         best_pen0_center = face_center
+                        if wp.static(output_vertices):
                         best_pen0_v0 = face_verts[0]
                         best_pen0_v1 = face_verts[1]
                         best_pen0_v2 = face_verts[2]

(Apply the same pattern to pen1 and nonpen assignments.)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@newton/_src/geometry/sdf_hydroelastic.py` around lines 1423 - 1543, The loop
stores face_verts into the many temp vertex slots (best_pen0_v0..v2,
best_pen1_v0..v2, best_nonpen_v0..v2) even when output_vertices is false,
increasing register pressure; wrap the assignments to those vertex variables in
a wp.static(output_vertices) guard so the stores are compiled out when
visualization is disabled (apply the same pattern for the pen0, pen1 and nonpen
assignment sites where face_verts[...] are written and for the iso_vertex writes
if already present), referencing the variables best_pen0_v0..best_pen0_v2,
best_pen1_v0..best_pen1_v2, best_nonpen_v0..best_nonpen_v2, face_verts and the
output_vertices flag to locate the code to change.

108-113: Consolidate duplicate @wp.func: get_effective_stiffness and _effective_stiffness

Both functions compute identical harmonic-mean stiffness logic. Move the shared function to contact_reduction_global.py (which already houses shared @wp.func utilities like compute_effective_radius and make_contact_key) to prevent maintenance divergence.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@newton/_src/geometry/sdf_hydroelastic.py` around lines 108 - 113, Move the
duplicate harmonic-mean stiffness logic out of
newton/_src/geometry/sdf_hydroelastic.py by removing get_effective_stiffness and
instead reuse a single `@wp.func` placed in contact_reduction_global.py (where
compute_effective_radius and make_contact_key live); implement the function
there with the same signature (e.g., effective_stiffness or
get_effective_stiffness) and update callers in sdf_hydroelastic.py and anywhere
_effective_stiffness was used to import/alias and call that centralized `@wp.func`
so both modules share the one implementation.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@newton/examples/contacts/example_nut_bolt_sdf.py`:
- Around line 63-110: Add Google-style docstrings to the new helper functions
add_mesh_object and load_mesh_with_sdf: for each function include a short
summary, an Args section listing each parameter with its type and SI units where
applicable (e.g., transform.p and center_vec as positions [m], scale as
unitless, mesh_file as path string, shape_cfg as newton.ModelBuilder.ShapeConfig
or None), and a Returns section describing return values and their types/units
(e.g., mesh: newton.Mesh, center_vec: wp.vec3 [m]); include notes about behavior
(e.g., center_origin shifts vertices by center [m]) and any defaults (e.g.,
default margin value) to match repository docstring standards.

In `@newton/tests/test_hydroelastic.py`:
- Around line 82-90: Update the build_stacked_cubes_scene docstring to
Google-style with an Args/Returns section that documents the new
sdf_hydroelastic_config param and units for physical values: list each parameter
(device, solver_fn, shape_type, cube_half [m], reduce_contacts,
sdf_hydroelastic_config) with a one-line description and units for cube_half and
any other physical quantities, describe the expected type for
sdf_hydroelastic_config (HydroelasticSDF.Config | None) and its effect, and add
a Returns block that enumerates the returned components (scene, bodies, solvers,
etc.) and their types/units where applicable; keep the top-line summary sentence
and ensure clarity for testers using build_stacked_cubes_scene.

---

Duplicate comments:
In `@newton/_src/geometry/contact_reduction_global.py`:
- Around line 278-305: The encode_oct function already adds a numerical guard
using l1 < 1.0e-20 to avoid division-by-zero for degenerate normals; ensure the
guard remains in place in encode_oct (and that it returns wp.vec2(0.0, 0.0) for
that case) and keep the octahedral flip logic (oz < 0.0 branch) intact so
encode_oct, ox, oy, oz, inv_l1 operate as intended.

In `@newton/_src/geometry/contact_reduction_hydroelastic.py`:
- Around line 83-88: The division-by-zero guard in _effective_stiffness is
correct and resolves the prior issue: keep the denom <= 0.0 check in the
_effective_stiffness(k_a, k_b) wp.func and return 0.0 when triggered; ensure
returned literals and comparisons remain compatible with wp.float32 (cast
constants if necessary) to avoid type warnings but no further code change is
required.
- Around line 152-161: The parameter shape_transform in the
reduce_hydroelastic_contacts_kernel function is unused and triggers ARG001;
either remove it from the signature if it's truly unnecessary or rename it to
_shape_transform (or prefix with an underscore) so static analysis ignores it,
or add a short in-signature comment explaining why it must remain (e.g.,
reserved for future use) — update the function signature for
reduce_hydroelastic_contacts_kernel accordingly and ensure any callers are
adjusted if you remove or rename the parameter.

In `@newton/examples/__init__.py`:
- Around line 38-41: The example wrapper download_external_git_folder currently
imports from the internal module newton._src.utils.download_assets; add a public
re-export for download_git_folder (for example expose it from a public package
like newton.utils or newton.downloads) and then change the import in
download_external_git_folder to import download_git_folder from that public
module instead of newton._src.utils.download_assets, removing the
now-unnecessary noqa; keep the function signature and return behavior the same.

In `@newton/examples/contacts/example_nut_bolt_hydro.py`:
- Around line 179-230: Replace the long ValueError uses in the scene and solver
selection with dedicated exceptions: define small custom exceptions (e.g.,
UnknownSceneError and UnknownSolverError) at module scope and raise
UnknownSceneError when the branch currently does raise ValueError(f"Unknown
scene '{scene}') and raise UnknownSolverError when the branch currently does
raise ValueError(f"Unknown solver '{self.solver_type}'); keep the raised message
short (or none) to satisfy TRY003 and update any callers/imports if needed so
the new exception types are used instead of ValueError.

In `@newton/tests/test_contact_reduction_global.py`:
- Around line 620-626: The docstring for test_oct_encode_decode_roundtrip is
missing a Returns section; update the Google-style docstring for the function
(test_oct_encode_decode_roundtrip) to include a Returns: entry (e.g., "None")
describing the function's return value so it is fully compliant with the project
docstring guidelines.

In `@newton/tests/test_hydroelastic.py`:
- Around line 181-193: The docstring for run_stacked_cubes_hydroelastic_test is
missing Google-style Args/Returns details (including the new config parameter);
update the triple-quoted docstring to describe the function purpose and add an
Args section documenting test, device, solver_fn, shape_type, cube_half,
reduce_contacts, and particularly config: type and meaning, and add a Returns
section describing the tuple returned (model, solver, state_0, state_1, control,
collision_pipeline, initial_positions, cube_half) and their types/semantics so
it conforms to the project's Google-style docstring guidelines.

---

Nitpick comments:
In `@newton/_src/geometry/sdf_hydroelastic.py`:
- Around line 1423-1543: The loop stores face_verts into the many temp vertex
slots (best_pen0_v0..v2, best_pen1_v0..v2, best_nonpen_v0..v2) even when
output_vertices is false, increasing register pressure; wrap the assignments to
those vertex variables in a wp.static(output_vertices) guard so the stores are
compiled out when visualization is disabled (apply the same pattern for the
pen0, pen1 and nonpen assignment sites where face_verts[...] are written and for
the iso_vertex writes if already present), referencing the variables
best_pen0_v0..best_pen0_v2, best_pen1_v0..best_pen1_v2,
best_nonpen_v0..best_nonpen_v2, face_verts and the output_vertices flag to
locate the code to change.
- Around line 108-113: Move the duplicate harmonic-mean stiffness logic out of
newton/_src/geometry/sdf_hydroelastic.py by removing get_effective_stiffness and
instead reuse a single `@wp.func` placed in contact_reduction_global.py (where
compute_effective_radius and make_contact_key live); implement the function
there with the same signature (e.g., effective_stiffness or
get_effective_stiffness) and update callers in sdf_hydroelastic.py and anywhere
_effective_stiffness was used to import/alias and call that centralized `@wp.func`
so both modules share the one implementation.

In `@newton/examples/robot/example_robot_panda_hydro.py`:
- Line 234: The assignment sets self.place_offset = -0.0 which is misleading;
change the initialization of the place_offset attribute (self.place_offset) to
use 0.0 instead of -0.0 so the value is canonical and clearer (the rest of the
code, e.g., arithmetic using place_offset, remains unchanged).

Comment thread newton/examples/contacts/example_nut_bolt_sdf.py
Comment thread newton/tests/test_hydroelastic.py
@nvtw nvtw enabled auto-merge February 20, 2026 14:44
@nvtw nvtw added this pull request to the merge queue Feb 20, 2026
Merged via the queue into newton-physics:main with commit a4cdb98 Feb 20, 2026
22 checks passed
@coderabbitai coderabbitai Bot mentioned this pull request Mar 3, 2026
4 tasks
vastsoun added a commit to vastsoun/newton that referenced this pull request Mar 3, 2026
* [Warp Raytrace] Added device parameter (newton-physics#1544)

* [Warp Raytrace] Added device parameter to previously overlooked call (newton-physics#1545)

* SolverMuJoCo: Fix tolerance clamping in update_solver_options_kernel (newton-physics#1546)

* Change default shape_ke to align with MuJoCo, parse geom solref from MJCF for contact stiffness/damping (newton-physics#1491)

Signed-off-by: Alain Denzler <adenzler@nvidia.com>

* Fix log_shapes broadcasting for length-1 warp arrays (newton-physics#1550)

* Fix XPBD restitution particle index (newton-physics#1557)

* Out-of-Bound memory read in example_diffsim_bear newton-physics#1386 (newton-physics#1533)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Add versioned documentation deployment to GitHub Pages (newton-physics#1560)

* Fix broken documentation links after versioned docs deployment (newton-physics#1566)

* VBD New Features (newton-physics#1479)

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>

* Add banners to membership verification workflow steps (newton-physics#1569)

* Support cable junctions (newton-physics#1519)

Signed-off-by: JC <jumyungc@nvidia.com>

* Rename parameter I to inertia newton-physics#1543 (newton-physics#1551)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Fix example_robot_anymal_c_walk.py (newton-physics#1574)

* Change everywhere linesearch to iterative (newton-physics#1573)

* Remove standard collision pipeline (newton-physics#1538)

* USD Plumbing MJC solver attributes through resolver and custom attribute framework (newton-physics#1463)

Signed-off-by: Milad Rakhsha <mrakhsha@nvidia.com>
Signed-off-by: Milad-Rakhsha-NV <167464435+Milad-Rakhsha-NV@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: adenzler-nvidia <adenzler@nvidia.com>

* Fix child shape filtering (newton-physics#1559)

* Fix ViewerRerun ignoring hidden parameter in log_mesh and log_instances (newton-physics#1555)

* Make NxN and SAP broad phase respect filtered pairs (newton-physics#1554)

* Add --quiet flag to examples to suppress Warp messages (newton-physics#1585)

* Defer resolution of MESH_MAXHULLVERT default in importers (newton-physics#1587)

* Fix TypeError when finalizing SDF geometry with device kwarg (newton-physics#1586)

* Make MESH_MAXHULLVERT a static class attribute Mesh.MAX_HULL_VERTICES. (newton-physics#1598)

* Significant non-determinism in unified collision pipeline for anymal_c_walking example newton-physics#1505 (newton-physics#1588)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Add test for non-contiguous case (newton-physics#1549)

* Fix nightly Warp CI to resolve pre-release builds (newton-physics#1606)

* Verify default class and value handling (newton-physics#1556)

* SolverMuJoCo: Expand geom_margin to avoid OOB read with heterogeneous worlds (newton-physics#1607)

* Fix bug in control clear method (newton-physics#1602)

* Enable Use of Newton IK in Lab newton-physics#662 (newton-physics#1539)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Fix import  of non-articulated joints (newton-physics#1535)

* Deduplicate _process_joint_custom_attributes frequency handling (newton-physics#1584)

* Add CI check for stale API docs and fix local build warnings (newton-physics#1570)

* Update Pillow 12.0.0 to 12.1.1 (newton-physics#1612)

* Prepare handling of mimic constraints in Newton (newton-physics#1523)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Support floating,  base_joint and parent_body arguments for importers (newton-physics#1498)

* Fix contact buffer memory overestimation (newton-physics#1614)

* Configure banned-module-level-imports for ruff (newton-physics#1583)

* Explicit `Contacts` instantiation with `Model.contacts()` and `CollisionPipeline.contacts()` (newton-physics#1445)

* Fix the quadruped benchmark regression (newton-physics#1615)

* Change default ignore_inertial_definitions from True to False (newton-physics#1537)

* Finalize the Recording API (newton-physics#1600)

* SolverMuJoCo: Fix ccd_iterations default (newton-physics#1631)

* update gitignore to ignore Claude Code sandbox files (newton-physics#1628)

* Add mimic joint support to SolverMuJoCo (newton-physics#1627)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Add --no-cache-clear flag to test runner (newton-physics#1629)

* Update MuJoCo and MuJoCo Warp to 3.5.0 release (newton-physics#1633)

* Improve inertia parsing from USD (newton-physics#1605)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Remove standalone .typos.toml in favor of pyproject.toml config (newton-physics#1642)

* Heightfield support newton-physics#1189 (newton-physics#1547)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Example_robot_policy: Replace ValueError with clean error for missing PhysX policy (newton-physics#1636)

Co-authored-by: Viktor Reutskyy <33062116+vreutskyy@users.noreply.github.com>

* Avoid unnecessary inflation of the contact reduction voxel aabb (newton-physics#1650)

* Rename num_worlds to world_count (newton-physics#1634)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Support parsing autolimits from MJCF (newton-physics#1651)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Fix particle-shape restitution ignoring body velocity (newton-physics#1273) (newton-physics#1580)

* Add overflow warnings for narrow-phase collision buffers (newton-physics#1643)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Documentation: add units to model/state docstrings (newton-physics#1649)

* fix(viewer): add missing JointType.BALL support to contact line kernel (newton-physics#1640)

* Make terrain mesh visual-only in anymal C walking example (newton-physics#1660)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Fix initialization of collider state in MPM finite difference mode (newton-physics#1652)

* docs: document ModelBuilder.default_shape_cfg (newton-physics#1662)

* Finalize the collision API (newton-physics#1581)

* Remove hardcoded subnet ID from AWS workflow (newton-physics#1664)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Attempt to fix AWS config (newton-physics#1666)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Update AWS workflows to g7e.2xlarge with multi-AZ failover (newton-physics#1669)

* fix(viewer-usd): disambiguate log_points colors for N=3 warp arrays (newton-physics#1661)

* Viewer gl optimizations (newton-physics#1656)

Signed-off-by: Miles Macklin <mmacklin@nvidia.com>
Signed-off-by: Eric Heiden <eheiden@nvidia.com>
Co-authored-by: Eric Heiden <eheiden@nvidia.com>

* docs: add articulation workflow guidance and regression check (newton-physics#1663)

* fix(examples): propagate IK solution to model state in Franka example (newton-physics#1637)

* fix(deps,docs): bump nbconvert to 7.17.0 and fix ArticulationView doctest (newton-physics#1670)

* Cleanup and improve some example (newton-physics#1625)

Signed-off-by: adenzler-nvidia <adenzler@nvidia.com>
Co-authored-by: adenzler-nvidia <adenzler@nvidia.com>

* Handle zero-mass bodies and flip ensure_nonstatic_links default (newton-physics#1635)

* Additional testing for ArticulationView (newton-physics#1527)

Co-authored-by: Eric Heiden <eheiden@nvidia.com>

* Update warp-lang nightly to 1.12.0.dev20260217 (newton-physics#1677)

* Change default friction coefficients to match MuJoCo (newton-physics#1681)

* Refactor mesh creation functions (newton-physics#1654)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Parse joint frictionloss from MJCF (newton-physics#1680)

* Fix free joint body_pos and add ref/qpos0 support for MuJoCo solver (newton-physics#1645)

* Fix root shapes in ArticulationView with fixed base (newton-physics#1639)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Co-authored-by: Eric Heiden <eric-heiden@outlook.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Use model collision methods and remove `create_collision_pipeline` from examples (newton-physics#1648)

Co-authored-by: nvtw <110816143+nvtw@users.noreply.github.com>

* Fix XPBD apply_joint_forces ignoring child joint transform (newton-physics#1582)

* Adjust SDF API (newton-physics#1644)

Co-authored-by: Eric Heiden <eheiden@nvidia.com>

* Optimize test suite runtime (~18% faster) (newton-physics#1689)

* Remove ensure_nonstatic_links option from importers (newton-physics#1682)

Signed-off-by: adenzler-nvidia <adenzler@nvidia.com>

* SolverMuJoCo: Add geom_margin support, align thickness default with MuJoCo and schemas (newton-physics#1653)

* refactor: privatize non-public solver internals (newton-physics#1683)

* Fix option parsing with multiple <option> elements from includes (newton-physics#1692)

* Bump warp-lang nightly and newton-usd-schemas (newton-physics#1693)

* Get rid of tkinter dependency (newton-physics#1676)

* Fix SDF example contact buffer overflow (newton-physics#1695)

* Fix implicit biastype for position/velocity actuator shortcuts (newton-physics#1678)

* Fix include processor to respect meshdir/texturedir (newton-physics#1685)

* Reduce cold-cache Warp compile time for geometry modules (newton-physics#1618)

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: adenzler-nvidia <adenzler@nvidia.com>

* Fix xyzw-to-wxyz quaternion conversion in body inertia kernel (newton-physics#1694)

* Rename key to label and add hierarchical labels (newton-physics#1592) (newton-physics#1632)

* Expose geometry SDF helpers on public API (newton-physics#1684)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Improve custom frequency handling from USD, parse MuJoCo actuators and tendons (newton-physics#1510)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Signed-off-by: Eric Heiden <eheiden@nvidia.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Collapse fixed joints with non articulated bodies (newton-physics#1608)

* Fix renaming joint_key -> joint_label (newton-physics#1700)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Bump .python-version from 3.11 to 3.12 (newton-physics#1702)

* Replace CITATION.md with CITATION.cff (newton-physics#1706)

* Respect MJCF contype=conaffinity=0 via collision_group=0 (newton-physics#1703)

* Make ViewerUSD reuse existing USD layers for the same output path (newton-physics#1704)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Remove dead up-axis conversion from MuJoCo solver (newton-physics#1707)

* Skip IK cube stacking example test (newton-physics#1713)

* Fix global pairs (world=-1) not exported to MuJoCo spec (newton-physics#1705)

* Reduce the memory consumption of hydroelastic contacts (newton-physics#1609)

* Fix flakiness cube stacking (newton-physics#1714)

* Fix collision shapes not toggleable in viewer UI (newton-physics#1715)

* Fix softbody examples table layout in README (newton-physics#1716)

* Standardize sensor APIs: label matching, keyword args, and update() method naming (newton-physics#1665)

* Fix intermittent crash in parallel test runner from Manager proxy race (newton-physics#1721)

* Clean up inertia.py function arguments to match Mesh.create_* API (newton-physics#1719)

* Reduce default test runner verbosity (newton-physics#1723)

* Add menagerie comparison tests for SolverMuJoCo (newton-physics#1720)

Signed-off-by: Alain Denzler <adenzler@nvidia.com>
Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>
Co-authored-by: Viktor Reutskyy <vreutskyy@nvidia.com>
Co-authored-by: Viktor Reutskyy <33062116+vreutskyy@users.noreply.github.com>

* Add spatial tendon support for MuJoCo solver (newton-physics#1687)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Expose qfrc_actuator from mujoco (newton-physics#1698)

* Skip non-MODEL custom attributes in finalize validation (newton-physics#1734)

* Resolve inheritrange for position actuators in MJCF parser (newton-physics#1727)

* Support dampratio for position/velocity actuator shortcuts (newton-physics#1722)

* Limit concurrency to 1 (newton-physics#1736)

* Add a helper method for checking applied usd (newton-physics#1731)

* Enhance playback URL handling in ViewerViser (newton-physics#1742)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Removed RenderShapeType (newton-physics#1748)

* Override only MassAPI attributes that have been authored (newton-physics#1688)

* Integration of newton-actuators  (newton-physics#1342)

Signed-off-by: jvonmuralt <jvonmuralt@nvidia.com>

* Fix ArticulationView crash with fixed-joint-only articulations (newton-physics#1726)

* Improve retrieval of Jupyter base URL in ViewerViser (newton-physics#1750)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Disable dynamics testing for UR5e and Apollo tests to avoid CI flakiness (newton-physics#1755)

* Margin and Gap rename (newton-physics#1732)

* Vbd Demos Fixing (newton-physics#1740)

* Fix ViewerViser.log_lines method (newton-physics#1764)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Update warp-lang dependency to 1.12.0rc1 (newton-physics#1763)

* Fix fromto capsule/cylinder orientation in MJCF parser (newton-physics#1741)

* fix: multi-world particle BVH indexing (newton-physics#1641)

Co-authored-by: Eric Heiden <eheiden@nvidia.com>

* Clean up unused and internal-only kwargs in SolverMuJoCo (newton-physics#1766)

* Parsing of the mimic joint and contact gap/margin from newton schemas (newton-physics#1690)

Signed-off-by: Milad Rakhsha <mrakhsha@nvidia.com>

* API Refactor v2 (newton-physics#1749)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Support explicit geom mass attributes in MJCF (newton-physics#1744)

* Bump flask and werkzeug in lockfile for security (newton-physics#1769)

Co-authored-by: Cursor <cursoragent@cursor.com>

* Split MJCF worldbody root bodies into separate articulations (newton-physics#1754)

* Expose VBD rigid contact forces for solver coupling (newton-physics#1745)

Signed-off-by: JC <jumyungc@nvidia.com>

* Add MJCF ellipsoid geom import and regression test (newton-physics#1772)

Co-authored-by: Cursor <cursoragent@cursor.com>

* Weld equality constraints parsed from mjcf are given Nan as the default value of torquescale. The correct default should be 1.0 (newton-physics#1760)

* Improve picking accuracy and stability (newton-physics#1712)

* Franka cloth demo improvement (newton-physics#1765)

* Support computing sensing object transforms & API cleanup (newton-physics#1759)

* Remove threading workaround (newton-physics#1751)

* [Warp Raytrace] Consolidated ray intersect functions, renamed Options to Config (newton-physics#1767)

* Improve README example gallery for PyPI compatibility (newton-physics#1776)

* Fix issue with mesh in rerun viewer (newton-physics#1768)

* Add PhysxMimicJointAPI parsing to USD importer (newton-physics#1735)

* Move some math functions to Warp (newton-physics#1717)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Add test to ensure MJCF xform argument is relative (newton-physics#1777)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Emit diaginertia instead of fullinertia for diagonal body inertia (newton-physics#1780)

* Change default joint armature from 0.01 to 0 (newton-physics#1782)

* Fix default kp/kv for position and velocity actuators (newton-physics#1786)

* Lock body inertia after explicit MJCF <inertial> element (newton-physics#1784)

* Fix for MJCF actuator custom attributes (newton-physics#1783)

* Bump version to 0.2.3

Prepare the package metadata for the v0.2.3 release tag.

* Fix ViewerRerun rendering of instances from hidden meshes (newton-physics#1788)

* API cleanup (newton-physics#1789)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* BODY actuator target name bypasses body name de-duplication in SolverMuJoCo (newton-physics#1729)

* Use default density for visual geoms in MJCF import (newton-physics#1781)

* Fix GL viewer crash on Wayland (newton-physics#1793)

* Make USD xform parameter control absolute articulation placement (newton-physics#1771)

* Fix CUDA context corruption in SDF implementation (newton-physics#1792)

* Bump mujoco-warp dependency to 3.5.0.2 (newton-physics#1779)

* Fix MuJoCo margin/gap conversion (newton-physics#1785)

* Bump version to 1.1.0.dev0 (newton-physics#1798)

* Missing unittest.main added back to test_import_mjcf.py.  Helps with F5 debugging in VS Code. (newton-physics#1796)

* Improve H1 example (newton-physics#1801)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Fix ViewerViser.set_camera() (newton-physics#1805)

* Rename examples to follow prefix-first naming convention (newton-physics#1802)

* Improve MuJoCo actuator domain randomization (newton-physics#1773)

* Restore in_cup test in hydro example (newton-physics#1775)

* Fix `newton.geometry` imports and change of Mesh maxhullverts global constant

* Adapt to having both margin and gap arrays for each geom/shape

* Fix for newton.geometry API changes in primitive/narrowphase.py

* Fix removal of `BroadPhaseMode` IntEnum and revert to newton-sytle string literals

* WIP: Adapt geometry/unified.py to fix breaking changes to `newton.geometry` API

* First pass of API adjustments

* Patch more gaps (with respect to margin and gap renaming)

* GeoType.SDF was removed - reflect that in Kamino

* Introduce CoM position offsets w.r.t body frame and operations to convert between body CoM state and generic local body-fixed reference frames.

* Add caching of per-entity labels/names/keys in the Model subcontainers

* Remove SDF shape wrapper since it's now internal to mesh handling in CD pipelines

* Fix USD test assets

* Add Newton <--> Kamino joint type conversion operations and per-space default limit constants

* Add some cleanup to geometry and unified CD + UTs

* Add Newton <--> Kamino shape type conversion operations

* Apply new default joint coord limit constants to limits.py

* Adapt foubrar model builder and USD asset to produce the same result in sim example

* Purge "physical" goems and collapse all into a single group, and purge geometry "layers"

* Disable allocation per-joint wrenches by default and make them optional

* Make `Model` a dataclass

* Separate ModelData* containers into own `core/data.py` module

* Fix imports of ModelData

* Rename `Model` as `ModelKamino`

* Rename `ModelData` as `DataKamino`

* Rename `State` as `StateKamino`

* Rename `Control` as `ControlKamino`

* Rename `Limits` as `LimitsKamino`

* Rename `Contacts` as `ContactsKamino`

* Rename `ModelBuilder` as `ModelBuilderKamino`

* Make imports in test utilities relative

* Revise CD meta-data attributes and their computation in GeometryModel and ModelBuilderKamino

* Revise primitive CD pipeline

* Revise unified CD pipeline

* Revise CD front-end interfaces

* Fix UTs and relevant utils for interface changes to CD

* Change to `wp.DeviceLike` to account for upcoming deprecation of `Devicelike`

* Depracate legacy HDF5 data io (will be replaced in the future)

* Fix banned imports at module level

* Modify USD importer to detect articulations and order geoms and joints similarly to how the Newton `parse_usd` function does.

* Add conversion operation from `newton.Model` to `ModelKamino`

* Add data, state and control container conversions

* Add SolverKamino wrapper that fullfils newton integration interface

* Add newton integration examples

* Add SolverKamino to newton solver module imports

* WIP: fix problem with lambda_j being allocated for only kinematic constraints and failing on array copying

* Fix banned git import in benchmark

* Rename *Settings to *Config (#213)

* Rename SolverKaminoSettings -> SolverKaminoConfig

* Rename DualProblemSettings -> DualProblemConfig

* Rename CollisionDetectorSettings -> CollisionDetectorConfig

* Rename PADMMSettings -> PADMMConfig

* Rename ForwardKinematicsSolverSettings -> ForwardKinematicsSolverConfig

* Rename SimulatorSettings -> SimulatorConfig

* Add check for model compatibility in SolverKamino (#209)

* Fix device assignment in sparse CG test on CPU (#216)

* Replace Enum-type config attributes with Literal (#215)

* Replace warmstart mode config param with literal

* Replace contact warmstart mode config param with literal

* Replace rotation correction config param with literal

* Replace penalty update config param with literal

* Replace FK preconditioner option config param with literal

* Add post-init checks for dual/PADMM configs

* Rename FKPreconditionerOptions to FKPreconditionerType

* Remove WorldDescriptor from ModelKamino (#219)

* Add geom index offset array to model info

* Replace access to world description in model

* Remove world descriptor from model

* Fix computation of kinematics residual with sparse Jacobian (#220)

* Migrates `ModelKaminoSize` to it's own module to avoid circular dependency between core/model.py and core/state.py and rename it as `SizeKamino`.

* WIP: Fix SolverKamino wrapper

* Fix circular dependency in conversions.py

* Fix some broken unit tests and WIP to fix fourbar contact conversions and rendering

* Make some conversions @staticmethods instead, because they dont need common class attributes

* Fix declaration of custom state attributes and their conversion to/from newton and kamino

* WIP: Debug model conversion and newton sim examples

* Rename and cleanup start index array of per-world geoms

* Model conversion and newton sim examples now work.

* Make gravity conversion operation re-usable

* Migrates boxes_fourbar builder using newton.ModelBuilder to it's own module to prepare for migration.

* Use gravity conversion utility func in SolverKamino

* Add reusable joint-parameterization conversion utility

* Remove world-descriptor from model converter

* Rename helper converter that handles entity-local transforms

* Add some cleanup to DR Legs, ANYmal D and basic four-bar examples

* Fix module-level imports of additional kamino-specific development dependencies

* Fix module-level imports of additional kamino-specific development dependencies

* Fix erroneous merge conflict.

---------

Signed-off-by: Alain Denzler <adenzler@nvidia.com>
Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>
Signed-off-by: JC <jumyungc@nvidia.com>
Signed-off-by: Milad Rakhsha <mrakhsha@nvidia.com>
Signed-off-by: Milad-Rakhsha-NV <167464435+Milad-Rakhsha-NV@users.noreply.github.com>
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Signed-off-by: Eric Heiden <eheiden@nvidia.com>
Signed-off-by: Miles Macklin <mmacklin@nvidia.com>
Signed-off-by: adenzler-nvidia <adenzler@nvidia.com>
Signed-off-by: jvonmuralt <jvonmuralt@nvidia.com>
Co-authored-by: Daniela Hase <116915287+daniela-hase@users.noreply.github.com>
Co-authored-by: adenzler-nvidia <adenzler@nvidia.com>
Co-authored-by: Viktor Reutskyy <33062116+vreutskyy@users.noreply.github.com>
Co-authored-by: Eric Shi <97630937+shi-eric@users.noreply.github.com>
Co-authored-by: Anka Chen <AnkaChan@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: JC-nvidia <116605903+jumyungc@users.noreply.github.com>
Co-authored-by: Kenny Vilella <kvilella@nvidia.com>
Co-authored-by: nvtw <110816143+nvtw@users.noreply.github.com>
Co-authored-by: Milad-Rakhsha-NV <167464435+Milad-Rakhsha-NV@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Lennart Röstel <65088822+lenroe@users.noreply.github.com>
Co-authored-by: Eric Heiden <eheiden@nvidia.com>
Co-authored-by: jvonmuralt <jvonmuralt@nvidia.com>
Co-authored-by: camevor <camevor@nvidia.com>
Co-authored-by: mzamoramora-nvidia <mzamoramora@nvidia.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Alessandro Roncone <alecive87@gmail.com>
Co-authored-by: gdaviet <57617656+gdaviet@users.noreply.github.com>
Co-authored-by: Miles Macklin <mmacklin@nvidia.com>
Co-authored-by: Gordon Yeoman <gyeomannvidia@users.noreply.github.com>
Co-authored-by: Lukasz Wawrzyniak <lwawrzyniak@nvidia.com>
Co-authored-by: Eric Heiden <eric-heiden@outlook.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Viktor Reutskyy <vreutskyy@nvidia.com>
Co-authored-by: Lorenzo Terenzi <lorenzoterenzi96@gmail.com>
Co-authored-by: smollerNV <164020096+smollerNV@users.noreply.github.com>
Co-authored-by: twidmer <twidmer@nvidia.com>
Co-authored-by: Christian Schumacher <christian.schumacher@disney.com>
Co-authored-by: Guirec-Maloisel <25688871+Guirec-Maloisel@users.noreply.github.com>
vastsoun added a commit to vastsoun/newton that referenced this pull request Mar 4, 2026
* [Warp Raytrace] Added device parameter (newton-physics#1544)

* [Warp Raytrace] Added device parameter to previously overlooked call (newton-physics#1545)

* SolverMuJoCo: Fix tolerance clamping in update_solver_options_kernel (newton-physics#1546)

* Change default shape_ke to align with MuJoCo, parse geom solref from MJCF for contact stiffness/damping (newton-physics#1491)

Signed-off-by: Alain Denzler <adenzler@nvidia.com>

* Fix log_shapes broadcasting for length-1 warp arrays (newton-physics#1550)

* Fix XPBD restitution particle index (newton-physics#1557)

* Out-of-Bound memory read in example_diffsim_bear newton-physics#1386 (newton-physics#1533)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Add versioned documentation deployment to GitHub Pages (newton-physics#1560)

* Fix broken documentation links after versioned docs deployment (newton-physics#1566)

* VBD New Features (newton-physics#1479)

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>

* Add banners to membership verification workflow steps (newton-physics#1569)

* Support cable junctions (newton-physics#1519)

Signed-off-by: JC <jumyungc@nvidia.com>

* Rename parameter I to inertia newton-physics#1543 (newton-physics#1551)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Fix example_robot_anymal_c_walk.py (newton-physics#1574)

* Change everywhere linesearch to iterative (newton-physics#1573)

* Remove standard collision pipeline (newton-physics#1538)

* USD Plumbing MJC solver attributes through resolver and custom attribute framework (newton-physics#1463)

Signed-off-by: Milad Rakhsha <mrakhsha@nvidia.com>
Signed-off-by: Milad-Rakhsha-NV <167464435+Milad-Rakhsha-NV@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: adenzler-nvidia <adenzler@nvidia.com>

* Fix child shape filtering (newton-physics#1559)

* Fix ViewerRerun ignoring hidden parameter in log_mesh and log_instances (newton-physics#1555)

* Make NxN and SAP broad phase respect filtered pairs (newton-physics#1554)

* Add --quiet flag to examples to suppress Warp messages (newton-physics#1585)

* Defer resolution of MESH_MAXHULLVERT default in importers (newton-physics#1587)

* Fix TypeError when finalizing SDF geometry with device kwarg (newton-physics#1586)

* Make MESH_MAXHULLVERT a static class attribute Mesh.MAX_HULL_VERTICES. (newton-physics#1598)

* Significant non-determinism in unified collision pipeline for anymal_c_walking example newton-physics#1505 (newton-physics#1588)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Add test for non-contiguous case (newton-physics#1549)

* Fix nightly Warp CI to resolve pre-release builds (newton-physics#1606)

* Verify default class and value handling (newton-physics#1556)

* SolverMuJoCo: Expand geom_margin to avoid OOB read with heterogeneous worlds (newton-physics#1607)

* Fix bug in control clear method (newton-physics#1602)

* Enable Use of Newton IK in Lab newton-physics#662 (newton-physics#1539)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Fix import  of non-articulated joints (newton-physics#1535)

* Deduplicate _process_joint_custom_attributes frequency handling (newton-physics#1584)

* Add CI check for stale API docs and fix local build warnings (newton-physics#1570)

* Update Pillow 12.0.0 to 12.1.1 (newton-physics#1612)

* Prepare handling of mimic constraints in Newton (newton-physics#1523)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Support floating,  base_joint and parent_body arguments for importers (newton-physics#1498)

* Fix contact buffer memory overestimation (newton-physics#1614)

* Configure banned-module-level-imports for ruff (newton-physics#1583)

* Explicit `Contacts` instantiation with `Model.contacts()` and `CollisionPipeline.contacts()` (newton-physics#1445)

* Fix the quadruped benchmark regression (newton-physics#1615)

* Change default ignore_inertial_definitions from True to False (newton-physics#1537)

* Finalize the Recording API (newton-physics#1600)

* SolverMuJoCo: Fix ccd_iterations default (newton-physics#1631)

* update gitignore to ignore Claude Code sandbox files (newton-physics#1628)

* Add mimic joint support to SolverMuJoCo (newton-physics#1627)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Add --no-cache-clear flag to test runner (newton-physics#1629)

* Update MuJoCo and MuJoCo Warp to 3.5.0 release (newton-physics#1633)

* Improve inertia parsing from USD (newton-physics#1605)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Remove standalone .typos.toml in favor of pyproject.toml config (newton-physics#1642)

* Heightfield support newton-physics#1189 (newton-physics#1547)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Example_robot_policy: Replace ValueError with clean error for missing PhysX policy (newton-physics#1636)

Co-authored-by: Viktor Reutskyy <33062116+vreutskyy@users.noreply.github.com>

* Avoid unnecessary inflation of the contact reduction voxel aabb (newton-physics#1650)

* Rename num_worlds to world_count (newton-physics#1634)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Support parsing autolimits from MJCF (newton-physics#1651)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Fix particle-shape restitution ignoring body velocity (newton-physics#1273) (newton-physics#1580)

* Add overflow warnings for narrow-phase collision buffers (newton-physics#1643)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Documentation: add units to model/state docstrings (newton-physics#1649)

* fix(viewer): add missing JointType.BALL support to contact line kernel (newton-physics#1640)

* Make terrain mesh visual-only in anymal C walking example (newton-physics#1660)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Fix initialization of collider state in MPM finite difference mode (newton-physics#1652)

* docs: document ModelBuilder.default_shape_cfg (newton-physics#1662)

* Finalize the collision API (newton-physics#1581)

* Remove hardcoded subnet ID from AWS workflow (newton-physics#1664)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Attempt to fix AWS config (newton-physics#1666)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Update AWS workflows to g7e.2xlarge with multi-AZ failover (newton-physics#1669)

* fix(viewer-usd): disambiguate log_points colors for N=3 warp arrays (newton-physics#1661)

* Viewer gl optimizations (newton-physics#1656)

Signed-off-by: Miles Macklin <mmacklin@nvidia.com>
Signed-off-by: Eric Heiden <eheiden@nvidia.com>
Co-authored-by: Eric Heiden <eheiden@nvidia.com>

* docs: add articulation workflow guidance and regression check (newton-physics#1663)

* fix(examples): propagate IK solution to model state in Franka example (newton-physics#1637)

* fix(deps,docs): bump nbconvert to 7.17.0 and fix ArticulationView doctest (newton-physics#1670)

* Cleanup and improve some example (newton-physics#1625)

Signed-off-by: adenzler-nvidia <adenzler@nvidia.com>
Co-authored-by: adenzler-nvidia <adenzler@nvidia.com>

* Handle zero-mass bodies and flip ensure_nonstatic_links default (newton-physics#1635)

* Additional testing for ArticulationView (newton-physics#1527)

Co-authored-by: Eric Heiden <eheiden@nvidia.com>

* Update warp-lang nightly to 1.12.0.dev20260217 (newton-physics#1677)

* Change default friction coefficients to match MuJoCo (newton-physics#1681)

* Refactor mesh creation functions (newton-physics#1654)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Parse joint frictionloss from MJCF (newton-physics#1680)

* Fix free joint body_pos and add ref/qpos0 support for MuJoCo solver (newton-physics#1645)

* Fix root shapes in ArticulationView with fixed base (newton-physics#1639)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Co-authored-by: Eric Heiden <eric-heiden@outlook.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Use model collision methods and remove `create_collision_pipeline` from examples (newton-physics#1648)

Co-authored-by: nvtw <110816143+nvtw@users.noreply.github.com>

* Fix XPBD apply_joint_forces ignoring child joint transform (newton-physics#1582)

* Adjust SDF API (newton-physics#1644)

Co-authored-by: Eric Heiden <eheiden@nvidia.com>

* Optimize test suite runtime (~18% faster) (newton-physics#1689)

* Remove ensure_nonstatic_links option from importers (newton-physics#1682)

Signed-off-by: adenzler-nvidia <adenzler@nvidia.com>

* SolverMuJoCo: Add geom_margin support, align thickness default with MuJoCo and schemas (newton-physics#1653)

* refactor: privatize non-public solver internals (newton-physics#1683)

* Fix option parsing with multiple <option> elements from includes (newton-physics#1692)

* Bump warp-lang nightly and newton-usd-schemas (newton-physics#1693)

* Get rid of tkinter dependency (newton-physics#1676)

* Fix SDF example contact buffer overflow (newton-physics#1695)

* Fix implicit biastype for position/velocity actuator shortcuts (newton-physics#1678)

* Fix include processor to respect meshdir/texturedir (newton-physics#1685)

* Reduce cold-cache Warp compile time for geometry modules (newton-physics#1618)

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: adenzler-nvidia <adenzler@nvidia.com>

* Fix xyzw-to-wxyz quaternion conversion in body inertia kernel (newton-physics#1694)

* Rename key to label and add hierarchical labels (newton-physics#1592) (newton-physics#1632)

* Expose geometry SDF helpers on public API (newton-physics#1684)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Improve custom frequency handling from USD, parse MuJoCo actuators and tendons (newton-physics#1510)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Signed-off-by: Eric Heiden <eheiden@nvidia.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Collapse fixed joints with non articulated bodies (newton-physics#1608)

* Fix renaming joint_key -> joint_label (newton-physics#1700)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Bump .python-version from 3.11 to 3.12 (newton-physics#1702)

* Replace CITATION.md with CITATION.cff (newton-physics#1706)

* Respect MJCF contype=conaffinity=0 via collision_group=0 (newton-physics#1703)

* Make ViewerUSD reuse existing USD layers for the same output path (newton-physics#1704)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Remove dead up-axis conversion from MuJoCo solver (newton-physics#1707)

* Skip IK cube stacking example test (newton-physics#1713)

* Fix global pairs (world=-1) not exported to MuJoCo spec (newton-physics#1705)

* Reduce the memory consumption of hydroelastic contacts (newton-physics#1609)

* Fix flakiness cube stacking (newton-physics#1714)

* Fix collision shapes not toggleable in viewer UI (newton-physics#1715)

* Fix softbody examples table layout in README (newton-physics#1716)

* Standardize sensor APIs: label matching, keyword args, and update() method naming (newton-physics#1665)

* Fix intermittent crash in parallel test runner from Manager proxy race (newton-physics#1721)

* Clean up inertia.py function arguments to match Mesh.create_* API (newton-physics#1719)

* Reduce default test runner verbosity (newton-physics#1723)

* Add menagerie comparison tests for SolverMuJoCo (newton-physics#1720)

Signed-off-by: Alain Denzler <adenzler@nvidia.com>
Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>
Co-authored-by: Viktor Reutskyy <vreutskyy@nvidia.com>
Co-authored-by: Viktor Reutskyy <33062116+vreutskyy@users.noreply.github.com>

* Add spatial tendon support for MuJoCo solver (newton-physics#1687)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Expose qfrc_actuator from mujoco (newton-physics#1698)

* Skip non-MODEL custom attributes in finalize validation (newton-physics#1734)

* Resolve inheritrange for position actuators in MJCF parser (newton-physics#1727)

* Support dampratio for position/velocity actuator shortcuts (newton-physics#1722)

* Limit concurrency to 1 (newton-physics#1736)

* Add a helper method for checking applied usd (newton-physics#1731)

* Enhance playback URL handling in ViewerViser (newton-physics#1742)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Removed RenderShapeType (newton-physics#1748)

* Override only MassAPI attributes that have been authored (newton-physics#1688)

* Integration of newton-actuators  (newton-physics#1342)

Signed-off-by: jvonmuralt <jvonmuralt@nvidia.com>

* Fix ArticulationView crash with fixed-joint-only articulations (newton-physics#1726)

* Improve retrieval of Jupyter base URL in ViewerViser (newton-physics#1750)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Disable dynamics testing for UR5e and Apollo tests to avoid CI flakiness (newton-physics#1755)

* Margin and Gap rename (newton-physics#1732)

* Vbd Demos Fixing (newton-physics#1740)

* Fix ViewerViser.log_lines method (newton-physics#1764)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Update warp-lang dependency to 1.12.0rc1 (newton-physics#1763)

* Fix fromto capsule/cylinder orientation in MJCF parser (newton-physics#1741)

* fix: multi-world particle BVH indexing (newton-physics#1641)

Co-authored-by: Eric Heiden <eheiden@nvidia.com>

* Clean up unused and internal-only kwargs in SolverMuJoCo (newton-physics#1766)

* Parsing of the mimic joint and contact gap/margin from newton schemas (newton-physics#1690)

Signed-off-by: Milad Rakhsha <mrakhsha@nvidia.com>

* API Refactor v2 (newton-physics#1749)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Support explicit geom mass attributes in MJCF (newton-physics#1744)

* Bump flask and werkzeug in lockfile for security (newton-physics#1769)

Co-authored-by: Cursor <cursoragent@cursor.com>

* Split MJCF worldbody root bodies into separate articulations (newton-physics#1754)

* Expose VBD rigid contact forces for solver coupling (newton-physics#1745)

Signed-off-by: JC <jumyungc@nvidia.com>

* Add MJCF ellipsoid geom import and regression test (newton-physics#1772)

Co-authored-by: Cursor <cursoragent@cursor.com>

* Weld equality constraints parsed from mjcf are given Nan as the default value of torquescale. The correct default should be 1.0 (newton-physics#1760)

* Improve picking accuracy and stability (newton-physics#1712)

* Franka cloth demo improvement (newton-physics#1765)

* Support computing sensing object transforms & API cleanup (newton-physics#1759)

* Remove threading workaround (newton-physics#1751)

* [Warp Raytrace] Consolidated ray intersect functions, renamed Options to Config (newton-physics#1767)

* Improve README example gallery for PyPI compatibility (newton-physics#1776)

* Fix issue with mesh in rerun viewer (newton-physics#1768)

* Add PhysxMimicJointAPI parsing to USD importer (newton-physics#1735)

* Move some math functions to Warp (newton-physics#1717)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Add test to ensure MJCF xform argument is relative (newton-physics#1777)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Emit diaginertia instead of fullinertia for diagonal body inertia (newton-physics#1780)

* Change default joint armature from 0.01 to 0 (newton-physics#1782)

* Fix default kp/kv for position and velocity actuators (newton-physics#1786)

* Lock body inertia after explicit MJCF <inertial> element (newton-physics#1784)

* Fix for MJCF actuator custom attributes (newton-physics#1783)

* Bump version to 0.2.3

Prepare the package metadata for the v0.2.3 release tag.

* Fix ViewerRerun rendering of instances from hidden meshes (newton-physics#1788)

* API cleanup (newton-physics#1789)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* BODY actuator target name bypasses body name de-duplication in SolverMuJoCo (newton-physics#1729)

* Use default density for visual geoms in MJCF import (newton-physics#1781)

* Fix GL viewer crash on Wayland (newton-physics#1793)

* Make USD xform parameter control absolute articulation placement (newton-physics#1771)

* Fix CUDA context corruption in SDF implementation (newton-physics#1792)

* Bump mujoco-warp dependency to 3.5.0.2 (newton-physics#1779)

* Fix MuJoCo margin/gap conversion (newton-physics#1785)

* Bump version to 1.1.0.dev0 (newton-physics#1798)

* Missing unittest.main added back to test_import_mjcf.py.  Helps with F5 debugging in VS Code. (newton-physics#1796)

* Improve H1 example (newton-physics#1801)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Fix ViewerViser.set_camera() (newton-physics#1805)

* Rename examples to follow prefix-first naming convention (newton-physics#1802)

* Improve MuJoCo actuator domain randomization (newton-physics#1773)

* Restore in_cup test in hydro example (newton-physics#1775)

* Fix `newton.geometry` imports and change of Mesh maxhullverts global constant

* Adapt to having both margin and gap arrays for each geom/shape

* Fix for newton.geometry API changes in primitive/narrowphase.py

* Fix removal of `BroadPhaseMode` IntEnum and revert to newton-sytle string literals

* WIP: Adapt geometry/unified.py to fix breaking changes to `newton.geometry` API

* First pass of API adjustments

* Patch more gaps (with respect to margin and gap renaming)

* GeoType.SDF was removed - reflect that in Kamino

* Introduce CoM position offsets w.r.t body frame and operations to convert between body CoM state and generic local body-fixed reference frames.

* Add caching of per-entity labels/names/keys in the Model subcontainers

* Remove SDF shape wrapper since it's now internal to mesh handling in CD pipelines

* Fix USD test assets

* Add Newton <--> Kamino joint type conversion operations and per-space default limit constants

* Add some cleanup to geometry and unified CD + UTs

* Add Newton <--> Kamino shape type conversion operations

* Apply new default joint coord limit constants to limits.py

* Adapt foubrar model builder and USD asset to produce the same result in sim example

* Purge "physical" goems and collapse all into a single group, and purge geometry "layers"

* Disable allocation per-joint wrenches by default and make them optional

* Make `Model` a dataclass

* Separate ModelData* containers into own `core/data.py` module

* Fix imports of ModelData

* Rename `Model` as `ModelKamino`

* Rename `ModelData` as `DataKamino`

* Rename `State` as `StateKamino`

* Rename `Control` as `ControlKamino`

* Rename `Limits` as `LimitsKamino`

* Rename `Contacts` as `ContactsKamino`

* Rename `ModelBuilder` as `ModelBuilderKamino`

* Make imports in test utilities relative

* Revise CD meta-data attributes and their computation in GeometryModel and ModelBuilderKamino

* Revise primitive CD pipeline

* Revise unified CD pipeline

* Revise CD front-end interfaces

* Fix UTs and relevant utils for interface changes to CD

* Change to `wp.DeviceLike` to account for upcoming deprecation of `Devicelike`

* Depracate legacy HDF5 data io (will be replaced in the future)

* Fix banned imports at module level

* Modify USD importer to detect articulations and order geoms and joints similarly to how the Newton `parse_usd` function does.

* Add conversion operation from `newton.Model` to `ModelKamino`

* Add data, state and control container conversions

* Add SolverKamino wrapper that fullfils newton integration interface

* Add newton integration examples

* Add SolverKamino to newton solver module imports

* WIP: fix problem with lambda_j being allocated for only kinematic constraints and failing on array copying

* Fix banned git import in benchmark

* Rename *Settings to *Config (#213)

* Rename SolverKaminoSettings -> SolverKaminoConfig

* Rename DualProblemSettings -> DualProblemConfig

* Rename CollisionDetectorSettings -> CollisionDetectorConfig

* Rename PADMMSettings -> PADMMConfig

* Rename ForwardKinematicsSolverSettings -> ForwardKinematicsSolverConfig

* Rename SimulatorSettings -> SimulatorConfig

* Add check for model compatibility in SolverKamino (#209)

* Fix device assignment in sparse CG test on CPU (#216)

* Replace Enum-type config attributes with Literal (#215)

* Replace warmstart mode config param with literal

* Replace contact warmstart mode config param with literal

* Replace rotation correction config param with literal

* Replace penalty update config param with literal

* Replace FK preconditioner option config param with literal

* Add post-init checks for dual/PADMM configs

* Rename FKPreconditionerOptions to FKPreconditionerType

* Remove WorldDescriptor from ModelKamino (#219)

* Add geom index offset array to model info

* Replace access to world description in model

* Remove world descriptor from model

* Fix computation of kinematics residual with sparse Jacobian (#220)

* Migrates `ModelKaminoSize` to it's own module to avoid circular dependency between core/model.py and core/state.py and rename it as `SizeKamino`.

* WIP: Fix SolverKamino wrapper

* Fix circular dependency in conversions.py

* Fix some broken unit tests and WIP to fix fourbar contact conversions and rendering

* Make some conversions @staticmethods instead, because they dont need common class attributes

* Fix declaration of custom state attributes and their conversion to/from newton and kamino

* WIP: Debug model conversion and newton sim examples

* Rename and cleanup start index array of per-world geoms

* Model conversion and newton sim examples now work.

* Make gravity conversion operation re-usable

* Migrates boxes_fourbar builder using newton.ModelBuilder to it's own module to prepare for migration.

* Use gravity conversion utility func in SolverKamino

* Add reusable joint-parameterization conversion utility

* Remove world-descriptor from model converter

* Rename helper converter that handles entity-local transforms

* Add some cleanup to DR Legs, ANYmal D and basic four-bar examples

* Fix module-level imports of additional kamino-specific development dependencies

* Fix module-level imports of additional kamino-specific development dependencies

* Fix erroneous merge conflict.

---------

Signed-off-by: Alain Denzler <adenzler@nvidia.com>
Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>
Signed-off-by: JC <jumyungc@nvidia.com>
Signed-off-by: Milad Rakhsha <mrakhsha@nvidia.com>
Signed-off-by: Milad-Rakhsha-NV <167464435+Milad-Rakhsha-NV@users.noreply.github.com>
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Signed-off-by: Eric Heiden <eheiden@nvidia.com>
Signed-off-by: Miles Macklin <mmacklin@nvidia.com>
Signed-off-by: adenzler-nvidia <adenzler@nvidia.com>
Signed-off-by: jvonmuralt <jvonmuralt@nvidia.com>
Co-authored-by: Daniela Hase <116915287+daniela-hase@users.noreply.github.com>
Co-authored-by: adenzler-nvidia <adenzler@nvidia.com>
Co-authored-by: Viktor Reutskyy <33062116+vreutskyy@users.noreply.github.com>
Co-authored-by: Eric Shi <97630937+shi-eric@users.noreply.github.com>
Co-authored-by: Anka Chen <AnkaChan@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: JC-nvidia <116605903+jumyungc@users.noreply.github.com>
Co-authored-by: Kenny Vilella <kvilella@nvidia.com>
Co-authored-by: nvtw <110816143+nvtw@users.noreply.github.com>
Co-authored-by: Milad-Rakhsha-NV <167464435+Milad-Rakhsha-NV@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Lennart Röstel <65088822+lenroe@users.noreply.github.com>
Co-authored-by: Eric Heiden <eheiden@nvidia.com>
Co-authored-by: jvonmuralt <jvonmuralt@nvidia.com>
Co-authored-by: camevor <camevor@nvidia.com>
Co-authored-by: mzamoramora-nvidia <mzamoramora@nvidia.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Alessandro Roncone <alecive87@gmail.com>
Co-authored-by: gdaviet <57617656+gdaviet@users.noreply.github.com>
Co-authored-by: Miles Macklin <mmacklin@nvidia.com>
Co-authored-by: Gordon Yeoman <gyeomannvidia@users.noreply.github.com>
Co-authored-by: Lukasz Wawrzyniak <lwawrzyniak@nvidia.com>
Co-authored-by: Eric Heiden <eric-heiden@outlook.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Viktor Reutskyy <vreutskyy@nvidia.com>
Co-authored-by: Lorenzo Terenzi <lorenzoterenzi96@gmail.com>
Co-authored-by: smollerNV <164020096+smollerNV@users.noreply.github.com>
Co-authored-by: twidmer <twidmer@nvidia.com>
Co-authored-by: Christian Schumacher <christian.schumacher@disney.com>
Co-authored-by: Guirec-Maloisel <25688871+Guirec-Maloisel@users.noreply.github.com>
vastsoun added a commit to vastsoun/newton that referenced this pull request Mar 4, 2026
* [Warp Raytrace] Added device parameter (newton-physics#1544)

* [Warp Raytrace] Added device parameter to previously overlooked call (newton-physics#1545)

* SolverMuJoCo: Fix tolerance clamping in update_solver_options_kernel (newton-physics#1546)

* Change default shape_ke to align with MuJoCo, parse geom solref from MJCF for contact stiffness/damping (newton-physics#1491)

Signed-off-by: Alain Denzler <adenzler@nvidia.com>

* Fix log_shapes broadcasting for length-1 warp arrays (newton-physics#1550)

* Fix XPBD restitution particle index (newton-physics#1557)

* Out-of-Bound memory read in example_diffsim_bear newton-physics#1386 (newton-physics#1533)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Add versioned documentation deployment to GitHub Pages (newton-physics#1560)

* Fix broken documentation links after versioned docs deployment (newton-physics#1566)

* VBD New Features (newton-physics#1479)

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>

* Add banners to membership verification workflow steps (newton-physics#1569)

* Support cable junctions (newton-physics#1519)

Signed-off-by: JC <jumyungc@nvidia.com>

* Rename parameter I to inertia newton-physics#1543 (newton-physics#1551)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Fix example_robot_anymal_c_walk.py (newton-physics#1574)

* Change everywhere linesearch to iterative (newton-physics#1573)

* Remove standard collision pipeline (newton-physics#1538)

* USD Plumbing MJC solver attributes through resolver and custom attribute framework (newton-physics#1463)

Signed-off-by: Milad Rakhsha <mrakhsha@nvidia.com>
Signed-off-by: Milad-Rakhsha-NV <167464435+Milad-Rakhsha-NV@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: adenzler-nvidia <adenzler@nvidia.com>

* Fix child shape filtering (newton-physics#1559)

* Fix ViewerRerun ignoring hidden parameter in log_mesh and log_instances (newton-physics#1555)

* Make NxN and SAP broad phase respect filtered pairs (newton-physics#1554)

* Add --quiet flag to examples to suppress Warp messages (newton-physics#1585)

* Defer resolution of MESH_MAXHULLVERT default in importers (newton-physics#1587)

* Fix TypeError when finalizing SDF geometry with device kwarg (newton-physics#1586)

* Make MESH_MAXHULLVERT a static class attribute Mesh.MAX_HULL_VERTICES. (newton-physics#1598)

* Significant non-determinism in unified collision pipeline for anymal_c_walking example newton-physics#1505 (newton-physics#1588)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Add test for non-contiguous case (newton-physics#1549)

* Fix nightly Warp CI to resolve pre-release builds (newton-physics#1606)

* Verify default class and value handling (newton-physics#1556)

* SolverMuJoCo: Expand geom_margin to avoid OOB read with heterogeneous worlds (newton-physics#1607)

* Fix bug in control clear method (newton-physics#1602)

* Enable Use of Newton IK in Lab newton-physics#662 (newton-physics#1539)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Fix import  of non-articulated joints (newton-physics#1535)

* Deduplicate _process_joint_custom_attributes frequency handling (newton-physics#1584)

* Add CI check for stale API docs and fix local build warnings (newton-physics#1570)

* Update Pillow 12.0.0 to 12.1.1 (newton-physics#1612)

* Prepare handling of mimic constraints in Newton (newton-physics#1523)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Support floating,  base_joint and parent_body arguments for importers (newton-physics#1498)

* Fix contact buffer memory overestimation (newton-physics#1614)

* Configure banned-module-level-imports for ruff (newton-physics#1583)

* Explicit `Contacts` instantiation with `Model.contacts()` and `CollisionPipeline.contacts()` (newton-physics#1445)

* Fix the quadruped benchmark regression (newton-physics#1615)

* Change default ignore_inertial_definitions from True to False (newton-physics#1537)

* Finalize the Recording API (newton-physics#1600)

* SolverMuJoCo: Fix ccd_iterations default (newton-physics#1631)

* update gitignore to ignore Claude Code sandbox files (newton-physics#1628)

* Add mimic joint support to SolverMuJoCo (newton-physics#1627)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Add --no-cache-clear flag to test runner (newton-physics#1629)

* Update MuJoCo and MuJoCo Warp to 3.5.0 release (newton-physics#1633)

* Improve inertia parsing from USD (newton-physics#1605)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Remove standalone .typos.toml in favor of pyproject.toml config (newton-physics#1642)

* Heightfield support newton-physics#1189 (newton-physics#1547)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Example_robot_policy: Replace ValueError with clean error for missing PhysX policy (newton-physics#1636)

Co-authored-by: Viktor Reutskyy <33062116+vreutskyy@users.noreply.github.com>

* Avoid unnecessary inflation of the contact reduction voxel aabb (newton-physics#1650)

* Rename num_worlds to world_count (newton-physics#1634)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Support parsing autolimits from MJCF (newton-physics#1651)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Fix particle-shape restitution ignoring body velocity (newton-physics#1273) (newton-physics#1580)

* Add overflow warnings for narrow-phase collision buffers (newton-physics#1643)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Documentation: add units to model/state docstrings (newton-physics#1649)

* fix(viewer): add missing JointType.BALL support to contact line kernel (newton-physics#1640)

* Make terrain mesh visual-only in anymal C walking example (newton-physics#1660)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Fix initialization of collider state in MPM finite difference mode (newton-physics#1652)

* docs: document ModelBuilder.default_shape_cfg (newton-physics#1662)

* Finalize the collision API (newton-physics#1581)

* Remove hardcoded subnet ID from AWS workflow (newton-physics#1664)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Attempt to fix AWS config (newton-physics#1666)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Update AWS workflows to g7e.2xlarge with multi-AZ failover (newton-physics#1669)

* fix(viewer-usd): disambiguate log_points colors for N=3 warp arrays (newton-physics#1661)

* Viewer gl optimizations (newton-physics#1656)

Signed-off-by: Miles Macklin <mmacklin@nvidia.com>
Signed-off-by: Eric Heiden <eheiden@nvidia.com>
Co-authored-by: Eric Heiden <eheiden@nvidia.com>

* docs: add articulation workflow guidance and regression check (newton-physics#1663)

* fix(examples): propagate IK solution to model state in Franka example (newton-physics#1637)

* fix(deps,docs): bump nbconvert to 7.17.0 and fix ArticulationView doctest (newton-physics#1670)

* Cleanup and improve some example (newton-physics#1625)

Signed-off-by: adenzler-nvidia <adenzler@nvidia.com>
Co-authored-by: adenzler-nvidia <adenzler@nvidia.com>

* Handle zero-mass bodies and flip ensure_nonstatic_links default (newton-physics#1635)

* Additional testing for ArticulationView (newton-physics#1527)

Co-authored-by: Eric Heiden <eheiden@nvidia.com>

* Update warp-lang nightly to 1.12.0.dev20260217 (newton-physics#1677)

* Change default friction coefficients to match MuJoCo (newton-physics#1681)

* Refactor mesh creation functions (newton-physics#1654)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Parse joint frictionloss from MJCF (newton-physics#1680)

* Fix free joint body_pos and add ref/qpos0 support for MuJoCo solver (newton-physics#1645)

* Fix root shapes in ArticulationView with fixed base (newton-physics#1639)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Co-authored-by: Eric Heiden <eric-heiden@outlook.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Use model collision methods and remove `create_collision_pipeline` from examples (newton-physics#1648)

Co-authored-by: nvtw <110816143+nvtw@users.noreply.github.com>

* Fix XPBD apply_joint_forces ignoring child joint transform (newton-physics#1582)

* Adjust SDF API (newton-physics#1644)

Co-authored-by: Eric Heiden <eheiden@nvidia.com>

* Optimize test suite runtime (~18% faster) (newton-physics#1689)

* Remove ensure_nonstatic_links option from importers (newton-physics#1682)

Signed-off-by: adenzler-nvidia <adenzler@nvidia.com>

* SolverMuJoCo: Add geom_margin support, align thickness default with MuJoCo and schemas (newton-physics#1653)

* refactor: privatize non-public solver internals (newton-physics#1683)

* Fix option parsing with multiple <option> elements from includes (newton-physics#1692)

* Bump warp-lang nightly and newton-usd-schemas (newton-physics#1693)

* Get rid of tkinter dependency (newton-physics#1676)

* Fix SDF example contact buffer overflow (newton-physics#1695)

* Fix implicit biastype for position/velocity actuator shortcuts (newton-physics#1678)

* Fix include processor to respect meshdir/texturedir (newton-physics#1685)

* Reduce cold-cache Warp compile time for geometry modules (newton-physics#1618)

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: adenzler-nvidia <adenzler@nvidia.com>

* Fix xyzw-to-wxyz quaternion conversion in body inertia kernel (newton-physics#1694)

* Rename key to label and add hierarchical labels (newton-physics#1592) (newton-physics#1632)

* Expose geometry SDF helpers on public API (newton-physics#1684)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Improve custom frequency handling from USD, parse MuJoCo actuators and tendons (newton-physics#1510)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Signed-off-by: Eric Heiden <eheiden@nvidia.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Collapse fixed joints with non articulated bodies (newton-physics#1608)

* Fix renaming joint_key -> joint_label (newton-physics#1700)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>

* Bump .python-version from 3.11 to 3.12 (newton-physics#1702)

* Replace CITATION.md with CITATION.cff (newton-physics#1706)

* Respect MJCF contype=conaffinity=0 via collision_group=0 (newton-physics#1703)

* Make ViewerUSD reuse existing USD layers for the same output path (newton-physics#1704)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Remove dead up-axis conversion from MuJoCo solver (newton-physics#1707)

* Skip IK cube stacking example test (newton-physics#1713)

* Fix global pairs (world=-1) not exported to MuJoCo spec (newton-physics#1705)

* Reduce the memory consumption of hydroelastic contacts (newton-physics#1609)

* Fix flakiness cube stacking (newton-physics#1714)

* Fix collision shapes not toggleable in viewer UI (newton-physics#1715)

* Fix softbody examples table layout in README (newton-physics#1716)

* Standardize sensor APIs: label matching, keyword args, and update() method naming (newton-physics#1665)

* Fix intermittent crash in parallel test runner from Manager proxy race (newton-physics#1721)

* Clean up inertia.py function arguments to match Mesh.create_* API (newton-physics#1719)

* Reduce default test runner verbosity (newton-physics#1723)

* Add menagerie comparison tests for SolverMuJoCo (newton-physics#1720)

Signed-off-by: Alain Denzler <adenzler@nvidia.com>
Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>
Co-authored-by: Viktor Reutskyy <vreutskyy@nvidia.com>
Co-authored-by: Viktor Reutskyy <33062116+vreutskyy@users.noreply.github.com>

* Add spatial tendon support for MuJoCo solver (newton-physics#1687)

Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>

* Expose qfrc_actuator from mujoco (newton-physics#1698)

* Skip non-MODEL custom attributes in finalize validation (newton-physics#1734)

* Resolve inheritrange for position actuators in MJCF parser (newton-physics#1727)

* Support dampratio for position/velocity actuator shortcuts (newton-physics#1722)

* Limit concurrency to 1 (newton-physics#1736)

* Add a helper method for checking applied usd (newton-physics#1731)

* Enhance playback URL handling in ViewerViser (newton-physics#1742)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Removed RenderShapeType (newton-physics#1748)

* Override only MassAPI attributes that have been authored (newton-physics#1688)

* Integration of newton-actuators  (newton-physics#1342)

Signed-off-by: jvonmuralt <jvonmuralt@nvidia.com>

* Fix ArticulationView crash with fixed-joint-only articulations (newton-physics#1726)

* Improve retrieval of Jupyter base URL in ViewerViser (newton-physics#1750)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Disable dynamics testing for UR5e and Apollo tests to avoid CI flakiness (newton-physics#1755)

* Margin and Gap rename (newton-physics#1732)

* Vbd Demos Fixing (newton-physics#1740)

* Fix ViewerViser.log_lines method (newton-physics#1764)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Update warp-lang dependency to 1.12.0rc1 (newton-physics#1763)

* Fix fromto capsule/cylinder orientation in MJCF parser (newton-physics#1741)

* fix: multi-world particle BVH indexing (newton-physics#1641)

Co-authored-by: Eric Heiden <eheiden@nvidia.com>

* Clean up unused and internal-only kwargs in SolverMuJoCo (newton-physics#1766)

* Parsing of the mimic joint and contact gap/margin from newton schemas (newton-physics#1690)

Signed-off-by: Milad Rakhsha <mrakhsha@nvidia.com>

* API Refactor v2 (newton-physics#1749)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Support explicit geom mass attributes in MJCF (newton-physics#1744)

* Bump flask and werkzeug in lockfile for security (newton-physics#1769)

Co-authored-by: Cursor <cursoragent@cursor.com>

* Split MJCF worldbody root bodies into separate articulations (newton-physics#1754)

* Expose VBD rigid contact forces for solver coupling (newton-physics#1745)

Signed-off-by: JC <jumyungc@nvidia.com>

* Add MJCF ellipsoid geom import and regression test (newton-physics#1772)

Co-authored-by: Cursor <cursoragent@cursor.com>

* Weld equality constraints parsed from mjcf are given Nan as the default value of torquescale. The correct default should be 1.0 (newton-physics#1760)

* Improve picking accuracy and stability (newton-physics#1712)

* Franka cloth demo improvement (newton-physics#1765)

* Support computing sensing object transforms & API cleanup (newton-physics#1759)

* Remove threading workaround (newton-physics#1751)

* [Warp Raytrace] Consolidated ray intersect functions, renamed Options to Config (newton-physics#1767)

* Improve README example gallery for PyPI compatibility (newton-physics#1776)

* Fix issue with mesh in rerun viewer (newton-physics#1768)

* Add PhysxMimicJointAPI parsing to USD importer (newton-physics#1735)

* Move some math functions to Warp (newton-physics#1717)

Signed-off-by: Eric Heiden <eheiden@nvidia.com>
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Add test to ensure MJCF xform argument is relative (newton-physics#1777)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Emit diaginertia instead of fullinertia for diagonal body inertia (newton-physics#1780)

* Change default joint armature from 0.01 to 0 (newton-physics#1782)

* Fix default kp/kv for position and velocity actuators (newton-physics#1786)

* Lock body inertia after explicit MJCF <inertial> element (newton-physics#1784)

* Fix for MJCF actuator custom attributes (newton-physics#1783)

* Bump version to 0.2.3

Prepare the package metadata for the v0.2.3 release tag.

* Fix ViewerRerun rendering of instances from hidden meshes (newton-physics#1788)

* API cleanup (newton-physics#1789)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* BODY actuator target name bypasses body name de-duplication in SolverMuJoCo (newton-physics#1729)

* Use default density for visual geoms in MJCF import (newton-physics#1781)

* Fix GL viewer crash on Wayland (newton-physics#1793)

* Make USD xform parameter control absolute articulation placement (newton-physics#1771)

* Fix CUDA context corruption in SDF implementation (newton-physics#1792)

* Bump mujoco-warp dependency to 3.5.0.2 (newton-physics#1779)

* Fix MuJoCo margin/gap conversion (newton-physics#1785)

* Bump version to 1.1.0.dev0 (newton-physics#1798)

* Missing unittest.main added back to test_import_mjcf.py.  Helps with F5 debugging in VS Code. (newton-physics#1796)

* Improve H1 example (newton-physics#1801)

Signed-off-by: Eric Heiden <eric-heiden@outlook.com>

* Fix ViewerViser.set_camera() (newton-physics#1805)

* Rename examples to follow prefix-first naming convention (newton-physics#1802)

* Improve MuJoCo actuator domain randomization (newton-physics#1773)

* Restore in_cup test in hydro example (newton-physics#1775)

* Fix `newton.geometry` imports and change of Mesh maxhullverts global constant

* Adapt to having both margin and gap arrays for each geom/shape

* Fix for newton.geometry API changes in primitive/narrowphase.py

* Fix removal of `BroadPhaseMode` IntEnum and revert to newton-sytle string literals

* WIP: Adapt geometry/unified.py to fix breaking changes to `newton.geometry` API

* First pass of API adjustments

* Patch more gaps (with respect to margin and gap renaming)

* GeoType.SDF was removed - reflect that in Kamino

* Introduce CoM position offsets w.r.t body frame and operations to convert between body CoM state and generic local body-fixed reference frames.

* Add caching of per-entity labels/names/keys in the Model subcontainers

* Remove SDF shape wrapper since it's now internal to mesh handling in CD pipelines

* Fix USD test assets

* Add Newton <--> Kamino joint type conversion operations and per-space default limit constants

* Add some cleanup to geometry and unified CD + UTs

* Add Newton <--> Kamino shape type conversion operations

* Apply new default joint coord limit constants to limits.py

* Adapt foubrar model builder and USD asset to produce the same result in sim example

* Purge "physical" goems and collapse all into a single group, and purge geometry "layers"

* Disable allocation per-joint wrenches by default and make them optional

* Make `Model` a dataclass

* Separate ModelData* containers into own `core/data.py` module

* Fix imports of ModelData

* Rename `Model` as `ModelKamino`

* Rename `ModelData` as `DataKamino`

* Rename `State` as `StateKamino`

* Rename `Control` as `ControlKamino`

* Rename `Limits` as `LimitsKamino`

* Rename `Contacts` as `ContactsKamino`

* Rename `ModelBuilder` as `ModelBuilderKamino`

* Make imports in test utilities relative

* Revise CD meta-data attributes and their computation in GeometryModel and ModelBuilderKamino

* Revise primitive CD pipeline

* Revise unified CD pipeline

* Revise CD front-end interfaces

* Fix UTs and relevant utils for interface changes to CD

* Change to `wp.DeviceLike` to account for upcoming deprecation of `Devicelike`

* Depracate legacy HDF5 data io (will be replaced in the future)

* Fix banned imports at module level

* Modify USD importer to detect articulations and order geoms and joints similarly to how the Newton `parse_usd` function does.

* Add conversion operation from `newton.Model` to `ModelKamino`

* Add data, state and control container conversions

* Add SolverKamino wrapper that fullfils newton integration interface

* Add newton integration examples

* Add SolverKamino to newton solver module imports

* WIP: fix problem with lambda_j being allocated for only kinematic constraints and failing on array copying

* Fix banned git import in benchmark

* Rename *Settings to *Config (#213)

* Rename SolverKaminoSettings -> SolverKaminoConfig

* Rename DualProblemSettings -> DualProblemConfig

* Rename CollisionDetectorSettings -> CollisionDetectorConfig

* Rename PADMMSettings -> PADMMConfig

* Rename ForwardKinematicsSolverSettings -> ForwardKinematicsSolverConfig

* Rename SimulatorSettings -> SimulatorConfig

* Add check for model compatibility in SolverKamino (#209)

* Fix device assignment in sparse CG test on CPU (#216)

* Replace Enum-type config attributes with Literal (#215)

* Replace warmstart mode config param with literal

* Replace contact warmstart mode config param with literal

* Replace rotation correction config param with literal

* Replace penalty update config param with literal

* Replace FK preconditioner option config param with literal

* Add post-init checks for dual/PADMM configs

* Rename FKPreconditionerOptions to FKPreconditionerType

* Remove WorldDescriptor from ModelKamino (#219)

* Add geom index offset array to model info

* Replace access to world description in model

* Remove world descriptor from model

* Fix computation of kinematics residual with sparse Jacobian (#220)

* Migrates `ModelKaminoSize` to it's own module to avoid circular dependency between core/model.py and core/state.py and rename it as `SizeKamino`.

* WIP: Fix SolverKamino wrapper

* Fix circular dependency in conversions.py

* Fix some broken unit tests and WIP to fix fourbar contact conversions and rendering

* Make some conversions @staticmethods instead, because they dont need common class attributes

* Fix declaration of custom state attributes and their conversion to/from newton and kamino

* WIP: Debug model conversion and newton sim examples

* Rename and cleanup start index array of per-world geoms

* Model conversion and newton sim examples now work.

* Make gravity conversion operation re-usable

* Migrates boxes_fourbar builder using newton.ModelBuilder to it's own module to prepare for migration.

* Use gravity conversion utility func in SolverKamino

* Add reusable joint-parameterization conversion utility

* Remove world-descriptor from model converter

* Rename helper converter that handles entity-local transforms

* Add some cleanup to DR Legs, ANYmal D and basic four-bar examples

* Fix module-level imports of additional kamino-specific development dependencies

* Fix module-level imports of additional kamino-specific development dependencies

* Fix erroneous merge conflict.

---------

Signed-off-by: Alain Denzler <adenzler@nvidia.com>
Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>
Signed-off-by: JC <jumyungc@nvidia.com>
Signed-off-by: Milad Rakhsha <mrakhsha@nvidia.com>
Signed-off-by: Milad-Rakhsha-NV <167464435+Milad-Rakhsha-NV@users.noreply.github.com>
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Signed-off-by: Eric Heiden <eheiden@nvidia.com>
Signed-off-by: Miles Macklin <mmacklin@nvidia.com>
Signed-off-by: adenzler-nvidia <adenzler@nvidia.com>
Signed-off-by: jvonmuralt <jvonmuralt@nvidia.com>
Co-authored-by: Daniela Hase <116915287+daniela-hase@users.noreply.github.com>
Co-authored-by: adenzler-nvidia <adenzler@nvidia.com>
Co-authored-by: Viktor Reutskyy <33062116+vreutskyy@users.noreply.github.com>
Co-authored-by: Eric Shi <97630937+shi-eric@users.noreply.github.com>
Co-authored-by: Anka Chen <AnkaChan@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: JC-nvidia <116605903+jumyungc@users.noreply.github.com>
Co-authored-by: Kenny Vilella <kvilella@nvidia.com>
Co-authored-by: nvtw <110816143+nvtw@users.noreply.github.com>
Co-authored-by: Milad-Rakhsha-NV <167464435+Milad-Rakhsha-NV@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Lennart Röstel <65088822+lenroe@users.noreply.github.com>
Co-authored-by: Eric Heiden <eheiden@nvidia.com>
Co-authored-by: jvonmuralt <jvonmuralt@nvidia.com>
Co-authored-by: camevor <camevor@nvidia.com>
Co-authored-by: mzamoramora-nvidia <mzamoramora@nvidia.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Alessandro Roncone <alecive87@gmail.com>
Co-authored-by: gdaviet <57617656+gdaviet@users.noreply.github.com>
Co-authored-by: Miles Macklin <mmacklin@nvidia.com>
Co-authored-by: Gordon Yeoman <gyeomannvidia@users.noreply.github.com>
Co-authored-by: Lukasz Wawrzyniak <lwawrzyniak@nvidia.com>
Co-authored-by: Eric Heiden <eric-heiden@outlook.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Viktor Reutskyy <vreutskyy@nvidia.com>
Co-authored-by: Lorenzo Terenzi <lorenzoterenzi96@gmail.com>
Co-authored-by: smollerNV <164020096+smollerNV@users.noreply.github.com>
Co-authored-by: twidmer <twidmer@nvidia.com>
Co-authored-by: Christian Schumacher <christian.schumacher@disney.com>
Co-authored-by: Guirec-Maloisel <25688871+Guirec-Maloisel@users.noreply.github.com>
mmacklin pushed a commit to mmacklin/newton that referenced this pull request Apr 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants