siru: cambios
=============

Del más nuevo al más viejo. rNNNN identifica una revisión del repositorio siru. Este registro comienza con r2180; no reconstruye retrospectivamente los cambios anteriores, descritos en HECHO.md y en los documentos de cada motor.

2026-10-06 — cierre documental y paquetes 1.0-3 / 1.0-24

  * M4 inicial quedó versionado en r2444. M5 tiene sólo su contrato de primera entrega (r2451): interpolación de Euler y grilla de salida, antes de eventos; no se anuncia como código disponible.
  * debian/changelog, control y README: entrega siru 1.0-3 con d2datdinc >= 1.0-24 y Calcula >= 6.0-37. Incluye los módulos y manuales ya versionados, sin incorporar desarrollos pendientes de tabular2 ni nuevas colecciones del corpus.
  * El generador actual supera las 103 pruebas: las dos referencias antiguas de circuitoB ya fueron corregidas en el árbol. No se alteraron el paso ni la política adaptativa al empaquetar. Se conserva debajo el resultado histórico de la entrega r2444.
  * Verificación de entrega: regresión completa, 1388 comprobaciones en 43 archivos; paquete Siru, 331 en nueve archivos; SLEX, seis pruebas del lexer y probar/varios, sin fallos (las dos comparaciones externas al corpus se omiten en la copia de empaquetado). Los .deb extraídos en /tmp generan y ejecutan el oscilador Strang: 11 filas iguales a una recurrencia independiente. Lintian sin errores; conserva el aviso de falta de página de manual de d2datdinc. No se instalaron los paquetes.

2026-10-06 — GPU en línea: cuaderno, prueba y paquete

  * ejemplos/montecarlo-gpu/prueba-gpu.sh: detecta la placa (NVIDIA o AMD), instala el paquete de descarga de gcc de la misma versión que el gcc de la máquina, compila para el procesador y para la GPU, corre los dos con OMP_TARGET_OFFLOAD=MANDATORY (falla si no corre en la GPU) y compara la estadística; deja resultado-gpu.txt. Sale con 0 si la GPU da lo mismo, 1 si algo falla, 2 si no hay GPU.
  * cuaderno-gpu.ipynb (hacer-cuaderno.py, make cuaderno): un solo archivo para Kaggle o Colab, con los fuentes adentro. make paquete: el .tar.gz para una máquina alquilada.
  * INFORME-GPU.md, secciones 7 y 8; MANUAL.md 11 decies. Probado sin GPU (el script, el fallo con MANDATORY, la comparación, el cuaderno); no probado en una GPU real (r2449).

2026-10-06 — Un ejemplo para GPU: Montecarlo en lote

  * ejemplos/montecarlo-gpu: un rectificador de media onda (rectificador.d) simulado 100.000 veces con los componentes dentro de su tolerancia, por un programa en lote (montecarlo.c) que integra cada copia con el mismo trapecio que siru y Newton de 2x2. Un solo fuente, OpenMP: en los nucleos del procesador o, con -DGPU, en una GPU NVIDIA (gcc con nvptx, o nvc). Pedido del autor: un caso donde convenga una GPU (copias independientes, la misma cuenta, mucho trabajo por dato).
  * Medido sin GPU: 100.000 copias en 6,2 s con 16 hilos (72,5 s con uno); con siru, a 5,3 s por copia, serian unos 6 dias. La copia nominal da la curva de siru (6e-12). El camino -DGPU compila y da la misma estadistica en el procesador; en una GPU no se corrio (no hay una con CUDA en esta maquina). LEEME.md explica que GPU sirve: en doble precision, una de centro de datos.

