Skip to content

Commit 214fec6

Browse files
committed
Rem debug
1 parent 8cb7baa commit 214fec6

3 files changed

Lines changed: 108 additions & 56 deletions

File tree

examples/circumscription_ex.py

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
pr.load_graph(g)
2424

25-
pr.add_minimized_predicate('hackerControl')
25+
#pr.add_minimized_predicate('hackerControl')
2626
# pr.add_fact(pr.Fact('stepFrom(cb_1, cb_2)', 'step_from_fact', 0, 1))
2727
# pr.add_fact(pr.Fact('hackerControl(cb_1)', 'hacker_control_initial_fact', 0,0))
2828
# pr.add_fact(pr.Fact('hackerControl(cb_2):[0,1]'))
@@ -38,7 +38,61 @@
3838
pr.add_rule(pr.Rule('future(Y) <-1 stepFrom(X,Y), hackerControl(X)'))
3939
pr.add_rule(pr.Rule('hackerControl(Y) <-1 hackerControl(X), hasLabel(X,L1), hasLabel(Y,L2), cond(L1, L2), stepFrom(X,Y)', 'hacker-control-rule'))
4040
pr.add_rule(pr.Rule('hackerControl(Y) <-1 hackerControl(X), hasLabel(X,L1), hasLabel(Y,L2), cond_1(L1, L2), stepFrom(X,Y)', 'hacker-control-rule-1'))
41-
pr.add_rule(pr.Rule('~stepFrom(X,Y) <- future(Y), ~hackerControl(Y), ~hackerControl(X)', 'inconsistent_rule'))
41+
pr.add_rule(pr.Rule('inconsistent(Y) <- future(Y), ~hackerControl(Y), ~hackerControl(X)', 'inconsistent_rule'))
42+
#pr.add_rule(pr.Rule('~stepFrom(X,Y) <- future(Y), ~hackerControl(Y), ~hackerControl(X)', 'inconsistent_rule'))
43+
44+
45+
46+
interpretation = pr.reason(timesteps=2)
47+
interp_dict = interpretation.get_dict()
48+
49+
pprint(interp_dict)
50+
51+
# Filter and sort nodes based on hackerControl
52+
dataframes = pr.filter_and_sort_nodes(interpretation, ['hackerControl'])
53+
for t, df in enumerate(dataframes):
54+
print(f'TIMESTEP - {t}')
55+
print(df)
56+
print()
57+
58+
# Filter and sort edges based on inconsistent
59+
edge_dataframes = pr.filter_and_sort_nodes(interpretation, ['inconsistent'])
60+
for t, df in enumerate(edge_dataframes):
61+
print(f'TIMESTEP - {t} (inconsistent nodes)')
62+
print(df)
63+
print()
64+
65+
66+
pr.reset()
67+
pr.reset_rules()
68+
69+
g = nx.DiGraph()
70+
71+
g.add_nodes_from(['cb_1', 'cb_2', 'l1', 'l2'])
72+
#g.add_edge('cb_1', 'cb_2', stepFrom =1)
73+
g.add_edge('cb_1', 'l1', hasLabel = 1)
74+
g.add_edge('cb_2', 'l2', hasLabel = 1)
75+
#g.add_edge('l1','l2', cond=1)
76+
#g.add_edge('l1','l2', cond_1=1)
77+
78+
79+
80+
pr.settings.verbose = True
81+
pr.settings.atom_trace = True
82+
pr.settings.inconsistency_check = True
83+
84+
pr.load_graph(g)
85+
86+
87+
pr.add_minimized_predicate('hackerControl')
88+
pr.add_fact(pr.Fact('stepFrom(cb_1, cb_2)', 'step_from_fact', 0, 1))
89+
pr.add_fact(pr.Fact('hackerControl(cb_1)', 'hacker_control_initial_fact'))
90+
#pr.add_fact(pr.Fact('hackerControl(cb_2):[0,1]'))
91+
pr.add_rule(pr.Rule('future(Y) <-1 stepFrom(X,Y), hackerControl(X)'))
92+
pr.add_rule(pr.Rule('hackerControl(Y) <-1 hackerControl(X), hasLabel(X,L1), hasLabel(Y,L2), cond(L1, L2), stepFrom(X,Y)', 'hacker-control-rule'))
93+
pr.add_rule(pr.Rule('hackerControl(Y) <-1 hackerControl(X), hasLabel(X,L1), hasLabel(Y,L2), cond_1(L1, L2), stepFrom(X,Y)', 'hacker-control-rule-1'))
94+
pr.add_rule(pr.Rule('inconsistent(Y) <- future(Y), ~hackerControl(Y), ~hackerControl(X)', 'inconsistent_rule'))
95+
#pr.add_rule(pr.Rule('~stepFrom(X,Y) <- future(Y), ~hackerControl(Y), ~hackerControl(X)', 'inconsistent_rule'))
4296

4397

4498

@@ -61,5 +115,3 @@
61115
print(df)
62116
print()
63117

64-
# Save rule trace CSVs
65-
pr.save_rule_trace(interpretation)

