# Verificaciones en un Pull Request Cuando abres un _pull request_ en 馃 Transformers, se ejecutar谩n una serie de verificaciones para asegurarte de que el _patch_ que est谩s agregando no rompa nada existente. Estas verificaciones son de cuatro tipos: - pruebas regulares - creaci贸n de la documentaci贸n - estilo del c贸digo y documentaci贸n - consistencia del repositorio En este documento, intentaremos explicar cu谩les son esas diferentes verificaciones y el motivo detr谩s de ellas, as铆 como tambi茅n c贸mo depurarlas localmente si una falla en tu PR. Recuerda que todas las verificaciones requieren que tengas una instalaci贸n de desarrollo: ```bash pip install transformers[dev] ``` o una instalaci贸n editable: ```bash pip install -e .[dev] ``` del repositorio de Transformers. ## Pruebas Todos los procesos que comienzan con `ci/circleci: run_tests_` ejecutan partes del conjunto de pruebas de Transformers. Cada uno de esos procesos se enfoca en una parte de la biblioteca en un entorno determinado: por ejemplo, `ci/circleci: run_tests_pipelines_tf` ejecuta la prueba de _pipelines_ en un entorno donde solo est谩 instalado TensorFlow. Ten en cuenta que para evitar ejecutar pruebas cuando no hay un cambio real en los m贸dulos que est谩s probando, solo se ejecuta una parte del conjunto de pruebas: se ejecuta una tarea auxiliar para determinar las diferencias en la biblioteca antes y despu茅s del PR (lo que GitHub te muestra en la pesta帽a "Files changes") y selecciona las pruebas afectadas por esa diferencia. Este auxiliar se puede ejecutar localmente usando: ```bash python utils/tests_fetcher.py ``` desde el directorio raiz del repositorio de Transformers. Se ejecutar谩 lo siguiente: 1. Verificaci贸n para cada archivo en el _diff_ si los cambios est谩n en el c贸digo, solo en comentarios o _docstrings_. Solo los archivos con cambios reales de c贸digo se conservan. 2. Creaci贸n de un mapa interno que proporciona para cada archivo del c贸digo fuente de la biblioteca todos los archivos a los que impacta recursivamente. Se dice que el m贸dulo A impacta al m贸dulo B si el m贸dulo B importa el m贸dulo A. Para el impacto recursivo, necesitamos una cadena de m贸dulos que va del m贸dulo A al m贸dulo B en la que cada m贸dulo importa el anterior. 3. Aplicaci贸n de este mapa en los archivos recopilados en el paso 1, lo que nos da una lista de archivos modelo afectados por el PR. 4. Asignaci贸n de cada uno de esos archivos a sus archivos de prueba correspondientes y para obtener una la lista de pruebas a ejecutar. Al ejecutar el _script_ localmente, debes obtener los resultados de los pasos 1, 3 y 4 impresos y as铆 saber qu茅 pruebas se ejecutar谩n. El _script_ tambi茅n crear谩 un archivo llamado `test_list.txt` que contiene la lista de pruebas para ejecutar, y puede ejecutarlas localmente con el siguiente comando: ```bash python -m pytest -n 8 --dist=loadfile -rA -s $(cat test_list.txt) ``` En caso de que se te escape algo, el conjunto completo de pruebas tambi茅n se ejecuta a diario. ## Creaci贸n de la documentaci贸n El proceso `build_pr_documentation` compila y genera una vista previa de la documentaci贸n para asegurarse de que todo se vea bien una vez que se fusione tu PR. Un bot agregar谩 un enlace para obtener una vista previa de la documentaci贸n en tu PR. Cualquier cambio que realices en el PR se actualiza autom谩ticamente en la vista previa. Si la documentaci贸n no se genera, haz clic en **Detalles** junto al proceso fallido para ver d贸nde sali贸 mal. A menudo, el error es tan simple como que falta un archivo en `toctree`. Si est谩s interesado en compilar u obtener una vista previa de la documentaci贸n localmente, echa un vistazo al [`README.md`](https://github.com/huggingface/transformers/tree/main/docs) en la carpeta `docs`. ## Estilo de c贸digo y documentaci贸n. El formato de c贸digo se aplica a todos los archivos fuente, los ejemplos y las pruebas utilizando `black` e `ruff`. Tambi茅n tenemos una herramienta personalizada que se ocupa del formato de los _docstrings_ y archivos `rst` (`utils/style_doc.py`), as铆 como del orden de las importaciones _lazy_ realizadas en los archivos `__init__.py` de Transformers (`utils /custom_init_isort.py`). Todo esto se puede probar ejecutando ```bash make style ``` CI verifica que se hayan aplicado dentro de la verificaci贸n `ci/circleci: check_code_quality`. Tambi茅n se ejecuta `ruff`, que har谩 una verificaci贸n b谩sica a tu c贸digo y te har谩 saber si encuentra una variable no definida, o una que no se usa. Para ejecutar esa verificaci贸n localmente, usa ```bash make quality ``` Esto puede llevar mucho tiempo, as铆 que para ejecutar lo mismo solo en los archivos que modificaste en la rama actual, ejecuta ```bash make fixup ``` Este 煤ltimo comando tambi茅n ejecutar谩 todas las verificaciones adicionales para la consistencia del repositorio. Echemos un vistazo a estas pruebas. ## Consistencia del repositorio Esta verificaci贸n reagrupa todas las pruebas para asegurarse de que tu PR deja el repositorio en buen estado, y se realiza mediante `ci/circleci: check_repository_consistency`. Puedes ejecutar localmente esta verificaci贸n ejecutando lo siguiente: ```bash make repo-consistency ``` Esta instrucci贸n verifica que: - Todos los objetos agregados al _init_ est谩n documentados (realizados por `utils/check_repo.py`) - Todos los archivos `__init__.py` tienen el mismo contenido en sus dos secciones (realizado por `utils/check_inits.py`) - Todo el c贸digo identificado como una copia de otro m贸dulo es consistente con el original (realizado por `utils/check_copies.py`) - Todas las clases de configuraci贸n tienen al menos _checkpoint_ v谩lido mencionado en sus _docstrings_ (realizado por `utils/check_config_docstrings.py`) - Las traducciones de los README y el 铆ndice del documento tienen la misma lista de modelos que el README principal (realizado por `utils/check_copies.py`) - Las tablas generadas automaticamente en la documentaci贸n est谩n actualizadas (realizadas por `utils/check_table.py`) - La biblioteca tiene todos los objetos disponibles incluso si no est谩n instaladas todas las dependencias opcionales (realizadas por `utils/check_dummies.py`) Si esta verificaci贸n falla, los primeros dos elementos requieren una reparaci贸n manual, los 煤ltimos cuatro pueden repararse autom谩ticamente ejecutando el comando ```bash make fix-copies ``` Las verificaciones adicionales se refieren a los PRs que agregan nuevos modelos, principalmente que: - Todos los modelos agregados est谩n en un Auto-mapping (realizado por `utils/check_repo.py`) - Todos los modelos se verifican correctamente (realizados por `utils/check_repo.py`)