Skip to content

Parse the newton-usd-schemas#1434

Merged
eric-heiden merged 8 commits into
newton-physics:mainfrom
andrewkaufman:usd-schemas
Jan 24, 2026
Merged

Parse the newton-usd-schemas#1434
eric-heiden merged 8 commits into
newton-physics:mainfrom
andrewkaufman:usd-schemas

Conversation

@andrewkaufman

@andrewkaufman andrewkaufman commented Jan 22, 2026

Copy link
Copy Markdown
Member

Description

Adds a dependency on newton-usd-schemas & updates the USD parser to use the schemas.

  • SchemaResolverNewton is enabled by default, so examples don't have to understand the resolver mechanism to get the basics working
  • Added a couple newton schema atts to the test ant assets (and removed some irrelevant omniverse propreties)
  • Adapted the various SchemaResolvers to use the proper schema attributes
    • I kept a bunch of un-official newton attribute parsing for joints & shapes for now... I don't understand why these were added, but it seemed like an over-reach to remove them given some are incorporated into tests already
  • Fixed custom attribute parsing to exclude registered schema attributes
    • Without this we'd get warning about every newton schema attribute

Closes #1321, though I expect more updates needed each time we update the schemas.

There are a few open questions and/or controvertial changes here, so I'll do a self review to get some threads started.

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 torsional and rolling friction for materials; scene-level gravity_enabled and time_steps_per_second exposeable; mesh hull/vertex and contact_margin settings surfaced.
  • Bug Fixes

    • Safer USD schema registration to avoid import-time failures; importer tolerates missing optional schema.
  • Chores

    • Unified and simplified physics schema across engines; renamed/standardized attributes and updated USD scene assets to use Newton scene API; added optional USD schema dependency.
  • Tests

    • Expanded tests for material parsing, contact margins, time-step/solver resolution, and schema priority.

✏️ Tip: You can customize this high-level summary in your review settings.

@andrewkaufman andrewkaufman self-assigned this Jan 22, 2026
@andrewkaufman andrewkaufman added the usd Issues regarding USD import/export label Jan 22, 2026
@andrewkaufman andrewkaufman changed the title Usd schemas Adds a dependency on newton-usd-schemas & updates the USD parser to use the schemas. Jan 22, 2026
@coderabbitai

coderabbitai Bot commented Jan 22, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

Adds optional runtime registration of the Newton USD schema and updates USD schema resolution, attribute names, and importer parsing to read newton-scoped attributes (e.g., time_steps_per_second, gravity_enabled, max_hull_vertices, contact_margin) and new material fields (torsional_friction, rolling_friction). Tests and test assets updated accordingly.

Changes

Cohort / File(s) Summary
Schema Plugin Registration
newton/_src/usd/__init__.py
Add guarded import of newton_usd_schemas at module init to optionally register Newton USD schema without failing import if unavailable.
Schema Resolvers & Attribute Parsing
newton/_src/usd/schemas.py, newton/_src/usd/utils.py
Standardize resolver mappings across Newton/PhysX/MjC: replace legacy keys (time_step, mesh_hull_vertex_limit, rigid_contact_margin, enable_gravity) with time_steps_per_second, max_hull_vertices, contact_margin, gravity_enabled; add torsional/rolling friction to material mappings; add is_schema_attribute and change parse_custom_attr_name to return (namespace, local_name).
USD Importer & Material Model
newton/_src/utils/import_usd.py
Default to SchemaResolverNewton when none provided; expand PhysicsMaterial with torsionalFriction and rollingFriction; read scene dt from time_steps_per_second, gravity from gravity_enabled; read per-shape max_hull_vertices and contact_margin; propagate new material fields into shape configs and diagnostics.
Test Assets (USD)
newton/tests/assets/ant.usda, newton/tests/assets/ant_mixed.usda, newton/tests/assets/ant_multi.usda
Replace warpSceneAPI with NewtonSceneAPI; remove large customLayerData and DistantLight; convert TimeStepsPerSecond to int newton:timeStepsPerSecond and add newton:maxSolverIterations; add many newton: custom attributes in assets.
Tests
newton/tests/test_import_usd.py, newton/tests/test_schema_resolver.py
Add/rename tests covering parsing of torsional/rolling friction, contact_margin, gravity_enabled, time_steps_per_second, max_solver_iterations, and max_hull_vertices; expand schema resolver tests and adjust control flow in one test.
Config
pyproject.toml
Add optional importer dependency newton-usd-schemas>=0.1.0a1.
Docs / Docstring
newton/_src/sim/builder.py
Update add_usd docstring to reflect precedence/behavior changes (documentation-only).

