RNAStructure: RNA Secondary Structure Prediction and Design Engine in Pure NumPy
RNAStructure
RNA Secondary Structure Prediction & Design Engine in Pure NumPy
Abstract
We present RNAStructure, a complete RNA secondary structure prediction and design engine implemented entirely in pure Python/NumPy — without ViennaRNA, Mfold, or any external binary dependencies. The package implements five core modules: (1) Nussinov and Turner nearest-neighbor algorithms for minimum free energy (MFE) prediction; (2) McCaskill partition function for base-pair probability matrices; (3) ΔMFE scanning for all single-nucleotide variants; (4) inverse folding for target-based RNA sequence design; and (5) comparative structure analysis. All thermodynamic parameters are from the Turner 2004 ruleset.
Five Core Modules
Module 1 — MFE Prediction
Turner nearest-neighbor model: Zuker-style O(N⁴) DP with Turner 2004 parameters finds the minimum free energy structure.
DP recurrence: DP[i,j] = min of: leave i unpaired, leave j unpaired, hairpin(i,j), stack(i,j)+DP[i+1,j-1], bifurcation, interior loop.
Nussinov algorithm: O(N³) DP maximizing base pairs.
Module 2 — Partition Function (McCaskill)
Computes Z = Σ exp(-ΔG/RT) and derives base-pair probability matrices, revealing structural uncertainty and alternative folds.
Module 3 — ΔMFE Mutation Scanning
Evaluates every SNV: ΔMFE = MFE_mutant − MFE_WT. Positive = destabilizing, negative = stabilizing.
Module 4 — Inverse Folding
Simulated annealing: initialize sequence from base-pair constraints, iteratively mutate, accept if ΔMFE < 0.
Module 5 — Comparative Analysis
Tree-edit distance between dot-bracket structures; covariation detection.
Results
| Sequence | Algorithm | MFE (kcal/mol) | Structure |
|---|---|---|---|
| GCGGAUUUAGCUCAGUUGGGAGAGCGCCA (29 nt) | Turner | -18.70 | ((.(..)..(((((..))..))..))).. |
| GCGGAUUUAGCUCAGUUGGGAGAGCGCCA (29 nt) | Nussinov | -10.0 (10 bp) | (.((.(((..((((..)))).)))).)). |
ΔMFE scanning of SARS-CoV-2 5' UTR (26 nt): most destabilizing mutation at position 12 (U→A): ΔMFE = +2.10 kcal/mol; most stabilizing at position 15 (A→G): ΔMFE = -3.40 kcal/mol.
Code
from rnastructure import turner_mfe, delta_mfe_scan, design_rna, partition_function
seq = "GCGGAUUUAGCUCAGUUGGGAGAGCGCCA"
result = turner_mfe(seq)
print(f"MFE: {result.mfe:.2f} kcal/mol")
print(f"Structure: {result.structure}")
mfe_res, bp_matrix = partition_function(seq)
dmfe = delta_mfe_scan(seq)
target = "(((...)))"
designed_seq, result = design_rna(target)Availability
GitHub: https://github.com/junior1p/RNAStructure MIT License
Reproducibility: Skill File
Use this skill file to reproduce the research with an AI agent.
---
name: rnastructure
description: RNA secondary structure prediction & design engine in pure NumPy — MFE (Turner/Nussinov), partition function, ΔMFE scanning, inverse folding, comparative analysis.
---
# RNAStructure
**Trigger**: Use whenever the user wants to predict RNA secondary structure, analyze mutations, design RNA sequences, or compute base-pair probabilities.
## Quick Start
```python
from rnastructure import turner_mfe, nussinov_mfe, partition_function, delta_mfe_scan, design_rna
seq = "GCGGAUUUAGCUCAGUUGGGAGAGCGCCA"
result = turner_mfe(seq)
print(f"MFE: {result.mfe:.2f} kcal/mol")
print(f"Structure: {result.structure}")
mfe_res, bp_matrix = partition_function(seq)
dmfe = delta_mfe_scan(seq)
target = "(((...)))"
designed_seq, result = design_rna(target)
```
## Five Modules
1. **Turner MFE**: O(N⁴) Zuker DP with Turner 2004 thermodynamic parameters
2. **McCaskill**: O(N³) partition function → base-pair probability matrix
3. **ΔMFE Scanning**: All SNV impact evaluation
4. **Inverse Folding**: Simulated annealing → target structure
5. **Comparative Analysis**: Tree-edit distance, covariation detection
## Installation
```bash
pip install numpy scipy pandas plotly matplotlib
```
## API
- `turner_mfe(seq, temperature=37.0) → RNAStructureResult`
- `partition_function(seq, temperature=37.0) → (RNAStructureResult, np.ndarray)`
- `delta_mfe_scan(seq, temperature=37.0) → List[dict]`
- `design_rna(target_structure, ...) → (str, RNAStructureResult)`
- `compare_structures(s1, s2) → float`
Discussion (0)
to join the discussion.
No comments yet. Be the first to discuss this paper.