bluecellulab 2.6.53__tar.gz → 2.6.55__tar.gz

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.

Files changed (109) hide show
  1. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/PKG-INFO +1 -1
  2. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/analysis/analysis.py +22 -34
  3. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/config/sonata_simulation_config.py +1 -1
  4. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit_simulation.py +7 -6
  5. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/simulation/report.py +45 -8
  6. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/validation/validation.py +24 -54
  7. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab.egg-info/PKG-INFO +1 -1
  8. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/.compile_mod.sh +0 -0
  9. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/.gitattributes +0 -0
  10. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/.github/dependabot.yml +0 -0
  11. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/.github/workflows/release.yml +0 -0
  12. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/.github/workflows/test.yml +0 -0
  13. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/.gitignore +0 -0
  14. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/.gitlab-ci.yml +0 -0
  15. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/.readthedocs.yml +0 -0
  16. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/.zenodo.json +0 -0
  17. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/AUTHORS.txt +0 -0
  18. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/CHANGELOG.rst +0 -0
  19. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/CITATION.cff +0 -0
  20. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/CONTRIBUTING.rst +0 -0
  21. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/LICENSE +0 -0
  22. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/MANIFEST.in +0 -0
  23. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/Makefile +0 -0
  24. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/README.rst +0 -0
  25. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/__init__.py +0 -0
  26. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/analysis/__init__.py +0 -0
  27. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/analysis/inject_sequence.py +0 -0
  28. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/analysis/plotting.py +0 -0
  29. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/analysis/utils.py +0 -0
  30. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/__init__.py +0 -0
  31. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/ballstick/__init__.py +0 -0
  32. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/ballstick/emodel.hoc +0 -0
  33. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/ballstick/morphology.asc +0 -0
  34. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/cell_dict.py +0 -0
  35. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/core.py +0 -0
  36. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/injector.py +0 -0
  37. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/plotting.py +0 -0
  38. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/random.py +0 -0
  39. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/recording.py +0 -0
  40. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/section_distance.py +0 -0
  41. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/serialized_sections.py +0 -0
  42. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/sonata_proxy.py +0 -0
  43. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/stimuli_generator.py +0 -0
  44. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/template.py +0 -0
  45. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/__init__.py +0 -0
  46. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/circuit_access/__init__.py +0 -0
  47. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/circuit_access/bluepy_circuit_access.py +0 -0
  48. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/circuit_access/definition.py +0 -0
  49. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/circuit_access/sonata_circuit_access.py +0 -0
  50. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/config/__init__.py +0 -0
  51. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/config/bluepy_simulation_config.py +0 -0
  52. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/config/definition.py +0 -0
  53. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/config/sections.py +0 -0
  54. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/format.py +0 -0
  55. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/iotools.py +0 -0
  56. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/node_id.py +0 -0
  57. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/simulation_access.py +0 -0
  58. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/synapse_properties.py +0 -0
  59. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/validate.py +0 -0
  60. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/connection.py +0 -0
  61. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/dendrogram.py +0 -0
  62. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/exceptions.py +0 -0
  63. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/graph.py +0 -0
  64. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/hoc/Cell.hoc +0 -0
  65. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/hoc/RNGSettings.hoc +0 -0
  66. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/hoc/TDistFunc.hoc +0 -0
  67. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/hoc/TStim.hoc +0 -0
  68. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/hoc/fileUtils.hoc +0 -0
  69. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/importer.py +0 -0
  70. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/neuron_interpreter.py +0 -0
  71. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/plotwindow.py +0 -0
  72. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/psection.py +0 -0
  73. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/psegment.py +0 -0
  74. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/rngsettings.py +0 -0
  75. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/simulation/__init__.py +0 -0
  76. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/simulation/neuron_globals.py +0 -0
  77. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/simulation/parallel.py +0 -0
  78. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/simulation/simulation.py +0 -0
  79. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/stimulus/__init__.py +0 -0
  80. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/stimulus/circuit_stimulus_definitions.py +0 -0
  81. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/stimulus/factory.py +0 -0
  82. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/stimulus/stimulus.py +0 -0
  83. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/synapse/__init__.py +0 -0
  84. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/synapse/synapse_factory.py +0 -0
  85. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/synapse/synapse_types.py +0 -0
  86. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/tools.py +0 -0
  87. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/type_aliases.py +0 -0
  88. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/utils.py +0 -0
  89. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/verbosity.py +0 -0
  90. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab.egg-info/SOURCES.txt +0 -0
  91. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab.egg-info/dependency_links.txt +0 -0
  92. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab.egg-info/requires.txt +0 -0
  93. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab.egg-info/top_level.txt +0 -0
  94. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/Makefile +0 -0
  95. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/images/voltage-readme.png +0 -0
  96. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/make.bat +0 -0
  97. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/requirements_docs.txt +0 -0
  98. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/source/_static/.gitkeep +0 -0
  99. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/source/api.rst +0 -0
  100. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/source/changelog.rst +0 -0
  101. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/source/compiling-mechanisms.rst +0 -0
  102. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/source/conf.py +0 -0
  103. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/source/contributing.rst +0 -0
  104. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/source/index.rst +0 -0
  105. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/source/list_of_stim.rst +0 -0
  106. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/source/logo/BlueCelluLabBanner.jpg +0 -0
  107. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/pyproject.toml +0 -0
  108. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/setup.cfg +0 -0
  109. {bluecellulab-2.6.53 → bluecellulab-2.6.55}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluecellulab
3
- Version: 2.6.53
3
+ Version: 2.6.55
4
4
  Summary: Biologically detailed neural network simulations and analysis.
5
5
  Author: Blue Brain Project, EPFL
6
6
  License: Apache2.0
@@ -4,11 +4,9 @@ try:
4
4
  except ImportError:
5
5
  efel = None
6
6
  from itertools import islice
7
- from itertools import repeat
8
7
  import logging
9
8
  from matplotlib.collections import LineCollection
10
9
  import matplotlib.pyplot as plt
11
- from multiprocessing import Pool
12
10
  import neuron
13
11
  import numpy as np
14
12
  import pathlib
@@ -97,20 +95,15 @@ def compute_plot_iv_curve(cell,
97
95
  for amp in list_amp
98
96
  ]
99
97
 
100
- with Pool(len(steps)) as p:
101
- recordings = p.starmap(
102
- run_stimulus,
103
- zip(
104
- repeat(cell.template_params),
105
- steps,
106
- repeat(injecting_section),
107
- repeat(injecting_segment),
108
- repeat(True), # cvode
109
- repeat(True), # add_hypamp
110
- repeat(recording_section),
111
- repeat(recording_segment),
112
- )
113
- )
98
+ recordings = []
99
+ for step in steps:
100
+ recording = run_stimulus(cell.template_params,
101
+ step,
102
+ section=injecting_section,
103
+ segment=injecting_segment,
104
+ recording_section=recording_section,
105
+ recording_segment=recording_segment)
106
+ recordings.append(recording)
114
107
 
115
108
  steady_states = []
116
109
  # compute steady state response
@@ -208,24 +201,19 @@ def compute_plot_fi_curve(cell,
208
201
  for amp in list_amp
209
202
  ]
210
203
 
211
- with Pool(len(steps)) as p:
212
- recordings = p.starmap(
213
- run_stimulus,
214
- zip(
215
- repeat(cell.template_params),
216
- steps,
217
- repeat(injecting_section),
218
- repeat(injecting_segment),
219
- repeat(True), # cvode
220
- repeat(True), # add_hypamp
221
- repeat(recording_section),
222
- repeat(recording_segment),
223
- repeat(True), # enable_spike_detection
224
- repeat(threshold_voltage), # threshold_spike_detection
225
- )
226
- )
227
-
228
- spike_count = [len(recording.spike) for recording in recordings]
204
+ spikes = []
205
+ for step in steps:
206
+ recording = run_stimulus(cell.template_params,
207
+ step,
208
+ section=injecting_section,
209
+ segment=injecting_segment,
210
+ recording_section=recording_section,
211
+ recording_segment=recording_segment,
212
+ enable_spike_detection=True,
213
+ threshold_spike_detection=threshold_voltage)
214
+ spikes.append(recording.spike)
215
+
216
+ spike_count = [len(spike) for spike in spikes]
229
217
 