Sequence Diagram(s)

sequenceDiagram
    participant App as Application
    participant Init as newton._src.usd.__init__
    participant SchemaReg as newton_usd_schemas
    participant Parser as newton._src/utils/import_usd.py
    participant Resolver as newton._src/usd/schemas.py
    participant Model as PhysicsModel

    App->>Init: import newton.usd
    Init->>SchemaReg: try import newton_usd_schemas
    alt import succeeds
        SchemaReg-->>Init: register Newton USD schema
    else import fails
        SchemaReg-->>Init: ImportError swallowed
    end

    App->>Parser: build_model(usd_stage)
    Parser->>Resolver: resolve_attributes(prim) 
    Note over Resolver: map USD attrs -> canonical keys\n(time_steps_per_second, gravity_enabled, contact_margin, max_hull_vertices, material frictions)
    Resolver-->>Parser: attribute values
    Parser->>Parser: parse_material & parse_shape (read torsional/rolling friction, contact_margin, max_hull_vertices)
    Parser->>Model: construct(parsed_attrs)
    Model-->>App: PhysicsModel
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~55 minutes

Possibly related PRs

Suggested reviewers

  • eric-heiden
  • Milad-Rakhsha-NV
  • adenzler-nvidia
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Parse the newton-usd-schemas' clearly and specifically describes the main objective of the PR: integrating Newton USD schemas into the parser.
Linked Issues check ✅ Passed The PR fully addresses issue #1321 requirements: SchemaResolverNewton is integrated as default resolver, schema attributes are mapped to Newton model properties, and custom attribute parsing excludes schema attributes.
Out of Scope Changes check ✅ Passed All changes are directly related to integrating Newton USD schemas: schema resolver updates, test assets migration to new schema format, custom attribute parsing refinement, and dependency addition.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

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

✨ Finishing touches
  • 📝 Generate docstrings

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.

@andrewkaufman andrewkaufman changed the title Adds a dependency on newton-usd-schemas & updates the USD parser to use the schemas. Parse the newton-usd-schemas Jan 22, 2026
Comment thread newton/_src/usd/schemas.py Outdated
Comment thread newton/_src/usd/schemas.py Outdated
Comment thread newton/_src/usd/utils.py
Comment thread newton/_src/utils/import_usd.py
Comment thread newton/_src/usd/schemas.py
Comment thread newton/tests/test_schema_resolver.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: 4

Caution

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

⚠️ Outside diff range comments (1)
newton/_src/usd/utils.py (1)

431-443: Add defensive checks to filter attributes and validate authored values.

GetAuthoredPropertiesInNamespace() returns both attributes and relationships; the code should guard against non-attribute properties and properties without authored values before calling attr.Get(). The same file already uses this pattern elsewhere (e.g., if attr.IsValid() and attr.HasAuthoredValue()). Use isinstance(attr, Usd.Attribute) to filter relationships, and check IsValid() and HasAuthoredValue() before accessing property values.

🤖 Fix all issues with AI agents
In `@newton/_src/usd/__init__.py`:
- Around line 16-19: Remove the unnecessary noqa comment from the side-effect
import in newton/_src/usd/__init__.py: keep the import newton_usd_schemas (to
register the Newton schema plugin) but delete the trailing "# noqa: F401" so the
linter no longer reports an unused directive; ensure the from pxr import Usd
line remains unchanged.

