Nengo 3.0.0 released

The Nengo team is psyched to announce the release of Nengo 3.0.0!

What is Nengo?

Nengo is a Python library for building and simulating large-scale neural models for AI and robotics. It can be thought of as a neural compiler, transforming a functional description of a neural model to a network of spiking or non-spiking neurons that can run on multiple backends including GPUs and neuromorphic hardware.

What’s new?

Nengo 3.0.0 is a major release that adds important new features and includes some changes that are not backwards-compatible.

The biggest change is to the transform argument of nengo.Connection. Previously, the transform could be a NumPy array or a distribution that would generate a NumPy array. Nengo 3.0 adds the ability to do more complex and useful transforms between two Nengo objects. The newly added nengo.Convolution transform makes it easy to define convolutional neural networks with the Nengo API. The nengo.Sparse transform can improve the efficiency of sparse connections between large ensembles or nodes. Under the hood, NumPy arrays and distributions return nengo.Dense objects, which can also be manually specified.

The other major change that will affect most models is that the default Ensemble.intercepts value is now uniformly distributed between -1 and 0.9 (changed from -1 to 1) in order to avoid the high gain values that result from intercepts that are close to 1.

If you have implemented a custom nengo.Process subclass, you will have to update that process to conform to the new interface. There is now a make_state method that you can override, and the make_step method accepts a state dictionary as the last positional argument.

The Nengo documentation has gotten a significant facelift, and now includes a dropdown to view the documentation for some older versions of Nengo. The version 3.0.0 documentation will always be accessible from Additionally, many more parts of the API are included in the documentation in case you want to dive deeper into Nengo’s internals.

While making big improvements to our testing infrastructure, we extracted some generally useful pytest fixtures into separate open source projects that other Python developers can use. pytest-plt makes it easy to generate Matplotlib plots in your tests. pytest-rng ensures that “randomness” in tests is reproducible from one run to the next. pytest-allclose extends the numpy.allclose function to add handy new features and summary statistics for all tests that compare numbers within some tolerance.

Nengo has dropped support for older versions of Python and NumPy. Nengo now requires Python 3.5 or higher, and NumPy 1.13 or higher.

Several parts of the Nengo core have been moved to separate projects. The implementation of the Semantic Pointer Architecture is now deprecated in favour of the Nengo SPA project. Several infrequently used utilities have been moved to the Nengo extras project. Additionally, the nengo.ipynb extension that was previous required to render progress bars in Jupyter notebooks has been removed as it is now possible to render progress bars without the extension.

In total, Nengo 3.0.0 contains 9 bugfixes, over 40 new and changed features, and has cleaned up 24 old, unused features. To see the full list of changes, head to the Github release page.

How do I get it?

To get the new version of Nengo, use pip.

pip install --upgrade nengo

Where can I learn more?

Where can I get help?

You’re already there! If you have an issue upgrading or have any other questions, please post them in this forum.

Because the Nengo SPA project is explicitly advertised above: Unfortunately, it is not yet compatible with Nengo 3.0 due to the very recent removal of the nengo.utils.compat module. An updated version with full compatibility will be released soon.