Tu primera contribución a PyMC#
Este tutorial te guiará en el envío de tu primer PR al repositorio pymc. Hemos tratado de cubrir todos los pasos y ser claros con el resultado esperado en cada uno de ellos.
Empezarás clonando el repositorio pymc, instalando los requisitos que necesitarás para contribuir, haciendo algunos cambios en una cadena de documentación de tu elección y enviando un pull request.
Descargo de responsabilidad
Se trata de un tutorial tal y como se define en diataxis. Aquí hay algunas cosas a tener en cuenta:
¿Tengo que seguir cada paso exactamente como se explica? No, pero te recomendamos encarecidamente que los sigas. Una vez que hayas enviado tu primer PR y te sientas cómodo con el proceso, puedes empezar a experimentar y personalizarlo.
¿Debo enviar una edición de la cadena de documentación como primer PR? No, pero te recomendamos encarecidamente que lo hagas. Esto te permitirá separar el flujo de trabajo de la contribución del contenido de la contribución. Podremos ayudarte mucho mejor a lo largo del proceso si sigues estos pasos, ya que tendremos una idea clara de tu situación en todo momento. Creemos que esto te ayudará a sentirte cómodo con las herramientas y la infraestructura (git, entornos virtuales, GitHub PRs y CI) lo antes posible para que luego puedas centrarte en el contenido de tus próximos PRs.
¿Comprenderé las razones de cada paso? No, el objetivo de este tutorial es enseñarte a hacer a través del hacer.
Si prefieres vídeo en lugar de contenido escrito, puedes ver a Reshama repasar esta guía y enviar un PR a PyMC en el siguiente vídeo:
Prepara tu entorno virtual#
Si aún no tienes configurado tu sistema, puedes seguir las instrucciones del tutorial Configuración del entorno local.
Escoge una cadena de documentación#
Ve a la documentación de la API de PyMC API, haz clic en el módulo (y submódulo si es necesario) que más te interese y elige una cadena de documentación (docstring) sobre el que trabajar.
Nota
Este tutorial sigue el proceso de actualización de pymc.Uniform
y combina comentarios generales sobre la actualización de cadenas de documentación con comentarios específicos sobre la aplicación de esos cambios a pymc.Uniform
.
La cadena de documentación está disponible en la página Sample docstring, he actualizado la cadena de documentación en PyMC mientras escribía esta guía.
Una vez que hayas elegido, ve a nuestro issue tracker, comprueba que nadie esté trabajando ya en ello y comenta que vas a actualizarlo.
Importante
Recuerda esa función y mantén la pestaña abierta (o guarda el enlace para más tarde)
Abre el archivo con tu editor de texto#
Abre el archivo que contiene la cadena de documentación que elegiste para editar con tu editor de texto. El archivo estará dentro de la carpeta pymc
, pero probablemente no será fácil de adivinar solo por el nombre de la función o clase.
Vuelve a la página de la API y haz clic en el botón «[source]» a la derecha de la firma de la función.
Ahora échale un vistazo al enlace. Esto es lo que muestra para pymc.Uniform
:
https://www.pymc.io/projects/docs/en/latest/_modules/pymc/distributions/continuous.html#Uniform
El archivo con la definición de la clase Uniform
y su cadena de docuemntación es pymc/distributions/continuous.py
, la ruta que viene después de _modules
con extensión .py
.
Edita la cadena de documentación#
Los cambios que tienes que hacer son asegurarte de que la cadena de documentación sigue la convención de numpydoc. Tenemos algunas convenciones adicionales, que he explicado aquí, pero solo son relevantes para algunas secciones, la mayor parte del tiempo seguirás numpydoc directamente.
Abre la guía de estilo numpydoc una al lado de la otra o en una ventana diferente. Estoy actualizando la cadena de documentación de pymc.Uniform como ejemplo.
Tienes que revisar sección por sección para asegurarte de que todo está bien documentado. Si has elegido una clase que no es una distribución (a diferencia de este ejemplo en el que estamos trabajando en la distribución pymc.Uniform
), debes revisar las cadenas de documentación de todos los métodos (aunque solo si ya existen, no es necesario escribir las cadenas de documentación que faltan). De lo contrario, deberías trabajar solo en la cadena de documentación de la función o de la clase. Por lo tanto, ignoraremos las cadenas de documentación de los métodos logcdf
, get_moment
y dist
.
Comentarios que no están relacionados con ninguna sección#
Solo es necesario un breve resumen. El resto debe utilizarse cuando sea pertinente. Por regla general, si falta una sección, ignórala por ahora. Si crees que debería añadirse, toma nota y comunícalo cuando abras el PR.
Si encuentras instancias de la directiva para graficar
..plot::
, asegúrate de que estén ya sea en el resumen extendido o en la sección de ejemplos y de que usen el contextoclose-figs
. Debería lucir así:.. plot:: :context: close-figs python code starts here
Breve resumen#
Comentarios generales: Asegúrate de que haya una descripción corta (de preferencia una sola línea) del objeto. En la mayoría de casos tendrás que ignorar la regla de “no usar los nombres de las variables o de la función”.
Cadena de documentación de la clase pymc.Uniform:
Advertencia de depreciación#
Comentarios generales: No debería haber advertencias de caducidad, usamos un decorador para eso. Si encuentras una cadena de documentación con una, toma nota, no lo modifiques y avísanos cuando abras el PR.
Cadena de documentación de la clase pymc.Uniform:
Resumen extendido#
Comentarios generales: Esta sección ya lleva bastante avance y probablemente no necesite muchas modificaciones además de, tal vez, actualizar directivas o mover algo de código a la sección de notas.
Cadena de documentación de la clase pymc.Uniform class docstring: Faltó cerrar figs en la directiva de gráficos.
Parámetros#
Comentarios generales: Esta es la sección que, probablemente, tomará la mayor cantidad de trabajo. Algunos aspectos clave a tener en cuenta además de los mencionados en los consejos sobre numpydoc:
Los dos puntos entre un nombre de argumento y su tipo deben llevar espacios antes y después.
Las pistas de tipado deberían ir en la firma de la función, no en la cadena de documentación.
Optional[Union[str, int]]
no es un contenido adecuado para una cadena de documentación, debería serstr or int, optional
. Las pistas de tipado son para las computadoras, las cadenas de documentación son para las personas.Los parámetros opcionales deben indicarse con
, optional
o, default <value>
. Si el valor por defecto es del tipo documentado y se utiliza directamente, es preferible utilizar default en lugar de optional. Sin embargo, si el valor por defecto depende de otros parámetros o es un marcador de posición (por ejemplo, es muy común usarNone
para argumentos de tipo kwarg) entonces debe usarse optional, explicando el valor por defecto en la descripción.En las descripciones de tipos. Tenemos varios alias disponibles para mantener las cadenas de documentación sin procesar cortos y claros mientras se genera una página html agradable con todos los enlaces correctos:
tensor_like
: Uno de los alias más comunes (si no el más común). Debe usarse en todos los parámetros que tomen un tensor aesara o cualquier objeto que pueda convertirse en él. En general, tendrás que cambiartensor
,aesara tensor
(incluyendo combinaciones con diferentes mayúsculas, punto o guion en medio) portensor_like
.TensorVariable
: Similar atensor_like
pero solo debe usarse para parámetros que no serán convertidos internamente y necesitan ser tensores de Aesara antes de pasarlos a los argumentos. UtilizaTensorVariable
, sin comillas extra o backticks. Pregunta si no estás seguro sobre el uso detensor_like
oTensorVariable
.RandomVariable
: Cambiavar
,random var
,aesara var
y conceptos similares, deberían serRandomVariable
.array_like
: Cambiaarray like
oarray-like
porarray_like
con guion bajo. Si encuentras esto en un parámetro devuelto, anótalo en la descripción del PR.ndarray
: Cambianp.ndarray
onumpy.ndarray
porndarray
. Sin embargo, si encuentras esto en un argumento de entrada, anótalo en la descripción del PR.Covariance
andMean
: solo dentro del módulo gpcovariance
,covariance objects
,Covariance instances
y similares deben modificarse aCovariance
. Lo mismo paraMean
.InferenceData
: cambia cosas comoarviz.InferenceData
oinference data
por esto.MultiTrace
yBaseTrace
: cambia cualquier cosa que contenga esto en el tipo a ellos. Lo más probable es encontrarpymc.backends.base.MultiTrace
.Point
: cambiapymc.Point
,point
y parecidos por estoSMC_kernel
: dentro del módulo smc cambia las referencias a kernel, smc kernel y similares por esto. Fíjate en el guion bajo y las mayúsculas.Aesara_Op
: cambiaAesara Op
,Op
y variaciones porAesara_Op
, ¡ten cuidado con el guión bajo y las mayúsculas!También podríamos darnos cuenta de que nos falta un alias importante gracias a tus contribuciones. Revisa el archivo conf.py de vez en cuando para ver si hay nuevos alias no explicados aquí. Los alias se definen en el diccionario
numpydoc_xref_aliases
.
Cadena de documentación de la clase pymc.Uniform:
No debe haber espacios entre el nombre de un argumento y los dos puntos.
Ambos argumentos son, de hecho, opcionales. En Distributions, esto no se puede ver en la clase como tal sino en el método
dist
. En el caso de Uniform, tendremosdist(cls, lower=0, upper=1, **kwargs)
. Por tanto, los dos son opcionales y tienen valores por defecto de 0 y 1, respectivamente.Los parámetros de entrada a las distribuciones pueden ser tensores Aesara, escalares o arreglos NumPy. Por lo tanto, se debe utilizar
tensor_like
. En este caso, los parámetros de la distribución son números reales (en lugar de discretos, por ejemplo) por lo que utilizaremostensor_like of float
. Para parámetros discretos usaríamostensor_like of int
.
Retorna y produce#
Comentarios generales: Nada que añadir a numpydoc. Siguen el estilo de la sección de parámetros pero con el nombre del argumento siendo opcional para valores retornados o producidos únicos. Deberías buscar las mismas cosas detalladas en la sección de parámetros además de asegurarte de que el tipo (más el nombre si lo hay) y la descripción están en líneas diferentes.
Cadena de documentación de la clase pymc.Uniform:
Confirma tus cambios en git y prepara tu PR.#
¡Fantástico! Ya estás listo para hacer tu PR.
Puedes seguir el PR Tutorial que explica cómo puedes hacer un PR a PyMC.
Tu PR será revisado y, con suerte, fusionado por el equipo de PyMC. Después de eso, podrás celebrar tu primera contribución a PyMC. ¡Gracias por contribuir!