xbarray 0.0.1a1__py3-none-any.whl → 0.0.1a3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of xbarray might be problematic. Click here for more details.

Files changed (27) hide show
  1. xbarray/__init__.py +1 -1
  2. xbarray/{jax → _src/implementations/jax}/__init__.py +10 -4
  3. xbarray/{jax → _src/implementations/jax}/_extra.py +2 -1
  4. xbarray/{jax → _src/implementations/jax}/random.py +1 -2
  5. xbarray/{numpy → _src/implementations/numpy}/__init__.py +8 -4
  6. xbarray/{numpy → _src/implementations/numpy}/_extra.py +2 -1
  7. xbarray/{numpy → _src/implementations/numpy}/random.py +1 -2
  8. xbarray/{pytorch → _src/implementations/pytorch}/__init__.py +8 -4
  9. xbarray/{pytorch → _src/implementations/pytorch}/_extra.py +2 -1
  10. xbarray/{pytorch → _src/implementations/pytorch}/random.py +1 -2
  11. xbarray/_src/serialization/__init__.py +1 -0
  12. xbarray/_src/serialization/serialization_map.py +31 -0
  13. xbarray/base/base.py +2 -2
  14. xbarray/cls_impl/cls_base.py +10 -0
  15. xbarray/jax.py +13 -0
  16. xbarray/numpy.py +13 -0
  17. xbarray/pytorch.py +13 -0
  18. {xbarray-0.0.1a1.dist-info → xbarray-0.0.1a3.dist-info}/METADATA +2 -1
  19. xbarray-0.0.1a3.dist-info/RECORD +41 -0
  20. xbarray-0.0.1a1.dist-info/RECORD +0 -35
  21. /xbarray/{common → _src/implementations/_common}/implementations.py +0 -0
  22. /xbarray/{jax → _src/implementations/jax}/_typing.py +0 -0
  23. /xbarray/{numpy → _src/implementations/numpy}/_typing.py +0 -0
  24. /xbarray/{pytorch → _src/implementations/pytorch}/_typing.py +0 -0
  25. {xbarray-0.0.1a1.dist-info → xbarray-0.0.1a3.dist-info}/WHEEL +0 -0
  26. {xbarray-0.0.1a1.dist-info → xbarray-0.0.1a3.dist-info}/licenses/LICENSE +0 -0
  27. {xbarray-0.0.1a1.dist-info → xbarray-0.0.1a3.dist-info}/top_level.txt +0 -0
xbarray/__init__.py CHANGED
@@ -1 +1 @@
1
- from .base import *
1
+ from .base import * # Import Abstract Typings
@@ -9,16 +9,22 @@ else:
9
9
  import jax.experimental.array_api as compat_module
10
10
  from jax.experimental.array_api import *
11
11
 
12
+ from array_api_compat.common._helpers import *
13
+
12
14
  # Import and bind all functions from array_api_extra before exposing them
13
15
  import array_api_extra
14
16
  from functools import partial
15
17
  for api_name in dir(array_api_extra):
16
18
  if api_name.startswith('_'):
17
19
  continue
18
- globals()[api_name] = partial(
19
- getattr(array_api_extra, api_name),
20
- xp=compat_module
21
- )
20
+
21
+ if api_name == 'at':
22
+ globals()[api_name] = getattr(array_api_extra, api_name)
23
+ else:
24
+ globals()[api_name] = partial(
25
+ getattr(array_api_extra, api_name),
26
+ xp=compat_module
27
+ )
22
28
 
23
29
  from ._typing import *
24
30
  from ._extra import *
@@ -18,6 +18,7 @@ __all__ = [
18
18
  "dtype_is_real_floating",
19
19
  "dtype_is_boolean",
20
20
  "abbreviate_array",
21
+ "map_fn_over_arrays",
21
22
  ]
22
23
 
23
24
  default_integer_dtype = int
@@ -77,7 +78,7 @@ def dtype_is_boolean(
77
78
  ) -> bool:
78
79
  return dtype == np.bool_ or dtype == bool
79
80
 
80
- from xbarray.common.implementations import *
81
+ from .._common.implementations import *
81
82
  if hasattr(jax.numpy, "__array_api_version__"):
82
83
  compat_module = jax.numpy
83
84
  else:
