brainstate 0.0.1.1.post20240802__py2.py3-none-any.whl → 0.0.1.1.post20240804__py2.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.
- brainstate/_module.py +21 -23
- brainstate/_state.py +4 -5
- brainstate/functional/_activations.py +1 -1
- brainstate/functional/_others.py +1 -2
- brainstate/init/_generic.py +1 -1
- brainstate/init/_random_inits.py +1 -1
- brainstate/mixin.py +4 -3
- brainstate/random.py +2 -3
- brainstate/transform/_jit_error_test.py +1 -1
- brainstate/transform/_make_jaxpr.py +1 -1
- brainstate/typing.py +150 -2
- {brainstate-0.0.1.1.post20240802.dist-info → brainstate-0.0.1.1.post20240804.dist-info}/METADATA +1 -1
- {brainstate-0.0.1.1.post20240802.dist-info → brainstate-0.0.1.1.post20240804.dist-info}/RECORD +16 -16
- {brainstate-0.0.1.1.post20240802.dist-info → brainstate-0.0.1.1.post20240804.dist-info}/LICENSE +0 -0
- {brainstate-0.0.1.1.post20240802.dist-info → brainstate-0.0.1.1.post20240804.dist-info}/WHEEL +0 -0
- {brainstate-0.0.1.1.post20240802.dist-info → brainstate-0.0.1.1.post20240804.dist-info}/top_level.txt +0 -0
brainstate/_module.py
CHANGED
@@ -61,11 +61,9 @@ from ._state import State, StateDictManager, visible_state_dict
|
|
61
61
|
from ._utils import set_module_as
|
62
62
|
from .mixin import Mixin, Mode, DelayedInit, JointTypes, Batching, UpdateReturn
|
63
63
|
from .transform import jit_error
|
64
|
+
from .typing import Size, ArrayLike, PyTree
|
64
65
|
from .util import unique_name, DictManager, get_unique_name
|
65
66
|
|
66
|
-
Shape = Union[int, Sequence[int]]
|
67
|
-
PyTree = Any
|
68
|
-
ArrayLike = jax.typing.ArrayLike
|
69
67
|
|
70
68
|
delay_identifier = '_*_delay_of_'
|
71
69
|
_DELAY_ROTATE = 'rotation'
|
@@ -805,7 +803,7 @@ class Dynamics(ExtendedUpdateWithBA, ReceiveInputProj, UpdateReturn):
|
|
805
803
|
|
806
804
|
def __init__(
|
807
805
|
self,
|
808
|
-
size:
|
806
|
+
size: Size,
|
809
807
|
keep_size: bool = False,
|
810
808
|
name: Optional[str] = None,
|
811
809
|
mode: Optional[Mode] = None,
|
@@ -1275,25 +1273,25 @@ class Delay(ExtendedUpdateWithBA, DelayedInit):
|
|
1275
1273
|
|
1276
1274
|
if self.interp_method == _INTERP_LINEAR: # "linear" interpolation
|
1277
1275
|
# def _interp(target):
|
1278
|
-
|
1279
|
-
|
1280
|
-
|
1281
|
-
|
1282
|
-
|
1283
|
-
|
1284
|
-
|
1285
|
-
|
1286
|
-
|
1287
|
-
|
1288
|
-
|
1289
|
-
|
1290
|
-
|
1291
|
-
|
1292
|
-
|
1293
|
-
|
1294
|
-
|
1295
|
-
|
1296
|
-
|
1276
|
+
# if len(indices) > 0:
|
1277
|
+
# raise NotImplementedError('The slicing indices are not supported in the linear interpolation.')
|
1278
|
+
# if self.delay_method == _DELAY_ROTATE:
|
1279
|
+
# i = environ.get(environ.I, desc='The time step index.')
|
1280
|
+
# _interp_fun = partial(jnp.interp, period=self.max_length)
|
1281
|
+
# for dim in range(1, target.ndim, 1):
|
1282
|
+
# _interp_fun = jax.vmap(_interp_fun, in_axes=(None, None, dim), out_axes=dim - 1)
|
1283
|
+
# di = i - jnp.arange(self.max_length)
|
1284
|
+
# delay_idx = jnp.asarray(di % self.max_length, dtype=jnp.int32)
|
1285
|
+
# return _interp_fun(float_time_step, delay_idx, target)
|
1286
|
+
#
|
1287
|
+
# elif self.delay_method == _DELAY_CONCAT:
|
1288
|
+
# _interp_fun = partial(jnp.interp, period=self.max_length)
|
1289
|
+
# for dim in range(1, target.ndim, 1):
|
1290
|
+
# _interp_fun = jax.vmap(_interp_fun, in_axes=(None, None, dim), out_axes=dim - 1)
|
1291
|
+
# return _interp_fun(float_time_step, jnp.arange(self.max_length), target)
|
1292
|
+
#
|
1293
|
+
# else:
|
1294
|
+
# raise ValueError(f'Unknown delay updating method "{self.delay_method}"')
|
1297
1295
|
# return jax.tree.map(_interp, self.history.value)
|
1298
1296
|
|
1299
1297
|
data_at_t0 = self.retrieve_at_step(jnp.asarray(jnp.floor(float_time_step), dtype=jnp.int32), *indices)
|
brainstate/_state.py
CHANGED
@@ -22,11 +22,9 @@ import numpy as np
|
|
22
22
|
from jax.api_util import shaped_abstractify
|
23
23
|
from jax.extend import source_info_util
|
24
24
|
|
25
|
+
from .typing import ArrayLike, PyTree
|
25
26
|
from .util import DictManager
|
26
27
|
|
27
|
-
PyTree = Any
|
28
|
-
max_int = np.iinfo(np.int32)
|
29
|
-
|
30
28
|
__all__ = [
|
31
29
|
'State', 'ShortTermState', 'LongTermState', 'ParamState',
|
32
30
|
'StateDictManager',
|
@@ -36,6 +34,7 @@ __all__ = [
|
|
36
34
|
]
|
37
35
|
|
38
36
|
_pytree_registered_objects = set()
|
37
|
+
max_int = np.iinfo(np.int32)
|
39
38
|
|
40
39
|
|
41
40
|
def _register_pytree_cls(cls):
|
@@ -110,7 +109,7 @@ class State(object):
|
|
110
109
|
__module__ = 'brainstate'
|
111
110
|
__slots__ = ('_value', '_name', '_tree', '_level', '_source_info', '_check_tree')
|
112
111
|
|
113
|
-
def __init__(self, value: PyTree, name: Optional[str] = None):
|
112
|
+
def __init__(self, value: PyTree[ArrayLike], name: Optional[str] = None):
|
114
113
|
if isinstance(value, State):
|
115
114
|
value = value.value
|
116
115
|
self._value = value
|
@@ -135,7 +134,7 @@ class State(object):
|
|
135
134
|
self._name = name
|
136
135
|
|
137
136
|
@property
|
138
|
-
def value(self) -> PyTree:
|
137
|
+
def value(self) -> PyTree[ArrayLike]:
|
139
138
|
"""
|
140
139
|
The data and its value.
|
141
140
|
"""
|
brainstate/functional/_others.py
CHANGED
brainstate/init/_generic.py
CHANGED
brainstate/init/_random_inits.py
CHANGED
brainstate/mixin.py
CHANGED
@@ -15,14 +15,15 @@
|
|
15
15
|
|
16
16
|
# -*- coding: utf-8 -*-
|
17
17
|
|
18
|
-
from typing import Sequence, Optional, TypeVar
|
18
|
+
from typing import Sequence, Optional, TypeVar
|
19
19
|
from typing import (_SpecialForm, _type_check, _remove_dups_flatten, _UnionGenericAlias)
|
20
20
|
|
21
|
-
|
22
|
-
PyTree = Any
|
21
|
+
from .typing import PyTree
|
23
22
|
|
23
|
+
T = TypeVar('T')
|
24
24
|
State = None
|
25
25
|
|
26
|
+
|
26
27
|
__all__ = [
|
27
28
|
'Mixin',
|
28
29
|
'DelayedInit',
|
brainstate/random.py
CHANGED
@@ -4809,10 +4809,9 @@ def _size2shape(size):
|
|
4809
4809
|
|
4810
4810
|
|
4811
4811
|
def _check_shape(name, shape, *param_shapes):
|
4812
|
-
shape = core.as_named_shape(shape)
|
4813
4812
|
if param_shapes:
|
4814
|
-
shape_ = lax.broadcast_shapes(shape
|
4815
|
-
if shape
|
4813
|
+
shape_ = lax.broadcast_shapes(shape, *param_shapes)
|
4814
|
+
if shape != shape_:
|
4816
4815
|
msg = ("{} parameter shapes must be broadcast-compatible with shape "
|
4817
4816
|
"argument, and the result of broadcasting the shapes must equal "
|
4818
4817
|
"the shape argument, but got result {} for shape argument {}.")
|
brainstate/typing.py
CHANGED
@@ -14,13 +14,16 @@
|
|
14
14
|
# ==============================================================================
|
15
15
|
|
16
16
|
|
17
|
-
|
17
|
+
import functools as ft
|
18
|
+
import typing
|
19
|
+
from typing import Sequence, Protocol, Union, Any, Generic, TypeVar
|
18
20
|
|
19
21
|
import brainunit as bu
|
20
22
|
import jax
|
21
23
|
import numpy as np
|
22
24
|
|
23
25
|
__all__ = [
|
26
|
+
'PyTree',
|
24
27
|
'Size',
|
25
28
|
'Axes',
|
26
29
|
'SeedOrKey',
|
@@ -29,6 +32,151 @@ __all__ = [
|
|
29
32
|
'DTypeLike',
|
30
33
|
]
|
31
34
|
|
35
|
+
_T = TypeVar("_T")
|
36
|
+
|
37
|
+
|
38
|
+
class _FakePyTree(Generic[_T]):
|
39
|
+
pass
|
40
|
+
|
41
|
+
|
42
|
+
_FakePyTree.__name__ = "PyTree"
|
43
|
+
_FakePyTree.__qualname__ = "PyTree"
|
44
|
+
_FakePyTree.__module__ = "builtins"
|
45
|
+
|
46
|
+
|
47
|
+
class _MetaPyTree(type):
|
48
|
+
def __call__(self, *args, **kwargs):
|
49
|
+
raise RuntimeError("PyTree cannot be instantiated")
|
50
|
+
|
51
|
+
# Can't return a generic (e.g. _FakePyTree[item]) because generic aliases don't do
|
52
|
+
# the custom __instancecheck__ that we want.
|
53
|
+
# We can't add that __instancecheck__ via subclassing, e.g.
|
54
|
+
# type("PyTree", (Generic[_T],), {}), because dynamic subclassing of typeforms
|
55
|
+
# isn't allowed.
|
56
|
+
# Likewise we can't do types.new_class("PyTree", (Generic[_T],), {}) because that
|
57
|
+
# has __module__ "types", e.g. we get types.PyTree[int].
|
58
|
+
@ft.lru_cache(maxsize=None)
|
59
|
+
def __getitem__(cls, item):
|
60
|
+
if isinstance(item, tuple):
|
61
|
+
if len(item) == 2:
|
62
|
+
|
63
|
+
class X(PyTree):
|
64
|
+
leaftype = item[0]
|
65
|
+
structure = item[1].strip()
|
66
|
+
|
67
|
+
if not isinstance(X.structure, str):
|
68
|
+
raise ValueError(
|
69
|
+
"The structure annotation `struct` in "
|
70
|
+
"`brainstate.typing.PyTree[leaftype, struct]` must be be a string, "
|
71
|
+
f"e.g. `brainstate.typing.PyTree[leaftype, 'T']`. Got '{X.structure}'."
|
72
|
+
)
|
73
|
+
pieces = X.structure.split()
|
74
|
+
if len(pieces) == 0:
|
75
|
+
raise ValueError(
|
76
|
+
"The string `struct` in `brainstate.typing.PyTree[leaftype, struct]` "
|
77
|
+
"cannot be the empty string."
|
78
|
+
)
|
79
|
+
for piece_index, piece in enumerate(pieces):
|
80
|
+
if (piece_index == 0) or (piece_index == len(pieces) - 1):
|
81
|
+
if piece == "...":
|
82
|
+
continue
|
83
|
+
if not piece.isidentifier():
|
84
|
+
raise ValueError(
|
85
|
+
"The string `struct` in "
|
86
|
+
"`brainstate.typing.PyTree[leaftype, struct]` must be be a "
|
87
|
+
"whitespace-separated sequence of identifiers, e.g. "
|
88
|
+
"`brainstate.typing.PyTree[leaftype, 'T']` or "
|
89
|
+
"`brainstate.typing.PyTree[leaftype, 'foo bar']`.\n"
|
90
|
+
"(Here, 'identifier' is used in the same sense as in "
|
91
|
+
"regular Python, i.e. a valid variable name.)\n"
|
92
|
+
f"Got piece '{piece}' in overall structure '{X.structure}'."
|
93
|
+
)
|
94
|
+
name = str(_FakePyTree[item[0]])[:-1] + ', "' + item[1].strip() + '"]'
|
95
|
+
else:
|
96
|
+
raise ValueError(
|
97
|
+
"The subscript `foo` in `brainstate.typing.PyTree[foo]` must either be a "
|
98
|
+
"leaf type, e.g. `PyTree[int]`, or a 2-tuple of leaf and "
|
99
|
+
"structure, e.g. `PyTree[int, 'T']`. Received a tuple of length "
|
100
|
+
f"{len(item)}."
|
101
|
+
)
|
102
|
+
else:
|
103
|
+
name = str(_FakePyTree[item])
|
104
|
+
|
105
|
+
class X(PyTree):
|
106
|
+
leaftype = item
|
107
|
+
structure = None
|
108
|
+
|
109
|
+
X.__name__ = name
|
110
|
+
X.__qualname__ = name
|
111
|
+
if getattr(typing, "GENERATING_DOCUMENTATION", False):
|
112
|
+
X.__module__ = "builtins"
|
113
|
+
else:
|
114
|
+
X.__module__ = "brainstate.typing"
|
115
|
+
return X
|
116
|
+
|
117
|
+
|
118
|
+
# Can't do `class PyTree(Generic[_T]): ...` because we need to override the
|
119
|
+
# instancecheck for PyTree[foo], but subclassing
|
120
|
+
# `type(Generic[int])`, i.e. `typing._GenericAlias` is disallowed.
|
121
|
+
PyTree = _MetaPyTree("PyTree", (), {})
|
122
|
+
if getattr(typing, "GENERATING_DOCUMENTATION", False):
|
123
|
+
PyTree.__module__ = "builtins"
|
124
|
+
else:
|
125
|
+
PyTree.__module__ = "brainstate.typing"
|
126
|
+
PyTree.__doc__ = """Represents a PyTree.
|
127
|
+
|
128
|
+
Annotations of the following sorts are supported:
|
129
|
+
```python
|
130
|
+
a: PyTree
|
131
|
+
b: PyTree[LeafType]
|
132
|
+
c: PyTree[LeafType, "T"]
|
133
|
+
d: PyTree[LeafType, "S T"]
|
134
|
+
e: PyTree[LeafType, "... T"]
|
135
|
+
f: PyTree[LeafType, "T ..."]
|
136
|
+
```
|
137
|
+
|
138
|
+
These correspond to:
|
139
|
+
|
140
|
+
a. A plain `PyTree` can be used an annotation, in which case `PyTree` is simply a
|
141
|
+
suggestively-named alternative to `Any`.
|
142
|
+
([By definition all types are PyTrees.](https://jax.readthedocs.io/en/latest/pytrees.html))
|
143
|
+
|
144
|
+
b. `PyTree[LeafType]` denotes a PyTree all of whose leaves match `LeafType`. For
|
145
|
+
example, `PyTree[int]` or `PyTree[Union[str, Float32[Array, "b c"]]]`.
|
146
|
+
|
147
|
+
c. A structure name can also be passed. In this case
|
148
|
+
`jax.tree_util.tree_structure(...)` will be called, and bound to the structure name.
|
149
|
+
This can be used to mark that multiple PyTrees all have the same structure:
|
150
|
+
```python
|
151
|
+
def f(x: PyTree[int, "T"], y: PyTree[int, "T"]):
|
152
|
+
...
|
153
|
+
```
|
154
|
+
|
155
|
+
d. A composite structure can be declared. In this case the variable must have a PyTree
|
156
|
+
structure each to the composition of multiple previously-bound PyTree structures.
|
157
|
+
For example:
|
158
|
+
```python
|
159
|
+
def f(x: PyTree[int, "T"], y: PyTree[int, "S"], z: PyTree[int, "S T"]):
|
160
|
+
...
|
161
|
+
|
162
|
+
x = (1, 2)
|
163
|
+
y = {"key": 3}
|
164
|
+
z = {"key": (4, 5)} # structure is the composition of the structures of `y` and `z`
|
165
|
+
f(x, y, z)
|
166
|
+
```
|
167
|
+
When performing runtime type-checking, all the individual pieces must have already
|
168
|
+
been bound to structures, otherwise the composite structure check will throw an error.
|
169
|
+
|
170
|
+
e. A structure can begin with a `...`, to denote that the lower levels of the PyTree
|
171
|
+
must match the declared structure, but the upper levels can be arbitrary. As in the
|
172
|
+
previous case, all named pieces must already have been seen and their structures
|
173
|
+
bound.
|
174
|
+
|
175
|
+
f. A structure can end with a `...`, to denote that the PyTree must be a prefix of the
|
176
|
+
declared structure, but the lower levels can be arbitrary. As in the previous two
|
177
|
+
cases, all named pieces must already have been seen and their structures bound.
|
178
|
+
""" # noqa: E501
|
179
|
+
|
32
180
|
Size = Union[int, Sequence[int]]
|
33
181
|
Axes = Union[int, Sequence[int]]
|
34
182
|
SeedOrKey = Union[int, jax.Array, np.ndarray]
|
@@ -44,7 +192,7 @@ ArrayLike = Union[
|
|
44
192
|
np.ndarray, # NumPy array type
|
45
193
|
np.bool_, np.number, # NumPy scalar types
|
46
194
|
bool, int, float, complex, # Python scalar types
|
47
|
-
bu.Quantity, #
|
195
|
+
bu.Quantity, # Quantity
|
48
196
|
]
|
49
197
|
|
50
198
|
# --- Dtype --- #
|
{brainstate-0.0.1.1.post20240802.dist-info → brainstate-0.0.1.1.post20240804.dist-info}/RECORD
RENAMED
@@ -1,27 +1,27 @@
|
|
1
1
|
brainstate/__init__.py,sha256=oxslZrm6wxtBQDqwJFb2BaAKZFmnp4d_esDkaeuGMWE,1410
|
2
|
-
brainstate/_module.py,sha256=
|
2
|
+
brainstate/_module.py,sha256=YJDp9aD38wBa_lY6BojWjWV9LJ2aFMAMYh-KZe5a4eM,52443
|
3
3
|
brainstate/_module_test.py,sha256=oQaoaZBTo1o3wHrMEJTInQCc7RdcVs1gcfQGvdSb1SI,7843
|
4
4
|
brainstate/_random_for_unit.py,sha256=eW4NJkX27VCCNWUwAlyt2otkeEthGKOpUoX6XJ6i95Y,1946
|
5
|
-
brainstate/_state.py,sha256=
|
5
|
+
brainstate/_state.py,sha256=C0widCOj_ca6zfqh95jzFXf_G5vi0hJyuQ5GIqEqOUs,12102
|
6
6
|
brainstate/_state_test.py,sha256=HDdipndRLhEHWEdTmyT1ayEBkbv6qJKykfCWKI6yJ_E,1253
|
7
7
|
brainstate/_utils.py,sha256=RLorgGJkt2BhbX4C-ygd-PPG0wfcGCghjSP93sRvzqM,833
|
8
8
|
brainstate/environ.py,sha256=LwRwnFaTbv8l7nHRIbSV46WzcN7pGLQFhT_xDUox2yA,10240
|
9
|
-
brainstate/mixin.py,sha256=
|
9
|
+
brainstate/mixin.py,sha256=OumTTSVyYSbtudjfS_MRThsBaeVJ_0JggeMClY7xtBA,10758
|
10
10
|
brainstate/mixin_test.py,sha256=-Ej9oUOu8O1M4oy37SVMj7xNRYhHHyAHwrjS_aISayo,2923
|
11
|
-
brainstate/random.py,sha256=
|
11
|
+
brainstate/random.py,sha256=rqwSsiUoeZwxhk9ot8NnOJA8iWMdZB0HaHOVuweJdZQ,188387
|
12
12
|
brainstate/random_test.py,sha256=cCeuYvlZkCS2_RgG0vipZFNSHG8b-uJ7SXM9SZDCYQM,17866
|
13
13
|
brainstate/surrogate.py,sha256=1kgbn82GSlpReIytIVl29yozk75gkdZv0gTBlixQ4C4,43798
|
14
|
-
brainstate/typing.py,sha256=
|
14
|
+
brainstate/typing.py,sha256=6BlkLSN5TiaNO49q8b0OYyzcuSxmdoG3noIJTbyhE3s,7895
|
15
15
|
brainstate/util.py,sha256=y-6eX1z3EMyg6pfZt4YdDalOnJ3HDAT1IPBCJDp-gQI,19876
|
16
16
|
brainstate/functional/__init__.py,sha256=j6-3Er4fgqWpvntzYCZVB3e5hoz-Z3aqvapITCuDri0,1107
|
17
|
-
brainstate/functional/_activations.py,sha256=
|
17
|
+
brainstate/functional/_activations.py,sha256=gvZ9E1-TsEUlyO7Om0eYzlM9DF-14_A32-gta1mjGo4,17798
|
18
18
|
brainstate/functional/_normalization.py,sha256=IxE580waloZylZVXcpUUK4bWQdlE6oSPfafaKYfDkbg,2169
|
19
|
-
brainstate/functional/_others.py,sha256=
|
19
|
+
brainstate/functional/_others.py,sha256=1Epp75RkGYobMc2kHISZuS-_xnTFk3zHb1UHadwugCo,1711
|
20
20
|
brainstate/functional/_spikes.py,sha256=70qGvo4B--QtxfJMjLwGmk9pVsf2x2YNEEgjT-il_Jw,2574
|
21
21
|
brainstate/init/__init__.py,sha256=R1dHgub47o-WJM9QkFLc7x_Q7GsyaKKDtrRHTFPpC5g,1097
|
22
22
|
brainstate/init/_base.py,sha256=jRTmfoUsH_315vW9YMZzyIn2KDAAsv56SplBnvOyBW0,1148
|
23
|
-
brainstate/init/_generic.py,sha256=
|
24
|
-
brainstate/init/_random_inits.py,sha256=
|
23
|
+
brainstate/init/_generic.py,sha256=LB7IQfswOG6X-q0QX5N8T5vZmxdygetsSBQ6iXlZ0oU,7324
|
24
|
+
brainstate/init/_random_inits.py,sha256=LsfvKSX4wsR7Kh5jgKgdyXTCEEa5Nn_iYcp_2GgLQKY,16030
|
25
25
|
brainstate/init/_regular_inits.py,sha256=u77aSM0BkK9VULFJQZ1lIEYA_sJJzEZBTEttBSJ79RI,3090
|
26
26
|
brainstate/nn/__init__.py,sha256=YJHoI8cXKVRS8f2vUl3Zegp5wm0svMz3qo9JmQJiMQk,2162
|
27
27
|
brainstate/nn/_base.py,sha256=lzbZpku3Q2arH6ZaAwjs6bhbV0RcFChxo2UcpnX5t84,8481
|
@@ -54,13 +54,13 @@ brainstate/transform/_control.py,sha256=0NFUGLIenqKuBhBiTmY0YgCrl2GI1ZbuWMW0DSOo
|
|
54
54
|
brainstate/transform/_controls_test.py,sha256=mPUa_qmXXVxDziAJrPWRBwsGnc3cHR9co08eJB_fJwA,7648
|
55
55
|
brainstate/transform/_jit.py,sha256=sjQHFV8Tt75fpdl12jjPRDPT92_IZxBBJAG4gapdbNQ,11471
|
56
56
|
brainstate/transform/_jit_error.py,sha256=8rGRx8dtvmPWmHVOsfz30EUMXSix-m2PKM3Ni_9-_7I,4829
|
57
|
-
brainstate/transform/_jit_error_test.py,sha256=
|
57
|
+
brainstate/transform/_jit_error_test.py,sha256=GAVGL0eNJ5Fu0lHABCGc-nLfa_0x0tw_VPfURB-nhLc,1862
|
58
58
|
brainstate/transform/_jit_test.py,sha256=5ltT7izh_OS9dcHnRymmVhq01QomjwZGdA8XzwJRLb4,2868
|
59
|
-
brainstate/transform/_make_jaxpr.py,sha256=
|
59
|
+
brainstate/transform/_make_jaxpr.py,sha256=ZkrOZu4_0xcILuPUA3RFEkorJ-xbDuDtXorJI_qVThE,30450
|
60
60
|
brainstate/transform/_make_jaxpr_test.py,sha256=K3vRUBroDTCCx0lnmhgHtgrlWvWglJO2f1K2phTvU70,3819
|
61
61
|
brainstate/transform/_progress_bar.py,sha256=VGoRZPRBmB8ELNwLc6c7S8QhUUTvn0FY46IbBm9cuYM,3502
|
62
|
-
brainstate-0.0.1.1.
|
63
|
-
brainstate-0.0.1.1.
|
64
|
-
brainstate-0.0.1.1.
|
65
|
-
brainstate-0.0.1.1.
|
66
|
-
brainstate-0.0.1.1.
|
62
|
+
brainstate-0.0.1.1.post20240804.dist-info/LICENSE,sha256=VZe9u1jgUL2eCY6ZPOYgdb8KCblCHt8ECdbtJid6e1s,11550
|
63
|
+
brainstate-0.0.1.1.post20240804.dist-info/METADATA,sha256=RTuqQrR0-syn5SyxoyEbfbdAUpXBRxNMzpaqnVM2cqQ,3807
|
64
|
+
brainstate-0.0.1.1.post20240804.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110
|
65
|
+
brainstate-0.0.1.1.post20240804.dist-info/top_level.txt,sha256=eQbGgKn0ptx7FDWuua0V0wr4K1VHi2iOUCYo3fUQBRA,11
|
66
|
+
brainstate-0.0.1.1.post20240804.dist-info/RECORD,,
|
{brainstate-0.0.1.1.post20240802.dist-info → brainstate-0.0.1.1.post20240804.dist-info}/LICENSE
RENAMED
File without changes
|
{brainstate-0.0.1.1.post20240802.dist-info → brainstate-0.0.1.1.post20240804.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|