bluecellulab 2.6.43__py3-none-any.whl → 2.6.44__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.

Potentially problematic release.


This version of bluecellulab might be problematic. Click here for more details.

@@ -30,6 +30,8 @@ from bluecellulab.exceptions import BluecellulabError
30
30
  from bluecellulab.rngsettings import RNGSettings
31
31
  from bluecellulab.stimulus.circuit_stimulus_definitions import (
32
32
  ClampMode,
33
+ Linear,
34
+ RelativeLinear,
33
35
  Hyperpolarizing,
34
36
  Noise,
35
37
  OrnsteinUhlenbeck,
@@ -259,12 +261,32 @@ class InjectableMixin:
259
261
  self.persistent.append(tstim) # type: ignore
260
262
  return tstim
261
263
 
262
- def add_replay_relativelinear(self, stimulus):
264
+ def add_replay_linear(self, stimulus: Linear):
265
+ """Add a linear stimulus."""
266
+
267
+ return self.add_ramp(
268
+ stimulus.delay,
269
+ stimulus.delay + stimulus.duration,
270
+ stimulus.amp_start,
271
+ stimulus.amp_end
272
+ )
273
+
274
+ def add_replay_relativelinear(self, stimulus: RelativeLinear):
263
275
  """Add a relative linear stimulus."""
264
- tstim = neuron.h.TStim(0.5, sec=self.soma)
265
- amp = stimulus.percent_start / 100.0 * self.threshold
266
- tstim.pulse(stimulus.delay, stimulus.duration, amp)
267
- self.persistent.append(tstim)
276
+ tstim = neuron.h.TStim(0.5, sec=self.soma) # type: ignore
277
+ amp_start = stimulus.percent_start / 100.0 * self.threshold # type: ignore
278
+ amp_end = stimulus.percent_end / 100.0 * self.threshold # type: ignore
279
+
280
+ tstim.ramp(
281
+ 0.0,
282
+ stimulus.delay, # Time when the ramp starts
283
+ amp_start, # Initial amplitude (amp_start)
284
+ amp_end, # Final amplitude (amp_end)
285
+ stimulus.duration, # Duration of the ramp
286
+ 0.0,
287
+ 0.0
288
+ )
289
+ self.persistent.append(tstim) # type: ignore
268
290
 
269
291
  return tstim
270
292
 
@@ -152,8 +152,9 @@ class SonataCircuitAccess:
152
152
 
153
153
  # make multiindex
154
154
  synapses = synapses.reset_index(drop=True)
155
+ synapse_ids = list(synapses.index)
155
156
  synapses.index = pd.MultiIndex.from_tuples(
156
- zip([edge_population_name] * len(synapses), synapses.index),
157
+ [(edge_population_name, syn_id) for syn_id in synapse_ids],
157
158
  names=["edge_name", "synapse_id"],
158
159
  )
159
160
 
@@ -139,6 +139,7 @@ class CircuitSimulation:
139
139
  pre_spike_trains: None | dict[tuple[str, int], Iterable] | dict[int, Iterable] = None,
140
140
  add_shotnoise_stimuli: bool = False,
141
141
  add_ornstein_uhlenbeck_stimuli: bool = False,
142
+ add_linear_stimuli: bool = False,
142
143
  ):
143
144
  """Instantiate a list of cells.
144
145
 
@@ -209,6 +210,11 @@ class CircuitSimulation:
209
210
  of the simulation config,
210
211
  Setting add_stimuli=True,
211
212
  will automatically set this option to True.
213
+ add_linear_stimuli : Process the 'linear' stimuli
214
+ blocks of the simulation config.
215
+ Setting add_stimuli=True,
216
+ will automatically set this option to
217
+ True.
212
218
  """
213
219
  if not isinstance(cells, Iterable) or isinstance(cells, tuple):
214
220
  cells = [cells]
@@ -267,20 +273,23 @@ class CircuitSimulation:
267
273
  add_pulse_stimuli = True
268
274
  add_shotnoise_stimuli = True
269
275
  add_ornstein_uhlenbeck_stimuli = True
276
+ add_linear_stimuli = True
270
277
 
271
278
  if add_noise_stimuli or \
272
279
  add_hyperpolarizing_stimuli or \
273
280
  add_pulse_stimuli or \
274
281
  add_relativelinear_stimuli or \
275
282
  add_shotnoise_stimuli or \