In `@newton/_src/utils/import_usd.py`:
- Around line 942-947: The code currently computes physics_dt by dividing 1.0 by
the value returned from R.get_value for key "time_steps_per_second" which can be
None or <= 0; update the logic around the R.get_value call that reads
time_steps_per_second (used to compute physics_dt) to guard against None or
non-positive values: capture the raw value into a local (e.g.,
time_steps_per_second_raw), if it is None or <= 0 replace it with a sensible
fallback (for example 60.0 or another project default) and optionally emit a
warning when verbose is true, then compute physics_dt = 1.0 /
time_steps_per_second_safe; ensure you reference physics_scene_prim and
PrimType.SCENE in the same block so behavior remains unchanged when a valid
value exists.

In `@newton/tests/test_schema_resolver.py`:
- Around line 1339-1383: The test test_max_hull_vertices assumes that when
resolver priority is [SchemaResolverPhysx(), SchemaResolverNewton()] the
resolved max_hull_vertices will be Newton's sentinel (-1/32), but PhysX
currently wins and yields 64; update the failing assertion in
test_max_hull_vertices (the assertion after creating the
physxConvexHullCollision:hullVertexLimit attribute) to expect 64, or
alternatively change the resolver order to [SchemaResolverNewton(),
SchemaResolverPhysx()] if you intend Newton to override; locate the check via
the test name and the SchemaResolverManager([SchemaResolverPhysx(),
SchemaResolverNewton()]) usage and adjust the assertion accordingly.
- Around line 1286-1338: The test test_contact_margin currently expects None but
the resolver returns the unset sentinel (-inf); update the assertion to expect
the sentinel instead (e.g. assertEqual(contact_margin, float("-inf"))) at the
call to resolver.get_value in test_contact_margin, or alternatively call
resolver.get_value with an explicit default if supported; locate the failing
line by searching for test_contact_margin and the resolver.get_value(collider,
PrimType.SHAPE, "contact_margin") invocation and replace the
assertEqual(contact_margin, None) with an assertion for float("-inf") (or pass a
default value to get_value).

Comment thread newton/_src/usd/__init__.py Outdated
Comment thread newton/_src/utils/import_usd.py Outdated
Comment thread newton/tests/test_schema_resolver.py
Comment thread newton/tests/test_schema_resolver.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: 5

🤖 Fix all issues with AI agents
In `@newton/_src/usd/__init__.py`:
- Around line 16-21: The import line "import newton_usd_schemas  # noqa: F401"
contains an unnecessary noqa suppressor; remove the trailing "# noqa: F401" so
Ruff RUF100 is satisfied and keep the import as-is (inside the try/except that
sets Usd = None on ImportError) so the module registration via import
newton_usd_schemas still occurs and the Usd symbol from "from pxr import Usd"
remains handled in the except block.

In `@newton/_src/utils/import_usd.py`:
- Around line 941-946: The computation of physics_dt uses 1.0 / R.get_value(...)
which can raise ZeroDivisionError or TypeError if time_steps_per_second is 0 or
None; update the logic around the call that sets physics_dt (and related call to
R.get_value with physics_scene_prim and PrimType.SCENE) to first fetch the raw
value into a local (e.g., time_steps_per_second_value), validate it (not None
and not 0), and only then compute physics_dt = 1.0 / value, otherwise use a safe
fallback default (or log/raise a clear error); similarly ensure gravity_enabled
read remains bool by coercing or defaulting when R.get_value returns None.