230
218
  plot_fi_curve(list_amp,
231
219
  spike_count,
@@ -177,7 +177,7 @@ class SonataSimulationConfig:
177
177
  @property
178
178
  def spikes_file_path(self) -> Path:
179
179
  output_dir = Path(self.output_root_path)
180
- spikes_file = self.impl.config.get("output", {}).get("spikes_file", "spikes.h5")
180
+ spikes_file = self.impl.config.get("output", {}).get("spikes_file", "out.h5")
181
181
  return output_dir / spikes_file
182
182
 
183
183
  @property
@@ -311,8 +311,8 @@ class CircuitSimulation:
311
311
 
312
312
  # add spike recordings
313
313
  for cell in self.cells.values():
314
- if not cell.is_recording_spikes("soma", threshold=self.spike_threshold):
315
- cell.start_recording_spikes(None, location="soma", threshold=self.spike_threshold)
314
+ if not cell.is_recording_spikes(self.spike_location, threshold=self.spike_threshold):
315
+ cell.start_recording_spikes(None, location=self.spike_location, threshold=self.spike_threshold)
316
316
 
317
317
  def _add_stimuli(self, add_noise_stimuli=False,
318
318
  add_hyperpolarizing_stimuli=False,
@@ -474,7 +474,6 @@ class CircuitSimulation:
474
474
  filtered_dicts = [d for d in train_dicts if isinstance(d, dict) and d]
475
475
 
476
476
  if not filtered_dicts:
477
- logger.warning("merge_pre_spike_trains: No presynaptic spike trains found.")
478
477
  return {}
479
478
 
480
479
  all_keys = set().union(*[d.keys() for d in filtered_dicts])
@@ -832,7 +831,8 @@ class CircuitSimulation:
832
831
  cells=self.cells,
833
832
  report_cfg=report_cfg,
834
833
  source_sets=compartment_sets,
835
- source_type="compartment_set"
834
+ source_type="compartment_set",
835
+ sim_dt=self.dt,
836
836
  )
837
837
 
838
838
  else:
@@ -848,7 +848,8 @@ class CircuitSimulation:
848
848
  cells=self.cells,
849
849
  report_cfg=report_cfg,
850
850
  source_sets=node_sets,
851
- source_type="node_set"
851
+ source_type="node_set",
852
+ sim_dt=self.dt,
852
853
  )
853
854
 
854
855
  self.write_spike_report()
@@ -868,7 +869,7 @@ class CircuitSimulation:
868
869
  if pop is None:
869
870
  continue
870
871
  try:
871
- cell_spikes = cell.get_recorded_spikes(location="soma", threshold=self.spike_threshold)
872
+ cell_spikes = cell.get_recorded_spikes(location=self.spike_location, threshold=self.spike_threshold)
872
873
  if cell_spikes is not None:
873
874
  spikes_by_population[pop][gid.id] = list(cell_spikes)
874
875
  except AttributeError:
@@ -92,6 +92,7 @@ def write_compartment_report(
92
92
  report_cfg: dict,
93
93
  source_sets: dict,
94
94
  source_type: str,
95
+ sim_dt: float
95
96
  ):