276
- add_ornstein_uhlenbeck_stimuli:
283
+ add_ornstein_uhlenbeck_stimuli or \
284
+ add_linear_stimuli:
277
285
  self._add_stimuli(
278
286
  add_noise_stimuli=add_noise_stimuli,
279
287
  add_hyperpolarizing_stimuli=add_hyperpolarizing_stimuli,
280
288
  add_relativelinear_stimuli=add_relativelinear_stimuli,
281
289
  add_pulse_stimuli=add_pulse_stimuli,
282
290
  add_shotnoise_stimuli=add_shotnoise_stimuli,
283
- add_ornstein_uhlenbeck_stimuli=add_ornstein_uhlenbeck_stimuli
291
+ add_ornstein_uhlenbeck_stimuli=add_ornstein_uhlenbeck_stimuli,
292
+ add_linear_stimuli=add_linear_stimuli
284
293
  )
285
294
 
286
295
  def _add_stimuli(self, add_noise_stimuli=False,
@@ -288,7 +297,8 @@ class CircuitSimulation:
288
297
  add_relativelinear_stimuli=False,
289
298
  add_pulse_stimuli=False,
290
299
  add_shotnoise_stimuli=False,
291
- add_ornstein_uhlenbeck_stimuli=False
300
+ add_ornstein_uhlenbeck_stimuli=False,
301
+ add_linear_stimuli=False
292
302
  ):
293
303
  """Instantiate all the stimuli."""
294
304
  stimuli_entries = self.circuit_access.config.get_all_stimuli_entries()
@@ -316,6 +326,9 @@ class CircuitSimulation:
316
326
  elif isinstance(stimulus, circuit_stimulus_definitions.Pulse):
317
327
  if add_pulse_stimuli:
318
328
  self.cells[cell_id].add_pulse(stimulus)
329
+ elif isinstance(stimulus, circuit_stimulus_definitions.Linear):
330
+ if add_linear_stimuli:
331
+ self.cells[cell_id].add_replay_linear(stimulus)
319
332
  elif isinstance(stimulus, circuit_stimulus_definitions.RelativeLinear):
320
333
  if add_relativelinear_stimuli:
321
334
  self.cells[cell_id].add_replay_relativelinear(stimulus)
@@ -42,6 +42,7 @@ class Pattern(Enum):
42
42
  NOISE = "noise"
43
43
  HYPERPOLARIZING = "hyperpolarizing"
44
44
  PULSE = "pulse"
45
+ LINEAR = "linear"
45
46
  RELATIVE_LINEAR = "relative_linear"
46
47
  SYNAPSE_REPLAY = "synapse_replay"
47
48
  SHOT_NOISE = "shot_noise"
@@ -80,6 +81,8 @@ class Pattern(Enum):
80
81
  return Pattern.HYPERPOLARIZING
81
82
  elif pattern == "pulse":
82
83
  return Pattern.PULSE
84
+ elif pattern == "linear":
85
+ return Pattern.LINEAR
83
86
  elif pattern == "relative_linear":
84
87
  return Pattern.RELATIVE_LINEAR
85
88
  elif pattern == "synapse_replay":
@@ -141,6 +144,7 @@ class Stimulus:
141
144
  delay=stimulus_entry["Delay"],
142
145
  duration=stimulus_entry["Duration"],
143
146
  percent_start=stimulus_entry["PercentStart"],
147
+ percent_end=stimulus_entry["PercentEnd"],
144
148
  )
145
149
  elif pattern == Pattern.SYNAPSE_REPLAY:
146
150
  warnings.warn("Ignoring syanpse replay stimulus as it is not supported")
@@ -230,12 +234,21 @@ class Stimulus:
230
234
  width=stimulus_entry["width"],
231
235
  frequency=stimulus_entry["frequency"],
232
236
  )
237
+ elif pattern == Pattern.LINEAR:
238
+ return Linear(
239
+ target=stimulus_entry["node_set"],
240
+ delay=stimulus_entry["delay"],
241
+ duration=stimulus_entry["duration"],
242
+ amp_start=stimulus_entry["amp_start"],
243
+ amp_end=stimulus_entry["amp_end"],
244
+ )
233
245
  elif pattern == Pattern.RELATIVE_LINEAR:
234
246
  return RelativeLinear(
235
247
  target=stimulus_entry["node_set"],
236
248
  delay=stimulus_entry["delay"],
237
249
  duration=stimulus_entry["duration"],
238
250
  percent_start=stimulus_entry["percent_start"],
251
+ percent_end=stimulus_entry["percent_end"],
239
252
  )
240
253
  elif pattern == Pattern.SYNAPSE_REPLAY:
