Source code for bsb.simulation.results

import traceback
import typing

from ..reporting import warn

if typing.TYPE_CHECKING:
    import neo


[docs] class SimulationResult: def __init__(self, simulation): from neo import Block tree = simulation.__tree__() try: del tree["post_prepare"] except KeyError: pass self.block = Block(name=simulation.name, config=tree) self.recorders = [] @property def spiketrains(self): return self.block.segments[0].spiketrains @property def analogsignals(self): return self.block.segments[0].analogsignals
[docs] def add(self, recorder): self.recorders.append(recorder)
[docs] def create_recorder(self, flush: typing.Callable[["neo.core.Segment"], None]): recorder = SimulationRecorder() recorder.flush = flush self.add(recorder) return recorder
[docs] def flush(self): from neo import Segment segment = Segment() self.block.segments.append(segment) for recorder in self.recorders: try: recorder.flush(segment) except Exception as e: traceback.print_exc() warn("Recorder errored out!")
[docs] def write(self, filename, mode): from neo import io io.NixIO(filename, mode=mode).write(self.block)
[docs] class SimulationRecorder:
[docs] def flush(self, segment: "neo.core.Segment"): raise NotImplementedError("Recorders need to implement the `flush` function.")
__all__ = ["SimulationResult", "SimulationRecorder"]