96
97
  """Write a SONATA-compatible compartment report to an HDF5 file.
97
98
 
@@ -109,6 +110,7 @@ def write_compartment_report(
109
110
  - "cells" or "compartments": Name of the node or compartment set.
110
111
  source_sets (dict): Dictionary of either node sets or compartment sets.
111
112
  source_type (str): Either "node_set" or "compartment_set".
113
+ sim_dt (float): Simulation time step used for the recorded data.
112
114
 
113
115
  Raises:
114
116
  ValueError: If the specified source set is not found.
@@ -157,25 +159,60 @@ def write_compartment_report(
157
159
  return
158
160
 
159
161
  write_sonata_report_file(
160
- output_path, population, data_matrix, recorded_node_ids, index_pointers, element_ids, report_cfg
162
+ output_path, population, data_matrix, recorded_node_ids, index_pointers, element_ids, report_cfg, sim_dt
161
163
  )
162
164
 
163
165
 
164
166
  def write_sonata_report_file(
165
- output_path, population, data_matrix, recorded_node_ids, index_pointers, element_ids, report_cfg
167
+ output_path,
168
+ population,
169
+ data_matrix,
170
+ recorded_node_ids,
171
+ index_pointers,
172
+ element_ids,
173
+ report_cfg,
174
+ sim_dt
166
175
  ):
167
- data_array = np.stack(data_matrix, axis=1)
176
+ start_time = float(report_cfg.get("start_time", 0.0))
177
+ end_time = float(report_cfg.get("end_time", 0.0))
178
+ dt_report = float(report_cfg.get("dt", sim_dt))
179
+
180
+ # Clamp dt_report if finer than simuldation dt
181
+ if dt_report < sim_dt:
182
+ logger.warning(
183
+ f"Requested report dt={dt_report} ms is finer than simulation dt={sim_dt} ms. "
184
+ f"Clamping report dt to {sim_dt} ms."
185
+ )
186
+ dt_report = sim_dt
187
+
188
+ step = int(round(dt_report / sim_dt))
189
+ if not np.isclose(step * sim_dt, dt_report, atol=1e-9):
190
+ raise ValueError(
191
+ f"dt_report={dt_report} is not an integer multiple of dt_data={sim_dt}"
192
+ )
193
+
194
+ # Downsample the data if needed
195
+ # Compute start and end indices in the original data
196
+ start_index = int(round(start_time / sim_dt))
197
+ end_index = int(round(end_time / sim_dt)) + 1 # inclusive
198
+
199
+ # Now slice and downsample
200
+ data_matrix_downsampled = [
201
+ trace[start_index:end_index:step] for trace in data_matrix
202
+ ]
203
+ data_array = np.stack(data_matrix_downsampled, axis=1).astype(np.float32)
204
+
205
+ # Prepare metadata arrays
168
206
  node_ids_arr = np.array(recorded_node_ids, dtype=np.uint64)
169
207
  index_ptr_arr = np.array(index_pointers, dtype=np.uint64)
170
208
  element_ids_arr = np.array(element_ids, dtype=np.uint32)
171
- time_array = np.array([
172
- report_cfg.get("start_time", 0.0),
173
- report_cfg.get("end_time", 0.0),
174
- report_cfg.get("dt", 0.1)
175
- ], dtype=np.float64)
209
+ time_array = np.array([start_time, end_time, dt_report], dtype=np.float64)
176
210
 
211
+ # Ensure output directory exists
177
212
  output_path = Path(output_path)
178
213
  output_path.parent.mkdir(parents=True, exist_ok=True)
214
+
215
+ # Write to HDF5
179
216
  with h5py.File(output_path, "w") as f:
180
217
  grp = f.require_group(f"/report/{population}")
181
218
  data_ds = grp.create_dataset("data", data=data_array.astype(np.float32))
@@ -438,68 +438,38 @@ def run_validations(
438
438
  )
439
439
 
440
440
  logger.debug("Running validations...")
441
- from bluecellulab.utils import NestedPool
442
- with NestedPool(processes=8) as pool:
443
- # Validation 1: Spiking Test
444
- spiking_test_result_future = pool.apply_async(
445
- spiking_test,
446
- (cell.template_params, rheobase, out_dir, spike_threshold_voltage)
447
- )
448
-
449
- # Validation 2: Depolarization Block Test
450
- depolarization_block_result_future = pool.apply_async(
451
- depolarization_block_test,
452
- (cell.template_params, rheobase, out_dir)
453
- )
441
+ # Validation 1: Spiking Test
442
+ spiking_test_result = spiking_test(
443
+ cell.template_params, rheobase, out_dir, spike_threshold_voltage
444
+ )
454
445
 
455
- # Validation 3: Backpropagating AP Test
456
- bpap_result_future = pool.apply_async(
457
- bpap_test,
458
- (cell.template_params, rheobase, out_dir)
459
- )
446
+ # Validation 2: Depolarization Block Test
447
+ depolarization_block_result = depolarization_block_test(
448
+ cell.template_params, rheobase, out_dir
449
+ )
460
450
 
461
- # Validation 4: Postsynaptic Potential Test
462
- # We have to wait for ProbAMPANMDA_EMS to be present in entitycore to implement this test
451
+ # Validation 3: Backpropagating AP Test
452
+ bpap_result = bpap_test(cell.template_params, rheobase, out_dir)
463
453
 
464
- # Validation 5: AIS Spiking Test
465
- ais_spiking_test_result_future = pool.apply_async(
466
- ais_spiking_test,
467
- (cell.template_params, rheobase, out_dir, spike_threshold_voltage)
468
- )
454
+ # Validation 4: Postsynaptic Potential Test
455
+ # We have to wait for ProbAMPANMDA_EMS to be present in entitycore to implement this test
469
456
 
470
- # Validation 6: Hyperpolarization Test
471
- hyperpolarization_result_future = pool.apply_async(
472
- hyperpolarization_test,
473
- (cell.template_params, rheobase, out_dir)
474
- )
457
+ # Validation 5: AIS Spiking Test
458
+ ais_spiking_test_result = ais_spiking_test(
459
+ cell.template_params, rheobase, out_dir, spike_threshold_voltage
460
+ )
475
461
 
476
- # Validation 7: Rin Test
477
- rin_result_future = pool.apply_async(
478
- rin_test,
479
- (rin,)
480
- )
462
+ # Validation 6: Hyperpolarization Test
463
+ hyperpolarization_result = hyperpolarization_test(cell.template_params, rheobase, out_dir)
481
464
 
482
- # # Validation 8: IV Test
483
- iv_test_result_future = pool.apply_async(
484
- iv_test,
485
- (cell.template_params, rheobase, out_dir, spike_threshold_voltage)
486
- )
465
+ # Validation 7: Rin Test
466
+ rin_result = rin_test(rin)
487
467
 
488
- # # Validation 9: FI Test
489
- fi_test_result_future = pool.apply_async(
490
- fi_test,
491
- (cell.template_params, rheobase, out_dir, spike_threshold_voltage)
492
- )
468
+ # Validation 8: IV Test
469
+ iv_test_result = iv_test(cell.template_params, rheobase, out_dir, spike_threshold_voltage)
493
470
 
494
- # Wait for all validations to complete
495
- spiking_test_result = spiking_test_result_future.get()
496
- depolarization_block_result = depolarization_block_result_future.get()
497
- bpap_result = bpap_result_future.get()
498
- ais_spiking_test_result = ais_spiking_test_result_future.get()
499
- hyperpolarization_result = hyperpolarization_result_future.get()
500
- rin_result = rin_result_future.get()
501
- iv_test_result = iv_test_result_future.get()
502
- fi_test_result = fi_test_result_future.get()
471
+ # Validation 9: FI Test
472
+ fi_test_result = fi_test(cell.template_params, rheobase, out_dir, spike_threshold_voltage)
503
473
 
504
474
  return {
505
475
  "memodel_properties": {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluecellulab
3
- Version: 2.6.53
3
+ Version: 2.6.55
4
4
  Summary: Biologically detailed neural network simulations and analysis.
5
5
  Author: Blue Brain Project, EPFL
6
6
  License: Apache2.0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes