- Getting started
- User guide- Nengo frontend API
- Nengo backend API
- Setting parameters with Configs
- Reusable networks
- Semantic Pointer Architecture
- Advanced topics
- Release History- 3.0.0 (November 18, 2019)
- 2.8.0 (June 9, 2018)
- 2.7.0 (March 7, 2018)
- 2.6.0 (October 6, 2017)
- 2.5.0 (July 24, 2017)
- 2.4.0 (April 18, 2017)
- 2.3.1 (February 18, 2017)
- 2.3.0 (November 30, 2016)
- 2.2.0 (September 12, 2016)
- 2.1.2 (June 27, 2016)
- 2.1.1 (June 24, 2016)
- 2.1.0 (April 27, 2016)
- 2.0.4 (April 27, 2016)
- 2.0.3 (December 7, 2015)
- 2.0.2 (October 13, 2015)
- 2.0.1 (January 27, 2015)
- 2.0.0 (January 15, 2015)
 
- Nengo history
- Converting from Nengo 1.4 to Nengo 2.0
 
- Examples
- Contributing to Nengo
- Nengo license
Release History¶
3.0.0 (November 18, 2019)¶
Added
- Added progress bar support for Jupyter Lab >=0.32. (#1428, #1087) 
- We now warn that the progress bar is not supported in Jupyter Notebook <5. (#1428, #1426) 
- Added support for convolutional connections. (#1481) 
- Added version tracking to documentation, so that documentation from old versions remains available. (#1488) 
- Added support for sparse connections. (#1532) 
- Added a - fail_fastsetting to test operators when they are first added to the model. See configuration options for details. (#1532)
- Added a - --memoryoption for pytest that prints the total memory consumed by the tests when they complete (Linux and Mac OS X only). (#640)
- Added a bit precision setting to change the number of bits allocated to each value tracked by Nengo. (#640) 
- Added a - Simulator.clear_probesmethod to clear probe data. This method can be used before pickling to reduce the pickle file size. (#1387)
- Nengo tests now use the - allclosefixture from- pytest-allclose, which makes it possible for backends to change test tolerances. (#1563)
- Nengo tests now use the - rngand- seedfixtures from- pytest-rng. (#1566)
- Nengo tests now use the - plt``fixture from ``pytest-plt. (#1566)
- Added a - nengo_simloaderpytest option for specifying a callable that takes a pytest- requestand returns a callable to be used as- Simulatorin the Nengo test suite. (#1566)
- Added more content to the API reference documentation. (#1578) 
Changed
- Python 2 is no longer supported. The oldest supported Python version is 3.5. (#1520, python3statement.org) 
- Nengo no longer supports Python 3.4. Official 3.4 support ended in March 2019. (PEP-429, #1514) 
- Replaced the - dtargument to- Simulator.trangewith- sample_everybecause- dtwould return values that the simulator had not simulated.- dtis now an alias for- sample_everyand will be removed in the future. (#1368, #1384)
- Dense connection transforms (this includes all previously supported values for - Connection.transform) will now be represented internally as- nengo.Denseobjects. Arrays/scalars can still be passed as- transformvalues, and they will be automatically converted to the equivalent- nengo.Denseobject. Retrieving the value of- my_conn.transformwill return that- Denseobject. The original input array can be retrieved through- my_conn.transform.init. (#1481)
- nengo.solvers.NoSolver(w, weights=True)now expects- wto have shape- (pre.n_neurons, function_d), rather than- pre.n_neurons, post.n_neurons). That is, with- NoSolveryou are always specifying the values for the decoders, and encoders/transform will be applied automatically to those decoders (as occurs with all other solvers). Note that this does not affect- NoSolver(..., weights=False)(the default). (#1481)
- Increased minimum NumPy version to 1.11.0. See our instructions for installing NumPy if you need to upgrade. (#1481) 
- Solvers are now explicitly marked as compositional or non-compositional depending on whether they must act on full connection weight matrices when solving for weights. (#1507) 
- Solvers no longer take encoders as an argument. Instead, encoders will be applied to the targets before the solve function for non-compositional solvers and applied by the Transform builder for compositional solvers. (#1507) 
- Example Jupyter notebooks have been upgraded to notebook format 4. (#1440) 
- Switched documentation to new nengo-sphinx-theme. (#1489) 
- The - settled_firingratefunction has been moved from- nengo.utils.neuronsto- nengo.neurons. (#1187)
- Added new pytest config option, - nengo_test_unsupported(replacing the previous- Simulator.unsupportedfunctionality). (#1521)
- Switched to nengo-bones templating system for TravisCI config/scripts. (#1514) 
- The - NeuronType.currentand- NeuronType.ratesmethods now document the supported shapes of parameters and return values. (#1437)
- PES learning updates are now applied on the next timestep rather than the current one. (#1398) 
- The - NdarrayParamnow accepts a- dtypeargument to check that data assigned to that parameter matches the given Numpy- dtype.- DistOrArrayParamaccepts an analogous- sample_dtypeargument. (#1532)
- We no longer test operators when they are initially added to the model, which speed up build times slightly. To re-enable this testing, enable the - fail_fastRC setting. (#1532)
- LinearFilternow uses state space representations internally, which is faster and potentially more accurate. (#1535)
- The default value of - y0in- Synapse.filtis now 0 instead of the initial value of the input signal. This allows unstable filters (e.g., integrators) to be used with- filt. (#1535)
- LinearFilternow accepts the discretization method as an argument, rather than having it specified in- make_step. (#1535)
- The - synapse_kwargsargument to- FilteredNoisehas been removed. (#1535)
- Processes with internal state now declare that state by defining a - make_statemethod and accepting a- stateparameter in- make_step. (#1387)
- Simulatoris now pickleable, allowing its state to be saved and loaded. (#1387)
- Renamed - utils.testing.allcloseto- utils.testing.signals_allclose, to differentiate it from the- allclosefixture. (#1563)
- The default - interceptsvalue has been changed to- Uniform(-1, 0.9)to avoid high gains when intercepts are close to 1. (#1534, #1561)
- The - --simulatorand- --neuronspytest command line arguments are now specified by- nengo_simulatorand- nengo_neuronsentries in the pytest config file instead. (#1566)
- The - nengo_test_unsupportedoption now uses pytest nodeids for the test names (the main change is that this means a double- ::between file and function names). (#1566)
- Signalswill now raise an error if their initial value contains NaNs. (#1571)
- The builder will now raise an error if any encoders are NaN, which can occur if an encoder has length zero. (#1571) 
- Renamed - simulator.ProbeDictto- simulator.SimulationData. (#1574)
- Increased minimum numpy version to 1.13. (#1577) 
- Documentation pages that had underscores in their filenames have been renamed to have hyphens instead. (#1585) 
Deprecated
- Deprecated the - nengo.spamodule. Use the Nengo SPA project instead. (#1465)
- The - Aand- Binputs to the- Productand- CircularConvolutionnetworks are officially deprecated. Use- input_aand- input_binstead. (#887, #1179)
- nengo.utils.compatwill be removed in the next minor release. (#1520)
- Deprecated - utils.numpy.rmse. Call- utils.numpy.rmson the difference between two arrays instead. (#1563)
Removed
- Networks no longer accept the - netargument. To set network arguments like- label, pass them as keyword arguments instead. (#1179)
- Removed - generate_graphvizutility function. It can now be found in nengo_extras. (#1187)
- Removed functions for estimating firing rates from spikes. They can now be found in nengo_extras. (#1187) 
- Removed the - probe_allfunction. It can now be found in nengo_extras. (#1187)
- PES.correctionis no longer probeable. (#1398)
- The internal - rngand- seedfixtures have been removed. Use the external pytest-rng package instead. (#1566)
- The internal - pltfixture has been removed. Use the external pytest-plt package instead. (#1566)
- The internal - loggerfixture has been removed. Use pytest’s log capturing instead. (#1566)
- Removed - nengo.logand- nengo.utils.logging. Use the standard Python and pytest logging modules instead. (#1566)
- The internal - analyticsand- analytics_datafixtures have been removed. Use pytest’s cache fixture instead. (#1566)
- The - RefSimulatorfixture has been removed. Use the- Simulatorfixture and the- nengo_test_unsupportedconfiguration option instead. (#1566)
- Removed - find_modulesand- load_functionsfrom- nengo.utils.testing. Backends wanting to run Nengo test should use- pytest --pyargs nengoinstead. (#1566)
- Removed - nengo.tests.options. It is no longer necessary to use- -p nengo.tests.optionswhen running Nengo tests. (#1566)
- Removed - nengo.conftest. Use pytest configuration options instead. (#1566)
- Removed support for legacy cache files. (#1577) 
- Removed the nengo ipynb progress bar extension. This is no longer needed in more recent ipynb versions. (#1577) 
- Removed the deprecated - *_tau(e.g.- pre_tau) parameters from learning rules. Use- *_synapseinstead. (#1577)
- Removed the deprecated - neuron_nodesargument from- networks.EnsembleArray. Use- EnsembleArray.add_neuron_input/add_neuron_outputinstead. (#1577)
- Removed the deprecated - progress.updaterconfig option. Use- progress.progress_barinstead. (#1577)
- Removed the deprecated - nengo.synapses.filt/filtfiltfunctions. Use the- Synapse.filt/filtfiltmethods instead. (#1577)
- Removed the Python 2 compatibility code from - utils.compat. (#1577)
- Removed - utils.connection.target_function. Target points can be passed directly to the- Connection.functionargument instead. (#1577)
- Removed - utils.functions.piecewise. Use- nengo.processes.Piecewiseinstead. (#1577)
- Removed - utils.testing.Mock. (#1578)
Fixed
- FrozenObjectscan control parameter initialization order when copying, which fixed a bug encountered when copying convolutional connections. (#1493)
- Fixed an issue in which reshaped signals were not having their offset values preserved, causing issues with some node functions. (#1474) 
- Better error message when Node output function does not match the given - size_in/- size_out. (#1452, #1434)
- Several objects had elements missing from their string representations. These strings are now automatically generated and tested to be complete. (#1472) 
- Fixed the progress bar in recent Jupyter Lab versions. (#1499, #1500) 
- Some higher-order - LinearFiltersynapses had unnecessary delays that have now been removed. (#1535)
- Models using the - SpikingRectifiedLinearneuron type now have their decoders cached. (#1550)
- Optional - ShapeParam/- TupleParamcan now be set to- None. (#1569)
- Fixed error when using advanced indexing to connect to an - Ensemble.neuronsobject. (#1582, #1583)
2.8.0 (June 9, 2018)¶
Added
- Added a warning when setting - gainand- biasalong with either of- max_ratesor- intercepts, as the latter two parameters are ignored. (#1431, #1433)
Changed
- Learning rules can now be sliced when providing error input. (#1365, #1385) 
- The order of parameters in learning rules has changed such that - learning_ratealways comes first. (#1095)
- Learning rules take - pre_synapse,- post_synapse, and- theta_synapseinstead of- pre_tau,- post_tau, and- theta_taurespectively. This allows arbitrary- Synapseobjects to be used as filters on learning signals. (#1095)
Deprecated
- The - nengo.ipynbIPython extension and the- IPython2ProgressBarhave been deprecated and replaced by the- IPython5ProgressBar. This progress bar will be automatically activated in IPython and Jupyter notebooks from IPython version 5.0 onwards. (#1087, #1375)
- The - pre_tau,- post_tau, and- theta_tauparameters for learning rules are deprecated. Instead, use- pre_synapse,- post_synapse, and- theta_synapserespectively. (#1095)
Removed
2.7.0 (March 7, 2018)¶
Added
- Added - amplitudeparameter to- LIF,- LIFRate, and- RectifiedLinearwhich scale the output amplitude. (#1325, #1391)
- Added the - SpikingRectifiedLinearneuron model. (#1391)
Changed
- Default values can no longer be set for - Ensemble.n_neuronsor- Ensemble.dimensions. (#1372)
- If the simulator seed is not specified, it will now be set from the network seed if a network seed is specified. (#980, #1386) 
Fixed
- Fixed an issue in which signals could not be pickled, making it impossible to pickle - Modelinstances. (#1135)
- Better error message for invalid return values in - nengo.Nodefunctions. (#1317)
- Fixed an issue in which accepting and passing - (*args, **kwargs)could not be used in custom solvers. (#1358, #1359)
- Fixed an issue in which the cache would not release its index lock on abnormal termination of the Nengo process. (#1364) 
- Fixed validation checks that prevented the default from being set on certain parameters. (#1372) 
- Fixed an issue with repeated elements in slices in which a positive and negative index referred to the same dimension. (#1395) 
- The - Simulator.n_stepsand- Simulator.timeproperties now return scalars, as was stated in the documentation. (#1406)
- Fixed the - --seed-offsetoption of the test suite. (#1409)
2.6.0 (October 6, 2017)¶
Added
- Added a - NoSolversolver that can be used to manually pass in a predefined set of decoders or weights to a connection. (#1352)
- Added a - Piecewiseprocess, which replaces the now deprecated- piecewisefunction. (#1036, #1100, #1355, #1362)
Changed
- The minimum required version of NumPy has been raised to 1.8. (#947) 
- Learning rules can now have a learning rate of 0. (#1356) 
- Running the simulator for zero timesteps will now issue a warning, and running for negative time will error. (#1354, #1357) 
Fixed
- Fixed an issue in which the PES learning rule could not be used on connections to an - ObjViewwhen using a weight solver. (#1317)
- The progress bar that can appear when building a large model will now appear earlier in the build process. (#1340) 
- Fixed an issue in which - ShapeParamwould always store- None. (#1342)
- Fixed an issue in which multiple identical indices in a slice were ignored. (#947, #1361) 
Deprecated
- The - piecewisefunction in- nengo.utils.functionshas been deprecated. Please use the- Piecewiseprocess instead. (#1100)
2.5.0 (July 24, 2017)¶
Added
- Added a - n_neuronsproperty to- Network, which gives the number of neurons in the network, including all subnetworks. (#435, #1186)
- Added a new example showing how adjusting ensemble tuning curves can improve function approximation. (#1129) 
- Added a minimum magnitude option to - UniformHypersphere. (#799)
- Added documentation on RC settings. (#1130) 
- Added documentation on improving performance. (#1119, #1130) 
- Added - LinearFilter.combinemethod to combine two- LinearFilterinstances. (#1312)
- Added a method to all neuron types to compute ensemble - max_ratesand- interceptsgiven- gainand- bias. (#1334)
Changed
- Learning rules now have a - size_inparameter and attribute, allowing both integers and strings to define the dimensionality of the learning rule. This replaces the- error_typeattribute. (#1307, #1310)
- EnsembleArray.n_neuronsnow gives the total number of neurons in all ensembles, including those in subnetworks. To get the number of neurons in each ensemble, use- EnsembleArray.n_neurons_per_ensemble. (#1186)
- The Nengo modelling API document now has summaries to help navigate the page. (#1304) 
- The error raised when a - Connectionfunction returns- Noneis now more clear. (#1319)
- We now raise an error when a - Connectiontransform is set to- None. (#1326)
Fixed
- Probe cache is now cleared on simulator reset. (#1324) 
- Neural gains are now always applied after the synapse model. Previously, this was the case for decoded connections but not neuron-to-neuron connections. (#1330) 
- Fixed a crash when a lock cannot be acquired while shrinking the cache. (#1335, #1336) 
2.4.0 (April 18, 2017)¶
Added
- Added an optimizer that reduces simulation time for common types of models. The optimizer can be turned off by passing - optimize=Falseto- Simulator. (#1035)
- Added the option to not normalize encoders by setting - Ensemble.normalize_encodersto- False. (#1191, #1267)
- Added the - Samplesdistribution to allow raw NumPy arrays to be passed in situations where a distribution is required. (#1233)
Changed
- We now raise an error when an ensemble is assigned a negative gain. This can occur when solving for gains with intercepts greater than 1. (#1212, #1231, #1248) 
- We now raise an error when a - Nodeor- Directensemble produces a non-finite value. (#1178, #1280, #1286)
- We now enforce that the - labelof a network must be a string or- None, and that the- seedof a network must be an int or- None. This helps avoid situations where the seed would mistakenly be passed as the label. (#1277, #1275)
- It is now possible to pass NumPy arrays in the - ens_kwargsargument of- EnsembleArray. Arrays are wrapped in a- Samplesdistribution internally. (#691, #766, #1233)
- The default refractory period ( - tau_ref) for the- Sigmoidneuron type has changed to 2.5 ms (from 2 ms) for better compatibility with the default maximum firing rates of 200-400 Hz. (#1248)
- Inputs to the - Productand- CircularConvolutionnetworks have been renamed from- Aand- Bto- input_aand- input_bfor consistency. The old names are still available, but should be considered deprecated. (#887, #1296)
Fixed
Deprecated
- The - netargument to networks has been deprecated. This argument existed so that network components could be added to an existing network instead of constructing a new network. However, this feature is rarely used, and makes the code more complicated for complex networks. (#1296)
2.3.1 (February 18, 2017)¶
Added
- Added documentation on config system quirks. (#1224) 
- Added - nengo.utils.network.activate_direct_modefunction to make it easier to activate direct mode in networks where some parts require neurons. (#1111, #1168)
Fixed
- The matrix multiplication example will now work with matrices of any size and uses the product network for clarity. (#1159) 
- Fixed instances in which passing a callable class as a function could fail. (#1245) 
- Fixed an issue in which probing some attributes would be one timestep faster than other attributes. (#1234, #1245) 
- Fixed an issue in which SPA models could not be copied. (#1266, #1271) 
- Fixed an issue in which Nengo would crash if other programs had locks on Nengo cache files in Windows. (#1200, #1235) 
Changed
- Integer indexing of Nengo objects out of range raises an - IndexErrornow to be consistent with standard Python behaviour. (#1176, #1183)
- Documentation that applies to all Nengo projects has been moved to https://www.nengo.ai/. (#1251) 
2.3.0 (November 30, 2016)¶
Added
- It is now possible to probe - scaled_encoderson ensembles. (#1167, #1117)
- Added - copymethod to Nengo objects. Nengo objects can now be pickled. (#977, #984)
- A progress bar now tracks the build process in the terminal and Jupyter notebook. (#937, #1151) 
- Added - nengo.dists.get_samplesfunction for convenience when working with distributions or samples. (#1181, docs)
Changed
- Access to probe data via - nengo.Simulator.datais now cached, making repeated access much faster. (#1076, #1175)
Deprecated
- Access to - nengo.Simulator.modelis deprecated. To access static data generated during the build use- nengo.Simulator.data. It provides access to everything that- nengo.Simulator.model.paramsused to provide access to and is the canonical way to access this data across different backends. (#1145, #1173)
2.2.0 (September 12, 2016)¶
API changes
- It is now possible to pass a NumPy array to the - functionargument of- nengo.Connection. The values in the array are taken to be the targets in the decoder solving process, which means that the- eval_pointsmust also be set on the connection. (#1010)
- nengo.utils.connection.target_functionis now deprecated, and will be removed in Nengo 3.0. Instead, pass the targets directly to the connection through the- functionargument. (#1010)
Behavioural changes
- Dropped support for NumPy 1.6. Oldest supported NumPy version is now 1.7. (#1147) 
Improvements
- Added a - nengo.backendsentry point to make the reference simulator discoverable for other Python packages. In the future all backends should declare an entry point accordingly. (#1127)
- Added - ShapeParamto store array shapes. (#1045)
- Added - ThresholdingPresetto configure ensembles for thresholding. (#1058, #1077, #1148)
- Tweaked - rasterplotso that spikes from different neurons don’t overlap. (#1121)
Documentation
- Added a page explaining the config system and preset configs. (#1150) 
Bug fixes
2.1.2 (June 27, 2016)¶
Bug fixes
- The DecoderCache is now more robust when used improperly, and no longer requires changes to backends in order to use properly. (#1112) 
2.1.1 (June 24, 2016)¶
Improvements
- Improved the default - LIFneuron model to spike at the same rate as the- LIFRateneuron model for constant inputs. The older model has been moved to nengo_extras under the name- FastLIF. (#975)
- Added - y0attribute to- WhiteSignal, which adjusts the phase of each dimension to begin with absolute value closest to- y0. (#1064)
- Allow the - AssociativeMemoryto accept Semantic Pointer expressions as- input_keysand- output_keys. (#982)
Bug fixes
- The DecoderCache is used as context manager instead of relying on the - __del__method for cleanup. This should solve problems with the cache’s file lock not being removed. It might be necessary to manually remove the- index.lockfile in the cache directory after upgrading from an older Nengo version. (#1053, #1041, #1048)
- If the cache index is corrupted, we now fail gracefully by invalidating the cache and continuing rather than raising an exception. (#1110, #1097) 
- The - Nnlssolver now works for weights. The- NnlsL2solver is improved since we clip values to be non-negative before forming the Gram system. (#1027, #1019)
- Eliminate memory leak in the parameter system. (#1089, #1090) 
- Allow recurrence of the form - a=b, b=ain basal ganglia SPA actions. (#1098, #1099)
- Support a greater range of Jupyter notebook and ipywidgets versions with the the - ipynbextensions. (#1088, #1085)
2.1.0 (April 27, 2016)¶
API changes
- A new class for representing stateful functions called - Processhas been added.- Nodeobjects are now process-aware, meaning that a process can be used as a node’s- output. Unlike non-process callables, processes are properly reset when a simulator is reset. See the- processes.ipynbexample notebook, or the API documentation for more details. (#590, #652, #945, #955)
- Spiking - LIFneuron models now accept an additional argument,- min_voltage. Voltages are clipped such that they do not drop below this value (previously, this was fixed at 0). (#666)
- The - PESlearning rule no longer accepts a connection as an argument. Instead, error information is transmitted by making a connection to the learning rule object (e.g.,- nengo.Connection(error_ensemble, connection.learning_rule). (#344, #642)
- The - modulatoryattribute has been removed from- nengo.Connection. This was only used for learning rules to this point, and has been removed in favor of connecting directly to the learning rule. (#642)
- Connection weights can now be probed with - nengo.Probe(conn, 'weights'), and these are always the weights that will change with learning regardless of the type of connection. Previously, either- decodersor- transformmay have changed depending on the type of connection; it is now no longer possible to probe- decodersor- transform. (#729)
- A version of the AssociativeMemory SPA module is now available as a stand-alone network in - nengo.networks. The AssociativeMemory SPA module also has an updated argument list. (#702)
- The - Productand- InputGatedMemorynetworks no longer accept a- configargument. (#814)
- The - EnsembleArraynetwork’s- neuron_nodesargument is deprecated. Instead, call the new- add_neuron_inputor- add_neuron_outputmethods. (#868)
- The - nengo.logutility function now takes a string- levelparameter to specify any logging level, instead of the old binary- debugparameter. Cache messages are logged at DEBUG instead of INFO level. (#883)
- Reorganised the Associative Memory code, including removing many extra parameters from - nengo.networks.assoc_mem.AssociativeMemoryand modifying the defaults of others. (#797)
- Add - closemethod to- Simulator.- Simulatorcan now be used used as a context manager. (#857, #739, #859)
- Most exceptions that Nengo can raise are now custom exception classes that can be found in the - nengo.exceptionsmodule. (#781)
- All Nengo objects ( - Connection,- Ensemble,- Node, and- Probe) now accept a- labeland- seedargument if they didn’t previously. (#958)
- In - nengo.synapses,- filtand- filtfiltare deprecated. Every synapse type now has- filtand- filtfiltmethods that filter using the synapse. (#945)
- Connectionobjects can now accept a- Distributionfor the transform argument; the transform matrix will be sampled from that distribution when the model is built. (#979).
Behavioural changes
- The sign on the - PESlearning rule’s error has been flipped to conform with most learning rules, in which error is minimized. The error should be- actual - target. (#642)
- The - PESrule’s learning rate is invariant to the number of neurons in the presynaptic population. The effective speed of learning should now be unaffected by changes in the size of the presynaptic population. Existing learning networks may need to be updated; to achieve identical behavior, scale the learning rate by- pre.n_neurons / 100. (#643)
- The - probeableattribute of all Nengo objects is now implemented as a property, rather than a configurable parameter. (#671)
- Node functions receive - xas a copied NumPy array (instead of a readonly view). (#716, #722)
- The SPA Compare module produces a scalar output (instead of a specific vector). (#775, #782) 
- Bias nodes in - spa.Cortical, and gate ensembles and connections in- spa.Thalamusare now stored in the target modules. (#894, #906)
- The - filtand- filtfiltfunctions on- Synapsenow use the initial value of the input signal to initialize the filter output by default. This provides more accurate filtering at the beginning of the signal, for signals that do not start at zero. (#945)
Improvements
- Added - Ensemble.noiseattribute, which injects noise directly into neurons according to a stochastic- Process. (#590)
- Added a - randomized_svdsubsolver for the L2 solvers. This can be much quicker for large numbers of neurons or evaluation points. (#803)
- Added - PES.pre_tauattribute, which sets the time constant on a lowpass filter of the presynaptic activity. (#643)
- EnsembleArray.add_outputnow accepts a list of functions to be computed by each ensemble. (#562, #580)
- LinearFilternow has an- analogargument which can be set through its constructor. Linear filters with digital coefficients can be specified by setting- analogto- False. (#819)
- Added - SqrtBetadistribution, which describes the distribution of semantic pointer elements. (#414, #430)
- Added - Trianglesynapse, which filters with a triangular FIR filter. (#660)
- Added - utils.connection.eval_point_decodingfunction, which provides a connection’s static decoding of a list of evaluation points. (#700)
- Resetting the Simulator now resets all Processes, meaning the injected random signals and noise are identical between runs, unless the seed is changed (which can be done through - Simulator.reset). (#582, #616, #652)
- An exception is raised if SPA modules are not properly assigned to an SPA attribute. (#730, #791) 
- The - Productnetwork is now more accurate. (#651)
- Numpy arrays can now be used as indices for slicing objects. (#754) 
- Config.configuresnow accepts multiple classes rather than just one. (#842)
- Added - addmethod to- spa.Actions, which allows actions to be added after module has been initialized. (#861, #862)
- Added SPA wrapper for circular convolution networks, - spa.Bind(#849)
- Added the - Voja(Vector Oja) learning rule type, which updates an ensemble’s encoders to fire selectively for its inputs. (see- examples/learning/learn_associations.ipynb). (#727)
- Added a clipped exponential distribution useful for thresholding, in particular in the AssociativeMemory. (#779) 
- Added a cosine similarity distribution, which is the distribution of the cosine of the angle between two random vectors. It is useful for setting intercepts, in particular when using the - Vojalearning rule. (#768)
- nengo.synapses.LinearFilternow has an- evaluatemethod to evaluate the filter response to sine waves of given frequencies. This can be used to create Bode plots, for example. (#945)
- nengo.spa.Vocabularyobjects now have a- readonlyattribute that can be used to disallow adding new semantic pointers. Vocabulary subsets are read-only by default. (#699)
- Improved performance of the decoder cache by writing all decoders of a network into a single file. (#946) 
Bug fixes
- Fixed issue where setting - Connection.seedthrough the constructor had no effect. (#724)
- Fixed issue in which learning connections could not be sliced. (#632) 
- Fix for SPA actions that route to a module with multiple inputs. (#714) 
- Corrected the - rmsesvalues in- BuiltConnection.solver_infowhen using- NNlsand- Nnl2sL2solvers, and the- regargument for- Nnl2sL2. (#839)
- spa.Vocabulary.create_pointernow respects the specified number of creation attempts, and returns the most dissimilar pointer if none can be found below the similarity threshold. (#817)
- Probing a Connection’s output now returns the output of that individual Connection, rather than the input to the Connection’s post Ensemble. (#973, #974) 
- Fixed thread-safety of using networks and config in - withstatements. (#989)
- The decoder cache will only be used when a seed is specified. (#946) 
2.0.4 (April 27, 2016)¶
Bug fixes
- Cache now fails gracefully if the - legacy.txtfile cannot be read. This can occur if a later version of Nengo is used.
2.0.3 (December 7, 2015)¶
API changes
- The - spa.Stateobject replaces the old- spa.Memoryand- spa.Buffer. These old modules are deprecated and will be removed in 2.2. (#796)
2.0.2 (October 13, 2015)¶
2.0.2 is a bug fix release to ensure that Nengo continues to work with more recent versions of Jupyter (formerly known as the IPython notebook).
Behavioural changes
- The IPython notebook progress bar has to be activated with - %load_ext nengo.ipynb. (#693)
Improvements
- Added - [progress]section to- nengorcwhich allows setting- progress_barand- updater. (#693)
Bug fixes
- Fix compatibility issues with newer versions of IPython, and Jupyter. (#693) 
2.0.1 (January 27, 2015)¶
Behavioural changes
- Node functions receive - tas a float (instead of a NumPy scalar) and- xas a readonly NumPy array (instead of a writeable array). (#626, #628)
Improvements
- rasterplotworks with 0 neurons, and generates much smaller PDFs. (#601)
Bug fixes
- Fix compatibility with NumPy 1.6. (#627) 
2.0.0 (January 15, 2015)¶
Initial release of Nengo 2.0! Supports Python 2.6+ and 3.3+. Thanks to all of the contributors for making this possible!