Ejemplo n.º 1
0
    def test_get_data(self):
        fLOG(
            __file__,
            self._testMethodName,
            OutputPrint=__name__ == "__main__")
        folder = os.path.join(
            os.path.abspath(
                os.path.dirname(__file__)),
            "temp_rues")
        if not os.path.exists(folder):
            os.mkdir(folder)
        for ext in [".txt", ".zip"]:
            f = os.path.join(folder, "paris_54000" + ext)
            if os.path.exists(f):
                os.remove(f)
        try:
            data = get_data(whereTo=folder, fLOG=fLOG, timeout=60)
        except Exception as e:
            if "unable to retrieve data" in str(e):
                return
            else:
                raise Exception("*****" + str(e) + "*****") from e

        fLOG(len(data))
        assert len(data) > 0
        total = sum(_[-1] for _ in data)
        fLOG("total length", total)
Ejemplo n.º 2
0
 def test_algo(self):
     fLOG (__file__, self._testMethodName, OutputPrint = __name__ == "__main__")
     folder = os.path.join(os.path.abspath(os.path.dirname(__file__)),"temp_rues2")
     if not os.path.exists(folder) : os.mkdir(folder)
     edges = get_data(whereTo=folder)
     edges = edges[:1000]
     max_segment = max ( e[-1] for e in edges )
     possibles = possible_edges(edges, max_segment/8, fLOG = fLOG)
     init = bellman(edges, fLOG = fLOG, allow = lambda e : e in possibles)
     fLOG("---")
     init = bellman(edges, fLOG = fLOG, allow = lambda e : e in possibles, init = init)
     fLOG("---")
     added = kruskall(edges, init, fLOG = fLOG)
     d = graph_degree(edges + added)
     allow = sorted([ k for k,v in d.items() if v%2 == 1 ])
     fLOG("degrees", allow)
     allow = set(allow)
     fLOG("---")
     init = bellman(edges, fLOG = fLOG, 
             allow = lambda e : e in possibles or e[0] in allow or e[1] in allow, 
             init = init)
     fLOG("---")
     added = kruskall(edges, init, fLOG = fLOG)
     d = graph_degree(edges + added)
     allow = sorted([ k for k,v in d.items() if v%2 == 1 ])
     fLOG("degrees", allow)
Ejemplo n.º 3
0
 def test_algo(self):
     fLOG(__file__,
          self._testMethodName,
          OutputPrint=__name__ == "__main__")
     folder = os.path.join(os.path.abspath(os.path.dirname(__file__)),
                           "temp_algo")
     if not os.path.exists(folder):
         os.mkdir(folder)
     edges = get_data(whereTo=folder, fLOG=fLOG)
     edges = edges[:1000]
     max_segment = max(e[-1] for e in edges)
     possibles = possible_edges(edges, max_segment / 8, fLOG=fLOG)
     init = bellman(edges, fLOG=fLOG, allow=lambda e: e in possibles)
     fLOG("---")
     init = bellman(edges,
                    fLOG=fLOG,
                    allow=lambda e: e in possibles,
                    init=init)
     fLOG("---")
     added = kruskal(edges, init, fLOG=fLOG)
     d = graph_degree(edges + added)
     allow = sorted([k for k, v in d.items() if v % 2 == 1])
     fLOG("degrees", allow)
     allow = set(allow)
     fLOG("---")
     init = bellman(
         edges,
         fLOG=fLOG,
         allow=lambda e: e in possibles or e[0] in allow or e[1] in allow,
         init=init)
     fLOG("---")
     added = kruskal(edges, init, fLOG=fLOG)
     d = graph_degree(edges + added)
     allow = sorted([k for k, v in d.items() if v % 2 == 1])
     fLOG("degrees", allow)
Ejemplo n.º 4
0
 def test_algo2(self):
     fLOG (__file__, self._testMethodName, OutputPrint = __name__ == "__main__")
     folder = os.path.join(os.path.abspath(os.path.dirname(__file__)),"temp_rues2")
     if not os.path.exists(folder) : os.mkdir(folder)
     edges = get_data(whereTo=folder)
     edges = edges[:1000]
     added = eulerien_extension(edges, fLOG = fLOG, alpha = 1/8)
     assert len(added)>0
     fLOG ("nb added",len(added))