@@ -26,9 +26,9 @@ def random_number_generator(
26
26
 
27
27
  def random_discrete_uniform(
28
28
  shape : Union[int, Tuple[int, ...]],
29
+ /,
29
30
  from_num : int,
30
31
  to_num : int,
31
- /,
32
32
  *,
33
33
  rng : RNG_TYPE,
34
34
  dtype : Optional[DTYPE_TYPE] = None,
@@ -70,7 +70,6 @@ def random_exponential(
70
70
  data = jax.device_put(data, device)
71
71
  return new_rng, data
72
72
 
73
- @classmethod
74
73
  def random_normal(
75
74
  shape: Union[int, Tuple[int, ...]],
76
75
  /,
@@ -9,10 +9,14 @@ from functools import partial
9
9
  for api_name in dir(array_api_extra):
10
10
  if api_name.startswith('_'):
11
11
  continue
12
- globals()[api_name] = partial(
13
- getattr(array_api_extra, api_name),
14
- xp=compat_module
15
- )
12
+
13
+ if api_name == 'at':
14
+ globals()[api_name] = getattr(array_api_extra, api_name)
15
+ else:
16
+ globals()[api_name] = partial(
17
+ getattr(array_api_extra, api_name),
18
+ xp=compat_module
19
+ )
16
20
 
17
21
  from ._typing import *
18
22
  from ._extra import *
@@ -16,6 +16,7 @@ __all__ = [
16
16
  "dtype_is_real_floating",
17
17
  "dtype_is_boolean",
18
18
  "abbreviate_array",
19
+ "map_fn_over_arrays",
19
20
  ]
20
21
 
21
22
  default_integer_dtype = int
@@ -68,7 +69,7 @@ def dtype_is_boolean(
68
69
  ) -> bool:
69
70
  return dtype == np.bool_ or dtype == bool
70
71
 
71
- from xbarray.common.implementations import get_abbreviate_array_function, get_map_fn_over_arrays_function
72
+ from .._common.implementations import get_abbreviate_array_function, get_map_fn_over_arrays_function
72
73
  from array_api_compat import numpy as compat_module
73
74
  abbreviate_array = get_abbreviate_array_function(
74
75
  backend=compat_module,
@@ -21,9 +21,9 @@ def random_number_generator(
21
21
 
22
22
  def random_discrete_uniform(
23
23
  shape : Union[int, Tuple[int, ...]],
24
+ /,
24
25
  from_num : int,
25
26
  to_num : int,
26
- /,
27
27
  *,
28
28
  rng : RNG_TYPE,
29
29
  dtype : Optional[DTYPE_TYPE] = None,
@@ -62,7 +62,6 @@ def random_exponential(
62
62
  t = t.astype(dtype)
63
63
  return rng, t
64
64
 
65
- @classmethod
66
65
  def random_normal(
67
66
  shape: Union[int, Tuple[int, ...]],
68
67
  /,
@@ -10,10 +10,14 @@ from functools import partial
10
10
  for api_name in dir(array_api_extra):
11
11
  if api_name.startswith('_'):
12
12
  continue
13
- globals()[api_name] = partial(
14
- getattr(array_api_extra, api_name),
15
- xp=compat_module
16
- )
13
+
14
+ if api_name == 'at':
15
+ globals()[api_name] = getattr(array_api_extra, api_name)
16
+ else:
17
+ globals()[api_name] = partial(
18
+ getattr(array_api_extra, api_name),
19
+ xp=compat_module
20
+ )
17
21
 
18
22
  from ._typing import *
19
23
  from ._extra import *
@@ -25,6 +25,7 @@ __all__ = [
25
25
  "dtype_is_real_floating",
26
26
  "dtype_is_boolean",
27
27
  "abbreviate_array",
28
+ "map_fn_over_arrays",
28
29
  ]
29
30
 
30
31
  default_integer_dtype = torch.int32
@@ -95,7 +96,7 @@ def dtype_is_boolean(
95
96
  ) -> bool:
96
97
  return dtype == torch.bool
97
98
 
98
- from xbarray.common.implementations import get_abbreviate_array_function, get_map_fn_over_arrays_function
99
+ from .._common.implementations import get_abbreviate_array_function, get_map_fn_over_arrays_function
99
100
  from array_api_compat import torch as compat_module
100
101
  abbreviate_array = get_abbreviate_array_function(
101
102
  compat_module,
@@ -27,9 +27,9 @@ def random_number_generator(
27
27
 
28
28
  def random_discrete_uniform(
29
29
  shape : Union[int, Tuple[int, ...]],
30
+ /,
30
31
  from_num : int,
31
32
  to_num : int,
32
- /,
33
33
  *,
34
34
  rng : RNG_TYPE,
35
35
  dtype : Optional[DTYPE_TYPE] = None,
@@ -64,7 +64,6 @@ def random_exponential(
64
64
  t = t.exponential_(lambd, generator=rng)
65
65
  return rng, t
66
66
 
67
- @classmethod
68
67
  def random_normal(
69
68
  shape: Union[int, Tuple[int, ...]],
70
69
  /,
@@ -0,0 +1 @@
1
+ from .serialization_map import *
@@ -0,0 +1,31 @@
1
+ from typing import Type, Dict, Any, Optional, List, Callable
2
+ from types import ModuleType
3
+ import importlib
4
+
5
+ __all__ = [
6
+ "implementation_module_to_name",
7
+ "name_to_implementation_module",
8
+ ]
9
+
10
+ def implementation_module_to_name(module : ModuleType) -> str:
11
+ """
12
+ Convert a backend module to its simplified name.
13
+ """
14
+ full_name = module.__name__
15
+ if not full_name.startswith("xbarray.implementations."):
16
+ raise ValueError(f"Module {full_name} is not a valid xbarray backend module.")
17
+
18
+ submodule_name = full_name[len("xbarray.implementations"):]
19
+ if '.' in submodule_name:
20
+ raise ValueError(f"Module {full_name} is not a valid xbarray backend module.")
21
+ return submodule_name
22
+
23
+ def name_to_implementation_module(name: str) -> Type[ModuleType]:
24
+ """
25
+ Convert a simplified backend name to its module.
26
+ """
27
+ try:
28
+ return importlib.import_module(f"xbarray.implementations.{name}")
29
+ except ImportError as e:
30
+ raise ImportError(f"Could not import backend module '{name}'.") from e
31
+
xbarray/base/base.py CHANGED
@@ -40,9 +40,9 @@ class RNGBackend(Protocol[BArrayType, BDeviceType, BDtypeType, BRNGType]):
40
40
  def random_discrete_uniform(
41
41
  self,
42
42
  shape : Union[int, Tuple[int, ...]],
43
- from_num : int,
44
- to_num : int,
45
43
  /,
44
+ from_num : int,
45
+ to_num : int,
46
46
  *,
47
47
  rng : BRNGType,
48
48
  dtype : Optional[BDtypeType] = None,
@@ -0,0 +1,10 @@
1
+ from types import ModuleType
2
+ from typing import Type
3
+ from xbarray._src.serialization import implementation_module_to_name, name_to_implementation_module
4
+
5
+ class ComputeBackendImplCls(Type):
6
+ def __str__(self):
7
+ return self.simplified_name
8
+
9
+ def __repr__(self):
10
+ return self.simplified_name
xbarray/jax.py ADDED
@@ -0,0 +1,13 @@
1
+ from xbarray.cls_impl.cls_base import ComputeBackendImplCls
2
+ from ._src.implementations import jax as jax_impl
3
+
4
+ class JaxComputeBackend(metaclass=ComputeBackendImplCls):
5
+ pass
6
+
7
+ for name in dir(jax_impl):
8
+ if not name.startswith('_'):
9
+ setattr(JaxComputeBackend, name, getattr(jax_impl, name))
10
+
11
+ __all__ = [
12
+ 'JaxComputeBackend',
13
+ ]
xbarray/numpy.py ADDED
@@ -0,0 +1,13 @@
1
+ from xbarray.cls_impl.cls_base import ComputeBackendImplCls
2
+ from ._src.implementations import numpy as numpy_impl
3
+
4
+ class NumpyComputeBackend(metaclass=ComputeBackendImplCls):
5
+ pass
6
+
7
+ for name in dir(numpy_impl):
8
+ if not name.startswith('_'):
9
+ setattr(NumpyComputeBackend, name, getattr(numpy_impl, name))
10
+
11
+ __all__ = [
12
+ 'NumpyComputeBackend',
13
+ ]
xbarray/pytorch.py ADDED
@@ -0,0 +1,13 @@
1
+ from xbarray.cls_impl.cls_base import ComputeBackendImplCls
2
+ from ._src.implementations import pytorch as pytorch_impl
3
+
4
+ class PytorchComputeBackend(metaclass=ComputeBackendImplCls):
5
+ pass
6
+
7
+ for name in dir(pytorch_impl):
8
+ if not name.startswith('_'):
9
+ setattr(PytorchComputeBackend, name, getattr(pytorch_impl, name))
10
+
11
+ __all__ = [
12
+ 'PytorchComputeBackend',
13
+ ]
@@ -1,6 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xbarray
3
- Version: 0.0.1a1
3
+ Version: 0.0.1a3
4
+ Summary: Cross-backend Python array library based on the Array API Standard.
4
5
  Requires-Python: >=3.10
5
6
  License-File: LICENSE
6
7
  Requires-Dist: typing_extensions>=4.5
@@ -0,0 +1,41 @@
1
+ array_api_typing/__init__.py,sha256=5vcE63PsZ_utc7j2VmLK5evUhar-942p95HyjTiLOc0,179
2
+ array_api_typing/typing_2024_12/__init__.py,sha256=JuD2yojHl3eQI74U75tFhSX5rSy32TR5nKyi714ZfX4,347
3
+ array_api_typing/typing_2024_12/_api_constant.py,sha256=tahdzdi7vAZ3UnM8oDcUqvx2FFsMTAyUbuwgarU6K9U,676
4
+ array_api_typing/typing_2024_12/_api_fft_typing.py,sha256=i48S-9trw3s72xiCJmeCNGlJLwwOVq0kJC4lD9se_co,38641
5
+ array_api_typing/typing_2024_12/_api_linalg_typing.py,sha256=Dt5fDTwYb-GAmP7duajwPqH3zaJmwvxDEOOzdl5X0LE,48950
6
+ array_api_typing/typing_2024_12/_api_return_typing.py,sha256=7TxSBRv0H0uQ9VnixbyuEXJQnl1uESo102RsAloI9SA,2302
7
+ array_api_typing/typing_2024_12/_api_typing.py,sha256=rFuF7E6b2RrijzQBrZx6_dYEn9Yslq8FqI31L1Ccrf4,294255
8
+ array_api_typing/typing_2024_12/_array_typing.py,sha256=GMqs5LgshujRIh7i0mGtZy4Vt56FSXqBmNlBGidFRnc,57403
9
+ array_api_typing/typing_compat/__init__.py,sha256=JuD2yojHl3eQI74U75tFhSX5rSy32TR5nKyi714ZfX4,347
10
+ array_api_typing/typing_compat/_api_typing.py,sha256=RnGZFD8AEIqOCurcI68xyw7y9W9hm4yWUGf7NlJkNk0,930
11
+ array_api_typing/typing_compat/_array_typing.py,sha256=CVv91wDjjG-8kSofkqgA85qpM-3x34Zh_SNuBFegW9o,1182
12
+ array_api_typing/typing_extra/__init__.py,sha256=YfdhD-Sfk3SCfI9lHmA-PbVLzms1OFF5x0ekzI3aafk,323
13
+ array_api_typing/typing_extra/_api_typing.py,sha256=Jj_E61r35EgecWmBvAzpASV4qub5aQI_O4aL-ngEvQ8,23028
14
+ array_api_typing/typing_extra/_at.py,sha256=S7_YjOwR3a8olZWgwpLDFEfnekRufRqrtfiMLwrWjgo,2202
15
+ xbarray/__init__.py,sha256=k4Ipp7IoODqHWZ-eeBhcU7Ch8FudF8rag6KbeIurrgY,45
16
+ xbarray/jax.py,sha256=3DHAFsWvfurCI0H6loqx4LtmBov9KbIxeHGmwLKrdh4,344
17
+ xbarray/numpy.py,sha256=8thyuJZlm0MJXGx6YWlgxV9ASG-In9jn-pwUFFk7iB4,358
18
+ xbarray/pytorch.py,sha256=NEKlF_QoiOQl0T-aP_CkUxJ3HgFJEm0hmLy9v5I7qAo,372
19
+ xbarray/_src/implementations/_common/implementations.py,sha256=FyZaQZcVdSnH6CUA1LVbUJAK-EAlkz2fDfOOuVyku6Y,2655
20
+ xbarray/_src/implementations/jax/__init__.py,sha256=pkQASOOePuTel32zaSmsNIc9FqL_8Ix0P4NDXMqhupE,827
21
+ xbarray/_src/implementations/jax/_extra.py,sha256=2akggZTP2xIXe5AdVs4rNk8yCJOpTJX8rlv94SY4HJA,2525
22
+ xbarray/_src/implementations/jax/_typing.py,sha256=U9BUxHNEjFB0LHF1KMrFLbh6E5kVvpAF8bZUbLNf25E,278
23
+ xbarray/_src/implementations/jax/random.py,sha256=k6vuNLTOSUClMKI6My0-Xekkeu6hJrUyNib1TziuGag,3312
24
+ xbarray/_src/implementations/numpy/__init__.py,sha256=s_tC8UT0ULs9tpZ5JFiEIOnv5sRAVBZFM5Wh90T44Wc,640
25
+ xbarray/_src/implementations/numpy/_extra.py,sha256=p7WkiCWEl14A4W6lwo2TthKalsuAe7DuRhtQxJWf7ng,2003
26
+ xbarray/_src/implementations/numpy/_typing.py,sha256=pgjLLAipwFsIk0QdgrAA4PEvjF_ugHbzfSTbLpA__6o,241
27
+ xbarray/_src/implementations/numpy/random.py,sha256=C1z2-pMcDMRa7nKhKNTuY5LtTlu9nXvDpH1wY8mdIug,2630
28
+ xbarray/_src/implementations/pytorch/__init__.py,sha256=CIXK76WnheuEkVjdU_efCgLxBx3ABhcTdbaImRzmkNM,643
29
+ xbarray/_src/implementations/pytorch/_extra.py,sha256=XBYZEYcia3JT7Uk2PT-DyiC-_9J_Rjtg3vQB04spXc8,2888
30
+ xbarray/_src/implementations/pytorch/_typing.py,sha256=qSnNZD3IpgSoOTl3TBRBv2ifSAHOw0aR9uyzfV5KYVw,204
31
+ xbarray/_src/implementations/pytorch/random.py,sha256=p4ZDsTc--z5XslVzel-iEVDtoKizrv39_1tfR4-469o,2657
32
+ xbarray/_src/serialization/__init__.py,sha256=xnfYis9UhhvrCGtzzo7dRLb22MEpaNPAJrpljjP1YUU,32
33
+ xbarray/_src/serialization/serialization_map.py,sha256=05zfqip8qPCt-LgM_cx_zLc4y0I4DoUT7_rbU4seNhw,1048
34
+ xbarray/base/__init__.py,sha256=ERmmOxz_9mUkIuccNbzUa5Y6gVLLVDdyc4cCxbCCUbY,20
35
+ xbarray/base/base.py,sha256=V1yAXu2wUu6q50okX7JQ8onkGhHIQ0lkPkYOolwc45A,5928
36
+ xbarray/cls_impl/cls_base.py,sha256=MUvJeMm4UVW4jXwfVP02GiCzqftrAND-JYvThge4PUw,312
37
+ xbarray-0.0.1a3.dist-info/licenses/LICENSE,sha256=6P0HCOancSfch0dNycuDIe8_qwS0Id97Ih_8hjJ2PFI,1067
38
+ xbarray-0.0.1a3.dist-info/METADATA,sha256=GQAkLlOrxDmTlTR7Tsex2UQ3mjvcVKqOxKlCy1bxBGE,436
39
+ xbarray-0.0.1a3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
40
+ xbarray-0.0.1a3.dist-info/top_level.txt,sha256=VriXuFyU48Du4HQMzROSArhwqB6EZYY0n0mipgUqB9A,25
41
+ xbarray-0.0.1a3.dist-info/RECORD,,
@@ -1,35 +0,0 @@
1
- array_api_typing/__init__.py,sha256=5vcE63PsZ_utc7j2VmLK5evUhar-942p95HyjTiLOc0,179
2
- array_api_typing/typing_2024_12/__init__.py,sha256=JuD2yojHl3eQI74U75tFhSX5rSy32TR5nKyi714ZfX4,347
3
- array_api_typing/typing_2024_12/_api_constant.py,sha256=tahdzdi7vAZ3UnM8oDcUqvx2FFsMTAyUbuwgarU6K9U,676
4
- array_api_typing/typing_2024_12/_api_fft_typing.py,sha256=i48S-9trw3s72xiCJmeCNGlJLwwOVq0kJC4lD9se_co,38641
5
- array_api_typing/typing_2024_12/_api_linalg_typing.py,sha256=Dt5fDTwYb-GAmP7duajwPqH3zaJmwvxDEOOzdl5X0LE,48950
6
- array_api_typing/typing_2024_12/_api_return_typing.py,sha256=7TxSBRv0H0uQ9VnixbyuEXJQnl1uESo102RsAloI9SA,2302
7
- array_api_typing/typing_2024_12/_api_typing.py,sha256=rFuF7E6b2RrijzQBrZx6_dYEn9Yslq8FqI31L1Ccrf4,294255
8
- array_api_typing/typing_2024_12/_array_typing.py,sha256=GMqs5LgshujRIh7i0mGtZy4Vt56FSXqBmNlBGidFRnc,57403
9
- array_api_typing/typing_compat/__init__.py,sha256=JuD2yojHl3eQI74U75tFhSX5rSy32TR5nKyi714ZfX4,347
10
- array_api_typing/typing_compat/_api_typing.py,sha256=RnGZFD8AEIqOCurcI68xyw7y9W9hm4yWUGf7NlJkNk0,930
11
- array_api_typing/typing_compat/_array_typing.py,sha256=CVv91wDjjG-8kSofkqgA85qpM-3x34Zh_SNuBFegW9o,1182
12
- array_api_typing/typing_extra/__init__.py,sha256=YfdhD-Sfk3SCfI9lHmA-PbVLzms1OFF5x0ekzI3aafk,323
13
- array_api_typing/typing_extra/_api_typing.py,sha256=Jj_E61r35EgecWmBvAzpASV4qub5aQI_O4aL-ngEvQ8,23028
14
- array_api_typing/typing_extra/_at.py,sha256=S7_YjOwR3a8olZWgwpLDFEfnekRufRqrtfiMLwrWjgo,2202
15
- xbarray/__init__.py,sha256=GLdMGsm5_CnATyh19At20Hmb1MsXZvPxNvg70bHYChk,19
16
- xbarray/base/__init__.py,sha256=ERmmOxz_9mUkIuccNbzUa5Y6gVLLVDdyc4cCxbCCUbY,20
17
- xbarray/base/base.py,sha256=hqlizpZOJua9xJfPfc-RR6IAadp-OLPVnBO5cbVVHKQ,5929
18
- xbarray/common/implementations.py,sha256=FyZaQZcVdSnH6CUA1LVbUJAK-EAlkz2fDfOOuVyku6Y,2655
19
- xbarray/jax/__init__.py,sha256=J7yN6ytn1fm2qKHZVm9OTt30ItcKMnKnuTxbZgnGKaE,662
20
- xbarray/jax/_extra.py,sha256=JHZBaGZUXPLCRFdaDBXUjwGD-D4DlLYI0NsxAlGs3FE,2504
21
- xbarray/jax/_typing.py,sha256=U9BUxHNEjFB0LHF1KMrFLbh6E5kVvpAF8bZUbLNf25E,278
22
- xbarray/jax/random.py,sha256=owIxqs67MOMXaMN8uwmCu9aLd1Yss24sl9rib4R5Qec,3325
23
- xbarray/numpy/__init__.py,sha256=trZhNZYIHe0QkQYRB1ZJW-OlteYf_9RVUR3yks6S2iI,523
24
- xbarray/numpy/_extra.py,sha256=wbzpcVL4UV5TVQlmO73sUwWcBgMiVXFvfCLlCuiB0Uk,1982
25
- xbarray/numpy/_typing.py,sha256=pgjLLAipwFsIk0QdgrAA4PEvjF_ugHbzfSTbLpA__6o,241
26
- xbarray/numpy/random.py,sha256=8BaxX_cpzvF7iG0yR0ws3IbG14OJPsX60Gv-1AStplA,2643
27
- xbarray/pytorch/__init__.py,sha256=wfUkSyrJpDlO2Zggza7HM5SCdYKUBfySO3K71itOHkA,526
28
- xbarray/pytorch/_extra.py,sha256=VawcjDe0dxiIzvTjIncGxwPPoTw7hWZAPOlZSdDSKl0,2867
29
- xbarray/pytorch/_typing.py,sha256=qSnNZD3IpgSoOTl3TBRBv2ifSAHOw0aR9uyzfV5KYVw,204
30
- xbarray/pytorch/random.py,sha256=OJ-YvS2owX5LWdsIzXW-N2YqPhN84Rroco7O5qIMmrg,2670
31
- xbarray-0.0.1a1.dist-info/licenses/LICENSE,sha256=6P0HCOancSfch0dNycuDIe8_qwS0Id97Ih_8hjJ2PFI,1067
32
- xbarray-0.0.1a1.dist-info/METADATA,sha256=u2-YoX051dU1Po1mFspLSuIEMmlPdhlWOlNwvbp-8PE,359
33
- xbarray-0.0.1a1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
34
- xbarray-0.0.1a1.dist-info/top_level.txt,sha256=VriXuFyU48Du4HQMzROSArhwqB6EZYY0n0mipgUqB9A,25
35
- xbarray-0.0.1a1.dist-info/RECORD,,
File without changes