bluecellulab 2.6.54__tar.gz → 2.6.56__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.54 → bluecellulab-2.6.56}/PKG-INFO +1 -1
  2. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/analysis/inject_sequence.py +4 -0
  3. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/circuit/config/sonata_simulation_config.py +1 -1
  4. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/circuit_simulation.py +7 -6
  5. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/simulation/report.py +45 -8
  6. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab.egg-info/PKG-INFO +1 -1
  7. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/.compile_mod.sh +0 -0
  8. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/.gitattributes +0 -0
  9. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/.github/dependabot.yml +0 -0
  10. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/.github/workflows/release.yml +0 -0
  11. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/.github/workflows/test.yml +0 -0
  12. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/.gitignore +0 -0
  13. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/.gitlab-ci.yml +0 -0
  14. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/.readthedocs.yml +0 -0
  15. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/.zenodo.json +0 -0
  16. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/AUTHORS.txt +0 -0
  17. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/CHANGELOG.rst +0 -0
  18. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/CITATION.cff +0 -0
  19. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/CONTRIBUTING.rst +0 -0
  20. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/LICENSE +0 -0
  21. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/MANIFEST.in +0 -0
  22. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/Makefile +0 -0
  23. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/README.rst +0 -0
  24. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/__init__.py +0 -0
  25. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/analysis/__init__.py +0 -0
  26. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/analysis/analysis.py +0 -0
  27. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/analysis/plotting.py +0 -0
  28. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/analysis/utils.py +0 -0
  29. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/cell/__init__.py +0 -0
  30. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/cell/ballstick/__init__.py +0 -0
  31. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/cell/ballstick/emodel.hoc +0 -0
  32. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/cell/ballstick/morphology.asc +0 -0
  33. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/cell/cell_dict.py +0 -0
  34. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/cell/core.py +0 -0
  35. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/cell/injector.py +0 -0
  36. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/cell/plotting.py +0 -0
  37. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/cell/random.py +0 -0
  38. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/cell/recording.py +0 -0
  39. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/cell/section_distance.py +0 -0
  40. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/cell/serialized_sections.py +0 -0
  41. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/cell/sonata_proxy.py +0 -0
  42. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/cell/stimuli_generator.py +0 -0
  43. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/cell/template.py +0 -0
  44. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/circuit/__init__.py +0 -0
  45. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/circuit/circuit_access/__init__.py +0 -0
  46. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/circuit/circuit_access/bluepy_circuit_access.py +0 -0
  47. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/circuit/circuit_access/definition.py +0 -0
  48. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/circuit/circuit_access/sonata_circuit_access.py +0 -0
  49. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/circuit/config/__init__.py +0 -0
  50. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/circuit/config/bluepy_simulation_config.py +0 -0
  51. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/circuit/config/definition.py +0 -0
  52. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/circuit/config/sections.py +0 -0
  53. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/circuit/format.py +0 -0
  54. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/circuit/iotools.py +0 -0
  55. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/circuit/node_id.py +0 -0
  56. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/circuit/simulation_access.py +0 -0
  57. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/circuit/synapse_properties.py +0 -0
  58. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/circuit/validate.py +0 -0
  59. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/connection.py +0 -0
  60. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/dendrogram.py +0 -0
  61. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/exceptions.py +0 -0
  62. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/graph.py +0 -0
  63. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/hoc/Cell.hoc +0 -0
  64. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/hoc/RNGSettings.hoc +0 -0
  65. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/hoc/TDistFunc.hoc +0 -0
  66. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/hoc/TStim.hoc +0 -0
  67. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/hoc/fileUtils.hoc +0 -0
  68. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/importer.py +0 -0
  69. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/neuron_interpreter.py +0 -0
  70. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/plotwindow.py +0 -0
  71. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/psection.py +0 -0
  72. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/psegment.py +0 -0
  73. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/rngsettings.py +0 -0
  74. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/simulation/__init__.py +0 -0
  75. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/simulation/neuron_globals.py +0 -0
  76. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/simulation/parallel.py +0 -0
  77. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/simulation/simulation.py +0 -0
  78. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/stimulus/__init__.py +0 -0
  79. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/stimulus/circuit_stimulus_definitions.py +0 -0
  80. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/stimulus/factory.py +0 -0
  81. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/stimulus/stimulus.py +0 -0
  82. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/synapse/__init__.py +0 -0
  83. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/synapse/synapse_factory.py +0 -0
  84. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/synapse/synapse_types.py +0 -0
  85. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/tools.py +0 -0
  86. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/type_aliases.py +0 -0
  87. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/utils.py +0 -0
  88. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/validation/validation.py +0 -0
  89. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab/verbosity.py +0 -0
  90. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab.egg-info/SOURCES.txt +0 -0
  91. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab.egg-info/dependency_links.txt +0 -0
  92. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab.egg-info/requires.txt +0 -0
  93. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/bluecellulab.egg-info/top_level.txt +0 -0
  94. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/docs/Makefile +0 -0
  95. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/docs/images/voltage-readme.png +0 -0
  96. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/docs/make.bat +0 -0
  97. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/docs/requirements_docs.txt +0 -0
  98. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/docs/source/_static/.gitkeep +0 -0
  99. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/docs/source/api.rst +0 -0
  100. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/docs/source/changelog.rst +0 -0
  101. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/docs/source/compiling-mechanisms.rst +0 -0
  102. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/docs/source/conf.py +0 -0
  103. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/docs/source/contributing.rst +0 -0
  104. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/docs/source/index.rst +0 -0
  105. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/docs/source/list_of_stim.rst +0 -0
  106. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/docs/source/logo/BlueCelluLabBanner.jpg +0 -0
  107. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/pyproject.toml +0 -0
  108. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/setup.cfg +0 -0
  109. {bluecellulab-2.6.54 → bluecellulab-2.6.56}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluecellulab
3
- Version: 2.6.54
3
+ Version: 2.6.56
4
4
  Summary: Biologically detailed neural network simulations and analysis.
5
5
  Author: Blue Brain Project, EPFL
6
6
  License: Apache2.0
@@ -11,6 +11,7 @@ from bluecellulab.simulation.parallel import IsolatedProcess
11
11
  from bluecellulab.simulation.simulation import Simulation
12
12
  from bluecellulab.stimulus.circuit_stimulus_definitions import Hyperpolarizing
13
13
  from bluecellulab.stimulus.factory import Stimulus, StimulusFactory
14
+ from bluecellulab.tools import template_accepts_cvode
14
15
  from bluecellulab.tools import validate_section_and_segment
15
16
 
16
17
 
@@ -112,6 +113,9 @@ def run_multirecordings_stimulus(
112
113
  current_vector = neuron.h.Vector()
113
114
  current_vector.record(iclamp._ref_i)
114
115
 
116
+ if cvode:
117
+ cvode = template_accepts_cvode(template_params.template_filepath)
118
+
115
119
  simulation = Simulation(cell)
116
120
  simulation.run(stimulus.stimulus_time, cvode=cvode)
117
121
 
@@ -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))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluecellulab
3
- Version: 2.6.54
3
+ Version: 2.6.56
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