Skip to content

gains: la verdad de una ventana, con su estrato y su cierre - #1158

Merged
github-actions[bot] merged 3 commits into
developfrom
feat/gains
Nov 8, 2026
Merged

github-actions[bot] merged 3 commits into
developfrom
feat/gains

Conversation

@frapercan

Copy link
Copy Markdown
Owner

La tabla que lleva la verdad, así que lo que importa son las dos formas en que podría dejar de ser una copia de ella en silencio.

La población

queries excluye una proteína sin secuencia guardada, porque el FASTA exportado la excluye y las filas de entrenamiento tienen que ser sobre la población puntuada. Así que una ganancia de una proteína fuera de ese conjunto sería una ganancia de una consulta que el cargador no conoce, y las dos tablas discreparían sobre quiénes son las consultas sin que ninguna esté mal por su cuenta.

El escritor calcula la población una vez y rehúsa una ganancia fuera de ella, en vez de descartarla. Descartar haría gains silenciosamente más pequeña que la verdad que copia, y un recuento de filas es lo único contra lo que un lector podría compararla.

Medido sobre las 65 admisibles: cero proteínas delta sin secuencia. El guarda no cambia nada hoy y lo dirá cuando eso deje de ser verdad. La misma forma cubre un término ganado que el eje no puede nombrar.

El cierre

Derivado del perfil en un sitio. projected quiere decir que la ganancia se expresa en el pivote y as_closed en el grafo de cada extremo, y la misma ventana bajo dos cierres son dos verdades distintas. Un perfil sin cierre declarado se rehúsa y no se adivina, y una prueba afirma que todos los valores de TRUTH_PROFILES tienen uno: así, añadir un perfil obliga a decir en qué grafo cierra en el momento en que se declara y no al correr.

La forma, medida antes del código

9.596.563 filas sobre esas 65 ventanas, la mayor 691.553, la media 147.639. Seis columnas cortas a ese recuento es el único sitio de este dataset donde construir una tupla por fila dolería: 9,6 millones de objetos con 58 millones de punteros.

Así que las columnas son seis listas paralelas a las que se añade por ventana, y el orden es estable por construcción y no por un sort final: ventanas en orden, estratos en el suyo declarado, consultas ordenadas y términos ordenados.

Y la población de queries se calcula una vez para las dos tablas, por lo mismo que los hechos de la ventana se leen una vez.

Pruebas

12 nuevas. Tres antiguas se movieron porque su sujeto se implementó: el ejemplo de «tabla declarada y sin escribir» ya no puede ser gains y pasa a query_state. Una prueba cuyo sujeto se implementa tiene que moverse o deja de probar la negativa.

Suite: 6398 pasan, 1 falla (test_settings, el ruido conocido).

La tabla que lleva la verdad, asi que lo que importa son las dos formas en que
podria dejar de ser una copia de ella en silencio.

LA POBLACION. queries excluye una proteina sin secuencia guardada, porque el
FASTA exportado la excluye y las filas de entrenamiento tienen que ser sobre la
poblacion puntuada. Asi que una ganancia de una proteina fuera de ese conjunto
seria una ganancia de una consulta que el cargador no conoce, y las dos tablas
discreparian sobre quienes son las consultas SIN QUE NINGUNA ESTE MAL POR SU
CUENTA. El escritor calcula la poblacion una vez y REHUSA una ganancia fuera de
ella, en vez de descartarla: descartar haria gains silenciosamente mas pequena
que la verdad que copia, y un recuento de filas es lo unico contra lo que un
lector podria compararla. Medido sobre las 65 admisibles: CERO proteinas delta
sin secuencia, asi que el guarda no cambia nada hoy y lo dira cuando eso deje
de ser verdad. La misma forma cubre un termino ganado que el eje no puede
nombrar: el cargador agrupa por aspecto, asi que es una fila que no puede
colocar.

EL CIERRE, derivado del perfil en UN sitio. projected quiere decir que la
ganancia se expresa en el pivote y as_closed en el grafo de cada extremo, y la
misma ventana bajo dos cierres son dos verdades distintas. Un perfil sin cierre
declarado se rehusa y no se adivina, y una prueba afirma que todos los valores
de TRUTH_PROFILES tienen uno, para que anadir un perfil obligue a decir en que
grafo cierra en el momento en que se declara y no al correr.

LA FORMA, medida antes de escribir el codigo: 9.596.563 filas sobre esas 65
ventanas, la mayor 691.553 y la media 147.639. Seis columnas cortas a ese
recuento es el unico sitio de este dataset donde construir una tupla por fila
dolería: 9,6 millones de objetos con 58 millones de punteros. Asi que las
columnas son seis listas paralelas a las que se anade por ventana, y el orden
es estable POR CONSTRUCCION y no por un sort final: ventanas en orden, estratos
en el suyo declarado, consultas ordenadas y terminos ordenados.

