+ "schema:releaseNotes": "NEURON 9.0 marks a major milestone with significant under-the-hood\nupdates. This release features a redesign of internal data structures\nusing the Structure-Of-Arrays (SoA) memory layout, replacement of\npointers by DataHandles that are automatically updated when internal\nmemory layout changes, migration of the\ncodebase and translation of MOD files to C++, and the introduction of\nrandom number generator construct natively in the NMODL (and legacy but still default nocmodl) language.\nAdditionally, many legacy NMODL constructs have been removed, and legacy\ncode and libraries have been replaced with modern alternatives like\nEigen, ensuring improved performance and maintainability. \n\nWhat follows are a selection of the ~1500 pull request squash/merge\ncommits to the master branch since\nthe start of the 9.0a tag on 17-07-2023\n\n### What's New\n\n- Use of SoA memory layout for internal data structures (#2027, #2381, #2712) \n This is a prerequisite for adopting CoreNEURON GPU functionality natively into NEURON.\n- Replace pointers with DataHandles. DataHandles pointing to RANGE variables\n always point to the correct value when memory is permuted or reallocated.\n- Support for random number generator language construct (`RANDOM`) in NMODL (#2627) \n- Replace pthread-based threading implementation with `std::thread` (#1859) \n- Introduce meaningful Python types: HOC classes associated with Python types (#1858) \n- Formalization of C API for NEURON (first version) (#2357, #3557) \n- Introduce nanobind to gradually replace C Python API usage (#2545) \n- Requires C++17 compiler and `flex >= 2.6` (#1893) \n- CoreNEURON repository is merged into NEURON (#2055) \n- CoreNEURON report extensions (#3507, #3542)\n- Modern implementation of NMODL (eventually to replace the nocmodl MOD file translator) is merged into NEURON (#3333)\n- Support for `numpy>=2` added (#3040) \n- Replace legacy Meschach source copy with Eigen library (#2470) \n\n### Breaking Changes\n\n- 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) \n- API changes in the functions related to random numbers, see #2618 \n- Restored usage of TABLE statement in hh.mod, results are now same as 8.0.2 (see #1764) \n- NMODL: Disallow use of ion variable in the `CONSTANT` block (#1955) \n- NMODL: Disallow declaring variables and functions with the same name (#1992) \n- Usage of Eigen library could introduce floating point differences, but they are very small, validated and can be ignored \n\n### Removal / Deprecation\n\n- Removed HOC function parent_node (Issue 3571) (#3576)\n- Removed usage of legacy OS X carbon libraries (#1869) \n- Removed legacy LINDA code and Java bindings (#1919, #1937) \n- Removed unused NMODL methods: `adams`, `heun`, `clsoda`, `seidel`, `simplex`, `gear` (#2032) \n- Removed support for Python 3.7 and 3.8 (#2194, #3108) \n- Removed support for legacy units and dynamic units selection (#2539) \n- Removed unused NEMO simulator compatibility (#3035) \n- Removed checkpoint feature (`h.checkpoint()`), superseded by `SaveState` (#3092) \n- Removed legacy `Random.MLCG` and `Random.ACG` random number generators (#3189, #3190) \n- Removed support for mod2c transpiler for CoreNEURON (#2247) \n- Removed unused NMODL constructs: `PUTQ`, `GETQ`, `RESET`, `MATCH`, `TERMINAL`, `SECTION`, \n `IFERROR`, `MODEL_LEVEL`, `PLOT`, `SENS`, etc (#1956, #1974, #1975, #2001, #2004, #2005)\n- Removed `__MWERKS__` (CodeWarrior compiler) related code (#2655) \n- Removed obsolete uxnrnbbs code (#2203) \n- Removed old tqueue implementations (#2225, #2740) \n- Removed unused RxD `code_matrix_to_rxd_sparse` (#3547)\n- `Py_NoSiteFlag` is deprecated for site_import (#3286)\n\n### Bug Fixes\n\n- Fix segfault from `unref hoc_obj`, see #1857 (#1917) \n- Fix bug in rxd reactions involving rxd parameters (#1933) \n- Fix CoreNEURON bug when checkpointing `VecPlay` instances (#2148) \n- Fix nocmodl bug with unused `STATE` + `COMPARTMENT` variable in `KINETIC` block (#2210) \n- Fix for dynamic ECS diffusion characteristics (#2229) \n- Various fixes for compatibility with newer NVHPC compiler releases (#2239, #2591) \n- Fix Windows and Mac crash on multiline HOC statements input from terminal (#2258) \n- Fix for `Vector.max_ind` (#2251) \n- Fix for detecting ION channel type in LoadBalance (#2310) \n- Fix for `RangeVarPlot` adding extra point at section ends when using plotly (#2410) \n- Fixed mod file array variable assignment (`seg.mech.array[i] = x`) (#2504) \n- Various fixes in RxD features (#2593, #2588) \n- Fix CoreNEURON bug causing in-memory model copy with file mode (#2767) \n- Fix CoreNEURON bug when using array variables in MOD files (#2779) \n- Fix lexer for ONTOLOGY parsing (#3091)\n- Fix issue while using Anaconda Python on MacOS (#3088)\n- Fix ParallelContext bbs memory leaks (#3563)\n- Fix RxD indexing bug (#3337)\n- Fix handling of `hh.mod` when using CoreNEURON (#3301)\n- On `h.quit()`, terminal settings are same as when neuron.hoc was imported (#3259)\n- `int` replaced by `floor` to accept negative coordinates (#3264)\n- Fix sanitizer leak involving `neuron import h, gui` (#3243)\n- Fix leaks in `get_endian_character` (#3257)\n- Fix leak in `pysec_children` and `pysec_subtree` (#3255)\n- Python 3.13.1 broke `[s for s in sl]` where `sl` is a `SectionList` (#3276)\n\n\n### Other Improvements and Changes\n\n- Allow `segment.mechanism.func(args)` to call a `FUNCTION` or `PROCEDURE` (#2475) \n- Simplify `INDEPENDENT` statement as only `t` variable is accepted (#2013) \n- Fix various memory leaks and related improvements (#3255, #3257, #3243, #2456) \n- Support for reading reporting related information with in-memory mode (#2555) \n- NMODL language documentation update (#2152, #2771, #2885) \n- Documentation improvements including transfer from <https://neuron.yale.edu> to <https://nrn.readthedocs.io> (#1901, #2922, #2971, #3106, #3187)\n- Various test, CI, and build infrastructure improvements (#1991, #2260, #2474) \n- Migrate many C code parts to C++ (#2083, #2305) \n- Support online LFP calculation in CoreNEURON (via SONATA reports for BBP use cases) (#2118, #2360) \n- Adopt CoreNEURON cell permute functionality into NEURON (#2598) \n- Allow legacy `a.b(i)` syntax for 1d arrays (extend to `PointProcess.var[i]` and `ob.dblarray[i]`) (#2256) \n- Add an ability to run NEURON ModelDB CI using label (#2108) \n- Remove unused code parts under various preprocessor variables (#2007) \n- Return error/exit codes properly in `nrniv -c` and nrnivmodl (#1871) \n- No limit on number of ion mechanisms that can be used (#3089) \n- Added Jupyter support for ModelView (#1907) \n- Make notebooks work with `bokeh>=3` (#3061) \n- Added new method `ParallelContext.get_partition()` (#2351) \n- Unified docs: one file for all languages (#3466)\n- Improve rxd memory usage with `__slots__` (#3572) \n- nrn_function_call now works with non-double returns (#3559)\n- Replaced `%` string formatting with f-strings (#3552)\n- `SectionList.size()` and `len(sectionlist)` skip deleted sections (#3524)\n- Add `.size()` to the `SectionList` object, returns the number of sections\n in the list (#3520)\n- CVode no_cap uses direct backing store instead of `Node*` (#3314)\n- Documentation updated to use `from neuron import n` (#3459)\n- Default node order is cell contiguous (except for thread rootnodes) (#3300)\n- Support multicompartment reactions with source & destination in the ecs (#3296)\n- Update `rxd.MultipleGeometry` to support 3D and hybrid models (#3389)\n- Add NMODL warning if a `FUNCTION` does not have a return statement (#3404)\n- Update species on region exception message (#3351)\n- Updated rxd reactions to allow pure backward reactions (#3273)\n- `Vector.apply` for Python functions (#3362)\n- Allow python callbacks for `xstatebutton` and `xcheckbox` (#3355)\n",
0 commit comments