def test_compound_in_simple(self): simple = FeatureLocation(10, 40) compound = build_compound([(10, 20), (20, 40)], strand=1) assert location_contains_other(simple, compound) compound = build_compound([(10, 20), (20, 40), (50, 60)], strand=1) assert not location_contains_other(simple, compound)
def is_contained_by(self, other: Union["Feature", Location]) -> bool: """ Returns True if the given feature is wholly contained by this feature. """ if isinstance(other, Feature): return location_contains_other(other.location, self.location) if isinstance(other, (CompoundLocation, FeatureLocation)): return location_contains_other(other, self.location) raise TypeError("Container must be a Feature, CompoundLocation or FeatureLocation, not %s" % type(other))
def test_simple_in_compound(self): simple = FeatureLocation(5, 10) compound = build_compound([(1, 4), (12, 20)], strand=1) assert not location_contains_other(compound, simple) simple = FeatureLocation(1, 20) assert not location_contains_other(compound, simple) simple = FeatureLocation(15, 18) assert location_contains_other(compound, simple) for part in compound.parts: assert location_contains_other(compound, part)
def remove_redundant_protoclusters( clusters: List[Protocluster], rules_by_name: Dict[str, rule_parser.DetectionRule]) -> List[Protocluster]: """ Removes clusters which have superiors covering the same (or larger) region """ clusters_by_rule = defaultdict(list) # type: Dict[str, List[Protocluster]] for cluster in clusters: clusters_by_rule[cluster.product].append(cluster) trimmed_clusters = [] for cluster in clusters: rule_name = cluster.product is_redundant = False for superior in rules_by_name[rule_name].superiors: for other_cluster in clusters_by_rule.get(superior, []): if location_contains_other(other_cluster.core_location, cluster.core_location): is_redundant = True break if is_redundant: break if not is_redundant: trimmed_clusters.append(cluster) return trimmed_clusters
def test_simple_in_simple(self): inner = FeatureLocation(5, 10) outer = FeatureLocation(1, 20) # clear contains assert location_contains_other(outer, inner) assert not location_contains_other(inner, outer) # on one edge outer = FeatureLocation(5, 20) assert location_contains_other(outer, inner) assert not location_contains_other(inner, outer) # on both edges outer = FeatureLocation(1, 20) assert location_contains_other(outer, inner) assert not location_contains_other(inner, outer)