Documentación

Desarrollo de paquetes en Python

James Fulton

Climate informatics researcher

¿Por qué incluir documentación?

  • Ayuda a tus usuarios a usar tu código
  • Documenta cada
    • Función
    • Clase
    • Método de clase
import numpy as np
help(np.sum)
...
sum(a, axis=None, dtype=None, out=None)
    Sum of array elements over a given axis.

    Parameters
    ----------
    a : array_like
        Elements to sum.
    axis : None or int or tuple of ints, optional
        Axis or axes along which a sum is performed.  
        The default, axis=None, will sum all of the 
        elements of the input array.
...
Desarrollo de paquetes en Python

¿Por qué incluir documentación?

  • Ayuda a tus usuarios a usar tu código
  • Documenta cada
    • Función
    • Clase
    • Método de clase
import numpy as np
help(np.array)
...
    array(object, dtype=None, copy=True)

    Create an array.

    Parameters
    ----------
    object : array_like
        An array, any object exposing the array 
        interface ...
    dtype : data-type, optional
        The desired data-type for the array. 
    copy : bool, optional
        If true (default), then the object is copied.
...
Desarrollo de paquetes en Python

¿Por qué incluir documentación?

  • Ayuda a tus usuarios a usar tu código
  • Documenta cada
    • Función
    • Clase
    • Método de clase
import numpy as np
x = np.array([1,2,3,4])
help(x.mean)
...
mean(...) method of numpy.ndarray instance
    a.mean(axis=None, dtype=None, out=None)

    Returns the average of the array elements 
    along given axis.

    Refer to `numpy.mean` for full documentation.
...
Desarrollo de paquetes en Python

Documentación de funciones

def count_words(filepath, words_list):

""" ... """
Desarrollo de paquetes en Python

Documentación de funciones

def count_words(filepath, words_list):

"""Cuenta cuántas veces aparecen estas palabras en total."""
Desarrollo de paquetes en Python

Documentación de funciones

def count_words(filepath, words_list):

"""Cuenta cuántas veces aparecen estas palabras en total. El recuento se realiza sobre un archivo de texto en la ubicación dada. """
Desarrollo de paquetes en Python

Documentación de funciones

def count_words(filepath, words_list):

"""Cuenta cuántas veces aparecen estas palabras en total. El recuento se realiza sobre un archivo de texto en la ubicación dada. [explica qué son filepath y words_list] [qué se devuelve] """
Desarrollo de paquetes en Python

Estilos de documentación

Estilo de documentación de Google

"""Summary line.

Extended description of function.

Args:
    arg1 (int): Description of arg1
    arg2 (str): Description of arg2

Estilo NumPy

    """Summary line.

    Extended description of function.

    Parameters
    ----------
    arg1 : int
        Description of arg1 ...

    Returns
    ----------
    numpy.ndarray

Estilo reStructuredText

    """Summary line.

    Extended description of function.

    :param arg1: Description of arg1
    :type arg1: int
    :param arg2: Description of arg2
    :type arg2: str

Estilo Epytext

"""Summary line.

  Extended description of function.

  @type arg1: int
  @param arg1:  Description of arg1
  @type arg2: str
  @param arg2: Description of arg2
Desarrollo de paquetes en Python

Estilo de documentación de NumPy

Popular en paquetes científicos de Python como

  • numpy
  • scipy
  • pandas
  • sklearn
  • matplotlib
  • dask
  • etc.
Desarrollo de paquetes en Python

Estilo de documentación de NumPy

import scipy
help(scipy.percentile)
percentile(a, q, axis=None, out=None, overwrite_input=False, interpolation='linear')
    Compute the q-th percentile of the data along the specified axis.

    Returns the q-th percentile(s) of the array elements.


Parameters ----------
a : array_like
Input array or object that can be converted to an array.

Other types include - int, float, bool, str, dict, numpy.array, etc.

Desarrollo de paquetes en Python

Estilo de documentación de NumPy

import scipy
help(scipy.percentile)
percentile(a, q, axis=None, out=None, overwrite_input=False, interpolation='linear')
    ...
    Parameters
    ----------
    ...
    axis : {int, tuple of int, None}
    ...
    interpolation : {'linear', 'lower', 'higher', 'midpoint', 'nearest'}
  • Indica varios tipos para un parámetro si procede
  • Enumera los valores aceptados si solo hay unas pocas opciones válidas
Desarrollo de paquetes en Python

Estilo de documentación de NumPy

import scipy
help(scipy.percentile)
percentile(a, q, axis=None, out=None, overwrite_input=False, interpolation='linear')
    ...
    Returns
    -------
    percentile : scalar or ndarray
        If `q` is a single percentile and `axis=None`, then the result
        is a scalar. If multiple percentiles are given, first axis of
        the result corresponds to the percentiles...
    ...
Desarrollo de paquetes en Python

Estilo de documentación de NumPy

Otras secciones

  • Raises
  • See Also
  • Notes
  • References
  • Examples
1 https://numpydoc.readthedocs.io/en/latest/format.html
Desarrollo de paquetes en Python

Plantillas de documentación y conversión de estilos

  • pyment puede usarse para generar docstrings
  • Ejecuta desde la terminal
  • Cualquier estilo de documentación de
    • Google
    • Numpydoc
    • reST (es decir, reStructuredText)
    • Javadoc (es decir, epytext)
  • Convierte documentación de un estilo a otro
Desarrollo de paquetes en Python

Plantillas de documentación y conversión de estilos

pyment -w -o numpydoc textanalysis.py
def count_words(filepath, words_list):
    # Open the text file
    ...
    return n
  • -w - sobrescribe el archivo
  • -o numpydoc - salida en estilo NumPy
Desarrollo de paquetes en Python

Plantillas de documentación y conversión de estilos

pyment -w -o numpydoc textanalysis.py
def count_words(filepath, words_list):
    """

    Parameters
    ----------
    filepath :

    words_list :


    Returns
    -------
    type
    """
Desarrollo de paquetes en Python

Traducir al estilo Google

pyment -w -o google textanalysis.py
def count_words(filepath, words_list):
    """Cuenta cuántas veces aparecen estas palabras en total.

    El recuento se realiza sobre un archivo de texto en la ubicación dada.

    Parameters
    ----------
    filepath : str
        Path to text file.
    words_list : list of str
        Count the total number of appearances of these words.

    Returns
    -------

    """
Desarrollo de paquetes en Python

Traducir al estilo Google

pyment -w -o google textanalysis.py
def count_words(filepath, words_list):
    """Cuenta cuántas veces aparecen estas palabras en total.

    El recuento se realiza sobre un archivo de texto en la ubicación dada.

    Args:
      filepath(str): Path to text file.
      words_list(list of str): Count the total number of appearances of these words.

    Returns:


    """
Desarrollo de paquetes en Python

Documentación de paquete, subpaquete y módulo

mysklearn/__init__.py

"""
Linear regression for Python
============================

mysklearn is a complete package for implmenting
linear regression in python. 
"""

mysklearn/preprocessing/__init__.py

"""
A subpackage for standard preprocessing operations.
"""

 

mysklearn/preprocessing/normalize.py

"""
A module for normalizing data.
"""
Desarrollo de paquetes en Python

¡Vamos a practicar!

Desarrollo de paquetes en Python

Preparing Video For Download...