# Simplot independiente: estado comprobado

Verificación adicional del lector compartido tras las barras de error: make -C slex/d2datdinc check aprobó probar, varios y pruebas/compara-din. pruebas/compara-dat informó 181 iguales, 0 distintos y 1 sin fuente: siru/corpus/corpus/lolipmp/psicro_r_srk-2-simplot/simplot-entrada-WPClZ4/entrada.dat. Por ese archivo generado sin fuente, la batería general de slex no queda completamente aprobada. No se eliminó ni modificó ese artefacto. La prueba específica del lector para los nuevos límites está incluida en las 74 comprobaciones de barras-error.

Actualización del 09/10/2026, barras de error: **24 archivos, 695 comprobaciones, PASS** en make check. Las 74 nuevas de tests/barras-error.t cubren lectura PARAPLOT, validación del DAT, X/Y/XY, líneas y punto único, intervalos inválidos, unidades incompatibles, tempC -> tempF de centros y extremos, ejes logarítmicos/invertidos, PNG/EPS/PDF/SVG, paneles, transporte por stdin y conservación del dato por Siru. El corpus barras-error suministra límites absolutos: Simplot no calcula estadísticas ni incertidumbres. Manual PDF regenerado (43 páginas), sin referencias pendientes ni desbordamientos. No se instalaron ni publicaron paquetes nuevos. Los registros siguientes describen estados anteriores.

Verificación actual (09/10/2026, manual integral): **22 archivos, 600 comprobaciones, PASS** en `make check`. Incluye 26 comprobaciones de los ejemplos de `doc/manual/`: RESULTADOS con conversión 20 tempC → 68 tempF, PARAPLOT y panel, CSV/calendario UTC, bloques, logaritmos, eje invertido, firmas PNG/EPS/PDF/SVG, repetición del guion con Gnuplot, pares de un único estado, API por lotes y conservación de la entrada. Se agregan siete comprobaciones de instalación del manual y exclusión de auxiliares LaTeX. `make distcheck` pasa con instalación, dibujos y desinstalación en PREFIX y DESTDIR temporales; mantiene las siete omisiones explícitas por proyectos vecinos ausentes. El manual PDF tiene 35 páginas, tres figuras producidas por sus ejemplos y bibliografía oficial; compila sin referencias pendientes ni desbordamientos, con revisión visual de páginas representativas. No se modificaron motores, paquetes publicados ni servidor. Las verificaciones que siguen corresponden a etapas anteriores.

Publicación posterior (09/10/2026): entrega -3 construida desde r2717, publicada como inestable y descargada por HTTPS; los cinco artefactos coinciden byte a byte con sus originales. La construcción Ubuntu 22.04 pasó la batería de 567 comprobaciones (siete omitidas por ausencia de proyectos vecinos), y el DEB instalado produjo cuatro PNG y cargó la API desde `/usr/share/perl5`. No se instaló en el anfitrión. Pendiente publicar las dependencias mínimas slex 1.0-25 y Tabular2 2.0-16 para completar la instalación desde el servidor; véase [PAQUETES.md](PAQUETES.md). Los párrafos siguientes conservan las verificaciones anteriores a la publicación.

Antecedente (09/10/2026, con transferencia de paquetes): **21 archivos, 567 comprobaciones, PASS** en `make check`. Las 25 de `tests/paquetes.t` cubren selección de versión/proyecto, eliminación de duplicados, MD5, opciones, modo sin conexión y transferencia de ida y vuelta con SummaPack real sobre un servidor temporal local. Los artefactos de esa prueba son sintéticos y no se instalan. `make distcheck` también pasa: en su copia sin proyectos vecinos se omiten explícitamente dos comparaciones con Siru y cinco comprobaciones de integración con SummaPack. No hubo transferencias al servidor real.

`make bajar PRUEBA=1 PARA=deb` muestra correctamente la orden sin conexión. `make subir PRUEBA=1` se detiene porque aún falta el manifiesto construido `simplot_2017.0.2.R1017-3.summa` en `subir.lista`; exige preparar los artefactos actuales, sin recurrir a versiones antiguas.

Antecedente (09/10/2026, con desinstalación registrada): **20 archivos, 542 comprobaciones, PASS** en `make check`. `tests/uninstall.t` agrega 36 comprobaciones de PREFIX/DESTDIR, reinstalación, traslado del staging, archivos ajenos/modificados, enlaces y manifiestos inválidos. No se instalaron archivos en el sistema ni se generaron paquetes distribuibles.

