Source code for bqskit.passes.search.heuristics.dijkstra

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

from bqskit.ir.circuit import Circuit
from bqskit.passes.search.heuristic import HeuristicFunction
from bqskit.qis.state.state import StateVector
from bqskit.qis.state.system import StateSystem
from bqskit.qis.unitary.unitarymatrix import UnitaryMatrix


# TODO: Should name be changed to Breadth
[docs] class DijkstraHeuristic(HeuristicFunction): """ The DijkstraHeuristic HeuristicFunction class. Defines a heuristic that relies only on circuit depth, which guarantees a minimal-depth final solution at the expense of a long runtime. This will create a behavior similar to breadth-first search. """
[docs] def get_value( self, circuit: Circuit, target: UnitaryMatrix | StateVector | StateSystem, ) -> float: """Return the heuristic's value, see HeuristicFunction for more info.""" cost = 0.0 for gate in circuit.gate_set: if gate.num_qudits == 1: continue cost += float(circuit.count(gate)) return cost