Source code for rnaglib.dataset_transforms.distance_computer

from rnaglib.dataset_transforms import DSTransform


[docs] class DistanceComputer(DSTransform): """Dataset transform adding to the dataset attributes a distance matrix encoding the pairwise distances between all RNAs of the dataset :param str name: the name identifying the distance metric :param bool recompute: a boolean indicating whether the distance has to be recomputed in case it had already been computed for this dataset (it can be set to True if the dataset may have been subject to modifications since the latest distance computation) """
[docs] def __init__(self, name, recompute=True): self.name = name self.recompute = recompute pass
def __call__(self, dataset): """Compute distance matrix for a dataset. :param dataset: RNADataset to compute distances for :return: RNADataset with distance matrix added """ if dataset.distances is None or self.name not in dataset.distances or self.recompute: similarity_matrix, keep_dataset_names = self.forward(dataset) if len(keep_dataset_names) != len(dataset): print( f"""WARNING: Similarity matrix computer dropped some data points. Original dataset had: {len(dataset)} New dataset has: {len(keep_dataset_names)}\n""" ) # saving the distance matrices to the object in case we want to use them later dataset.remove_distance(self.name) dataset = dataset.subset(list_of_names=keep_dataset_names) dataset.add_distance(self.name, 1 - similarity_matrix) return dataset def forward(self, dataset): """Compute similarity matrix for a dataset. :param dataset: RNADataset to compute similarities for :return: Tuple of (similarity_matrix, list_of_kept_rna_names) """ raise NotImplementedError