`make distcheck` de esa etapa: **PASS** desde un tar temporal de las fuentes, sin SVN. Ejecuta la batería de 542 comprobaciones (dos comparaciones cruzadas con Siru se omiten explícitamente porque no se copia ese proyecto), instala en un prefijo con espacios, produce tres proyecciones y un panel PNG, desinstala sin restos y repite el ciclo con `PREFIX=/usr` y DESTDIR temporal. Conserva el temporal si falla; al terminar correctamente retira solo su propio temporal. La prueba en el árbol anterior sí dispone de Siru vecino.

Antecedente (09/10/2026, tras integrar los documentos de share): **19 archivos, 506 comprobaciones, PASS**. Incluye las 44 de reentrancia por contexto, 36 de limpieza historica, 37 de instalacion temporal y 30 del ejemplo documental/enlaces. `tests/documentacion.t` extrae los datos y el DS de [GUIA-USO.md](GUIA-USO.md), ejecuta Simplot y verifica dos graficos y un panel PNG, preservando las entradas. No se generaron paquetes nuevos ni se instalo en el sistema. Los resultados siguientes son antecedentes de etapas anteriores.

Verificación posterior de `make install` (9 de octubre de 2026): **16 archivos, 383 pruebas, PASS**, tanto en el árbol como en una exportación SVN limpia. `tests/install.t` agrega 24 comprobaciones: prefijo sin privilegios/con espacios, ejecutable y alias, módulos propios frente a una copia ajena, corpus/documentación, exclusión de estado web/SVN, enlaces de imágenes, reinstalación, DESTDIR, generación de PNG y rechazo de prefijos relativos. No se instaló esta modificación en `/usr` ni `/usr/local`.

El empaquetado de verificación 2017.0.2.R1017-3 terminó correctamente usando `make install PREFIX=/usr DESTDIR=...`. También se ejecutó la receta FUENTES_INSTALAR del manifiesto en un prefijo temporal. Esto comprueba el recorrido local de fuentes y paquetes; no implica publicar ni probar una descarga desde el servidor.

Resultado anterior, previo a agregar el instalador:

Verificación del 9 de octubre de 2026: **15 archivos, 359 pruebas, PASS**. Incluye las 33 comprobaciones de `tests/pares.t`, OUTPUTS sin PARAPLOT, modelo `pares`, selección, paginación y errores. Slex: 117 pruebas PASS y 5 de reentrancia (67 entradas, 65 válidas, 260 lecturas en cuatro hilos). Tabular2: 12 suites PASS. Estos resultados corresponden al árbol; la verificación de paquetes se registra en `PAQUETES.md`.

Ampliación: `tests/resultados-v2.t` verifica RESULTADOS/UNIDADES con Tabular2 y libunidades/GNU units (`tempC`, `tempF`, rechazo de coulomb como temperatura); `tests/psicro-punto.t` verifica 24 condiciones del estado único sin tiempo, pares TBH/WWW y TEMP/PV, DS/DAT, nombres/índices y v1/v2. El PARAPLOT de ese corpus es añadido: el original `psicro_5.ds` no lo contiene. V2 dibuja un marcador si una serie `lineas` tiene una sola fila; en v1 se usa `puntos` explícito. No se recalcula la solución psicrométrica.

Verificación del 8 de octubre de 2026 sobre las fuentes de `siru/simplot`, sin requerir SCEPTRE. El antiguo `siru/Plot` fue revisado y trasladado con su historia a `simplot/viejos/plot`; no se activa su código. No se modificaron las páginas del servidor.

## Formas de indicar los gráficos

