November 13-15 2019 the new NEURON core development team met for the first time, hosted by Robert McDougal at the Center for Biomedical Data Science, Yale University in New Haven CT. Besides the project owner and lead developer, Michael Hines, various members from Robert McDougal’s team, the Blue Brain Project’s HPC Team of Felix Schürmann (from EPFL) as well as from SUNY Downstate’s Neurosimulation lab of Bill Lytton attended the meeting. In total, 15 people came together to discuss, learn and code.
The aim of our meeting was explicitly to not only discuss high-level topics and the future roadmap for NEURON, but to also allow the various contributors to meet in person, work on pending issues, and advance code development.
We started off the meeting with discussions of community engagement, and methods to facilitate developer community interactions. One of the outcomes is that we now have an official contributors guide! One major goal of these recent efforts will be to make future contributions into the NEURON code base, as well as tutorials and documentation, more accessible to the community. This will be done by documenting how we develop in this project, by simplifying the development process through better build and testing tools, and by ensuring that the code remains correct as contributions come in through a rigorous continuous integration framework.
In recent months, we began an important effort to introduce a new CMake-based build system that should eventually replace the autotools-based build system, offering more flexibility and simplicity, and rendering NEURON easier to install and maintain. With the introduction of the new build system comes also the integration of components of the NEURON ecosystem, which were previously built separately. InterViews, CoreNEURON and NMODL can now optionally be cloned as submodules into the git repository of NEURON and built as dependencies of NEURON through simple configuration flags. During our codejam sessions we put this new build system to the test, making sure that all participants could build their latest copy of NEURON and further develop it. Specifically we further developed the setuptools-based Python builder in NEURON that will enable us to build pip-installable source and binary distributions, namely sdist and wheels. These pre-built packages will soon be available in the official NEURON pypi repository, allowing NEURON to be installed within seconds on most desktop systems today. Even more exciting is the prospect that these packages will be available within cloud-based Jupyter solutions, making the NEURON environment one click away for the user. To further integrate the ecosystem tools we added support for coreNEURON to NetPyNE and tested several network models.
Testing is a vital aspect of the software development life cycle, ensuring the correctness and quality of a software project in its current state, and preventing regression as code is added. Thus, we have taken several steps to improve the testing of the NEURON package. First, we setup the catch2 testing framework allowing us to test the lower level C/C++ functions in NEURON, providing the possibility to write both unit and functional tests. Second, we included the pytest framework to test Python functionality of NEURON and RXD, and began integrating the stand-alone RXD tests into pytest. Third, we added a few simple HOC script integration tests (e.g. ringtest) testing NEURON and the HOC interpreter. Finally, to make sure your code changes in NEURON do not introduce regressions, and to help you run newly introduced unit tests for your code, we have included the testing framework into the CMake buildsystem, allowing it to be run with a simple make test.
We want to make the NEURON codebase more accessible to the user, inviting the user community to contribute fixes and improvements. To do this we made a significant effort to improve NEURON’s programmer’s documentation. In addition to the Python and HOC programmer's references and Python tutorials which were added as submodules to the repository, the doxygen documentation framework was added for documenting the C/C++ parts of the code. Furthermore, the doxygen documentation is made automatically available via the travis CI plan in neuronsimulator.github.io/nrn. Of course we will need to now work on adding much more documentation text into the code itself, but we expect that this will be done gradually as we visit the various parts in the code in our future efforts.
After three days of intense coding, testing, building, fixing and discussing, we felt we have not only managed to make a big step forward in NEURON development but also for the NEURON developers themselves through our shared experiences!
We are all looking forward to the next NEURON developers codejam, being planned for April/May 2020.