Este proyecto es educativo y Open Source. No se copia código de otros emuladores. Implementación basada únicamente en documentación técnica y tests permitidas.
Fix test_build.py Runner (Root)
Resumen
Corrección del checkpoint obligatorio test_build.py que verifica la compilación del módulo C++/Cython.
El script estaba ubicado en tests/temp/test_build.py y fallaba al ejecutarse desde subdirectorios por problemas de sys.path.
Se creó un runner robusto en la raíz del repositorio (./test_build.py) que maneja correctamente el sys.path y puede ejecutarse desde cualquier ubicación.
Se mantiene compatibilidad con el script original mediante un wrapper que redirige a la raíz.
Concepto Técnico: sys.path y Resolución de Módulos en Python
Cuando Python ejecuta un script, agrega el directorio donde está ubicado ese script al principio de sys.path
(la lista de rutas donde Python busca módulos). Si el script se ejecuta desde un subdirectorio, Python intentará importar
módulos relativos a ese subdirectorio, no a la raíz del proyecto.
Problema identificado: Al ejecutar tests/temp/test_build.py directamente, Python establece
sys.path[0] = tests/temp/, lo que impide encontrar el módulo viboy_core que está compilado en la raíz del proyecto.
Solución: Colocar el script principal en la raíz del repositorio y asegurar que el directorio raíz esté en sys.path
antes de cualquier importación. Esto garantiza que Python pueda encontrar el módulo compilado independientemente de desde dónde se ejecute el script.
Por qué es crítico: test_build.py es un checkpoint obligatorio del flujo de trabajo que verifica que el pipeline
de compilación Cython→C++ funciona correctamente. Si este checkpoint falla, cualquier flujo automatizado se rompe y es imposible avanzar con confianza.
Implementación
Se creó un nuevo script test_build.py en la raíz del repositorio que:
- Calcula dinámicamente la raíz del proyecto usando
Path(__file__).resolve().parent - Inserta la raíz en
sys.pathantes de cualquier importación - Verifica la importación del módulo
viboy_core - Ejecuta un smoke-test instanciando
PyNativeCorey llamando acore.add(2, 2) - Devuelve códigos de salida correctos (0=OK, 1=FAIL) para integración en pipelines
Componentes creados/modificados
test_build.py(nuevo, raíz): Runner principal con manejo robusto de sys.pathtests/temp/test_build.py(modificado): Wrapper de compatibilidad que redirige al runner de la raíz mediantesubprocess
Decisiones de diseño
- Ubicación en raíz: El script debe estar en la raíz para que
sys.pathse configure correctamente de forma natural. - Wrapper en tests/temp/: Se mantiene compatibilidad con scripts que puedan llamar al test desde subdirectorios, redirigiendo mediante
subprocessen lugar de manipularsys.pathmúltiples veces. - Salida estructurada: El script imprime información de diagnóstico (versión de Python, path) y mensajes claros de éxito/error para facilitar debugging.
Archivos Afectados
test_build.py(nuevo) - Runner principal en raíz con manejo de sys.pathtests/temp/test_build.py(modificado) - Convertido en wrapper que redirige al runner de la raíz
Tests y Verificación
Validación del pipeline de compilación y verificación del checkpoint:
Comando ejecutado:
python3 test_build.py
Resultado:
============================================================
Test de Compilación - Viboy Color Core (C++/Cython)
============================================================
[1/3] Importando modulo 'viboy_core'...
[OK] Modulo importado correctamente
[test_build] Python: 3.12.3
[test_build] sys.path[0]: /media/fabini/8CD1-4C30/ViboyColor
[2/3] Creando instancia de PyNativeCore...
[OK] Instancia creada correctamente
[3/3] Ejecutando prueba: core.add(2, 2)...
[OK] Resultado: 4
============================================================
[EXITO] El pipeline de compilacion funciona correctamente
============================================================
El nucleo C++/Cython esta listo para la Fase 2.
Exit code: 0 (éxito)
Validación de módulo compilado C++:
El test verifica que el módulo viboy_core compilado desde C++/Cython puede:
- Importarse correctamente en Python
- Instanciarse (
PyNativeCore()) - Ejecutar código C++ a través del wrapper Cython (
core.add(2, 2) == 4)
Exit codes:
- Build: 0 (compilación exitosa)
- test_build.py: 0 (checkpoint OK)
- pytest: 1 (10 failed, 13 passed - tests pre-existentes, no relacionados con este step)
Fuentes Consultadas
- Python Documentation: sys.path - Mecanismo de búsqueda de módulos
- Python Documentation: pathlib.Path - Manipulación de rutas multiplataforma
Integridad Educativa
Lo que Entiendo Ahora
- sys.path y resolución de módulos: Python agrega el directorio del script ejecutado a sys.path[0], lo que puede causar problemas si el módulo está en otro directorio (como la raíz del proyecto).
- Path absoluto vs relativo: Usar
Path(__file__).resolve().parentcalcula la ubicación absoluta del script independientemente del directorio de trabajo actual. - Pipeline plumbing: Scripts de infraestructura como test_build.py son críticos para mantener la salud del proyecto y deben ser robustos y predecibles.
Lo que Falta Confirmar
- N/A - Este step es de infraestructura, no de emulación.
Hipótesis y Suposiciones
Asumimos que el módulo viboy_core siempre se compila en la raíz del proyecto (lo cual es cierto según setup.py que usa build_ext --inplace).
Próximos Pasos
- [ ] Investigar y corregir los 10 tests fallantes de pytest (principalmente relacionados con conteo de M-Cycles en CPU)
- [ ] Continuar con el flujo de desarrollo ahora que el checkpoint está operativo