Skip to content

Commit 31530e2

Browse files
authored
changelog for 9.0.0 (#3613)
1 parent 24e029b commit 31530e2

1 file changed

Lines changed: 136 additions & 1 deletion

File tree

docs/changelog.md

Lines changed: 136 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,138 @@
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+
1136
# NEURON 8.2
2137

3138
## 8.2.7
@@ -216,7 +351,7 @@ _Release Date_ : 25-03-2022
216351

217352
### Bug Fixes
218353
* 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)
220355
* Avoid segfault if error during construction of POINT_PROCESS (#1627)
221356
* Fixes a 1D/3D voxelization problem where frusta are outside the 3D grid. (#1227)
222357
* Allow for two point (single section) SWC somas (#1144)

0 commit comments

Comments
 (0)