2026-10-06 — Relajación de forma de onda: `siru-relaja`

  * bin/siru-relaja y Siru::Relajacion: un circuito .d partido en subcircuitos (bisección del grafo de ramas, o --particion), cada uno corrido por siru en su proceso, intercambiando las formas de onda de los nodos de frontera (fuentes EWR con TABLE, sondas JWR de cero) hasta converger, a la Jacobi; con --ventana, por ventanas que arrancan de los estados finales de la anterior. Pedido del autor; el porqué en calcula-6.0/PENDIENTE-iterativos.md, método 4.
  * Corpus: inventados/relaja-cadena.d (débilmente acoplada: 9 iteraciones) y relaja-diodos.d (no lineal: 18); con grilla-rc-10x10.d en cuatro partes y ventanas de 5, de 15 a 24 por ventana. Los tres dan la curva de la corrida entera (3e-9, 2e-9 y 6e-6).
  * tests/relajacion.t: la partición de una cadena y la curva contra la corrida entera, en dos ventanas. MANUAL.md 11 nonies, siru-relaja(1).

2026-10-06 — M4 inicial: composición SPLIT

  * Composicion y SPLIT: Lie–Trotter (1) y Strang (2), con dos mapas autónomos declarados exactos, paso fijo y confirmación transaccional del paso completo. Los estados intermedios no avanzan el reloj físico; duración y estados deben ser finitos. Los mapas de cada subflujo se evalúan simultáneamente.
  * Cadena .d/.ds y .din autosuficiente; sin SWIG ni cambios en Calcula. El descriptor conserva mapas, secuencia, estados, parámetros y salidas. Capacidades incompatibles se rechazan explícitamente; no se prueba matemáticamente la exactitud declarada de los mapas.
  * Corpus: oscilador Lie–Trotter/Strang y circuito LC con estado de carga. Pruebas de recurrencia, orden, aislamiento, diagnósticos y equivalencia fuente/din. 82 comprobaciones específicas; regresión completa: 1379 comprobaciones en 42 archivos con Calcula del árbol (antes de añadir dos comprobaciones adicionales de duración).
  * README, MANUAL, catálogo y plan distinguen este M4 inicial de sus extensiones pendientes. El Calcula instalado 6.0-35 falla en dos pruebas ajenas de tablas que pasan con el del árbol; no se instalaron paquetes ni se modificó el soporte de tablas.

2026-10-06 — r2371

  * Integrador: la historia/semilla del paso adaptativo doble ahora coincide con los dos medios pasos aceptados; el predictor extrapola con h solicitado / h anterior. Cambiar sesión, parámetros o estado invalida el predictor y actualiza las incógnitas, conservando la historia DC cuando corresponde.
  * Paso: migrado el conductor compartido RK/PGLM/ROS. Tiempo, historia, quiebres y contadores se confirman juntos; ramas de comparación/rescate aisladas para proveedores restaurables. Se conservan las políticas de convergencia, pero un timeout/EOF nuevo no puede quedar oculto por un SOLVER FAILURE anterior. Costos de consultas/descartes en el informe; la última integración no se presenta como suma de RERUN/CONTINUE.
  * ControlPaso e Historia: norma ponderada/controlador compartidos sin imponer un estimador universal; anillo de estados, derivadas disponibles, tiempos y pasos, dimensionable y separado de memoria GLM.
  * GLM v2: Euler, BDF2 efectivo/directo y AB2 admiten adaptación optativa desde .d/.ds y .din autosuficiente. Estimador conservador de orden de error 2, comparando con el arranque Euler; el arranque usa dos medios pasos Euler independientes. Rechazo sin avance, crecimiento máximo 2 y rearranque fuera de razón [0.2,2]. No habilita orden variable, listas ni topología; fallos de Calcula siguen siendo fatales. Se mantiene lectura de .din v1 fijo. Cuatro casos nuevos en corpus/corpus/GLM, sin regenerar resultados congelados.
  * ServiciosNumericos y EtapasROS: encapsulan campo EVAL/SENS1, Jacobiano reducido, LU y varios segundos miembros. Cachés ligadas a proveedor/modelo/topología/parámetros/t/y/h con 17 cifras; invalidación por cambio o fallo. ROS2 conserva fórmula, estimador y selector; no agrega protocolos a Calcula ni se presenta como motor DAE/disperso general.
  * Pruebas nuevas: paso_integrador.t, glm_adaptativo.t, glm_adaptativo_din.t y servicios_numericos.t. Verificación final: 1270 comprobaciones en 39 archivos, incluida la prueba AC incorporada por otra sesión, con Calcula real. También pasaron las 311 pruebas autónomas de debian/rules y la sintaxis de todos los módulos, la compilación C, las 99 pruebas actuales de d2datdinc/probar y los cinco tests de SLEX.
  * Documentación: README, MANUAL, CONTRATO_PASO, GLM_CONTRATO, ROS, PLAN_CAPACIDADES_MOTOR, CATALOGO_INTEGRADORES y README del corpus distinguen lo implementado de lo pendiente en M1–M3. M4–M8 no se dan por terminados. Cambios verificados desde el árbol; no se instala ni publica un paquete nuevo en este bloque.

