Source code for bqskit.passes.search.heuristic

"""This module implements the HeuristicFunction base class."""
from __future__ import annotations

import abc

from bqskit.ir.circuit import Circuit
from bqskit.qis.state.state import StateVector
from bqskit.qis.state.system import StateSystem
from bqskit.qis.unitary.unitarymatrix import UnitaryMatrix


[docs] class HeuristicFunction(abc.ABC): """ The HeuristicFunction base class. A HeuristicFunction is a map from a circuit to a real value. """
[docs] @abc.abstractmethod def get_value( self, circuit: Circuit, target: UnitaryMatrix | StateVector | StateSystem, ) -> float: """Return the heuristic's value given `circuit` and `target`."""
def __call__( self, circuit: Circuit, target: UnitaryMatrix | StateVector | StateSystem, ) -> float: """Return the heuristic's value given `circuit` and `target`.""" if not isinstance(circuit, Circuit): raise TypeError( 'Expected circuit, got %s.' % type(circuit), ) if not isinstance(target, (UnitaryMatrix, StateVector, StateSystem)): raise TypeError( 'Expected unitary or state, got %s.' % type(target), ) return self.get_value(circuit, target)