Ejemplo n.º 5
0
 def test_algo_euler4(self):
     fLOG (__file__, self._testMethodName, OutputPrint = __name__ == "__main__")
     folder = os.path.join(os.path.abspath(os.path.dirname(__file__)),"temp_rues5")
     if not os.path.exists(folder) : os.mkdir(folder)
     edges = get_data(whereTo=folder)
     edges = edges[:3]
     
     vertices = { }
     for e in edges :
         for i in range(0,2):
             _ = e[i]
             p = e[i+3]
             vertices[_] = p
     
     connex = connected_components(edges)
     v = [ v for k,v in connex.items() ]
     mi,ma = min(v), max(v)
     
     while mi != ma :
         edges.append( (mi, ma, 2, vertices[mi], vertices[ma], 
                 distance_haversine( * (vertices[mi] + vertices[ma]) ) ) )
         
         connex = connected_components(edges)
         v = [ v for k,v in connex.items() ]
         mi,ma = min(v), max(v)
         
     if __name__ == "__main__":
         import matplotlib.pyplot as plt
         import networkx as nx
         fig = plt.figure()
         G = nx.Graph()
         for e in edges :
             a,b = e[:2]
             G.add_edge(a,b)
         pos = nx.spring_layout(G)
         nx.draw(G,pos,node_color='#A0CBE2')
         plt.savefig(os.path.join(folder, "graph1.png"))
         
     added = eulerien_extension( edges, fLOG=lambda *l : None, 
                                 distance = distance_paris)
                                 
     if __name__ == "__main__":
         for e in added :
             a,b = e[:2]
             G.add_edge(a,b)
         fig = plt.figure()
         pos = nx.spring_layout(G)
         deg = graph_degree(edges + added)
         #labels={ v:"{0}".format(deg[v]) for v in G.nodes() }
         nx.draw(G,pos,node_color='#A0CBE2'#,labels=labels
                         )
         plt.savefig(os.path.join(folder, "graph2.png"))
                                 
     path = euler_path(edges, added)
     all = edges + added
     fLOG(len(all),len(path))
Ejemplo n.º 6
0
 def test_algo3(self):
     fLOG (__file__, self._testMethodName, OutputPrint = __name__ == "__main__")
     return
     folder = os.path.join(os.path.abspath(os.path.dirname(__file__)),"temp_rues2")
     if not os.path.exists(folder) : os.mkdir(folder)
     edges = get_data(whereTo=folder)
     fLOG("start")
     added = eulerien_extension(edges, fLOG=fLOG, distance = distance_paris)
     assert len(added)>0
     fLOG ("nb added",len(added))
     with open(os.path.join(folder,"added.txt"),"w") as f : 
         f.write(str(added))
Ejemplo n.º 7
0
 def test_get_data(self) :
     fLOG (__file__, self._testMethodName, OutputPrint = __name__ == "__main__")
     folder = os.path.join(os.path.abspath(os.path.dirname(__file__)),"temp_rues")
     if not os.path.exists(folder) : os.mkdir(folder)
     for ext in [".txt",".zip"]:
         f = os.path.join(folder, "paris_54000" + ext)
         if os.path.exists(f): os.remove(f)
     data = get_data(whereTo=folder)
     fLOG(len(data))
     assert len(data)>0
     total = sum( _[-1] for _ in data )
     fLOG("total length", total)
 def test_algo3(self):
     fLOG(__file__,
          self._testMethodName,
          OutputPrint=__name__ == "__main__")
     folder = get_temp_folder(__file__, "temp_algo3")
     edges = get_data(whereTo=folder, fLOG=fLOG)
     fLOG("start")
     added = eulerien_extension(edges, fLOG=fLOG, distance=distance_paris)
     assert len(added) > 0
     fLOG("nb added", len(added))
     with open(os.path.join(folder, "added.txt"), "w") as f:
         f.write(str(added))
Ejemplo n.º 9
0
 def test_algo2(self):
     fLOG(__file__,
          self._testMethodName,
          OutputPrint=__name__ == "__main__")
     folder = os.path.join(os.path.abspath(os.path.dirname(__file__)),
                           "temp_algo2")
     if not os.path.exists(folder):
         os.mkdir(folder)
     edges = get_data(whereTo=folder, fLOG=fLOG)
     edges = edges[:1000]
     added = eulerien_extension(edges, fLOG=fLOG, alpha=1 / 8)
     assert len(added) > 0
     fLOG("nb added", len(added))
Ejemplo n.º 10
0
 def test_euler(self):
     fLOG (__file__, self._testMethodName, OutputPrint = __name__ == "__main__")
     folder = os.path.join(os.path.abspath(os.path.dirname(__file__)),"temp_rues_euler")
     if not os.path.exists(folder) : os.mkdir(folder)
     edges = get_data(whereTo=folder)
     
     data = pyensae.download_data("added.zip", whereTo=folder)
     with open(data[0],"r") as f : text = f.read()
     added_edges = eval(text)        
     path = euler_path(edges, added_edges)
     fLOG(len(path), len(edges) + len(added_edges))
     for p in path[:5]:
         fLOG(len(p),p)
     for p in path[-5:]:
         fLOG(len(p),p)
