brainstate 0.1.0.post20250129__py2.py3-none-any.whl → 0.1.0.post20250206__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 CHANGED
@@ -261,9 +261,8 @@ class State(Generic[A], PrettyRepr):
261
261
  """
262
262
  The data and its value.
263
263
  """
264
- self.check_if_deleted()
265
264
  record_state_value_read(self)
266
- return self._value
265
+ return self._read_value()
267
266
 
268
267
  @value.setter
269
268
  def value(self, v) -> None:
@@ -273,7 +272,14 @@ class State(Generic[A], PrettyRepr):
273
272
  Args:
274
273
  v: The value.
275
274
  """
276
- self.write_value(v)
275
+ # NOTE: the following order is important
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
277
283
 
278
284
  @property
279
285
  def stack_level(self):
@@ -295,17 +301,18 @@ class State(Generic[A], PrettyRepr):
295
301
  """
296
302
  self._level = level
297
303
 
298
- def write_value(self, v) -> None:
299
- # value checking
300
- if isinstance(v, State):
301
- raise ValueError('Cannot set value to a State, ' 'use `copy_from` method instead')
302
- self._check_value_tree(v)
303
- # write the value by the stack (>= level)
304
- record_state_value_write(self)
305
- # set the value
304
+ def _read_value(self) -> PyTree[ArrayLike]:
305
+ """
306
+ The interface to customize the value reading.
307
+ """
308
+ self.check_if_deleted()
309
+ return self._value
310
+
311
+ def _write_value(self, v) -> None:
312
+ """
313
+ The interface to customize the value writing.
314
+ """
306
315
  self._value = v
307
- # set flag
308
- self._been_writen = True
309
316
 
310
317
  def restore_value(self, v) -> None:
311
318
  """
@@ -82,7 +82,6 @@ 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 ...')
86
85
  state_trace = fun.compile_function_and_get_state_trace(*args, **params, return_only_write=True)
87
86
  read_state_vals = state_trace.get_read_state_values(True)
88
87
 
@@ -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.write_value(val)
502
+ st.value = val
503
503
  else:
504
504
  st.restore_value(val)
505
505
  return out
@@ -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.write_value(val_w)
34
+ st.value = val_w
35
35
  else:
36
36
  st.restore_value(val_r)
37
37
 
@@ -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.write_value(value.value)
612
+ variable.value = value.value
613
613
  else:
614
614
  variable.restore_value(value.value)
615
615
  else:
@@ -216,14 +216,9 @@ def poisson_input(
216
216
  weight: u.Quantity,
217
217
  target: State,
218
218
  indices: Optional[Union[np.ndarray, jax.Array]] = None,
219
- refractory: Optional[Union[jax.Array]] = None,
220
219
  ):
221
220
  """
222
221
  Poisson Input to the given :py:class:`brainstate.State`.