In `@newton/tests/test_import_usd.py`:
- Around line 2966-3168: The test file contains unused "# noqa: PLC0415" markers
on pxr import lines (e.g. the imports in test_contact_margin_parsing,
test_scene_gravity_enabled_parsing, test_scene_time_steps_per_second_parsing,
test_scene_max_solver_iterations_parsing and the earlier test that imports
UsdShade) which Ruff flags as RUF100; remove those trailing "# noqa: PLC0415"
comments from the relevant import statements (the lines starting with "from pxr
import Usd, UsdGeom, UsdPhysics" and "from pxr import Usd, UsdGeom, UsdPhysics,
UsdShade") so the imports remain but the unused noqa markers are deleted.

In `@newton/tests/test_schema_resolver.py`:
- Around line 1286-1338: The test incorrectly expects None when
SchemaResolverPhysx is first in the SchemaResolverManager; change the assertion
after creating resolver = SchemaResolverManager([SchemaResolverPhysx(),
SchemaResolverNewton()]) in test_contact_margin so it expects PhysX's mapping
default (negative infinity) instead of None—i.e., assert that
resolver.get_value(collider, PrimType.SHAPE, "contact_margin") equals
float("-inf") (or use an equivalent is-inf negative check).
- Around line 1339-1383: The test's initial expectation is wrong: when resolver
= SchemaResolverManager([SchemaResolverPhysx(), SchemaResolverNewton()]) the
PhysX mapping default for max_hull_vertices is 64, so update the assertion after
calling resolver.get_value(collider, PrimType.SHAPE, "max_hull_vertices") in
test_max_hull_vertices to expect 64 instead of -1; leave the subsequent explicit
sets and other resolver-order assertions unchanged.
🧹 Nitpick comments (2)
newton/_src/usd/utils.py (1)

395-437: Cache schema property names once per prim to avoid repeated registry lookups.

Line 395–Line 406 re-scan SchemaRegistry for every attribute; precomputing the property-name set once per prim reduces overhead without changing behavior.

♻️ Proposed refactor
-    def is_schema_attribute(prim, attr_name: str) -> bool:
-        """Check if attribute is defined by a registered schema."""
-        # Check the prim's type schema
-        prim_def = Usd.SchemaRegistry().FindConcretePrimDefinition(prim.GetTypeName())
-        if prim_def and attr_name in prim_def.GetPropertyNames():
-            return True
-
-        # Check all applied API schemas
-        for schema_name in prim.GetAppliedSchemas():
-            api_def = Usd.SchemaRegistry().FindAppliedAPIPrimDefinition(schema_name)
-            if api_def and attr_name in api_def.GetPropertyNames():
-                return True
-
-        return False
+    prim_def = Usd.SchemaRegistry().FindConcretePrimDefinition(prim.GetTypeName())
+    schema_props = set(prim_def.GetPropertyNames()) if prim_def else set()
+    for schema_name in prim.GetAppliedSchemas():
+        api_def = Usd.SchemaRegistry().FindAppliedAPIPrimDefinition(schema_name)
+        if api_def:
+            schema_props.update(api_def.GetPropertyNames())
+
+    def is_schema_attribute(attr_name: str) -> bool:
+        """Check if attribute is defined by a registered schema."""
+        return attr_name in schema_props
@@
-    for attr in prim.GetAuthoredPropertiesInNamespace("newton"):
-        if is_schema_attribute(prim, attr.GetName()):
-            continue
-        attr_name = attr.GetName()
+    for attr in prim.GetAuthoredPropertiesInNamespace("newton"):
+        attr_name = attr.GetName()
+        if is_schema_attribute(attr_name):
+            continue
newton/_src/utils/import_usd.py (1)

1417-1422: Consider documenting the sentinel value pattern.

Using float("-inf") as a sentinel to detect "not authored" is unconventional. Consider adding a brief comment explaining why this pattern is used, or using a more explicit sentinel like None if the schema resolver supports it.

                 if collect_schema_attrs:
                     R.collect_prim_attrs(prim)
 
+                # float("-inf") is the schema default sentinel indicating "not authored"
                 contact_margin = R.get_value(prim, prim_type=PrimType.SHAPE, key="contact_margin", verbose=verbose)
                 if contact_margin == float("-inf"):
                     contact_margin = builder.default_shape_cfg.contact_margin

Comment thread newton/_src/usd/__init__.py Outdated
Comment thread newton/_src/utils/import_usd.py
Comment thread newton/tests/test_import_usd.py
Comment thread newton/tests/test_schema_resolver.py
Comment thread newton/tests/test_schema_resolver.py
@andrewkaufman andrewkaufman force-pushed the usd-schemas branch 2 times, most recently from 73fb4a7 to 4f2b437 Compare January 22, 2026 06:04
@codecov

codecov Bot commented Jan 22, 2026

Copy link
Copy Markdown

Codecov Report

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

Files with missing lines Patch % Lines
newton/_src/usd/__init__.py 50.00% 2 Missing ⚠️
newton/_src/usd/utils.py 87.50% 2 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.

Actionable comments posted: 0

Caution

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

⚠️ Outside diff range comments (1)
newton/_src/usd/schemas.py (1)

225-261: Fix the timestep default to match transformer units.
The SchemaAttribute default is passed through usd_value_transformer (confirmed at schema_resolver.py:240). Since the transformer expects timestep in seconds (lambda s: int(1.0 / s)), the default must also be in seconds. Currently, 500 (a frequency) is passed through the transformer, yielding int(1.0 / 500) = 0 Hz—a broken fallback. Change the default to 0.002 (equivalent to 500 Hz in seconds).

♻️ Duplicate comments (2)
newton/_src/usd/__init__.py (1)

16-19: Remove unused # noqa: F401 (already noted).

newton/tests/test_import_usd.py (1)

2966-2966: Remove unused # noqa: PLC0415 directives.

Ruff reports these noqa markers are unused across multiple import statements in the new tests. These should be removed for lint cleanliness.

Affected lines: 2966, 3026, 3074, 3114, 3148, 3175

♻️ Proposed fix
-        from pxr import Usd, UsdGeom, UsdPhysics, UsdShade  # noqa: PLC0415
+        from pxr import Usd, UsdGeom, UsdPhysics, UsdShade

Apply similar changes to the other affected lines.

Also applies to: 3026-3026, 3074-3074, 3114-3114, 3148-3148, 3175-3175

Comment thread newton/_src/usd/schemas.py
Comment thread newton/tests/test_import_usd.py
Comment thread newton/_src/usd/schemas.py Outdated
Comment thread newton/_src/utils/import_usd.py Outdated
@andrewkaufman

Copy link
Copy Markdown
Member Author

rebased on main (twice in 10 minutes!)

@eric-heiden eric-heiden 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.

Thanks!

@eric-heiden eric-heiden enabled auto-merge January 23, 2026 23:35
@eric-heiden eric-heiden added this pull request to the merge queue Jan 24, 2026

@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: 1

Caution

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

⚠️ Outside diff range comments (1)
newton/_src/utils/import_usd.py (1)

1419-1449: Guard against missing resolver mappings for contact_margin.

If schema_resolvers is empty or lacks a SHAPE mapping (e.g., MJC-only), R.get_value(...) returns None, which then flows into ShapeConfig and can break downstream numeric operations. Add a None fallback alongside the -inf sentinel check.

🛠️ Proposed fix
-                contact_margin = R.get_value(prim, prim_type=PrimType.SHAPE, key="contact_margin", verbose=verbose)
-                if contact_margin == float("-inf"):
+                contact_margin = R.get_value(prim, prim_type=PrimType.SHAPE, key="contact_margin", verbose=verbose)
+                if contact_margin is None or contact_margin == float("-inf"):
                     contact_margin = builder.default_shape_cfg.contact_margin
🤖 Fix all issues with AI agents
In `@newton/_src/utils/import_usd.py`:
- Around line 36-37: Uncomment and restore the public re-export of
SchemaResolverNewton (and the other schema resolver classes) so users can pass
instances to parse_usd via the schema_resolvers parameter: locate the commented
import and export lines for SchemaResolverNewton in the module that exposes the
public USD API, re-enable the import from ..usd.schemas (SchemaResolverNewton)
and add it to the module's exports (e.g., __all__ or explicit export list) so
SchemaResolverNewton is available to callers of parse_usd and documented as part
of the public API.
♻️ Duplicate comments (2)
newton/_src/usd/__init__.py (1)

16-20: Remove unused # noqa: F401 directive.

The static analysis indicates F401 is not enabled, making the suppression unnecessary. This issue was already flagged in previous reviews.

🧹 Proposed fix
 try:
     # register the newton schema plugin before any other USD code is executed
-    import newton_usd_schemas  # noqa: F401
+    import newton_usd_schemas
 except ImportError:
     pass
newton/tests/test_import_usd.py (1)

2968-2968: Remove unused noqa markers to keep lint clean.
These # noqa: PLC0415 directives are unused and trigger RUF100; drop them.

🧹 Proposed cleanup
-        from pxr import Usd, UsdGeom, UsdPhysics, UsdShade  # noqa: PLC0415
+        from pxr import Usd, UsdGeom, UsdPhysics, UsdShade
@@
-        from pxr import Usd, UsdGeom, UsdPhysics  # noqa: PLC0415
+        from pxr import Usd, UsdGeom, UsdPhysics
@@
-        from pxr import Usd, UsdGeom, UsdPhysics  # noqa: PLC0415
+        from pxr import Usd, UsdGeom, UsdPhysics
@@
-        from pxr import Usd, UsdGeom, UsdPhysics  # noqa: PLC0415
+        from pxr import Usd, UsdGeom, UsdPhysics
@@
-        from pxr import Usd, UsdGeom, UsdPhysics  # noqa: PLC0415
+        from pxr import Usd, UsdGeom, UsdPhysics
@@
-        from pxr import Gf, Usd, UsdGeom, UsdPhysics  # noqa: PLC0415
+        from pxr import Gf, Usd, UsdGeom, UsdPhysics
#!/bin/bash
# Verify the unused noqa markers in this file
rg -n "noqa: PLC0415" newton/tests/test_import_usd.py

Also applies to: 3028-3028, 3076-3076, 3116-3116, 3150-3150, 3177-3177

Comment thread newton/_src/utils/import_usd.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: 1

🤖 Fix all issues with AI agents
In `@newton/_src/utils/import_usd.py`:
- Around line 1419-1425: get_value can return None when schema resolvers are
disabled, so in the contact_margin handling (around R.get_value(...,
prim_type=PrimType.SHAPE, key="contact_margin")), treat None the same as the
unset sentinel float("-inf") and fallback to
builder.default_shape_cfg.contact_margin; update the contact_margin assignment
logic in the block using R.get_value and also the similar occurrence around line
1445 to check for contact_margin is None || contact_margin == float("-inf") and
then set contact_margin = builder.default_shape_cfg.contact_margin so downstream
ShapeConfig receives a numeric value.
♻️ Duplicate comments (2)
newton/_src/usd/__init__.py (1)

16-19: Remove the unused # noqa: F401.

Ruff reports the directive as unused; keep the side‑effect import but drop the noqa to avoid RUF100.

🧹 Proposed cleanup
-    import newton_usd_schemas  # noqa: F401
+    import newton_usd_schemas
newton/tests/test_import_usd.py (1)

2968-2968: Remove unused # noqa: PLC0415 markers.

Ruff reports these as unused; removing them keeps lint clean while preserving the local optional imports.

🧹 Proposed cleanup
-        from pxr import Usd, UsdGeom, UsdPhysics, UsdShade  # noqa: PLC0415
+        from pxr import Usd, UsdGeom, UsdPhysics, UsdShade
@@
-        from pxr import Usd, UsdGeom, UsdPhysics  # noqa: PLC0415
+        from pxr import Usd, UsdGeom, UsdPhysics
@@
-        from pxr import Usd, UsdGeom, UsdPhysics  # noqa: PLC0415
+        from pxr import Usd, UsdGeom, UsdPhysics
@@
-        from pxr import Usd, UsdGeom, UsdPhysics  # noqa: PLC0415
+        from pxr import Usd, UsdGeom, UsdPhysics
@@
-        from pxr import Usd, UsdGeom, UsdPhysics  # noqa: PLC0415
+        from pxr import Usd, UsdGeom, UsdPhysics
@@
-        from pxr import Gf, Usd, UsdGeom, UsdPhysics  # noqa: PLC0415
+        from pxr import Gf, Usd, UsdGeom, UsdPhysics

Also applies to: 3028-3028, 3076-3076, 3116-3116, 3150-3150, 3177-3177

Comment thread newton/_src/utils/import_usd.py
Merged via the queue into newton-physics:main with commit c92f663 Jan 24, 2026
22 checks passed
@andrewkaufman andrewkaufman deleted the usd-schemas branch January 24, 2026 00:39
eric-heiden pushed a commit to eric-heiden/newton that referenced this pull request Jan 28, 2026
@coderabbitai coderabbitai Bot mentioned this pull request Mar 5, 2026
3 tasks
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

usd Issues regarding USD import/export

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Integrate the Newton schema in the USD parser

4 participants