- Feb 11, 2020
-
-
Benjamin Cumming authored
Use locset names to set probe sites in single cell model. 1. Extend C++ cable_cell interface to provide a concrete list of locations associated with a locset on the cell. 2. Extend Python single_cell_model to allow placement of probes on locsets. 3. Remove "debug" output in Python ring example. The single cell model maintains a trace callback for each probe location, and needs to know the explicit locations before starting the simulation. The first step is required to enumerate and record the locations associated with a locset when attaching probes. Open issues: 1. The extension to `cable_cell` won't sufficiently support locsets that rely on random number generators with global seeds (it would require passing additional meta data required to fully instantiate the locset) 2. Enhancing the probe recipe interface to be able to associate one `probe_id` with all locations in a locset (the number of which is not specified at the time the `probe_id` is created) would support the interface implemented for the `single_cell_model`. Note: The richer interface on the C++ side will be implemented in time (see #957).
-
- Feb 06, 2020
-
-
Benjamin Cumming authored
- Rename z distance region definitions to refer to the root, not the soma. - Also fix printing of some region expressions to s-expressions. Fixes #947.
-
- Feb 04, 2020
-
-
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
-
- Feb 03, 2020
-
-
Sam Yates authored
Also: add a couple more cases to fvm_discretize ubench.
-
Sam Yates authored
Split out from Alex's PR for quicker inclusion into master. * Supply `execution_context` deleter for `std::unique_ptr` via class, so that a function does not have to be supplied as an argument at construction. * Supply `arb::basic_spike` by const reference to `ostream` writer. * Add domain index to `connection` `ostream` writer.
-
- Jan 30, 2020
-
-
Sam Yates authored
* Provide (internal) locset wrapper for mlocation_list so as to avoid quadratic mlocation sum(...) behaviour. * Add ubench for fvm_discretize, with lmorpho-generated test SWC. * Rewire `cv_policy_every_sample` to produce a locset that thingifies faster. Fixes #946 .
-
- Jan 28, 2020
-
-
Sam Yates authored
* Fix '==' vs '=' error in assignment. * Use last element (index 2) not index 1 of parent area and ixa tile to start from on new branch. * Expose cross-branch consistency via point-to-point integration functions for branch length and area. * Extend unit tests to suit.
-
Nora Abi Akar authored
Extends the available locset/region expressions. * Add `distal_interval` and `proximal_interval` expressions that return a region defined by an initial locset and a distance to extend in the distal or proximal directions respectively. * Add `radius_lt`, `radius_le`, `radius_gt`, `radius_ge` region expressions describing the subset of the morphology with radius less than (or less than or equal to etc.) a given value. * Add `z_dist_from_soma_lt`, `z_dist_from_soma_le`, `z_dist_from_soma_gt`, `z_dist_from_soma_ge` region expressions describing the subset of the morphology which is less than (resp. less than or equal to, etc.) the given distance along the z-axis from the root sample. * Add `uniform` locset expression giving a uniformly sampled set of locations from a given region based on a supplied PRNG seed value and a closed interval [left, right] of elements from the corresponding pseudo-random sequence. * Add `Random123` as a library to `ext` and `util::uniform` wrapper for use in the `uniform` locset expression. * Add unit tests to suit. Fixes #939
-
- Jan 24, 2020
-
-
Sam Yates authored
Replace branch/cable-based cell representation and discretization with free specification of control volumes over the cell morphology. Implements functionality required for issues #859 and #732, and the reworking of inter-CV conductance computation addresses issue #635, although there is possible room for improvement by treating CV voltages as averages rather than point estimates. * Remove arbor/segment.hpp and segment-based representation in `cable_cell`. * Add a new discretization policy `cv_policy_every_sample` that replaces the `compartments_from_discretization` flag in the `cable_cell` constructor. * Remove use of `cable_cell::num_compartments()` in example code (see issue #940). * Add command line argument to `single_cell` example to specify number of CVs per branch. * Replace fvm layout `fvm_discretization` with new representation `fvm_cv_discretization`, which in turn wraps a `cv_geometry` object representing CVs as cables within cells in a cell group. * Provide `cv_geometry_from_ends` that produces `cv_geometry` discretization for a cell given a locset comprising CV boundary points. * Provide interface and functionality for merging discretization structures `cv_geometry`, `fvm_cv_discretization`, `fvm_mechanism_data` from multiple cells, in order to support (in the future) parallelized discretization across a cell group. * Provide complete reimplementation of `fvm_discretize(...)`. * Remove now redundant `arbor/fvm_compartment.hpp`. * Add new locset expression `on_branches`, representing a point on every branch at a given relative position. * Fix implementation bug in `pw_elements` `zip` function. * Add `util::equal` range-based analogue of `std::equal`. * Remove the compartments_from_discretization argument from cable cell made in python module. (Does this need to begiven a discretization policy? It is not clear.)
-
- Jan 23, 2020
-
-
Nora Abi Akar authored
* Add support for conditionals with the SIMD printer by using `where_expresssions` to mask assignments to range variables that happen inside if/else blocks. Assignments to non-range variables are executed non-masked when correctness is ensured. Fixes #836
-
Sam Yates authored
* Add implicit conversions from mlocation and mlocation_list to locset. * Add implicit conversions from mcable and mcable_list to region. * Change arguments for `ls::location` to `(branch, position)`. * Extend unit tests to suit. * Make locset and region wrapping less promiscuous by demanding that expression implementation classes derive from locset_tag or region_tag respectively.
-
- Jan 22, 2020
-
-
Sam Yates authored
Update cable() invocations in unit tests added in #934 to match new interface from #938.
-
Benjamin Cumming authored
* Make small changes to region/locset interfaces for ease of python interface implemenation.
-
Stop region intersection from returning extra zero length cables if the location it describes is in the cover of another region in the `cable_list`.
-
- Jan 20, 2020
-
-
Benjamin Cumming authored
* Add logo to read the docs as HTML header. * Lighten nav bar background so as to not clash with logo.
-
- Jan 09, 2020
-
-
Builds on PR #918 Prepare public API on `cable_cell` for substitution of discretization implementation in `fvm_layout`. * Add `mcable_map` for representing cable-wise constant data on a morphology. * Paint cell ion initial values and physical properties by specific setter types, replacing use of `cable_cell_local_parameter_set`. * Allow cell default ion/physical properties to be set via same setter types, which set corresponding fields in cell's `default_parameters` field. * Store placed/painted items each in a `static_typed_map` object in the cable cell implementation class; provide public access method to typed maps.
-
- Jan 07, 2020
-
-
Nora Abi Akar authored
* Choose the pivot on the diagonal if possible when performing symbolic Gaussian elimination in modcc-generated mechanisms.
-
* Consolidate embedding-dependent morphology data in new class `embed_pwlin`, which provides sample location lookup, handles branch and radius queries, and performs piecewise-constant integration over a branch by length, branch surface area, or inverse cross-sectional area. * Extend region and locset expressions to represent named regions/locsets. * Rearrange morphology-related functionality so that morphology-independent functions are provided via `morph/primitives.hpp` and topological functionality via `morph/morphology.hpp` and `morphology` methods. * Provide new class `mprovider` which gathers a morphology, its embedding, and a concrete label dictionary. * Populate mprovider concrete region/locset maps at initialization time, throwing exceptions if there are unresolved references or circular dependencies. * Gather and unify morphology-related exceptions in `morphexcept.hpp/cpp`, unifying error text and providing programmatically readable associated data, akin to `arbexcept.hpp/cpp`. * Simplify cable_cell painting/placing interfaces. * Add generic representation of piecewise-specified data with `pw_elements` classes. * Add representation of rational-polynomial interpolatated elements over the unit interval; sufficient for embedding integration services, but the implemented algorithm is subject to singularities if data can be represented by a lower-order denominator than requested. * Move `sum` from `algorithms` to `util`. * Make `util::either` public. * Add unit tests for existing morphology primitive operations. * Add unit tests for new functionality/APIs.
-
- Dec 20, 2019
-
-
Sam Yates authored
* Add unit tests for function lowering/inlining.
-
Nora Abi Akar authored
* Rewrite the function expander which lowers function calls and function arguments, such that both steps are done in the same visitor, and both visitors are applied to the entire procedure. * Rewrite the function inliner such that it is also applied to an entire procedure, after all functions have been expanded. The function inliner iterates over the body of the procedure, inlining one function call at a time, until all function calls have been inlined. * Conductivity and current accumulations are also modified to be done in one step at the end of `nrn_current`
-
Sam Yates authored
Fixes #811.
-
- Dec 16, 2019
-
-
Nora Abi Akar authored
* Rename `sample_event::cell_index` to `intdom_index`. * Sort `sample_events` by integration domain. Fixes #921
-
Nora Abi Akar authored
* Remove nested profiler call — revpot mechanisms already have profiler calls inserted in the generated code.
-
- Dec 11, 2019
-
-
* Use alternative hashing of cell_member_type values for 32-bit target. * Correctly match i686 as a "-march=" style target for gcc and clang. * Correct a signed/unsigned comparison warning in test_algorithms.cpp with -Wall. * Avoid spurious SIMD unit test failure for exprelr by using expm1 instead of exp - 1 in denominator when computing expected results.
-
- Dec 10, 2019
-
-
Avoid use of empty ranges determined by expressions `&vector[i]` where i equals vector.size(). Replace with expressions using `vector.data()` or subrange views. Fixes #917.
-
- Dec 09, 2019
-
-
If ion concentrations are read and written in the INITIAL blocks of mechanisms, this ensures that the reading mechanisms will receive the correct values. Fixes #896
-
- Dec 07, 2019
-
-
- Dec 05, 2019
-
-
Nora Abi Akar authored
* Group common linear system solver code across `SparseSolverVisitor`, `SparseNonlinearSolverVisitor`, and `LinearSolverVisitor`. * Normalize intermediate values in Gaussian elimination when the matrix has more than 5 rows. Fixes #890
-
- Dec 02, 2019
-
-
Benjamin Cumming authored
Fix linear scaling of model initialization w.r.t. number of MPI ranks. Fixes #909.
-
- Nov 28, 2019
-
-
Also change the way we handle unitson/unitsoff. UNITSON, UNITSOFF, COMMENT, ENDCOMMENT are now all handled in Lexer::parse Fixes #14 Fixes #885
-
Also renumber operator precedence. Fixes #25
-
-
- Nov 27, 2019
-
-
Also emit "abs" in cexpr_emit.cpp because the simd backend implements abs Fixes #887
-
Calling vector::reserve to increase the size of the synapse vector by 1 causes significant performance degradation.
-
Fixes #892
-
- Nov 26, 2019
-
-
Completely remove managed memory from the gpu backend. `managed_vector<level>` is split into: - A device vector of structs containing meta data about each level - A device vector containing concatenated lengths of each branch in a level for all levels - A device vector containing concatenated parents of each branch in a level for all levels All other instances of managed memory in `matrix_fine` are easily replaced by device vectors Managed memory is also removed from the unit tests. Fixes #841
-
- Oct 30, 2019
-
-
Benjamin Cumming authored
* Make access to `segment`s in a `cable_cell` read only * Change cell constructor to require morphology and label dictionary; `make_cable_cell` no longer required. * Consolidate paint/place functionality on `cable_cell`. * Add simple cell builder wrapping new API for use in unit tests. * Remove validation test code: appropriate validation tests will need to be implemented in nsuite. Fixes #871
-
Nora Abi Akar authored
* Remove improper std::move of mechanism description with for loop in cell::paint().
-
- Oct 23, 2019
-
-
Nora Abi Akar authored
* Fix modcc segmentation fault caused by improper check for the presence of a symbol, triggered when a symbol defined in a RANGE is absent from the ASSIGNED and PARAMETER blocks.
-
Nora Abi Akar authored
* Accept `tok::ne` for conditional expressions in modcc, and emit correctly as '!=' in `cexpr_emit`.
-