Source code for bqskit.compiler.task

"""This module implements the CompilationTask class."""
from __future__ import annotations

import uuid
from typing import TYPE_CHECKING

from bqskit.compiler.passdata import PassData
from bqskit.compiler.workflow import Workflow

if TYPE_CHECKING:
    from bqskit.ir.circuit import Circuit
    from bqskit.compiler.workflow import WorkflowLike


[docs] class CompilationTask(): """ A complete description of a quantum compilation task. The CompilationTask class describes a compilation workflow completely. These can be submitted to a BQSKit compiler to be efficiently executed. """
[docs] def __init__(self, input: Circuit, workflow: WorkflowLike) -> None: """ Construct a CompilationTask. Args: input (Circuit): The input circuit to be compiled. workflow (WorkflowLike): The configured workflow to be performed on the circuit. """ self.task_id = uuid.uuid4() self.circuit = input self.workflow = Workflow(workflow) self.data = PassData(input) """The task's data for use in BQSKit passes.""" self.done = False """True when the task is complete.""" self.request_data = False """If true, :func:`run` will additionally return the PassData.""" self.logging_level: int | None = None """A general filter on all logging messages in the system.""" self.max_logging_depth = -1 """No logging for tasks with more than `max_logging_depth` parents."""
[docs] async def run(self) -> Circuit | tuple[Circuit, PassData]: """Execute the task.""" await self.workflow.run(self.circuit, self.data) if not self.request_data: return self.circuit return self.circuit, self.data