From 81252e1e88344f1b321d68fc3daa543259e80531 Mon Sep 17 00:00:00 2001 From: Noah Watson <107630091+nwatson22@users.noreply.github.com> Date: Thu, 7 Mar 2024 10:27:29 -0600 Subject: [PATCH] Fix failure info not being set in advance_proof on done proof (https://github.com/runtimeverification/pyk/pull/951) https://github.com/runtimeverification/kontrol/issues/413 --------- Co-authored-by: devops Co-authored-by: Palina Tolmach --- pyk/docs/conf.py | 4 +- pyk/package/version | 2 +- pyk/pyproject.toml | 2 +- pyk/src/pyk/proof/proof.py | 4 +- pyk/src/tests/integration/proof/test_imp.py | 47 +++++++++++++++++++++ 5 files changed, 53 insertions(+), 6 deletions(-) diff --git a/pyk/docs/conf.py b/pyk/docs/conf.py index cdb0a91e580..edf7a65124e 100644 --- a/pyk/docs/conf.py +++ b/pyk/docs/conf.py @@ -9,8 +9,8 @@ project = 'pyk' author = 'Runtime Verification, Inc' copyright = '2024, Runtime Verification, Inc' -version = '0.1.686' -release = '0.1.686' +version = '0.1.687' +release = '0.1.687' # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration diff --git a/pyk/package/version b/pyk/package/version index 8d2584175ea..a6945e651b8 100644 --- a/pyk/package/version +++ b/pyk/package/version @@ -1 +1 @@ -0.1.686 +0.1.687 diff --git a/pyk/pyproject.toml b/pyk/pyproject.toml index 9d33d46660a..d66044de2b3 100644 --- a/pyk/pyproject.toml +++ b/pyk/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "pyk" -version = "0.1.686" +version = "0.1.687" description = "" authors = [ "Runtime Verification, Inc. ", diff --git a/pyk/src/pyk/proof/proof.py b/pyk/src/pyk/proof/proof.py index c0ea325392a..8420a34c58e 100644 --- a/pyk/src/pyk/proof/proof.py +++ b/pyk/src/pyk/proof/proof.py @@ -326,6 +326,6 @@ def advance_proof(self, max_iterations: int | None = None, fail_fast: bool = Fal results = self.step_proof() for result in results: self.proof.commit(result) - if self.proof.failed: - self.proof.failure_info = self.failure_info() self.proof.write_proof_data() + if self.proof.failed: + self.proof.failure_info = self.failure_info() diff --git a/pyk/src/tests/integration/proof/test_imp.py b/pyk/src/tests/integration/proof/test_imp.py index 79bf9127be6..eaec9e04890 100644 --- a/pyk/src/tests/integration/proof/test_imp.py +++ b/pyk/src/tests/integration/proof/test_imp.py @@ -1049,6 +1049,53 @@ def test_failure_info( assert actual_path_conds == expected_path_conds + @pytest.mark.parametrize( + 'test_id,spec_file,spec_module,claim_id,expected_pending,expected_failing,path_conditions', + FAILURE_INFO_TEST_DATA, + ids=[test_id for test_id, *_ in FAILURE_INFO_TEST_DATA], + ) + def test_failure_info_recomputed_on_proof_reinit( + self, + kprove: KProve, + kcfg_explore: KCFGExplore, + test_id: str, + spec_file: str, + spec_module: str, + claim_id: str, + expected_pending: int, + expected_failing: int, + path_conditions: tuple[KInner], + proof_dir: Path, + ) -> None: + claim = single( + kprove.get_claims(Path(spec_file), spec_module_name=spec_module, claim_labels=[f'{spec_module}.{claim_id}']) + ) + + proof = APRProof.from_claim(kprove.definition, claim, logs={}, proof_dir=proof_dir) + proof_id = proof.id + kcfg_explore.simplify(proof.kcfg, {}) + prover = APRProver(proof, kcfg_explore=kcfg_explore) + prover.advance_proof() + + # reload proof from disk + proof = APRProof.read_proof_data(proof_dir, proof_id) + prover = APRProver(proof, kcfg_explore=kcfg_explore) + prover.advance_proof() + + failure_info = proof.failure_info + assert isinstance(failure_info, APRFailureInfo) + + actual_pending = len(failure_info.pending_nodes) + actual_failing = len(failure_info.failing_nodes) + + assert expected_pending == actual_pending + assert expected_failing == actual_failing + + actual_path_conds = set({path_condition for _, path_condition in failure_info.path_conditions.items()}) + expected_path_conds = set({kprove.pretty_print(condition) for condition in path_conditions}) + + assert actual_path_conds == expected_path_conds + def test_apr_prove_read_write_node_data( self, kprove: KProve,