Informação Quântica
qiskit.quantum_info
Operadores
Operator(dados[, input_dims, output_dims] ) | Classe de operador de matriz |
Pauli([dados] ) | Operador Pauli de N-qubit. |
Clifford(dados[, validação, cópia] ) | Um operador unitário N-qubit do grupo Clifford. |
ScalarOp([dims, coeff] ) | Classe de operador de identidade escalar. |
SparseObservable(dados, /[, número de qubits] ) | Um observável sobre bases Pauli que armazena seus dados em um formato qubit-esparso. |
SparsePauliOp(dados[, coeficientes,...] ) | Operador N-qubit esparso em uma representação de base Pauli. |
PauliLindbladMap(dados, /[, número de qubits] ) | Um mapa de Pauli Lindblad armazenado em um formato qubit-esparso. |
QubitSparsePauli(dados, /[, número de qubits] ) | Um operador Pauli sem fase armazenado em um formato esparso de qubit. |
QubitSparsePauliList(dados, /[, número de qubits] ) | Uma lista de operadores Pauli sem fase armazenada em um formato qubit-esparso. |
PhasedQubitSparsePauli(dados, /[, número de qubits] ) | Um operador Pauli armazenado em um formato esparso de qubit. |
PhasedQubitSparsePauliList(dados, /[, número de qubits] ) | Uma lista de operadores Pauli com fases armazenadas em um formato esparso de qubit. |
CNOTDihedral([data, num_qubits, validate] ) | Um operador N-qubit do grupo CNOT-Dihedral. |
PauliList(dados) | Lista de operadores Pauli de N-qubit. |
pauli_basis(num_qubits[, peso] ) | Retorna o PauliList ordenado para a base Pauli de n-qubit. |
get_clifford_gate_names() | Retorna a lista de nomes de portas Clifford. |
Estados
Statevector(data[, dims] ) | Classe de vetor de estado |
DensityMatrix(data[, dims] ) | DensityMatrix classe |
StabilizerState(dados[, validação] ) | StabilizerState classe. |
Canais
Choi(dados[, input_dims, output_dims] ) | Representação da matriz Choi de um canal quântico. |
SuperOp(dados[, input_dims, output_dims] ) | Representação de superoperador de um canal quântico. |
Kraus(dados[, input_dims, output_dims] ) | Representação de Kraus de um canal quântico. |
Stinespring(dados[, input_dims, output_dims] ) | Representação em Stinespring de um canal quântico. |
Chi(dados[, input_dims, output_dims] ) | Representação da matriz Chi com base em Pauli de um canal quântico. |
PTM(dados[, input_dims, output_dims] ) | Representação da matriz de transferência de Pauli (PTM) de um canal quântico. |
Medidas
average_gate_fidelity
qiskit.quantum_info.average_gate_fidelity(channel, target=None, require_cp=True, require_tp=False)
Retorna a fidelidade média da porta de um canal quântico com ruído.
A fidelidade média da porta é dada por
em que é o process_fidelity() do canal quântico de entrada com um alvo unitário , e é a dimensão do canal.
Parâmetros
- channel (QuantumChannel or Operator) – canal quântico com ruído.
- target (Operator or None) – operador unitário de destino. Se Nenhum, o alvo é o operador de identidade [Padrão: Nenhum].
- require_cp (bool) – verifica se os canais de entrada e de destino são completamente positivos e se o aviso de registro não-CP contém autovalores negativos da matriz de Choi [Padrão: True].
- require_tp (bool) – verifica se os canais de entrada e de destino preservam o traço e se o aviso de registro não TP contém valores próprios negativos da matriz Choi parcial [Padrão: True].
Retorna
A fidelidade média da porta .
Tipo de retorno
Aumentos
QiskitError - se o canal e o destino não tiverem as mesmas dimensões ou tiverem dimensões de entrada e saída diferentes.
process_fidelity
qiskit.quantum_info.process_fidelity(channel, target=None, require_cp=True, require_tp=True)
Retorna a fidelidade do processo de um canal quântico com ruído.
A fidelidade do processo entre dois canais quânticos é dada por
em que é o state_fidelity(), é a matriz normalizada Choi normalizada para o canal , e é a dimensão de entrada de .
Quando o canal de destino é unitário, isso é equivalente a
em que são as SuperOp para o canal quântico de entrada e o alvo unitário , respectivamente, e é a dimensão de entrada do canal.
Parâmetros
- channel (Operator or QuantumChannel) – canal quântico de entrada.
- target (Operator or QuantumChannel or None) – canal quântico alvo. Se Nenhum, o alvo é o operador de identidade [Padrão: Nenhum].
- require_cp (bool) – verifica se os canais de entrada e de destino são completamente positivos e se o aviso de registro não-CP contém autovalores negativos da matriz de Choi [Padrão: True].
- require_tp (bool) – verifica se os canais de entrada e de destino preservam o traço e se o aviso de registro não TP contém valores próprios negativos da matriz Choi parcial [Padrão: True].
Retorna
A fidelidade do processo .
Tipo de retorno
Aumentos
QiskitError - se o canal e o alvo não tiverem as mesmas dimensões.
gate_error
qiskit.quantum_info.gate_error(channel, target=None, require_cp=True, require_tp=False)
Retorna o erro de porta de um canal quântico com ruído.
O erro da porta é dado pela infidelidade média da porta
em que é o average_gate_fidelity() do canal quântico de entrada com um alvo unitário .
Parâmetros
- channel (QuantumChannel) – canal quântico com ruído.
- target (Operator or None) – operador unitário de destino. Se Nenhum, o alvo é o operador de identidade [Padrão: Nenhum].
- require_cp (bool) – verifica se os canais de entrada e de destino são completamente positivos e se o aviso de registro não-CP contém autovalores negativos da matriz de Choi [Padrão: True].
- require_tp (bool) – verifica se os canais de entrada e de destino preservam o traço e se o aviso de registro não TP contém valores próprios negativos da matriz Choi parcial [Padrão: True].
Retorna
O erro médio da porta .
Tipo de retorno
Aumentos
QiskitError - se o canal e o destino não tiverem as mesmas dimensões ou tiverem dimensões de entrada e saída diferentes.
diamond_norm
qiskit.quantum_info.diamond_norm(choi, solver='SCS', **kwargs)
Retorna a norma de diamante do objeto de canal quântico de entrada.
Essa função calcula a norma de rastreamento completamente limitada (geralmente chamada de norma de diamante) do objeto de canal quântico de entrada usando o programa semidefinido da referência [1].
Parâmetros
- choi (Choi or QuantumChannel) – um objeto de canal quântico ou matriz de Choi.
- solver (str) – O solucionador a ser usado.
- kwargs - argumentos opcionais a serem passados para o solucionador CVXPY.
Retorna
A norma de traço completamente limitada .
Tipo de retorno
Aumentos
QiskitError - se o pacote CVXPY não puder ser encontrado.
Informações adicionais:
Normalmente, a entrada para essa função não é um canal quântico CPTP, mas sim a diferença entre dois canais quânticos onde .
Referência:
J. Watrous. "Simpler semidefinite programs for completely bounded norms" (Programas semidefinidos mais simples para normas completamente limitadas), arXiv:1207.5726 [quant-ph] (2012).
Essa função requer a instalação do pacote opcional CVXPY. Quaisquer kwargs adicionais serão passados para a função cvxpy.solve . Consulte a documentação do CVXPY para obter informações sobre os solucionadores SDP disponíveis.
state_fidelity
qiskit.quantum_info.state_fidelity(state1, state2, validate=True)
Retorna a fidelidade de estado entre dois estados quânticos.
A fidelidade do estado para os estados de entrada da matriz de densidade é dada por
Se um dos estados for um estado puro, isso se simplifica para , onde .
Parâmetros
- state1 (Statevector orDensityMatrix) – o primeiro estado quântico.
- state2 (Statevector orDensityMatrix) – o segundo estado quântico.
- validate (bool) – verifica se as entradas são estados quânticos válidos [Padrão: True]
Retorna
A fidelidade do estado .
Tipo de retorno
Aumentos
QiskitError - se validate=True e as entradas forem estados quânticos inválidos.
purity
qiskit.quantum_info.purity(state, validate=True)
Calcule a pureza de um estado quântico.
A pureza de uma matriz de densidade é
Parâmetros
- state (Statevector orDensityMatrix) – um estado quântico.
- validate (bool) – verificar se o estado da entrada é válido [Padrão: True]
Retorna
a pureza .
Tipo de retorno
Aumentos
QiskitError - se a entrada não for um estado quântico válido.
concurrence
qiskit.quantum_info.concurrence(state)
Calcule a concorrência de um estado quântico.
A concorrência de um bipartido Statevector é dada por
onde é o estado reduzido obtido a partial_trace() partir do estado de entrada.
Para as matrizes de densidade, a concorrência é definida apenas para estados de 2 qubit e é dada por:
em que são os valores próprios ordenados da matriz .
Parâmetros
state (Statevector orDensityMatrix) – um estado quântico de 2 qubits.
Retorna
A concordância.
Tipo de retorno
Aumentos
- QiskitError - se o estado de entrada não for um QuantumState válido.
- QiskitError - se a entrada não for bipartida QuantumState.
- QiskitError - se a entrada da matriz de densidade não for um estado de 2 qubit.
entropy
qiskit.quantum_info.entropy(state, base=2)
Calcule a entropia de von-Neumann de um estado quântico.
A entropia é dada por
Parâmetros
- state (Statevector orDensityMatrix) – um estado quântico.
- base (int) – a base do logaritmo [Padrão: 2].
Retorna
A entropia de von-Neumann S(rho).
Tipo de retorno
Aumentos
QiskitError - se o estado de entrada não for um QuantumState válido.
entanglement_of_formation
qiskit.quantum_info.entanglement_of_formation(state)
Calcule o emaranhamento da formação do estado quântico.
O estado quântico de entrada deve ser um vetor de estado bipartido ou uma matriz de densidade de 2 qubits.
Parâmetros
state (Statevector orDensityMatrix) – um estado quântico de 2 qubits.
Retorna
O emaranhamento da formação.
Tipo de retorno
Aumentos
- QiskitError - se o estado de entrada não for um QuantumState válido.
- QiskitError - se a entrada não for bipartida QuantumState.
- QiskitError - se a entrada da matriz de densidade não for um estado de 2 qubit.
mutual_information
qiskit.quantum_info.mutual_information(state, base=2)
Calcule a informação mútua de um estado bipartido.
A informação mútua é dada por:
em que , são as matrizes de densidade reduzida do estado bipartido .
Parâmetros
- state (Statevector orDensityMatrix) – um estado bipartido.
- base (int) – a base do logaritmo [Padrão: 2].
Retorna
A informação mútua .
Tipo de retorno
Aumentos
- QiskitError - se o estado de entrada não for um QuantumState válido.
- QiskitError - se a entrada não for bipartida QuantumState.
Funções de Utilitário
Quaternion(dados) | Uma classe que representa um quaternion. |
partial_trace
qiskit.quantum_info.partial_trace(state, qargs)
Retorna a matriz de densidade reduzida ao rastrear parte do estado quântico.
Se todos os subsistemas forem rastreados, isso retornará o trace() do estado de entrada.
Parâmetros
- state (Statevector orDensityMatrix) – o estado da entrada.
- qargs (list) – Os subsistemas a serem rastreados.
Retorna
A matriz de densidade reduzida.
Tipo de retorno
Aumentos
QiskitError - se o estado da entrada for inválido.
schmidt_decomposition
qiskit.quantum_info.schmidt_decomposition(state, qargs)
Retorna a Decomposição de Schmidt de um estado quântico puro.
Para um estado bipartido arbitrário:
sua Decomposição de Schmidt é dada pela soma de índice único sobre k:
em que e são um conjunto ortonormal de vetores em seus respectivos espaços e , e os coeficientes de Schmidt são valores reais positivos.
Parâmetros
- state (Statevector orDensityMatrix) – o estado da entrada.
- qargs (list) – a lista de posições do estado de entrada correspondente ao subsistema .
Retorna
lista de tuplas (s, u, v), em que s (float) são os coeficientes de Schmidt , e u (Statevector), v (Statevector) são os vetores de Schmidt , , respectivamente.
Tipo de retorno
Aumentos
- QiskitError - se Input qargs não for uma lista de posições do estado Input.
- QiskitError - se Input qargs não for um subconjunto adequado de Input state.
No Qiskit, os qubits são ordenados usando a notação little-endian, com os qubits menos significativos tendo índices menores. Por exemplo, um sistema de quatro qubits é representado como . Usando essa convenção, a configuração qargs=[0] dividirá o estado como . Além disso, os qubits serão organizados nessa notação, independentemente da ordem em que forem passados. Por exemplo, passar qargs=[1,2] ou qargs=[2,1] resultará no particionamento do estado como .
shannon_entropy
qiskit.quantum_info.shannon_entropy(pvec, base=2)
Calcule a entropia de Shannon de um vetor de probabilidade.
A entropia de Shannon de um vetor de probabilidade é definida como
em que é a base de log e (padrão 2) e .
Parâmetros
- pvec (array_like) – um vetor de probabilidade.
- base (int) – a base do logaritmo [Padrão: 2].
Retorna
A entropia de Shannon H(pvec).
Tipo de retorno
commutator
qiskit.quantum_info.commutator(a, b)
Calcule o comutador de a e b.
Parâmetros
- a (OperatorTypeT) – Operador a.
- b (OperatorTypeT) – Operador b.
Retorna
O comutador
Tipo de retorno
OperatorTypeT
anti_commutator
qiskit.quantum_info.anti_commutator(a, b)
Calcule o anti-comutador de a e b.
Parâmetros
- a (OperatorTypeT) – Operador a.
- b (OperatorTypeT) – Operador b.
Retorna
O anti-comutador
Tipo de retorno
OperatorTypeT
double_commutator
qiskit.quantum_info.double_commutator(a, b, c, *, commutator=True)
Calcule o comutador duplo simétrico de a, b e c.
Consulte também a Equação ( 13.6.18 ) em [1].
Se o comutador for verdadeiro, ele retornará
Se o comutador for False, ele retornará
Parâmetros
- a (OperatorTypeT) – Operador a.
- b (OperatorTypeT) – Operador b.
- c (OperatorTypeT) – Operador c.
- commutator (bool) – Se
Truecomputar o comutador duplo, seFalseo anticomutador duplo.
Retorna
O comutador duplo
Tipo de retorno
OperatorTypeT
Referências
[1] : R. McWeeny.
Methods of Molecular Quantum Mechanics (Métodos de Mecânica Quântica Molecular). 2ª edição, Academic Press, 1992. ISBN 0-12-486552-6.
Aleatório
random_statevector
qiskit.quantum_info.random_statevector(dims, seed=None)
Gerar um vetor de estado aleatório.
O vetor de estado é amostrado a partir da distribuição uniforme. Essa é a medida induzida pela medida de Haar em matrizes unitárias.
Parâmetros
- dims (int ortuple) – as dimensões do estado.
- seed (int or np.random.Generator) – Opcional. Defina uma semente ou gerador fixo para o RNG.
Retorna
o vetor de estado aleatório.
Tipo de retorno
Referência:
K. Zyczkowski e H. Sommers (2001), "Induced measures in the space of mixed quantum states", J. Física. R: Matemática. Gen. 34 7111.
random_density_matrix
qiskit.quantum_info.random_density_matrix(dims, rank=None, method='Hilbert-Schmidt', seed=None)
Gerar uma matriz de densidade aleatória.
Parâmetros
- dims (int ortuple) – as dimensões do site DensityMatrix.
- rank (int or None) – a ordem da matriz de densidade. O valor padrão é de classificação completa.
- method (string) – Opcional. O método a ser usado. 'Hilbert-Schmidt': (Padrão) amostra da métrica de Hilbert-Schmidt. 'Bures': amostra da métrica Bures.
- seed (int or np.random.Generator) – Opcional. Defina uma semente ou gerador fixo para o RNG.
Retorna
a matriz de densidade aleatória.
Tipo de retorno
Aumentos
QiskitError - se o método não for válido.
random_unitary
qiskit.quantum_info.random_unitary(dims, seed=None)
Retorna um operador unitário aleatório.
O operador é amostrado a partir da medida unitária de Haar.
Parâmetros
- dims (int ortuple) – as dimensões de entrada do Operador.
- seed (int or np.random.Generator) – Opcional. Defina uma semente ou gerador fixo para o RNG.
Retorna
um operador unitário.
Tipo de retorno
random_hermitian
qiskit.quantum_info.random_hermitian(dims, traceless=False, seed=None)
Retorna um operador hermitiano aleatório.
O operador é amostrado a partir do Gaussian Unitary Ensemble.
Parâmetros
- dims (int ortuple) – a dimensão de entrada do Operador.
- traceless (bool) – Opcional. Se verdadeiro, subtraia as entradas diagonais para retornar um operador hermitiano sem traços (Padrão: Falso).
- seed (int or np.random.Generator) – Opcional. Defina uma semente ou gerador fixo para o RNG.
Retorna
um operador hermitiano.
Tipo de retorno
random_pauli
qiskit.quantum_info.random_pauli(num_qubits, group_phase=False, seed=None)
Retorna um Pauli aleatório.
Parâmetros
- num_qubits (int) – o número de qubits.
- group_phase (bool) – Opcional. Se verdadeiro, gerar fase aleatória. Caso contrário, a fase será definida de modo que o coeficiente de Pauli seja +1 (padrão: False).
- seed (int or np.random.Generator) – Opcional. Defina uma semente ou gerador fixo para o RNG.
Retorna
um Pauli aleatório
Tipo de retorno
random_clifford
qiskit.quantum_info.random_clifford(num_qubits, seed=None)
Retorna um operador de Clifford aleatório.
O Clifford é amostrado usando o método da Referência [1].
Parâmetros
- num_qubits (int) – o número de qubits para o Clifford
- seed (int or np.random.Generator) – Opcional. Defina uma semente ou gerador fixo para o RNG.
Retorna
um operador de Clifford aleatório.
Tipo de retorno
Referência:
- S. Bravyi e D. Maslov, Hadamard-free circuits expose the structure of the Clifford group (Circuitos sem Hadamard expõem a estrutura do grupo Clifford ). arXiv:2003.09412 [quant-ph]
random_quantum_channel
qiskit.quantum_info.random_quantum_channel(input_dims=None, output_dims=None, rank=None, seed=None)
Retorna um canal quântico CPTP aleatório.
Isso constrói o operador Stinespring para o canal quântico por meio da amostragem de uma isometria aleatória da medida Haar unitária.
Parâmetros
- input_dims (int ortuple) – a dimensão de entrada do canal.
- output_dims (int ortuple) – a dimensão de saída do canal.
- rank (int) – Opcional. A classificação da matriz Choi do canal quântico.
- seed (int or np.random.Generator) – Opcional. Defina uma semente ou gerador fixo para o RNG.
Retorna
um operador de canal quântico.
Tipo de retorno
Aumentos
QiskitError - se a classificação ou as dimensões forem inválidas.
random_cnotdihedral
qiskit.quantum_info.random_cnotdihedral(num_qubits, seed=None)
Retorna um elemento CNOTDihedral aleatório.
Parâmetros
- num_qubits (int) – o número de qubits para o objeto CNOTDihedral.
- seed (int or RandomState) – Opcional. Defina uma semente ou gerador fixo para o RNG.
Retorna
um elemento CNOTDihedral aleatório.
Tipo de retorno
random_pauli_list
qiskit.quantum_info.random_pauli_list(num_qubits, size=1, seed=None, phase=True)
Retorna um PauliList aleatório.
Parâmetros
- num_qubits (int) – o número de qubits.
- size (int) – Opcional. O comprimento da lista Pauli (Padrão: 1).
- seed (int or np.random.Generator) – Opcional. Defina uma semente ou gerador fixo para o RNG.
- phase (bool) – Se True, as fases de Pauli são randomizadas; caso contrário, as fases são fixadas em 0. [Padrão: True]
Retorna
um PauliList aleatório.
Tipo de retorno
Análise
hellinger_distance
qiskit.quantum_info.hellinger_distance(dist_p, dist_q)
Calcula a distância de Hellinger entre duas distribuições de contagem.
Parâmetros
Retorna
Distância
Tipo de retorno
Referências
hellinger_fidelity
qiskit.quantum_info.hellinger_fidelity(dist_p, dist_q)
Calcula a fidelidade de Hellinger entre duas distribuições de contagens.
A fidelidade é definida como , em que H é a distância de Hellinger. Esse valor é limitado no intervalo [0, 1].
Isso é equivalente à fidelidade clássica padrão que, por sua vez, é igual à fidelidade do estado quântico para matrizes de densidade diagonal.
Parâmetros
Retorna
Fidelidade
Tipo de retorno
Exemplo
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())Referências
Fidelidade quântica @ wikipedia Distância de Hellinger @ wikipedia
Z2Symmetries(simetrias, sq_paulis, sq_list) | O conversor de simetria $Z_2$ identifica as simetrias do hamiltoniano do problema e as utiliza para fornecer uma representação cônica - mais eficiente - dos operadores como Paulis para esse problema. |