| Entrada | Caso comprobado | Resultado |
|---|---|---|
| LISTA | Sección `RESULTADOS` de un `.ds`, con `TEMP, FLUJO` | PNG/EPS de las variables pedidas. |
| RESULTADOS (caso historico v1) | `TEMP(Temperatura medida,temperatura,C)` y otra variable en el renglón siguiente | Nombres de series y agrupamiento. No trasladar C a v2 como Celsius: corresponde tempC. |
| PARAPLOT manual | `archivo`, metadatos, `lineas`, `puntos`, `funcion`, `mostrarjuntos`, `nomostrar` | Gráficos individuales y combinados. |
| DS/DS2 y PARAPLOT mediante slex | `d2datdinc` produce `GLOBAL.simplot` en el DAT | Simplot consume el DAT incluso sin el DS original; Siru conserva la misma sección. |
| Modelo gráfico v2 | `SIMPLOT_VERSION=2`, DS directo o DAT sin DS | Fuentes, líneas/puntos, ejes y paneles; Siru conserva el objeto. |
| Backend v2 y Tabular2 | PNG/EPS/PDF/SVG, log/inversión, epoch local/UTC, bloques y CSV numérico | Firmas de imágenes válidas, 17 cifras, bloques separados y errores explícitos de dominio/referencia/unidad. |
| GRAFICOS y adicionales | Reemplazo de RESULTADOS, agregado explícito y `GRAFICOS_ADICIONALES` | Conservación de la tabla SIMULADO y de las órdenes adicionales. |
| Corpus histórico | Seis PARAPLOT, tres CAJ, datos experimentales y reruns | Se comprueba la presencia de las tablas requeridas en las órdenes de Gnuplot. |
| Colector recuperado de Plot | 29 columnas | 28 gráficos individuales y 14 paneles: 42 PNG. |
| Selección `selec` | Límites inclusivos, filas desordenadas y entrada `.txt` | Selección correcta en archivo nuevo; entrada original intacta. |
| Respuestas interactivas | `-i`, índices, nombres entre comillas, primera columna o índice de fila como abscisa | PNG/EPS de las selecciones, desde `.paraplot` y `.simul`. |
| Combinaciones interactivas | Dos gráficos, luego multiplot y superposición; repetición de ambas operaciones | Conserva cada combinación con su propio número; las superposiciones incluyen las tres series seleccionadas. |
| Sin instrucciones, tabla numérica | Cuatro columnas separadas por espacios, sin encabezado | Tres gráficos: columnas 2, 3 y 4 contra la 1, sin conversión de unidades. |
| Sin instrucciones, `.simul` con metadatos | `examples/temperatura.simul` | Agrupamiento por magnitud y unidad, más gráfico combinado; no es necesariamente un archivo por columna. |
| Cabecera simple comentada o sin comentar | `T A B` y `# T A B` | Nombres conservados y mismo agrupamiento automático; no se advierte por unidades/magnitudes ausentes. |
| RESULTADOS sin magnitudes | A y B, con o sin leyendas, sin magnitudes/unidades heredadas | Un gráfico con ambas series; se mantienen separadas si sus magnitudes o unidades difieren. |

En la ruta v1 de tabla numérica sin metadatos los nombres son `COL1`, `COL2`, etc. El lector no convierte la primera fila en nombres ni presume que la primera columna representa segundos. Se rechazan filas de ancho distinto, texto entre los datos y tablas de una sola columna. Se conservan los lectores históricos para encabezados Simusol/Siru y `#VARS`. V2 delega los formatos a Tabular2: se probó CSV numérico, no categorías ni toda variante de CSV.

## Cómo repetir las pruebas

Dependencias de ejecución en Debian/Ubuntu:

```sh
sudo apt install perl gnuplot libpath-class-perl libcapture-tiny-perl d2datdinc tabular
cd ~/svn/siru/simplot
prove -v tests/*.t
```

Se requieren `d2datdinc >= 1.0-25` y `tabular >= 2.0-16`. Desde el árbol puede compilarse el lector hermano con `make -C ../slex/d2datdinc -j2 d2datdinc`, que Simplot encuentra sin instalarlo; también usa `../tabular2/src/interpola` compilado. Véanse [DAT-PARAPLOT.md](DAT-PARAPLOT.md) y [DAT-SIMPLOT-V2.md](DAT-SIMPLOT-V2.md).

Las pruebas requieren además `prove` y `Test::More` (del entorno Perl) y `timeout` (coreutils). Crean y eliminan sus propios temporales, usan Gnuplot real, no instalan en el sistema, no requieren pantalla y no cierran ventanas ajenas. El instalador se prueba en prefijos temporales. La comparación cruzada con Siru se omite explícitamente si no está su árbol hermano.

Las dependencias del fuente se declaran en `simplot.summa` (`BUILDDEPENDS`), que genera `debian/control` en la copia de construcción: debhelper-compat 13, Perl, make, d2datdinc >= 1.0-25, tabular >= 2.0-16, Path::Class, Capture::Tiny, Gnuplot (puede ser gnuplot-nox) y coreutils. El empaquetado no usa Makefile.PL ni Module::Install. `hacer-pkg` comprueba el control generado; las pruebas de los paquetes y las 14 comprobaciones de instalación limpia se registran en [PAQUETES.md](PAQUETES.md).

