Skip to content
Snippets Groups Projects
  1. Nov 13, 2020
  2. Nov 10, 2020
  3. Nov 09, 2020
  4. Nov 06, 2020
    • Nora Abi Akar's avatar
      Check trailing data in SWC (#1218) · ff1c06d8
      Nora Abi Akar authored
      * Remove blank line from `ball_and_stick.swc` 
      * Mention that blank lines in SWC files indicate end of data.
      * Check for trailing data after parsing in the python interface.
      * Leave stream in good state if `parse_swc` encounters an empty line indicating end of data.
  5. Nov 05, 2020
    • Nora Abi Akar's avatar
      Modify SWC loaders (#1214) · 594a365f
      Nora Abi Akar authored
      * Rename `as_segment_tree` to `load_swc_arbor`.
      * Remove `swc_mode`: `sort_and_validate_swc` now performs the `relaxed` checks by default, `load_swc_arbor` performs the `strict` checks. 
      * Change `load_swc_xxx` to only accept `swc_data` as an argument
      * Remove default constructor for `swc_data` and enforce validation of SWC records via `sort_and_validate_swc` at construction.
      * Add fixes for docs and unit tests.
  6. Nov 02, 2020
  7. Nov 01, 2020
  8. Oct 09, 2020
  9. Oct 08, 2020
  10. Oct 07, 2020
  11. Oct 06, 2020
  12. Oct 05, 2020
    • Brent Huisman's avatar
      Docs restructure for 0.4 (#1167) · 67b178cb
      Brent Huisman authored
      * Synced pages between Concepts, Python API and C++ API wherever possible
          * Recipe pages conform between the three section (concepts, python, c++)
          * Cell, Cable Cell and Cell * pages are rearranged and provided with some copy explaining the relationship between them.
      * Moved Python API out of Concepts
      * Renamed Concepts "How does Arbor work?"
      * Added Python Module Index plus mock import of Arbor for RTD build (unfortunately won't show there)
      * Broke out Interconnectivity (synapses) page.
      * Reworked Single Cell Model page into a quick start, with lots of cross referencing.
      * Tweaked logo.
      * Added Spack to install options.
      * Updated blurb.
      * Documentation now follows EU capitalization rules.
      * Assorted typofixes
  13. Sep 25, 2020
    • Sam Yates's avatar
      Add NeuroML2 morphology support in new library. (#1148) · 3c453b64
      Sam Yates authored
      * Add CMake infrastructure for new `arbornml` library comprising Arbor's NeuroML2 (C++) support.
      * Implement NeuroML2 parsing and interpretation, using libxml2 for XML parsing.
      * Add associated documentation, unit tests.
      * Replace `arb::util::optional` with `std::optional` in stitch morphology interface.
      * Add optional prefix to `arb::label_dict` import.
      * Update CI to test arbornml, with associated workarounds for OS X targets.
      * Remove glob functionality from `sup`, as it is no longer needed (it was used for lmorpho) and it triggers yet another OS X issue.
      
      Fixes #1088.
  14. Sep 22, 2020
    • Benjamin Cumming's avatar
      Move region/locset S-expr evaluation from python lib to Arbor lib. (#1157) · 3ba5f437
      Benjamin Cumming authored
      * Move label and s-expr parsing code and unit tests from Python to arbor C++ library.
      * Update `locset` and `region` constructors that take string arguments to parse strings as s-expressions or "quoted" labels.
      * Modify the input stream modifier used to parse asc files to use a lookup table for substitutions, renamed it transmogrifier.                                                             
      * Replace `hopefully` type implemented in python headers with an `arb::util::expected`.
      * Add `ARBDEV_COLOR` CMake option that forces gcc and clang to always output color output.
      * Allow arbitrary strings in labels in region and locset expressions.
      * Add `parse_region_expression` and `parse_locset_expression` functions alongside the existing `parse_label_expression` function for use when a region or locset is expected. These calls will promote a quoted string `"label"` to `(region "label")` or 
       `(locset "label")` respectively.
      * Ad...
  15. Sep 18, 2020
    • Sam Yates's avatar
      Replace `util::any` and `util::variant` with std:: equivalents. (#1152) · 30e4c684
      Sam Yates authored
      * Replace usages of `util::any` with `std::any`.
      * Modify `util::any_cast` so that it forwards `std::any` arguments to `std::any_cast`; move into own header.
      * Prevent `std::unique_any` from implicitly encapsulating `std::any` objects.
      * Replace `test_any.cpp` unit tests with `test_any_cast.cpp` unit tests.
      * Replace some usages of `std::is_same<X, Y>::value` with `std::is_same_v<X, Y>` as part of general C++17ification.
      * Remove `util/variant.hpp`, `test_variant.cpp`.
      * Replace occurrences of `util::variant` with `std::variant`.
      * Replace `util::variant::get<N>` with `std::get<N>`.
      * Replace `util::get_if<N>` with `std::get_if<N>`, passing a pointer to variant instead of a ref or value.
      * Add some standard #includes where they were required in the source, but only included transitively.
      * Some minor comment tidying and fix-ups.
      * Update C++ API docs.
      
      Fixes #1144.
    • Sam Yates's avatar
      Fix misleading typo in cable cel python docs. (#1153) · 72df06e6
      Sam Yates authored
      Fixes #1149.
  16. Sep 14, 2020
    • Benjamin Cumming's avatar
      Update to C++17 (#1141) · 74411404
      Benjamin Cumming authored
      * Update CMake CXX version.
      * Make CUDA 10 a minimum requirement and remove CUDA 9 support code.
      * Set up g++ Travis tests to use g++ 8.
      * Explicitly set C++14 version for nvcc.
      * Properly split cuda compilation, including in unit tests.
      * Remove unnecessary modcc `SOLVE` warning.
      * Update pybind11 module to tag v2.5.0
      * Replace `util::size` and `util::data` with `std::` equivalents.
  17. Sep 07, 2020
  18. Aug 27, 2020
    • Benjamin Cumming's avatar
      Pydoc (#1122) · 23a24b5a
      Benjamin Cumming authored
      This PR adds a bunch of high-level docs for concepts related to single cell models.
        * morphologies
        * labels (region and locset expressions)
        * mechanisms
        * cable cells
      
      It adds some python scripts to the `doc` path, which are called during documentation building to generate images of cell morphologies, regions and locsets that are generated in a separate script that uses the Arbor Python API.
      
      The docs are not complete: the cable cell and mechanism docs are unfinished, and the tutorial section needs to build on these concepts to give more detailed step by step examples.
    • Sam Yates's avatar
      Merge pull request #1123 from halfflat/feature/stitch-morphology · 135e91ac
      Sam Yates authored
      New PR post master rollback; squashed and rebased, but reprises #1111.
      
      * Add (forward) ordered forest implementation, tests.
      * Add `segment` region expression; to ease implementation, `msegment` now also knows its own id.
      * Add `stitch_builder` and `stitched_morphology`. A stitch corresponds to a labelled, linearly-interpolated segment which can be attached at any point along a parent stitch. A `stitched_morphology` takes a `stitch_builder` object and constructs a segment tree and morphology, and provides a dictionary of stitch labels to segment indices and region expressions.
      * Add `import` method for `label_dict`, so that the label dictionary returned by `stitched_morphology` can be merged with an existing dictionary.
      * Add section on stitch builder etc. to cable cell docs.
      * Update cable cell docs to remove out of date info and to provide some context.
      * Describe ordered forest datastructure and interface in a long comment at the beginning of the header file.
  19. Aug 26, 2020
  20. Aug 13, 2020
  21. Jul 28, 2020
  22. Jul 02, 2020
    • Sam Yates's avatar
      Allow CV policies to be composed over subregions. (#1078) · 2e90a382
      Sam Yates authored
      * Move `cv_policy` classes to new source files.
      * Remove `cv_policy_flag::single_root_cv`.
      * Allow all supplied `cv_policy` makers to be restricted a domain specified by a region: the policy is then applied per component, with the boundary points of the completion of the components included.
      * Expose `cv_policy` domain in public interface.
      * Add `components` function for splitting an extent into disconnected components. Add comment describing what is meant by connected in this context.
      * Rename `super` region function to `complete`.
      * Add region expression functions `complement` and `difference`.
      * Add new locset expression function `boundary` which returns the extrmal points of each component of a region.
      * Add new locset expression `cboundary` which returns the extremal points of the completion of each component of the region, which is what we need to close off CVs generated by region-restricted CV policies.
      * Add locset expression `support` which returns the multiset support of the points in a locset, i.e. all points in the locset but with multiplicity one.
      * Replace hodgepodge of `join` expressions in `cv_policy` implementations with locset `support` and `sum`.
      * Inline `mcable::prox_loc` and `mcable::dist_loc`.
      * Add cv policy combinators +_and |.
      * Add `util::foldl` which acts like `std::accumulate` for ranges, except it explicitly allows mutation of the sequence, and pass the accumulation value by rvalue.
      * Add unit tests for mextent components, new locset expressions.
      * Remove spherical soma cases from `cv_policy` testing.
      * Extent `cv_policy` unit tests to cover new functionality.
      * Rejig `cv_policy` unit tests to use the morphology testing predicates.
      * Add `cv_policy` documentation to cable cell docs.
      
      Fixes #1058.
  23. Jun 12, 2020
    • Sam Yates's avatar
      New recipe probe API (#1054) · 8d866593
      Sam Yates authored
      * Make recipe return probes as a vector.
      * Remove `probe_id` from `probe_info`.
      * Rename `fvm_probe_info` to `fvm_probe_data` (everything was being called info, and it was getting confusing).
      * Make `probe_association_map` specific to `mc_cell_group`/`fvm_lowered_cell`.
      * Change probe_association_map representation: unordered map for probe_id -> tag; unordered multimap for probe_id -> fvm_probe_data. This allows multiple probes to be associated with the same probe id.
      * Call sampler callback separately for each probe with the same probe_id.
      * Replace location-based probes with locset equivalents.
      * Add index for probes sharing a probe id.
      * Bundle all probe metadata (id, tag, index, probe-specific meta) into `probe_metadata` struct for passing to sampler callbacks.
      * Change simple_sampler to work on `trace_vector`, a vector of `trace_data`. The _i_th element is the data from probe with index i.
      * Consolidate hash composition and `std::hash` specialization code in new...
  24. May 26, 2020
    • Sam Yates's avatar
      Implement exact sampling for cable cells. (#1046) · d8893d9b
      Sam Yates authored
      Fixes #1037. 
      
      * Add fake unmatchable spike events to event queue for each exact sample request, so that integration boundaries align with exact sample times.
      * Update probe-demo for exact sampling.
      * Add copy assignment for `cable_cell`.
      * Extend max args for ARB_PP_FOREACH to 20.
      * Add unit test for ARB_PP_FOREACH.
      * Use ARB_PP_FOREACH to instantiate backend-specific probe unit tests. This also fixes the GPU probe tests that were using multicore backend.
      * Add unit test that exercises exact sampling requests combined with regular events in a gap junction context.
  25. May 22, 2020
    • Sam Yates's avatar
      Extend cable cell probe variety. (#1034) · b2e5d1f0
      Sam Yates authored
      Fixes #589 and #730, providing cell-wide probes and a correct total trans-membrane current.
      Fixes #822, providing spatial interpolation of membrane voltages as governed by cable resistivity and diameter.
      
      * Add partition of point mechanism target vector by cell index to `fvm_mechanism_config`.
      * Fix sign error in axial current interpolation.
      * Replace `fvm_probe_info` with class that wraps a variant type capturing one of a set of backend-cellgroup probe translation representations: `fvm_probe_scalar`, `fvm_probe_interpolated`, `fvm_probe_multi`, `fvm_probe_weighted_multi`, `fvm_probe_membrance_currents`.
      * Refactor `fvm_lowered_cell_impl::resolve_probe_address` so that it avoids the long chain of if-else tests on wrapped `any` type with an invocation of `util::any_visitor`. Each specific cable cell probe address representation is translated into one of the intermediate `fvm_probe_info` variants via an overload of `resolve_probe`.
      * Add new non-scalar cell probe address types for all-of-cell values, including point mechanism state, density mechanism state, ion currents and concentrations, membrane voltage by CV cable, and total trans-mebrane currents. The latter are ultimately calculated by computing the net axial current fluxes in each CV.
      * Add `util::any_ptr` field to the sampling function interface, pointing to constant-per-simulation-run metadata associated with a probe address. Underlying metadata type varies between probe types.
      * Extend `simple_sampler` so that it optionally captures sampler metadata.
      * Add special case to `simple_sampler` for vector-valued sample data, allowing it to translate from a pointer-pair range to a std::vector.
      * Fix minor bugs in `util::variant`.
      * Add to `mc_cell_group` the logic for translating each intermediate probe representation to a sampler callback invocation, reusing temporary scratch vectors across calls.
      * Add unit comments to `embed_pwlin_data`.
      * Add probe variety demonstration `probe-demo` to examples, covering most of the new cable cell probe classes.
      * Add `util::any_visitor` runtime-type dependent dispatcher class.
      * Add `util::overload` helper for generating overloaded functional objects from individual functions, lambdas or functionals.
      * Extend probe unit tests in `test_probe.cpp` to cover new probe address types.
      * Add unit tests for `any_visitor` and `overload`.
  26. Apr 15, 2020
    • Nora Abi Akar's avatar
      Compile arbor for AMD and Nvidia GPUs using clang (#1007) · 90a1e6d7
      Nora Abi Akar authored
      - Add option to compile Arbor for HIP/CUDA backend using Clang. 
      - Add new CMake option `ARB_GPU_COMPILE_TYPE` to distinguish between three possible gpu platforms/builds: `cuda-nvcc`; `cuda-clang`; `hip-clang`
      - Add gpu wrapper functions in `arbor/backends/gpu/gpu_api.hpp` and `arborenv/gpu_api.hpp` which call HIP/CUDA functions depending on the platform
      - Rename functions and files: cuda -> gpu
      - Add downgraded warp primitives for HIP
      - Implement `uuid` workaround for HIP
      - Set correct alignment and warp size for AMD gpus
      - Update installation guide and docs.
      - Update pip/setuptools to support new gpu targets
      
      Fixes #833
  27. Apr 03, 2020
  28. Feb 28, 2020
    • Benjamin Cumming's avatar
      pip / setuptools support (#977) · 45885c22
      Benjamin Cumming authored
      Add a `setup.py` for installing Arbor directly with pip/setuptools.
      
      Implement a setuptools extension for CMake in `setup.py`. To be honest, I don't understand entirely how it works, but setuptools is obtuse enough that I don't feel at all guilty about this.
      
      Define additional flags for optionally enabling GPUs, MPI, Vectorization and micro-architecture targets, for more adventurous users.
      
      The documentation is updated with a "howto pip" for more casual users who don't want anything to do with CMake.
      
      Fixes #958 .
  29. Feb 25, 2020
    • Benjamin Cumming's avatar
      More robust Python installation (#971) · b43cd07e
      Benjamin Cumming authored
      Improve the Python wrapper generation and installation:
        - install a proper module that can be extended with Python code;
        - give the user more control over where to install the module (e.g. as a user package or in a virtualenv).
      
      During building, the following sub-directory is built in the build director (`CMAKE_BINARY_DIR`)
      ```
      └── python
          └── arbor
                  ├── __init__.py
                  ├── arbor.so
                  └── VERSION
      ```
      This path can then be copied VERBATIM to the target installation path. By default this will be in `CMAKE_INSTALL_PREFIX/lib/python%d.%d/site-packages`.
      An additional CMake parameter `ARB_PYTHON_PREFIX` can be used to specify an alternative destination for installing the Python module.
      
      The Python part of the wrapper, implemented in `__init__.py` is currently very limited, only providing `__version__` and `__config__` variables.
      
      The installation guide was updated to cover the Python instal...
  30. Feb 04, 2020
    • Benjamin Cumming's avatar
      Python Interface (#948) · cfad427a
      Benjamin Cumming authored
      A big update that wraps over 90% of the public C++ API, with enough functionality to let Python users to perform useful modelling.
      
      Key features
      - wrapping of cable cell functionality
        - user-defined explicit compartmentalisation not supported
      - `single_cell_model` abstraction unique to the Python wrapper that simplifies developing and testing single cell models
      - one-dimensional cell builder for Python wrapper that simplfies building cells that 
        - in and of itself limited in scope, but a very useful example of mapping a richer morphology builder onto `sample_tree`s.
      - parsing of region and location expressions from strings
        - implements a generic s-expression parser that we can use for other purposes later
  31. Jan 20, 2020
  32. Dec 07, 2019
  33. 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