diff env/lib/python3.7/site-packages/rdflib/tools/graphisomorphism.py @ 5:9b1c78e6ba9c draft default tip

"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author shellac
date Mon, 01 Jun 2020 08:59:25 -0400
parents 79f47841a781
children
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/rdflib/tools/graphisomorphism.py	Thu May 14 16:47:39 2020 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-"""
-A commandline tool for testing if RDF graphs are isomorpic, i.e. equal
-if BNode labels are ignored.
-"""
-
-from rdflib.graph import Graph
-from rdflib import BNode
-try:
-    from itertools import combinations
-    assert combinations
-except ImportError:  # Python == 2.5
-    # Copied from
-    # http://docs.python.org/2/library/itertools.html#itertools.combinations
-    def combinations(iterable, r):
-        # combinations('ABCD', 2) --> AB AC AD BC BD CD
-        # combinations(range(4), 3) --> 012 013 023 123
-        pool = tuple(iterable)
-        n = len(pool)
-        if r > n:
-            return
-        indices = list(range(r))
-        yield tuple(pool[i] for i in indices)
-        while True:
-            for i in reversed(list(range(r))):
-                if indices[i] != i + n - r:
-                    break
-            else:
-                return
-            indices[i] += 1
-            for j in range(i + 1, r):
-                indices[j] = indices[j - 1] + 1
-            yield tuple(pool[i] for i in indices)
-
-
-class IsomorphicTestableGraph(Graph):
-    """
-    Ported from:
-    http://www.w3.org/2001/sw/DataAccess/proto-tests/tools/rdfdiff.py
-    (Sean B Palmer's RDF Graph Isomorphism Tester)
-    """
-    def __init__(self, **kargs):
-        super(IsomorphicTestableGraph, self).__init__(**kargs)
-        self.hash = None
-
-    def internal_hash(self):
-        """
-        This is defined instead of __hash__ to avoid a circular recursion
-        scenario with the Memory store for rdflib which requires a hash
-        lookup in order to return a generator of triples
-        """
-        return hash(tuple(sorted(self.hashtriples())))
-
-    def hashtriples(self):
-        for triple in self:
-            g = ((isinstance(t, BNode) and self.vhash(t)) or t for t in triple)
-            yield hash(tuple(g))
-
-    def vhash(self, term, done=False):
-        return tuple(sorted(self.vhashtriples(term, done)))
-
-    def vhashtriples(self, term, done):
-        for t in self:
-            if term in t:
-                yield tuple(self.vhashtriple(t, term, done))
-
-    def vhashtriple(self, triple, term, done):
-        for p in range(3):
-            if not isinstance(triple[p], BNode):
-                yield triple[p]
-            elif done or (triple[p] == term):
-                yield p
-            else:
-                yield self.vhash(triple[p], done=True)
-
-    def __eq__(self, G):
-        """Graph isomorphism testing."""
-        if not isinstance(G, IsomorphicTestableGraph):
-            return False
-        elif len(self) != len(G):
-            return False
-        elif list.__eq__(list(self), list(G)):
-            return True  # @@
-        return self.internal_hash() == G.internal_hash()
-
-    def __ne__(self, G):
-        """Negative graph isomorphism testing."""
-        return not self.__eq__(G)
-
-
-def main():
-    import sys
-    from optparse import OptionParser
-    usage = '''usage: %prog [options] file1 file2 ... fileN'''
-    op = OptionParser(usage=usage)
-    op.add_option('-s', '--stdin', action='store_true', default=False,
-                  help='Load from STDIN as well')
-    op.add_option('--format',
-                  default='xml',
-                  dest='inputFormat',
-                  metavar='RDF_FORMAT',
-                  choices=['xml', 'trix', 'n3', 'nt', 'rdfa'],
-                  help="The format of the RDF document(s) to compare" +
-                  "One of 'xml','n3','trix', 'nt', " +
-                  "or 'rdfa'.  The default is %default")
-
-    (options, args) = op.parse_args()
-
-    graphs = []
-    graph2FName = {}
-    if options.stdin:
-        graph = IsomorphicTestableGraph().parse(
-            sys.stdin, format=options.inputFormat)
-        graphs.append(graph)
-        graph2FName[graph] = '(STDIN)'
-    for fn in args:
-        graph = IsomorphicTestableGraph().parse(
-            fn, format=options.inputFormat)
-        graphs.append(graph)
-        graph2FName[graph] = fn
-    checked = set()
-    for graph1, graph2 in combinations(graphs, 2):
-        if (graph1, graph2) not in checked and (graph2, graph1) not in checked:
-            assert graph1 == graph2, "%s != %s" % (
-                graph2FName[graph1], graph2FName[graph2])
-
-if __name__ == '__main__':
-    main()