Skip to content
25 changes: 10 additions & 15 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,56 +1,51 @@
exclude: 'pyreason/\.cache_status\.yaml'
exclude: 'pyreason/\.cache_status\.yaml|pyreason/scripts/interpretation/interpretation_parallel\.py'
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: end-of-file-fixer
name: Fix end of files
exclude: 'pyreason/scripts/interpretation/interpretation_parallel\.py'
stages: [pre-commit]

- repo: local
hooks:
# --- COMMIT STAGE: Fast unit tests only ---
- id: ruff-check
name: Run ruff linter
entry: .venv/bin/python -m ruff check pyreason/scripts
entry: ruff check pyreason/scripts
language: system
types: [python]
pass_filenames: false
stages: [pre-commit]

- id: sync-interpretation-parallel
name: Sync interpretation_parallel.py from interpretation.py
entry: .venv/bin/python sync_interpretation_parallel.py
language: system
pass_filenames: false
files: 'pyreason/scripts/interpretation/interpretation\.py'
stages: [pre-commit]


- id: pytest-unit-no-jit
name: Run JIT-disabled unit tests
entry: .venv/bin/python -m pytest tests/unit/disable_jit -m "not slow" --tb=short -q
entry: pytest tests/unit/disable_jit --tb=short -q
language: system
pass_filenames: false
stages: [pre-commit]
require_serial: true

- id: pytest-unit-jit
name: Run JIT-enabled unit tests
entry: .venv/bin/python -m pytest tests/unit/dont_disable_jit -m "not slow" --tb=short -q
entry: pytest tests/unit/dont_disable_jit --tb=short -q
language: system
pass_filenames: false
stages: [pre-commit]
require_serial: true

# --- PUSH STAGE: Complete test suite ---
- id: pytest-unit-api
name: Run pyreason api tests
entry: .venv/bin/python -m pytest tests/api_tests --tb=short -q
entry: pytest tests/api_tests --tb=short -q
language: system
pass_filenames: false
stages: [pre-push]

