Skip to content
Snippets Groups Projects
  1. May 31, 2021
  2. May 04, 2021
  3. Feb 19, 2021
  4. Feb 17, 2021
  5. Feb 15, 2021
  6. Feb 08, 2021
  7. Feb 03, 2021
    • thorstenhater's avatar
      Allow dynamically creating and loading of mechanism catalogue (#1287) · aa1b6f04
      thorstenhater authored
      First phase of dynamically loaded mechanism catalogues.
      
      - Add functionality to load and use catalogues from DSOs in Python and C++.
      - Add documentation and support scripts to build catalogues DSOs.
      - Re-factor CMakeLists.txt for mechanisms
      - Limitations
        - Needs (compatible, preferably identical) arbor sources when building catalogues
        - Can only work on MacOS and Linux (uses dlfnc)
      aa1b6f04
  8. Jan 06, 2021
  9. Dec 18, 2020
    • Nora Abi Akar's avatar
      Docs: Python examples (#1279) · 6ebfb3db
      Nora Abi Akar authored
      * Add 2 new examples to `python/examples` and their corresponding tutorials in the docs. 
          1. `single_cell_detailed.py` : a slightly more complex example using `single_cell_model`
          2. `single_cell_detailed_recipe.py`: equivalent to `single_cell_detailed.py` but using a recipe. 
      * Change `load_swc`-> `load_swc_arbor` for consistency.
      * Run Sphinx with specified PYTHON_EXECUTABLE.
      * Set PYTHONPATH env var in doc/CMakeLists.txt, such that it propagates correctly, including locally.
      * Build pyarb BEFORE html such that docs build can import arbor in Github Actions script.
      6ebfb3db
  10. Dec 14, 2020
    • Benjamin Cumming's avatar
      Decor (#1235) · ac63809f
      Benjamin Cumming authored
      Make the `cable_cell` interface read only by passing the decorations
      to its constructor in a new `decor` type.
      
      C++ library
      * Remove the paint/place/set_default interface from `cable_cell`
      * Create a `decor` type that:
        * stores lists of paintings and placings
        * stores a set of cable cell parameters
        * uses the `paint`, `place`, `set_default` interface that was deprecated
          from `cable_cell`.
      * Create `paintable`, `placeable` and `defaultable` variants that are sum types
        over the respective types that can be painted, placed and defaulted.
      * Remove the overloaded `cable_cell::paint`, `cable_cell::place`,
        `cable_cell::set_default` methods to single methods that consume the sum types.
      
      Unit Tests
      * Many small changes because many many tests use cable cell API.
      * There were no `cable_cell` unit tests! Not such a big deal, since cable_cell
        is tested implicitly in so many other tests
        * but I added cable_cell tests: not much at the moment but will quickly fill
          up as we work on reading, writing, etc.                                                            
      
      Python
      * Wrap the new decor type.
      * Update cable cell type to reflect read only API.
      * Wrap the cv_policy types and implement the same operator overloading.
      ac63809f
  11. 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
  12. Oct 09, 2020
  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.
      3c453b64
  14. Aug 06, 2020
  15. May 22, 2020
    • Nora Abi Akar's avatar
      Travis CI arch bug fix (#1045) · 9b772f07
      Nora Abi Akar authored
      Travis CI is failing on some simd tests for `ARB_ARCH=native`
      GCC appears to be setting incorrect flags in the Travis environment for `-march=native`. Using `-march=skylake-avx512/haswell/etc` fixes the errors. 
      9b772f07
  16. 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 installation.
      b43cd07e
  17. 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
      cfad427a
  18. Jun 07, 2019
  19. Mar 15, 2019
  20. Mar 04, 2019
    • Benjamin Cumming's avatar
      Remove miniapp (#710) · 4284780f
      Benjamin Cumming authored and Sam Yates's avatar Sam Yates committed
      Remove the miniapp example.
      
      * Remove the miniapp source from example/miniapp.
      * Remove references to miniapp from CMake files.
      * Remove miniapp from the travis tests.
      * Fix unused variable warning in brunel miniapp.
      4284780f
  21. Oct 16, 2018
  22. Oct 12, 2018
  23. Oct 01, 2018
    • akuesters's avatar
      Integrating Mac OS X and clang compiler into Travis CI (#601) · e755a420
      akuesters authored and Benjamin Cumming's avatar Benjamin Cumming committed
      changes: 
      - .travis.yml:
        - added matrix for different osx's, since enumeration style only works for `env` and `compiler`
      
      - scripts/travis/build.sh:
        - changed getting compiler version from ``${CXX} -dumpversion`` to ``${CXX} --version | grep -m1 ""`` 
        - added `--oversubscribe` flag to `mpiexec` on Mac to allow more processes on a node than processing elements
        - added `--mca btl tcp,self` flag for Open MPI to use the "tcp" and "self" BTLs for transporting MPI messages on Mac
      e755a420
  24. Jul 24, 2018
    • noraabiakar's avatar
      task_system as part of an execution_context (#537) · 7a6c1031
      noraabiakar authored and Benjamin Cumming's avatar Benjamin Cumming committed
      - Task system is no longer a single system private to the implementation of the threading backend and used everywhere. A separate task_system can be used (with a specified number of threads) for every simulation.
      - arb::execution_context is the interface to task_system  and the previously defined distributed_context
      - TBB and serial support has been removed. Cthreads is the only threading backend available. 
      7a6c1031
  25. Jun 25, 2018
    • Sam Yates's avatar
      Feature/lib install target part i (#506) · ad1c78ab
      Sam Yates authored and Benjamin Cumming's avatar Benjamin Cumming committed
      CMake and build refactoring
      
      *   Use CUDA as first-class language (leading to CMake 3.9 minimum version requirement).
      
      *   Use 'modern CMake' interface libraries for compiler options, include file and library dependency tracking. Interface library targets:
          * `arbor-deps`: compiler options and library requirements for the `libarbor.a` static library, as governed by configure-time options and environment.
          * `arbor-private-headers`: include path for non-installed headers, as required by unit tests and arbor itself.
          * `arbor-aux`: helper classes and utilities used across tests and examples.
          * `ext-json`, `ext-tclap`, `ext-tbb`, `ext-benchmark`, `ext-sphinx_rtd_theme`: externally maintained software that we include (directly or via submodule) in the `ext/` subdirectory.
       
      *   Single static library `libarbor.a` includes all built-in modules and CUDA objects.
      
      *   Simply configuration options:
          *  `ARB_WITH_TRACE`, `ARB_AUTORUN_MODCC_ON_CHANGES` `ARB_SYSTEM_TYPE` removed.
          * External `modcc` is provided by `ARB_MODCC` configuration option; if provided `modcc` is still buildable, but is not included in the default target.
          * `ARB_PRIVATE_TBBLIB`, defaulting to `OFF`, instructs the build to make TBB from the included submodule.
      
      *   Extend `ErrorTarget` functionality to provide a dummy target or an error target based on a condition.
      *   Generate header version defines and library version variables based on git status and project version, via new script `include/git-source-id`.
      *   All generated binaries now placed in `bin/` subdirectory at build.
      *   Install targets installs: public headers (incomplete); static library; `modcc` tool; `lmorpho` executable; `html` documentation (examples, tests and validation data are currently not installed).
      *   Executable targets have had the `.exe` suffix removed; unit tests are labelled `unit` (arbor unit tests), `unit-modcc` (modcc unit tests), `unit-local` (distributed tests with local context), `unit-mpi` (distributed tests with MPI context).
      *   More graceful handling of configure-time detection of `nrniv`, Julia and required Julia modules for validation data generation.
      *   Add `cmake/FindJulia.cmake`, `cmake/FindTBB.cmake`  package finders, and adjust `cmake/FindUnwind.cmake` to use link library-style properties.
      *  Adjust travis script to test `unit-local` and `unit-mpi` if appropriate.
      *  Simply documentation `conf.py`.
      
      Source relocation and reorganization
      
      * All external project sources and files moved to `ext/`.
      * Source code refactoring to decouple library-using code from the configure-time definitions that govern arbor behaviour: removes conditional code in public headers that depends upon `ARB_WITH_X`-type definitions at compile time. Affected code is is in the public interfaces for MPI, the threading implementation, and the profiler.
      * Remove `util/debug.hpp`; split out functionality for pretty-printing from assertion handling.
      * Make FVM cell non-physical voltage check a run-time cell-group parameter.
      * Move spike double buffer implementation to `simulation.cpp`.
      * Make timer utility wrap POSIX `clock_gettime` independent of threading configuration.
      * Make `mpi_error` derive from `system_error` and follow C++11 `system_error` semantics.
      * `EXPECTS` macro replaced by `arb_assert` macro.
      * JSON dependency removed from `libarbor.a` and header files: moved to auxiliary library.
      * Publicly visible macros garner an `ARB_` prefix as required.
      * Move SWC test file to `test/unit` directory.
      * Work-in-progress splitting of public from private includes: as a convention not entirely adhered to as yet, private headers within arbor source are included with `""`, public headers with `<>`.
      
      Modcc interface changes
      
      * Expose via `--namespace` option the functionality that sets the namespace in generated code.
      * Use `--profile` option to add profiler hooks to generated code; uses public function interface directly rather than `PE/PL` macros in order to avoid public `PE` and `PL` defines.
      ad1c78ab
  26. Dec 22, 2017
  27. Dec 20, 2017
    • Ben Cumming's avatar
      Move miniapps path to 'example/' (#423) · f94f0eab
      Ben Cumming authored and Sam Yates's avatar Sam Yates committed
      * Rename `miniapps` subdirectory to `example`.
      * Have all example executables be built under `example` in the build directory.
      * Update Travis CI to run miniapp from new path.
      f94f0eab
  28. Nov 30, 2017
    • Wouter Klijn's avatar
      Move miniapp sources to a miniapps directory (#408) · 3b5b0386
      Wouter Klijn authored
      Restructure the miniapp in such a way that we have to option to have multiple parallel mini-applications.
      
      Move the original miniapp directory to a miniapps directory.
      Output executable also in a nested miniapps directory.
      Update the Travis to point to the new executable location.
      3b5b0386
  29. Sep 28, 2017
    • Sam Yates's avatar
      Rename NestMC references, names etc. to Arbor. (#363) · d9f38b2a
      Sam Yates authored
      * Use ARB_ and arb_ as variable prefixes in place of NMC_ and nmc_.
      * Replace references to 'NestMC' and 'NEST MC' to refer instead to Arbor.
      * Use 'arbor' as the sim name in generated validation data.
      * Reflow long-line paragraphs in `tests/ubench/README.md`.
      * Change names of CUDA mechanism and CUDA kernel libraries to include arbor name.
      d9f38b2a
    • Sam Yates's avatar
      Change nest::mc namespaces to arb (#362) · d9f99489
      Sam Yates authored
      Change nest::mc namespaces to arb
      d9f99489
  30. Sep 11, 2017
    • Ben Cumming's avatar
      Basic CI support with TravisCI (#340) · 137c5b5f
      Ben Cumming authored
      Add support for continuous integration with Travis CI.
      This implements bare bones support that can be extended over time.
      
      Travis CI test environments:
      
          All use gcc 5.
          Test the serial distributed back end with serial and cthread threading backends.
          Test mpi with cthread.
          The tbb test failed sporadically because CMake, so it is disabled for now.
      
      The test script:
      
          Builds the unit tests, global_communication tests and miniapp.
          Asserts that all unit and global_communication tests pass.
          Asserts that the miniapp runs successfully.
              does not test miniapp output for now.
      
      There is plenty of scope for improving the tests.
      A key improvement will be to use validated output for the validation and miniapp
      to provide some validation.
      
      There were some small fixes required to make the tests pass on Travis
      
          communication/mpi.hpp now sets default size and rank values of 1 and 0 respectively
          to allow all unit tests to pass when built with MPI.
          The wrappers around MPI API calls use const_cast to support MPI implementations that
          are not "const aware".
          A missing header was added to tests/unit/test_range to make std::unordered_multimap
          available.`
      137c5b5f
  31. Sep 01, 2017
    • Sam Yates's avatar
      New sampling API implementation. (#335) · 8739fd55
      Sam Yates authored
      Towards resolution of issue #283.
      
      * Replace probe/sample infrastructure with new API as outlined in the `sampling_api.rst` documentation.
      * Separate `cell` probe information from `cell` description object.
      * Add `--list` option to `tsplot`, to summarize available time series for plotting together with their metadata.
      * Add `--sample-dt` option to validation tests.
      * Change validation time series comparison behaviour: linf distance metric now estimated by comparing reference data points against linearly interpreted simulation samples, rather than the other way around.
      * Add utility class `any_ptr` which allows lightweight and type-checked access to a type-erased pointer.
      * Replace `singleton_recipe` with two simple recipe base classes used for unit and validation tests, in `tests/simple_recipes.hpp`.
      * Simplify RSS cell implementation.
      * Add statistical functions for testing of probabilistic methods in `tests/unit/stats.hpp` (and .cpp):
         * simple summary stats class;
         * Kolmogorov–Smirnov one-sided statistic and CDF;
         * approximate Poisson CDF.
      * Simplify and refactor miniapp `sample_trace` code.
      * Add new utility class `handle_set` for managing a collection of integer handles. (Near-simplest implementation.)
      * Relax const-ness constraints on `transform_iterator`.
      8739fd55
  32. Jun 19, 2017
    • Sam Yates's avatar
      Implement device-side event delivery. · 9319b302
      Sam Yates authored
      Finalizes #184 and includes fix for #285. This PR constitutes a brutal rebase of the `devel/async-integration` branch onto current master: git patch, baby.
      
      Implements asynchronous integration of cells within an `fvm_multicell` instance together with the code to implement efficient device-side event delivery.
      
      Summarized patch notes from the development branch:
      
      * Add four new views in mechanism state:
         * `vec_ci`: cv index to cell index (w.r.t. one lowered multicell instance) map.
         * `vec_t`: current or integration starting time, indexed by cell.
         * `vec_t_to`: integration stopping time, indexed by cell.
         * `vec_dt`: pre-computed delta between `vec_t` and `vec_t_to`, to address performance regression on multicore backend.
      * Extend notion of indexed view in `modcc` to encompass `CellIndexedVariable` variables, which have a per-cell value.
      * Add/change 'built-in' variables `t`, `t_to`, and `dt` for NMODL.
      * Additional utility functions:
         * `util::minmax_value`: return one-pass reduction for minimum and maximum.
         * `util::fill`: range-compatible wrapper for `std::fill`.
         * `util::empty` now works across arbitrary sequences (defaults to calling `empty()` method if it exists).
         * Extends C++17-like functionality for path testing and manipulation (c.f. PR #233).
      * Use a cached copy of the per-cell time vector for queries in `fvm_multicell`.
      * Modifies back-end matrix assembly, threshold detection and stimulus implementations to be asynchronous-friendly.
      * Rename some back-end mechanism variables for clarity, now that there are multiple sorts of cell index vectors present. `cell_index` for example has been renamed to `cell_cv_divs` where it acts as a partition division of cv indices (length 1+#cells), and `cell_to_cv` where it acts as a map from cell to index of first cv for that cell (length #cells).
      * Move common event-delivery types (`target_handle`, `deliverable_event`) to `src/backends/event.hpp`.
      * Add `multi_event_stream` data structure for `gpu` and `multicore` backends, which handles multiple streams of events, bulk loaded but individually popped.
      * Add unit tests for `multi_event_stream`.
      * Document event delivery process and abstraction in `src/backends/event_delivery.md`.
      * Virtualize `mechanism::deliver_events`.
      * Perform event delivery in `fvm_multicell::step_integration()`, using the backend-provided interfaces.
      * Add zero dt check/support to matrix state implementations.
      * Add zero dt unit tests for multicore and gpu back-end matrices.
      * Add debugging helper `util::sepval` for printing/tracing container values.
      * Add trace csv output option to miniapp.
      * Add GPU kernel and unit test for end-of-integration time step test. By default, keep using the copy-to-host-and-test method, as it is faster for cell counts up to circa 10k; investigate adaptive/threshold solutions in the future.
      * Explicitly compute and store per-cell and per-compartment `dt` from integration time bounds.
      * Determine lower bound on number of integration steps per interval in order to avoid explicit checking of minimum cell times each step.
      * Avoid any time value checking for samplers in the integration loop if none of them could be triggered in the interval.
      9319b302
  33. Apr 06, 2017
    • Sam Yates's avatar
      Add `cc-filter` line-based filtering script (#221) · 3867a6c4
      Sam Yates authored
      * Add perl program `cc-filter`, a general purpose by-line text filter with built-in default rules for filtering text containing C++ types and expressions.
      * Add documentation for the tool to the scripts `README.md` file.
      * Add demonstration table `filters/massif-strip-cxx` for using `cc-filter` with valgrind massif output.
      3867a6c4
  34. Mar 23, 2017
    • Ben Cumming's avatar
      Remove openmp threading back end (#205) · 5a6f230e
      Ben Cumming authored and Sam Yates's avatar Sam Yates committed
      Fixes #152
      
      * Remove OpenMP back end implementation.
      * Remove CMake options for OpenMP.
      * Simplify the threading model selection code in CMake.
      * Remove Extrae benchmarking scripts, which require OpenMP.
      5a6f230e
  35. Jan 21, 2017
  36. Nov 14, 2016
    • Ben Cumming's avatar
      First GPU support (#77) · 97e17b18
      Ben Cumming authored
      This PR is part of the gpu feature merge. The GPU implementation is not implemented here. Instead, we focus on refactoring of the original "multicore" back end so that it is ready for adding the GPU back end.
      
      This is a big and messy change, for which I am sorry.
      
      ## build System
      
      - A `WITH_CUDA` option has been added to the main CMakeLists. This finds the CUDA toolkit, and sets CUDA compiler flags, and will build unit tests for the gpu back end.
      - The CMakeLists that generates mechanisms with modcc has been updated to generate CUDA mechanisms.
      - the library is now named `libnestmc` instead of `libcellalgo`
      - merge the external libraries that are optionally linked againts (tbb, libunwind, etc) into a single
        `EXTERNAL_LIBRARIES` list for ease of linking
      
      ## modcc
      
      - the cprinter and cudaprinter have had small changes to generate mechanism files that are compatible with the refactored library.
      
      ## algorithms
      
      - the indexes into algorithm was "rangified". An algorithm `index_into_iterator` takes two ranges as inputs to make a range that lazily generates the index of sub into super set.
      
      ## backends
      
      - made a new path `src/backends/` for backend specific type and implementation code.
      - currently:
        - complete support for the `multicore` and `gpu` backends
        - `gpu` back end is not optimized or validated
      - the back end implementations are in `src/backends`
      - a single `backend` class, `nest::mc::{multicore,gpu}::backend`, is provides all backend specific type and implementation details fro each backend
        - storage containers
        - Hines matrix assembly for FVM method
        - Hines matrix solver
        - mechanism "factory"
      
      ## lowered fvm cells
      
      - removed `fvm_cell` because this can be modelled with an `fvm_multicell` with one cell.
      - refactored to use backend type and implementation from `fvm_policy`
      - use `std::vector` instead of containers in `nest::mc::memory::` where possible when building cells.
      
      ## memory library
      
      Refactor the "memory" library, making it much simpler and better integrated into the rest of the application. However, it is still far from perfect. The `Coordinator` approach needs to be improved, most likely by putting target-specific wisdom into pointers (which could obviate the need for a `const_array_view` type.
      1. renaming and moving
         - move from `vector/` to `src/memory`
         - move into the `nest::mc` namespace, i.e. all types and functions are now in `nest::mc::memory`
         - change from camel case nameing scheme to NestMC style naming.
      2. simplification
         - remove the CRTP cruft that was used to make operator overloading work for operations like copying from one range into another, and filling a range with a constant value. These have been replaced with `memory::fill()` and `memory::copy()` helper functions. This simplified the code _a lot_, and makes code clearer in user land.
         
         ```
         // before
         vec(0, 5) = other;
         // now
         memory::copy(other, vec(0, 5));
         ```
         - add some wrappers in `src/memory/wrappers.hpp` that help with making views. These are particularly useful for passing `std::vector` through interfaces that expect a view.
      
      ## debug backtraces
      
      Added stack traces for debugging.
      - support for OSX and Linux via libunwind
      - backtraces can be generated manually `nest::mc::util::backtrace().print()`
        - creates a new file and dumps trace into file
        - prints message to `stderr` with file name and instructions on how to analyse
      - backtraces are also automatically generated when an assertion `EXPECTS` statement fails
      - a python script in `scripts/print_backtrace` pretty prints the output with file name, line number and demangled symbols
      
      ## util simplification and consolidation
      
      The `src/util.hpp` file was removed
      - much of its contents were dead code and just removed
      - useful components like `pprintf` and `make_unique` were moved into the `src/utils` path in standalone files
      There was a lot of overlap between functionality provided in `src/memory/util.hpp` and existing functions/types in the `nest::mc::util` namespace. The `memory` implementations were removed, and their `nest::mc::util` counterparts used. There is still some work remaining, namely moving the rest of the `src/memory/util.hpp` into `src/util/...`
      97e17b18
  37. Nov 04, 2016
    • Ivan Martinez's avatar
      Omp (#38) · 0ded25a6
      Ivan Martinez authored
      * first version of openmp threading back end
      
      * adding openmp parallel sort implementation
      
      * OpenMP sort working
      
      * Support for units syntax within state block.
      
      * Add soma-less cable cell to test cells.
      
      Also:
      * Ensure intrinsic and passive properties properly set on test cells.
      
      * Change bulk resistivity default.
      
      * Align defaults with values used in most of the NEURON
        validation scripts.
      * Use consistent 100 Ω·m bulk resistivity across both
        NEURON test models and basic validation cells.
      
      * OpenMP back end working
      
      * Add Extrae+paraver support, needs to fix compilation warnings
      
      * Reorganize validation data generation
      
      * Move generation and data to top-level validation directory.
      * Make BUILD_VALIDATION_DATA and VALIDATION_DATA_DIR cache vars.
      * Add helper CMake functions for data generation.
      
      Note `validation/ref/numeric/foo.sh` is just a placeholder.
      
      * Bugfix: hh_soma.jl
      
      * Use consistent scaling for y[1] scalar voltage in hh_soma.jl
      * Also: add more reserved target names to CMakeLists.txt
        helper function.
      
      * Refactor convergence tests; add numeric soma ref.
      
      * Amend data directory path in validation tests.
      * Enmodulate `hh_soma.jl`
      * Add HH channel reference data generations script.
      * Switch `validate_soma.cpp` to numeric reference data.
      * Consolidate common code in `validate_ball_and_stick.cpp`
      * Add (nearly) Rallpack1 validation test (see below).
      * Gentle failure on absence of reference data in
        `validate_ball_and_stick.cpp`
      
      Can't yet override mechanism default parameter values,
      so the cable cell model added to `test_common_cells.hpp`
      lets the default stand; validation script will have
      to use the default membrane conductance rather than that
      given by Rallpack1.
      
      * Add Rallpack1 validation, plus bugfix, clean
      
      * Implement Rallpack1 validation test (with a workaround
        for inability to set membrane conductance).
      * Fix bug in L≠1 case in PassiveCable.jl (this may still be
        wrong).
      * Fix bug in peak delta computation in trace analysis when
        both traces have no local maxima.
      * Gentle failure on missing `numeric_soma.json`
      * Allow multiple `-s` selection operations for `tsplot`,
        acting disjunctively.
      
      * Remove errant test file.
      
      * file's cleanup
      
      * Remove tabs
      
      * Use correct routine in numeric_rallpack1.jl x0.3
      
      * Configure-time test for julia
      
      * `math::infinity<>()` wrapper for infinity
      
      * Use name `i_e` for Stim current density
      
      * Use `math::infinity<>()` for infinite value
      
      * Adds unit tests for the STATE block.
      
      * Add "lib" to search prefixes for libtbb
      
      * Fix quoting error in library search.
      * Add "lib" to prefixes when system is "Linux".
      
      * Address deprecated use of 'symbol' warning.
      
      Julia 0.5 deprecates use of `symbol` instead of
      `Symbol`. This patch just substitutes the
      correct call.
      
      * Address deprecated use of 'symbol' warning.
      
      Julia 0.5 deprecates use of `symbol` instead of
      `Symbol`. This patch just substitutes the
      correct call.
      
      * Addresses PR comments.
      
      * Unit tests for math.hpp
      
      * Tests for `math::pi`, `math::lerp`, `math::area_frustrum`
        and `math::volume_frustrum`
      * Fix `math:pi<long double>()`.
      
      * Extend range, view functionality.
      
      * New `filter` view: lazily selects based on predicate.
      * Generic `front` and `back` for sequences.
      * New rangeutil STL wrappers `stable_sort_by`, `all_of`, `any_of`.
      * Consolidate common utility unit testing structures into
        `tests/unit/common.hpp`
      
      * Add `ball_and_squiggle` model; fix `ball_and_taper`.
      
      * Make `test_common_cells.hpp` and `ball_and_taper.py` agree.
      * Add `ball_and_squiggle` model that has a tapering undulating
        profile.
      
      * Address PR#46 review comments.
      
      * Add documentation of template parameters for `filter_iterator`.
      * Document use of `uninitalized<F>` for holding functional objects
        in `filter_iterator` and `transform_iterator`
      
      * Consolidate validation test code (issue #41)
      
      * Simplify trace analysis and reporting code in
        `trace_analysis.hpp`
      * Consolidate convergence test run procedures into
        new class `convergence_test_runner`.
      
      * New compartment info structure for FVM.
      
      * Make `algorithm::sum`, `algorithm::mean` more generic,
        allowing use with array types.
      * Add `div_compartment` compartment representation, that
        holds geometric information for each half of a compartment
        that will then be used in calculating control volumes.
      * Add three compartmentalisation schemes/policies that
        discretize a segment into `div_compartment` objects:
          * `div_compartment_by_ends` divides based only on the
            segment end points and radii.
          * `div_compartment_sampler` forms frusta by sampling
            the segment radius at each compartment boundary
          * `div_compartment_integrator` computes the compartment
            areas and volumes exactly by summing all frustra
            in the intersection of the segment and the compartmnet
            span.
      
      * Extrae linked at execution time
      
      * cleaning project
      
      * Complex compartments
      
      * Use divided compartments to determine FVM coefficients.
      * Pick correct control volume in FVM from sgement position (avoids
        off-by-half error.)
      * Add colour override functionality to tsplot: `--colour` option.
      * Add const accessor for cell soma.
      * Source formatting, comments in `math.hpp`
      * Fix `range_view`: was using incorrectly named type trait.
      * Add unit test for `range_view`.
      * Allow points of discontinuity to be omitted from L-infinity norm
        calculations.
      * Add `-d, --min-dt` option to `validate.exe` to control time
        step in validation convergence tests.
      * Add validation test: confirm divided compartment policy does
        not effect results on simple frustrum dendrites.
      * Change default max compartments on validation tests to 100
        (ad hoc observed convergence limit at dt circa 0.001 ms;
        finder spatial division would required much finer dt.)
      * Make NEURON validation data generation scripts use CVODE by
        default, and with `secondorder=2` when non-zero `dt` is given.
      
      * Remove division policy type parameter.
      
      * Use only `div_compartment_integrator` for compartmentalization in
        `fvm_multicell`. The policy will later be moved to a backend
        policy class.
      * For now, disable validation tests that test different division
        policies (see above).
      * Tweak comments and remove redundant `using`, following comments
        on PR#54.
      
      * Minor twicks and corrections
      0ded25a6
  38. Oct 30, 2016
    • Sam Yates's avatar
      Complex compartments · e7a8fb6f
      Sam Yates authored
      * Use divided compartments to determine FVM coefficients.
      * Pick correct control volume in FVM from sgement position (avoids
        off-by-half error.)
      * Add colour override functionality to tsplot: `--colour` option.
      * Add const accessor for cell soma.
      * Source formatting, comments in `math.hpp`
      * Fix `range_view`: was using incorrectly named type trait.
      * Add unit test for `range_view`.
      * Allow points of discontinuity to be omitted from L-infinity norm
        calculations.
      * Add `-d, --min-dt` option to `validate.exe` to control time
        step in validation convergence tests.
      * Add validation test: confirm divided compartment policy does
        not effect results on simple frustrum dendrites.
      * Change default max compartments on validation tests to 100
        (ad hoc observed convergence limit at dt circa 0.001 ms;
        finder spatial division would required much finer dt.)
      * Make NEURON validation data generation scripts use CVODE by
        default, and with `secondorder=2` when non-zero `dt` is given.
      e7a8fb6f
  39. Oct 26, 2016
    • Sam Yates's avatar
      Add Rallpack1 validation, plus bugfix, clean · 732562d6
      Sam Yates authored
      * Implement Rallpack1 validation test (with a workaround
        for inability to set membrane conductance).
      * Fix bug in L≠1 case in PassiveCable.jl (this may still be
        wrong).
      * Fix bug in peak delta computation in trace analysis when
        both traces have no local maxima.
      * Gentle failure on missing `numeric_soma.json`
      * Allow multiple `-s` selection operations for `tsplot`,
        acting disjunctively.
      732562d6