|
| 1 | +# NEURON 9.0 |
| 2 | + |
| 3 | +## 9.0.0 |
| 4 | +_Release Date_ : 30-09-2025 |
| 5 | + |
| 6 | +NEURON 9.0 marks a major milestone with significant under-the-hood |
| 7 | +updates. This release features a redesign of internal data structures |
| 8 | +using the Structure-Of-Arrays (SoA) memory layout, replacement of |
| 9 | +pointers by DataHandles that are automatically updated when internal |
| 10 | +memory layout changes, migration of the |
| 11 | +codebase and translation of MOD files to C++, and the introduction of |
| 12 | +random number generator construct natively in the NMODL (and legacy but still default nocmodl) language. |
| 13 | +Additionally, many legacy NMODL constructs have been removed, and legacy |
| 14 | +code and libraries have been replaced with modern alternatives like |
| 15 | +Eigen, ensuring improved performance and maintainability. |
| 16 | + |
| 17 | +What follows are a selection of the ~1500 pull request squash/merge |
| 18 | +commits to the master branch since |
| 19 | +the start of the 9.0a tag on 17-07-2023 |
| 20 | + |
| 21 | +### What's New |
| 22 | + |
| 23 | +- Use of SoA memory layout for internal data structures (#2027, #2381, #2712) |
| 24 | + This is a prerequisite for adopting CoreNEURON GPU functionality natively into NEURON. |
| 25 | +- Replace pointers with DataHandles. DataHandles pointing to RANGE variables |
| 26 | + always point to the correct value when memory is permuted or reallocated. |
| 27 | +- Support for random number generator language construct (`RANDOM`) in NMODL (#2627) |
| 28 | +- Replace pthread-based threading implementation with `std::thread` (#1859) |
| 29 | +- Introduce meaningful Python types: HOC classes associated with Python types (#1858) |
| 30 | +- Formalization of C API for NEURON (first version) (#2357, #3557) |
| 31 | +- Introduce nanobind to gradually replace C Python API usage (#2545) |
| 32 | +- Requires C++17 compiler and `flex >= 2.6` (#1893) |
| 33 | +- CoreNEURON repository is merged into NEURON (#2055) |
| 34 | +- CoreNEURON report extensions (#3507, #3542) |
| 35 | +- Modern implementation of NMODL (eventually to replace the nocmodl MOD file translator) is merged into NEURON (#3333) |
| 36 | +- Support for `numpy>=2` added (#3040) |
| 37 | +- Replace legacy Meschach source copy with Eigen library (#2470) |
| 38 | + |
| 39 | +### Breaking Changes |
| 40 | + |
| 41 | +- MOD files are compiled as C++ instead of C (see [migration guide](https://nrn.readthedocs.io/en/latest/guide/porting_mechanisms_to_cpp.html#porting-mechanisms-to-cpp) for VERBATIM blocks) |
| 42 | +- API changes in the functions related to random numbers, see #2618 |
| 43 | +- Restored usage of TABLE statement in hh.mod, results are now same as 8.0.2 (see #1764) |
| 44 | +- NMODL: Disallow use of ion variable in the `CONSTANT` block (#1955) |
| 45 | +- NMODL: Disallow declaring variables and functions with the same name (#1992) |
| 46 | +- Usage of Eigen library could introduce floating point differences, but they are very small, validated and can be ignored |
| 47 | + |
| 48 | +### Removal / Deprecation |
| 49 | + |
| 50 | +- Removed HOC function parent_node (Issue 3571) (#3576) |
| 51 | +- Removed usage of legacy OS X carbon libraries (#1869) |
| 52 | +- Removed legacy LINDA code and Java bindings (#1919, #1937) |
| 53 | +- Removed unused NMODL methods: `adams`, `heun`, `clsoda`, `seidel`, `simplex`, `gear` (#2032) |
| 54 | +- Removed support for Python 3.7 and 3.8 (#2194, #3108) |
| 55 | +- Removed support for legacy units and dynamic units selection (#2539) |
| 56 | +- Removed unused NEMO simulator compatibility (#3035) |
| 57 | +- Removed checkpoint feature (`h.checkpoint()`), superseded by `SaveState` (#3092) |
| 58 | +- Removed legacy `Random.MLCG` and `Random.ACG` random number generators (#3189, #3190) |
| 59 | +- Removed support for mod2c transpiler for CoreNEURON (#2247) |
| 60 | +- Removed unused NMODL constructs: `PUTQ`, `GETQ`, `RESET`, `MATCH`, `TERMINAL`, `SECTION`, |
| 61 | + `IFERROR`, `MODEL_LEVEL`, `PLOT`, `SENS`, etc (#1956, #1974, #1975, #2001, #2004, #2005) |
| 62 | +- Removed `__MWERKS__` (CodeWarrior compiler) related code (#2655) |
| 63 | +- Removed obsolete uxnrnbbs code (#2203) |
| 64 | +- Removed old tqueue implementations (#2225, #2740) |
| 65 | +- Removed unused RxD `code_matrix_to_rxd_sparse` (#3547) |
| 66 | +- `Py_NoSiteFlag` is deprecated for site_import (#3286) |
| 67 | + |
| 68 | +### Bug Fixes |
| 69 | + |
| 70 | +- Fix segfault from `unref hoc_obj`, see #1857 (#1917) |
| 71 | +- Fix bug in rxd reactions involving rxd parameters (#1933) |
| 72 | +- Fix CoreNEURON bug when checkpointing `VecPlay` instances (#2148) |
| 73 | +- Fix nocmodl bug with unused `STATE` + `COMPARTMENT` variable in `KINETIC` block (#2210) |
| 74 | +- Fix for dynamic ECS diffusion characteristics (#2229) |
| 75 | +- Various fixes for compatibility with newer NVHPC compiler releases (#2239, #2591) |
| 76 | +- Fix Windows and Mac crash on multiline HOC statements input from terminal (#2258) |
| 77 | +- Fix for `Vector.max_ind` (#2251) |
| 78 | +- Fix for detecting ION channel type in LoadBalance (#2310) |
| 79 | +- Fix for `RangeVarPlot` adding extra point at section ends when using plotly (#2410) |
| 80 | +- Fixed mod file array variable assignment (`seg.mech.array[i] = x`) (#2504) |
| 81 | +- Various fixes in RxD features (#2593, #2588) |
| 82 | +- Fix CoreNEURON bug causing in-memory model copy with file mode (#2767) |
| 83 | +- Fix CoreNEURON bug when using array variables in MOD files (#2779) |
| 84 | +- Fix lexer for ONTOLOGY parsing (#3091) |
| 85 | +- Fix issue while using Anaconda Python on MacOS (#3088) |
| 86 | +- Fix ParallelContext bbs memory leaks (#3563) |
| 87 | +- Fix RxD indexing bug (#3337) |
| 88 | +- Fix handling of `hh.mod` when using CoreNEURON (#3301) |
| 89 | +- On `h.quit()`, terminal settings are same as when neuron.hoc was imported (#3259) |
| 90 | +- `int` replaced by `floor` to accept negative coordinates (#3264) |
| 91 | +- Fix sanitizer leak involving `neuron import h, gui` (#3243) |
| 92 | +- Fix leaks in `get_endian_character` (#3257) |
| 93 | +- Fix leak in `pysec_children` and `pysec_subtree` (#3255) |
| 94 | +- Python 3.13.1 broke `[s for s in sl]` where `sl` is a `SectionList` (#3276) |
| 95 | + |
| 96 | + |
| 97 | +### Other Improvements and Changes |
| 98 | + |
| 99 | +- Allow `segment.mechanism.func(args)` to call a `FUNCTION` or `PROCEDURE` (#2475) |
| 100 | +- Simplify `INDEPENDENT` statement as only `t` variable is accepted (#2013) |
| 101 | +- Fix various memory leaks and related improvements (#3255, #3257, #3243, #2456) |
| 102 | +- Support for reading reporting related information with in-memory mode (#2555) |
| 103 | +- NMODL language documentation update (#2152, #2771, #2885) |
| 104 | +- Documentation improvements including transfer from <https://neuron.yale.edu> to <https://nrn.readthedocs.io> (#1901, #2922, #2971, #3106, #3187) |
| 105 | +- Various test, CI, and build infrastructure improvements (#1991, #2260, #2474) |
| 106 | +- Migrate many C code parts to C++ (#2083, #2305) |
| 107 | +- Support online LFP calculation in CoreNEURON (via SONATA reports for BBP use cases) (#2118, #2360) |
| 108 | +- Adopt CoreNEURON cell permute functionality into NEURON (#2598) |
| 109 | +- Allow legacy `a.b(i)` syntax for 1d arrays (extend to `PointProcess.var[i]` and `ob.dblarray[i]`) (#2256) |
| 110 | +- Add an ability to run NEURON ModelDB CI using label (#2108) |
| 111 | +- Remove unused code parts under various preprocessor variables (#2007) |
| 112 | +- Return error/exit codes properly in `nrniv -c` and nrnivmodl (#1871) |
| 113 | +- No limit on number of ion mechanisms that can be used (#3089) |
| 114 | +- Added Jupyter support for ModelView (#1907) |
| 115 | +- Make notebooks work with `bokeh>=3` (#3061) |
| 116 | +- Added new method `ParallelContext.get_partition()` (#2351) |
| 117 | +- Unified docs: one file for all languages (#3466) |
| 118 | +- Improve rxd memory usage with `__slots__` (#3572) |
| 119 | +- nrn_function_call now works with non-double returns (#3559) |
| 120 | +- Replaced `%` string formatting with f-strings (#3552) |
| 121 | +- `SectionList.size()` and `len(sectionlist)` skip deleted sections (#3524) |
| 122 | +- Add `.size()` to the `SectionList` object, returns the number of sections |
| 123 | + in the list (#3520) |
| 124 | +- CVode no_cap uses direct backing store instead of `Node*` (#3314) |
| 125 | +- Documentation updated to use `from neuron import n` (#3459) |
| 126 | +- Default node order is cell contiguous (except for thread rootnodes) (#3300) |
| 127 | +- Support multicompartment reactions with source & destination in the ecs (#3296) |
| 128 | +- Update `rxd.MultipleGeometry` to support 3D and hybrid models (#3389) |
| 129 | +- Add NMODL warning if a `FUNCTION` does not have a return statement (#3404) |
| 130 | +- Update species on region exception message (#3351) |
| 131 | +- Updated rxd reactions to allow pure backward reactions (#3273) |
| 132 | +- `Vector.apply` for Python functions (#3362) |
| 133 | +- Allow python callbacks for `xstatebutton` and `xcheckbox` (#3355) |
| 134 | + |
| 135 | + |
1 | 136 | # NEURON 8.2 |
2 | 137 |
|
3 | 138 | ## 8.2.7 |
@@ -216,7 +351,7 @@ _Release Date_ : 25-03-2022 |
216 | 351 |
|
217 | 352 | ### Bug Fixes |
218 | 353 | * Can use ParallelContext.mpiabort_on_error(0) to say do not call to MPI_Abort on error (#1567) |
219 | | -* OpenMPI initialisation crash: argv[argc] should be null. (#1682) |
| 354 | +* OpenMPI initialization crash: argv[argc] should be null. (#1682) |
220 | 355 | * Avoid segfault if error during construction of POINT_PROCESS (#1627) |
221 | 356 | * Fixes a 1D/3D voxelization problem where frusta are outside the 3D grid. (#1227) |
222 | 357 | * Allow for two point (single section) SWC somas (#1144) |
|
0 commit comments