241
254
  return SynapseReplay(
@@ -322,9 +335,16 @@ class Pulse(Stimulus):
322
335
  frequency: float
323
336
 
324
337
 
338
+ @dataclass(frozen=True, config=dict(extra="forbid"))
339
+ class Linear(Stimulus):
340
+ amp_start: float
341
+ amp_end: float
342
+
343
+
325
344
  @dataclass(frozen=True, config=dict(extra="forbid"))
326
345
  class RelativeLinear(Stimulus):
327
346
  percent_start: float
347
+ percent_end: float
328
348
 
329
349
 
330
350
  @dataclass(frozen=True, config=dict(extra="forbid"))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: bluecellulab
3
- Version: 2.6.43
3
+ Version: 2.6.44
4
4
  Summary: Biologically detailed neural network simulations and analysis.
5
5
  Author: Blue Brain Project, EPFL
6
6
  License: Apache2.0
@@ -1,5 +1,5 @@
1
1
  bluecellulab/__init__.py,sha256=1d_CKIJLIpon7o13h3lBnV_-33obZEPwa9KDTjlFPD8,880
2
- bluecellulab/circuit_simulation.py,sha256=zzVCGP-SP8pdzSt03_FSvSCAeigaBfSb4A-mFfw2AwI,33587
2
+ bluecellulab/circuit_simulation.py,sha256=JVGAsrnyuIG_oY39Bcm8QBxAh004jEHCTxiOiEU8Btk,34293
3
3
  bluecellulab/connection.py,sha256=-xT0mU7ppeHI_qjCKj17TtxXVVcUDgBsaMKt9ODmcEU,4640
4
4
  bluecellulab/dendrogram.py,sha256=FjS6RZ6xcp5zJoY5d5qv_edqPM13tL2-UANgbZuDBjY,6427
5
5
  bluecellulab/exceptions.py,sha256=1lKD92VIyD8cUggAI1SLxeKzj_09Ik_TlHCzPLCvDHg,2379
@@ -21,7 +21,7 @@ bluecellulab/analysis/plotting.py,sha256=-ArjWHZsAlUoNSu_t0HQjQmFhGI1tCQtdAoICgw
21
21
  bluecellulab/cell/__init__.py,sha256=Sbc0QOsJ8E7tSwf3q7fsXuE_SevBN6ZmoCVyyU5zfII,208
22
22
  bluecellulab/cell/cell_dict.py,sha256=VE7pi-NsMVRSmo-PSdbiLYmolDOu0Gc6JxFBkuQpFdk,1346
23
23
  bluecellulab/cell/core.py,sha256=BualY0WOtC0arKmvKzQ3sQ0fhc2jrtd6wqSd9M-e25E,33797
24
- bluecellulab/cell/injector.py,sha256=O2G3ahMzjP3QNS9q_xIXB54NIkiM3DISv-6uFCk9Ono,18056
24
+ bluecellulab/cell/injector.py,sha256=Mq1XU_dfp7F5JPx5t1oYdJQVez3rZDkCEEZUE7-wWT4,18760
25
25
  bluecellulab/cell/plotting.py,sha256=t2qDUabFtsBb-nJMkDh5UfsgW-wvQ2wfDwAVZ8-hWPo,4032
26
26
  bluecellulab/cell/random.py,sha256=pemekc11geRBKD8Ghb82tvKOZLfFWkUz1IKLc_NWg-A,1773
27
27
  bluecellulab/cell/recording.py,sha256=dekJspPb_5yrS6WR3aXtvZ6KWwMNbyhe5aIOVtNDHpY,342
@@ -43,7 +43,7 @@ bluecellulab/circuit/validate.py,sha256=wntnr7oIDyasqD1nM-kqz1NpfWDxBGhx0Ep3e5hH
43
43
  bluecellulab/circuit/circuit_access/__init__.py,sha256=sgp6m5kP-pq60V1IFGUiSUR1OW01zdxXNNUJmPA8anI,201
44
44
  bluecellulab/circuit/circuit_access/bluepy_circuit_access.py,sha256=aXvtZR8EwpVEkB4KAupjC4DX_1xYC4OrHwMUQcQIWrQ,14273
45
45
  bluecellulab/circuit/circuit_access/definition.py,sha256=_sUU0DkesGOFW82kS1G9vki0o0aQP76z3Ltk7Vo9KK4,4435
46
- bluecellulab/circuit/circuit_access/sonata_circuit_access.py,sha256=oxMHFG4IBZXhr0mAQpgTNueLaagKbm-7f8VgDDJIg0E,10361
46
+ bluecellulab/circuit/circuit_access/sonata_circuit_access.py,sha256=tADHxVZw4VgZAz2z4NKMUwc0rd_EO40EZggw5fDhnF4,10411
47
47
  bluecellulab/circuit/config/__init__.py,sha256=aaoJXRKBJzpxxREo9NxKc-_CCPmVeuR1mcViRXcLrC4,215
48
48
  bluecellulab/circuit/config/bluepy_simulation_config.py,sha256=V3eqOzskX7VrMDpl-nMQVEhDg8QWgRmRduyJBii5sgI,6974
49
49
  bluecellulab/circuit/config/definition.py,sha256=I1jd4KUX21mw03FEv1aYNsT0UFbDANY3YEPwwKXqe4k,2774
@@ -59,15 +59,15 @@ bluecellulab/simulation/neuron_globals.py,sha256=iBjhg0-1YMP5LsVdtUDt24PEypkCL6m
59
59
  bluecellulab/simulation/parallel.py,sha256=oQ_oV2EKr8gP4yF2Dq8q9MiblDyi89_wBgLzQkLV_U0,1514
60
60
  bluecellulab/simulation/simulation.py,sha256=VhftOMYU1Rfrphvud6f0U4kvbUivSviQ5TlVljuTb88,6486
61
61
  bluecellulab/stimulus/__init__.py,sha256=DgIgVaSyR-URf3JZzvO6j-tjCerzvktuK-ep8pjMRPQ,37
62
- bluecellulab/stimulus/circuit_stimulus_definitions.py,sha256=WdjxoPL4_T1yn3mEhxH-TvU7d441Kf4v5QwFfH30UNI,15890
62
+ bluecellulab/stimulus/circuit_stimulus_definitions.py,sha256=SApXtVs5zXT2JimbG2JImDLvUVhMe82hjfRGYhp6Jyc,16577
63
63
  bluecellulab/stimulus/factory.py,sha256=mjbI8JqujXzc_SuxuUGx2zU_T41RDwYsn9IAtA39T1M,25412
64
64
  bluecellulab/stimulus/stimulus.py,sha256=da8XEP5Kw2s73fVhJJgu6kJ7DyLhQcdB4VQB9F63mL4,24842
65
65
  bluecellulab/synapse/__init__.py,sha256=RW8XoAMXOvK7OG1nHl_q8jSEKLj9ZN4oWf2nY9HAwuk,192
66
66
  bluecellulab/synapse/synapse_factory.py,sha256=NHwRMYMrnRVm_sHmyKTJ1bdoNmWZNU4UPOGu7FCi-PE,6987
67
67
  bluecellulab/synapse/synapse_types.py,sha256=zs_yBvGTH4QrbQF3nEViidyq1WM_ZcTSFdjUxB3khW0,16871
68
- bluecellulab-2.6.43.dist-info/AUTHORS.txt,sha256=EDs3H-2HXBojbma10psixk3C2rFiOCTIREi2ZAbXYNQ,179
69
- bluecellulab-2.6.43.dist-info/LICENSE,sha256=dAMAR2Sud4Nead1wGFleKiwTZfkTNZbzmuGfcTKb3kg,11335
70
- bluecellulab-2.6.43.dist-info/METADATA,sha256=Ufce79d7u5kWAg5fwcbJgWgpEhvpc_D-GFW1c-ZY4L4,8214
71
- bluecellulab-2.6.43.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
72
- bluecellulab-2.6.43.dist-info/top_level.txt,sha256=VSyEP8w9l3pXdRkyP_goeMwiNA8KWwitfAqUkveJkdQ,13
73
- bluecellulab-2.6.43.dist-info/RECORD,,
68
+ bluecellulab-2.6.44.dist-info/AUTHORS.txt,sha256=EDs3H-2HXBojbma10psixk3C2rFiOCTIREi2ZAbXYNQ,179
69
+ bluecellulab-2.6.44.dist-info/LICENSE,sha256=dAMAR2Sud4Nead1wGFleKiwTZfkTNZbzmuGfcTKb3kg,11335
70
+ bluecellulab-2.6.44.dist-info/METADATA,sha256=A83Dnkygey8TxQr5zHXGabNKylbpzRYTWEAnQReVeUo,8214
71
+ bluecellulab-2.6.44.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
72
+ bluecellulab-2.6.44.dist-info/top_level.txt,sha256=VSyEP8w9l3pXdRkyP_goeMwiNA8KWwitfAqUkveJkdQ,13
73
+ bluecellulab-2.6.44.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.2)
2
+ Generator: setuptools (76.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5