annotate service/mqtt_to_rdf/inference_functions.py @ 1695:5c2565e63297

take out some misduided fixes
author drewp@bigasterisk.com
date Mon, 27 Sep 2021 22:55:32 -0700
parents 7a61113fd17d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1662
7a61113fd17d new childResource function for making new URIs
drewp@bigasterisk.com
parents: 1658
diff changeset
1 """
7a61113fd17d new childResource function for making new URIs
drewp@bigasterisk.com
parents: 1658
diff changeset
2 Some of these are from https://www.w3.org/2000/10/swap/doc/CwmBuiltins
7a61113fd17d new childResource function for making new URIs
drewp@bigasterisk.com
parents: 1658
diff changeset
3 """
7a61113fd17d new childResource function for making new URIs
drewp@bigasterisk.com
parents: 1658
diff changeset
4 import urllib.parse
1658
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
5 from decimal import Decimal
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
6 from typing import Optional, cast
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
7
1662
7a61113fd17d new childResource function for making new URIs
drewp@bigasterisk.com
parents: 1658
diff changeset
8 from rdflib import Literal, Namespace, URIRef
1658
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
9
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
10 from candidate_binding import CandidateBinding
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
11 from lhs_evaluation import (ListFunction, SubjectFunction, SubjectObjectFunction, register)
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
12
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
13 MATH = Namespace('http://www.w3.org/2000/10/swap/math#')
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
14 ROOM = Namespace("http://projects.bigasterisk.com/room/")
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
15
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
16
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
17 @register
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
18 class Gt(SubjectObjectFunction):
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
19 pred = MATH['greaterThan']
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
20
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
21 def bind(self, existingBinding: CandidateBinding) -> Optional[CandidateBinding]:
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
22 [x, y] = self.getNumericOperands(existingBinding)
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
23 if x > y:
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
24 return CandidateBinding({}) # no new values; just allow matching to keep going
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
25
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
26
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
27 @register
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
28 class AsFarenheit(SubjectFunction):
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
29 pred = ROOM['asFarenheit']
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
30
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
31 def bind(self, existingBinding: CandidateBinding) -> Optional[CandidateBinding]:
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
32 [x] = self.getNumericOperands(existingBinding)
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
33 f = cast(Literal, Literal(Decimal(x) * 9 / 5 + 32))
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
34 return self.valueInObjectTerm(f)
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
35
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
36
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
37 @register
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
38 class Sum(ListFunction):
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
39 pred = MATH['sum']
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
40
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
41 def bind(self, existingBinding: CandidateBinding) -> Optional[CandidateBinding]:
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
42 f = Literal(sum(self.getNumericOperands(existingBinding)))
7ec2483d61b5 refactor inference_functions
drewp@bigasterisk.com
parents:
diff changeset
43 return self.valueInObjectTerm(f)
1662
7a61113fd17d new childResource function for making new URIs
drewp@bigasterisk.com
parents: 1658
diff changeset
44
7a61113fd17d new childResource function for making new URIs
drewp@bigasterisk.com
parents: 1658
diff changeset
45
7a61113fd17d new childResource function for making new URIs
drewp@bigasterisk.com
parents: 1658
diff changeset
46 @register
7a61113fd17d new childResource function for making new URIs
drewp@bigasterisk.com
parents: 1658
diff changeset
47 class ChildResource(ListFunction):
7a61113fd17d new childResource function for making new URIs
drewp@bigasterisk.com
parents: 1658
diff changeset
48 pred = ROOM['childResource']
7a61113fd17d new childResource function for making new URIs
drewp@bigasterisk.com
parents: 1658
diff changeset
49
7a61113fd17d new childResource function for making new URIs
drewp@bigasterisk.com
parents: 1658
diff changeset
50 def bind(self, existingBinding: CandidateBinding) -> Optional[CandidateBinding]:
7a61113fd17d new childResource function for making new URIs
drewp@bigasterisk.com
parents: 1658
diff changeset
51 ops = self.getOperandNodes(existingBinding)
7a61113fd17d new childResource function for making new URIs
drewp@bigasterisk.com
parents: 1658
diff changeset
52 if len(ops) != 2 or not isinstance(ops[0], URIRef) or not isinstance(ops[1], Literal):
7a61113fd17d new childResource function for making new URIs
drewp@bigasterisk.com
parents: 1658
diff changeset
53 raise ValueError(f'expected (?baseUri ?nextSegmentString) as subject to {self}')
7a61113fd17d new childResource function for making new URIs
drewp@bigasterisk.com
parents: 1658
diff changeset
54 newUri = URIRef(ops[0].rstrip('/') + '/' + urllib.parse.quote(ops[1].toPython(), safe=''))
7a61113fd17d new childResource function for making new URIs
drewp@bigasterisk.com
parents: 1658
diff changeset
55 return self.valueInObjectTerm(newUri)