summaryrefslogtreecommitdiff
path: root/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/isomorph.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/isomorph.py')
-rw-r--r--lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/isomorph.py227
1 files changed, 0 insertions, 227 deletions
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/isomorph.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/isomorph.py
deleted file mode 100644
index 7de3308..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/isomorph.py
+++ /dev/null
@@ -1,227 +0,0 @@
-"""
-Graph isomorphism functions.
-"""
-import networkx as nx
-from networkx.exception import NetworkXError
-__author__ = """\n""".join(['Aric Hagberg (hagberg@lanl.gov)',
- 'Pieter Swart (swart@lanl.gov)',
- 'Christopher Ellison cellison@cse.ucdavis.edu)'])
-# Copyright (C) 2004-2011 by
-# Aric Hagberg <hagberg@lanl.gov>
-# Dan Schult <dschult@colgate.edu>
-# Pieter Swart <swart@lanl.gov>
-# All rights reserved.
-# BSD license.
-__all__ = ['could_be_isomorphic',
- 'fast_could_be_isomorphic',
- 'faster_could_be_isomorphic',
- 'is_isomorphic']
-
-def could_be_isomorphic(G1,G2):
- """Returns False if graphs are definitely not isomorphic.
- True does NOT guarantee isomorphism.
-
- Parameters
- ----------
- G1, G2 : graphs
- The two graphs G1 and G2 must be the same type.
-
- Notes
- -----
- Checks for matching degree, triangle, and number of cliques sequences.
- """
-
- # Check global properties
- if G1.order() != G2.order(): return False
-
- # Check local properties
- d1=G1.degree()
- t1=nx.triangles(G1)
- c1=nx.number_of_cliques(G1)
- props1=[ [d1[v], t1[v], c1[v]] for v in d1 ]
- props1.sort()
-
- d2=G2.degree()
- t2=nx.triangles(G2)
- c2=nx.number_of_cliques(G2)
- props2=[ [d2[v], t2[v], c2[v]] for v in d2 ]
- props2.sort()
-
- if props1 != props2:
- return False
-
- # OK...
- return True
-
-graph_could_be_isomorphic=could_be_isomorphic
-
-def fast_could_be_isomorphic(G1,G2):
- """Returns False if graphs are definitely not isomorphic.
-
- True does NOT guarantee isomorphism.
-
- Parameters
- ----------
- G1, G2 : graphs
- The two graphs G1 and G2 must be the same type.
-
- Notes
- -----
- Checks for matching degree and triangle sequences.
- """
- # Check global properties
- if G1.order() != G2.order(): return False
-
- # Check local properties
- d1=G1.degree()
- t1=nx.triangles(G1)
- props1=[ [d1[v], t1[v]] for v in d1 ]
- props1.sort()
-
- d2=G2.degree()
- t2=nx.triangles(G2)
- props2=[ [d2[v], t2[v]] for v in d2 ]
- props2.sort()
-
- if props1 != props2: return False
-
- # OK...
- return True
-
-fast_graph_could_be_isomorphic=fast_could_be_isomorphic
-
-def faster_could_be_isomorphic(G1,G2):
- """Returns False if graphs are definitely not isomorphic.
-
- True does NOT guarantee isomorphism.
-
- Parameters
- ----------
- G1, G2 : graphs
- The two graphs G1 and G2 must be the same type.
-
- Notes
- -----
- Checks for matching degree sequences.
- """
- # Check global properties
- if G1.order() != G2.order(): return False
-
- # Check local properties
- d1=list(G1.degree().values())
- d1.sort()
- d2=list(G2.degree().values())
- d2.sort()
-
- if d1 != d2: return False
-
- # OK...
- return True
-
-faster_graph_could_be_isomorphic=faster_could_be_isomorphic
-
-def is_isomorphic(G1, G2, node_match=None, edge_match=None):
- """Returns True if the graphs G1 and G2 are isomorphic and False otherwise.
-
- Parameters
- ----------
- G1, G2: graphs
- The two graphs G1 and G2 must be the same type.
-
- node_match : callable
- A function that returns True if node n1 in G1 and n2 in G2 should
- be considered equal during the isomorphism test.
- If node_match is not specified then node attributes are not considered.
-
- The function will be called like
-
- node_match(G1.node[n1], G2.node[n2]).
-
- That is, the function will receive the node attribute dictionaries
- for n1 and n2 as inputs.
-
- edge_match : callable
- A function that returns True if the edge attribute dictionary
- for the pair of nodes (u1, v1) in G1 and (u2, v2) in G2 should
- be considered equal during the isomorphism test. If edge_match is
- not specified then edge attributes are not considered.
-
- The function will be called like
-
- edge_match(G1[u1][v1], G2[u2][v2]).
-
- That is, the function will receive the edge attribute dictionaries
- of the edges under consideration.
-
- Notes
- -----
- Uses the vf2 algorithm [1]_.
-
- Examples
- --------
- >>> import networkx.algorithms.isomorphism as iso
-
- For digraphs G1 and G2, using 'weight' edge attribute (default: 1)
-
- >>> G1 = nx.DiGraph()
- >>> G2 = nx.DiGraph()
- >>> G1.add_path([1,2,3,4],weight=1)
- >>> G2.add_path([10,20,30,40],weight=2)
- >>> em = iso.numerical_edge_match('weight', 1)
- >>> nx.is_isomorphic(G1, G2) # no weights considered
- True
- >>> nx.is_isomorphic(G1, G2, edge_match=em) # match weights
- False
-
- For multidigraphs G1 and G2, using 'fill' node attribute (default: '')
-
- >>> G1 = nx.MultiDiGraph()
- >>> G2 = nx.MultiDiGraph()
- >>> G1.add_nodes_from([1,2,3],fill='red')
- >>> G2.add_nodes_from([10,20,30,40],fill='red')
- >>> G1.add_path([1,2,3,4],weight=3, linewidth=2.5)
- >>> G2.add_path([10,20,30,40],weight=3)
- >>> nm = iso.categorical_node_match('fill', 'red')
- >>> nx.is_isomorphic(G1, G2, node_match=nm)
- True
-
- For multidigraphs G1 and G2, using 'weight' edge attribute (default: 7)
-
- >>> G1.add_edge(1,2, weight=7)
- >>> G2.add_edge(10,20)
- >>> em = iso.numerical_multiedge_match('weight', 7, rtol=1e-6)
- >>> nx.is_isomorphic(G1, G2, edge_match=em)
- True
-
- For multigraphs G1 and G2, using 'weight' and 'linewidth' edge attributes
- with default values 7 and 2.5. Also using 'fill' node attribute with
- default value 'red'.
-
- >>> em = iso.numerical_multiedge_match(['weight', 'linewidth'], [7, 2.5])
- >>> nm = iso.categorical_node_match('fill', 'red')
- >>> nx.is_isomorphic(G1, G2, edge_match=em, node_match=nm)
- True
-
- See Also
- --------
- numerical_node_match, numerical_edge_match, numerical_multiedge_match
- categorical_node_match, categorical_edge_match, categorical_multiedge_match
-
- References
- ----------
- .. [1] L. P. Cordella, P. Foggia, C. Sansone, M. Vento,
- "An Improved Algorithm for Matching Large Graphs",
- 3rd IAPR-TC15 Workshop on Graph-based Representations in
- Pattern Recognition, Cuen, pp. 149-159, 2001.
- http://amalfi.dis.unina.it/graph/db/papers/vf-algorithm.pdf
- """
- if G1.is_directed() and G2.is_directed():
- GM = nx.algorithms.isomorphism.DiGraphMatcher
- elif (not G1.is_directed()) and (not G2.is_directed()):
- GM = nx.algorithms.isomorphism.GraphMatcher
- else:
- raise NetworkXError("Graphs G1 and G2 are not of the same type.")
-
- gm = GM(G1, G2, node_match=node_match, edge_match=edge_match)
-
- return gm.is_isomorphic()