annotate service/mqtt_to_rdf/inference_functions.py @ 1658:7ec2483d61b5

refactor inference_functions
author drewp@bigasterisk.com
date Sun, 19 Sep 2021 13:33:10 -0700
parents
children 7a61113fd17d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1658
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
1 from decimal import Decimal
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
2 from typing import Optional, cast
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
3
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
4 from rdflib import Literal, Namespace
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
5
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
6 from candidate_binding import CandidateBinding
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
7 from lhs_evaluation import (ListFunction, SubjectFunction, SubjectObjectFunction, register)
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
8
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
9 MATH = Namespace('http://www.w3.org/2000/10/swap/math#')
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
10 ROOM = Namespace("http://projects.bigasterisk.com/room/")
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
11
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
12
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
13 @register
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
14 class Gt(SubjectObjectFunction):
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
15 pred = MATH['greaterThan']
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
16
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
17 def bind(self, existingBinding: CandidateBinding) -> Optional[CandidateBinding]:
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
18 [x, y] = self.getNumericOperands(existingBinding)
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
19 if x > y:
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
20 return CandidateBinding({}) # no new values; just allow matching to keep going
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
21
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
22
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
23 @register
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
24 class AsFarenheit(SubjectFunction):
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
25 pred = ROOM['asFarenheit']
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
26
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
27 def bind(self, existingBinding: CandidateBinding) -> Optional[CandidateBinding]:
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
28 [x] = self.getNumericOperands(existingBinding)
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
29 f = cast(Literal, Literal(Decimal(x) * 9 / 5 + 32))
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
30 return self.valueInObjectTerm(f)
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
31
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
32
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
33 @register
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
34 class Sum(ListFunction):
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
35 pred = MATH['sum']
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
36
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
37 def bind(self, existingBinding: CandidateBinding) -> Optional[CandidateBinding]:
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
38 f = Literal(sum(self.getNumericOperands(existingBinding)))
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
39 return self.valueInObjectTerm(f)