Start implementing the new run system, prepare() is replaced by
pre_run() and post_run()
New namespace system: If a NeuronGroup does not have an explicit
namespace defined during its creation, the namespace surrounding or
provided to the run function will be used.
Fix a couple of small issues and adapt the test suite.
Add some documentation of the new namespace system.
Let functions and units take precedence over all other namespaces
Register function and unit names as "illegal identifiers".
Make sure the set of instances does not change during iteration in
_find_names (even though I still have no idea why it should change in
the first place...)
Try to check for errors during creation time, if possible (i.e. if the
namespace is complete for the object).
Function meta objects now also include information about the
corresponding sympy function, used in parse_to_sympy to not treat exp,
sin, etc. as undefined, arbitrary functions. This might allow for
simplifications in the code. brian.utils.parsing had to move to
brian2.codegen to make this work because it depends on
brian2.codegen.functions.numpyfunctions now.
Assume that symbols are real values (and not complex) -- this allows
sympy to replace expressions like sqrt(x**2) by abs(x), for example.
Refactor the unit check system, check units for thresholds and resets
Refactor the "NeuronGroupCodeRunner" system (there's nothing
NeuronGroup-specific in it, move it to "GroupCodeRunner") and document
and test a bit more.
Add more tests