# Release notes¶

## Brian 2.1.3.1¶

This is a bug-fix release that fixes two bugs in the recent 2.1.3 release:

• Fix an inefficiency in the newly introduced timestep function when using the numpy target (#965)
• Fix inefficiencies in the unit system that could lead to slow operations and high memory use (#967). Thanks to Kaustab Pal for making us aware of the issue.

## Brian 2.1.3¶

This is a bug-fix release that fixes a number of important bugs (see below), but does not introduce any new features. We recommend all users of Brian 2 to upgrade.

As always, please report bugs or suggestions to the github bug tracker (https://github.com/brian-team/brian2/issues) or to the brian-development mailing list (brian-development@googlegroups.com).

### Selected improvements and bug fixes¶

• The Cython cache on disk now uses significantly less space by deleting unnecessary source files (set the codegen.runtime.cython.delete_source_files preference to False if you want to keep these files for debugging). In addition, a warning will be given when the Cython or weave cache exceeds a configurable size (codegen.max_cache_dir_size). The clear_cache function is provided to delete files from the cache (#914).
• The C++ standalone mode now respects the profile option and therefore no longer collects profiling information by default. This can speed up simulations in certain cases (#935).
• The exact number of time steps that a neuron stays in the state of refractoriness after a spike could vary by up to one time step when the requested refractory time was a multiple of the simulation time step. With this fix, the number of time steps is ensured to be as expected by making use of a new timestep function that avoids floating point rounding issues (#949, first reported by @zhouyanasd in issue #943).
• When restore() was called twice for a network, spikes that were not yet delivered to their target were not restored correctly (#938, reported by @zhouyanasd).
• SpikeGeneratorGroup now uses a more efficient method for sorting spike indices and times, leading to a much faster preparation time for groups that store many spikes (#948).
• Fix a memory leak in TimedArray (#923, reported by Wilhelm Braun).
• Fix an issue with summed variables targetting subgroups (#925, reported by @AI-pha).
• Fix the use of run_regularly on subgroups (#922, reported by @AI-pha).
• Improve performance for SpatialNeuron by removing redundant computations (#910, thanks to Moritz Augustin for making us aware of the issue).
• Fix warnings for numpy 1.14 and avoid compilation issues when switching between versions of numpy (#913)
• Fix problems when using logical operators in code generated for the numpy target which could lead to issues such as wrongly connected synapses (#901, #900).

### Backward-incompatible changes¶

• No longer allow delay as a variable name in a synaptic model to avoid ambiguity with respect to the synaptic delay. Also no longer allow access to the delay variable in synaptic code since there is no way to distinguish between pre- and post-synaptic delay (#927, reported by Denis Alevi).
• Due to the changed handling of refractoriness (see bug fixes above), simulations that make use of refractoriness will possibly no longer give exactly the same results. The preference legacy.refractory_timing can be set to True to reinstate the previous behaviour.

### Infrastructure and documentation improvements¶

• From this version on, conda packages will be available on conda-forge. For a limited time, we will copy over packages to the brian-team channel as well.
• Conda packages are no longer tied to a specific numpy version (PR #954)
• New example (Brunel & Wang, 2001) contributed by Teo Stocco and Alex Seeholzer.

### Contributions¶

Github code, documentation, and issue contributions (ordered by the number of contributions):

Other contributions outside of github (ordered alphabetically, apologies to anyone we forgot…):

• Wilhelm Braun

## Brian 2.1.2¶

This is another bug fix release that fixes a major bug in Equations’ substitution mechanism (#896). Thanks to Teo Stocco for reporting this issue.

## Brian 2.1.1¶

This is a bug fix release that re-activates parts of the caching mechanism for code generation that had been erroneously deactivated in the previous release.

## Brian 2.1¶

This release introduces two main new features: a new “GSL integration” mode for differential equation that offers to integrate equations with variable-timestep methods provided by the GNU Scientific Library, and caching for the run preparation phase that can significantly speed up simulations. It also comes with a newly written tutorial, as well as additional documentation and examples.

As always, please report bugs or suggestions to the github bug tracker (https://github.com/brian-team/brian2/issues) or to the brian-development mailing list (brian-development@googlegroups.com).

### New features¶

• New numerical integration methods with variable time-step integration, based on the GNU Scientific Library (see Numerical integration). Contributed by Charlee Fletterman, supported by 2017’s Google Summer of Code program.
• New caching mechanism for the code generation stage (application of numerical integration algorithms, analysis of equations and statements, etc.), reducing the preparation time before the actual run, in particular for simulations with multiple run() statements.

### Selected improvements and bug fixes¶

• Fix a rare problem in Cython code generation caused by missing type information (#893)
• Fix warnings about improperly closed files on Python 3.6 (#892; reported and fixed by Teo Stocco)
• Fix an error when using numpy integer types for synaptic indexing (#888)
• Fix an error in numpy codegen target, triggered when assigning to a variable with an unfulfilled condition (#887)
• Fix an error when repeatedly referring to subexpressions in multiline statements (#880)
• Shorten long arrays in warning messages (#874)
• Enable the use of if in the shorthand generator syntax for Synapses.connect() (#873)
• Fix the meaning of i and j in synapses connecting to/from other synapses (#854)

### Backward-incompatible changes and deprecations¶

• In C++ standalone mode, information about the number of synapses and spikes will now only be displayed when built with debug=True (#882).
• The linear state updater has been renamed to exact to avoid confusion (#877). Users are encouraged to use exact, but the name linear is still available and does not raise any warning or error for now.
• The independent state updater has been marked as deprecated and might be removed in future versions.

### Infrastructure and documentation improvements¶

• A new, more advanced, tutorial “about managing the slightly more complicated tasks that crop up in research problems, rather than the toy examples we’ve been looking at so far.”
• Additional documentation on Custom events and Converting from integrated form to ODEs (including example code for typical synapse models).
• New example code reproducing published findings (Platkiewicz and Brette, 2011; Stimberg et al., 2018)
• Fixes to the sphinx documentation creation process, the documentation can be downloaded as a PDF once again (705 pages!)
• Conda packages now have support for numpy 1.13 (but support for numpy 1.10 and 1.11 has been removed)

### Contributions¶

Github code, documentation, and issue contributions (ordered by the number of contributions):

Other contributions outside of github (ordered alphabetically, apologies to anyone we forgot…):

• Chaofei Hong
• Lucas (“lucascdst”)

## Brian 2.0.2.1¶

Fixes a bug in the tutorials’ HMTL rendering on readthedocs.org (code blocks were not displayed). Thanks to Flora Bouchacourt for making us aware of this problem.

## Brian 2.0.2¶

### New features¶

• molar and liter (as well as litre, scaled versions of the former, and a few useful abbreviations such as mM) have been added as new units (#574).
• A new module brian2.units.constants provides physical constants such as the Faraday constants or the gas constant (see Constants for details).
• SpatialNeuron now supports non-linear membrane currents (e.g. Goldman–Hodgkin–Katz equations) by linearizing them with respect to v.
• Multi-compartmental models can access the capacitive current via Ic in their equations (#677)
• A new function scheduling_summary() that displays information about the scheduling of all objects (see Scheduling for details).
• Introduce a new preference to pass arguments to the make/nmake command in C++ standalone mode (devices.cpp_standalone.extra_make_args_unix for Linux/OS X and devices.cpp_standalone.extra_make_args_windows for Windows). For Linux/OS X, this enables parallel compilation by default.
• Anaconda packages for Brian 2 are now available for Python 3.6 (but Python 3.4 support has been removed).

### Selected improvements and bug fixes¶

• Work around low performance for certain C++ standalone simulations on Linux, due to a bug in glibc (see #803). Thanks to Oleg Strikov (@xj8z) for debugging this issue and providing the workaround that is now in use.
• Make exact integration of event-driven synaptic variables use the linear numerical integration algorithm (instead of independent), fixing rare occasions where integration failed despite the equations being linear (#801).
• Better error messages for incorrect unit definitions in equations.
• Various fixes for the internal representation of physical units and the unit registration system.
• Fix a bug in the assignment of state variables in subtrees of SpatialNeuron (#822)
• Numpy target: fix an indexing error for a SpikeMonitor that records from a subgroup (#824)
• Summed variables targeting the same post-synaptic variable now raise an error (previously, only the one executed last was taken into account, see #766).
• Fix bugs in synapse generation affecting Cython (#781) respectively numpy (#835)
• C++ standalone simulations with many objects no longer fail on Windows (#787)

### Backwards-incompatible changes¶

• celsius has been removed as a unit, because it was ambiguous in its relation to kelvin and gave wrong results when used as an absolute temperature (and not a temperature difference). For temperature differences, you can directly replace celsius by kelvin. To convert an absolute temperature in degree Celsius to Kelvin, add the zero_celsius constant from brian2.units.constants (#817).
• State variables are no longer allowed to have names ending in _pre or _post to avoid confusion with references to pre- and post-synaptic variables in Synapses (#818)

### Changes to default settings¶

• In C++ standalone mode, the clean argument now defaults to False, meaning that make clean will not be executed by default before building the simulation. This avoids recompiling all files for unchanged simulations that are executed repeatedly. To return to the previous behaviour, specify clean=True in the device.build call (or in set_device if your script does not have an explicit device.build).

### Contributions¶

Github code, documentation, and issue contributions (ordered by the number of contributions):

Other contributions outside of github (ordered alphabetically, apologies to anyone we forgot…):

• Christopher Nolan
• Regimantas Jurkus
• Shailesh Appukuttan

## Brian 2.0.1¶

This is a bug-fix release that fixes a number of important bugs (see below), but does not introduce any new features. We recommend all users of Brian 2 to upgrade.

As always, please report bugs or suggestions to the github bug tracker (https://github.com/brian-team/brian2/issues) or to the brian-development mailing list (brian-development@googlegroups.com).

### Contributions¶

Code and documentation contributions (ordered by the number of commits):

Testing, suggestions and bug reports (ordered alphabetically, apologies to anyone we forgot…):

• Myung Seok Shim
• Pamela Hathway

## Brian 2.0 (changes since 1.4)¶

### Major new features¶

• Much more flexible model definitions. The behaviour of all model elements can now be defined by arbitrary equations specified in standard mathematical notation.
• Code generation as standard. Behind the scenes, Brian automatically generates and compiles C++ code to simulate your model, making it much faster.
• “Standalone mode”. In this mode, Brian generates a complete C++ project tree that implements your model. This can be then be compiled and run entirely independently of Brian. This leads to both highly efficient code, as well as making it much easier to run simulations on non-standard computational hardware, for example on robotics platforms.
• Multicompartmental modelling.
• Python 2 and 3 support.

### New features¶

• Installation should now be much easier, especially if using the Anaconda Python distribution. See Installation.
• Many improvements to Synapses which replaces the old Connection object in Brian 1. This includes: synapses that are triggered by non-spike events; synapses that target other synapses; huge speed improvements thanks to using code generation; new “generator syntax” when creating synapses is much more flexible and efficient. See Synapses.
• New model definitions allow for much more flexible refractoriness. See Refractoriness.
• SpikeMonitor and StateMonitor are now much more flexible, and cover a lot of what used to be covered by things like MultiStateMonitor, etc. See Recording during a simulation.
• Multiple event types. In addition to the default spike event, you can create arbitrary events, and have these trigger code blocks (like reset) or synaptic events. See Custom events.
• New units system allows arrays to have units. This eliminates the need for a lot of the special casing that was required in Brian 1. See Physical units.
• Indexing variable by condition, e.g. you might write G.v['x>0'] to return all values of variable v in NeuronGroup G where the group’s variable x>0. See State variables.
• Correct numerical integration of stochastic differential equations. See Numerical integration.
• “Magic” run() system has been greatly simplified and is now much more transparent. In addition, if there is any ambiguity about what the user wants to run, an erorr will be raised rather than making a guess. This makes it much safer. In addition, there is now a store()/restore() mechanism that simplifies restarting simulations and managing separate training/testing runs. See Running a simulation.
• Changing an external variable between runs now works as expected, i.e. something like tau=1*ms; run(100*ms); tau=5*ms; run(100*ms). In Brian 1 this would have used tau=1*ms for both runs. More generally, in Brian 2 there is now better control over namespaces. See Namespaces.
• New “shared” variables with a single value shared between all neurons. See Shared variables.
• New Group.run_regularly() method for a codegen-compatible way of doing things that used to be done with network_operation() (which can still be used). See Regular operations.
• New system for handling externally defined functions. They have to specify which units they accept in their arguments, and what they return. In addition, you can easily specify the implementation of user-defined functions in different languages for code generation. See Functions.
• State variables can now be defined as integer or boolean values. See Equations.
• State variables can now be exported directly to Pandas data frame. See Storing state variables.
• New generalised “flags” system for giving additional information when defining models. See Flags.
• TimedArray now allows for 2D arrays with arbitrary indexing. See Timed arrays.
• Better support for using Brian in IPython/Jupyter. See, for example, start_scope().
• New preferences system. See Preferences.
• Random number generation can now be made reliably reproducible. See Random numbers.
• New profiling option to see which parts of your simulation are taking the longest to run. See Profiling.
• New logging system allows for more precise control. See Logging.
• New ways of importing Brian for advanced Python users. See Importing Brian.
• Improved control over the order in which objects are updated during a run. See Custom progress reporting.
• Users can now easily define their own numerical integration methods. See State update.
• Support for parallel processing using the OpenMP version of standalone mode. Note that all Brian tests pass with this, but it is still considered to be experimental. See Multi-threading with OpenMP.

### Behind the scenes changes¶

• All user models are now passed through the code generation system. This allows us to be much more flexible about introducing new target languages for generated code to make use of non-standard computational hardware. See Code generation.
• New standalone/device mode allows generation of a complete project tree that can be compiled and built independently of Brian and Python. This allows for even more flexible use of Brian on non-standard hardware. See Devices.
• All objects now have a unique name, used in code generation. This can also be used to access the object through the Network object.

### Contributions¶

Full list of all Brian 2 contributors, ordered by the time of their first contribution:

## Brian 2.0 (changes since 2.0rc3)¶

### New features¶

• A new flag constant over dt can be applied to subexpressions to have them only evaluated once per timestep (see Models and neuron groups). This flag is mandatory for stateful subexpressions, e.g. expressions using rand() or randn(). (#720, #721)

### Infrastructure and documentation improvements¶

• An interactive demo, tutorials, and examples can now be run in an interactive jupyter notebook on the mybinder platform, without any need for a local Brian installation (#736). Thanks to Ben Evans for the idea and help with the implementation.
• A new extensive guide for converting Brian 1 simulations to Brian 2 user coming from Brian 1: Changes for Brian 1 users
• A re-organized User’s guide, with clearer indications which information is important for new Brian users.

### Contributions¶

Code and documentation contributions (ordered by the number of commits):

Testing, suggestions and bug reports (ordered alphabetically, apologies to anyone we forgot…):

• Chaofei Hong
• Daniel Bliss
• Jacopo Bono
• Ruben Tikidji-Hamburyan

## Brian 2.0rc3¶

This is another “release candidate” for Brian 2.0 that fixes a range of bugs and introduces better support for random numbers (see below). We are getting close to the final Brian 2.0 release, the remaining work will focus on bug fixes, and better error messages and documentation.

As always, please report bugs or suggestions to the github bug tracker (https://github.com/brian-team/brian2/issues) or to the brian-development mailing list (brian-development@googlegroups.com).

### New features¶

• Brian now comes with its own seed() function, allowing to seed the random number generator and thereby to make simulations reproducible. This function works for all code generation targets and in runtime and standalone mode. See Random numbers for details.
• Brian can now export/import state variables of a group or a full network to/from a pandas DataFrame and comes with a mechanism to extend this to other formats. Thanks to Dominik Krzemiński for this contribution (see #306).

### Improvements and bug fixes¶

• Use a Mersenne-Twister pseudorandom number generator in C++ standalone mode, replacing the previously used low-quality random number generator from the C standard library (see #222, #671 and #706).
• Fix a memory leak in code running with the weave code generation target, and a smaller memory leak related to units stored repetitively in the UnitRegistry.
• Fix a difference of one timestep in the number of simulated timesteps between runtime and standalone that could arise for very specific values of dt and t (see #695).
• Fix standalone compilation failures with the most recent gcc version which defaults to C++14 mode (see #701)
• Fix incorrect summation in synapses when using the (summed) flag and writing to pre-synaptic variables (see #704)
• Make synaptic pathways work when connecting groups that define nested subexpressions, instead of failing with a cryptic error message (see #707).

### Contributions¶

Code and documentation contributions (ordered by the number of commits):

Testing, suggestions and bug reports (ordered alphabetically, apologies to anyone we forgot…):

• Craig Henriquez
• Daniel Bliss
• David Higgins
• Gordon Erlebacher
• Max Gillett
• Moritz Augustin
• Sami Abdul-Wahid

## Brian 2.0rc1¶

This is a bug fix release that we release only about two weeks after the previous release because that release introduced a bug that could lead to wrong integration of stochastic differential equations. Note that standard neuronal noise models were not affected by this bug, it only concerned differential equations implementing a “random walk”. The release also fixes a few other issues reported by users, see below for more information.

### Improvements and bug fixes¶

• Fix a regression from 2.0b4: stochastic differential equations without any non-stochastic part (e.g. dx/dt = xi/sqrt(ms)) were not integrated correctly (see #686).
• Repeatedly calling restore() (or Network.restore()) no longer raises an error (see #681).
• Fix an issue that made PoissonInput refuse to run after a change of dt (see #684).
• If the rates argument of PoissonGroup is a string, it will now be evaluated at every time step instead of once at construction time. This makes time-dependent rate expressions work as expected (see #660).

### Contributions¶

Code and documentation contributions (ordered by the number of commits):

Testing, suggestions and bug reports (ordered alphabetically, apologies to anyone we forgot…):

• Cian O’Donnell
• Daniel Bliss
• Ibrahim Ozturk
• Olivia Gozel

## Brian 2.0rc¶

This is a release candidate for the final Brian 2.0 release, meaning that from now on we will focus on bug fixes and documentation, without introducing new major features or changing the syntax for the user. This release candidate itself does however change a few important syntax elements, see “Backwards-incompatible changes” below.

As always, please report bugs or suggestions to the github bug tracker (https://github.com/brian-team/brian2/issues) or to the brian-development mailing list (brian-development@googlegroups.com).

### Improvements and bug fixes¶

• In addition to the new synapse creation syntax, sparse probabilistic connections are now created much faster.
• The time for the initialization phase at the beginning of a run() has been significantly reduced.
• Multicompartmental simulations with a large number of compartments are now simulated more efficiently and are making better use of several processor cores when OpenMP is activated in C++ standalone mode. Thanks to Moritz Augustin for this contribution.
• Simulations will use compiler settings that optimize performance by default.
• Objects that have user-specified names are better supported for complex simulation scenarios (names no longer have to be unique at all times, but only across a network or across a standalone device).
• Various fixes for compatibility with recent versions of numpy and sympy

### Important backwards-incompatible changes¶

• The argument names in Synapses.connect() have changed and the first argument can no longer be an array of indices. To connect based on indices, use Synapses.connect(i=source_indices, j=target_indices). See Creating synapses and the documentation of Synapses.connect() for more details.
• The actions triggered by pre-synaptic and post-synaptic spikes are now described by the on_pre and on_post keyword arguments (instead of pre and post).
• The Morphology object no longer allows to change attributes such as length and diameter after its creation. Complex morphologies should instead be created using the Section class, allowing for the specification of all details.
• Morphology objects that are defined with coordinates need to provide the start point (relative to the end point of the parent compartment) as the first coordinate. See Creating a neuron morphology for more details.
• For simulations using the C++ standalone mode, no longer call Device.build (if using a single run() call), or use set_device() with build_on_run=False (see Standalone code generation).

### Infrastructure improvements¶

• Our test suite is now also run on Mac OS-X (on the Travis CI platform).

### Contributions¶

Code and documentation contributions (ordered by the number of commits):

Testing, suggestions and bug reports (ordered alphabetically, apologies to anyone we forgot…):

• Chaofei Hong
• Kees de Leeuw
• Luke Y Prince
• Myung Seok Shim
• Owen Mackwood
• Github users: @epaxon, @flinz, @mariomulansky, @martinosorb, @neuralyzer, @oleskiw, @prcastro, @sudoankit

## Brian 2.0b4¶

This is the fourth (and probably last) beta release for Brian 2.0. This release adds a few important new features and fixes a number of bugs so we recommend all users of Brian 2 to upgrade. If you are a user new to Brian, we also recommend to directly start with Brian 2 instead of using the stable release of Brian 1. Note that the new recommended way to install Brian 2 is to use the Anaconda distribution and to install the Brian 2 conda package (see Installation).

This is however still a Beta release, please report bugs or suggestions to the github bug tracker (https://github.com/brian-team/brian2/issues) or to the brian-development mailing list (brian-development@googlegroups.com).

### Improvemements and bug fixes¶

• Cython simulations no longer interfere with each other when run in parallel (thanks to Daniel Bliss for reporting and fixing this).
• The C++ standalone now works with scalar delays and the spike queue implementation deals more efficiently with them in general.
• Dynamic arrays are now resized more efficiently, leading to faster monitors in runtime mode.
• The spikes generated by a SpikeGeneratorGroup can now be changed between runs using the set_spikes method.
• Multi-step state updaters now work correctly for non-autonomous differential equations
• PoissonInput now correctly works with multiple clocks (thanks to Daniel Bliss for reporting and fixing this)
• The get_states method now works for StateMonitor. This method provides a convenient way to access all the data stored in the monitor, e.g. in order to store it on disk.
• C++ compilation is now easier to get to work under Windows, see Installation for details.

### Important backwards-incompatible changes¶

• The custom_operation method has been renamed to run_regularly and can now be called without the need for storing its return value.
• StateMonitor will now by default record at the beginning of a time step instead of at the end. See Recording variables continuously for details.
• Scalar quantities now behave as python scalars with respect to in-place modifications (augmented assignments). This means that x = 3*mV; y = x; y += 1*mV will no longer increase the value of the variable x as well.

### Infrastructure improvements¶

• We now provide conda packages for Brian 2, making it very easy to install when using the Anaconda distribution (see Installation).

### Contributions¶

Code and documentation contributions (ordered by the number of commits):

Testing, suggestions and bug reports (ordered alphabetically, apologies to everyone we forgot…):

• Daniel Bliss
• Damien Drix
• Rainer Engelken
• Beatriz Herrera Figueredo
• Owen Mackwood
• Augustine Tan
• Ot de Wiljes

## Brian 2.0b3¶

This is the third beta release for Brian 2.0. This release does not add many new features but it fixes a number of important bugs so we recommend all users of Brian 2 to upgrade. If you are a user new to Brian, we also recommend to directly start with Brian 2 instead of using the stable release of Brian 1.

This is however still a Beta release, please report bugs or suggestions to the github bug tracker (https://github.com/brian-team/brian2/issues) or to the brian-development mailing list (brian-development@googlegroups.com).

### Improvements¶

• The order of execution for pre and post statements happending in the same time step was not well defined (it fell back to the default alphabetical ordering, executing post before pre). It now explicitly specifies the order attribute so that pre gets executed before post (as in Brian 1). See the Synapses documentation for details.
• The default schedule that is used can now be set via a preference (core.network.default_schedule). New automatically generated scheduling slots relative to the explicitly defined ones can be used, e.g. before_resets or after_synapses. See Scheduling for details.
• The scipy package is no longer a dependency (note that weave for compiled C code under Python 2 is now available in a separate package). Note that multicompartmental models will still benefit from the scipy package if they are simulated in pure Python (i.e. with the numpy code generation target) – otherwise Brian 2 will fall back to a numpy-only solution which is significantly slower.

### Important bug fixes¶

• Fix SpikeGeneratorGroup which did not emit all the spikes under certain conditions for some code generation targets (#429)
• Fix an incorrect update of pre-synaptic variables in synaptic statements for the numpy code generation target (#435).
• Fix the possibility of an incorrect memory access when recording a subgroup with SpikeMonitor (#454).
• Fix the storing of results on disk for C++ standalone on Windows – variables that had the same name when ignoring case (e.g. i and I) where overwriting each other (#455).

### Contributions¶

Code and documentation contributions (ordered by the number of commits):

Testing, suggestions and bug reports (ordered alphabetically, apologies to everyone we forgot…):

• Daniel Bliss
• Owen Mackwood
• Ankur Sinha
• Richard Tomsett

## Brian 2.0b2¶

This is the second beta release for Brian 2.0, we recommend all users of Brian 2 to upgrade. If you are a user new to Brian, we also recommend to directly start with Brian 2 instead of using the stable release of Brian 1.

This is however still a Beta release, please report bugs or suggestions to the github bug tracker (https://github.com/brian-team/brian2/issues) or to the brian-development mailing list (brian-development@googlegroups.com).

### Major new features¶

• Multi-compartmental simulations can now be run using the Standalone code generation mode (this is not yet well-tested, though).
• The implementation of TimedArray now supports two-dimensional arrays, i.e. different input per neuron (or synapse, etc.), see Timed arrays for details.
• Previously, not setting a code generation target (using the codegen.target preference) would mean that the numpy target was used. Now, the default target is auto, which means that a compiled language (weave or cython) will be used if possible. See Computational methods and efficiency for details.
• The implementation of SpikeGeneratorGroup has been improved and it now supports a period argument to repeatedly generate a spike pattern.

### Improvements¶

• The selection of a numerical algorithm (if none has been specified by the user) has been simplified. See Numerical integration for details.
• Expressions that are shared among neurons/synapses are now updated only once instead of for every neuron/synapse which can lead to performance improvements.
• On Windows, The Microsoft Visual C compiler is now supported in the cpp_standalone mode, see the respective notes in the Installation and Computational methods and efficiency documents.
• Simulation runs (using the standard “runtime” device) now collect profiling information. See Profiling for details.

### Infrastructure and documentation improvements¶

• Tutorials for beginners in the form of ipython notebooks (currently only covering the basics of neurons and synapses) are now available.
• The Examples in the documentation now include the images they generated. Several examples have been adapted from Brian 1.
• The code is now automatically tested on Windows machines, using the appveyor service. This complements the Linux testing on travis.
• Using a version of a dependency (e.g. sympy) that we don’t support will now raise an error when you import brian2 – see Dependency checks for more details.
• Test coverage for the cpp_standalone mode has been significantly increased.

### Important bug fixes¶

• The preparation time for complicated equations has been significantly reduced.
• The string representation of small physical quantities has been corrected (#361)
• Linking variables from a group of size 1 now works correctly (#383)

### Contributions¶

Code and documentation contributions (ordered by the number of commits):

Testing, suggestions and bug reports (ordered alphabetically, apologies to everyone we forgot…):

• Conor Cox
• Gordon Erlebacher
• Konstantin Mergenthaler

## Brian 2.0beta¶

This is the first beta release for Brian 2.0 and the first version of Brian 2.0 we recommend for general use. From now on, we will try to keep changes that break existing code to a minimum. If you are a user new to Brian, we’d recommend to start with the Brian 2 beta instead of using the stable release of Brian 1.

This is however still a Beta release, please report bugs or suggestions to the github bug tracker (https://github.com/brian-team/brian2/issues) or to the brian-development mailing list (brian-development@googlegroups.com).

### Major new features¶

• New classes Morphology and SpatialNeuron for the simulation of Multicompartment models
• A temporary “bridge” for brian.hears that allows to use its Brian 1 version from Brian 2 (Brian Hears)
• Cython is now a new code generation target, therefore the performance benefits of compiled code are now also available to users running simulations under Python 3.x (where scipy.weave is not available)
• Networks can now store their current state and return to it at a later time, e.g. for simulating multiple trials starting from a fixed network state (Continuing/repeating simulations)
• C++ standalone mode: multiple processors are now supported via OpenMP (Multi-threading with OpenMP), although this code has not yet been well tested so may be inaccurate.
• C++ standalone mode: after a run, state variables and monitored values can be loaded from disk transparently. Most scripts therefore only need two additional lines to use standalone mode instead of Brian’s default runtime mode (Standalone code generation).

### Syntax changes¶

• The syntax and semantics of everything around simulation time steps, clocks, and multiple runs have been cleaned up, making reinit obsolete and also making it unnecessary for most users to explicitly generate Clock objects – instead, a dt keyword can be specified for objects such as NeuronGroup (Running a simulation)
• The scalar flag for parameters/subexpressions has been renamed to shared
• The “unit” for boolean variables has been renamed from bool to boolean
• C++ standalone: several keywords of CPPStandaloneDevice.build have been renamed
• The preferences are now accessible via prefs instead of brian_prefs
• The runner method has been renamed to custom_operation`

### Bug fixes¶

57 github issues have been closed since the alpha release, of which 26 had been labeled as bugs. We recommend all users of Brian 2 to upgrade.

### Contributions¶

Code and documentation contributions (ordered by the number of commits):

Testing, suggestions and bug reports (ordered alphabetically, apologies to everyone we forgot…):

• Guillaume Bellec
• Victor Benichoux
• Laureline Logiaco
• Konstantin Mergenthaler
• Maurizio De Pitta
• Jan-Hendrick Schleimer
• Douglas Sterling
• Katharina Wilmes