2026-10-05 — r2277

  * corpus/nousamos: el `include` de los nueve circuitos apartados (los ocho `stiff` y `circuito-SERRORRARO_3.ds`) subía un nivel de más y salía del repositorio; `d2datdinc` no encontraba la biblioteca. Son tres niveles. Ahora los nueve se traducen. Con siru, probado en un temporal: `circuito-SERRORRARO_3.ds` corre (103 filas); los ocho `stiff` no arrancan, porque tienen una cosa del archivo sin traducir al sistema, como antes de que a `stiffloli.ds` —el que se mantiene— se lo corrigiera.

2026-10-05 — r2275

  * El corpus pasa a estar adentro del simulador: `corpus/` es `siru/corpus/` (`svn mv`, con su historia). Y `Simul/`, el simulador anterior, pasa a `siruviejo/`: sólo el directorio, sin renombrar ningún módulo ni programa (Simul 1 se sigue llamando así, y `Simusol::*` también); `siruviejo/perl` no se tocó.
  * Con eso cambiaron las rutas que los nombraban, en 1318 archivos más 28 a mano: los `include` de los circuitos del corpus (`../../../../slex/...`, un nivel más), las rutas absolutas de los `.dat` congelados y los `.gnu`, las menciones en documentos, comentarios y mensajes (`corpus/sceptre` es `siru/corpus/sceptre`, `Simul/LLAVES.md` es `siruviejo/LLAVES.md`), y las que el código arma a mano: los scripts del corpus toman la raíz del repositorio dos niveles arriba; las pruebas buscan el corpus en `../corpus` y el dato de ejemplo en `siruviejo/perl/data`; `tests/glm_matricial.t`, que copiaba un circuito cambiándole el `include` con la profundidad escrita a mano, ahora acepta cualquiera.
  * Cada ruta sigue nombrando lo mismo que nombraba, también las que apuntaban a algo que no existe: nueve circuitos de `corpus/nousamos` tienen el `include` roto desde antes (sube un nivel de más) y siguen igual. No se tocaron los ChangeLog, `corpus/borrados.txt`, los `.log` ni la frase que dice dónde estuvo el corpus hasta septiembre.
  * `corpus/convergencia`: la copia de trabajo de un circuito de afuera del repositorio va a `siru/corpus/corpus/fuera`, para quedar a la profundidad de los del corpus, y al enlazar la raíz se saltea `siru` en lugar de `corpus`.
  * Verificación: ensayado en una copia del árbol contra la copia sin mudar —las 1110 comprobaciones, `make check` de slex, `d2datdinc` sobre las 1141 fuentes (8421 archivos de salida: 7269 idénticos y 1152 iguales salvo la ruta), `clasificar` (322 `.tipo` idénticos), `compara-dat` y `compara-din` con el mismo resultado archivo por archivo, `corre_corpus`, `exactas`, `convergencia`, `regenera -n`, `example11` y el armado del paquete—. Después del commit, en el árbol: 1110 comprobaciones en 34 archivos, `probar` 72, y `compara-dat` y `compara-din` como antes.

