Información cuántica
qiskit.quantum_info
Operadores
Operator(data[, input_dims, output_dims] ) | Clase de operador matricial |
Pauli([datos] ) | Operador de Pauli de N-qubit. |
Clifford(datos[, validar, copiar] ) | Un operador unitario N-qubit del grupo Clifford. |
ScalarOp([dims, coeff] ) | Clase de operador de identidad escalar. |
SparseObservable(datos, /[, num_qubits] ) | Un observable sobre bases Pauli que almacena sus datos en un formato de qubit disperso. |
SparsePauliOp(datos[, coeficientes,...] ) | Operador N-qubit disperso en una representación de base Pauli. |
PauliLindbladMap(datos, /[, num_qubits] ) | Un mapa Lindblad de Pauli almacenado en un formato de qubit disperso. |
QubitSparsePauli(datos, /[, num_qubits] ) | Un operador de Pauli sin fase almacenado en un formato de qubit disperso. |
QubitSparsePauliList(datos, /[, num_qubits] ) | Una lista de operadores Pauli sin fase almacenados en un formato de qubit disperso. |
PhasedQubitSparsePauli(datos, /[, num_qubits] ) | Un operador de Pauli almacenado en un formato de qubit disperso. |
PhasedQubitSparsePauliList(datos, /[, num_qubits] ) | Una lista de operadores de Pauli con fases almacenadas en un formato de qubit disperso. |
CNOTDihedral([datos, num_qubits, validar] ) | Un operador N-qubit del grupo CNOT-Diédrico. |
PauliList(datos) | Lista de operadores de Pauli de N-qubit. |
pauli_basis(num_qubits[, peso] ) | Devuelve el PauliList ordenado para la base de n-qubit Pauli. |
get_clifford_gate_names() | Devuelve la lista de nombres de puertas Clifford. |
Estados
Statevector(datos[, dims] ) | Clase Statevector |
DensityMatrix(datos[, dims] ) | DensityMatrix clase |
StabilizerState(datos[, validar] ) | StabilizerState clase. |
Canales
Choi(data[, input_dims, output_dims] ) | Representación de matriz de Choi de un canal cuántico. |
SuperOp(data[, input_dims, output_dims] ) | Representación superoperadora de un canal cuántico. |
Kraus(data[, input_dims, output_dims] ) | Representación Kraus de un canal cuántico. |
Stinespring(data[, input_dims, output_dims] ) | Representación Stinespring de un canal cuántico. |
Chi(data[, input_dims, output_dims] ) | Representación Chi-matricial en base Pauli de un canal cuántico. |
PTM(data[, input_dims, output_dims] ) | Representación de la matriz de transferencia de Pauli (PTM) de un canal cuántico. |
Medidas
average_gate_fidelity
qiskit.quantum_info.average_gate_fidelity(channel, target=None, require_cp=True, require_tp=False)
Devuelve la fidelidad de puerta media de un canal cuántico ruidoso.
La fidelidad media de la puerta viene dada por
donde es la process_fidelity() del canal cuántico de entrada con un objetivo unitario , y es la dimensión del canal.
Parámetros
- channel (QuantumChannel or Operator) – canal cuántico ruidoso.
- target (Operator or None) – operador unitario de destino. Si None target es el operador de identidad [Default: Ninguno].
- require_cp (bool) – comprueba si los canales de entrada y de destino son completamente positivos y si el aviso de registro no CP contiene valores propios negativos de la matriz de Choi [Por defecto: True].
- require_tp (bool) – comprueba si los canales de entrada y de destino conservan la traza y si el aviso de registro no TP contiene valores propios negativos de la matriz parcial de Choi [Predeterminado: True].
Devuelve
La fidelidad media de la puerta .
Tipo de retorno
Eleva
QiskitError - si el canal y el objetivo no tienen las mismas dimensiones, o tienen dimensiones de entrada y salida diferentes.
process_fidelity
qiskit.quantum_info.process_fidelity(channel, target=None, require_cp=True, require_tp=True)
Devuelve la fidelidad de proceso de un canal cuántico ruidoso.
La fidelidad de proceso entre dos canales cuánticos viene dada por
donde es el state_fidelity() es la matriz normalizada Choi para el canal , y es la dimensión de entrada de .
Cuando el canal de destino es unitario, esto equivale a
donde son las matrices SuperOp matrices para el canal cuántico de entrada y el unitario objetivo respectivamente, y es la dimensión de entrada del canal.
Parámetros
- channel (Operator or QuantumChannel) – canal cuántico de entrada.
- target (Operator or QuantumChannel or None) – canal cuántico objetivo. Si None target es el operador de identidad [Default: Ninguno].
- require_cp (bool) – comprueba si los canales de entrada y de destino son completamente positivos y si el aviso de registro no CP contiene valores propios negativos de la matriz de Choi [Por defecto: True].
- require_tp (bool) – comprueba si los canales de entrada y de destino conservan la traza y si el aviso de registro no TP contiene valores propios negativos de la matriz parcial de Choi [Predeterminado: True].
Devuelve
La fidelidad del proceso .
Tipo de retorno
Eleva
QiskitError - si el canal y el objetivo no tienen las mismas dimensiones.
gate_error
qiskit.quantum_info.gate_error(channel, target=None, require_cp=True, require_tp=False)
Devuelve el error de puerta de un canal cuántico ruidoso.
El error de puerta viene dado por la infidelidad media de la puerta
donde es el average_gate_fidelity() del canal cuántico de entrada con un objetivo unitario .
Parámetros
- channel (QuantumChannel) – canal cuántico ruidoso.
- target (Operator or None) – operador unitario de destino. Si None target es el operador de identidad [Default: Ninguno].
- require_cp (bool) – comprueba si los canales de entrada y de destino son completamente positivos y si el aviso de registro no CP contiene valores propios negativos de la matriz de Choi [Por defecto: True].
- require_tp (bool) – comprueba si los canales de entrada y de destino conservan la traza y si el aviso de registro no TP contiene valores propios negativos de la matriz parcial de Choi [Predeterminado: True].
Devuelve
El error medio de puerta .
Tipo de retorno
Eleva
QiskitError - si el canal y el objetivo no tienen las mismas dimensiones, o tienen dimensiones de entrada y salida diferentes.
diamond_norm
qiskit.quantum_info.diamond_norm(choi, solver='SCS', **kwargs)
Devuelve la norma diamante del objeto canal cuántico de entrada.
Esta función calcula la traza-norma completamente acotada (a menudo denominada diamante-norma) del objeto canal cuántico de entrada utilizando el programa semidefinido de la referencia [1].
Parámetros
- choi (Choi or QuantumChannel) – un objeto de canal cuántico o matriz de Choi.
- solver (str) – El solucionador a utilizar.
- kwargs - argumentos opcionales para pasar al solucionador CVXPY.
Devuelve
La norma de traza completamente acotada .
Tipo de retorno
Eleva
QiskitError - si no se encuentra el paquete CVXPY.
Información adicional:
La entrada de esta función no suele ser un canal cuántico CPTP, sino la diferencia entre dos canales cuánticos donde .
Referencia:
J. Watrous. "Simpler semidefinite programs for completely bounded norms", arXiv:1207.5726 [quant-ph] (2012).
Esta función requiere tener instalado el paquete opcional CVXPY. Los kwargs adicionales se pasarán a la función cvxpy.solve . Consulte la documentación de CVXPY para obtener información sobre los solucionadores SDP disponibles.
state_fidelity
qiskit.quantum_info.state_fidelity(state1, state2, validate=True)
Devuelve la fidelidad de estado entre dos estados cuánticos.
La fidelidad de estado para los estados de entrada de matriz de densidad viene dada por
Si uno de los estados es un estado puro, esto se simplifica a , donde .
Parámetros
- state1 (Statevector orDensityMatrix) – el primer estado cuántico.
- state2 (Statevector orDensityMatrix) – el segundo estado cuántico.
- validate (bool) – comprobar si las entradas son estados cuánticos válidos [Por defecto: True]
Devuelve
La fidelidad del Estado .
Tipo de retorno
Eleva
QiskitError - si validate=True y las entradas son estados cuánticos inválidos.
purity
qiskit.quantum_info.purity(state, validate=True)
Calcular la pureza de un estado cuántico.
La pureza de una matriz de densidad es
Parámetros
- state (Statevector orDensityMatrix) – un estado cuántico.
- validate (bool) – comprobar si el estado de la entrada es válido [Por defecto: True]
Devuelve
la pureza .
Tipo de retorno
Eleva
QiskitError - si la entrada no es un estado cuántico válido.
concurrence
qiskit.quantum_info.concurrence(state)
Calcular la concurrencia de un estado cuántico.
La concurrencia de un bipartito Statevector viene dada por
donde es el estado reducido obtenido al aplicar la función partial_trace() al estado de entrada.
En el caso de las matrices de densidad, la concurrencia sólo se define para estados de 2 qubits, y viene dada por:
donde son los valores propios ordenados de la matriz .
Parámetros
state (Statevector orDensityMatrix) – un estado cuántico de 2 qubits.
Devuelve
La concurrencia.
Tipo de retorno
Eleva
- QiskitError - si el estado de entrada no es válido QuantumState.
- QiskitError - si la entrada no es un bipartito QuantumState.
- QiskitError - si la entrada de la matriz de densidad no es un estado 2-qubit.
entropy
qiskit.quantum_info.entropy(state, base=2)
Calcular la entropía von-Neumann de un estado cuántico.
La entropía viene dada por
Parámetros
- state (Statevector orDensityMatrix) – un estado cuántico.
- base (int) – la base del logaritmo [Por defecto: 2].
Devuelve
La entropía de von-Neumann S(rho).
Tipo de retorno
Eleva
QiskitError - si el estado de entrada no es válido QuantumState.
entanglement_of_formation
qiskit.quantum_info.entanglement_of_formation(state)
Calcular el entrelazamiento de formación de estado cuántico.
El estado cuántico de entrada debe ser un vector de estado bipartito o una matriz de densidad de 2 qubits.
Parámetros
state (Statevector orDensityMatrix) – un estado cuántico de 2 qubits.
Devuelve
El enredo de la formación.
Tipo de retorno
Eleva
- QiskitError - si el estado de entrada no es válido QuantumState.
- QiskitError - si la entrada no es un bipartito QuantumState.
- QiskitError - si la entrada de la matriz de densidad no es un estado 2-qubit.
mutual_information
qiskit.quantum_info.mutual_information(state, base=2)
Calcular la información mutua de un estado bipartito.
La información mutua viene dada por:
donde , son las matrices de densidad reducida del estado bipartito .
Parámetros
- state (Statevector orDensityMatrix) – un estado bipartito.
- base (int) – la base del logaritmo [Por defecto: 2].
Devuelve
La información mutua .
Tipo de retorno
Eleva
- QiskitError - si el estado de entrada no es válido QuantumState.
- QiskitError - si la entrada no es un bipartito QuantumState.
Funciones de utilidad
Quaternion(datos) | Una clase que representa un Quaternion. |
partial_trace
qiskit.quantum_info.partial_trace(state, qargs)
Devuelve la matriz de densidad reducida trazando parte del estado cuántico.
Si se rastrean todos los subsistemas esto devuelve el trace() del estado de entrada.
Parámetros
- state (Statevector orDensityMatrix) – el estado de entrada.
- qargs (list) – Los subsistemas sobre los que realizar el seguimiento.
Devuelve
La matriz de densidad reducida.
Tipo de retorno
Eleva
QiskitError - si el estado de entrada no es válido.
schmidt_decomposition
qiskit.quantum_info.schmidt_decomposition(state, qargs)
Devuelve la descomposición de Schmidt de un estado cuántico puro.
Para un estado bipartito arbitrario:
su descomposición de Schmidt viene dada por la suma de un índice sobre k:
donde y son un conjunto ortonormal de vectores en sus respectivos espacios y , y los coeficientes de Schmidt son valores reales positivos.
Parámetros
- state (Statevector orDensityMatrix) – el estado de entrada.
- qargs (list) – la lista de posiciones de estado de entrada correspondientes al subsistema .
Devuelve
lista de tuplas (s, u, v), donde s (float) son los coeficientes Schmidt , y u (Statevector), v (Statevector) son los vectores Schmidt , , respectivamente.
Tipo de retorno
Eleva
- QiskitError - si Input qargs no es una lista de posiciones del estado Input.
- QiskitError - si Input qargs no es un subconjunto adecuado de Input state.
En Qiskit, los qubits se ordenan utilizando la notación little-endian, y los qubits menos significativos tienen índices más pequeños. Por ejemplo, un sistema de cuatro qubits se representa como . Usando esta convención, al establecer qargs=[0] se particionará el estado como . Además, los qubits se organizarán en esta notación independientemente del orden en que se pasen. Por ejemplo, si se pasa qargs=[1,2] o qargs=[2,1] , el estado se particionará como .
shannon_entropy
qiskit.quantum_info.shannon_entropy(pvec, base=2)
Calcular la entropía de Shannon de un vector de probabilidad.
La entropía de Shannon de un vector de probabilidad se define como
donde es la base logarítmica y (por defecto 2), y .
Parámetros
- pvec (array_like) – un vector de probabilidad.
- base (int) – la base del logaritmo [Por defecto: 2].
Devuelve
La entropía de Shannon H(pvec).
Tipo de retorno
commutator
qiskit.quantum_info.commutator(a, b)
Calcula el conmutador de a y b.
Parámetros
- a (OperatorTypeT) – Operador a.
- b (OperatorTypeT) – Operador b.
Devuelve
El conmutador
Tipo de retorno
OperatorTypeT
anti_commutator
qiskit.quantum_info.anti_commutator(a, b)
Calcula el anticomutador de a y b.
Parámetros
- a (OperatorTypeT) – Operador a.
- b (OperatorTypeT) – Operador b.
Devuelve
El anticomutador
Tipo de retorno
OperatorTypeT
double_commutator
qiskit.quantum_info.double_commutator(a, b, c, *, commutator=True)
Calcula el doble conmutador simétrico de a, b y c.
Véase también la ecuación ( 13.6.18 ) en [1].
Si conmutador es True, devuelve
Si conmutador es False, devuelve
Parámetros
- a (OperatorTypeT) – Operador a.
- b (OperatorTypeT) – Operador b.
- c (OperatorTypeT) – Operador c.
- commutator (bool) – Si
Truecalcula el doble conmutador, siFalseel doble anticonmutador.
Devuelve
El conmutador doble
Tipo de retorno
OperatorTypeT
Referencias
[1] : R. McWeeny.
Métodos de mecánica cuántica molecular. 2ª edición, Academic Press, 1992. ISBN 0-12-486552-6.
Aleatorio
random_statevector
qiskit.quantum_info.random_statevector(dims, seed=None)
Genera un vector de estado aleatorio.
El vector de estado se muestrea a partir de la distribución uniforme. Es la medida inducida por la medida de Haar sobre matrices unitarias.
Parámetros
- dims (int ortuple) – las dimensiones del Estado.
- seed (int or np.random.Generator) – Opcional. Establece una semilla o generador fijo para el RNG.
Devuelve
el vector de estado aleatorio.
Tipo de retorno
Referencia:
K. Zyczkowski y H. Sommers (2001), "Induced measures in the space of mixed quantum states", J. Física. R: Matemáticas. Gen. 34 7111.
random_density_matrix
qiskit.quantum_info.random_density_matrix(dims, rank=None, method='Hilbert-Schmidt', seed=None)
Genera una matriz de densidad aleatoria.
Parámetros
- dims (int ortuple) – las dimensiones de DensityMatrix.
- rank (int or None) – el rango de la matriz de densidad. El valor predeterminado es «full-rank».
- method (string) – Opcional. El método a utilizar. 'Hilbert-Schmidt': (Por defecto) muestra de la métrica Hilbert-Schmidt. 'Bures': muestra de la métrica Bures.
- seed (int or np.random.Generator) – Opcional. Establece una semilla o generador fijo para el RNG.
Devuelve
la matriz de densidad aleatoria.
Tipo de retorno
Eleva
QiskitError - si el método no es válido.
random_unitary
qiskit.quantum_info.random_unitary(dims, seed=None)
Devuelve un Operador unitario aleatorio.
El operador se muestrea a partir de la medida unitaria de Haar.
Parámetros
- dims (int ortuple) – las dimensiones de entrada del Operador.
- seed (int or np.random.Generator) – Opcional. Establece una semilla o generador fijo para el RNG.
Devuelve
un operador unitario.
Tipo de retorno
random_hermitian
qiskit.quantum_info.random_hermitian(dims, traceless=False, seed=None)
Devuelve un Operador hermitiano aleatorio.
El operador se muestrea a partir de un conjunto unitario gaussiano.
Parámetros
- dims (int ortuple) – la dimensión de entrada del Operador.
- traceless (bool) – Opcional. Si es True resta las entradas diagonales para devolver un operador hermitiano sin trazas (por defecto: False).
- seed (int or np.random.Generator) – Opcional. Establece una semilla o generador fijo para el RNG.
Devuelve
un operador hermitiano.
Tipo de retorno
random_pauli
qiskit.quantum_info.random_pauli(num_qubits, group_phase=False, seed=None)
Devuelve un Pauli aleatorio.
Parámetros
- num_qubits (int) – el número de qubits.
- group_phase (bool) – Opcional. Si es True genera una fase aleatoria. En caso contrario, la fase se ajustará de modo que el coeficiente de Pauli sea +1 (por defecto: Falso).
- seed (int or np.random.Generator) – Opcional. Establece una semilla o generador fijo para el RNG.
Devuelve
un Pauli aleatorio
Tipo de retorno
random_clifford
qiskit.quantum_info.random_clifford(num_qubits, seed=None)
Devuelve un operador Clifford aleatorio.
El Clifford se muestrea siguiendo el método de la referencia [1].
Parámetros
- num_qubits (int) – el número de qubits para el Clifford
- seed (int or np.random.Generator) – Opcional. Establece una semilla o generador fijo para el RNG.
Devuelve
un operador aleatorio de Clifford.
Tipo de retorno
Referencia:
- S. Bravyi y D. Maslov, Hadamard-free circuits expose the structure of the Clifford group. arXiv:2003.09412 [quant-ph]
random_quantum_channel
qiskit.quantum_info.random_quantum_channel(input_dims=None, output_dims=None, rank=None, seed=None)
Devuelve un canal cuántico CPTP aleatorio.
Esto construye el operador de Stinespring para el canal cuántico mediante el muestreo de una isometría aleatoria de la medida unitaria de Haar.
Parámetros
- input_dims (int ortuple) – la dimensión de entrada del canal.
- output_dims (int ortuple) – la dimensión de salida del canal.
- rank (int) – Opcional. El rango de la matriz de Choi del canal cuántico.
- seed (int or np.random.Generator) – Opcional. Establece una semilla o generador fijo para el RNG.
Devuelve
un operador de canal cuántico.
Tipo de retorno
Eleva
QiskitError - si el rango o las dimensiones no son válidos.
random_cnotdihedral
qiskit.quantum_info.random_cnotdihedral(num_qubits, seed=None)
Devuelve un elemento CNOTDihedral aleatorio.
Parámetros
- num_qubits (int) – el número de qubits del objeto CNOTDihedral.
- seed (int or RandomState) – Opcional. Establece una semilla o generador fijo para el RNG.
Devuelve
un elemento CNOTDihedral aleatorio.
Tipo de retorno
random_pauli_list
qiskit.quantum_info.random_pauli_list(num_qubits, size=1, seed=None, phase=True)
Devuelve un PauliList aleatorio.
Parámetros
- num_qubits (int) – el número de qubits.
- size (int) – Opcional. La longitud de la lista Pauli (Por defecto: 1).
- seed (int or np.random.Generator) – Opcional. Establece una semilla o generador fijo para el RNG.
- phase (bool) – Si es True las fases Pauli se aleatorizan, en caso contrario las fases se fijan a 0. [Valor predeterminado: True]
Devuelve
un PauliList aleatorio.
Tipo de retorno
Análisis
hellinger_distance
qiskit.quantum_info.hellinger_distance(dist_p, dist_q)
Calcula la distancia de Hellinger entre dos distribuciones de recuento.
Parámetros
Devuelve
Distancia
Tipo de retorno
Referencias
hellinger_fidelity
qiskit.quantum_info.hellinger_fidelity(dist_p, dist_q)
Calcula la fidelidad de Hellinger entre dos distribuciones de recuentos.
La fidelidad se define como donde H es la distancia de Hellinger. Este valor está acotado en el intervalo [0, 1].
Esto es equivalente a la fidelidad clásica estándar que a su vez es igual a la fidelidad del estado cuántico para matrices de densidad diagonales.
Parámetros
Devuelve
Fidelidad
Tipo de retorno
Ejemplo
from qiskit import QuantumCircuit
from qiskit.quantum_info.analysis import hellinger_fidelity
from qiskit.providers.basic_provider import BasicSimulator
qc = QuantumCircuit(5, 5)
qc.h(2)
qc.cx(2, 1)
qc.cx(2, 3)
qc.cx(3, 4)
qc.cx(1, 0)
qc.measure(range(5), range(5))
sim = BasicSimulator()
res1 = sim.run(qc).result()
res2 = sim.run(qc).result()
hellinger_fidelity(res1.get_counts(), res2.get_counts())Referencias
Fidelidad cuántica @ wikipedia Distancia de Hellinger @ wikipedia
Z2Symmetries(simetrías, sq_paulis, sq_list) | El convertidor de simetría $Z_2$ identifica simetrías del hamiltoniano del problema y las utiliza para proporcionar una representación cónica -más eficiente- de los operadores como Paulis para este problema. |