annotate service/mqtt_to_rdf/lhs_evaluation.py @ 1648:3059f31b2dfa

more performance work
author drewp@bigasterisk.com
date Fri, 17 Sep 2021 11:10:18 -0700
parents 4bb6f593ebf3
children 20474ad4968e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1637
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
1 from dataclasses import dataclass
1605
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
2 import logging
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
3 from decimal import Decimal
1637
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
4 from candidate_binding import CandidateBinding
1640
4bb6f593ebf3 speedups: abort some rules faster
drewp@bigasterisk.com
parents: 1637
diff changeset
5 from typing import Dict, Iterator, List, Optional, Set, Tuple, Type, Union, cast
1605
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
6
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
7 from prometheus_client import Summary
1636
3252bdc284bc rm dead code from previous tries
drewp@bigasterisk.com
parents: 1634
diff changeset
8 from rdflib import RDF, Literal, Namespace, URIRef
1637
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
9 from rdflib.graph import Graph
1648
3059f31b2dfa more performance work
drewp@bigasterisk.com
parents: 1640
diff changeset
10 from rdflib.term import BNode, Node, Variable
1605
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
11
1637
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
12 from inference_types import BindableTerm, Triple
1607
b21885181e35 more modules, types. Maybe less repeated computation on BoundLhs
drewp@bigasterisk.com
parents: 1605
diff changeset
13
1605
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
14 log = logging.getLogger('infer')
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
15
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
16 INDENT = ' '
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
17
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
18 ROOM = Namespace("http://projects.bigasterisk.com/room/")
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
19 LOG = Namespace('http://www.w3.org/2000/10/swap/log#')
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
20 MATH = Namespace('http://www.w3.org/2000/10/swap/math#')
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
21
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
22
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
23 def numericNode(n: Node):
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
24 if not isinstance(n, Literal):
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
25 raise TypeError(f'expected Literal, got {n=}')
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
26 val = n.toPython()
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
27 if not isinstance(val, (int, float, Decimal)):
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
28 raise TypeError(f'expected number, got {val=}')
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
29 return val
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
30
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
31
1634
ba59cfc3c747 hack math:sum in there. Test suite is passing except some slow performers
drewp@bigasterisk.com
parents: 1607
diff changeset
32 def parseList(graph, subj) -> Tuple[List[Node], Set[Triple]]:
1605
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
33 """"Do like Collection(g, subj) but also return all the
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
34 triples that are involved in the list"""
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
35 out = []
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
36 used = set()
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
37 cur = subj
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
38 while cur != RDF.nil:
1634
ba59cfc3c747 hack math:sum in there. Test suite is passing except some slow performers
drewp@bigasterisk.com
parents: 1607
diff changeset
39 elem = graph.value(cur, RDF.first)
ba59cfc3c747 hack math:sum in there. Test suite is passing except some slow performers
drewp@bigasterisk.com
parents: 1607
diff changeset
40 if elem is None:
ba59cfc3c747 hack math:sum in there. Test suite is passing except some slow performers
drewp@bigasterisk.com
parents: 1607
diff changeset
41 raise ValueError('bad list')
ba59cfc3c747 hack math:sum in there. Test suite is passing except some slow performers
drewp@bigasterisk.com
parents: 1607
diff changeset
42 out.append(elem)
1605
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
43 used.add((cur, RDF.first, out[-1]))
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
44
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
45 next = graph.value(cur, RDF.rest)
1634
ba59cfc3c747 hack math:sum in there. Test suite is passing except some slow performers
drewp@bigasterisk.com
parents: 1607
diff changeset
46 if next is None:
ba59cfc3c747 hack math:sum in there. Test suite is passing except some slow performers
drewp@bigasterisk.com
parents: 1607
diff changeset
47 raise ValueError('bad list')
1605
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
48 used.add((cur, RDF.rest, next))
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
49
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
50 cur = next
449746d1598f WIP move evaluation to new file
drewp@bigasterisk.com
parents:
diff changeset
51 return out, used
1637
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
52
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
53
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
54 registeredFunctionTypes: List[Type['Function']] = []
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
55
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
56
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
57 def register(cls: Type['Function']):
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
58 registeredFunctionTypes.append(cls)
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
59 return cls
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
60
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
61
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
62 class Function:
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
63 """any rule stmt that runs a function (not just a statement match)"""
1640
4bb6f593ebf3 speedups: abort some rules faster
drewp@bigasterisk.com
parents: 1637
diff changeset
64 pred: URIRef
1637
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
65
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
66 def __init__(self, stmt: Triple, ruleGraph: Graph):
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
67 self.stmt = stmt
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
68 if stmt[1] != self.pred:
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
69 raise TypeError
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
70 self.ruleGraph = ruleGraph
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
71
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
72 def getOperandNodes(self, existingBinding: CandidateBinding) -> List[Node]:
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
73 raise NotImplementedError
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
74
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
75 def getNumericOperands(self, existingBinding: CandidateBinding) -> List[Union[int, float, Decimal]]:
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
76 out = []
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
77 for op in self.getOperandNodes(existingBinding):
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
78 out.append(numericNode(op))
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
79
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
80 return out
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
81
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
82 def bind(self, existingBinding: CandidateBinding) -> Optional[CandidateBinding]:
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
83 """either any new bindings this function makes (could be 0), or None if it doesn't match"""
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
84 raise NotImplementedError
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
85
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
86 def valueInObjectTerm(self, value: Node) -> Optional[CandidateBinding]:
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
87 objVar = self.stmt[2]
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
88 if not isinstance(objVar, Variable):
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
89 raise TypeError(f'expected Variable, got {objVar!r}')
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
90 return CandidateBinding({cast(BindableTerm, objVar): value})
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
91
1648
3059f31b2dfa more performance work
drewp@bigasterisk.com
parents: 1640
diff changeset
92 def usedStatements(self) -> Set[Triple]:
3059f31b2dfa more performance work
drewp@bigasterisk.com
parents: 1640
diff changeset
93 '''stmts in self.graph (not including self.stmt, oddly) that are part of
3059f31b2dfa more performance work
drewp@bigasterisk.com
parents: 1640
diff changeset
94 this function setup and aren't to be matched literally'''
3059f31b2dfa more performance work
drewp@bigasterisk.com
parents: 1640
diff changeset
95 return set()
3059f31b2dfa more performance work
drewp@bigasterisk.com
parents: 1640
diff changeset
96
1637
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
97
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
98 class SubjectFunction(Function):
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
99 """function that depends only on the subject term"""
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
100
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
101 def getOperandNodes(self, existingBinding: CandidateBinding) -> List[Node]:
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
102 return [existingBinding.applyTerm(self.stmt[0])]
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
103
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
104
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
105 class SubjectObjectFunction(Function):
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
106 """a filter function that depends on the subject and object terms"""
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
107
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
108 def getOperandNodes(self, existingBinding: CandidateBinding) -> List[Node]:
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
109 return [existingBinding.applyTerm(self.stmt[0]), existingBinding.applyTerm(self.stmt[2])]
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
110
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
111
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
112 class ListFunction(Function):
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
113 """function that takes an rdf list as input"""
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
114
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
115 def usedStatements(self) -> Set[Triple]:
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
116 _, used = parseList(self.ruleGraph, self.stmt[0])
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
117 return used
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
118
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
119 def getOperandNodes(self, existingBinding: CandidateBinding) -> List[Node]:
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
120 operands, _ = parseList(self.ruleGraph, self.stmt[0])
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
121 return [existingBinding.applyTerm(x) for x in operands]
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
122
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
123
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
124 @register
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
125 class Gt(SubjectObjectFunction):
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
126 pred = MATH['greaterThan']
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
127
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
128 def bind(self, existingBinding: CandidateBinding) -> Optional[CandidateBinding]:
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
129 [x, y] = self.getNumericOperands(existingBinding)
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
130 if x > y:
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
131 return CandidateBinding({}) # no new values; just allow matching to keep going
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
132
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
133
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
134 @register
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
135 class AsFarenheit(SubjectFunction):
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
136 pred = ROOM['asFarenheit']
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
137
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
138 def bind(self, existingBinding: CandidateBinding) -> Optional[CandidateBinding]:
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
139 [x] = self.getNumericOperands(existingBinding)
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
140 f = cast(Literal, Literal(Decimal(x) * 9 / 5 + 32))
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
141 return self.valueInObjectTerm(f)
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
142
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
143
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
144 @register
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
145 class Sum(ListFunction):
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
146 pred = MATH['sum']
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
147
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
148 def bind(self, existingBinding: CandidateBinding) -> Optional[CandidateBinding]:
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
149 f = Literal(sum(self.getNumericOperands(existingBinding)))
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
150 return self.valueInObjectTerm(f)
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
151
1648
3059f31b2dfa more performance work
drewp@bigasterisk.com
parents: 1640
diff changeset
152 ### registration is done
1637
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
153
1640
4bb6f593ebf3 speedups: abort some rules faster
drewp@bigasterisk.com
parents: 1637
diff changeset
154 _byPred: Dict[URIRef, Type[Function]] = dict((cls.pred, cls) for cls in registeredFunctionTypes)
4bb6f593ebf3 speedups: abort some rules faster
drewp@bigasterisk.com
parents: 1637
diff changeset
155 def functionsFor(pred: URIRef) -> Iterator[Type[Function]]:
4bb6f593ebf3 speedups: abort some rules faster
drewp@bigasterisk.com
parents: 1637
diff changeset
156 try:
4bb6f593ebf3 speedups: abort some rules faster
drewp@bigasterisk.com
parents: 1637
diff changeset
157 yield _byPred[pred]
4bb6f593ebf3 speedups: abort some rules faster
drewp@bigasterisk.com
parents: 1637
diff changeset
158 except KeyError:
4bb6f593ebf3 speedups: abort some rules faster
drewp@bigasterisk.com
parents: 1637
diff changeset
159 return
4bb6f593ebf3 speedups: abort some rules faster
drewp@bigasterisk.com
parents: 1637
diff changeset
160
1637
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
161
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
162 def lhsStmtsUsedByFuncs(graph: Graph) -> Set[Triple]:
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
163 usedByFuncs: Set[Triple] = set() # don't worry about matching these
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
164 for s in graph:
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
165 for cls in functionsFor(pred=s[1]):
1648
3059f31b2dfa more performance work
drewp@bigasterisk.com
parents: 1640
diff changeset
166 usedByFuncs.update(cls(s, graph).usedStatements())
1637
ec3f98d0c1d8 refactor rules eval
drewp@bigasterisk.com
parents: 1636
diff changeset
167 return usedByFuncs
1640
4bb6f593ebf3 speedups: abort some rules faster
drewp@bigasterisk.com
parents: 1637
diff changeset
168
4bb6f593ebf3 speedups: abort some rules faster
drewp@bigasterisk.com
parents: 1637
diff changeset
169
4bb6f593ebf3 speedups: abort some rules faster
drewp@bigasterisk.com
parents: 1637
diff changeset
170 def rulePredicates() -> Set[URIRef]:
4bb6f593ebf3 speedups: abort some rules faster
drewp@bigasterisk.com
parents: 1637
diff changeset
171 return set(c.pred for c in registeredFunctionTypes)