LinearFunction
class qiskit.circuit.library.LinearFunction(linear, validate_input=False)
Basi: Gate
Un circuito reversibile lineare su n qubit.
Internamente, una funzione lineare che agisce su n qubit è rappresentata come una matrice n x n di 0s e 1s in formato array numpy.
Una funzione lineare può essere sintetizzata utilizzando porte CX e SWAP tramite l'algoritmo di Patel–Markov–Hayes, come implementato in synth_cnot_count_full_pmh() sulla base del riferimento [1].
Per efficienza, la matrice interna n x n viene memorizzata nel formato previsto da cnot_synth, che è la convenzione di ordinamento dei bit big-endian (e non little-endian).
Esempio:
Il circuito
q_0: ──■──
┌─┴─┐
q_1: ┤ X ├
└───┘
q_2: ─────è rappresentato da una matrice lineare 3x3
Riferimenti:
[1] Ketan N. Patel, Igor L. Markov e John P. Hayes, Optimal synthesis of linear reversible circuits, Quantum Inf. Computerizzato. 8(3) (2008). Online su umich.edu.
Parametri
- linear (list[list[bool]] | np.ndarray[bool] | QuantumCircuit |LinearFunction |PermutationGate |Clifford) – dati a partire dai quali è possibile costruire una funzione lineare. Può trattarsi di una matrice n×n (che descrive la trasformazione lineare), di una permutazione (che è un caso particolare di funzione lineare), di un’altra funzione lineare, di un Clifford (quando corrisponde a una funzione lineare) oppure di un circuito quantistico composto da porte lineari (CX e SWAP) e da altri oggetti descritti sopra, compresi i sottocircuiti annidati.
- validate_input (bool) – se Vero, esegue controlli di convalida dell'input più costosi, come ad esempio il controllo dell'invertibilità di una determinata matrice n x n.
Aumenti
CircuitError – se l'input non è valido: o la matrice di input non è quadrata o non è invertibile, oppure il circuito quantistico di input contiene oggetti non lineari (ad esempio, una porta di Hadamard o un Clifford che non corrisponde a una funzione lineare).
Attributi
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 misurazione 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
TrueIn 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.
decompositions
Ottenere le scomposizioni dell'istruzione da SessionEquivalenceLibrary.
definition
Definizione di ritorno in termini di altri cancelli di base.
label
Etichetta di istruzioni per la restituzione
linear
Restituisce la matrice n x n che rappresenta questa funzione lineare.
mutable
Questa istanza è un'istanza unica mutabile o meno.
Se questo attributo è False , l'istanza del gate è un singleton condiviso e non è mutabile.
name
Restituisce il nome.
num_clbits
Restituisce il numero di clbit.
num_qubits
Restituisce il numero di qubit.
original_circuit
Restituisce il circuito originale usato per costruire questa funzione lineare (compreso None, quando la funzione lineare non è costruita da un circuito).
params
I parametri di questo Instruction. Idealmente si tratta di angoli di passaggio.
Metodi
add_decomposition
add_decomposition(decomposition)
Aggiungere una decomposizione dell'istruzione a SessionEquivalenceLibrary.
broadcast_arguments
broadcast_arguments(qargs, cargs)
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
control
control(num_ctrl_qubits=1, label=None, ctrl_state=None, annotated=None)
Restituisce la versione controllata di se stesso.
Il gate controllato è implementato come ControlledGate quando annotated è False, e come AnnotatedOperation quando annotated è True.
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"). SeNone, il valore predefinito è lo stato2**num_ctrl_qubits - 1tutto uno. - annotated (bool | None) – Indica se il gate controllato deve essere implementato come gate controllato o come operazione annotata. Se
None, trattato comeFalse.
Risultati
Una versione controllata di questo cancello.
Aumenti
QiskitError – non valido num_ctrl_qubits o ctrl_state.
copy
copy(name=None)
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
extend_with_identity
extend_with_identity(num_qubits, positions)
Estendere la funzione lineare a una funzione lineare su nq qubit, con identità sugli altri sottosistemi.
Parametri
- num_qubits (int) – numero di qubit della funzione estesa.
- positions (list[int]) – descrive le posizioni dei qubit originali nei qubit della funzione estesa.
Risultati
funzione lineare estesa.
Tipo di restituzione
function_str
function_str()
Restituisce la rappresentazione in stringhe della funzione lineare vista come una trasformazione lineare.
inverse
inverse(annotated=False)
Restituisce l'inversa di questa funzione lineare.
Parametri
Gateannotated (bool) – Quando è impostato su True, questa opzione viene solitamente utilizzata per restituire un AnnotatedOperation con un modificatore inverso impostato, anziché un concreto. Tuttavia, in questo corso tale argomentazione viene ignorata, poiché l'inverso di questa porta è sempre un LinearFunction.
Tipo di restituzione
is_parameterized
is_permutation
is_permutation()
Restituisce se questa funzione lineare è una permutazione, cioè se ogni riga e ogni colonna della matrice n x n ha esattamente un 1.
Tipo di restituzione
mat_str
mat_str()
Restituisce la rappresentazione in stringa della funzione lineare vista come una matrice con voci 0/1.
permutation_pattern
permutation_pattern()
Questo metodo verifica innanzitutto se una funzione lineare è una permutazione e solleva un qiskit.circuit.exceptions.CircuitError in caso contrario. Se la funzione lineare è una permutazione, restituisce il modello di permutazione.
power
power(exponent, annotated=False)
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 implementa gate^exponent
Aumenti
CircuitError – Se il gate non è unitario
repeat
repeat(n)
Crea un'istruzione con self la ripetizione di « » volte.
Parametri
n (int) – Numero di volte in cui ripetere l'istruzione
Risultati
Contiene la definizione.
Tipo di restituzione
Aumenti
CircuitError – Se n < 1.
reverse_ops
reverse_ops()
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
soft_compare
soft_compare(other)
Confronto soft tra i gate. 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 a espressioni parametriche.
Tipo di restituzione
synthesize
synthesize()
Sintetizza la funzione lineare in un circuito quantistico.
Il metodo qiskit.circuit.library.generalized_gates.linear_function.LinearFunction.synthesize() è deprecato a partire da Qiskit 2.1. Verrà rimosso in Qiskit 3.0. Chiamate invece LinearFunction.definition o compilate il circuito.
Risultati
Un circuito che implementa l'evoluzione.
Tipo di restituzione
to_matrix
to_matrix()
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()
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.