Skip to main content
  • Home
  • Development
  • Documentation
  • Donate
  • Operational login
  • Browse the archive

swh logo
SoftwareHeritage
Software
Heritage
Archive
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

Revision b2144153634a98294a106c6c05738404af5a2f2d authored by Mikhail Kolmogorov on 26 May 2015, 02:06:52 UTC, committed by Mikhail Kolmogorov on 26 May 2015, 02:06:52 UTC
debugging improvements
1 parent 42a3c5d
  • Files
  • Changes
  • 63ff817
  • /
  • lib
  • /
  • networkx
  • /
  • classes
  • /
  • tests
  • /
  • test_multidigraph.py
Raw File Download

To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
Select below a type of object currently browsed in order to display its associated SWHID and permalink.

  • revision
  • directory
  • content
revision badge
swh:1:rev:b2144153634a98294a106c6c05738404af5a2f2d
directory badge
swh:1:dir:38dd555f410324f15db062b7b02cd1e8a953d9ad
content badge
swh:1:cnt:e8c2543f963df8ea93bd89c1f71d4bca635b4049

This interface enables to generate software citations, provided that the root directory of browsed objects contains a citation.cff or codemeta.json file.
Select below a type of object currently browsed in order to generate citations for them.

  • revision
  • directory
  • content
(requires biblatex-software package)
Generating citation ...
(requires biblatex-software package)
Generating citation ...
(requires biblatex-software package)
Generating citation ...
test_multidigraph.py
#!/usr/bin/env python
from nose.tools import *
import networkx
from test_multigraph import BaseMultiGraphTester, TestMultiGraph

