Source code for src.obj.motif_breakage_trajectory_ensemble

from collections import namedtuple
import numpy as  np
from .motif_breakage_trajectory import are_compatible_motif_breakage_trajectories

[docs] def MotifBreakageTrajectoryEnsemble(motif_breakage_trajectories : list): """ Ensemble of motif breakage trajectories """ motif_breakage_trajectory = motif_breakage_trajectories[0] motif_breakage_trajectory_ensemble_properties = { 'motiflength' : motif_breakage_trajectory.motiflength, 'alphabet' : motif_breakage_trajectory.alphabet, 'number_of_letters' : motif_breakage_trajectory.number_of_letters, 'unit' : motif_breakage_trajectory.unit, 'trajectories' : motif_breakage_trajectories } for motif_breakage_trajectory in motif_breakage_trajectories[1:]: assert(motif_breakage_trajectory.motiflength==motif_breakage_trajectory_ensemble_properties['motiflength']) assert(motif_breakage_trajectory.alphabet==motif_breakage_trajectory_ensemble_properties['alphabet']) assert(motif_breakage_trajectory.number_of_letters==motif_breakage_trajectory_ensemble_properties['number_of_letters']) assert motif_breakage_trajectory.unit==motif_breakage_trajectory_ensemble_properties['unit'], "Units of motif vectors need to be the same." assert(are_compatible_motif_breakage_trajectories(motif_breakage_trajectory,motif_breakage_trajectories[0]), "Motif trajectories not compatible.") mt = namedtuple('MotifBreakageTrajectoryEnsemble', tuple(motif_breakage_trajectory_ensemble_properties.keys())) return mt(**motif_breakage_trajectory_ensemble_properties)
[docs] def isinstance_motifbreakagetrajectoryensemble(obj) -> bool: is_motif_breakage_trajectory_ensemble = True keys = ['motiflength', 'alphabet', 'number_of_letters', 'unit', 'trajectories'] for key in obj._asdict().keys(): if key not in keys: print('Not a MotifProductionTrajectoryEnsemble, missing key: {}.'.format(key)) return False is_motif_breakage_trajectory_ensemble *= isinstance(obj, tuple) is_motif_breakage_trajectory_ensemble *= hasattr(obj, '_asdict') is_motif_breakage_trajectory_ensemble *= hasattr(obj, '_fields') return bool(is_motif_breakage_trajectory_ensemble)
[docs] def are_compatible_motif_breakage_trajectory_ensembles( trjs1 : MotifBreakageTrajectoryEnsemble, trjs2 : MotifBreakageTrajectoryEnsemble ) -> bool: if not isinstance_motifbreakagetrajectoryensemble(trjs1): print('Object is not a MotifBreakageTrajectoryEnsemble') return False if not isinstance_motifbreakagetrajectoryensemble(trjs2): print('Object is not a MotifBreakageTrajectoryEnsemble') return False return np.prod([are_compatible_motif_breakage_trajectories( trj1, trj2 ) for trj1 in trjs1.trajectories for trj2 in trjs2.trajectories])