###########
Development
###########
.. contents:: :local:
Contributing
============
If you would like to contribute to Birdwatcher, please follow the Style Guide conventions for consistency of code and documentation.
Style guide
===========
Here, you can find a description of the code and documentation conventions used throughout Birdwatcher.
In general, we follow the standard Python style conventions for our code:
- `PEP 8 - Style Guide for Python Code `__
- `PEP 257 - Docstring conventions `__
The documentation of Birdwatcher (see https://birdwatcher.readthedocs.io) is written in `re-structured text (reST) `__ syntax and is rendered using `Sphinx `__.
For more precise docstring conventions, we follow the `Docstring Standard of Numpy `__. Also, see below for some highlighted information and examples.
Docstring Parameters
--------------------
In the parameter description of the docstring, specify behind each parameter its ``type``. Add whether a keyword parameter is ``optional``. Optional parameters always have default values.
The **default value** can be described in several ways:
1) For more simple, straightforward default values, add ``default=value`` instead of ``optional``, behind the type description. See ``color`` and ``reportprogress`` in the example_.
2) Describe the default value in the detailed description of parameter if more information is necessary. Make sure to also add ``optional`` behind the type description. See ``ffmpegpath`` in the example_.
3) Use ``optional`` when the default value would not be used as value. See ``startat`` and ``nframes`` in the example_.
.. _example:
**An example:**
.. code:: python
def iter_frames(self, startat=None, nframes=None, color=True,
ffmpegpath='ffmpeg', reportprogress=False):
"""Iterate over frames in video.
Parameters
----------
startat : str, optional
If specified, start at this time point in the video file. You
can use two different time unit formats: sexagesimal
(HOURS:MM:SS.MILLISECONDS, as in 01:23:45.678), or in seconds.
nframes : int, optional
Read a specified number of frames.
color : bool, default=True
Read as a color frame (3 dimensional) or as a gray frame (2
dimensional).
ffmpegpath : str or pathlib.Path, optional
Path to ffmpeg executable. Default is `ffmpeg`, which means it
should be in the system path.
reportprogress : bool, default=False
Yields
------
Frames
Iterator that generates numpy array frames (height x width x color
channel).
"""