Skip to main content
IBM Quantum Platform

CUGate

class qiskit.circuit.library.CUGate(theta, phi, lam, gamma, label=None, ctrl_state=None, *, _base_label=None)

GitHub

Basi: ControlledGate

Porta a U controllata (porta a 4 parametri a due equbit).

Si tratta di una versione controllata del gate U (rotazione generica di un singolo qubit), che include una possibile fase globale eiγe^{i\gamma} del gate U.

Può essere applicato a un QuantumCircuit utilizzando il cu() metodo.

Simbolo del circuito:

q_0: ──────■──────
     ┌─────┴──────┐
q_1: ┤ U(ϴ,φ,λ,γ) ├
     └────────────┘

Rappresentazione a matrice:

CU(θ,ϕ,λ,γ) q0,q1=I00+eiγU(θ,ϕ,λ)11=(10000eiγcos(θ2)0ei(γ+λ)sin(θ2)00100ei(γ+ϕ)sin(θ2)0ei(γ+ϕ+λ)cos(θ2))\providecommand{\rotationangle}{\frac{\theta}{2}} CU(\theta, \phi, \lambda, \gamma)\ q_0, q_1 = I \otimes |0\rangle\langle 0| + e^{i\gamma} U(\theta,\phi,\lambda) \otimes |1\rangle\langle 1| = \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & e^{i\gamma}\cos(\rotationangle) & 0 & -e^{i(\gamma + \lambda)}\sin(\rotationangle) \\ 0 & 0 & 1 & 0 \\ 0 & e^{i(\gamma+\phi)}\sin(\rotationangle) & 0 & e^{i(\gamma+\phi+\lambda)}\cos(\rotationangle) \end{pmatrix}
Nota

Nella convenzione di Qiskit, gli indici di qubit più alti sono più significativi (convenzione little endian). In molti libri di testo, le porte controllate sono presentate assumendo come controllo i qubit più significativi, che nel nostro caso sarebbero q_1. Pertanto, una matrice da manuale per questo gate sarà:

     ┌────────────┐
q_0: ┤ U(ϴ,φ,λ,γ) ├
     └─────┬──────┘
q_1: ──────■───────
CU(θ,ϕ,λ,γ) q1,q0=00I+eiγ11U(θ,ϕ,λ)=(1000010000eiγcos(θ2)ei(γ+λ)sin(θ2)00ei(γ+ϕ)sin(θ2)ei(γ+ϕ+λ)cos(θ2))\providecommand{\rotationangle}{\frac{\theta}{2}} CU(\theta, \phi, \lambda, \gamma)\ q_1, q_0 = |0\rangle\langle 0| \otimes I + e^{i\gamma}|1\rangle\langle 1| \otimes U(\theta,\phi,\lambda) = \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & e^{i\gamma} \cos(\rotationangle) & -e^{i(\gamma + \lambda)}\sin(\rotationangle) \\ 0 & 0 & e^{i(\gamma + \phi)}\sin(\rotationangle) & e^{i(\gamma + \phi+\lambda)}\cos(\rotationangle) \end{pmatrix}

Creare un nuovo cancello CU.


Attributi

Parametri

  • theta (ParameterValueType)
  • phi (ParameterValueType)
  • lam (ParameterValueType)
  • gamma (ParameterValueType)
  • label (str | None)
  • ctrl_state (int |str | None)

base_class

Ottiene la classe base di questa istruzione. È garantita la presenza nell'albero ereditario di self.

La "classe base" di un'istruzione è la classe più bassa dell'albero di ereditarietà con cui l'oggetto deve essere considerato completamente compatibile per le applicazioni dei circuiti. Questo in genere significa che la sottoclasse è definita solo per offrire una sorta di comodità al programmatore rispetto alla classe base, mentre la classe base è la "vera" classe dal punto di vista comportamentale. In particolare, non si dovrebbe sovrascrivere base_class se si sta definendo una versione personalizzata di un'istruzione che sarà implementata in modo diverso dall'hardware, come ad esempio una strategia di misura alternativa, o una versione di un gate parametrizzato con un particolare insieme di parametri per distinguerlo in un file Target dalla porta parametrizzata completa.

Spesso è esattamente equivalente a type(obj), tranne nel caso di istanze singleton di istruzioni della libreria standard. Queste istanze singleton sono sottoclassi speciali della loro classe base e questa proprietà restituirà la classe base. Ad esempio:

>>> isinstance(XGate(), XGate)
True
>>> type(XGate()) is XGate
False
>>> XGate().base_class is XGate
True

