WrapAngles
class qiskit.transpiler.passes.WrapAngles(*args, **kwargs)
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")
Parametri
-
target (Target) – Il
Targetche 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_REGISTRYglobale.A meno che non si intenda eseguire questo passaggio in modo autonomo o si stia creando un personalizzato
PassManagerche includa questo passaggio, è consigliabile affidarsi aDEFAULT_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.
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.
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:
WrapAngles.DEFAULT_REGISTRYqiskit.transpiler.passes.utils.wrap_angles.WRAP_ANGLE_REGISTRY
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)
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
name
run
run(dag)
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)
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