Mercurial > code > home > repos > homeauto
annotate service/mqtt_to_rdf/candidate_binding.py @ 1632:bd79a2941cab
just (a lot of) debug changes
author | drewp@bigasterisk.com |
---|---|
date | Sun, 12 Sep 2021 21:46:39 -0700 |
parents | e24058ae4806 |
children | ba59cfc3c747 |
rev | line source |
---|---|
1632 | 1 import logging |
1607
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
2 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
|
3 from typing import Dict, Iterable, Iterator, Union |
1607
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
4 |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
5 from prometheus_client import Summary |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
6 from rdflib import BNode, Graph |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
7 from rdflib.term import Node, Variable |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
8 |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
9 from inference_types import BindableTerm, BindingUnknown, Triple |
1632 | 10 log = logging.getLogger() |
11 INDENT = ' ' | |
1607
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
12 |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
13 @dataclass |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
14 class CandidateBinding: |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
15 binding: Dict[BindableTerm, Node] |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
16 |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
17 def __repr__(self): |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
18 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
|
19 return f'CandidateBinding({b})' |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
20 |
1619
e24058ae4806
support CB.apply(returnBoundStatementsOnly)
drewp@bigasterisk.com
parents:
1615
diff
changeset
|
21 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
|
22 for stmt in g: |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
23 try: |
1619
e24058ae4806
support CB.apply(returnBoundStatementsOnly)
drewp@bigasterisk.com
parents:
1615
diff
changeset
|
24 bound = ( |
e24058ae4806
support CB.apply(returnBoundStatementsOnly)
drewp@bigasterisk.com
parents:
1615
diff
changeset
|
25 self._applyTerm(stmt[0], returnBoundStatementsOnly), |
e24058ae4806
support CB.apply(returnBoundStatementsOnly)
drewp@bigasterisk.com
parents:
1615
diff
changeset
|
26 self._applyTerm(stmt[1], returnBoundStatementsOnly), |
e24058ae4806
support CB.apply(returnBoundStatementsOnly)
drewp@bigasterisk.com
parents:
1615
diff
changeset
|
27 self._applyTerm(stmt[2], returnBoundStatementsOnly)) |
1607
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
28 except BindingUnknown: |
1632 | 29 log.debug(f'{INDENT*7} CB.apply cant bind {stmt} using {self.binding}') |
30 | |
1607
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
31 continue |
1632 | 32 log.debug(f'{INDENT*7} CB.apply took {stmt} to {bound}') |
33 | |
1607
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
34 yield bound |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
35 |
1619
e24058ae4806
support CB.apply(returnBoundStatementsOnly)
drewp@bigasterisk.com
parents:
1615
diff
changeset
|
36 def _applyTerm(self, term: Node, failUnbound=True): |
1607
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
37 if isinstance(term, (Variable, BNode)): |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
38 if term in self.binding: |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
39 return self.binding[term] |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
40 else: |
1619
e24058ae4806
support CB.apply(returnBoundStatementsOnly)
drewp@bigasterisk.com
parents:
1615
diff
changeset
|
41 if failUnbound: |
e24058ae4806
support CB.apply(returnBoundStatementsOnly)
drewp@bigasterisk.com
parents:
1615
diff
changeset
|
42 raise BindingUnknown() |
1607
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
43 return term |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
44 |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
45 def addNewBindings(self, newBindings: 'CandidateBinding'): |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
46 for k, v in newBindings.binding.items(): |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
47 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
|
48 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
|
49 self.binding[k] = v |