better error message when invalid renderer is specified (#15573)

This commit is contained in:
Christopher Milan
2026-04-01 14:12:55 -07:00
committed by GitHub
parent 0d6fbc2355
commit 6c67bd4c14
2 changed files with 6 additions and 0 deletions

View File

@@ -24,6 +24,11 @@ class TestDevice(unittest.TestCase):
with self.assertRaises(ModuleNotFoundError):
Device["TYPO"]
@unittest.skipIf(Device.DEFAULT != "CPU", "only run on CPU")
def test_nonexistent_renderer(self):
with self.assertRaisesRegex(AssertionError, "No renderer"):
with Context(DEV="CPU:TYPO"): Device[Device.DEFAULT].renderer
def test_lowercase_canonicalizes(self):
device = Device.DEFAULT
with Context(DEV=device.lower()):

View File

@@ -287,6 +287,7 @@ class Compiled:
assert (rn:=next((self._renderer_name(r) for r in self.renderers if getenv(f"{self.device}_{self._renderer_name(r)}")), None)) is None, \
f"{self.device}_{rn}=1 is deprecated, use DEV={self.device}:{rn} or {self.device}_CC={rn} instead"
renderers = [r for r in self.renderers if self._renderer_name(r) == rn] if (rn:=DEV.target(self.device).renderer) else self.renderers
assert renderers, f"No renderer for {self.device} " + (f"matches request {rn!r}" if rn else "is available")
return select_first_inited(renderers, f"No renderer for {self.device} is available", self.cached_renderer)
def synchronize(self):