Ejemplo n.º 11
0
 def test_algo3(self):
     fLOG(__file__,
          self._testMethodName,
          OutputPrint=__name__ == "__main__")
     return
     folder = os.path.join(os.path.abspath(os.path.dirname(__file__)),
                           "temp_rues2")
     if not os.path.exists(folder):
         os.mkdir(folder)
     edges = get_data(whereTo=folder, fLOG=fLOG)
     fLOG("start")
     added = eulerien_extension(edges, fLOG=fLOG, distance=distance_paris)
     assert len(added) > 0
     fLOG("nb added", len(added))
     with open(os.path.join(folder, "added.txt"), "w") as f:
         f.write(str(added))
Ejemplo n.º 12
0
    def test_euler(self):
        fLOG(__file__,
             self._testMethodName,
             OutputPrint=__name__ == "__main__")
        folder = os.path.join(os.path.abspath(os.path.dirname(__file__)),
                              "temp_rues_euler")
        if not os.path.exists(folder):
            os.mkdir(folder)
        edges = get_data(whereTo=folder, fLOG=fLOG)

        data = download_data("added.zip", whereTo=folder, fLOG=fLOG)
        with open(data[0], "r") as f:
            text = f.read()
        added_edges = eval(text)
        path = euler_path(edges, added_edges)
        fLOG(len(path), len(edges) + len(added_edges))
        for p in path[:5]:
            fLOG(len(p), p)
        for p in path[-5:]:
            fLOG(len(p), p)
Ejemplo n.º 13
0
    def test_get_data(self):
        fLOG(__file__,
             self._testMethodName,
             OutputPrint=__name__ == "__main__")
        folder = os.path.join(os.path.abspath(os.path.dirname(__file__)),
                              "temp_rues")
        if not os.path.exists(folder):
            os.mkdir(folder)
        for ext in [".txt", ".zip"]:
            f = os.path.join(folder, "paris_54000" + ext)
            if os.path.exists(f):
                os.remove(f)
        try:
            data = get_data(whereTo=folder, fLOG=fLOG, timeout=60)
        except Exception as e:
            if "unable to retrieve data" in str(e):
                return
            else:
                raise Exception("*****" + str(e) + "*****") from e

        fLOG(len(data))
        assert len(data) > 0
        total = sum(_[-1] for _ in data)
        fLOG("total length", total)
Ejemplo n.º 14
0
    def test_algo_euler4(self):
        fLOG(__file__,
             self._testMethodName,
             OutputPrint=__name__ == "__main__")
        folder = os.path.join(os.path.abspath(os.path.dirname(__file__)),
                              "temp_algo_euler4")
        if not os.path.exists(folder):
            os.mkdir(folder)
        edges = get_data(whereTo=folder, fLOG=fLOG)
        edges = edges[:3]

        vertices = {}
        for e in edges:
            for i in range(0, 2):
                _ = e[i]
                p = e[i + 3]
                vertices[_] = p

        connex = connected_components(edges)
        v = [v for k, v in connex.items()]
        mi, ma = min(v), max(v)

        while mi != ma:
            edges.append((mi, ma, 2, vertices[mi], vertices[ma],
                          distance_haversine(*(vertices[mi] + vertices[ma]))))

            connex = connected_components(edges)
            v = [v for k, v in connex.items()]
            mi, ma = min(v), max(v)

        fix_tkinter_issues_virtualenv()
        import matplotlib.pyplot as plt
        import networkx as nx
        plt.figure()
        G = nx.Graph()
        for e in edges:
            a, b = e[:2]
            G.add_edge(a, b)
        pos = nx.spring_layout(G)
        nx.draw(G, pos, node_color='#A0CBE2')
        plt.savefig(os.path.join(folder, "graph1.png"))
        plt.close('all')

        added = eulerien_extension(edges,
                                   fLOG=lambda *l: None,
                                   distance=distance_paris)

        for e in added:
            a, b = e[:2]
            G.add_edge(a, b)
        plt.figure()
        pos = nx.spring_layout(G)
        graph_degree(edges + added)
        #labels={ v:"{0}".format(deg[v]) for v in G.nodes() }
        nx.draw(
            G,
            pos,
            node_color='#A0CBE2'  # ,labels=labels
        )
        plt.savefig(os.path.join(folder, "graph2.png"))
        plt.close('all')

        path = euler_path(edges, added)
        alls = edges + added
        fLOG(len(alls), len(path))