From 987f20e48ea28eb13c0556fec26c04ff58a528e7 Mon Sep 17 00:00:00 2001 From: Yushuo Sun <135411736+yushuosun@users.noreply.github.com> Date: Tue, 30 Jun 2026 03:34:17 +1000 Subject: [PATCH] Fix name-mangled __data lookups in _LazyError MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _LazyError and its inner LazyErrorObj store self.__data, which Python mangles to _LazyError__data / _LazyErrorObj__data, but read it back via object.__getattribute__(self, "__data") — an unmangled string literal that does not exist. So when an optional package (e.g. tinycudann) is missing, touching a lazily-errored object raised AttributeError('__data') instead of the intended RuntimeError("Could not load package ..."). Use a non-mangled _data name. --- nerfstudio/utils/external.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/nerfstudio/utils/external.py b/nerfstudio/utils/external.py index f14219bd56..1cd471093d 100644 --- a/nerfstudio/utils/external.py +++ b/nerfstudio/utils/external.py @@ -17,22 +17,22 @@ class _LazyError: def __init__(self, data): - self.__data = data # pylint: disable=unused-private-member + self._data = data # pylint: disable=unused-private-member class LazyErrorObj: def __init__(self, data): - self.__data = data # pylint: disable=unused-private-member + self._data = data # pylint: disable=unused-private-member def __call__(self, *args, **kwds): - name, exc = object.__getattribute__(self, "__data") + name, exc = object.__getattribute__(self, "_data") raise RuntimeError(f"Could not load package {name}.") from exc def __getattr__(self, __name: str): - name, exc = object.__getattribute__(self, "__data") + name, exc = object.__getattribute__(self, "_data") raise RuntimeError(f"Could not load package {name}") from exc def __getattr__(self, __name: str): - return _LazyError.LazyErrorObj(object.__getattribute__(self, "__data")) + return _LazyError.LazyErrorObj(object.__getattribute__(self, "_data")) TCNN_EXISTS = False