Mercurial > code > home > repos > homeauto
annotate service/mqtt_to_rdf/candidate_binding.py @ 1610:6fc48ef4c696
mysteriously lost an important line
author | drewp@bigasterisk.com |
---|---|
date | Mon, 06 Sep 2021 18:07:28 -0700 |
parents | b21885181e35 |
children | bcfa368e5498 |
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 |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
2 from typing import Dict, Iterator |
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 |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
19 def apply(self, g: Graph) -> Iterator[Triple]: |
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: |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
22 bound = (self._applyTerm(stmt[0]), self._applyTerm(stmt[1]), self._applyTerm(stmt[2])) |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
23 except BindingUnknown: |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
24 continue |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
25 yield bound |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
26 |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
27 def _applyTerm(self, term: Node): |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
28 if isinstance(term, (Variable, BNode)): |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
29 if term in self.binding: |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
30 return self.binding[term] |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
31 else: |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
32 raise BindingUnknown() |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
33 return term |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
34 |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
35 def addNewBindings(self, newBindings: 'CandidateBinding'): |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
36 for k, v in newBindings.binding.items(): |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
37 if k in self.binding and self.binding[k] != v: |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
38 raise ValueError( |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
39 f'conflict- thought {k} would be {self.binding[k]} but another Evaluation said it should be {v}') |
b21885181e35
more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents:
diff
changeset
|
40 self.binding[k] = v |