pyreason/scripts/interpretation/interpretation.py

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1713,31 +1713,31 @@ def is_satisfied_node(interpretations, comp, na, minimized_predicates):
17131713
# This is to prevent a key error in case the label is a specific label
17141714
try:
17151715
world = interpretations[comp]
1716-
print('--- is_satisfied_node ---')
1717-
print(' node:', comp)
1718-
print(' checking label:', na[0].get_value())
1719-
print(' clause bound: [', float_to_str(na[1].l), ',', float_to_str(na[1].u), ']')
1720-
print(' world keys:')
1721-
for k in world.world.keys():
1722-
print(' ', k.get_value(), '= [', float_to_str(world.world[k].l), ',', float_to_str(world.world[k].u), ']')
1716+
# print('--- is_satisfied_node ---')
1717+
# print(' node:', comp)
1718+
# print(' checking label:', na[0].get_value())
1719+
# print(' clause bound: [', float_to_str(na[1].l), ',', float_to_str(na[1].u), ']')
1720+
# print(' world keys:')
1721+
# for k in world.world.keys():
1722+
# print(' ', k.get_value(), '= [', float_to_str(world.world[k].l), ',', float_to_str(world.world[k].u), ']')
17231723
# Minimized predicate check
17241724
if na[0] in minimized_predicates:
17251725
if na[0] not in world.world:
17261726
# Label not in world — missing = unknown [0,1] = treat as [0,0]
1727-
print(' MINIMIZED (label not in world): treating as [0,0]')
1727+
# print(' MINIMIZED (label not in world): treating as [0,0]')
17281728
result = interval.closed(0, 0) in na[1]
1729-
print(' result:', result)
1729+
# print(' result:', result)
17301730
return result
17311731
world_bnd = world.world[na[0]]
17321732
if world_bnd.lower == 0.0 and world_bnd.upper == 1.0:
1733-
print(' MINIMIZED: world bound [0,1] -> treating as [0,0]')
1733+
# print(' MINIMIZED: world bound [0,1] -> treating as [0,0]')
17341734
result = interval.closed(0, 0) in na[1]
1735-
print(' result:', result)
1735+
# print(' result:', result)
17361736
return result
17371737
result = world.is_satisfied(na[0], na[1])
1738-
print(' result:', result)
1738+
# print(' result:', result)
17391739
except Exception:
1740-
print(' EXCEPTION (label not in world) -> False')
1740+
# print(' EXCEPTION (label not in world) -> False')
17411741
result = False
17421742
else:
17431743
result = True
@@ -1786,31 +1786,31 @@ def is_satisfied_edge(interpretations, comp, na, minimized_predicates):
17861786
# This is to prevent a key error in case the label is a specific label
17871787
try:
17881788
world = interpretations[comp]
1789-
print('--- is_satisfied_edge ---')
1790-
print(' edge:', comp[0], '->', comp[1])
1791-
print(' checking label:', na[0].get_value())
1792-
print(' clause bound: [', float_to_str(na[1].l), ',', float_to_str(na[1].u), ']')
1793-
print(' world keys:')
1794-
for k in world.world.keys():
1795-
print(' ', k.get_value(), '= [', float_to_str(world.world[k].l), ',', float_to_str(world.world[k].u), ']')
1789+
# print('--- is_satisfied_edge ---')
1790+
# print(' edge:', comp[0], '->', comp[1])
1791+
# print(' checking label:', na[0].get_value())
1792+
# print(' clause bound: [', float_to_str(na[1].l), ',', float_to_str(na[1].u), ']')
1793+
# print(' world keys:')
1794+
# for k in world.world.keys():
1795+
# print(' ', k.get_value(), '= [', float_to_str(world.world[k].l), ',', float_to_str(world.world[k].u), ']')
17961796
# Minimized predicate check
17971797
if na[0] in minimized_predicates:
17981798
if na[0] not in world.world:
17991799
# Label not in world — missing = unknown [0,1] = treat as [0,0]
1800-
print(' MINIMIZED (label not in world): treating as [0,0]')
1800+
# print(' MINIMIZED (label not in world): treating as [0,0]')
18011801
result = interval.closed(0, 0) in na[1]
1802-
print(' result:', result)
1802+
# print(' result:', result)
18031803
return result
18041804
world_bnd = world.world[na[0]]
18051805
if world_bnd.lower == 0.0 and world_bnd.upper == 1.0:
1806-
print(' MINIMIZED: world bound [0,1] -> treating as [0,0]')
1806+
# print(' MINIMIZED: world bound [0,1] -> treating as [0,0]')
18071807
result = interval.closed(0, 0) in na[1]
1808-
print(' result:', result)
1808+
# print(' result:', result)
18091809
return result
18101810
result = world.is_satisfied(na[0], na[1])
1811-
print(' result:', result)
1811+
# print(' result:', result)
18121812
except Exception:
1813-
print(' EXCEPTION (label not in world) -> False')
1813+
# print(' EXCEPTION (label not in world) -> False')
18141814
result = False
18151815
else:
18161816
result = True

