A Python library for creating and simulating large-scale brain models
Added
scaled_encoders
on ensembles. (#1167, #1117)copy
method to Nengo objects. Nengo objects can now be pickled. (#977, #984)nengo.dists.get_samples
function for convenience when working with distributions or samples. (#1181, docs)Changed
API changes
function
argument of nengo.Connection
. The values in the array are taken to be the targets in the decoder solving process, which means that the eval_points
must also be set on the connection. (#1010)nengo.utils.connection.target_function
is now deprecated, and will be removed in Nengo 3.0. Instead, pass the targets directly to the connection through the function
argument. (#1010)Behavioural changes
Improvements
nengo.backends
entry point to make the reference simulator discoverable for other Python packages. In the future all backends should declare an entry point accordingly. (#1127)ShapeParam
to store array shapes. (#1045)ThresholdingPreset
to configure ensembles for thresholding. (#1058, #1077, #1148)rasterplot
so that spikes from different neurons don’t overlap. (#1121)Documentation
Bug fixes
Bug fixes
Improvements
LIF
neuron model to spike at the same rate as
the LIFRate
neuron model for constant inputs. The older model has
been moved to nengo_extras under the name FastLIF
. (#975)y0
attribute to WhiteSignal
, which adjusts the phase of
each dimension to begin with absolute value closest to y0
.
(#1064)AssociativeMemory
to accept Semantic Pointer expressions
as input_keys
and output_keys
. (#982)Bug fixes
__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.lock
file in the cache directory after
upgrading from an older Nengo version. (#1053, #1041,
#1048)Nnls
solver now works for weights. The NnlsL2
solver is
improved since we clip values to be non-negative before forming the
Gram system. (#1027, #1019)a=b, b=a
in basal ganglia SPA
actions. (#1098, #1099)ipynb
extensions. (#1088, #1085)API changes
Process
has
been added. Node
objects 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.ipynb
example notebook, or the API documentation
for more details. (#590,
#652,
#945,
#955)LIF
neuron 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)PES
learning 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)modulatory
attribute 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)nengo.Probe(conn, 'weights')
, and these are always the weights
that will change with learning regardless of the type of connection.
Previously, either decoders
or transform
may have changed
depending on the type of connection; it is now no longer possible to
probe decoders
or transform
.
(#729)nengo.networks
. The AssociativeMemory SPA
module also has an updated argument list.
(#702)Product
and InputGatedMemory
networks no longer accept a
config
argument.
(#814)EnsembleArray
network's neuron_nodes
argument is deprecated.
Instead, call the new add_neuron_input
or add_neuron_output
methods. (#868)nengo.log
utility function now takes a string level
parameter to specify any logging level, instead of the old binary
debug
parameter. Cache messages are logged at DEBUG instead of
INFO level. (#883)nengo.networks.assoc_mem.AssociativeMemory
and modifying the defaults of others.
(#797)close
method to Simulator
. Simulator
can now be used used
as a context manager.
(#857,
#739,
#859)nengo.exceptions
module.
(#781)Connection
, Ensemble
, Node
, and Probe
)
now accept a label
and seed
argument if they didn't previously.
(#958)nengo.synapses
, filt
and filtfilt
are deprecated. Every
synapse type now has filt
and filtfilt
methods that filter using
the synapse. (#945)Connection
objects can now accept a Distribution
for the
transform argument; the transform matrix will be sampled from that
distribution when the model is built.
(#979).Behavioural changes
PES
learning rule's error has been flipped to
conform with most learning rules, in which error is minimized. The
error should be actual - target
.
(#642)PES
rule'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)probeable
attribute of all Nengo objects is now implemented as
a property, rather than a configurable parameter.
(#671)x
as a copied NumPy array (instead of a
readonly view). (#716,
#722)spa.Cortical
, and gate ensembles and connections in
spa.Thalamus
are now stored in the target modules.
(#894,
#906)filt
and filtfilt
functions on Synapse
now 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
Ensemble.noise
attribute, which injects noise directly into
neurons according to a stochastic Process
.
(#590)randomized_svd
subsolver for the L2 solvers. This can be
much quicker for large numbers of neurons or evaluation points.
(#803)PES.pre_tau
attribute, which sets the time constant on a
lowpass filter of the presynaptic activity.
(#643)EnsembleArray.add_output
now accepts a list of functions to be
computed by each ensemble.
(#562,
#580)LinearFilter
now has an analog
argument which can be set through
its constructor. Linear filters with digital coefficients can be
specified by setting analog
to False
.
(#819)SqrtBeta
distribution, which describes the distribution of
semantic pointer elements.
(#414,
#430)Triangle
synapse, which filters with a triangular FIR
filter. (#660)utils.connection.eval_point_decoding
function, which
provides a connection's static decoding of a list of evaluation
points. (#700)Simulator.reset
).
(#582,
#616,
#652)Product
network is now more accurate.
(#651)Config.configures
now accepts multiple classes rather than
just one. (#842)add
method to spa.Actions
, which allows actions to be
added after module has been initialized.
(#861,
#862)spa.Bind
(#849)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)Voja
learning
rule. (#768)nengo.synapses.LinearFilter
now has an evaluate
method to
evaluate the filter response to sine waves of given frequencies.
This can be used to create Bode plots, for example.
(#945)nengo.spa.Vocabulary
objects now have a readonly
attribute that
can be used to disallow adding new semantic pointers. Vocabulary
subsets are read-only by default.
(#699)Bug fixes
Connection.seed
through the constructor
had no effect. (#724)rmses
values in BuiltConnection.solver_info
when
using NNls
and Nnl2sL2
solvers, and the reg
argument for
Nnl2sL2
. (#839)spa.Vocabulary.create_pointer
now respects the specified number of
creation attempts, and returns the most dissimilar pointer if none
can be found below the similarity threshold.
(#817)with
statements. (#989)Bug fixes
legacy.txt
file cannot be read.
This can occur if a later version of Nengo is used.API changes
spa.State
object replaces the old spa.Memory
and
spa.Buffer
. These old modules are deprecated and will be removed
in 2.2. (#796)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
%load_ext nengo.ipynb
. (#693)Improvements
[progress]
section to nengorc
which allows setting
progress_bar
and updater
. (#693)Bug fixes
Initial release of Nengo 2.0! Supports Python 2.6+ and 3.3+. Thanks to all of the contributors for making this possible!