class BaseMultiDiGraphTester(BaseMultiGraphTester):
    def test_edges(self):
        G=self.K3
        assert_equal(sorted(G.edges()),[(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
        assert_equal(sorted(G.edges(0)),[(0,1),(0,2)])
        assert_raises((KeyError,networkx.NetworkXError), G.edges,-1)

    def test_edges_data(self):
        G=self.K3
        assert_equal(sorted(G.edges(data=True)),
                     [(0,1,{}),(0,2,{}),(1,0,{}),(1,2,{}),(2,0,{}),(2,1,{})])
        assert_equal(sorted(G.edges(0,data=True)),[(0,1,{}),(0,2,{})])
        assert_raises((KeyError,networkx.NetworkXError), G.neighbors,-1)


    def test_edges_iter(self):
        G=self.K3
        assert_equal(sorted(G.edges_iter()),
                     [(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
        assert_equal(sorted(G.edges_iter(0)),[(0,1),(0,2)])
        G.add_edge(0,1)
        assert_equal(sorted(G.edges_iter()),
                     [(0,1),(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])

    def test_out_edges(self):
        G=self.K3
        assert_equal(sorted(G.out_edges()),
                     [(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
        assert_equal(sorted(G.out_edges(0)),[(0,1),(0,2)])
        assert_raises((KeyError,networkx.NetworkXError), G.out_edges,-1)
        assert_equal(sorted(G.out_edges(0,keys=True)),[(0,1,0),(0,2,0)])

    def test_out_edges_iter(self):
        G=self.K3
        assert_equal(sorted(G.out_edges_iter()),
                     [(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
        assert_equal(sorted(G.out_edges_iter(0)),[(0,1),(0,2)])
        G.add_edge(0,1,2)
        assert_equal(sorted(G.out_edges_iter()),
                     [(0,1),(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])

    def test_in_edges(self):
        G=self.K3
        assert_equal(sorted(G.in_edges()),
                     [(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
        assert_equal(sorted(G.in_edges(0)),[(1,0),(2,0)])
        assert_raises((KeyError,networkx.NetworkXError), G.in_edges,-1)
        G.add_edge(0,1,2)
        assert_equal(sorted(G.in_edges()),
                     [(0,1),(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
        assert_equal(sorted(G.in_edges(0,keys=True)),[(1,0,0),(2,0,0)])

    def test_in_edges_iter(self):
        G=self.K3
        assert_equal(sorted(G.in_edges_iter()),
                     [(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
        assert_equal(sorted(G.in_edges_iter(0)),[(1,0),(2,0)])
        G.add_edge(0,1,2)
        assert_equal(sorted(G.in_edges_iter()),
                     [(0,1),(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])

        assert_equal(sorted(G.in_edges_iter(data=True,keys=False)),
                     [(0,1,{}),(0,1,{}),(0,2,{}),(1,0,{}),(1,2,{}),
                      (2,0,{}),(2,1,{})])


    def is_shallow(self,H,G):
        # graph
        assert_equal(G.graph['foo'],H.graph['foo'])
        G.graph['foo'].append(1)
        assert_equal(G.graph['foo'],H.graph['foo'])
        # node
        assert_equal(G.node[0]['foo'],H.node[0]['foo'])
        G.node[0]['foo'].append(1)
        assert_equal(G.node[0]['foo'],H.node[0]['foo'])
        # edge
        assert_equal(G[1][2][0]['foo'],H[1][2][0]['foo'])
        G[1][2][0]['foo'].append(1)
        assert_equal(G[1][2][0]['foo'],H[1][2][0]['foo'])

    def is_deep(self,H,G):
        # graph
        assert_equal(G.graph['foo'],H.graph['foo'])
        G.graph['foo'].append(1)
        assert_not_equal(G.graph['foo'],H.graph['foo'])
        # node
        assert_equal(G.node[0]['foo'],H.node[0]['foo'])
        G.node[0]['foo'].append(1)
        assert_not_equal(G.node[0]['foo'],H.node[0]['foo'])
        # edge
        assert_equal(G[1][2][0]['foo'],H[1][2][0]['foo'])
        G[1][2][0]['foo'].append(1)
        assert_not_equal(G[1][2][0]['foo'],H[1][2][0]['foo'])

    def test_to_undirected(self):
        # MultiDiGraph -> MultiGraph changes number of edges so it is
        # not a copy operation... use is_shallow, not is_shallow_copy
        G=self.K3
        self.add_attributes(G)
        H=networkx.MultiGraph(G)
        self.is_shallow(H,G)
        H=G.to_undirected()
        self.is_deep(H,G)

    def test_has_successor(self):
        G=self.K3
        assert_equal(G.has_successor(0,1),True)
        assert_equal(G.has_successor(0,-1),False)

    def test_successors(self):
        G=self.K3
        assert_equal(sorted(G.successors(0)),[1,2])
        assert_raises((KeyError,networkx.NetworkXError), G.successors,-1)

    def test_successors_iter(self):
        G=self.K3
        assert_equal(sorted(G.successors_iter(0)),[1,2])
        assert_raises((KeyError,networkx.NetworkXError), G.successors_iter,-1)

    def test_has_predecessor(self):
        G=self.K3
        assert_equal(G.has_predecessor(0,1),True)
        assert_equal(G.has_predecessor(0,-1),False)

    def test_predecessors(self):
        G=self.K3
        assert_equal(sorted(G.predecessors(0)),[1,2])
        assert_raises((KeyError,networkx.NetworkXError), G.predecessors,-1)

    def test_predecessors_iter(self):
        G=self.K3
        assert_equal(sorted(G.predecessors_iter(0)),[1,2])
        assert_raises((KeyError,networkx.NetworkXError), G.predecessors_iter,-1)


    def test_degree(self):
        G=self.K3
        assert_equal(list(G.degree().values()),[4,4,4])
        assert_equal(G.degree(),{0:4,1:4,2:4})
        assert_equal(G.degree(0),4)
        assert_equal(G.degree([0]),{0:4})
        assert_raises((KeyError,networkx.NetworkXError), G.degree,-1)

    def test_degree_iter(self):
        G=self.K3
        assert_equal(list(G.degree_iter()),[(0,4),(1,4),(2,4)])
        assert_equal(dict(G.degree_iter()),{0:4,1:4,2:4})
        assert_equal(list(G.degree_iter(0)),[(0,4)])
        G.add_edge(0,1,weight=0.3,other=1.2)
        assert_equal(list(G.degree_iter(weight='weight')),[(0,4.3),(1,4.3),(2,4)])
        assert_equal(list(G.degree_iter(weight='other')),[(0,5.2),(1,5.2),(2,4)])


    def test_in_degree(self):
        G=self.K3
        assert_equal(list(G.in_degree().values()),[2,2,2])
        assert_equal(G.in_degree(),{0:2,1:2,2:2})
        assert_equal(G.in_degree(0),2)
        assert_equal(G.in_degree([0]),{0:2})
        assert_raises((KeyError,networkx.NetworkXError), G.in_degree,-1)

    def test_in_degree_iter(self):
        G=self.K3
        assert_equal(list(G.in_degree_iter()),[(0,2),(1,2),(2,2)])
        assert_equal(dict(G.in_degree_iter()),{0:2,1:2,2:2})
        assert_equal(list(G.in_degree_iter(0)),[(0,2)])
        assert_equal(list(G.in_degree_iter(0,weight='weight')),[(0,2)])

    def test_out_degree(self):
        G=self.K3
        assert_equal(list(G.out_degree().values()),[2,2,2])
        assert_equal(G.out_degree(),{0:2,1:2,2:2})
        assert_equal(G.out_degree(0),2)
        assert_equal(G.out_degree([0]),{0:2})
        assert_raises((KeyError,networkx.NetworkXError), G.out_degree,-1)

    def test_out_degree_iter(self):
        G=self.K3
        assert_equal(list(G.out_degree_iter()),[(0,2),(1,2),(2,2)])
        assert_equal(dict(G.out_degree_iter()),{0:2,1:2,2:2})
        assert_equal(list(G.out_degree_iter(0)),[(0,2)])
        assert_equal(list(G.out_degree_iter(0,weight='weight')),[(0,2)])


    def test_size(self):
        G=self.K3
        assert_equal(G.size(),6)
        assert_equal(G.number_of_edges(),6)
        G.add_edge(0,1,weight=0.3,other=1.2)
        assert_equal(G.size(weight='weight'),6.3)
        assert_equal(G.size(weight='other'),7.2)

    def test_to_undirected_reciprocal(self):
        G=self.Graph()
        G.add_edge(1,2)
        assert_true(G.to_undirected().has_edge(1,2))
        assert_false(G.to_undirected(reciprocal=True).has_edge(1,2))
        G.add_edge(2,1)
        assert_true(G.to_undirected(reciprocal=True).has_edge(1,2))

    def test_reverse_copy(self):
        G=networkx.MultiDiGraph([(0,1),(0,1)])
        R=G.reverse()
        assert_equal(sorted(R.edges()),[(1,0),(1,0)])
        R.remove_edge(1,0)
        assert_equal(sorted(R.edges()),[(1,0)])
        assert_equal(sorted(G.edges()),[(0,1),(0,1)])

    def test_reverse_nocopy(self):
        G=networkx.MultiDiGraph([(0,1),(0,1)])
        R=G.reverse(copy=False)
        assert_equal(sorted(R.edges()),[(1,0),(1,0)])
        R.remove_edge(1,0)
        assert_equal(sorted(R.edges()),[(1,0)])
        assert_equal(sorted(G.edges()),[(1,0)])


class TestMultiDiGraph(BaseMultiDiGraphTester,TestMultiGraph):
    def setUp(self):
        self.Graph=networkx.MultiDiGraph
        # build K3
        self.k3edges=[(0, 1), (0, 2), (1, 2)]
        self.k3nodes=[0, 1, 2]
        self.K3=self.Graph()
        self.K3.adj={0:{},1:{},2:{}}
        self.K3.succ=self.K3.adj
        self.K3.pred={0:{},1:{},2:{}}
        for u in self.k3nodes:
            for v in self.k3nodes:
                if u==v: continue
                d={0:{}}
                self.K3.succ[u][v]=d
                self.K3.pred[v][u]=d
        self.K3.adj=self.K3.succ
        self.K3.edge=self.K3.adj
        self.K3.node={}
        self.K3.node[0]={}
        self.K3.node[1]={}
        self.K3.node[2]={}


    def test_add_edge(self):
        G=self.Graph()
        G.add_edge(0,1)
        assert_equal(G.adj,{0: {1: {0:{}}}, 1: {}})
        assert_equal(G.succ,{0: {1: {0:{}}}, 1: {}})
        assert_equal(G.pred,{0: {}, 1: {0:{0:{}}}})
        G=self.Graph()
        G.add_edge(*(0,1))
        assert_equal(G.adj,{0: {1: {0:{}}}, 1: {}})
        assert_equal(G.succ,{0: {1: {0:{}}}, 1: {}})
        assert_equal(G.pred,{0: {}, 1: {0:{0:{}}}})

    def test_add_edges_from(self):
        G=self.Graph()
        G.add_edges_from([(0,1),(0,1,{'weight':3})])
        assert_equal(G.adj,{0: {1: {0:{},1:{'weight':3}}}, 1: {}})
        assert_equal(G.succ,{0: {1: {0:{},1:{'weight':3}}}, 1: {}})
        assert_equal(G.pred,{0: {}, 1: {0:{0:{},1:{'weight':3}}}})

        G.add_edges_from([(0,1),(0,1,{'weight':3})],weight=2)
        assert_equal(G.succ,{0: {1: {0:{},
                                     1:{'weight':3},
                                     2:{'weight':2},
                                     3:{'weight':3}}},
                             1: {}})
        assert_equal(G.pred,{0: {}, 1: {0:{0:{},1:{'weight':3},
                                           2:{'weight':2},
                                           3:{'weight':3}}}})

        assert_raises(networkx.NetworkXError, G.add_edges_from,[(0,)])  # too few in tuple
        assert_raises(networkx.NetworkXError, G.add_edges_from,[(0,1,2,3,4)])  # too many in tuple
        assert_raises(TypeError, G.add_edges_from,[0])  # not a tuple

    def test_remove_edge(self):
        G=self.K3
        G.remove_edge(0,1)
        assert_equal(G.succ,{0:{2:{0:{}}},
                             1:{0:{0:{}},2:{0:{}}},
                             2:{0:{0:{}},1:{0:{}}}})
        assert_equal(G.pred,{0:{1:{0:{}}, 2:{0:{}}},
                             1:{2:{0:{}}},
                             2:{0:{0:{}},1:{0:{}}}})
        assert_raises((KeyError,networkx.NetworkXError), G.remove_edge,-1,0)
        assert_raises((KeyError,networkx.NetworkXError), G.remove_edge,0,2,
                      key=1)


    def test_remove_multiedge(self):
        G=self.K3
        G.add_edge(0,1,key='parallel edge')
        G.remove_edge(0,1,key='parallel edge')
        assert_equal(G.adj,{0: {1: {0:{}}, 2: {0:{}}},
                           1: {0: {0:{}}, 2: {0:{}}},
                           2: {0: {0:{}}, 1: {0:{}}}})

        assert_equal(G.succ,{0: {1: {0:{}}, 2: {0:{}}},
                           1: {0: {0:{}}, 2: {0:{}}},
                           2: {0: {0:{}}, 1: {0:{}}}})

        assert_equal(G.pred,{0:{1: {0:{}},2:{0:{}}},
                             1:{0:{0:{}},2:{0:{}}},
                             2:{0:{0:{}},1:{0:{}}}})
        G.remove_edge(0,1)
        assert_equal(G.succ,{0:{2:{0:{}}},
                             1:{0:{0:{}},2:{0:{}}},
                             2:{0:{0:{}},1:{0:{}}}})
        assert_equal(G.pred,{0:{1:{0:{}}, 2:{0:{}}},
                             1:{2:{0:{}}},
                             2:{0:{0:{}},1:{0:{}}}})
        assert_raises((KeyError,networkx.NetworkXError), G.remove_edge,-1,0)

    def test_remove_edges_from(self):
        G=self.K3
        G.remove_edges_from([(0,1)])
        assert_equal(G.succ,{0:{2:{0:{}}},
                             1:{0:{0:{}},2:{0:{}}},
                             2:{0:{0:{}},1:{0:{}}}})
        assert_equal(G.pred,{0:{1:{0:{}}, 2:{0:{}}},
                             1:{2:{0:{}}},
                             2:{0:{0:{}},1:{0:{}}}})
        G.remove_edges_from([(0,0)]) # silent fail
The diff you're trying to view is too large. Only the first 1000 changed files have been loaded.
Showing with 0 additions and 0 deletions (0 / 0 diffs computed)
swh spinner

Computing file changes ...

back to top

Software Heritage — Copyright (C) 2015–2026, The Software Heritage developers. License: GNU AGPLv3+.
The source code of Software Heritage itself is available on our development forge.
The source code files archived by Software Heritage are available under their own copyright and licenses.
Terms of use: Archive access, API— Content policy— Contact— JavaScript license information— Web API