223
-
224
- Args:
225
- freq:
226
- refractory: should be the same length with ``target``.
227
222
  """
228
223
  freq = maybe_state(freq)
229
224
  weight = maybe_state(weight)
@@ -296,7 +291,7 @@ def poisson_input(
296
291
  # )
297
292
 
298
293
  # update target variable
299
- data = jax.tree.map(
294
+ target.value = jax.tree.map(
300
295
  lambda tar, x: tar + x * weight,
301
296
  target.value,
302
297
  inp,
@@ -363,19 +358,9 @@ def poisson_input(
363
358
  # )
364
359
 
365
360
  # update target variable
366
- data = jax.tree.map(
361
+ target.value = jax.tree.map(
367
362
  lambda x, tar: tar.at[indices].add(x * weight),
368
363
  inp,
369
364
  tar_val,
370
365
  is_leaf=u.math.is_quantity
371
366
  )
372
-
373
- if refractory is not None:
374
- target.value = jax.tree.map(
375
- lambda x, tar: u.math.where(refractory, tar, x),
376
- data,
377
- tar_val,
378
- is_leaf=u.math.is_quantity
379
- )
380
- else:
381
- target.value = data
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: brainstate
3
- Version: 0.1.0.post20250129
3
+ Version: 0.1.0.post20250206
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=GZ46liHZSHbAHQEuELvOeoJ27P9xiZDz06G2AASjAjA,29142
2
+ brainstate/_state.py,sha256=Ol-FqHWQnIKmylXHjdsY5izKQhIb0bUw3_UL-7zj4WA,29447
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=itAWENKfJvnlaWl_uSy8lHTK8K1in89F_ZXXwp-EGRM,13944
27
+ brainstate/compile/_jit.py,sha256=-Y8fyy8gc7qQT2ti4-N-74hjP_6C-D8YC5h-1unEKuI,13910
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=J4oWoPBwG-fdJvNhBEtNgmo3rXrIWCoajELhaIumgPU,33309
33
+ brainstate/compile/_make_jaxpr.py,sha256=Q-nwm-ibBN0ube4ZjATp924pUkrXuaeT0XgSstqkI40,33304
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=aCvkTV--g4NsqcodTdBAISt4EwgezCbKzNUV58n-Q_Y,6304
37
+ brainstate/compile/_util.py,sha256=iKk51BHAerBFj2BTxPNdjsk3MZQiXenzpCr7Ys0iYWg,6299
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
@@ -44,7 +44,7 @@ brainstate/functional/_spikes.py,sha256=QY-2ayJkgkGELcq-bftPEaf_hJptVf_SP3fY36Qv
44
44
  brainstate/graph/__init__.py,sha256=noo4TjBg6iEhjjwk0sAGUhR7Ge-z8Vnc2rLYUvnqttw,1295
45
45
  brainstate/graph/_graph_node.py,sha256=swAokZLKswSTaq2WEhyLIs38sy_67C6maHI6T3e1hvY,8339
46
46
  brainstate/graph/_graph_node_test.py,sha256=BFGfdzZFDHI0XK7hHotSVWKt3em1taGvn8FHF9NCXx8,2702
47
- brainstate/graph/_graph_operation.py,sha256=cIwGo3ICgtce2fmdn917r81evMFjJIKeW9doaQK4DD8,64111
47
+ brainstate/graph/_graph_operation.py,sha256=UtBNP7hvxa-5i99LQJStXbFhUbl3icdfTq1oF4MeH1g,64106
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
@@ -65,7 +65,7 @@ brainstate/nn/_dyn_impl/_dynamics_neuron.py,sha256=cTbIn41EPYG0h3ICzKBXxpgB6wwA2
65
65
  brainstate/nn/_dyn_impl/_dynamics_neuron_test.py,sha256=Tfzrzu7udGrLJGnqItiLWe5WT0dgduvYOgzGCnaPJQg,6317
66
66
  brainstate/nn/_dyn_impl/_dynamics_synapse.py,sha256=MsbPyaiDyjungyzuK2b3exRGaMpZgmsmmNHNLjgxQKw,15269
67
67
  brainstate/nn/_dyn_impl/_dynamics_synapse_test.py,sha256=t5i-HV0ii9sUNzWTEv04o26QVtQ-mCdMJcFq2MD755A,4981
68
- brainstate/nn/_dyn_impl/_inputs.py,sha256=72-UnT-hpG03EvSYx72ldDhbgZwmaoOYxxkANpX6xpo,11779
68
+ brainstate/nn/_dyn_impl/_inputs.py,sha256=QOUpAb2YJOE78uAvIS8Ep6MFcQHV-V6uRwmYvk5p9bk,11385
69
69
  brainstate/nn/_dyn_impl/_projection_alignpost.py,sha256=PNC1Tzx_SF2DHAHeJCufXzO_Q4qLoBpWABI45B3GRuc,876
70
70
  brainstate/nn/_dyn_impl/_rate_rnns.py,sha256=dz_yT_6hJVhKulcjIARbGtmMzZqISws96CtBc6o5GOo,14768
71
71
  brainstate/nn/_dyn_impl/_rate_rnns_test.py,sha256=gNgtr-a4ZiU1XF9wFG1HiJ9fLosfWchVR9Zn1x39xt4,2452
@@ -117,8 +117,8 @@ brainstate/util/_others.py,sha256=jsPZwP-v_5HRV-LB5F0NUsiqr04y8bmGIsu_JMyVcbQ,14
117
117
  brainstate/util/_pretty_repr.py,sha256=bDpU4gbkS4B8cXBkiN8kBQNmruxiJzDRF-eIqzyeYnM,5716
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.post20250129.dist-info/LICENSE,sha256=VZe9u1jgUL2eCY6ZPOYgdb8KCblCHt8ECdbtJid6e1s,11550
121
- brainstate-0.1.0.post20250129.dist-info/METADATA,sha256=g93rl2oDT8uoaL4wbHVDFtC7Y5F3kuuebI64WBKUTc0,3585
122
- brainstate-0.1.0.post20250129.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110
123
- brainstate-0.1.0.post20250129.dist-info/top_level.txt,sha256=eQbGgKn0ptx7FDWuua0V0wr4K1VHi2iOUCYo3fUQBRA,11
124
- brainstate-0.1.0.post20250129.dist-info/RECORD,,
120
+ brainstate-0.1.0.post20250206.dist-info/LICENSE,sha256=VZe9u1jgUL2eCY6ZPOYgdb8KCblCHt8ECdbtJid6e1s,11550
121
+ brainstate-0.1.0.post20250206.dist-info/METADATA,sha256=-H1vqEufSWo4cx5wCLeYECZuStnZXDZ_Vd9JBL5dni4,3585
122
+ brainstate-0.1.0.post20250206.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110
123
+ brainstate-0.1.0.post20250206.dist-info/top_level.txt,sha256=eQbGgKn0ptx7FDWuua0V0wr4K1VHi2iOUCYo3fUQBRA,11
124
+ brainstate-0.1.0.post20250206.dist-info/RECORD,,