comparison COBRAxy/utils/model_utils.py @ 499:a2f7a6dd9d0b draft

Uploaded
author francesco_lapi
date Tue, 30 Sep 2025 16:19:55 +0000
parents a92d21f92956
children 4e7e67693ce7
comparison
equal deleted inserted replaced
498:df90f40a156c 499:a2f7a6dd9d0b
356 356
357 return model 357 return model
358 358
359 359
360 # Estrae tutti gli ID metaboliti nella formula (gestisce prefissi numerici + underscore) 360 # Estrae tutti gli ID metaboliti nella formula (gestisce prefissi numerici + underscore)
361 #def extract_metabolites_from_reaction(reaction_formula: str) -> Set[str]:
362 # """
363 # Extract metabolite IDs from a reaction formula.
364 # Robust pattern: tokens ending with _<compartment> (e.g., _c, _m, _e),
365 # allowing leading digits/underscores.
366 # """
367 # metabolites = set()
368 # # optional coefficient followed by a token ending with _<letters>
369 # if reaction_formula[-1] == ']' and reaction_formula[-3] == '[':
370 # pattern = r'(?:\d+(?:\.\d+)?\s+)?([A-Za-z0-9_]+[[A-Za-z0-9]]+)'
371 # else:
372 # pattern = r'(?:\d+(?:\.\d+)?\s+)?([A-Za-z0-9_]+_[A-Za-z0-9]+)'
373 # matches = re.findall(pattern, reaction_formula)
374 # metabolites.update(matches)
375 # return metabolites
376
377 import re
378 from typing import Set
379
380 # Estrae tutti gli ID metaboliti nella formula (gestisce prefissi numerici + underscore e [comp])
361 def extract_metabolites_from_reaction(reaction_formula: str) -> Set[str]: 381 def extract_metabolites_from_reaction(reaction_formula: str) -> Set[str]:
362 """ 382 """
363 Extract metabolite IDs from a reaction formula. 383 Estrae gli ID dei metaboliti da una formula di reazione.
364 Robust pattern: tokens ending with _<compartment> (e.g., _c, _m, _e), 384 Gestisce:
365 allowing leading digits/underscores. 385 - coefficienti stechiometrici opzionali (interi o decimali)
366 """ 386 - compartimenti sia in forma [c] sia _c, sempre a fine metabolita
367 metabolites = set() 387 Restituisce gli ID includendo il suffisso di compartimento così come appare.
368 # optional coefficient followed by a token ending with _<letters> 388 """
369 if reaction_formula[-1] == ']' and reaction_formula[-3] == '[': 389 pattern = re.compile(
370 pattern = r'(?:\d+(?:\.\d+)?\s+)?([A-Za-z0-9_]+[[A-Za-z0-9]]+)' 390 r'(?:^|(?<=\s)|(?<=\+)|(?<=,)|(?<==)|(?<=:))' # confine a sinistra
371 else: 391 r'(?:\d+(?:\.\d+)?\s*)?' # coefficiente opzionale
372 pattern = r'(?:\d+(?:\.\d+)?\s+)?([A-Za-z0-9_]+_[A-Za-z0-9]+)' 392 r'([A-Za-z0-9_]+(?:\[[A-Za-z0-9]+\]|_[A-Za-z0-9]+))' # metabolita + compartimento
373 matches = re.findall(pattern, reaction_formula) 393 )
374 metabolites.update(matches) 394 return {m.group(1) for m in pattern.finditer(reaction_formula)}
375 return metabolites
376 395
377 396
378 def extract_compartment_from_metabolite(metabolite_id: str) -> str: 397 def extract_compartment_from_metabolite(metabolite_id: str) -> str:
379 """Extract the compartment from a metabolite ID.""" 398 """Extract the compartment from a metabolite ID."""
380 if '_' in metabolite_id: 399 if '_' in metabolite_id: