brainstate 0.1.0.post20250206__py2.py3-none-any.whl → 0.1.0.post20250209__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/_state.py +52 -93
- brainstate/compile/_jit.py +1 -0
- brainstate/compile/_make_jaxpr.py +2 -2
- brainstate/compile/_util.py +1 -1
- brainstate/graph/_graph_node.py +2 -2
- brainstate/graph/_graph_operation.py +1 -1
- brainstate/nn/_module.py +2 -1
- brainstate/util/_dict.py +84 -6
- brainstate/util/_pretty_repr.py +9 -5
- {brainstate-0.1.0.post20250206.dist-info → brainstate-0.1.0.post20250209.dist-info}/METADATA +1 -1
- {brainstate-0.1.0.post20250206.dist-info → brainstate-0.1.0.post20250209.dist-info}/RECORD +14 -14
- {brainstate-0.1.0.post20250206.dist-info → brainstate-0.1.0.post20250209.dist-info}/LICENSE +0 -0
- {brainstate-0.1.0.post20250206.dist-info → brainstate-0.1.0.post20250209.dist-info}/WHEEL +0 -0
- {brainstate-0.1.0.post20250206.dist-info → brainstate-0.1.0.post20250209.dist-info}/top_level.txt +0 -0
brainstate/_state.py
CHANGED
@@ -19,8 +19,10 @@ import contextlib
|
|
19
19
|
import dataclasses
|
20
20
|
import threading
|
21
21
|
from functools import wraps, partial
|
22
|
-
from typing import (
|
23
|
-
|
22
|
+
from typing import (
|
23
|
+
Any, Union, Callable, Generic, Mapping,
|
24
|
+
TypeVar, Optional, TYPE_CHECKING, Tuple, Dict, List, Sequence
|
25
|
+
)
|
24
26
|
|
25
27
|
import jax
|
26
28
|
import numpy as np
|
@@ -28,7 +30,7 @@ from jax.api_util import shaped_abstractify
|
|
28
30
|
from jax.extend import source_info_util
|
29
31
|
|
30
32
|
from brainstate.typing import ArrayLike, PyTree, Missing
|
31
|
-
from brainstate.util import DictManager,
|
33
|
+
from brainstate.util import DictManager, PrettyReprTree
|
32
34
|
|
33
35
|
__all__ = [
|
34
36
|
'State', 'ShortTermState', 'LongTermState', 'HiddenState', 'ParamState', 'TreefyState',
|
@@ -184,7 +186,7 @@ def _get_trace_stack_level() -> int:
|
|
184
186
|
return len(TRACE_CONTEXT.state_stack)
|
185
187
|
|
186
188
|
|
187
|
-
class State(Generic[A],
|
189
|
+
class State(Generic[A], PrettyReprTree):
|
188
190
|
"""
|
189
191
|
The pointer to specify the dynamical data.
|
190
192
|
|
@@ -261,8 +263,9 @@ class State(Generic[A], PrettyRepr):
|
|
261
263
|
"""
|
262
264
|
The data and its value.
|
263
265
|
"""
|
266
|
+
self.check_if_deleted()
|
264
267
|
record_state_value_read(self)
|
265
|
-
return self.
|
268
|
+
return self._value
|
266
269
|
|
267
270
|
@value.setter
|
268
271
|
def value(self, v) -> None:
|
@@ -272,14 +275,7 @@ class State(Generic[A], PrettyRepr):
|
|
272
275
|
Args:
|
273
276
|
v: The value.
|
274
277
|
"""
|
275
|
-
|
276
|
-
|
277
|
-
if isinstance(v, State): # value checking
|
278
|
-
raise ValueError('Cannot set value to a State, ' 'use `copy_from` method instead')
|
279
|
-
self._check_value_tree(v) # check the tree structure
|
280
|
-
record_state_value_write(self) # record the value by the stack (>= level)
|
281
|
-
self._been_writen = True # set the flag
|
282
|
-
self._write_value(v) # write the value
|
278
|
+
self.write_value(v)
|
283
279
|
|
284
280
|
@property
|
285
281
|
def stack_level(self):
|
@@ -301,18 +297,17 @@ class State(Generic[A], PrettyRepr):
|
|
301
297
|
"""
|
302
298
|
self._level = level
|
303
299
|
|
304
|
-
def
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
self.
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
"""
|
313
|
-
The interface to customize the value writing.
|
314
|
-
"""
|
300
|
+
def write_value(self, v) -> None:
|
301
|
+
# value checking
|
302
|
+
if isinstance(v, State):
|
303
|
+
raise ValueError('Cannot set value to a State, ' 'use `copy_from` method instead')
|
304
|
+
self._check_value_tree(v)
|
305
|
+
# write the value by the stack (>= level)
|
306
|
+
record_state_value_write(self)
|
307
|
+
# set the value
|
315
308
|
self._value = v
|
309
|
+
# set flag
|
310
|
+
self._been_writen = True
|
316
311
|
|
317
312
|
def restore_value(self, v) -> None:
|
318
313
|
"""
|
@@ -434,45 +429,25 @@ class State(Generic[A], PrettyRepr):
|
|
434
429
|
del metadata['_value']
|
435
430
|
return TreefyState(type(self), self._value, **metadata)
|
436
431
|
|
437
|
-
def
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
if name == '_value':
|
457
|
-
name = 'value'
|
458
|
-
if name == '_name':
|
459
|
-
if value is None:
|
460
|
-
continue
|
461
|
-
else:
|
462
|
-
name = 'name'
|
463
|
-
if name == 'tag' and value is None:
|
464
|
-
continue
|
465
|
-
if name in ['_level', '_source_info', '_been_writen']:
|
466
|
-
continue
|
467
|
-
children[name] = value
|
468
|
-
|
469
|
-
import treescope # type: ignore[import-not-found,import-untyped]
|
470
|
-
return treescope.repr_lib.render_object_constructor(
|
471
|
-
object_type=type(self),
|
472
|
-
attributes=children,
|
473
|
-
path=path,
|
474
|
-
subtree_renderer=subtree_renderer,
|
475
|
-
)
|
432
|
+
def __pretty_repr_item__(self, k, v):
|
433
|
+
if k in ['_level', '_source_info', '_been_writen']:
|
434
|
+
return None, None
|
435
|
+
if k == '_value':
|
436
|
+
return 'value', v
|
437
|
+
|
438
|
+
if k == '_name':
|
439
|
+
if self.name is None:
|
440
|
+
return None, None
|
441
|
+
else:
|
442
|
+
return 'name', v
|
443
|
+
|
444
|
+
if k == 'tag':
|
445
|
+
if self.tag is None:
|
446
|
+
return None, None
|
447
|
+
else:
|
448
|
+
return 'tag', v
|
449
|
+
|
450
|
+
return k, v
|
476
451
|
|
477
452
|
def __eq__(self, other: object) -> bool:
|
478
453
|
return type(self) is type(other) and vars(other) == vars(self)
|
@@ -809,7 +784,7 @@ class StateTraceStack(Generic[A]):
|
|
809
784
|
return StateTraceStack().merge(self, other)
|
810
785
|
|
811
786
|
|
812
|
-
class TreefyState(Generic[A],
|
787
|
+
class TreefyState(Generic[A], PrettyReprTree):
|
813
788
|
"""
|
814
789
|
The state as a pytree.
|
815
790
|
"""
|
@@ -831,35 +806,19 @@ class TreefyState(Generic[A], PrettyRepr):
|
|
831
806
|
|
832
807
|
def __delattr__(self, name: str) -> None: ...
|
833
808
|
|
834
|
-
def
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
|
845
|
-
|
846
|
-
|
847
|
-
yield PrettyAttr(name, repr(value))
|
848
|
-
|
849
|
-
def __treescope_repr__(self, path, subtree_renderer):
|
850
|
-
children = {'type': self.type}
|
851
|
-
for name, value in vars(self).items():
|
852
|
-
if name == 'type':
|
853
|
-
continue
|
854
|
-
children[name] = value
|
855
|
-
|
856
|
-
import treescope # type: ignore[import-not-found,import-untyped]
|
857
|
-
return treescope.repr_lib.render_object_constructor(
|
858
|
-
object_type=type(self),
|
859
|
-
attributes=children,
|
860
|
-
path=path,
|
861
|
-
subtree_renderer=subtree_renderer,
|
862
|
-
)
|
809
|
+
def __pretty_repr_item__(self, k, v):
|
810
|
+
if k in ['_level', '_source_info', '_been_writen']:
|
811
|
+
return None, None
|
812
|
+
if k == '_value':
|
813
|
+
return 'value', v
|
814
|
+
|
815
|
+
if k == '_name':
|
816
|
+
if self.name is None:
|
817
|
+
return None, None
|
818
|
+
else:
|
819
|
+
return 'name', v
|
820
|
+
|
821
|
+
return k, v
|
863
822
|
|
864
823
|
def replace(self, value: B) -> TreefyState[B]:
|
865
824
|
"""
|
brainstate/compile/_jit.py
CHANGED
@@ -82,6 +82,7 @@ def _get_jitted_fun(
|
|
82
82
|
return fun.fun(*args, **params)
|
83
83
|
|
84
84
|
# compile the function and get the state trace
|
85
|
+
# print('Compiling ...')
|
85
86
|
state_trace = fun.compile_function_and_get_state_trace(*args, **params, return_only_write=True)
|
86
87
|
read_state_vals = state_trace.get_read_state_values(True)
|
87
88
|
|
@@ -206,7 +206,7 @@ class StatefulFunction(object):
|
|
206
206
|
self._cached_state_trace: Dict[Any, StateTraceStack] = dict()
|
207
207
|
|
208
208
|
def __repr__(self) -> str:
|
209
|
-
return (f"{self.__class__.__name__}(
|
209
|
+
return (f"{self.__class__.__name__}("
|
210
210
|
f"static_argnums={self.static_argnums}, "
|
211
211
|
f"axis_env={self.axis_env}, "
|
212
212
|
f"abstracted_axes={self.abstracted_axes}, "
|
@@ -499,7 +499,7 @@ class StatefulFunction(object):
|
|
499
499
|
state_vals, out = self.jaxpr_call([st.value for st in state_trace.states], *args, **kwargs)
|
500
500
|
for st, written, val in zip(state_trace.states, state_trace.been_writen, state_vals):
|
501
501
|
if written:
|
502
|
-
st.
|
502
|
+
st.write_value(val)
|
503
503
|
else:
|
504
504
|
st.restore_value(val)
|
505
505
|
return out
|
brainstate/compile/_util.py
CHANGED
@@ -31,7 +31,7 @@ def write_back_state_values(
|
|
31
31
|
assert len(state_trace.states) == len(state_trace.been_writen) == len(read_state_vals) == len(write_state_vals)
|
32
32
|
for st, write, val_r, val_w in zip(state_trace.states, state_trace.been_writen, read_state_vals, write_state_vals):
|
33
33
|
if write:
|
34
|
-
st.
|
34
|
+
st.write_value(val_w)
|
35
35
|
else:
|
36
36
|
st.restore_value(val_r)
|
37
37
|
|
brainstate/graph/_graph_node.py
CHANGED
@@ -27,7 +27,7 @@ import numpy as np
|
|
27
27
|
|
28
28
|
from brainstate._state import State, TreefyState
|
29
29
|
from brainstate.typing import Key
|
30
|
-
from brainstate.util._pretty_repr import PrettyRepr,
|
30
|
+
from brainstate.util._pretty_repr import PrettyRepr, yield_unique_pretty_repr_items, PrettyType, PrettyAttr
|
31
31
|
from ._graph_operation import register_graph_node_type
|
32
32
|
|
33
33
|
__all__ = [
|
@@ -88,7 +88,7 @@ class Node(PrettyRepr, metaclass=GraphNodeMeta):
|
|
88
88
|
"""
|
89
89
|
Pretty repr for the object.
|
90
90
|
"""
|
91
|
-
yield from
|
91
|
+
yield from yield_unique_pretty_repr_items(self, _default_repr_object, _default_repr_attr)
|
92
92
|
|
93
93
|
def __treescope_repr__(self, path, subtree_renderer):
|
94
94
|
"""
|
@@ -609,7 +609,7 @@ def _get_children(graph_def, state_mapping, index_ref, index_ref_cache):
|
|
609
609
|
variable.update_from_ref(value)
|
610
610
|
elif isinstance(value, State):
|
611
611
|
if value._been_writen:
|
612
|
-
variable.value
|
612
|
+
variable.write_value(value.value)
|
613
613
|
else:
|
614
614
|
variable.restore_value(value.value)
|
615
615
|
else:
|
brainstate/nn/_module.py
CHANGED
@@ -294,7 +294,8 @@ class Sequential(Module):
|
|
294
294
|
# the input and output shape
|
295
295
|
if first.in_size is not None:
|
296
296
|
self.in_size = first.in_size
|
297
|
-
|
297
|
+
if in_size is not None:
|
298
|
+
self.out_size = tuple(in_size)
|
298
299
|
|
299
300
|
def update(self, x):
|
300
301
|
"""Update function of a sequential model.
|
brainstate/util/_dict.py
CHANGED
@@ -24,11 +24,12 @@ import jax
|
|
24
24
|
|
25
25
|
from brainstate.typing import Filter, PathParts
|
26
26
|
from ._filter import to_predicate
|
27
|
-
from ._pretty_repr import PrettyRepr, PrettyType, PrettyAttr,
|
27
|
+
from ._pretty_repr import PrettyRepr, PrettyType, PrettyAttr, yield_unique_pretty_repr_items, pretty_repr
|
28
28
|
from ._struct import dataclass
|
29
29
|
|
30
30
|
__all__ = [
|
31
|
-
'NestedDict', 'FlattedDict', 'flat_mapping', 'nest_mapping',
|
31
|
+
'PrettyDict', 'NestedDict', 'FlattedDict', 'flat_mapping', 'nest_mapping',
|
32
|
+
'PrettyList', 'PrettyReprTree',
|
32
33
|
]
|
33
34
|
|
34
35
|
A = TypeVar('A')
|
@@ -40,6 +41,44 @@ ExtractValueFn = abc.Callable[[Any], Any]
|
|
40
41
|
SetValueFn = abc.Callable[[V, Any], V]
|
41
42
|
|
42
43
|
|
44
|
+
|
45
|
+
|
46
|
+
class PrettyReprTree(PrettyRepr):
|
47
|
+
"""
|
48
|
+
Pretty representation of a tree.
|
49
|
+
"""
|
50
|
+
|
51
|
+
def __pretty_repr__(self):
|
52
|
+
return yield_unique_pretty_repr_items(
|
53
|
+
self,
|
54
|
+
repr_object=self._repr_object,
|
55
|
+
repr_attr=self._repr_attr,
|
56
|
+
)
|
57
|
+
|
58
|
+
def __pretty_repr_item__(self, k, v):
|
59
|
+
return k, v
|
60
|
+
|
61
|
+
def _repr_object(self, node: PrettyDict):
|
62
|
+
yield PrettyType(type(node), value_sep=': ', start='({', end='})')
|
63
|
+
|
64
|
+
def _repr_attr(self, node):
|
65
|
+
for k, v in vars(node).items():
|
66
|
+
k, v = self.__pretty_repr_item__(k, v)
|
67
|
+
if k is None:
|
68
|
+
continue
|
69
|
+
|
70
|
+
if isinstance(v, list):
|
71
|
+
v = PrettyList(v)
|
72
|
+
|
73
|
+
if isinstance(v, dict):
|
74
|
+
v = PrettyDict(v)
|
75
|
+
|
76
|
+
if isinstance(v, PrettyDict):
|
77
|
+
v = NestedStateRepr(v)
|
78
|
+
|
79
|
+
yield PrettyAttr(repr(k), v)
|
80
|
+
|
81
|
+
|
43
82
|
# the empty node is a struct.dataclass to be compatible with JAX.
|
44
83
|
@dataclass
|
45
84
|
class _EmptyNode:
|
@@ -213,10 +252,10 @@ class PrettyDict(dict, PrettyRepr):
|
|
213
252
|
|
214
253
|
def __repr__(self) -> str:
|
215
254
|
# repr the individual object with the pretty representation
|
216
|
-
return
|
255
|
+
return pretty_repr(self)
|
217
256
|
|
218
257
|
def __pretty_repr__(self):
|
219
|
-
yield from
|
258
|
+
yield from yield_unique_pretty_repr_items(self, _default_repr_object, _default_repr_attr)
|
220
259
|
|
221
260
|
def split(self, *filters) -> Union[PrettyDict[K, V], Tuple[PrettyDict[K, V], ...]]:
|
222
261
|
raise NotImplementedError
|
@@ -237,15 +276,20 @@ class PrettyDict(dict, PrettyRepr):
|
|
237
276
|
|
238
277
|
|
239
278
|
def _default_repr_object(node: PrettyDict):
|
240
|
-
yield PrettyType(
|
279
|
+
yield PrettyType('', value_sep=': ', start='{', end='}')
|
241
280
|
|
242
281
|
|
243
|
-
def _default_repr_attr(node
|
282
|
+
def _default_repr_attr(node):
|
244
283
|
for k, v in node.items():
|
284
|
+
if isinstance(v, list):
|
285
|
+
v = PrettyList(v)
|
286
|
+
|
245
287
|
if isinstance(v, dict):
|
246
288
|
v = PrettyDict(v)
|
289
|
+
|
247
290
|
if isinstance(v, PrettyDict):
|
248
291
|
v = NestedStateRepr(v)
|
292
|
+
|
249
293
|
yield PrettyAttr(repr(k), v)
|
250
294
|
|
251
295
|
|
@@ -735,3 +779,37 @@ def _flat_unflatten(
|
|
735
779
|
jax.tree_util.register_pytree_with_keys(FlattedDict,
|
736
780
|
_nest_flatten_with_keys,
|
737
781
|
_flat_unflatten) # type: ignore[arg-type]
|
782
|
+
|
783
|
+
|
784
|
+
@jax.tree_util.register_pytree_node_class
|
785
|
+
class PrettyList(list, PrettyRepr):
|
786
|
+
__module__ = 'brainstate.util'
|
787
|
+
|
788
|
+
def __pretty_repr__(self):
|
789
|
+
yield from yield_unique_pretty_repr_items(self, _list_repr_object, _list_repr_attr)
|
790
|
+
|
791
|
+
def __repr__(self):
|
792
|
+
return pretty_repr(self)
|
793
|
+
|
794
|
+
def tree_flatten(self):
|
795
|
+
return list(self), ()
|
796
|
+
|
797
|
+
@classmethod
|
798
|
+
def tree_unflatten(cls, aux_data, children):
|
799
|
+
return cls(children)
|
800
|
+
|
801
|
+
|
802
|
+
def _list_repr_attr(node: PrettyList):
|
803
|
+
for v in node:
|
804
|
+
if isinstance(v, list):
|
805
|
+
v = PrettyList(v)
|
806
|
+
if isinstance(v, dict):
|
807
|
+
v = PrettyDict(v)
|
808
|
+
if isinstance(v, PrettyDict):
|
809
|
+
v = NestedStateRepr(v)
|
810
|
+
yield PrettyAttr('', v)
|
811
|
+
|
812
|
+
|
813
|
+
def _list_repr_object(node: PrettyDict):
|
814
|
+
yield PrettyType('', value_sep='', start='[', end=']')
|
815
|
+
|
brainstate/util/_pretty_repr.py
CHANGED
@@ -21,9 +21,11 @@ import dataclasses
|
|
21
21
|
import threading
|
22
22
|
from abc import ABC, abstractmethod
|
23
23
|
from functools import partial
|
24
|
-
from typing import Any, Iterator, Mapping, TypeVar, Union, Callable, Optional
|
24
|
+
from typing import Any, Iterator, Mapping, TypeVar, Union, Callable, Optional, Sequence
|
25
25
|
|
26
26
|
__all__ = [
|
27
|
+
'yield_unique_pretty_repr_items',
|
28
|
+
'pretty_repr',
|
27
29
|
'PrettyType',
|
28
30
|
'PrettyAttr',
|
29
31
|
'PrettyRepr',
|
@@ -80,7 +82,7 @@ class PrettyRepr(ABC):
|
|
80
82
|
|
81
83
|
def __repr__(self) -> str:
|
82
84
|
# repr the individual object with the pretty representation
|
83
|
-
return
|
85
|
+
return pretty_repr(self)
|
84
86
|
|
85
87
|
|
86
88
|
def _repr_elem(obj: PrettyType, elem: Any) -> str:
|
@@ -93,7 +95,7 @@ def _repr_elem(obj: PrettyType, elem: Any) -> str:
|
|
93
95
|
return f'{obj.elem_indent}{elem.start}{elem.key}{obj.value_sep}{value}{elem.end}'
|
94
96
|
|
95
97
|
|
96
|
-
def
|
98
|
+
def pretty_repr(obj: PrettyRepr) -> str:
|
97
99
|
"""
|
98
100
|
Get the pretty representation of an object.
|
99
101
|
"""
|
@@ -140,9 +142,10 @@ class PrettyMapping(PrettyRepr):
|
|
140
142
|
Pretty representation of a mapping.
|
141
143
|
"""
|
142
144
|
mapping: Mapping
|
145
|
+
type_name: str = ''
|
143
146
|
|
144
147
|
def __pretty_repr__(self):
|
145
|
-
yield PrettyType(type=
|
148
|
+
yield PrettyType(type=self.type_name, value_sep=': ', start='{', end='}')
|
146
149
|
|
147
150
|
for key, value in self.mapping.items():
|
148
151
|
yield PrettyAttr(repr(key), value)
|
@@ -168,7 +171,7 @@ def _default_repr_attr(node):
|
|
168
171
|
yield PrettyAttr(name, repr(value))
|
169
172
|
|
170
173
|
|
171
|
-
def
|
174
|
+
def yield_unique_pretty_repr_items(
|
172
175
|
node,
|
173
176
|
repr_object: Optional[Callable] = None,
|
174
177
|
repr_attr: Optional[Callable] = None
|
@@ -206,3 +209,4 @@ def pretty_repr_avoid_duplicate(
|
|
206
209
|
finally:
|
207
210
|
if clear_seen:
|
208
211
|
CONTEXT.seen_modules_repr = None
|
212
|
+
|
{brainstate-0.1.0.post20250206.dist-info → brainstate-0.1.0.post20250209.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: brainstate
|
3
|
-
Version: 0.1.0.
|
3
|
+
Version: 0.1.0.post20250209
|
4
4
|
Summary: A ``State``-based Transformation System for Program Compilation and Augmentation.
|
5
5
|
Home-page: https://github.com/chaobrain/brainstate
|
6
6
|
Author: BrainState Developers
|
@@ -1,5 +1,5 @@
|
|
1
1
|
brainstate/__init__.py,sha256=AkZyyFkn4fB8g2aT6Rc2MO1xICPpUZuDtdze-eUQNc0,1496
|
2
|
-
brainstate/_state.py,sha256=
|
2
|
+
brainstate/_state.py,sha256=W1Q_RAL01rUSLZuOARMuX9I-26tBuIl_VzNWAziz6A8,27518
|
3
3
|
brainstate/_state_test.py,sha256=rJUFRSXEqrrl4qANRewY9mnDlzSbtHwBIGeZ0ku-8Dg,1650
|
4
4
|
brainstate/_utils.py,sha256=uJ6WWKq3yb05ZdktCQGLWOXsOJveL1H9pR7eev70Jes,1693
|
5
5
|
brainstate/environ.py,sha256=PZnVFWPioUBuWmwCO8wwCKrHQfP3BR-5lYPRl5i5GDA,17698
|
@@ -24,17 +24,17 @@ brainstate/compile/_conditions.py,sha256=gApsHKGQrf1QBjoKXDVL7VsoeJ2zFtSc-hFz9nb
|
|
24
24
|
brainstate/compile/_conditions_test.py,sha256=s9LF6h9LvigvgxUIugTqvgCHBIU8TXS1Ar1OlIxXfrw,8389
|
25
25
|
brainstate/compile/_error_if.py,sha256=TFvhqITKkRO9m30GdlUP4eEjJvLWQUhjkujXO9zvrWs,2689
|
26
26
|
brainstate/compile/_error_if_test.py,sha256=OdJG483IIdOrCHxtHd49OHfOxCSnSkk7GdAUOzSt8bE,2044
|
27
|
-
brainstate/compile/_jit.py,sha256
|
27
|
+
brainstate/compile/_jit.py,sha256=itAWENKfJvnlaWl_uSy8lHTK8K1in89F_ZXXwp-EGRM,13944
|
28
28
|
brainstate/compile/_jit_test.py,sha256=zD7kck9SQJGmUDolh9P4luKwQ21fBGje1Z4STTEXIuA,4135
|
29
29
|
brainstate/compile/_loop_collect_return.py,sha256=TrKBZhtQecTtuiVz_HOeyepde-znzjlyk0Te53-AvOE,23492
|
30
30
|
brainstate/compile/_loop_collect_return_test.py,sha256=bA-_11E8A_0jR5umEO3e409y7bb5QYDTgSL-SBaX7kQ,1802
|
31
31
|
brainstate/compile/_loop_no_collection.py,sha256=qto2__Zt2PJntkjB9AXEgraGLvNUJS483BhCXjJyqv0,7495
|
32
32
|
brainstate/compile/_loop_no_collection_test.py,sha256=oStB1CSG_iLp9sHdXd1hJNFvlxbzjck9Iy4sABoJDj4,1419
|
33
|
-
brainstate/compile/_make_jaxpr.py,sha256=
|
33
|
+
brainstate/compile/_make_jaxpr.py,sha256=MuAa9LjXi29DjYgDUrK0WaomkjbhHZk9mWW04XGcV98,33297
|
34
34
|
brainstate/compile/_make_jaxpr_test.py,sha256=3gwdiutn_PJyiweu3oPEXumxEVHKaE2xDGvkwZy2GEo,4367
|
35
35
|
brainstate/compile/_progress_bar.py,sha256=5pCMCEmbTO5XmKtzRUJGA178tuBznWKuh9Kw00wAL1I,7524
|
36
36
|
brainstate/compile/_unvmap.py,sha256=CJA6D9lUcBfvdLrpFVvC2AdTJqe9uY0Ht6PltQJyr4U,4228
|
37
|
-
brainstate/compile/_util.py,sha256=
|
37
|
+
brainstate/compile/_util.py,sha256=aCvkTV--g4NsqcodTdBAISt4EwgezCbKzNUV58n-Q_Y,6304
|
38
38
|
brainstate/functional/__init__.py,sha256=j6-3Er4fgqWpvntzYCZVB3e5hoz-Z3aqvapITCuDri0,1107
|
39
39
|
brainstate/functional/_activations.py,sha256=S0Ok7sq5FTbmJWSejpOCHo1jpKX0gYOLy_TO2IUXM8s,21726
|
40
40
|
brainstate/functional/_activations_test.py,sha256=T___RlSrIfXwlkw8dg5A9EZMTZGDzv3a2evUwq_nYFg,13034
|
@@ -42,9 +42,9 @@ brainstate/functional/_normalization.py,sha256=i2EV7hSsqcNdcYRX2wAxjq8doHwyN9eNJ
|
|
42
42
|
brainstate/functional/_others.py,sha256=_u_Ys-LiLzDAP4zJggVwaVvirgoS3jvhXMREoS6JOkM,1737
|
43
43
|
brainstate/functional/_spikes.py,sha256=QY-2ayJkgkGELcq-bftPEaf_hJptVf_SP3fY36QvlZc,2678
|
44
44
|
brainstate/graph/__init__.py,sha256=noo4TjBg6iEhjjwk0sAGUhR7Ge-z8Vnc2rLYUvnqttw,1295
|
45
|
-
brainstate/graph/_graph_node.py,sha256=
|
45
|
+
brainstate/graph/_graph_node.py,sha256=XwzOuaZG9x4eZknQjzJoTnnYAy7wcKD5Vox1VkYr8GM,8345
|
46
46
|
brainstate/graph/_graph_node_test.py,sha256=BFGfdzZFDHI0XK7hHotSVWKt3em1taGvn8FHF9NCXx8,2702
|
47
|
-
brainstate/graph/_graph_operation.py,sha256=
|
47
|
+
brainstate/graph/_graph_operation.py,sha256=cIwGo3ICgtce2fmdn917r81evMFjJIKeW9doaQK4DD8,64111
|
48
48
|
brainstate/graph/_graph_operation_test.py,sha256=zjvpKjQAFWtw8YZuqOk_jmlZNb_-E8oPyNx57dyc8jI,18556
|
49
49
|
brainstate/init/__init__.py,sha256=R1dHgub47o-WJM9QkFLc7x_Q7GsyaKKDtrRHTFPpC5g,1097
|
50
50
|
brainstate/init/_base.py,sha256=B_NLS9aKNrvuj5NAlSgBbQTVev7IRvzcx8vH0J-Gq2w,1671
|
@@ -57,7 +57,7 @@ brainstate/nn/__init__.py,sha256=rxURT8J1XfBn3Vh3Dx_WzVADWn9zVriIty5KZEG-x6o,162
|
|
57
57
|
brainstate/nn/_collective_ops.py,sha256=sSjIIs1MvZA30XFFmK7iL1D_sCeh7hFd3PanCH6kgZo,6779
|
58
58
|
brainstate/nn/_exp_euler.py,sha256=yjkfSllFxGWKEAlHo5AzBizzkFj6FEVDKmFV6E2g214,3521
|
59
59
|
brainstate/nn/_exp_euler_test.py,sha256=clwRD8QR71k1jn6NrACMDEUcFMh0J9RTosoPnlYWUkw,1242
|
60
|
-
brainstate/nn/_module.py,sha256=
|
60
|
+
brainstate/nn/_module.py,sha256=UzsnaTDh5F6Z8B7ou4RXmTdAWXbNkjf03bYP0kF3_fE,10872
|
61
61
|
brainstate/nn/_module_test.py,sha256=V4ZhiY_zYPvArkB2eeOTtZcgQrtlRyXKMbS1AJH4vC8,8893
|
62
62
|
brainstate/nn/metrics.py,sha256=iupHjSRTHYY-HmEPBC4tXWrZfF4zh1ek2NwSAA0gnwE,14738
|
63
63
|
brainstate/nn/_dyn_impl/__init__.py,sha256=Oazar7h89dp1WA2Vx4Tj7gCBhxJKH4LAUEABkBEG7vU,1462
|
@@ -109,16 +109,16 @@ brainstate/random/_rand_state.py,sha256=nuoQ8GU1MfJPRNN-ZmRQsggVjoyPhaEdZmwM7_4-
|
|
109
109
|
brainstate/random/_random_for_unit.py,sha256=kGp4EUX19MXJ9Govoivbg8N0bddqOldKEI2h_TbdONY,2057
|
110
110
|
brainstate/util/__init__.py,sha256=-FWEuSKXG3mWxYphGFAy3UEuVe39lFs1GruluzdXDoI,1502
|
111
111
|
brainstate/util/_caller.py,sha256=T3bzu7-09r-6EOrU6Muca_aMXSQua_X2lXjEqb-w39w,2782
|
112
|
-
brainstate/util/_dict.py,sha256=
|
112
|
+
brainstate/util/_dict.py,sha256=tb5nPrTKJe4G_BDv33XYTUaYQDz6od-5psG4TKemc7A,28111
|
113
113
|
brainstate/util/_dict_test.py,sha256=Dn0TdjX6wLBXaTD4jfYTu6cKfFHwKSxi4_3bX7kB_IA,5621
|
114
114
|
brainstate/util/_error.py,sha256=eyZ8PGFixqe2K5OEfjSDzI-2tU0ieYQoUpBP7yStlPQ,878
|
115
115
|
brainstate/util/_filter.py,sha256=1-bvFHdjeehvXeHTrCEp8xr25lopKe8d3XZGCNegq0s,4970
|
116
116
|
brainstate/util/_others.py,sha256=jsPZwP-v_5HRV-LB5F0NUsiqr04y8bmGIsu_JMyVcbQ,14762
|
117
|
-
brainstate/util/_pretty_repr.py,sha256=
|
117
|
+
brainstate/util/_pretty_repr.py,sha256=vNwRlj4sI4QJ_koyIs7eKdUMeB_QWwzRYsE8PpAWN3g,5833
|
118
118
|
brainstate/util/_scaling.py,sha256=pc_eM_SZVwkY65I4tJh1ODiHNCoEhsfFXl2zBK0PLAg,7562
|
119
119
|
brainstate/util/_struct.py,sha256=KMMHcshOM20gYhSahNzWLxsTt-Rt3AeX3Uz26-rP9vI,17619
|
120
|
-
brainstate-0.1.0.
|
121
|
-
brainstate-0.1.0.
|
122
|
-
brainstate-0.1.0.
|
123
|
-
brainstate-0.1.0.
|
124
|
-
brainstate-0.1.0.
|
120
|
+
brainstate-0.1.0.post20250209.dist-info/LICENSE,sha256=VZe9u1jgUL2eCY6ZPOYgdb8KCblCHt8ECdbtJid6e1s,11550
|
121
|
+
brainstate-0.1.0.post20250209.dist-info/METADATA,sha256=vc9kKmrq5JM9Os6brL4zecy55nEpd9ASK9GZNJBQV9g,3585
|
122
|
+
brainstate-0.1.0.post20250209.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110
|
123
|
+
brainstate-0.1.0.post20250209.dist-info/top_level.txt,sha256=eQbGgKn0ptx7FDWuua0V0wr4K1VHi2iOUCYo3fUQBRA,11
|
124
|
+
brainstate-0.1.0.post20250209.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{brainstate-0.1.0.post20250206.dist-info → brainstate-0.1.0.post20250209.dist-info}/top_level.txt
RENAMED
File without changes
|