brainstate 0.1.0.post20250222__py2.py3-none-any.whl → 0.1.0.post20250315__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/augment/_mapping.py +13 -3
- brainstate/augment/_mapping_test.py +40 -1
- brainstate/nn/_collective_ops.py +14 -16
- brainstate/nn/_dyn_impl/_dynamics_synapse.py +16 -6
- brainstate/nn/_exp_euler.py +5 -5
- {brainstate-0.1.0.post20250222.dist-info → brainstate-0.1.0.post20250315.dist-info}/METADATA +4 -3
- {brainstate-0.1.0.post20250222.dist-info → brainstate-0.1.0.post20250315.dist-info}/RECORD +10 -10
- {brainstate-0.1.0.post20250222.dist-info → brainstate-0.1.0.post20250315.dist-info}/LICENSE +0 -0
- {brainstate-0.1.0.post20250222.dist-info → brainstate-0.1.0.post20250315.dist-info}/WHEEL +0 -0
- {brainstate-0.1.0.post20250222.dist-info → brainstate-0.1.0.post20250315.dist-info}/top_level.txt +0 -0
brainstate/augment/_mapping.py
CHANGED
@@ -918,11 +918,11 @@ def map(
|
|
918
918
|
g = lambda _, x: ((), vmap(f)(*x))
|
919
919
|
_, scan_ys = scan(g, (), scan_xs)
|
920
920
|
if remainder_xs is None:
|
921
|
-
ys = jax.tree.map(lambda x:
|
921
|
+
ys = jax.tree.map(lambda x: _flatten(x), scan_ys)
|
922
922
|
else:
|
923
923
|
remainder_ys = vmap(f)(*remainder_xs)
|
924
924
|
ys = jax.tree.map(
|
925
|
-
lambda x, y: jax.lax.concatenate([
|
925
|
+
lambda x, y: jax.lax.concatenate([_flatten(x), y], dimension=0),
|
926
926
|
scan_ys,
|
927
927
|
remainder_ys,
|
928
928
|
)
|
@@ -932,7 +932,7 @@ def map(
|
|
932
932
|
return ys
|
933
933
|
|
934
934
|
|
935
|
-
def
|
935
|
+
def _flatten(x):
|
936
936
|
return x.reshape(-1, *x.shape[2:])
|
937
937
|
|
938
938
|
|
@@ -948,6 +948,8 @@ def _vmap_new_states_transform(
|
|
948
948
|
# -- brainstate specific arguments -- #
|
949
949
|
state_tag: str | None = None,
|
950
950
|
state_to_exclude: Filter | None = None,
|
951
|
+
in_states: Dict[int, Dict] | Any | None = None,
|
952
|
+
out_states: Dict[int, Dict] | Any | None = None,
|
951
953
|
):
|
952
954
|
# TODO: How about nested call ``vmap_new_states``?
|
953
955
|
|
@@ -957,6 +959,8 @@ def _vmap_new_states_transform(
|
|
957
959
|
axis_name=axis_name,
|
958
960
|
axis_size=axis_size,
|
959
961
|
spmd_axis_name=spmd_axis_name,
|
962
|
+
in_states=in_states,
|
963
|
+
out_states=out_states,
|
960
964
|
)
|
961
965
|
def new_fun(args):
|
962
966
|
# call the function
|
@@ -999,6 +1003,8 @@ def vmap_new_states(
|
|
999
1003
|
# -- brainstate specific arguments -- #
|
1000
1004
|
state_tag: str | None = None,
|
1001
1005
|
state_to_exclude: Filter = None,
|
1006
|
+
in_states: Dict[int, Dict] | Any | None = None,
|
1007
|
+
out_states: Dict[int, Dict] | Any | None = None,
|
1002
1008
|
):
|
1003
1009
|
"""
|
1004
1010
|
Vectorize a function over new states created within it.
|
@@ -1030,6 +1036,8 @@ def vmap_new_states(
|
|
1030
1036
|
spmd_axis_name=spmd_axis_name,
|
1031
1037
|
state_tag=state_tag,
|
1032
1038
|
state_to_exclude=state_to_exclude,
|
1039
|
+
in_states=in_states,
|
1040
|
+
out_states=out_states,
|
1033
1041
|
)
|
1034
1042
|
else:
|
1035
1043
|
return _vmap_new_states_transform(
|
@@ -1041,4 +1049,6 @@ def vmap_new_states(
|
|
1041
1049
|
spmd_axis_name=spmd_axis_name,
|
1042
1050
|
state_tag=state_tag,
|
1043
1051
|
state_to_exclude=state_to_exclude,
|
1052
|
+
in_states=in_states,
|
1053
|
+
out_states=out_states,
|
1044
1054
|
)
|
@@ -15,10 +15,11 @@
|
|
15
15
|
|
16
16
|
from __future__ import annotations
|
17
17
|
|
18
|
+
import unittest
|
19
|
+
|
18
20
|
import jax
|
19
21
|
import jax.numpy as jnp
|
20
22
|
import numpy as np
|
21
|
-
import unittest
|
22
23
|
|
23
24
|
import brainstate as bst
|
24
25
|
import brainstate.augment
|
@@ -268,6 +269,7 @@ class TestVmap(unittest.TestCase):
|
|
268
269
|
def test_axis(self):
|
269
270
|
def f(x):
|
270
271
|
return x - jax.lax.pmean(x, 'i')
|
272
|
+
|
271
273
|
r = jax.vmap(f, axis_name='i')(jnp.arange(10))
|
272
274
|
print(r)
|
273
275
|
|
@@ -275,6 +277,43 @@ class TestVmap(unittest.TestCase):
|
|
275
277
|
print(r2)
|
276
278
|
self.assertTrue(jnp.allclose(r, r2))
|
277
279
|
|
280
|
+
def test_vmap_init(self):
|
281
|
+
class Foo(bst.nn.Module):
|
282
|
+
def __init__(self):
|
283
|
+
super().__init__()
|
284
|
+
self.a = bst.ParamState(jnp.arange(4))
|
285
|
+
self.b = bst.ShortTermState(jnp.arange(4))
|
286
|
+
|
287
|
+
def init_state_v1(self, *args, **kwargs):
|
288
|
+
self.c = bst.State(jnp.arange(4))
|
289
|
+
|
290
|
+
def init_state_v2(self):
|
291
|
+
self.d = bst.State(self.c.value * 2.)
|
292
|
+
|
293
|
+
foo = Foo()
|
294
|
+
|
295
|
+
@brainstate.augment.vmap_new_states(state_tag='new1', axis_size=5)
|
296
|
+
def init1():
|
297
|
+
foo.init_state_v1()
|
298
|
+
|
299
|
+
init1()
|
300
|
+
print(foo.c.value)
|
301
|
+
|
302
|
+
@brainstate.augment.vmap_new_states(state_tag='new2', axis_size=5, in_states=foo.states('new1'))
|
303
|
+
def init2():
|
304
|
+
foo.init_state_v2()
|
305
|
+
|
306
|
+
init2()
|
307
|
+
print(foo.c.value)
|
308
|
+
print(foo.d.value)
|
309
|
+
|
310
|
+
self.assertTrue(
|
311
|
+
jnp.allclose(
|
312
|
+
foo.d.value,
|
313
|
+
foo.c.value * 2.
|
314
|
+
)
|
315
|
+
)
|
316
|
+
|
278
317
|
|
279
318
|
|
280
319
|
class TestMap(unittest.TestCase):
|
brainstate/nn/_collective_ops.py
CHANGED
@@ -18,9 +18,7 @@ from __future__ import annotations
|
|
18
18
|
from collections import namedtuple
|
19
19
|
|
20
20
|
import jax
|
21
|
-
from typing import
|
22
|
-
Callable, TypeVar, Tuple, Any, Dict
|
23
|
-
)
|
21
|
+
from typing import Callable, TypeVar, Tuple, Any, Dict
|
24
22
|
|
25
23
|
from brainstate._state import catch_new_states
|
26
24
|
from brainstate._utils import set_module_as
|
@@ -103,7 +101,7 @@ def call_all_functions(
|
|
103
101
|
on each node. It respects the call order of functions if defined, and provides options for
|
104
102
|
handling cases where the specified function does not exist on a node.
|
105
103
|
|
106
|
-
Parameters
|
104
|
+
Parameters
|
107
105
|
-----------
|
108
106
|
target : T
|
109
107
|
The target module on which to call functions.
|
@@ -121,12 +119,12 @@ def call_all_functions(
|
|
121
119
|
- 'raise': Raise an exception (default)
|
122
120
|
- 'pass' or 'none': Skip the node and continue
|
123
121
|
|
124
|
-
Returns
|
122
|
+
Returns
|
125
123
|
--------
|
126
124
|
T
|
127
125
|
The target module after calling the specified function on all applicable nodes.
|
128
126
|
|
129
|
-
Raises
|
127
|
+
Raises
|
130
128
|
-------
|
131
129
|
AssertionError
|
132
130
|
If fun_name is not a string or kwargs is not a dictionary.
|
@@ -186,7 +184,7 @@ def vmap_call_all_functions(
|
|
186
184
|
This function vectorizes the process of calling a specified function across multiple instances
|
187
185
|
of the target module, effectively batching the operation.
|
188
186
|
|
189
|
-
Parameters
|
187
|
+
Parameters
|
190
188
|
-----------
|
191
189
|
target : T
|
192
190
|
The target module on which to call functions.
|
@@ -208,12 +206,12 @@ def vmap_call_all_functions(
|
|
208
206
|
- 'raise': Raise an exception (default)
|
209
207
|
- 'pass' or 'none': Skip the node and continue
|
210
208
|
|
211
|
-
Returns
|
209
|
+
Returns
|
212
210
|
--------
|
213
211
|
T
|
214
212
|
The target module after applying the vectorized function call on all applicable nodes.
|
215
213
|
|
216
|
-
Raises
|
214
|
+
Raises
|
217
215
|
-------
|
218
216
|
AssertionError
|
219
217
|
If axis_size is not specified or is not a positive integer.
|
@@ -304,7 +302,7 @@ def vmap_init_all_states(
|
|
304
302
|
This function applies vectorized mapping (vmap) to initialize states across multiple
|
305
303
|
instances of the target module, effectively batching the initialization process.
|
306
304
|
|
307
|
-
Parameters
|
305
|
+
Parameters
|
308
306
|
-----------
|
309
307
|
target : T
|
310
308
|
The target module whose states are to be initialized.
|
@@ -319,12 +317,12 @@ def vmap_init_all_states(
|
|
319
317
|
state_tag : str | None, optional
|
320
318
|
A tag to be used for catching new states.
|
321
319
|
|
322
|
-
Returns
|
320
|
+
Returns
|
323
321
|
--------
|
324
322
|
T
|
325
323
|
The target module with initialized states.
|
326
324
|
|
327
|
-
Raises
|
325
|
+
Raises
|
328
326
|
-------
|
329
327
|
AssertionError
|
330
328
|
If axis_size is not specified or is not greater than 0.
|
@@ -413,7 +411,7 @@ def vmap_reset_all_states(
|
|
413
411
|
This function applies vectorized mapping (vmap) to reset states across multiple
|
414
412
|
instances of the target module, effectively batching the reset process.
|
415
413
|
|
416
|
-
Parameters
|
414
|
+
Parameters
|
417
415
|
-----------
|
418
416
|
target : T
|
419
417
|
The target module whose states are to be reset.
|
@@ -428,12 +426,12 @@ def vmap_reset_all_states(
|
|
428
426
|
tag : str | None, optional
|
429
427
|
A tag to be used for catching new states.
|
430
428
|
|
431
|
-
Returns
|
429
|
+
Returns
|
432
430
|
--------
|
433
431
|
T
|
434
432
|
The target module with reset states.
|
435
433
|
|
436
|
-
Raises
|
434
|
+
Raises
|
437
435
|
-------
|
438
436
|
AssertionError
|
439
437
|
If axis_size is not specified or is not greater than 0.
|
@@ -486,7 +484,7 @@ def save_all_states(target: Module, **kwargs) -> Dict:
|
|
486
484
|
Args:
|
487
485
|
target: Module. The node to save its states.
|
488
486
|
|
489
|
-
Returns
|
487
|
+
Returns
|
490
488
|
Dict. The state dict for serialization.
|
491
489
|
"""
|
492
490
|
return {key: node.save_state(**kwargs) for key, node in target.nodes().items()}
|
@@ -17,8 +17,9 @@
|
|
17
17
|
|
18
18
|
from __future__ import annotations
|
19
19
|
|
20
|
+
from typing import Optional, Callable
|
21
|
+
|
20
22
|
import brainunit as u
|
21
|
-
from typing import Optional
|
22
23
|
|
23
24
|
from brainstate import init, environ
|
24
25
|
from brainstate._state import ShortTermState, HiddenState
|
@@ -54,7 +55,7 @@ class Expon(Synapse, AlignPost):
|
|
54
55
|
in_size: Size,
|
55
56
|
name: Optional[str] = None,
|
56
57
|
tau: ArrayLike = 8.0 * u.ms,
|
57
|
-
g_initializer: ArrayLike = init.ZeroInit(unit=u.mS),
|
58
|
+
g_initializer: ArrayLike | Callable = init.ZeroInit(unit=u.mS),
|
58
59
|
):
|
59
60
|
super().__init__(name=name, in_size=in_size)
|
60
61
|
|
@@ -85,7 +86,7 @@ class DualExpon(Synapse, AlignPost):
|
|
85
86
|
tau_decay: ArrayLike = 10.0 * u.ms,
|
86
87
|
tau_rise: ArrayLike = 1.0 * u.ms,
|
87
88
|
A: Optional[ArrayLike] = None,
|
88
|
-
g_initializer: ArrayLike = init.ZeroInit(unit=u.mS),
|
89
|
+
g_initializer: ArrayLike | Callable = init.ZeroInit(unit=u.mS),
|
89
90
|
):
|
90
91
|
super().__init__(name=name, in_size=in_size)
|
91
92
|
|
@@ -133,7 +134,7 @@ class Alpha(Synapse):
|
|
133
134
|
in_size: Size,
|
134
135
|
name: Optional[str] = None,
|
135
136
|
tau: ArrayLike = 8.0 * u.ms,
|
136
|
-
g_initializer: ArrayLike = init.ZeroInit(unit=u.mS),
|
137
|
+
g_initializer: ArrayLike | Callable = init.ZeroInit(unit=u.mS),
|
137
138
|
):
|
138
139
|
super().__init__(name=name, in_size=in_size)
|
139
140
|
|
@@ -321,7 +322,7 @@ class AMPA(Synapse):
|
|
321
322
|
beta: ArrayLike = 0.18 / u.ms,
|
322
323
|
T: ArrayLike = 0.5 * u.mM,
|
323
324
|
T_dur: ArrayLike = 0.5 * u.ms,
|
324
|
-
g_initializer: ArrayLike = init.ZeroInit(),
|
325
|
+
g_initializer: ArrayLike | Callable = init.ZeroInit(),
|
325
326
|
):
|
326
327
|
super().__init__(name=name, in_size=in_size)
|
327
328
|
|
@@ -394,5 +395,14 @@ class GABAa(AMPA):
|
|
394
395
|
beta: ArrayLike = 0.18 / u.ms,
|
395
396
|
T: ArrayLike = 1.0 * u.mM,
|
396
397
|
T_dur: ArrayLike = 1.0 * u.ms,
|
398
|
+
g_initializer: ArrayLike | Callable = init.ZeroInit(),
|
397
399
|
):
|
398
|
-
super().__init__(
|
400
|
+
super().__init__(
|
401
|
+
alpha=alpha,
|
402
|
+
beta=beta,
|
403
|
+
T=T,
|
404
|
+
T_dur=T_dur,
|
405
|
+
name=name,
|
406
|
+
in_size=in_size,
|
407
|
+
g_initializer=g_initializer
|
408
|
+
)
|
brainstate/nn/_exp_euler.py
CHANGED
@@ -49,13 +49,13 @@ def exp_euler_step(
|
|
49
49
|
should have units of ( [X]/\sqrt{[T]} ).
|
50
50
|
|
51
51
|
Args:
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
52
|
+
fun: Callable. The function to be solved.
|
53
|
+
diffusion: Callable. The diffusion function.
|
54
|
+
*args: The input arguments.
|
55
|
+
drift: Callable. The drift function.
|
56
56
|
|
57
57
|
Returns:
|
58
|
-
|
58
|
+
The one-step solution of the ODE.
|
59
59
|
"""
|
60
60
|
assert callable(fn), 'The input function should be callable.'
|
61
61
|
assert len(args) > 0, 'The input arguments should not be empty.'
|
{brainstate-0.1.0.post20250222.dist-info → brainstate-0.1.0.post20250315.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.post20250315
|
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
|
@@ -62,6 +62,7 @@ Requires-Dist: jaxlib[tpu] ; extra == 'tpu'
|
|
62
62
|
<a href="https://badge.fury.io/py/brainstate"><img alt="PyPI version" src="https://badge.fury.io/py/brainstate.svg"></a>
|
63
63
|
<a href="https://github.com/chaobrain/brainstate/actions/workflows/CI.yml"><img alt="Continuous Integration" src="https://github.com/chaobrain/brainstate/actions/workflows/CI.yml/badge.svg"></a>
|
64
64
|
<a href="https://pepy.tech/projects/brainstate"><img src="https://static.pepy.tech/badge/brainstate" alt="PyPI Downloads"></a>
|
65
|
+
<a href="https://doi.org/10.5281/zenodo.14970015"><img src="https://zenodo.org/badge/811300394.svg" alt="DOI"></a>
|
65
66
|
</p>
|
66
67
|
|
67
68
|
|
@@ -81,8 +82,8 @@ The official documentation is hosted on Read the Docs: [https://brainstate.readt
|
|
81
82
|
|
82
83
|
|
83
84
|
|
84
|
-
## See also the
|
85
|
+
## See also the brain modeling ecosystem
|
85
86
|
|
86
|
-
We are building the
|
87
|
+
We are building the brain modeling ecosystem: https://brainmodeling.readthedocs.io/
|
87
88
|
|
88
89
|
|
@@ -14,8 +14,8 @@ brainstate/augment/_autograd.py,sha256=hfDoa2HbkRn-InOS0yOcb6gEZ2DLNqtWA133P8-hv
|
|
14
14
|
brainstate/augment/_autograd_test.py,sha256=2wCC8aUcDp2IHgF7wr1GK5HwWfELXni5PpA-082azuU,44058
|
15
15
|
brainstate/augment/_eval_shape.py,sha256=jgsS197Nizehr9A2nGaQPE7NuNujhFhmR3J96hTicX8,3890
|
16
16
|
brainstate/augment/_eval_shape_test.py,sha256=LFOJx7CWltmRLXdGY175UebLwtEMz2CzJ_gLqMZsJTw,1393
|
17
|
-
brainstate/augment/_mapping.py,sha256=
|
18
|
-
brainstate/augment/_mapping_test.py,sha256
|
17
|
+
brainstate/augment/_mapping.py,sha256=BPwpD7jX4xRNl4BdAsKGoF45MKbmEF9Lyyp11pJucIg,43356
|
18
|
+
brainstate/augment/_mapping_test.py,sha256=-4HJXmJw_6SD9dQnHTBjgYVuq6VTVjz0xpc9v2CJVNw,13414
|
19
19
|
brainstate/augment/_random.py,sha256=ikRzNoDDE2BkARajDsBhNlngCUrghzGSZUDmEGvVors,5386
|
20
20
|
brainstate/compile/__init__.py,sha256=fQtG316MLkeeu1Ssp54Kghw1PwbGK5gNq9yRVJu0wjA,1474
|
21
21
|
brainstate/compile/_ad_checkpoint.py,sha256=3wv-f89oo94XeWwRV5LcRot0Nz7xTk5_PdjEDyUMsoo,9394
|
@@ -54,10 +54,10 @@ brainstate/init/_random_inits_test.py,sha256=lBL2RQdBSZ88Zqz4IMdbHJMvDi7ooZq6caC
|
|
54
54
|
brainstate/init/_regular_inits.py,sha256=DmVMajugfyYFNUMzgFdDKMvbBu9hMWxkfDd-50uhoLg,3187
|
55
55
|
brainstate/init/_regular_inits_test.py,sha256=tJl4aOkclllJIfKzJTbc0cfYCw2SoBsx8_G123RnqbU,1842
|
56
56
|
brainstate/nn/__init__.py,sha256=ar1hDUYbSO6oadMpbuS9FWZvZB_iyFzM8CwMK-RNDzM,1823
|
57
|
-
brainstate/nn/_collective_ops.py,sha256=
|
57
|
+
brainstate/nn/_collective_ops.py,sha256=NI9BT-908TbIlXLMjbWsPyI5YLZD_cCkSKGeOY-qO60,17512
|
58
58
|
brainstate/nn/_collective_ops_test.py,sha256=yW7NNYsGFglFRFkqVlpGSY6WLnU-h8GlK6wCmG5jtRc,1189
|
59
59
|
brainstate/nn/_common.py,sha256=XQw0i0sH3Y_qUwHSMC7G9VQnDj-RuuTh1Ul-xRIPxxc,7136
|
60
|
-
brainstate/nn/_exp_euler.py,sha256=
|
60
|
+
brainstate/nn/_exp_euler.py,sha256=s-Z_cT_oYvCvE-OaXuUidIxQs3KOy1pzkx1lwtfPo00,3529
|
61
61
|
brainstate/nn/_exp_euler_test.py,sha256=kvPf009DMYtla2uedKVKrPTHDyMTBepjlfsk5vDHqhI,1240
|
62
62
|
brainstate/nn/_module.py,sha256=vrukVI0ylbymzilh9BZtb-d9dnsBsykqanUNTx9Eb6Y,12844
|
63
63
|
brainstate/nn/_module_test.py,sha256=UrVA85fo0KVFN9ApPkxkRcvtXEskWOXPzZIBa4JSFo0,8891
|
@@ -66,7 +66,7 @@ brainstate/nn/metrics.py,sha256=p7eVwd5y8r0N5rMws-zOS_KaZCLOMdrXyQvLnoJeq1w,1473
|
|
66
66
|
brainstate/nn/_dyn_impl/__init__.py,sha256=Oazar7h89dp1WA2Vx4Tj7gCBhxJKH4LAUEABkBEG7vU,1462
|
67
67
|
brainstate/nn/_dyn_impl/_dynamics_neuron.py,sha256=mcDxVZlk56NAEkR6xcE74hOZ9up8Rua4SvKEeAhJKU4,10925
|
68
68
|
brainstate/nn/_dyn_impl/_dynamics_neuron_test.py,sha256=_wPp6UvWVZI9EYba-DWL_JZXyMxm0-SHDkZHI8lKp8w,6315
|
69
|
-
brainstate/nn/_dyn_impl/_dynamics_synapse.py,sha256=
|
69
|
+
brainstate/nn/_dyn_impl/_dynamics_synapse.py,sha256=xXMNlDWX0tQ9N0zORfT4DFKoEXtrsRbeetqOq-bYovs,15518
|
70
70
|
brainstate/nn/_dyn_impl/_dynamics_synapse_test.py,sha256=VUDMlHNcyeqHrBd1eAXg_VD0HCSg5C-eqMmcJVzYcJA,4979
|
71
71
|
brainstate/nn/_dyn_impl/_inputs.py,sha256=ubM5Z2q0gXpJ2M5Das3A5MJpFOorVomfW6-079mqJ9k,12935
|
72
72
|
brainstate/nn/_dyn_impl/_projection_alignpost.py,sha256=PNC1Tzx_SF2DHAHeJCufXzO_Q4qLoBpWABI45B3GRuc,876
|
@@ -121,8 +121,8 @@ brainstate/util/_pretty_table.py,sha256=NM_6VAW6oL9jojsK0-RkQGHnDzLy_fn_hgzl5R8o
|
|
121
121
|
brainstate/util/_scaling.py,sha256=pc_eM_SZVwkY65I4tJh1ODiHNCoEhsfFXl2zBK0PLAg,7562
|
122
122
|
brainstate/util/_struct.py,sha256=F5GfFURITAIYTwf17_xypkZU1wvoL4dUCviPnr_eCtw,17515
|
123
123
|
brainstate/util/filter.py,sha256=Zw0H42NwAi2P7dBr3ISv2VpkB5jqoWnV4Kpd61gq66o,14126
|
124
|
-
brainstate-0.1.0.
|
125
|
-
brainstate-0.1.0.
|
126
|
-
brainstate-0.1.0.
|
127
|
-
brainstate-0.1.0.
|
128
|
-
brainstate-0.1.0.
|
124
|
+
brainstate-0.1.0.post20250315.dist-info/LICENSE,sha256=VZe9u1jgUL2eCY6ZPOYgdb8KCblCHt8ECdbtJid6e1s,11550
|
125
|
+
brainstate-0.1.0.post20250315.dist-info/METADATA,sha256=8gOEdv6PiXBLr_gAvx70Yik7G7XxidMVPPLOLx3ndPc,3689
|
126
|
+
brainstate-0.1.0.post20250315.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110
|
127
|
+
brainstate-0.1.0.post20250315.dist-info/top_level.txt,sha256=eQbGgKn0ptx7FDWuua0V0wr4K1VHi2iOUCYo3fUQBRA,11
|
128
|
+
brainstate-0.1.0.post20250315.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{brainstate-0.1.0.post20250222.dist-info → brainstate-0.1.0.post20250315.dist-info}/top_level.txt
RENAMED
File without changes
|