- id: pytest-functional-complete
name: Run functional test suite
entry: .venv/bin/python -m pytest tests/functional/ --tb=short -q
entry: pytest tests/functional/ --tb=short -q
language: system
pass_filenames: false
stages: [pre-push]
2 changes: 1 addition & 1 deletion pyreason/.cache_status.yaml
Original file line number Diff line number Diff line change
@@ -1 +1 @@
initialized: false
initialized: true
9 changes: 7 additions & 2 deletions pyreason/scripts/interpretation/interpretation.py
Original file line number Diff line number Diff line change
Expand Up @@ -956,6 +956,7 @@ def _ground_rule(rule, interpretations_node, interpretations_edge, predicate_map
clause_label = clause[1]
clause_variables = clause[2]


if clause_type == 'node':
clause_var_1 = clause_variables[0]

Expand Down Expand Up @@ -1233,13 +1234,16 @@ def check_all_clause_satisfaction(interpretations_node, interpretations_edge, cl
clause_type = clause[0]
clause_label = clause[1]
clause_variables = clause[2]
clause_bnd = clause[3]

if clause_type == 'node':
clause_var_1 = clause_variables[0]
satisfaction = check_node_grounding_threshold_satisfaction(interpretations_node, groundings[clause_var_1], groundings[clause_var_1], clause_label, thresholds[i]) and satisfaction
qualified_groundings = get_qualified_node_groundings(interpretations_node, groundings[clause_var_1], clause_label, clause_bnd)
satisfaction = check_node_grounding_threshold_satisfaction(interpretations_node, groundings[clause_var_1], qualified_groundings, clause_label, thresholds[i]) and satisfaction
elif clause_type == 'edge':
clause_var_1, clause_var_2 = clause_variables[0], clause_variables[1]
satisfaction = check_edge_grounding_threshold_satisfaction(interpretations_edge, groundings_edges[(clause_var_1, clause_var_2)], groundings_edges[(clause_var_1, clause_var_2)], clause_label, thresholds[i]) and satisfaction
qualified_groundings = get_qualified_edge_groundings(interpretations_edge, groundings_edges[(clause_var_1, clause_var_2)], clause_label, clause_bnd)
satisfaction = check_edge_grounding_threshold_satisfaction(interpretations_edge, groundings_edges[(clause_var_1, clause_var_2)], qualified_groundings, clause_label, thresholds[i]) and satisfaction
return satisfaction


Expand Down Expand Up @@ -1311,6 +1315,7 @@ def check_node_grounding_threshold_satisfaction(interpretations_node, grounding,
elif threshold_quantifier_type == 'available':
neigh_len = len(get_qualified_node_groundings(interpretations_node, grounding, clause_label, interval.closed(0, 1)))


qualified_neigh_len = len(qualified_grounding)
satisfaction = _satisfies_threshold(neigh_len, qualified_neigh_len, threshold)
return satisfaction
Expand Down
7 changes: 5 additions & 2 deletions pyreason/scripts/interpretation/interpretation_fp.py
Original file line number Diff line number Diff line change
Expand Up @@ -1355,13 +1355,16 @@ def check_all_clause_satisfaction(interpretations_node, interpretations_edge, cl
clause_type = clause[0]
clause_label = clause[1]
clause_variables = clause[2]
clause_bnd = clause[3]

if clause_type == 'node':
clause_var_1 = clause_variables[0]
satisfaction = check_node_grounding_threshold_satisfaction(interpretations_node, groundings[clause_var_1], groundings[clause_var_1], clause_label, thresholds[i]) and satisfaction
qualified_groundings = get_qualified_node_groundings(interpretations_node, groundings[clause_var_1], clause_label, clause_bnd)
satisfaction = check_node_grounding_threshold_satisfaction(interpretations_node, groundings[clause_var_1], qualified_groundings, clause_label, thresholds[i]) and satisfaction
elif clause_type == 'edge':
clause_var_1, clause_var_2 = clause_variables[0], clause_variables[1]
satisfaction = check_edge_grounding_threshold_satisfaction(interpretations_edge, groundings_edges[(clause_var_1, clause_var_2)], groundings_edges[(clause_var_1, clause_var_2)], clause_label, thresholds[i]) and satisfaction
qualified_groundings = get_qualified_edge_groundings(interpretations_edge, groundings_edges[(clause_var_1, clause_var_2)], clause_label, clause_bnd)
satisfaction = check_edge_grounding_threshold_satisfaction(interpretations_edge, groundings_edges[(clause_var_1, clause_var_2)], qualified_groundings, clause_label, thresholds[i]) and satisfaction
return satisfaction


Expand Down
9 changes: 7 additions & 2 deletions pyreason/scripts/interpretation/interpretation_parallel.py
Original file line number Diff line number Diff line change
Expand Up @@ -956,6 +956,7 @@ def _ground_rule(rule, interpretations_node, interpretations_edge, predicate_map
clause_label = clause[1]
clause_variables = clause[2]


if clause_type == 'node':
clause_var_1 = clause_variables[0]

Expand Down Expand Up @@ -1233,13 +1234,16 @@ def check_all_clause_satisfaction(interpretations_node, interpretations_edge, cl
clause_type = clause[0]
clause_label = clause[1]
clause_variables = clause[2]
clause_bnd = clause[3]

if clause_type == 'node':
clause_var_1 = clause_variables[0]
satisfaction = check_node_grounding_threshold_satisfaction(interpretations_node, groundings[clause_var_1], groundings[clause_var_1], clause_label, thresholds[i]) and satisfaction
qualified_groundings = get_qualified_node_groundings(interpretations_node, groundings[clause_var_1], clause_label, clause_bnd)
satisfaction = check_node_grounding_threshold_satisfaction(interpretations_node, groundings[clause_var_1], qualified_groundings, clause_label, thresholds[i]) and satisfaction
elif clause_type == 'edge':
clause_var_1, clause_var_2 = clause_variables[0], clause_variables[1]
satisfaction = check_edge_grounding_threshold_satisfaction(interpretations_edge, groundings_edges[(clause_var_1, clause_var_2)], groundings_edges[(clause_var_1, clause_var_2)], clause_label, thresholds[i]) and satisfaction
qualified_groundings = get_qualified_edge_groundings(interpretations_edge, groundings_edges[(clause_var_1, clause_var_2)], clause_label, clause_bnd)
satisfaction = check_edge_grounding_threshold_satisfaction(interpretations_edge, groundings_edges[(clause_var_1, clause_var_2)], qualified_groundings, clause_label, thresholds[i]) and satisfaction
return satisfaction


Expand Down Expand Up @@ -1311,6 +1315,7 @@ def check_node_grounding_threshold_satisfaction(interpretations_node, grounding,
elif threshold_quantifier_type == 'available':
neigh_len = len(get_qualified_node_groundings(interpretations_node, grounding, clause_label, interval.closed(0, 1)))


qualified_neigh_len = len(qualified_grounding)
satisfaction = _satisfies_threshold(neigh_len, qualified_neigh_len, threshold)
return satisfaction
Expand Down
Loading