@@ -61,6 +61,26 @@ def _requirements_from_setup(package_name: str, extra_name: str, dependency_name
6161 raise AssertionError (f"Could not find EXTRAS_REQUIRE in { setup_path } " )
6262
6363
64+ def _install_requirements_from_setup (package_name : str , dependency_name : str ) -> list [Requirement ]:
65+ """Return matching install requirements from a source package."""
66+ setup_path = _repo_root () / f"source/{ package_name } /setup.py"
67+ module = ast .parse (setup_path .read_text (encoding = "utf-8" ))
68+
69+ for node in module .body :
70+ if not isinstance (node , ast .Assign ):
71+ continue
72+ if not any (isinstance (target , ast .Name ) and target .id == "INSTALL_REQUIRES" for target in node .targets ):
73+ continue
74+ install_requires = ast .literal_eval (node .value )
75+ return [
76+ requirement
77+ for dependency in install_requires
78+ if (requirement := Requirement (dependency )).name == dependency_name
79+ ]
80+
81+ raise AssertionError (f"Could not find INSTALL_REQUIRES in { setup_path } " )
82+
83+
6484def test_wheel_builder_rsl_rl_pin_matches_source_package ():
6585 """The bundled wheel metadata must install the RSL-RL version required by training scripts."""
6686 expected_pin = _rsl_rl_pin_from_setup ()
@@ -103,6 +123,31 @@ def test_newton_requirements_support_isaac_sim_6_0_and_6_1():
103123 assert Version ("2.0.0" ) not in requirement .specifier
104124
105125
126+ def test_warp_requirements_support_newton_bundled_by_isaac_sim_6_0_and_6_1 ():
127+ """Core Warp requirements must accept the releases needed by bundled Newton versions."""
128+ requirements = _install_requirements_from_setup ("isaaclab" , "warp-lang" )
129+
130+ packages_path = _repo_root () / "tools/wheel_builder/res/python_packages.toml"
131+ with packages_path .open ("rb" ) as f :
132+ packages = tomllib .load (f )
133+ requirements .extend (
134+ Requirement (dependency )
135+ for dependency in packages ["isaaclab" ]["pyproject" ]["dependencies" ]["all" ]
136+ if dependency .startswith ("warp-lang" )
137+ )
138+ optional_dependencies = packages ["isaaclab" ]["pyproject" ]["optional-dependencies" ]["all" ]
139+ dependencies_by_extra = {name : deps for entry in optional_dependencies for name , deps in entry .items ()}
140+ requirements .extend (
141+ Requirement (dependency ) for dependency in dependencies_by_extra ["newton" ] if dependency .startswith ("warp-lang" )
142+ )
143+
144+ assert len (requirements ) == 3
145+ for requirement in requirements :
146+ assert Version ("1.13.0" ) in requirement .specifier
147+ assert Version ("1.17.0" ) in requirement .specifier
148+ assert Version ("2.0.0" ) not in requirement .specifier
149+
150+
106151def test_rl_games_aiohttp_requirement_supports_isaac_sim_6_0_and_6_1 ():
107152 """RL-Games must not downgrade the aiohttp release bundled by Isaac Sim 6.1."""
108153 requirements = _requirements_from_setup ("isaaclab_rl" , "rl-games" , "aiohttp" )
0 commit comments