developers_guide.rst 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. =================
  2. Developers' guide
  3. =================
  4. These instructions are for developing on a Unix-like platform, e.g. Linux or
  5. macOS, with the bash shell. If you develop on Windows, please get in touch.
  6. Mailing lists
  7. -------------
  8. General discussion of Neo development takes place in the `NeuralEnsemble Google
  9. group`_.
  10. Discussion of issues specific to a particular ticket in the issue tracker
  11. should take place on the tracker.
  12. Using the issue tracker
  13. -----------------------
  14. If you find a bug in Neo, please create a new ticket on the `issue tracker`_,
  15. setting the type to "defect".
  16. Choose a name that is as specific as possible to the problem you've found, and
  17. in the description give as much information as you think is necessary to
  18. recreate the problem. The best way to do this is to create the shortest
  19. possible Python script that demonstrates the problem, and attach the file to
  20. the ticket.
  21. If you have an idea for an improvement to Neo, create a ticket with type
  22. "enhancement". If you already have an implementation of the idea, create a
  23. patch (see below) and attach it to the ticket.
  24. To keep track of changes to the code and to tickets, you can register for
  25. a GitHub account and then set to watch the repository at `GitHub Repository`_
  26. (see https://help.github.com/en/articles/watching-and-unwatching-repositories).
  27. Requirements
  28. ------------
  29. * Python_ 3.5 or later
  30. * numpy_ >= 1.11.0
  31. * quantities_ >= 0.12.1
  32. * nose_ >= 1.1.2 (for running tests)
  33. * Sphinx_ (for building documentation)
  34. * (optional) coverage_ >= 2.85 (for measuring test coverage)
  35. * (optional) scipy >= 0.12 (for MatlabIO)
  36. * (optional) h5py >= 2.5 (for KwikIO, NeoHdf5IO)
  37. * (optional) nixio (for NixIO)
  38. * (optional) pillow (for TiffIO)
  39. We strongly recommend you develop within a virtual environment (from virtualenv, venv or conda).
  40. Getting the source code
  41. -----------------------
  42. We use the Git version control system. The best way to contribute is through
  43. GitHub_. You will first need a GitHub account, and you should then fork the
  44. repository at `GitHub Repository`_
  45. (see http://help.github.com/en/articles/fork-a-repo).
  46. To get a local copy of the repository::
  47. $ cd /some/directory
  48. $ git clone git@github.com:<username>/python-neo.git
  49. Now you need to make sure that the ``neo`` package is on your PYTHONPATH.
  50. You can do this either by installing Neo::
  51. $ cd python-neo
  52. $ python3 setup.py install
  53. (if you do this, you will have to re-run ``setup.py install`` any time you make
  54. changes to the code) *or* by creating symbolic links from somewhere on your
  55. PYTHONPATH, for example::
  56. $ ln -s python-neo/neo
  57. $ export PYTHONPATH=/some/directory:${PYTHONPATH}
  58. An alternate solution is to install Neo with the *develop* option, this avoids
  59. reinstalling when there are changes in the code::
  60. $ sudo python setup.py develop
  61. or using the "-e" option to pip::
  62. $ pip install -e python-neo
  63. To update to the latest version from the repository::
  64. $ git pull
  65. Running the test suite
  66. ----------------------
  67. Before you make any changes, run the test suite to make sure all the tests pass
  68. on your system::
  69. $ cd neo/test
  70. $ python3 -m unittest discover
  71. If you have nose installed::
  72. $ nosetests
  73. At the end, if you see "OK", then all the tests
  74. passed (or were skipped because certain dependencies are not installed),
  75. otherwise it will report on tests that failed or produced errors.
  76. To run tests from an individual file::
  77. $ python3 test_analogsignal.py
  78. Writing tests
  79. -------------
  80. You should try to write automated tests for any new code that you add. If you
  81. have found a bug and want to fix it, first write a test that isolates the bug
  82. (and that therefore fails with the existing codebase). Then apply your fix and
  83. check that the test now passes.
  84. To see how well the tests cover the code base, run::
  85. $ nosetests --with-coverage --cover-package=neo --cover-erase
  86. Working on the documentation
  87. ----------------------------
  88. All modules, classes, functions, and methods (including private and subclassed
  89. builtin methods) should have docstrings.
  90. Please see `PEP257`_ for a description of docstring conventions.
  91. Module docstrings should explain briefly what functions or classes are present.
  92. Detailed descriptions can be left for the docstrings of the respective
  93. functions or classes. Private functions do not need to be explained here.
  94. Class docstrings should include an explanation of the purpose of the class
  95. and, when applicable, how it relates to standard neuroscientific data.
  96. They should also include at least one example, which should be written
  97. so it can be run as-is from a clean newly-started Python interactive session
  98. (that means all imports should be included). Finally, they should include
  99. a list of all arguments, attributes, and properties, with explanations.
  100. Properties that return data calculated from other data should explain what
  101. calculation is done. A list of methods is not needed, since documentation
  102. will be generated from the method docstrings.
  103. Method and function docstrings should include an explanation for what the
  104. method or function does. If this may not be clear, one or more examples may
  105. be included. Examples that are only a few lines do not need to include
  106. imports or setup, but more complicated examples should have them.
  107. Examples can be tested easily using the iPython `%doctest_mode` magic. This will
  108. strip >>> and ... from the beginning of each line of the example, so the
  109. example can be copied and pasted as-is.
  110. The documentation is written in `reStructuredText`_, using the `Sphinx`_
  111. documentation system. Any mention of another Neo module, class, attribute,
  112. method, or function should be properly marked up so automatic
  113. links can be generated. The same goes for quantities or numpy.
  114. To build the documentation::
  115. $ cd python-neo/doc
  116. $ make html
  117. Then open `some/directory/python-neo/doc/build/html/index.html` in your browser.
  118. Committing your changes
  119. -----------------------
  120. Once you are happy with your changes, **run the test suite again to check
  121. that you have not introduced any new bugs**. It is also recommended to check
  122. your code with a code checking program, such as `pyflakes`_ or `flake8`_. Then
  123. you can commit them to your local repository::
  124. $ git commit -m 'informative commit message'
  125. If this is your first commit to the project, please add your name and
  126. affiliation/employer to :file:`doc/source/authors.rst`
  127. You can then push your changes to your online repository on GitHub::
  128. $ git push
  129. Once you think your changes are ready to be included in the main Neo repository,
  130. open a pull request on GitHub
  131. (see https://help.github.com/en/articles/about-pull-requests).
  132. Python version
  133. --------------
  134. Neo should work with Python 3.5 or newer. If you need support for Python 2.7,
  135. use Neo v0.8.0 or earlier.
  136. Coding standards and style
  137. --------------------------
  138. All code should conform as much as possible to `PEP 8`_, and should run with
  139. Python 3.5 or newer.
  140. You can use the `pep8`_ program to check the code for PEP 8 conformity.
  141. You can also use `flake8`_, which combines pep8 and pyflakes.
  142. However, the pep8 and flake8 programs do not check for all PEP 8 issues.
  143. In particular, they do not check that the import statements are in the
  144. correct order.
  145. Also, please do not use ``from xyz import *``. This is slow, can lead to
  146. conflicts, and makes it difficult for code analysis software.
  147. Making a release
  148. ----------------
  149. .. TODO: discuss branching/tagging policy.
  150. Add a section in :file:`/doc/source/whatisnew.rst` for the release.
  151. First check that the version string (in :file:`neo/version.py`) is correct.
  152. To build a source package::
  153. $ python setup.py sdist
  154. Tag the release in the Git repository and push it::
  155. $ git tag <version>
  156. $ git push --tags origin
  157. $ git push --tags upstream
  158. To upload the package to `PyPI`_ (currently Samuel Garcia, Andrew Davison,
  159. Michael Denker and Julia Sprenger have the necessary permissions to do this)::
  160. $ twine upload dist/neo-0.X.Y.tar.gz
  161. .. talk about readthedocs
  162. .. make a release branch
  163. If you want to develop your own IO module
  164. -----------------------------------------
  165. See :ref:`io_dev_guide` for implementation of a new IO.
  166. .. _Python: https://www.python.org
  167. .. _nose: https://nose.readthedocs.io/
  168. .. _Setuptools: https://pypi.python.org/pypi/setuptools/
  169. .. _tox: http://codespeak.net/tox/
  170. .. _coverage: https://coverage.readthedocs.io/
  171. .. _`PEP 8`: https://www.python.org/dev/peps/pep-0008/
  172. .. _`issue tracker`: https://github.com/NeuralEnsemble/python-neo/issues
  173. .. _`Porting to Python 3`: http://python3porting.com/
  174. .. _`NeuralEnsemble Google group`: https://groups.google.com/forum/#!forum/neuralensemble
  175. .. _reStructuredText: http://docutils.sourceforge.net/rst.html
  176. .. _Sphinx: http://www.sphinx-doc.org/
  177. .. _numpy: https://numpy.org/
  178. .. _quantities: https://pypi.org/project/quantities/
  179. .. _PEP257: https://www.python.org/dev/peps/pep-0257/
  180. .. _PEP394: https://www.python.org/dev/peps/pep-0394/
  181. .. _PyPI: https://pypi.org
  182. .. _GitHub: https://github.com
  183. .. _`GitHub Repository`: https://github.com/NeuralEnsemble/python-neo/
  184. .. _pep8: https://pypi.org/project/pep8/
  185. .. _flake8: https://pypi.org/project/flake8/
  186. .. _pyflakes: https://pypi.org/project/pyflakes/