88import shutil
99import subprocess
1010import sys
11+ import tomllib
1112import zipfile
1213from pathlib import Path
1314
@@ -97,6 +98,17 @@ def run(*, mode="core", source="floor", floor="13.4.1", cuda_version="13.0.2", l
9798 for args in installs
9899 if any (arg .startswith ("cuda-core[" ) or Path (arg ).name .startswith ("cuda_core-" ) for arg in args )
99100 )
101+ if mode == "core" :
102+ major = cuda_version .split ("." )[0 ]
103+ group = core_install [core_install .index ("--group" ) + 1 ]
104+ assert group == f"test-cu{ major } " + ("-local" if local_ctk else "" )
105+ toolkit_args = [arg for args in installs for arg in args if arg .startswith ("cuda-toolkit" )]
106+ if local_ctk :
107+ assert toolkit_args == []
108+ else :
109+ minor = "." .join (cuda_version .split ("." )[:2 ])
110+ assert f"cuda-toolkit=={ minor } .*" in core_install
111+ assert f"cuda-toolkit[curand]=={ minor } .*" in toolkit_args
100112 return bindings_install , core_install , str (bindings_wheel )
101113
102114 return run
@@ -109,24 +121,42 @@ def test_floor_uses_current_bindings_only_during_toolkit_bump(run_tests, local_c
109121 bindings , core , wheel = run_tests (local_ctk = local_ctk , floor = floor )
110122 expected = wheel + ("" if local_ctk else "[all]" ) if floor == "13.4.1" else "cuda-bindings==13.5.0"
111123 assert bindings == ["install" , expected ]
112- assert "cuda-toolkit==13.0.*" in core
113124
114125
115126@pytest .mark .parametrize ("local_ctk" , [True , False ], ids = ["local" , "wheels" ])
116127@pytest .mark .agent_authored (model = "gpt-6" )
117- def test_current_minor_requires_toolkit_wheels_only_for_wheel_jobs (run_tests , local_ctk ):
128+ def test_current_minor_uses_local_or_wheel_test_dependencies (run_tests , local_ctk ):
118129 bindings , core , wheel = run_tests (source = "main" , cuda_version = "13.5.0" , local_ctk = local_ctk )
119130 assert bindings == ["install" , wheel + ("" if local_ctk else "[all]" )]
120- pins = [arg for arg in core if arg .startswith ("cuda-toolkit==" )]
121- assert pins == ([] if local_ctk else ["cuda-toolkit==13.5.*" ])
122131
123132
124133@pytest .mark .parametrize (("source" , "cuda_version" ), [("floor" , "12.6.3" ), ("backport" , "12.9.1" )])
134+ @pytest .mark .parametrize ("local_ctk" , [True , False ], ids = ["local" , "wheels" ])
135+ @pytest .mark .agent_authored (model = "gpt-6" )
136+ def test_prior_major_keeps_its_floor_or_backport_bindings (run_tests , source , cuda_version , local_ctk ):
137+ bindings , core , wheel = run_tests (source = source , cuda_version = cuda_version , local_ctk = local_ctk )
138+ expected = "cuda-bindings==12.9.8" if source == "floor" else wheel + ("" if local_ctk else "[all]" )
139+ assert bindings == ["install" , expected ]
140+
141+
142+ @pytest .mark .parametrize ("major" , [12 , 13 ])
125143@pytest .mark .agent_authored (model = "gpt-6" )
126- def test_prior_major_keeps_its_floor_or_backport_bindings (run_tests , source , cuda_version ):
127- bindings , core , wheel = run_tests (source = source , cuda_version = cuda_version , local_ctk = False )
128- assert bindings == ["install" , "cuda-bindings==12.9.8" if source == "floor" else wheel + "[all]" ]
129- assert f"cuda-toolkit=={ '.' .join (cuda_version .split ('.' )[:2 ])} .*" in core
144+ def test_local_core_groups_keep_test_dependencies_without_toolkit_wheels (major ):
145+ pyproject = TOOLS .parents [1 ] / "cuda_core" / "pyproject.toml"
146+ groups = tomllib .loads (pyproject .read_text (encoding = "utf-8" ))["dependency-groups" ]
147+
148+ def requirements (name ):
149+ for item in groups [name ]:
150+ if isinstance (item , str ):
151+ yield item
152+ else :
153+ yield from requirements (item ["include-group" ])
154+
155+ local = set (requirements (f"test-cu{ major } -local" ))
156+ assert set (requirements ("test" )) | set (requirements ("ml-dtypes" )) <= local
157+ assert any (requirement .partition (";" )[0 ].strip () == f"cupy-cuda{ major } x" for requirement in local )
158+ assert not any (requirement .startswith ("cuda-toolkit" ) for requirement in local )
159+ assert set (requirements (f"test-cu{ major } " )) == local | {f"cuda-toolkit[cudart]=={ major } .*" }
130160
131161
132162@pytest .mark .parametrize ("mode" , ["nightly-pytorch" , "nightly-numba-cuda" , "nightly-numba-cuda-mlir" ])
0 commit comments