Exemple #1
0
 def test_data_update_non_dict_source(self):
     edge = BGEdge(
         vertex1=TaggedBlockVertex("v1"),
         vertex2=TaggedBlockVertex("v2"),
         multicolor=Multicolor(self.genome1, self.genome2),
         data={"fragment": {
             "name": "scaffold2",
             "origin": "test"
         }})
     for source in [1, "2", Multicolor(), (1, ), [
             2,
     ]]:
         with self.assertRaises(ValueError):
             edge.update_data(source=source)
Exemple #2
0
 def test_data_update_empty_source(self):
     edge = BGEdge(
         vertex1=TaggedBlockVertex("v1"),
         vertex2=TaggedBlockVertex("v2"),
         multicolor=Multicolor(self.genome1, self.genome2),
         data={"fragment": {
             "name": "scaffold2",
             "origin": "test"
         }})
     update_source = {}
     edge.update_data(source=update_source)
     self.assertTrue(
         dicts_are_equal(
             edge.data,
             {"fragment": {
                 "name": "scaffold2",
                 "origin": "test"
             }}))
Exemple #3
0
 def test_data_update(self):
     update_source = {"fragment": {"name": "scaffold11"}}
     edge = BGEdge(
         vertex1=TaggedBlockVertex("v1"),
         vertex2=TaggedBlockVertex("v2"),
         multicolor=Multicolor(self.genome1, self.genome2),
         data={"fragment": {
             "name": "scaffold2",
             "origin": "test"
         }})
     edge.update_data(source=update_source)
     self.assertIsInstance(edge.data, dict)
     self.assertIn("fragment", edge.data)
     self.assertIsInstance(edge.data["fragment"], dict)
     self.assertIn("name", edge.data["fragment"])
     self.assertIn("origin", edge.data["fragment"])
     self.assertEqual(edge.data["fragment"]["name"], "scaffold11")
     self.assertEqual(edge.data["fragment"]["origin"], "test")
Exemple #4
0
    def get_breakpoint_graph(stream, merge_edges=True):
        """ Taking a file-like object transforms supplied gene order data into the language of

        :param merge_edges: a flag that indicates if parallel edges in produced breakpoint graph shall be merged or not
        :type merge_edges: ``bool``
        :param stream: any iterable object where each iteration produces a ``str`` object
        :type stream: ``iterable`` ver ``str``
        :return: an instance of a BreakpointGraph that contains information about adjacencies in genome specified in GRIMM formatted input
        :rtype: :class:`bg.breakpoint_graph.BreakpointGraph`
        """
        result = BreakpointGraph()
        current_genome = None
        fragment_data = {}
        for line in stream:
            line = line.strip()
            if len(line) == 0:
                ###############################################################################################
                #
                # empty lines are omitted
                #
                ###############################################################################################
                continue
            if GRIMMReader.is_genome_declaration_string(data_string=line):
                ###############################################################################################
                #
                # is we have a genome declaration, we must update current genome
                # all following gene order data (before EOF or next genome declaration) will be attributed to current genome
                #
                ###############################################################################################
                current_genome = GRIMMReader.parse_genome_declaration_string(
                    data_string=line)
                fragment_data = {}
            elif GRIMMReader.is_comment_string(data_string=line):
                if GRIMMReader.is_comment_data_string(string=line):
                    path, (key, value) = GRIMMReader.parse_comment_data_string(
                        comment_data_string=line)
                    if len(path) > 0 and path[0] == "fragment":
                        add_to_dict_with_path(destination_dict=fragment_data,
                                              key=key,
                                              value=value,
                                              path=path)
                else:
                    continue
            elif current_genome is not None:
                ###############################################################################################
                #
                # gene order information that is specified before the first genome is specified can not be attributed to anything
                # and thus omitted
                #
                ###############################################################################################
                parsed_data = GRIMMReader.parse_data_string(data_string=line)
                edges = GRIMMReader.get_edges_from_parsed_data(
                    parsed_data=parsed_data)
                for v1, v2 in edges:
                    edge_specific_data = {
                        "fragment": {
                            "forward_orientation": (v1, v2)
                        }
                    }
                    edge = BGEdge(vertex1=v1,
                                  vertex2=v2,
                                  multicolor=Multicolor(current_genome),
                                  data=deepcopy(fragment_data))
                    edge.update_data(source=edge_specific_data)
                    result.add_bgedge(bgedge=edge, merge=merge_edges)
        return result