Skip to main content
IBM Quantum Platform

WrapAngles

class qiskit.transpiler.passes.WrapAngles(*args, **kwargs)

GitHub

Basi: TransformationPass

Avvolge gli angoli al di fuori del limite specificato nel target.

Questo passaggio controlla tutti i gate del circuito e verifica se ci sono gate al di fuori del limite specificato nell'obiettivo. Se vengono identificati dei gate al di fuori del limite, viene richiamata la callback nel target per sostituire il gate al di fuori del limite con un sottocircuito equivalente. Questo passaggio non viene eseguito su porte parametrizzate, anche se la porta ha parametri non parametrizzati al di fuori di un limite specificato. Se nel circuito sono presenti gate parametrizzati, questi vengono ignorati da questo passaggio, poiché gli angoli vincolati sono necessari per trasformare il gate. Ad esempio, l'esempio seguente dimostra come funziona il meccanismo di callback e la registrazione, ma non mostra una trasformazione utile, pur essendo semplice da seguire:

from qiskit.circuit import Gate, Parameter, Qubit, QuantumCircuit
from qiskit.circuit.library import RZGate
from qiskit.dagcircuit import DAGCircuit
from qiskit.transpiler.passes import WrapAngles
from qiskit.transpiler import Target, WrapAngleRegistry

param = Parameter("a")
circuit = QuantumCircuit(1)
circuit.rz(6.8, 0)
target = Target(num_qubits=1)
target.add_instruction(RZGate(param), angle_bounds=[(0, 0.5)])

def callback(angles, _qubits):
    angle = angles[0]
    if angle > 0:
        number_of_gates = angle / 0.5
    else:
        number_of_gates = (6.28 - angle) / 0.5
    dag = DAGCircuit()
    dag.add_qubits([Qubit()])
    for _ in range(int(number_of_gates)):
        dag.apply_operation_back(RZGate(0.5), [dag.qubits[0]])
    return dag

registry = WrapAngleRegistry()
registry.add_wrapper("rz", callback)
wrap_pass = WrapAngles(target, registry)
res = wrap_pass(circuit)
res.draw("mpl")
Schema elettrico dell'uscita risultante dall'esecuzione del passaggio " WrapAngles "

Parametri

  • target (Target) – Il Target che rappresenta la QPU di destinazione.

  • registry (WrapAngleRegistry) –

    Il registro delle funzioni di avvolgimento utilizzate dal passaggio per avvolgere gli angoli di un cancello. Se non specificato, verrà utilizzato l'oggetto DEFAULT_REGISTRY globale.

    A meno che non si intenda eseguire questo passaggio in modo autonomo o si stia creando un personalizzato PassManager che includa questo passaggio, è consigliabile affidarsi a DEFAULT_REGISTRY.


Attributi

REGISTRO_PREDEFINITO

Valore predefinito: <qiskit._accelerate.angle_bound_registry.WrapAngleRegistry object>

Un'istanza globale di WrapAngleRegistry utilizzata per impostazione predefinita da questo passaggio quando non viene specificato alcun registro esplicito.

Nota

Questo è anche accessibile pubblicamente nella posizione qiskit.transpiler.passes.utils.wrap_angles.WRAP_ANGLE_REGISTRY a causa di una svista in Qiskit 2.2 (in cui il percorso esteso è l'unica posizione valida). Si consiglia vivamente di accedere a questo oggetto tramite WrapAngles, tuttavia, se non è necessario supportare Qiskit 2.2.

Nota

I tentativi di scrivere un oggetto di registro completamente nuovo nel qiskit.transpiler.passes.utils.wrap_angles percorso non saranno riportati nelle impostazioni predefinite in Qiskit 2.3 e successive. Sebbene non consigliamo di sovrascrivere completamente l'oggetto, se dovessi farlo e per supportare Qiskit 2.2 in poi, dovresti scrivere i riferimenti allo stesso oggetto in entrambi:

is_analysis_pass

Controlla se il passaggio è un passaggio di analisi.

Se il passo è un AnalysisPass,, significa che il passo può analizzare il DAG e scrivere i risultati di tale analisi nel set di proprietà. Questo tipo di passaggio non consente di modificare il DAG.

is_transformation_pass

Controlla se il passaggio è un passaggio di trasformazione.

Se il passaggio è un TransformationPass,, significa che il passaggio può manipolare il DAG, ma non può modificare il set di proprietà (ma può essere letto).


Metodi

execute

execute(passmanager_ir, state, callback=None)

GitHub

Eseguire l'attività di ottimizzazione per l'IR Qiskit in ingresso.

Parametri

  • passmanager_ir (DAGCircuit) – Qiskit IR da ottimizzare.
  • state (DAGCircuit) – Stato associato all'esecuzione del flusso di lavoro da parte dello stesso gestore dei passaggi.
  • callback (Callable[[Task, DAGCircuit, PropertySet, float, int], None] | None) – Una funzione di callback che viene chiamata ad ogni esecuzione di un'attività di ottimizzazione.

Risultati

Qiskit IR ottimizzato e stato del flusso di lavoro.

Tipo di restituzione

tuple [ DAGCircuit, PassManagerState ]

name

name()

GitHub

Nome del passo.

Tipo di restituzione

STR

run

run(dag)

GitHub

Eseguire un passaggio sul circuito DAG. Questo viene implementato dallo sviluppatore del passaggio.

Parametri

dag - il dag su cui viene eseguito il passaggio.

Aumenti

NotImplementedError - quando questo viene lasciato non implementato per un passaggio.

update_status

update_status(state, run_state)

GitHub

Aggiornare lo stato del flusso di lavoro.

Parametri

  • state (PassManagerState) – Passare lo stato del gestore da aggiornare.
  • run_state (RunState) – Stato di completamento dell'attività corrente.

Risultati

Stato aggiornato del gestore dei passaggi.

Tipo di restituzione

PassManagerState

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.