| Archivo | Cobertura |
|---|---|
| `tests/independiente.t` | 50 comprobaciones: carga con PATH vacío, PNG/EPS completos al retornar, modo clasificado, `-noclas`, `-ncgf`, ausencia de X11 y error del motor. |
| `tests/lenguajes.t` | 11 escenarios con subpruebas: los lenguajes de la tabla, interacción, EOF, combinaciones repetidas y firmas PNG. |
| `tests/tabla-simple.t` | 13 comprobaciones del lector numérico y derivación de cabeceras al lector de metadatos. |
| `tests/corpus.t` | 9 escenarios históricos: PARAPLOT, CAJ, funciones, mediciones y reruns. |
| `tests/dato.t` | 15 comprobaciones del contrato, lectura independiente del DAT, adicionales, errores, comentarios y aislamiento entre documentos. |
| `tests/encabezados.t` | 26 comprobaciones de encabezados históricos, espaciado irregular y metadatos. |
| `tests/seleccion.t` | 6 comprobaciones básicas y 3 escenarios con subpruebas: cadena de filtros, ciclo y padre inexistente; verifica valores y conservación del original. |
| `tests/colector.t` | 5 comprobaciones del colector recuperado, incluidos los 42 PNG y la última columna. |
| `tests/ventanas.t` | 4 escenarios con interceptor de killall: ejecución normal, -nokill, -kill y ambos juntos; no cierra ventanas reales. |
| `tests/agrupamiento.t` | 10 escenarios: cabecera simple/comentada, modo automático, LISTA, leyendas, magnitudes y unidades; columnas, PNG y tablas originales intactas. |
| `tests/modelo.t` | 38 comprobaciones estructurales: tipos JSON estrictos, copia independiente, referencias, duplicados y rechazo de cálculos embebidos. |
| `tests/render-v2.t` | 69 comprobaciones: cuatro formatos reales, escalas, zona local/UTC, bloques, 17 cifras, CSV, DS/DAT/Siru, errores y ausencia de registros junto al documento de entrada. |
| `tests/resultados-v2.t` | 43 comprobaciones de RESULTADOS/UNIDADES, conversiones con GNU units y errores. |
| `tests/psicro-punto.t` | 24 comprobaciones de estado unico sin tiempo en v1/v2. |
| `tests/pares.t` | 33 comprobaciones de proyecciones, seleccion, paginacion y errores. |
| `tests/historicos.t` | 36 comprobaciones de modulos archivados, rutinas comentadas y depuracion. |
| `tests/reentrancia.t` | 44 comprobaciones de contextos, reentrada, concurrencia, errores y aislamiento v1. |
| `tests/install.t` | 37 comprobaciones del instalador y la API instalada, incluida la guia y documentos trasladados. |
| `tests/uninstall.t` | 36 comprobaciones de desinstalación registrada, conservación de archivos ajenos/modificados y validación de rutas. |
| `tests/paquetes.t` | 25 comprobaciones de transferencia delegada, selección de artefactos, integridad y servidor local; cinco requieren SummaPack vecino. |
| `tests/documentacion.t` | 30 comprobaciones del ejemplo extraido de la guia, PNG, entradas intactas y enlaces locales. |

Ejecución histórica inicial de v2: 12 archivos, 254 pruebas, PASS; entonces slex tenía 111 pruebas. Los totales actuales están al comienzo de este documento. La regresión previa de SD2 tenía 7 pruebas correctas; no se repitió ni modificó SD2 en esta etapa. Sus capacidades no quedan automáticamente incorporadas a Simplot.

La prueba de reentrancia `slex/d2datdinc/varios`, recompilada con el traductor v2, también pasó sus 5 comprobaciones: 65 entradas (63 válidas y 2 errores previstos), orden directo e inverso y 252 lecturas en 4 hilos. Ninguna entrada termina el proceso y los resultados coinciden con la lectura aislada.

En esta máquina faltaba `Path::Class`: para verificar sin instalar paquetes del sistema se descargó `libpath-class-perl` con APT, se extrajo en un temporal y se agregó su `usr/share/perl5` a `PERL5LIB`. No se incluyó esa dependencia dentro del código del proyecto.

## Uso interactivo

Desde el directorio temporal del ejemplo del README:

```sh
perl -I"$simplot_fuentes/lib" "$simplot_fuentes/scripts/simplot.pl" \
     -nokill -i -sinventana temperatura.simul
```

