Skip to content

English · Español

Fase 06 — Python para ingeniería de IA

Requiere: 05 — Probabilidad y teoría de la información Enseña: numpy · strides · broadcasting · views · vectorization · profiling Salta a cualquier capítulo desde el índice de referencia de fases.

Mapa del capítulo

Pre-escrita según LYNX_CORTEX_ADDENDUM.md §A12. Esta entrada de fase existe antes de que Borja empiece su estudio. Los enunciados de teoría y de laboratorio son borradores estables; las soluciones se redactan justo a tiempo en la apertura de la fase.

La capa Python+NumPy donde viven el 80% de los bugs futuros. No es un repaso de Python, es ingeniería numérica: strides, broadcasting, vectorización, perfilado, semilla. Cuando esto sea reflejo, el código del resto del currículo será limpio.


Objetivo

Interiorizar la semántica de referencias de Python y el modelo de memoria de NumPy con la profundidad suficiente para que Borja pueda predecir, a mano, shape, dtype y el wall-clock aproximado de cualquier expresión tensorial que escriba en las Fases 7–22. Esta fase es el sustrato de ingeniería para todo lo numérico que viene después. Ligera en matemáticas, intensa en medición y sorpresa.

Al cierre de la fase, Borja posee:

  • Una utilidad seed_everything(seed) que usa cada experimento posterior.
  • Una utilidad get_logger(name) que emite logs JSON estructurados.
  • Tres pequeños experimentos que demuestran (no solo enuncian) las tres trampas que todo ingeniero de IA acaba encontrando: vistas compartidas, bugs de shape por broadcasting, sobrecoste del bucle Python.

Orden de lectura

  1. theory/00-motivation.md — por qué esta fase no es negociable.
  2. theory/01-references-mutation-gil.md — semántica de referencias de Python, mitos del GIL y cómo muerden al código numérico.
  3. theory/02-strides-and-broadcasting.md — el modelo de memoria de NumPy formalizado: shape, strides, vistas frente a copias, reglas de broadcasting.
  4. theory/03-vectorization-and-profiling.md — el modelo de coste de Python+NumPy, con los cuatro profilers (cProfile, line_profiler, memory_profiler, py-spy) y cuándo cada uno se gana el sueldo.
  5. lab/00-environment-and-utilities.md — escribir seed_everything y get_logger.
  6. lab/01-strides-and-views.md — producir bugs intencionales de aliasing por vistas; medir el coste de la transpuesta frente a la transpuesta contigua.
  7. lab/02-broadcasting-trap.md — reproducir el bug (N,) * (N,1) → (N,N) y arreglarlo.
  8. lab/03-vectorization-budget.md — medir el ratio de aceleración bucle-Python frente a NumPy a lo largo de varios tamaños.

solutions/ está vacío durante la pre-escritura — se rellena en la apertura de fase, una vez que son visibles las decisiones de API de la fase previa de Borja.

Definición de hecho (DoD)

Ver PHASE_06_PLAN.md §6. En resumen:

  • src/utils/seeding.py y src/utils/logging.py existen, pasan mypy --strict y tienen tests.
  • Tres directorios de experimento con manifest.json y el plot/notas que indica el laboratorio.
  • /quiz 06 ≥ 70%: predecir shapes de broadcasting, explicar OWNDATA, identificar cuándo np.asarray copia.

Lo que esta fase intencionalmente NO cubre

  • Autograd. La Fase 7 lo construye desde cero sobre este sustrato de ingeniería.
  • Tensores como nodos de grafo. Territorio de Fase ⅞.
  • Pandas, polars, scikit-learn, scipy. Ninguno se importa en la ruta principal del currículo; si un caso límite los necesita, entran en la fase correspondiente.
  • Extensiones C, Cython, Numba. Fuera de alcance. NumPy basta. (Triton en Fase 24, mucho más tarde.)
  • Asyncio. No relevante hasta la pila de servicio de la Fase 33.
  • Inmersión profunda en tipado. mypy --strict está activado; explicar TypeVar y Protocol queda para cuando realmente los necesitemos (probablemente Fase 17+ con esquemas de configuración).

El alcance de la Fase 6 es el modelo de memoria y de coste de Python+NumPy, más las dos utilidades transversales (seeding, logging) que importa cada fase posterior. Nada más.

Lecturas recomendadas

Opcional — enriquece pero no es necesario para aprobar la fase.