Mercurial > code > home > repos > homeauto
annotate service/reasoning/inference.py @ 795:c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
author | drewp@bigasterisk.com |
---|---|
date | Sun, 27 Dec 2020 03:29:18 -0800 |
parents | f3f667769aef |
children | 6b80a6c58907 |
rev | line source |
---|---|
20
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
1 """ |
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
2 see ./reasoning for usage |
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
3 """ |
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
4 |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
5 import contextlib |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
6 import os |
756
f3f667769aef
python 3! and some types and cleanups
drewp@bigasterisk.com
parents:
288
diff
changeset
|
7 |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
8 from prometheus_client import Summary |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
9 from rdflib import Graph, Namespace |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
10 from rdflib.graph import ConjunctiveGraph |
284
95f72a22965d
rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents:
281
diff
changeset
|
11 from rdflib.parser import StringInputSource |
20
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
12 |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
13 from escapeoutputstatements import escapeOutputStatements |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
14 |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
15 READ_RULES_CALLS = Summary('read_rules_calls', 'calls') |
284
95f72a22965d
rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents:
281
diff
changeset
|
16 |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
17 ROOM = Namespace("http://projects.bigasterisk.com/room/") |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
18 LOG = Namespace('http://www.w3.org/2000/10/swap/log#') |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
19 |
284
95f72a22965d
rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents:
281
diff
changeset
|
20 |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
21 def _loadAndEscape(ruleStore: ConjunctiveGraph, n3: bytes, outputPatterns): |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
22 ruleStore.parse(StringInputSource(n3), format='n3') |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
23 return |
287
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
24 ruleGraph = Graph(ruleStore) |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
25 |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
26 # Can't escapeOutputStatements in the ruleStore since it |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
27 # doesn't support removals. Can't copy plainGraph into |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
28 # ruleGraph since something went wrong with traversing the |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
29 # triples inside quoted graphs, and I lose all the bodies |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
30 # of my rules. This serialize/parse version is very slow (400ms), |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
31 # but it only runs when the file changes. |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
32 plainGraph = Graph() |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
33 plainGraph.parse(StringInputSource(n3.encode('utf8')), format='n3') # for inference |
287
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
34 escapeOutputStatements(plainGraph, outputPatterns=outputPatterns) |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
35 expandedN3 = plainGraph.serialize(format='n3') |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
36 |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
37 ruleGraph.parse(StringInputSource(expandedN3), format='n3') |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
38 |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
39 |
284
95f72a22965d
rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents:
281
diff
changeset
|
40 _rulesCache = (None, None, None, None) |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
41 |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
42 |
284
95f72a22965d
rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents:
281
diff
changeset
|
43 def readRules(rulesPath, outputPatterns): |
95f72a22965d
rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents:
281
diff
changeset
|
44 """ |
287
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
45 returns (rulesN3, ruleStore) |
284
95f72a22965d
rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents:
281
diff
changeset
|
46 |
95f72a22965d
rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents:
281
diff
changeset
|
47 This includes escaping certain statements in the output |
95f72a22965d
rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents:
281
diff
changeset
|
48 (implied) subgraaphs so they're not confused with input |
95f72a22965d
rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents:
281
diff
changeset
|
49 statements. |
95f72a22965d
rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents:
281
diff
changeset
|
50 """ |
95f72a22965d
rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents:
281
diff
changeset
|
51 global _rulesCache |
95f72a22965d
rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents:
281
diff
changeset
|
52 |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
53 with READ_RULES_CALLS.time(): |
287
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
54 mtime = os.path.getmtime(rulesPath) |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
55 key = (rulesPath, mtime) |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
56 if _rulesCache[:2] == key: |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
57 _, _, rulesN3, ruleStore = _rulesCache |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
58 else: |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
59 rulesN3 = open(rulesPath, 'rb').read() # for web display |
284
95f72a22965d
rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents:
281
diff
changeset
|
60 |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
61 ruleStore = ConjunctiveGraph() |
287
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
62 _loadAndEscape(ruleStore, rulesN3, outputPatterns) |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
63 log.debug('%s rules' % len(ruleStore)) |
756
f3f667769aef
python 3! and some types and cleanups
drewp@bigasterisk.com
parents:
288
diff
changeset
|
64 |
287
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
65 _rulesCache = key + (rulesN3, ruleStore) |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
66 return rulesN3, ruleStore |
284
95f72a22965d
rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents:
281
diff
changeset
|
67 |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
68 |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
69 def infer(graph: ConjunctiveGraph, rules: ConjunctiveGraph): |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
70 """ |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
71 returns new graph of inferred statements. |
20
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
72 """ |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
73 log.info(f'Begin inference of graph len={len(graph)} with rules len={len(rules)}:') |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
74 |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
75 workingSet = ConjunctiveGraph() |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
76 workingSet.addN(graph.quads()) |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
77 |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
78 implied = ConjunctiveGraph() |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
79 |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
80 delta = 1 |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
81 while delta > 0: |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
82 delta = -len(implied) |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
83 |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
84 for r in rules: |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
85 if r[1] == LOG['implies']: |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
86 containsSetup = all(st in workingSet for st in r[0]) |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
87 if containsSetup: |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
88 log.info(f' Rule {r[0]} -> present={containsSetup}') |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
89 for st in r[0]: |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
90 log.info(f' {st[0].n3()} {st[1].n3()} {st[2].n3()}') |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
91 |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
92 log.info(f' ...implies {len(r[2])} statements') |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
93 if containsSetup: |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
94 for st in r[2]: |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
95 workingSet.add(st) |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
96 implied.add(st) |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
97 else: |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
98 log.info(f' {r}') |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
99 delta += len(implied) |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
100 log.info(f' this inference round added {delta} more implied stmts') |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
101 log.info(f'{len(implied)} stmts implied:') |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
102 for st in implied: |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
103 log.info(f' {st}') |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
104 return implied |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
105 |
20
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
106 # based on fuxi/tools/rdfpipe.py |
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
107 target = Graph() |
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
108 tokenSet = generateTokenSet(graph) |
287
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
109 with _dontChangeRulesStore(rules): |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
110 network = ReteNetwork(rules, inferredTarget=target) |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
111 network.feedFactsToAdd(tokenSet) |
756
f3f667769aef
python 3! and some types and cleanups
drewp@bigasterisk.com
parents:
288
diff
changeset
|
112 |
20
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
113 return target |
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
114 |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
115 |
287
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
116 @contextlib.contextmanager |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
117 def _dontChangeRulesStore(rules): |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
118 if not hasattr(rules, '_stashOriginalRules'): |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
119 rules._stashOriginalRules = rules.rules[:] |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
120 yield |
756
f3f667769aef
python 3! and some types and cleanups
drewp@bigasterisk.com
parents:
288
diff
changeset
|
121 for k in list(rules.formulae.keys()): |
287
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
122 if not k.startswith('_:Formula'): |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
123 del rules.formulae[k] |
3b61c0dfaaef
switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents:
284
diff
changeset
|
124 rules.rules = rules._stashOriginalRules[:] |
756
f3f667769aef
python 3! and some types and cleanups
drewp@bigasterisk.com
parents:
288
diff
changeset
|
125 |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
126 |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
127 import logging |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
128 import time |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
129 |
20
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
130 log = logging.getLogger() |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
131 |
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
132 |
20
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
133 def logTime(func): |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
134 |
20
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
135 def inner(*args, **kw): |
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
136 t1 = time.time() |
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
137 try: |
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
138 ret = func(*args, **kw) |
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
139 finally: |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
140 log.info("Call to %s took %.1f ms" % (func.__name__, 1000 * (time.time() - t1))) |
20
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
141 return ret |
795
c8562ace4917
big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents:
756
diff
changeset
|
142 |
20
3f0dd03112b5
move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff
changeset
|
143 return inner |