2026-10-05 — r2270 a r2273

  * man/siru.1 y man/dat2din.1: las páginas de manual, escritas a mano como `tabular2/src/interpola.1`; las instala `debian/siru.manpages`. La de siru dice qué archivos acepta, las opciones, qué deja y dónde (con `--salida` la corrida, el informe y las tablas DC toman su nombre; el `.log` y los `.mdin` quedan al lado del circuito), el estado de salida y las variables de entorno (`SIRU_PASO_FACTOR`, `SIRU_VOLCAR`, `SIRU_DEPURA`). El paquete pasa a 1.0-2, porque el 1.0-1 ya estaba instalado (r2270, r2271, r2273).
  * `../instalar` (el del repositorio) arma e instala también a siru, después de slex (r2272). siru es el único que necesita algo del otro repositorio —`calcula`—, así que se arma siempre y se instala sólo si `calcula` está en la versión que pide el propio `.deb`. Si no está no es un error: los demás se instalan, y al final dice que siru quedó sin instalar, por qué, y las dos órdenes que faltan (`sudo ../calcula/instalar` y el `dpkg -i`). El estado de salida es 0, salvo que se haya pedido justamente `instalar siru` (3). `--que-hay` muestra también a `calcula` y quién lo necesita.
  * Probado sin ser root, con `dpkg -i`, `sudo` e `id` de mentira y los `.deb` verdaderos: sin `calcula`, con uno anterior al que pide, con el instalado, pidiendo `siru`, pidiendo `slex` y pidiendo uno que no existe.
  * MANUAL.md §1 y README.md: las dos maneras de instalarlo (r2273).

2026-10-05 — r2266 a r2269

  * Paquete Debian de siru: `debian/` y `hacer-deb`, como los de slex y mem_util. Es uno, `siru`, para todas las arquitecturas: `/usr/bin/siru` y `/usr/bin/dat2din`, los módulos `Siru::*` en `/usr/share/perl5`, los `.md` (sin comprimir) y el ejemplo. Depende de `d2datdinc (>= 1.0-10)`, que es el que escribe las claves `SIRU_*`, y de `calcula (>= 6.0-34)`; de Perl sólo usa módulos del núcleo. Versión 1.0-1 (r2267, r2268).
  * lib/Siru/Donde.pm: dónde están `d2datdinc`, su tabla y su biblioteca. Desde el árbol de fuentes, los de `siru/slex/d2datdinc`, con `-c` y `-b`, como antes; instalado, el `d2datdinc` del `PATH` —que ya sabe dónde están los suyos— y los catálogos `glm.json` y `pglm.json` de la biblioteca que lo acompaña (`PREFIJO/share/slex/biblioteca`). Lo decide por dónde está el módulo. `Siru::Preparador::_d2datdinc`, `Siru::CatalogoGLM` y `Siru::PGLM` lo usan; antes los tres armaban la ruta relativa al árbol y siru sólo andaba desde ahí (r2266).
  * tests/donde.t: 9 comprobaciones; lo instalado se imita con un directorio temporal, sin `d2datdinc` ni `calcula`.
  * Al armar el paquete se mira que todos los programas y módulos compilen y se corren las seis pruebas que no necesitan nada de afuera (234 comprobaciones). Las demás siguen siendo `prove tests/` desde el árbol.
  * Verificación: 1110 comprobaciones en 34 archivos desde el árbol. El paquete, extraído en un temporal junto con el `d2datdinc` 1.0-10 (sin instalar: hace falta ser root), da la misma corrida que el siru del árbol en 13 circuitos —`.d`, `.ds`, las claves de antes, capacidad variable, llaves con lazo y con corte, GLM, IMEX, ROS, sensibilidad DC y convolución—, sobre un `.dat`, y `dat2din` los mismos archivos.
  * MANUAL.md §1 y §2 y README.md: las dos maneras de tenerlo, instalado o desde el árbol (r2269).

