Skip to main content

energorna

CI PyPI License: MIT

Glass-box local periodicity-loss observable of the mRNA stacking-energy profile, for repeat-expansion disorders. Numpy-only, no ViennaRNA / GPU / API. Part of the QMetrika Bio-IA thermodynamic engine (same Turner nearest-neighbor parameters as ef-synonymous).

English · Español


English

The idea

In repeat-expansion diseases (myotonic dystrophy type 1, Huntington, SCA1, DM2…), age at onset is not set only by how many repeats there are, but by whether the repeat tract is interrupted. Interruptions (e.g. CCG in the CTG tract of DM1, CAA in the CAG tract of Huntington, CAT in SCA1) break the periodicity of the nearest-neighbor stacking energy profile Φ, disrupt the slipped-strand substrate that drives somatic instability, and delay onset.

energorna computes a single glass-box observable — periodicity_loss = 1 − ACF_period(Φ), the loss of autocorrelation (at the motif period) of the Turner stacking profile — that captures this. It auto-calibrates the period per motif (3 for trinucleotides, 4 for the CCTG tetranucleotide) and, unlike simply counting interruptions, is sensitive to their type and position.

Install

pip install energorna

Use — CLI

# pure (CTG)40 vs an interrupted allele
energorna score --repeat CTG --n 40
energorna score --seq CTGCTGCTG...CCGCTG... --motif CTG --json
energorna score --seq-file allele.fasta --motif CAG

Output shows the observable next to the traditional baselines:

motif CTG (period 3) · 62 units · longest uninterrupted run 51
  periodicity_loss      = 0.18xx   <- observable
  periodicity_loss (3') = 0.19xx
  n_interruptions       = 4        (count baseline)
  fragmentation_index   = 0.09xx   (fragmentation baseline)

Use — Python

import energorna as ef

ef.calibrate_lag("CCTG")                    # -> 4 (auto-detects the motif period)
ef.periodicity_loss(seq, unit="CTG")        # global observable
ef.periodicity_profile(seq, unit="CTG")     # (pos, loss) resolved 5'->3'
ef.periodicity_loss_3prime(seq, unit="CTG") # 3'-weighted
ef.n_interruptions(seq, "CTG")              # count baseline (to compare)

Why it matters (validation)

Across three diseases, periodicity_loss (or its axis, the longest uninterrupted stretch) predicts age at onset better than counting repeats:

Disease Data Result
DM1 Pešović 2018, n=7 periodicity vs onset residual r=+0.81 (LOO robust, bootstrap CI [+0.59,+0.99], perm p=0.027) vs count +0.53; captures type (CCG≫CTC) & position
Huntington GeM-HD 2019 (published directions) LOI < canonical < duplication — matches onset ordering
SCA1 Menon 2013 Table S3, n=35 longest uninterrupted stretch predicts onset R²=0.64 vs 0.24 for total size (r=−0.80, p=5×10⁻⁵)

Honest scope

A biologically motivated correlate, not proven causality. Individual, interruption-typed cohorts at scale (OPTIMISTIC, Enroll-HD) are access-controlled; the claim is "better predictor than count on the available data, with a mechanistic hypothesis and falsifiable predictions" (correlation with measured somatic instability, UV melting, MSH3 binding). Research use only.


Español

La idea

En enfermedades de expansión de repeticiones (distrofia miotónica tipo 1, Huntington, SCA1, DM2…), la edad de inicio no la fija solo cuántas repeticiones hay, sino si el tracto está interrumpido. Las interrupciones (p. ej. CCG en el tracto CTG de DM1, CAA en el CAG de Huntington, CAT en SCA1) rompen la periodicidad del perfil de energía de apilamiento nearest-neighbor Φ, alteran el sustrato slipped-strand que dirige la inestabilidad somática y retrasan el inicio.

energorna calcula un único observable glass-box — periodicity_loss = 1 − ACF_periodo(Φ), la pérdida de autocorrelación (al periodo del motivo) del perfil de apilamiento Turner — que lo captura. Auto-calibra el periodo por motivo (3 en trinucleótidos, 4 en el tetranucleótido CCTG) y, a diferencia de contar interrupciones, es sensible a su tipo y posición.

Instalación

pip install energorna

Uso — CLI

energorna score --repeat CTG --n 40
energorna score --seq CTGCTG...CCGCTG... --motif CTG --json
energorna score --seq-file alelo.fasta --motif CAG

Uso — Python

import energorna as ef
ef.calibrate_lag("CCTG")                    # -> 4 (auto-detecta el periodo)
ef.periodicity_loss(seq, unit="CTG")        # observable global
ef.periodicity_profile(seq, unit="CTG")     # perfil (pos, pérdida) 5'->3'
ef.periodicity_loss_3prime(seq, unit="CTG") # ponderado 3'

Por qué importa (validación)

En tres enfermedades, periodicity_loss (o su eje, el tramo ininterrumpido más largo) predice la edad de inicio mejor que contar repeticiones: DM1 (Pešović n=7, r=+0,81), Huntington (direcciones publicadas, LOI<canónico<duplicación) y SCA1 (Menon 2013 n=35, R²=0,64 vs 0,24 del tamaño total). Ver la tabla en la sección en inglés.

Alcance honesto

Es un correlato biológicamente motivado, no una causalidad demostrada. Los datos individuales tipados a escala son de acceso controlado; el claim es "mejor predictor que el conteo en los datos disponibles, con hipótesis mecanística y predicciones falsables". Uso solo para investigación (RUO).


Citation / Cita

Vilar Sánchez JA. energoRNA: local periodicity loss of the mRNA stacking profile predicts age at onset in repeat-expansion disorders. QMetrika Labs, 2026. Method covered by patent P202630522 (OEPM). Code under MIT.

Metadata

Release files for energorna 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for energorna 0.1.0
File Size Uploaded Provenance Actions
energorna-0.1.0.tar.gz 9.6 kB With provenance Details for energorna-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for energorna 0.1.0
File Interpreter ABI Platform Actions
energorna-0.1.0-py3-none-any.whl Python 3 none any Details for energorna-0.1.0-py3-none-any.whl

Total release size: 19.1 kB

Release files / energorna-0.1.0.tar.gz

Download URL energorna-0.1.0.tar.gz
Size 9.6 kB
Tags Source
SHA-256 checksum
How to use checksums
8c20ccc252ae814fc68351e08ff50cbf05b3e4ac107d2104482856da42f37435
BLAKE2b-256 checksum
How to use checksums
ffaaf4a69bc1b4bfc8d1f960bcb2569bc9df9719e41c0ade7fe2d3ac0659cb8c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 21, 2026.

Transparency log

Release files / energorna-0.1.0-py3-none-any.whl

Download URL energorna-0.1.0-py3-none-any.whl
Size 9.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
31b6d17782c7616c4f77d436694b190174ff2d5546a2cccedfa7396109cde16f
BLAKE2b-256 checksum
How to use checksums
49a9fe3a95034ad17e197d3d6a5fe8d4935a37130f945e497c5bd66eadf6faa7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 21, 2026.

Transparency log

Security for energorna 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for energorna-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 21, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page