From abfadc93082e70c2fd47412226436da448e0478c Mon Sep 17 00:00:00 2001 From: f380cedric Date: Tue, 25 Apr 2023 15:47:48 +0200 Subject: EHN: add __contains__() to np.lib.npyio.NpzFile NpzFile inherits from collections.abc.Mapping, which provides __contains__(). However, it calls __getitem__(), which can be slow because it performs file decompression on success. --- numpy/lib/npyio.py | 3 +++ numpy/lib/npyio.pyi | 1 + 2 files changed, 4 insertions(+) diff --git a/numpy/lib/npyio.py b/numpy/lib/npyio.py index f8f2ab7a2..22fb0eb7d 100644 --- a/numpy/lib/npyio.py +++ b/numpy/lib/npyio.py @@ -262,6 +262,9 @@ class NpzFile(Mapping): else: raise KeyError("%s is not a file in the archive" % key) + def __contains__(self, key): + return (key in self._files or key in self.files) + def __repr__(self): # Get filename or default to `object` if isinstance(self.fid, str): diff --git a/numpy/lib/npyio.pyi b/numpy/lib/npyio.pyi index 9dd3d6809..cc81e82b7 100644 --- a/numpy/lib/npyio.pyi +++ b/numpy/lib/npyio.pyi @@ -98,6 +98,7 @@ class NpzFile(Mapping[str, NDArray[Any]]): def __iter__(self) -> Iterator[str]: ... def __len__(self) -> int: ... def __getitem__(self, key: str) -> NDArray[Any]: ... + def __contains__(self, key: str) -> bool: ... def __repr__(self) -> str: ... # NOTE: Returns a `NpzFile` if file is a zip file; -- cgit v1.2.1