MCPcopy Index your code
hub / github.com/pydata/xarray / DuckArrayModule

Class DuckArrayModule

xarray/namedarray/pycompat.py:21–66  ·  view source on GitHub ↗

Solely for internal isinstance and version checks. Motivated by having to only import pint when required (as pint currently imports xarray) https://github.com/pydata/xarray/pull/5561#discussion_r664815718

Source from the content-addressed store, hash-verified

19
20
21class DuckArrayModule:
22 """
23 Solely for internal isinstance and version checks.
24
25 Motivated by having to only import pint when required (as pint currently imports xarray)
26 https://github.com/pydata/xarray/pull/5561#discussion_r664815718
27 """
28
29 module: ModuleType | None
30 version: Version
31 type: DuckArrayTypes
32 available: bool
33
34 def __init__(self, mod: ModType) -> None:
35 duck_array_module: ModuleType | None
36 duck_array_version: Version
37 duck_array_type: DuckArrayTypes
38 try:
39 duck_array_module = import_module(mod)
40 duck_array_version = Version(duck_array_module.__version__)
41
42 if mod == "dask":
43 duck_array_type = (import_module("dask.array").Array,)
44 elif mod == "pint":
45 duck_array_type = (duck_array_module.Quantity,)
46 elif mod == "cupy":
47 duck_array_type = (duck_array_module.ndarray,)
48 elif mod == "sparse":
49 duck_array_type = (duck_array_module.SparseArray,)
50 elif mod == "cubed":
51 duck_array_type = (duck_array_module.Array,)
52 # Not a duck array module, but using this system regardless, to get lazy imports
53 elif mod == "numbagg":
54 duck_array_type = ()
55 else:
56 raise NotImplementedError
57
58 except (ImportError, AttributeError): # pragma: no cover
59 duck_array_module = None
60 duck_array_version = Version("0.0.0")
61 duck_array_type = ()
62
63 self.module = duck_array_module
64 self.version = duck_array_version
65 self.type = duck_array_type
66 self.available = duck_array_module is not None
67
68
69_cached_duck_array_modules: dict[ModType, DuckArrayModule] = {}

Callers 3

_get_units_from_attrsFunction · 0.90
__init__Method · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…