============
Introduction
============

PyNN_ (pronounced 'pine') is a simulator-independent language for building neuronal network models.

In other words, you can write the code for a model once, using the PyNN API and the Python_ programming language, and then run it without modification on any simulator that PyNN supports (currently NEURON_, NEST_, `Brian 2`_, and Arbor_) as well as on certain neuromorphic hardware systems.

The PyNN API aims to support modelling at a high-level of abstraction (populations of neurons, layers, columns and the connections between them) while still allowing access to the details of individual neurons and synapses when required. PyNN provides a library of standard neuron, synapse and synaptic plasticity models, which have been verified to work the same on the different supported simulators. PyNN also provides a set of commonly-used connectivity algorithms (e.g. all-to-all, random, distance-dependent, small-world) but makes it easy to provide your own connectivity in a simulator-independent way, either using the Connection Set Algebra (`Djurfeldt, 2012`_) or by writing your own Python code.

Even if you don't wish to run simulations on multiple simulators, you may benefit from writing your simulation code using PyNN's powerful, high-level interface. In this case, you can use any neuron or synapse model supported by your simulator, and are not restricted to the standard models. PyNN transparently supports distributed simulations (using MPI) where the underlying simulator does.

It is straightforward to port an existing model from a Python-supporting simulator to PyNN, since this can be done incrementally, replacing one piece of simulator-specific code at a time with the PyNN equivalent, and testing that the model behaviour is unchanged at each step.

:doc:`Download<download>` the current stable release of the library (|release|) or get the development version from the `Git repository`_ .

Licence
-------

The code is released under the CeCILL_ licence. (This is equivalent to and compatible with the GPL).

Citing PyNN
-----------

If you publish work using or mentioning PyNN, we would appreciate it if you would cite the following paper:

Davison AP, Brüderle D, Eppler JM, Kremkow J, Muller E, Pecevski DA, Perrinet L and Yger P (2009)
PyNN: a common interface for neuronal network simulators. Front. Neuroinform. 2:11 `doi:10.3389/neuro.11.011.2008 <http://www.frontiersin.org/neuroinformatics/10.3389/neuro.11/011.2008/abstract>`_.


Questions/Bugs/Enhancements
---------------------------

If you find a bug in PyNN, or wish to request a new feature, please go the `PyNN issue tracker`_, click on "New Issue", and fill in the form.

If you have questions or comments about PyNN, please post a message on the `NeuralEnsemble Google group`_.

.. _PyNN: http://neuralensemble.org/PyNN/
.. _Python: http://www.python.org/
.. _CeCILL: http://www.cecill.info/
.. _NEURON: http://www.neuron.yale.edu/neuron/
.. _NEST:   http://www.nest-initiative.org/?page=Software
.. _Brian 2:  http://briansimulator.org/
.. _`Git repository`: https://github.com/NeuralEnsemble/PyNN
.. _`PyNN issue tracker`: https://github.com/NeuralEnsemble/PyNN/issues
.. _`NeuralEnsemble Google group`: http://groups.google.com/group/neuralensemble
.. _`Djurfeldt, 2012`: http://doi.org/10.1007/s12021-012-9146-1
.. _Arbor: https://arbor-sim.org
