Source code for bqskit.passes.io.checkpoint

"""This module implements the various checkpointing passes."""
from __future__ import annotations

import logging
import pickle

from bqskit.compiler.basepass import BasePass
from bqskit.compiler.passdata import PassData
from bqskit.ir.circuit import Circuit

_logger = logging.getLogger(__name__)


[docs] class SaveCheckpointPass(BasePass): """ The SaveCheckpointPass class. The SaveCheckpointPass saves the current circuit as a data file. """
[docs] def __init__(self, checkpoint_filename: str) -> None: """ Constructor for the SaveCheckpointPass. Args: checkpoint_filename (str): Full path name for the checkpoint. """ self.checkpoint_filename = checkpoint_filename
[docs] async def run(self, circuit: Circuit, data: PassData) -> None: """Perform the pass's operation, see BasePass for more info.""" with open(self.checkpoint_filename, 'wb') as f: pickle.dump((circuit, data), f)
[docs] class LoadCheckpointPass(BasePass): """ The LoadCheckpointPass class. The LoadCheckpointPass loads the circuit from a data file. """
[docs] def __init__(self, checkpoint_filename: str) -> None: """ Constructor for the SaveCheckpointPass. Args: checkpoint_filename (str): Full path name for the checkpoint. """ self.checkpoint_filename = checkpoint_filename
[docs] async def run(self, circuit: Circuit, data: PassData) -> None: """Perform the pass's operation, see BasePass for more info.""" with open(self.checkpoint_filename, 'rb') as f: checkpoint = pickle.load(f) circuit.become(checkpoint[0]) data.clear() data.update(checkpoint[1])