Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for non-immediate proof maintenance #4563

Merged
merged 11 commits into from
Aug 6, 2024
17 changes: 12 additions & 5 deletions pyk/src/pyk/proof/proof.py
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,7 @@ def parallel_advance_proof(
fail_fast: bool = False,
max_workers: int = 1,
callback: Callable[[P], None] = (lambda x: None),
maintenance_rate: int = 1,
) -> None:
"""Advance proof with multithreaded strategy.

Expand All @@ -347,7 +348,8 @@ def parallel_advance_proof(
fail_fast: If the proof is failing after finishing a step,
halt execution even if there are still available steps.
max_workers: Maximum number of worker threads the pool can spawn.
callback: Callable to run in between each completed step, useful for getting real-time information about the proof.
callback: Callable to run during proof maintenance, useful for getting real-time information about the proof.
maintenance_rate: Number of iterations between proof maintenance (writing to disk and executing callback).
"""
pending: set[Future[Any]] = set()
explored: set[PS] = set()
Expand Down Expand Up @@ -376,9 +378,10 @@ def submit_steps(_steps: Iterable[PS]) -> None:
proof_results = future.result()
for result in proof_results:
proof.commit(result)
proof.write_proof_data()
callback(proof)
iterations += 1
if iterations % maintenance_rate == 0:
proof.write_proof_data()
callback(proof)
if max_iterations is not None and max_iterations <= iterations:
break
if fail_fast and proof.failed:
Expand Down Expand Up @@ -502,6 +505,7 @@ def advance_proof(
max_iterations: int | None = None,
fail_fast: bool = False,
callback: Callable[[P], None] = (lambda x: None),
maintenance_rate: int = 1,
) -> None:
"""Advance a proof.

Expand All @@ -513,6 +517,7 @@ def advance_proof(
fail_fast: If the proof is failing after finishing a step,
halt execution even if there are still available steps.
callback: Callable to run in between each completed step, useful for getting real-time information about the proof.
maintenance_rate: Number of iterations between proof maintenance (writing to disk and executing callback).
"""
iterations = 0
_LOGGER.info(f'Initializing proof: {proof.id}')
Expand All @@ -533,7 +538,9 @@ def advance_proof(
results = self.step_proof(step)
for result in results:
proof.commit(result)
proof.write_proof_data()
callback(proof)
if iterations % maintenance_rate == 0:
proof.write_proof_data()
callback(proof)

if proof.failed:
proof.failure_info = self.failure_info(proof)
Loading