In generale, non si dovrebbe fare affidamento sulla classe precisa di un'istruzione; all'interno di un determinato circuito, si prevede che Instruction.name sia un discriminante più adatto nella maggior parte delle situazioni.

ctrl_state

Restituisce lo stato di controllo del gate come numero intero decimale.

decompositions

Ottenere le scomposizioni dell'istruzione da SessionEquivalenceLibrary.

definition

Definizione di ritorno in termini di altri cancelli di base. Se il cancello ha controlli aperti, come determinato da ctrl_state, la definizione restituita viene coniugata con X senza modificare l'interno _definition.

label

Etichetta di istruzioni per la restituzione

mutable

Questa istanza è un'istanza unica mutabile o meno.

Se questo attributo è False , l'istanza del gate è un singleton condiviso e non è mutabile.

name

Ottenere il nome del cancello. Se il cancello ha controlli aperti, il nome del cancello diventa:

<original_name_o<ctrl_state>

dove <original_name> è il nome del gate per il caso predefinito di qubit di controllo chiusi e <ctrl_state> è il valore intero dello stato di controllo del gate.

num_clbits

Restituisce il numero di clbit.

num_ctrl_qubits

Ottenere il numero di qubit di controllo.

Risultati

Il numero di qubit di controllo per il gate.

Tipo di restituzione

int

num_qubits

Restituisce il numero di qubit.

params


Metodi

add_decomposition

add_decomposition(decomposition)

GitHub

Aggiungere una decomposizione dell'istruzione a SessionEquivalenceLibrary.

broadcast_arguments

broadcast_arguments(qargs, cargs)

GitHub

Convalida e gestione degli argomenti e delle loro relazioni.

Ad esempio, cx([q[0],q[1]], q[2]) significa cx(q[0], q[2]); cx(q[1], q[2]). Questo metodo produce gli argomenti nel giusto raggruppamento. Nell'esempio dato:

in: [[q[0],q[1]], q[2]],[]
outs: [q[0], q[2]], []
      [q[1], q[2]], []

Le regole generali di trasmissione sono:

  • Se len(qargs) == 1:

    [q[0], q[1]] -> [q[0]],[q[1]]
  • Se len(qargs) == 2:

    [[q[0], q[1]], [r[0], r[1]]] -> [q[0], r[0]], [q[1], r[1]]
    [[q[0]], [r[0], r[1]]]       -> [q[0], r[0]], [q[0], r[1]]
    [[q[0], q[1]], [r[0]]]       -> [q[0], r[0]], [q[1], r[0]]
  • Se len(qargs) >= 3:

    [q[0], q[1]], [r[0], r[1]],  ...] -> [q[0], r[0], ...], [q[1], r[1], ...]

Parametri

  • qargs (list) – Elenco degli argomenti dei bit quantici.
  • cargs (list) – Elenco degli argomenti classici dei bit.

Risultati

Una tupla con argomenti singoli.

Aumenti

CircuitError – Se l'input non è valido. Ad esempio, il numero di argomenti non corrisponde a quanto previsto dal gate.

Tipo di restituzione

Iterable [ tuple [ lista, lista ]]

control

control(num_ctrl_qubits=1, label=None, ctrl_state=None, annotated=None)

GitHub

Restituisce la versione controllata di se stesso.

Il gate controllato è implementato come ControlledGate quando annotated è False, e come AnnotatedOperation quando annotated è True.

Deprecato dalla versione 2.3

qiskit.circuit.gate.Gate.control()L'argomento annotated è deprecato a partire dalla versione Qiskit 2.3. Verrà rimosso in Qiskit 3.0. Il metodo Gate.control () non accetta più annotated=None. Il nuovo valore predefinito è annotated=True, che rappresenta il gate controllato come un gate controllato ( AnnotatedOperation ) (a meno che non esista già una classe dedicata al gate controllato). È possibile impostare esplicitamente annotated=False per mantenere il comportamento precedente. Tuttavia, si consiglia di utilizzare annotated=True, poiché rimanda la costruzione del circuito controllato al transpiler e consente inoltre ulteriori ottimizzazioni del gate controllato (che in genere portano a circuiti di qualità superiore).