Y la poblacion de queries se calcula UNA vez para las dos tablas, por lo mismo
que los hechos de la ventana se leen una vez: dos calculos son dos
oportunidades de que las tablas de un lote sean sobre poblaciones distintas.

Tres pruebas antiguas se movieron porque su sujeto se implemento: el ejemplo de
"tabla declarada y sin escribir" ya no puede ser gains y pasa a query_state.
Una prueba cuyo sujeto se implementa tiene que moverse o deja de probar la
negativa.
@github-actions
github-actions Bot enabled auto-merge (squash) November 8, 2026 06:47
@frapercan
frapercan disabled auto-merge November 8, 2026 06:48
El sobremesa lo encontro leyendo el ADR que un PR anterior de este mismo
proyecto habia escrito, y que decia exactamente esto:

  "closure toma dos valores, pivot y native, y es DERIVADO [...] El valor sale
  de comparar los dos nativos de la ventana contra su pivote [...] NO es
  truth_profile."

Mi primera version tenia _CLOSURE_OF_PROFILE mapeando projected a pivot y
as_closed a native, que es justo lo prohibido. Y la prueba recorria los valores
de TRUTH_PROFILES, asi que no podia verlo: probaba la aritmetica del mapa, no
la pregunta.

LA PRUEBA DE QUE ESTA MAL ESTA EN LA BASE. Las gemelas (A) y (B) del par
160->177 son las DOS projected y se distinguen solo por sus nativos, asi que
con el mapa la (B), e84dfec8, se habria escrito como "pivot". El laboratorio
habia cometido el mismo error un dia antes y lo habia retirado.

Ahora se deriva comparando los dos nativos contra el pivote y contra la
ontologia del corpus de cada extremo, como ya hace el inventario de ventanas:
pivot si los dos nativos son el pivote, native si cada uno es el snapshot de su
extremo, y cualquier otra combinacion se REHUSA en vez de nombrarse. Los hechos
de la ventana llevan ahora los dos snapshots de los extremos, leidos de las
mismas filas de annotation_set de las que ya salian las versiones, asi que no
cuesta ninguna consulta mas.

Y la prueba recorre combinaciones de NATIVOS. La que importa afirma que dos
ventanas projected pueden tener cierres DISTINTOS, que es la propiedad que el
mapa hacia imposible de expresar.

Las 65 de hoy son todas (A) y salian "pivot" por las dos vias, asi que no hay
ningun dato mal escrito. Por eso era el momento barato.

El ADR lleva registrado el error junto al aviso que ya estaba: no faltaba la
advertencia, faltaba leerla.
@github-actions
github-actions Bot enabled auto-merge (squash) November 8, 2026 06:52
…l docstring

gains construye sus filas por ventana mientras la pasada las recorre y no
ordena 9,6 millones de filas despues, asi que sus bytes eran una funcion del
orden en que el LLAMANTE listara las ventanas: las mismas 65 en otro orden
daban otro sha.

Y mi propio docstring de ese escritor decia "the caller walks the windows
sorted" mientras la pasada iteraba p.windows tal cual. La frase describia lo
que deberia pasar, que es la misma forma del error de esta noche: una prueba
escrita desde la implementacion no puede refutarla, y un docstring escrito
desde la intencion tampoco.

Ordenar en el validador hace que el orden canonico sea una propiedad de la
CORRIDA y no de quien escribio la lista, que es sobre lo que un digest tiene
que ser. No cambia nada semanticamente: el campo declara un CONJUNTO de
ventanas.

La prueba escribe la misma poblacion en los dos ordenes y compara los shas, mas
la afirmacion de que dos payloads con las mismas ventanas en orden distinto dan
la misma lista.
@codecov

codecov Bot commented Nov 8, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 71.15385% with 30 lines in your changes missing coverage. Please review.
✅ Project coverage is 88.09%. Comparing base (d8bc801) to head (05e4864).
⚠️ Report is 256 commits behind head on develop.

Files with missing lines Patch % Lines
...otea/core/operations/export_transitions_dataset.py 23.07% 30 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@             Coverage Diff             @@
##           develop    #1158      +/-   ##
===========================================
+ Coverage    87.85%   88.09%   +0.24%     
===========================================
  Files          306      402      +96     
  Lines        23414    31179    +7765     
===========================================
+ Hits         20570    27467    +6897     
- Misses        2844     3712     +868     
Files with missing lines Coverage Δ
protea/core/transitions_export/_gains.py 100.00% <100.00%> (ø)
protea/core/transitions_export/_window_facts.py 97.29% <100.00%> (ø)
...otea/core/operations/export_transitions_dataset.py 59.89% <23.07%> (ø)

... and 162 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions
github-actions Bot merged commit 3835d5e into develop Nov 8, 2026
21 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant