UnitarySynthesisPlugin
class qiskit.transpiler.passes.synthesis.plugin.UnitarySynthesisPlugin
Basi: ABC
Classe di plugin per la sintesi unitaria astratta
Questa classe astratta definisce l'interfaccia per i plugin di sintesi unitaria.
Attributi
max_qubits
Restituisce il numero massimo di qubit supportati dal plugin di sintesi unitaria.
Se la dimensione dell'unità da sintetizzare supera questo valore, verrà utilizzato il plugin default . Se non c'è un limite superiore, restituisce None e tutti gli unitari (>= min_qubits se è definito) saranno passati a questo plugin quando è abilitato.
min_qubits
Restituisce il numero minimo di qubit supportato dal plugin di sintesi unitaria.
Se la dimensione dell'unità da sintetizzare è inferiore a questo valore, verrà utilizzato il plugin default . Se non c'è un limite inferiore, restituisce None e tutti gli unitari (<= max_qubits se è definito) saranno passati a questo plugin quando è abilitato.
supported_bases
Restituisce un dizionario di basi supportate per la sintesi
Questo dovrebbe restituire un dizionario in cui la chiave è una stringa di base e il valore è un elenco di nomi di cancelli in cui la base lavora. Se il metodo di sintesi non supporta basi multiple, dovrebbe restituire None. Ad esempio:
{
"XZX": ["rz", "rx"],
"XYX": ["rx", "ry"],
}Se questo metodo restituisce un dizionario, all'esecuzione kwargs viene passato un parametro matched_basis che contiene un elenco delle stringhe di base (cioè le chiavi del dizionario) che corrispondono al gate di base impostato per la transpilazione. Se nessuna voce del dizionario corrisponde all'insieme di gate di base target, il kwarg matched_basis sarà impostato su un elenco vuoto e un plugin può scegliere come gestire l'insieme di gate di base target che non corrisponde alle capacità del plugin.
supports_basis_gates
Restituisce se il plugin supporta l'acquisizione di basis_gates
Se restituisce True , al metodo run() del plugin verrà passato un kwarg basis_gates con un elenco di nomi di gate supportati dal backend di destinazione. Ad esempio, ['sx', 'x', 'cx', 'id', 'rz'].
supports_coupling_map
Restituisce se il plugin supporta l'acquisizione di coupling_map
Se questo restituisce True il metodo run() del plugin riceverà un kwarg coupling_map. Il kwarg di coupling_map sarà impostato su una tupla il cui primo elemento sarà un oggetto CouplingMap che rappresenta la connettività dei qubit del backend di destinazione, il secondo elemento sarà un elenco di interi che rappresentano gli indici dei qubit nella mappa di accoppiamento su cui si trova l'unità. Si noti che se il backend di destinazione non ha una mappa di accoppiamento impostata, il valore di coupling_map kwarg sarà (None, qubit_indices).
supports_gate_errors
Restituisce se il plugin supporta l'acquisizione di gate_errors
gate_errors sarà un dizionario nella forma di {gate_name: {(qubit_1, qubit_2): error}}. Ad esempio:
{
'sx': {(0,): 0.0006149355812506126, (1,): 0.0006149355812506126},
'cx': {(0, 1): 0.012012477900732316, (1, 0): 5.191111111111111e-07}
}Si noti che questo dizionario potrebbe non essere completo o essere vuoto, poiché dipende dal backend di destinazione che riporta gli errori di gate su ogni gate per ogni qubit. I tassi di errore di gate riportati in gate_errors sono forniti dall'oggetto Backend del dispositivo di destinazione e il significato esatto potrebbe essere diverso a seconda del backend.
supports_gate_errors_by_qubit
Restituisce se il plugin supporta l'acquisizione di gate_errors_by_qubit
Si differenzia da supports_gate_errors/gate_errors per l'utilizzo di una visione diversa degli stessi dati. Invece di essere codificato in base al nome del gate, è codificato in base al qubit e utilizza le istanze per rappresentare i gate (invece dei nomi dei gate) Gate per rappresentare i gate (invece dei nomi dei gate).
gate_errors_by_qubit sarà un dizionario nella forma di {(qubits,): [Gate, error]}. Ad esempio:
{
(0,): [SXGate(): 0.0006149355812506126, RZGate(): 0.0],
(0, 1): [CXGate(): 0.012012477900732316]
}Si noti che questo dizionario potrebbe non essere completo o essere vuoto, poiché dipende dal backend di destinazione che riporta gli errori di gate su ogni gate per ogni qubit. I tassi di errore di gate riportati in gate_errors sono forniti dall'oggetto Backend del dispositivo di destinazione e il significato esatto potrebbe essere diverso a seconda del backend.
L'impostazione predefinita è False
supports_gate_lengths
Restituisce se il plugin supporta l'acquisizione di gate_lengths
gate_lengths sarà un dizionario nella forma di {gate_name: {(qubit_1, qubit_2): length}}. Ad esempio:
{
'sx': {(0,): 0.0006149355812506126, (1,): 0.0006149355812506126},
'cx': {(0, 1): 0.012012477900732316, (1, 0): 5.191111111111111e-07}
}dove il valore length è in unità di secondi.
Si noti che questo dizionario potrebbe non essere completo o essere vuoto, poiché dipende dal backend di destinazione che riporta le lunghezze dei gate su ogni gate per ogni qubit.
supports_gate_lengths_by_qubit
Restituisce se il plugin supporta l'acquisizione di gate_lengths_by_qubit
Si differenzia da supports_gate_lengths/gate_lengths per l'utilizzo di una visione diversa degli stessi dati. Invece di essere codificato in base al nome del gate, è codificato in base al qubit e utilizza le istanze per rappresentare i gate (invece dei nomi dei gate) Gate per rappresentare i gate (invece dei nomi dei gate)
gate_lengths_by_qubit sarà un dizionario nella forma di {(qubits,): [Gate, length]}. Ad esempio:
{
(0,): [SXGate(): 0.0006149355812506126, RZGate(): 0.0],
(0, 1): [CXGate(): 0.012012477900732316]
}dove il valore length è in unità di secondi.
Si noti che questo dizionario potrebbe non essere completo o essere vuoto, poiché dipende dal backend di destinazione che riporta le lunghezze dei gate su ogni gate per ogni qubit.
L'impostazione predefinita è False
supports_natural_direction
Restituisce se il plugin supporta una levetta per considerare la direzionalità delle porte a 2 qubit come natural_direction.
Consultare la documentazione di UnitarySynthesis per i possibili valori e il loro significato.
supports_pulse_optimize
Restituisce se il plugin supporta un'opzione per ottimizzare gli impulsi durante la sintesi come pulse_optimize.
Consultare la documentazione di UnitarySynthesis per i possibili valori e il loro significato.
supports_target
Il plugin supporta o meno l'opzione target ?
target sarà un Target che rappresenta il dispositivo di destinazione per l'uscita del passaggio di sintesi.
Per impostazione predefinita, questo sarà False , poiché l'interfaccia del plugin è precedente alla classe Target della classe. Se un plugin restituisce True per questo attributo, si prevede che il plugin utilizzi il parametro Target invece dei valori passati se uno qualsiasi di supports_gate_lengths, supports_gate_errors, supports_coupling_map e supports_basis_gates è impostato (anche se idealmente tutti questi parametri dovrebbero contenere informazioni duplicate).
Metodi
run
abstractmethod run(unitary, **options)
Eseguire la sintesi per la matrice unitaria data
Parametri
- unitary (numpy.ndarray) – La matrice unitaria da sintetizzare in un
DAGCircuitoggetto - options - I kwarg opzionali che vengono passati in base all'output dei metodi
support_*sulla classe. Consultare la documentazione di questi metodi suUnitarySynthesisPluginper vedere quali sono le chiavi e i valori.
Risultati
La rappresentazione del circuito dag dell'unitario. In alternativa, si può restituire una tupla della forma (dag, wires) dove dag è la rappresentazione circuitale dag della rappresentazione circuitale dell'unitario e wires è la mappatura dei fili da utilizzare per qiskit.dagcircuit.DAGCircuit.substitute_node_with_dag(). Se si restituisce una tupla e wires è None , questo si comporterà come se fosse stata restituita solo una tupla DAGCircuit è stato restituito. Inoltre, se il risultato è None , non verrà effettuata alcuna sostituzione.
Tipo di restituzione