Parametri

  • num_ctrl_qubits (int) – Numero di controlli da aggiungere. Il valore predefinito è 1.
  • label (str | None) – Etichetta cancello opzionale. Il valore predefinito è None. Ignorato se il gate controllato è implementato come operazione annotata.
  • ctrl_state (int |str | None) – Lo stato di controllo del gate, specificato come numero intero o stringa di bit (ad esempio "110"). Se None, il valore predefinito è lo stato 2**num_ctrl_qubits - 1 tutto uno.
  • annotated (bool | None) – Indica se il gate controllato deve essere implementato come gate controllato o come operazione annotata. Se None, trattato come False.

Risultati

Una versione controllata di questo cancello.

Aumenti

QiskitError – non valido num_ctrl_qubits o ctrl_state.

copy

copy(name=None)

GitHub

Copia dell'istruzione.

Parametri

name (str) – nome da assegnare al circuito copiato, se None il nome rimane invariato.

Risultati

una copia dell'istruzione corrente, con il nome aggiornato se è stato fornito

Tipo di restituzione

qiskit.circuit.Instruction

inverse

inverse(annotated=False)

GitHub

Restituzione del gate CU invertito.

CU(θ,ϕ,λ,γ)=CU(θ,ϕ,λ,γ))CU(\theta,\phi,\lambda,\gamma)^{\dagger} = CU(-\theta,-\phi,-\lambda,-\gamma))

Parametri

annotated (bool) – quando è impostato su True, è tipicamente usato per restituire un oggetto AnnotatedOperation con un modificatore inverso impostato, invece di un concreto Gate. Tuttavia, per questa classe questo argomento viene ignorato, in quanto l'inverso di questo gate è sempre un parametro CUGate con valori dei parametri inversi.

Risultati

cancello inverso.

Tipo di restituzione

CUGate

is_parameterized

is_parameterized()

GitHub

Restituisce se il Instruction contiene parametri di compilazione.

power

power(exponent, annotated=False)

GitHub

Innalzate questo cancello al potere di exponent.

Implementato come gate unitario (rif. UnitaryGate) o come operazione annotata (rif. AnnotatedOperation). Nel caso di diversi gate standard, come ad esempio RXGatequando la potenza di un gate può essere espressa in termini di un altro gate standard che viene restituito direttamente.

Parametri

  • exponent (float) – il potere di alzare il cancello per
  • annotated (bool) – indica se il power gate può essere implementato come operazione annotata. Nel caso di più porte standard, come ad esempio RXGatequesto argomento viene ignorato quando la potenza di un gate può essere espressa in termini di un altro gate standard.

Risultati

Un'operazione che attua gate^exponent

Aumenti

CircuitError – Se il gate non è unitario

repeat

repeat(n)

GitHub

Crea un'istruzione con self la ripetizione di « nn » volte.

Parametri

n (int) – Numero di volte in cui ripetere l'istruzione

Risultati

Contiene la definizione.

Tipo di restituzione

qiskit.circuit.Instruction

Aumenti

CircuitError – Se n < 1.

reverse_ops

reverse_ops()

GitHub

Per un'istruzione composta, invertire l'ordine delle sottoistruzioni.

Ciò avviene invertendo ricorsivamente tutte le sottoistruzioni. Non inverte alcun cancello.

Risultati

una nuova istruzione con

le sottoistruzioni invertite.

Tipo di restituzione

qiskit.circuit.Instruction

soft_compare

soft_compare(other)

GitHub

Confronto morbido tra le porte. I loro nomi, il numero di qubit e i numeri di bit classici devono corrispondere. Il numero di parametri deve corrispondere. Ogni parametro viene confrontato. Se uno è un ParameterExpression non viene preso in considerazione.

Parametri

other (instruction) – altre istruzioni.

Risultati

sono auto e altri uguali fino alle espressioni dei parametri.

Tipo di restituzione

bool

to_matrix

to_matrix()

GitHub

Restituisce un Numpy.array per la matrice unitaria del gate.

Risultati

se la sottoclasse Gate ha una definizione di matrice.

Tipo di restituzione

np.ndarray

Aumenti

CircuitError – Se una sottoclasse di Gate non implementa questo metodo, verrà generata un'eccezione quando viene chiamato questo metodo della classe base.

to_mutable

to_mutable()

GitHub

Restituisce una copia mutabile di questo gate.

Questo metodo restituisce una nuova copia mutabile di questa istanza di gate. Se si utilizza un'istanza singleton, questa sarà una nuova istanza unica che può essere mutata. Se l'istanza è già mutabile, sarà una copia profonda di quell'istanza.

validate_parameter

validate_parameter(parameter)

GitHub

I parametri del gate devono essere int, float o ParameterExpression

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