brainstate 0.1.0.post20250222__py2.py3-none-any.whl → 0.1.0.post20250322__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 +16 -3
- brainstate/augment/_mapping_test.py +74 -1
- brainstate/nn/_collective_ops.py +16 -18
- brainstate/nn/_collective_ops_test.py +11 -0
- 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.post20250322.dist-info}/METADATA +4 -3
- {brainstate-0.1.0.post20250222.dist-info → brainstate-0.1.0.post20250322.dist-info}/RECORD +11 -11
- {brainstate-0.1.0.post20250222.dist-info → brainstate-0.1.0.post20250322.dist-info}/LICENSE +0 -0
- {brainstate-0.1.0.post20250222.dist-info → brainstate-0.1.0.post20250322.dist-info}/WHEEL +0 -0
- {brainstate-0.1.0.post20250222.dist-info → brainstate-0.1.0.post20250322.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,8 +948,13 @@ 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``?
|
955
|
+
if isinstance(axis_size, int) and axis_size <= 0:
|
956
|
+
raise ValueError(f"axis_size must be greater than 0, got {axis_size}.")
|
957
|
+
|
953
958
|
|
954
959
|
@vmap(
|
955
960
|
in_axes=in_axes,
|
@@ -957,6 +962,8 @@ def _vmap_new_states_transform(
|
|
957
962
|
axis_name=axis_name,
|
958
963
|
axis_size=axis_size,
|
959
964
|
spmd_axis_name=spmd_axis_name,
|
965
|
+
in_states=in_states,
|
966
|
+
out_states=out_states,
|
960
967
|
)
|
961
968
|
def new_fun(args):
|
962
969
|
# call the function
|
@@ -999,6 +1006,8 @@ def vmap_new_states(
|
|
999
1006
|
# -- brainstate specific arguments -- #
|
1000
1007
|
state_tag: str | None = None,
|
1001
1008
|
state_to_exclude: Filter = None,
|
1009
|
+
in_states: Dict[int, Dict] | Any | None = None,
|
1010
|
+
out_states: Dict[int, Dict] | Any | None = None,
|
1002
1011
|
):
|
1003
1012
|
"""
|
1004
1013
|
Vectorize a function over new states created within it.
|
@@ -1030,6 +1039,8 @@ def vmap_new_states(
|
|
1030
1039
|
spmd_axis_name=spmd_axis_name,
|
1031
1040
|
state_tag=state_tag,
|
1032
1041
|
state_to_exclude=state_to_exclude,
|
1042
|
+
in_states=in_states,
|
1043
|
+
out_states=out_states,
|
1033
1044
|
)
|
1034
1045
|
else:
|
1035
1046
|
return _vmap_new_states_transform(
|
@@ -1041,4 +1052,6 @@ def vmap_new_states(
|
|
1041
1052
|
spmd_axis_name=spmd_axis_name,
|
1042
1053
|
state_tag=state_tag,
|
1043
1054
|
state_to_exclude=state_to_exclude,
|
1055
|
+
in_states=in_states,
|
1056
|
+
out_states=out_states,
|
1044
1057
|
)
|
@@ -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,42 @@ 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
|
+
)
|
278
316
|
|
279
317
|
|
280
318
|
class TestMap(unittest.TestCase):
|
@@ -360,3 +398,38 @@ class TestRemoveAxis:
|
|
360
398
|
complex_array = jnp.array([[1 + 1j, 2 + 2j], [3 + 3j, 4 + 4j]])
|
361
399
|
complex_result = _remove_axis(complex_array, 0)
|
362
400
|
assert jnp.allclose(complex_result, jnp.array([1 + 1j, 2 + 2j]))
|
401
|
+
|
402
|
+
|
403
|
+
class TestVMAPNewStatesEdgeCases(unittest.TestCase):
|
404
|
+
|
405
|
+
def test_axis_size_zero(self):
|
406
|
+
foo = brainstate.nn.LIF(3)
|
407
|
+
# Testing that axis_size of 0 raises an error.
|
408
|
+
with self.assertRaises(ValueError):
|
409
|
+
@bst.augment.vmap_new_states(state_tag='new1', axis_size=0)
|
410
|
+
def faulty_init():
|
411
|
+
foo.init_state()
|
412
|
+
|
413
|
+
# Call the decorated function to trigger validation
|
414
|
+
faulty_init()
|
415
|
+
|
416
|
+
def test_axis_size_negative(self):
|
417
|
+
foo = brainstate.nn.LIF(3)
|
418
|
+
# Testing that a negative axis_size raises an error.
|
419
|
+
with self.assertRaises(ValueError):
|
420
|
+
@bst.augment.vmap_new_states(state_tag='new1', axis_size=-3)
|
421
|
+
def faulty_init():
|
422
|
+
foo.init_state()
|
423
|
+
|
424
|
+
faulty_init()
|
425
|
+
|
426
|
+
def test_incompatible_shapes(self):
|
427
|
+
foo = brainstate.nn.LIF(3)
|
428
|
+
# Simulate an incompatible shapes scenario:
|
429
|
+
# We intentionally assign a state with a different shape than expected.
|
430
|
+
@bst.augment.vmap_new_states(state_tag='new1', axis_size=5)
|
431
|
+
def faulty_init():
|
432
|
+
# Modify state to produce an incompatible shape
|
433
|
+
foo.c = bst.State(jnp.arange(3)) # Original expected shape is (4,)
|
434
|
+
|
435
|
+
faulty_init()
|
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.
|
@@ -252,9 +250,9 @@ def vmap_call_all_functions(
|
|
252
250
|
@set_module_as('brainstate.nn')
|
253
251
|
def init_all_states(
|
254
252
|
target: T,
|
255
|
-
init_args
|
256
|
-
init_kwargs: Dict[str, Any] | None = None,
|
253
|
+
*init_args,
|
257
254
|
node_to_exclude: Filter = None,
|
255
|
+
**init_kwargs,
|
258
256
|
) -> T:
|
259
257
|
"""
|
260
258
|
Initialize all states for the given target module and its submodules.
|
@@ -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.post20250322.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.post20250322
|
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=ru4byvHCtEvmSBTC-DckgKqyJEbKxstPdJcz3uE5AZ8,43494
|
18
|
+
brainstate/augment/_mapping_test.py,sha256=Ax9-NjnCHPrvO_fPN24mOtl0NZugWg3AcNyxUYnHS1E,14709
|
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=
|
58
|
-
brainstate/nn/_collective_ops_test.py,sha256=
|
57
|
+
brainstate/nn/_collective_ops.py,sha256=Hb8ruvqlhSA-XWJ66ReItyaIhxyWlSKGFZ9-EYMQ-mk,17457
|
58
|
+
brainstate/nn/_collective_ops_test.py,sha256=nloqrlf6M7H-mgvHmIARrKzMotp8khxEuYSMPvXM5J0,1375
|
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.post20250322.dist-info/LICENSE,sha256=VZe9u1jgUL2eCY6ZPOYgdb8KCblCHt8ECdbtJid6e1s,11550
|
125
|
+
brainstate-0.1.0.post20250322.dist-info/METADATA,sha256=ixPeEJ2tz1Dti9D7RFHS-bDLCj1a5VtVnbo7GS82xaE,3689
|
126
|
+
brainstate-0.1.0.post20250322.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110
|
127
|
+
brainstate-0.1.0.post20250322.dist-info/top_level.txt,sha256=eQbGgKn0ptx7FDWuua0V0wr4K1VHi2iOUCYo3fUQBRA,11
|
128
|
+
brainstate-0.1.0.post20250322.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{brainstate-0.1.0.post20250222.dist-info → brainstate-0.1.0.post20250322.dist-info}/top_level.txt
RENAMED
File without changes
|