⚠️ Clean-Room / Educativo

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)

Fecha: 2026-01-02 Step ID: 0415 Estado: VERIFIED

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.path antes de cualquier importación
  • Verifica la importación del módulo viboy_core
  • Ejecuta un smoke-test instanciando PyNativeCore y llamando a core.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.path
  • tests/temp/test_build.py (modificado): Wrapper de compatibilidad que redirige al runner de la raíz mediante subprocess

Decisiones de diseño

  • Ubicación en raíz: El script debe estar en la raíz para que sys.path se configure correctamente de forma natural.
  • Wrapper en tests/temp/: Se mantiene compatibilidad con scripts que puedan llamar al test desde subdirectorios, redirigiendo mediante subprocess en lugar de manipular sys.path mú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.path
  • tests/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().parent calcula 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