Error de Sobrecarga de Memoria al ejecutar una secuencia larga y ambigua debido a (sre.yield_AllStrings)
Esperaba que alguien pudiera ayudarme.
Estoy tratando de crear una función que, dada una secuencia de ADN (in)ambigua y un intervalo de peso molecular, devuelva una lista de todas las secuencias no ambiguas representadas por la secuencia dada.
Hasta ahora he llegado a esto:
import re
import sre_yield
from Bio import SeqIO
import Bio.SeqUtils
from Bio.Seq import Seq
import Bio.SeqIO
def all_seq_between_upper_lower_mw(file, lower_mw, upper_mw):
file = SeqIO.read(file,'fasta')
sequence = file.seq
seqs_opt = Bio.SeqUtils.nt_search("", sequence)
seqs = list(sre_yield.AllStrings(seqs_opt[0]))
if (len(seqs) == 1):
print("Esta secuencia es no ambigua")
mol_weight = Bio.SeqUtils.molecular_weight(results[0])
if mol_weight > lower_mw and mol_weight < upper_mw:
print("Secuencia de nucleótidos: "+str(seqs[0])+" y peso molecular = "+str(mol_weight))
else:
print("Esta secuencia no se encuentra dentro de los límites de peso molecular proporcionados")
else:
print("Esta secuencia es ambigua")
results = dict()
for record in seqs:
results[record] = Bio.SeqUtils.molecular_weight(record)
possibility_counter = 0
for seq, mol_weight in results.items():
possibility_counter += 1
if mol_weight > lower_mw and mol_weight < upper_mw:
print("Posibilidad "+str(possibility_counter)+": "+str(seq)+" y peso molecular = "+str(mol_weight))
else:
print("Posibilidad "+str(possibility_counter)+": Esta secuencia no se encuentra dentro de los límites de peso molecular proporcionados")
Este código se ejecuta perfectamente con una secuencia corta (in)ambigua. Pero cuando se le proporciona una secuencia ambigua que es bastante larga, aparece el error: Sobrecarga de memoria, que apunta a la función sre.yield_AllStrings.
Para referencia, archivo FASTA de secuencia ambigua corta:
>seq_7009 secuencia aleatoria
DGRGGGWAVCVAACGTTGAT
Archivo FASTA de secuencia ambigua larga:
>seq_445 secuencia aleatoria
ARYGNTAVHGAMRRACNTNHSGVYGVRCGAGAHTGVBCKWACACAGTKYCACGBGAGGYGTCCGYTGVGASCC
Sigo siendo nuevo en Python, pero espero que alguien pueda saber cómo solucionar el error de memoria.
davy.ai
Solución al Error de Sobrecarga de Memoria
La función
sre_yield.AllStrings()
genera todas las posibles coincidencias no superpuestas de una expresión regular en una cadena. En este caso, está generando todas las posibles secuencias inequívocas a partir de una secuencia de ADN ambigua. El error ocurre cuando la secuencia de entrada es demasiado larga, lo que resulta en un gran número de posibles secuencias inequívocas.Una forma de resolver el error de sobrecarga de memoria es generar las secuencias inequívocas de forma iterativa en lugar de almacenarlas todas en memoria de una vez. Aquí hay una versión modificada del código que puede manejar secuencias ambiguas largas sin errores de sobrecarga de memoria:
En el código modificado, se identifican las regiones ambiguas y se reemplazan mediante la iteración de todas las combinaciones inequívocas posibles. La función
find_unambiguous_seqs()
genera todas las posibles secuencias inequívocas a partir de una sola secuencia ambigua de forma iterativa utilizando la recursión.Este enfoque reduce significativamente el uso de memoria y permite que la función maneje secuencias ambiguas largas sin errores de sobrecarga de memoria.