Skip to content
Snippets Groups Projects
  1. Oct 05, 2022
    • Thorsten Hater's avatar
      Clean up plasticity (#1985) · fc85765e
      Thorsten Hater authored
      1. Fix Python bindings for `recipe::update`
         - *drop* the GIL before handing off to C++
         - tighten exception safety
      2. Run plasticity examples with threads; both C++ and Python.
         - C++: Guard against I/O interleaving.
         - Py: Drop spikes from source, prettify reporting.
         - C++: use decor chaining.
      3. Modernise PYBIND11_OVERLOAD -> *RIDE (advised since 2.6).
      4. No longer do we initialise connectivity twice.
         - Simplify communicator construction.
         - Fix unit tests that needed to two-phase init communicator.
      fc85765e
    • boeschf's avatar
      SDE (#1884) · c976c666
      boeschf authored
      Main changes
      - uncorrelated and independently distributed white noise generation for point and density mechanisms
      - enabled by extending nmodl dialect and adjusting modcc (WHITE_NOISE block, stochastic solver method)
      - SDEs are solved by Euler-Maruyama method (synapse collapsing disabled in this case)
      - CPU and GPU backends responsible for creating random numbers using random123
      - simulation takes a seed value
      - bumped ABI due to addition of random numbers in ppack
      Incidental changes
      - builder pattern for simulation
      - pimpl idiom supported by util classes
      c976c666
  2. Sep 05, 2022
    • Thorsten Hater's avatar
      Mutable connection table (#1919) · 07e0bb62
      Thorsten Hater authored
      Add functionality, docs, and examples on editing the connection table.  This is a first, small PR
      on the topic, further functionality will come as requested.
      
      Teaser example
      ```cxx
          // This recipe -- omitted -- implements a mutable connection table 
          // and returns it via the `connections_on` callback. New entries are
          // added using `add_connection` which makes one link from a central 
          // `spike_source_cell` to the given `gid`
          auto rec = recipe();
          rec.add_connection(1);
      
          auto sim = arb::simulation(rec, ctx);
      
          // Record spikes
          std::vector<arb::spike> spikes;
          sim.set_local_spike_callback([&spikes](const auto& s) { spikes.insert(spikes.end(), s.begin(), s.end()); });
      
          // Run and print all spikes per gid
          sim.run(0.25, 0.025);
          show_spikes(spikes);
      
          // Add a new connection
          rec.add_connection(2);
          sim.update_connections(rec);
      
          // Run and print all spikes per gid
          sim.run(0.5, 0.025);
          show_spikes(spikes);
      ```
      
      # Update July '22
      
      - added re-wiring of Event Generators
      - implemented a split between a recipe and a recipe-update (cheekily dubbed `topping` until further notice)
      - `recipes` are `toppings` via inheritance
      07e0bb62
  3. Aug 05, 2022
  4. Jun 21, 2022
    • Thorsten Hater's avatar
      Add some convenience to simulation creation. (#1904) · d15afd39
      Thorsten Hater authored
      Encapsulates 80% of cases:
      ```cxx
       rec = recipe()
       ctx = make_context()
       dec = partition_load_balance(rec, ctx)
       sim = simulation(rec, dec, ctx)
      ```
      is now written as
      ```cxx
       rec = recipe()
       sim = simulation(rec)
      ```
      In python we use keyword args to allow
      both to be specified separatly.
      
      Partially fixes #1862 
      d15afd39
  5. May 05, 2022
  6. Oct 08, 2021
    • max9901's avatar
      Provide a method to clear sampler contents · 1aa0aed2
      max9901 authored
      - Add `simulation.clear_samplers` to remove spikes and samples from Python.
      - Usecase: long-running simulations; where unlimited growth of sampling memory is an issue.
      1aa0aed2
  7. Jun 16, 2021
  8. Dec 09, 2020
  9. Nov 18, 2020
    • Sam Yates's avatar
      Expose diverse probes in Python API. (#1225) · 1bfe96bc
      Sam Yates authored
      Major changes in Python library and documentation:
      
      * Add global state (immutable after initialization) for the Python module that
        manages the mapping between probe metadata types and the method by which the
        corresponding [sample data can be collected and presented as Python objects.
        This is necessary for decoupling the implementation of the simulation wrapper
        from that of the various cable cell probe types.
      
      * Wrap each of the C++ cable cell probe types with a Python function that
        returns a `probe_info` object.
      
      * Add code for converting and accumulating C++ probe metadata and sample
        data, registered in the module global state against the metadata type info.
      
      * Make the `arbor.simulator` object responsible for recording all spike and
        sample data, with corresponding new methods.
      
      * Use NumPy arrays and structured datatypes for returning spike and
        sample data.
      
      * Place Python schedule proxies under an abstract interface so that consumers
        of the proxies can be made generic over schedule types.
      
      * Add unit tests for the `arbor.simulator` class and its new functionality,
        including distributed spike collection.
      
      * Rework all Python API documentation concerning probes, sampling, and spike
        recording; add information on newly exposed cable cell probe addresses.
      
      * Add new python example `single_cell_recipe.py` which is a generic recipe
        version of `single_cell_model.py`.
      
      * Adjust other code in the wrapper and examples to accommodate these changes.
      
      Minor changes in Python library:
      
      * Add equality tests for `arbor.location` and `arbor.cable` Python classes.
      
      * Use the `py::` namespace shorthand more often in the Python wrapping sources.
      
      * Add an implicit conversion for a pair of numbers to `arbor.cell_member`, so
        that e.g. probe ids can be specified simply as `(gid, index)`.
      
      * Add an implicit conversion from a tuple to `arbor.mpoint` so that a
        morphological point can be specified simply as `(x, y, z, radius)`.
      
      * Modify the interface to `arbor.regular_schedule` so that the overloads
        correspond more closely to the C++ API. In particular,
        `arbor.regular_schedule(dt)` now describes a schedule with times 0, dt, 2*dt,
        etc.
      
      Minor changes in C++ library:
      
      * Change test in FVM lowered cell implementation and exception message for
        `bad_source_description`: assert number of detectors is exactly the number
        of sources promised by the recipe.
      
      * Add comment describing `probe_metadata` object in `sampling.hpp` which
        asserts that the type and value of probe-specific metadata completely
        determines the correct interpretation of sampled data provided to a callback.
      1bfe96bc
  10. Oct 02, 2019
    • akuesters's avatar
      Python wrapper: thread safe recipe (#882) · f30c4204
      akuesters authored and Benjamin Cumming's avatar Benjamin Cumming committed
      Ensure that errors in Python callbacks that are called from multithreaded C++ code propogate the correct Python error back to the parent Python callback site, and that no callbacks are called from other threads if an error has already ocurred.
      - protects each recipe callback with a mutex, stores python exception, catches and throws python exception if occured
      - methods calling recipe (in simulation and partition_load_balance) are protected as well by try catch, resets and rethrows python exception (if occured) or else throws C++ exception
      
      fixes #792
      f30c4204
  11. Sep 25, 2019
    • akuesters's avatar
      Python feature probes and samples (#872) · 8e985d40
      akuesters authored
      Adds
      
      * to `recipe.cpp`: 
      `num_probes` and `get_probe` with helper function `cable_probe(kind, id, location)`
      * `sample.cpp`: 
      `sample` type with attributes `time` and `value`; a `sampler` with `samples()` and `clear()` and helper functions `attach_sampler(sim, dt)` for adding all probes as well as `attach_sampler(sim, dt, probe_id)` for adding one probe
      * `morphology.cpp`: 
      `location` as `arb::mlocation` with `branch` and `position` 
      * corresponding docs and example
      * update to new cable cell semantics in c++ validation test
      
      fixes #762
      8e985d40
  12. Jul 02, 2019
    • akuesters's avatar
      Python wrapper: documentation (#799) · 1f4eacd2
      akuesters authored and Benjamin Cumming's avatar Benjamin Cumming committed
      Add docs for Python wrapper to ReadTheDocs:
      
      - Overview, Common Types, Hardware Management, Recipes, Domain Decomposition, Simulations, Metering
      - Installing Arbor: Optional Requirements (Python), Buidling and Installing (Python Frontend), and Installation (Python Module)
      
      Missing (, since not implemented yet): 
      
      - probes
      - arbor-sup 
      - hint maps in domain_decomposition
      - reset, events, empty schedule in event_generator
      Also does not cover unit testing (since doc is user-centric).
      
      Makes also defaults and units in wrapper consistent.
      
      Fixes  #766
      1f4eacd2
  13. Jun 24, 2019
    • Benjamin Cumming's avatar
      Python spikes (#788) · 726328c4
      Benjamin Cumming authored
      Support for recording spikes generated by a simulation in the Python wrapper
      * Implement a `spike_recorder` that holds a shared pointer to a `std::vector` of spikes, and a callback for the `arb::simulation` spike recording API.
      * Add `python/example/ring.py` that creates a ring network, then records and prints spikes.
      * Some fixes to get the full `recipe` -> `domain_decomposition` -> `simulation` -> `spikes` workflow to work
        * always use default `global_parameters`: user customization of global parameters for cable cells can wait until the ion species interface is finished.
        * change the Python recipe interface for `recipe::connections_on` to use `pybind11::objects` because of shim.
      * Some small improvements to error and help messages.
      
      Fixes #764 
      726328c4
  14. Jun 12, 2019