2026-10-05 — r2264

  * Simul2 pasa a llamarse siru, como ya se llamaba el ejecutable. El directorio `Simul2/` es `siru/`; los módulos `Simul2::X` son `Siru::X`, en `lib/Siru/`; el informe `NOMBRE.simul2` es `NOMBRE.informe` (no `NOMBRE.siru`: `.siru` es la extensión de las bibliotecas y el informe las hubiera pisado); las claves `SIMUL2_PASO`, `SIMUL2_PASO_MIN`, `SIMUL2_PASO_MAX`, `SIMUL2_ADAPT`, `SIMUL2_ABSOLUTO`, `SIMUL2_RELATIVO`, `SIMUL2_ORDEN_ERROR` y `SIMUL2_COMPRESION_*` son `SIRU_*`, y los controles `SIMUL2 ADAPTIVE STEP`, `SIMUL2 ABSOLUTE TOLERANCE`, `SIMUL2 RELATIVE TOLERANCE` y `SIMUL2 ERROR ORDER` de un `.d` son `SIRU ...`. Los mensajes, la documentación y el registro (`siru: resultado: ...` en `NOMBRE.log`) dicen siru. Las entradas de más abajo conservan los nombres que valían cuando se escribieron.
  * Los nombres de antes de las claves se siguen aceptando. `d2datdinc` los convierte al leer un `.d`, un `.ds` o un `.dat`, y con `-v` lo avisa; `Siru::DesdeDat::claves_de_antes` hace lo mismo con el `.dat` que lee el Perl (`Siru::Circuito::_dato`, `Siru::DesdeDat::leer`). Si un dato trae los dos nombres vale el de ahora.
  * tests/nombres_de_antes.t: 14 comprobaciones. El circuito con las claves viejas (`slex/d2datdinc/pruebas/nombres-de-antes.ds`) da la misma corrida que con las de ahora, con el paso que dice la clave; y un `.dat` con las claves viejas, también.
  * En el corpus cambió el texto de los archivos generados (`.simul`, `.mdin`, `-Sceptre`, `.tipo`, `.dat`, `SCEPTRE.md`), sin regenerar nada: el campo `simul2` de los `.tipo` es `siru`, y las columnas `X_simul2` de los `-Sceptre`, `X_siru`. No se tocaron los `.log`, los ChangeLog ni `Simul/perl`.
  * Verificación de r2264: 1101 comprobaciones en 33 archivos; las 1087 de antes, con el mismo resultado. Antes de aplicarlo se ensayó en una copia del árbol: `d2datdinc` sobre las 1139 fuentes versionadas da lo mismo salvo el nombre (8405 archivos de salida) y `clasificar` también (322 `.tipo`).

2026-10-04 — r2180

  * PLAN_CAPACIDADES_MOTOR.md: plan de ampliación por capacidades del motor, con un método mínimo de verificación por etapa, antes de ampliar los catálogos. Define responsabilidades de Simul2, Calcula y libdin, compatibilidad del .din y criterios de cierre.
  * lib/Simul2/Paso.pm: primer bloque de M1. Contrato para preparar, intentar, aceptar, descartar y reiniciar pasos; copias aisladas del estado confirmado y del candidato; estadísticas que conservan el costo de los intentos descartados.
  * Proveedores: política independiente o restaurable con respaldo y restauración explícitos. Un fallo al guardar o restaurar bloquea la transacción; no se permite reutilizar un proveedor cuyo estado no se pudo recuperar.
  * lib/Simul2/IntegradorGLM.pm: primer conductor migrado. Tiempo, anillo físico, memoria GLM, quiebres pendientes y rearranques se confirman juntos después de validar el resultado. Conserva fórmulas, IDs, paso fijo, último paso desigual y tratamiento de quiebres.
  * tests/paso.t, tests/paso_glm.t y tests/paso_calcula.t: 106 comprobaciones nuevas de aislamiento, aceptación, descarte, fallos, memoria y quiebres. La prueba con Calcula real verifica que las semillas explícitas y el límite ITER de una petición no contaminan la siguiente, aun después de fallar.
  * Verificación de r2180: 249 comprobaciones en el grupo enfocado y 1087 en 32 archivos de la suite completa. Las 106 pruebas nuevas se repitieron antes del commit y pasaron.
  * CONTRATO_PASO.md: inventario de interfaces, contrato implementado, políticas de proveedores, pruebas y continuación. README.md, GLM_CONTRATO.md y PLAN_MOTORES_IMEX.md enlazan el plan y registran el alcance real del primer bloque.
  * Pendiente: completar M1 migrando el conductor compartido por RK/PGLM/ROS y sus servicios comunes. Este cambio no habilita adaptación GLM, listas mixtas ni nuevas capacidades de topología; no modifica Calcula ni libdin.
