annotate service/mqtt_to_rdf/candidate_binding.py @ 1619:e24058ae4806

support CB.apply(returnBoundStatementsOnly)
author drewp@bigasterisk.com
date Wed, 08 Sep 2021 18:39:12 -0700
parents bcfa368e5498
children bd79a2941cab
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1607
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
1 from dataclasses import dataclass
1615
bcfa368e5498 change a Graph.__sub__ to Set.difference in verify() for a big speedup
drewp@bigasterisk.com
parents: 1607
diff changeset
2 from typing import Dict, Iterable, Iterator, Union
1607
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
3
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
4 from prometheus_client import Summary
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
5 from rdflib import BNode, Graph
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
6 from rdflib.term import Node, Variable
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
7
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
8 from inference_types import BindableTerm, BindingUnknown, Triple
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
9
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
10
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
11 @dataclass
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
12 class CandidateBinding:
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
13 binding: Dict[BindableTerm, Node]
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
14
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
15 def __repr__(self):
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
16 b = " ".join("%s=%s" % (k, v) for k, v in sorted(self.binding.items()))
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
17 return f'CandidateBinding({b})'
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
18
1619
e24058ae4806 support CB.apply(returnBoundStatementsOnly)
drewp@bigasterisk.com
parents: 1615
diff changeset
19 def apply(self, g: Union[Graph, Iterable[Triple]], returnBoundStatementsOnly=True) -> Iterator[Triple]:
1607
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
20 for stmt in g:
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
21 try:
1619
e24058ae4806 support CB.apply(returnBoundStatementsOnly)
drewp@bigasterisk.com
parents: 1615
diff changeset
22 bound = (
e24058ae4806 support CB.apply(returnBoundStatementsOnly)
drewp@bigasterisk.com
parents: 1615
diff changeset
23 self._applyTerm(stmt[0], returnBoundStatementsOnly),
e24058ae4806 support CB.apply(returnBoundStatementsOnly)
drewp@bigasterisk.com
parents: 1615
diff changeset
24 self._applyTerm(stmt[1], returnBoundStatementsOnly),
e24058ae4806 support CB.apply(returnBoundStatementsOnly)
drewp@bigasterisk.com
parents: 1615
diff changeset
25 self._applyTerm(stmt[2], returnBoundStatementsOnly))
1607
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
26 except BindingUnknown:
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
27 continue
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
28 yield bound
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
29
1619
e24058ae4806 support CB.apply(returnBoundStatementsOnly)
drewp@bigasterisk.com
parents: 1615
diff changeset
30 def _applyTerm(self, term: Node, failUnbound=True):
1607
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
31 if isinstance(term, (Variable, BNode)):
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
32 if term in self.binding:
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
33 return self.binding[term]
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
34 else:
1619
e24058ae4806 support CB.apply(returnBoundStatementsOnly)
drewp@bigasterisk.com
parents: 1615
diff changeset
35 if failUnbound:
e24058ae4806 support CB.apply(returnBoundStatementsOnly)
drewp@bigasterisk.com
parents: 1615
diff changeset
36 raise BindingUnknown()
1607
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
37 return term
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
38
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
39 def addNewBindings(self, newBindings: 'CandidateBinding'):
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
40 for k, v in newBindings.binding.items():
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff changeset
41 if k in self.binding and self.binding[k] != v:
1615
bcfa368e5498 change a Graph.__sub__ to Set.difference in verify() for a big speedup
drewp@bigasterisk.com
parents: 1607
diff changeset
42 raise ValueError(f'conflict- thought {k} would be {self.binding[k]} but another Evaluation said it should be {v}')
bcfa368e5498 change a Graph.__sub__ to Set.difference in verify() for a big speedup
drewp@bigasterisk.com
parents: 1607
diff changeset
43 self.binding[k] = v