Ingresar `1:2` para la columna 2 contra la 1, o `0:2` para usar el índice de fila. También acepta nombres, por ejemplo `'Tiempo':'Temperatura'`. ENTER termina la selección del archivo. Si se crearon varios gráficos, ofrece combinarlos en un cuadro o superponer sus series. Sin `-sinventana`, conserva la presentación en X11; para uso automático sin preguntas, usar `-graf=4`.

## Arreglos realizados

- Eliminada la búsqueda obligatoria de SCEPTRE al cargar los módulos.
- Declaradas las dependencias Perl que faltaban; X11 queda recomendado, no obligatorio para producir imágenes.
- Generación normal e interactiva con espera de Gnuplot y errores visibles; ya no se confunde el fin de Simplot con imágenes todavía pendientes.
- Corregido `-graf=4` para que no abra ventanas, incluidos los multiplots; agregado `-sinventana` para el diálogo.
- Corregidas las rutas relativas del modo interactivo y los nombres usados al escribir su guion.
- Separadas las combinaciones interactivas de las que venían definidas en el archivo; cada nueva combinación recibe un número distinto.
- Agregado lector específico para tablas puramente numéricas, sin inventar unidades.
- Unificada la lectura de DS y PARAPLOT mediante slex; definido el contrato DAT compartido con Siru.
- Unificada la inspección de metadatos del motor con el lector activo de encabezados; corregidas rutas de `arch_var` y selección sin sobrescribir entradas.
- Extraídos únicamente los apartados pertinentes del manual en `doc/manual-extraido/`; comparados Plot, SD2, Observable Plot y Plot2 en `doc/REVISION-GRAFICADORES.md`.

## Pendientes y límites

- V2 admite RESULTADOS/UNIDADES, pero todavía no funciones, filtros, arch_var y otras órdenes históricas. Véase el contrato exacto; no se omiten órdenes silenciosamente.
- Las conversiones de presentación están implementadas mediante Tabular2. Falta selector de bloque por nombre. Ejes temporales usan marcas básicas, no un calendario completo. Ventanas X11 v2 no fueron probadas automáticamente.
- El empaquetado se verifica aparte: véase `PAQUETES.md`. No se publica ni instala en el sistema anfitrión como parte de estas pruebas.
- Ampliar la cobertura de `.hashplot`, `.gra` antiguos y variantes de PARAPLOT. La auditoría adicional ejercitó diálogo con varios archivos y repetición de un `.gra` recién generado; no certifica todos los guiones históricos.
- Las dos diferencias detectadas tienen regresiones y están corregidas: cabecera simple comentada/sin comentar equivalente; RESULTADOS explícito sin magnitudes/unidades agrupa series, salvo metadatos heredados que las distingan. La generación automática sin RESULTADOS conserva sus gráficos separados. El tutorial histórico y la página de RESULTADOS se contradicen sobre este punto; aquí se especifica el comportamiento actual, sin cambiar las copias web.
- Una cabecera comentada se reconoce por su ancho respecto de la primera fila numérica. Un comentario común del mismo ancho puede ser ambiguo: preferir `#VARS` o metadatos Simusol/Siru. V2 ya prueba agrupamiento no consecutivo; falta ampliar las variantes históricas v1.
- El DAT v1 estructura órdenes y secciones, pero conserva el valor de cada orden como texto: aún no es un árbol tipado de series y transformaciones. Tampoco rebasa automáticamente rutas al guardar el DAT en otro directorio.
- Automatizar la comprobación de ventanas X11. Esta batería verifica los archivos y el diálogo sin ventanas.
- El cierre global fue retirado: `-nokill` es compatible e inocuo y `-kill` se rechaza con estado 2. Falta, si se necesita, un registro de procesos propios para cerrar únicamente ventanas de una ejecución.
- El empaquetado actual usa simplot.summa/hacer-pkg. Los instaladores y Makefile.PL históricos quedan fuera de ese recorrido.
- La revisión de ambos lectores está documentada; se usa `ArchSimulV.pm`, corregido, y no se activa la copia histórica `ArchSimul.pm`.
- Persisten auxiliares históricos como `NOSE.EXT` y registros en el directorio de trabajo. Usar un directorio de salida aislado, como muestra el README.

Los ejemplos y las páginas descargadas del sitio son documentación histórica, no una certificación de que cada sintaxis posible esté cubierta. La tabla anterior describe exactamente lo probado.