pyreason/scripts/interpretation/interpretation_fp.py

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1823,31 +1823,31 @@ def is_satisfied_node(interpretations, comp, na, minimized_predicates):
18231823
# This is to prevent a key error in case the label is a specific label
18241824
try:
18251825
world = interpretations[comp]
1826-
print('--- is_satisfied_node ---')
1827-
print(' node:', comp)
1828-
print(' checking label:', na[0].get_value())
1829-
print(' clause bound: [', float_to_str(na[1].l), ',', float_to_str(na[1].u), ']')
1830-
print(' world keys:')
1831-
for k in world.world.keys():
1832-
print(' ', k.get_value(), '= [', float_to_str(world.world[k].l), ',', float_to_str(world.world[k].u), ']')
1826+
# print('--- is_satisfied_node ---')
1827+
# print(' node:', comp)
1828+
# print(' checking label:', na[0].get_value())
1829+
# print(' clause bound: [', float_to_str(na[1].l), ',', float_to_str(na[1].u), ']')
1830+
# print(' world keys:')
1831+
# for k in world.world.keys():
1832+
# print(' ', k.get_value(), '= [', float_to_str(world.world[k].l), ',', float_to_str(world.world[k].u), ']')
18331833
# Minimized predicate check
18341834
if na[0] in minimized_predicates:
18351835
if na[0] not in world.world:
18361836
# Label not in world — missing = unknown [0,1] = treat as [0,0]
1837-
print(' MINIMIZED (label not in world): treating as [0,0]')
1837+
# print(' MINIMIZED (label not in world): treating as [0,0]')
18381838
result = interval.closed(0, 0) in na[1]
1839-
print(' result:', result)
1839+
# print(' result:', result)
18401840
return result
18411841
world_bnd = world.world[na[0]]
18421842
if world_bnd.lower == 0.0 and world_bnd.upper == 1.0:
1843-
print(' MINIMIZED: world bound [0,1] -> treating as [0,0]')
1843+
# print(' MINIMIZED: world bound [0,1] -> treating as [0,0]')
18441844
result = interval.closed(0, 0) in na[1]
1845-
print(' result:', result)
1845+
# print(' result:', result)
18461846
return result
18471847
result = world.is_satisfied(na[0], na[1])
1848-
print(' result:', result)
1848+
# print(' result:', result)
18491849
except Exception:
1850-
print(' EXCEPTION (label not in world) -> False')
1850+
# print(' EXCEPTION (label not in world) -> False')
18511851
result = False
18521852
else:
18531853
result = True
@@ -1896,31 +1896,31 @@ def is_satisfied_edge(interpretations, comp, na, minimized_predicates):
18961896
# This is to prevent a key error in case the label is a specific label
18971897
try:
18981898
world = interpretations[comp]
1899-
print('--- is_satisfied_edge ---')
1900-
print(' edge:', comp[0], '->', comp[1])
1901-
print(' checking label:', na[0].get_value())
1902-
print(' clause bound: [', float_to_str(na[1].l), ',', float_to_str(na[1].u), ']')
1903-
print(' world keys:')
1904-
for k in world.world.keys():
1905-
print(' ', k.get_value(), '= [', float_to_str(world.world[k].l), ',', float_to_str(world.world[k].u), ']')
1899+
# print('--- is_satisfied_edge ---')
1900+
# print(' edge:', comp[0], '->', comp[1])
1901+
# print(' checking label:', na[0].get_value())
1902+
# print(' clause bound: [', float_to_str(na[1].l), ',', float_to_str(na[1].u), ']')
1903+
# print(' world keys:')
1904+
# for k in world.world.keys():
1905+
# print(' ', k.get_value(), '= [', float_to_str(world.world[k].l), ',', float_to_str(world.world[k].u), ']')
19061906
# Minimized predicate check
19071907
if na[0] in minimized_predicates:
19081908
if na[0] not in world.world:
19091909
# Label not in world — missing = unknown [0,1] = treat as [0,0]
1910-
print(' MINIMIZED (label not in world): treating as [0,0]')
1910+
# print(' MINIMIZED (label not in world): treating as [0,0]')
19111911
result = interval.closed(0, 0) in na[1]
1912-
print(' result:', result)
1912+
# print(' result:', result)
19131913
return result
19141914
world_bnd = world.world[na[0]]
19151915
if world_bnd.lower == 0.0 and world_bnd.upper == 1.0:
1916-
print(' MINIMIZED: world bound [0,1] -> treating as [0,0]')
1916+
# print(' MINIMIZED: world bound [0,1] -> treating as [0,0]')
19171917
result = interval.closed(0, 0) in na[1]
1918-
print(' result:', result)
1918+
# print(' result:', result)
19191919
return result
19201920
result = world.is_satisfied(na[0], na[1])
1921-
print(' result:', result)
1921+
# print(' result:', result)
19221922
except Exception:
1923-
print(' EXCEPTION (label not in world) -> False')
1923+
# print(' EXCEPTION (label not in world) -> False')
19241924
result = False
19251925
else:
19261926
result = True

0 commit comments

Comments
 (0)