PyNN - A Unified Experiment Language
Within the FACETS research project, a large variety of different software simulators and hardware emulations of neuron and neural network models are in use for research. Examples for software simulators used by FACETS members are NEST, NEURON, MVASPIKE, SPLIT and PCSIM, while both the Electronic Vision(s) group from Heidelberg and a partner group from Bordeaux develop and work with their own neuro-morphic hardware systems.
An ongoing effort under the coordination of the FACETS member Andrew Davison is to create a universal interpreter-based API, called PyNN, allowing the description and execution of one network model on arbitrary simulation respectively emulation back-ends. For the purpose of this unification approach, Python was chosen as the top-level glue language. This decision is motivated by various reasons. First of all, it was motivated by Python's large flexibility and the possible benefit from an active community developing Python applications. Python is an interpreter-based language, allowing for scripting but also for an interactive operation. Its code can be written very human-readable, which makes it easier for a wide spectrum of possible users to learn how to use it. Furthermore, its legibility is a clear advantage to possible alternatives like for example Perl. Python is object-oriented and provides dynamic typing, a feature which for example pays off when translating the same function arguments to various back-ends. Currently, PyNN supports the software simulators NEST, NEURON, PCSIM, plus the FACETS Stage 1 hardware and the executable specification of the Stage 2 hardware. All of these modules have a layered communication structure in common, which at the low level interfaces some native interpreter or API provided by the developers of the simulation core. E.g. for NEST, the original interpreter language shipped with the kernel is called SLI, for NEURON it is HOC, and for both the FACETS hardware and PCSIM a C++ API is available. For all of these interfaces, translation layers to Python - called wrappers - have been developed in order to close the gap to PyNN.