CouplingMap
class qiskit.transpiler.CouplingMap(couplinglist=None, description=None)
Bases: object
Gráfico direcionado que especifica o acoplamento fixo.
Os nós correspondem a qubits físicos (inteiros) e as bordas direcionadas correspondem a portas CNOT permitidas, com a origem e o destino correspondendo aos qubits de controle e de destino, respectivamente.
Criar gráfico de acoplamento. Por padrão, o acoplamento gerado não tem nós.
Parâmetros
- couplinglist (list or None) – Um gráfico de acoplamento inicial, especificado como uma lista de adjacência contendo acoplamentos, por exemplo, [[0,1], [0,2], [1,2] ]. É necessário que os nós sejam indexados de forma contígua, começando em 0. Os nós perdidos serão adicionados como nós isolados no mapa de acoplamento.
- description (str) – Uma cadeia de caracteres para descrever o mapa de acoplamento.
Atributos
description
graph
distance_matrix
Retorna a matriz de distância para o mapa de acoplamento.
Para qualquer qubits em que não haja um caminho disponível entre eles, o valor nessa posição da matriz de distância será math.inf.
is_symmetric
Teste se o gráfico é simétrico.
Retorna True se for simétrico, False caso contrário
physical_qubits
Retorna uma lista ordenada de physical_qubits
Métodos
add_edge
add_edge(src, dst)
Adicione uma borda direcionada ao gráfico de acoplamento.
src (int): qubit físico de origem dst (int): qubit físico de destino
add_physical_qubit
add_physical_qubit(physical_qubit)
Adicione um qubit físico ao gráfico de acoplamento como um nó.
physical_qubit (int): Um número inteiro que representa um qubit físico.
Aumentos
CouplingError - se estiver tentando adicionar um qubit duplicado
compute_distance_matrix
compute_distance_matrix()
Calcule a matriz de distância total em pares de nós.
O mapa de distância self._dist_matrix é calculado a partir do gráfico usando all_pairs_shortest_path_length. Normalmente, isso é tratado internamente pelo atributo distance_matrix ou pelo método distance() mas pode ser chamado se você estiver acessando a matriz de distância fora desses métodos ou se quiser pré-gerá-la.
connected_components
connected_components()
Separar um CouplingMap em um subgráfico CouplingMap para cada componente conectado.
Os componentes conectados de um CouplingMap são os subgrafos que não fazem parte de nenhum subgrafo maior. Por exemplo, se você tivesse um mapa de acoplamento com a seguinte aparência:
0 --> 1 4 --> 5 ---> 6 --> 7
| |
| |
V V
2 --> 3então os componentes conectados desse gráfico são os subgráficos:
0 --> 1
| |
| |
V V
2 --> 3e:
4 --> 5 ---> 6 --> 7Para um objeto CouplingMap existe apenas um único componente conectado, todo o CouplingMap.
Este método retornará uma lista de CouplingMap objetos, um para cada componente conexo neste CouplingMap. A carga de dados de cada nó no graph atributo conterá o número do qubit no gráfico original. Isso permitirá mapear o índice do qubit em um subgrafo componente para o qubit original no grafo combinado CouplingMap. Por exemplo:
from qiskit.transpiler import CouplingMap
cmap = CouplingMap([[0, 1], [1, 2], [2, 0], [3, 4], [4, 5], [5, 3]])
component_cmaps = cmap.connected_components()
print(component_cmaps[1].graph[0])imprimirá 3 , pois o índice 0 no segundo componente é o qubit 3 no cmap original.
Retorna
Uma lista de objetos CouplingMap para cada conexão
componentes. A ordem dessa lista é determinística, mas específica da implementação e não deve ser considerada como parte da API.
Tipo de retorno
distance
distance(physical_qubit1, physical_qubit2)
Retorna a distância não direcionada entre physical_qubit1 e physical_qubit2.
Parâmetros
Retorna
A distância não direcionada
Tipo de retorno
Aumentos
CouplingError - se os qubits não existirem no CouplingMap
draw
draw(method='neato')
Desenha o mapa de acoplamento.
Essa função chama a função graphviz_draw() do pacote rustworkx para desenhar o objeto CouplingMap objeto.
Esta função chamará a ferramenta Graphviz do sistema para processar um arquivo que contenha cadeias de caracteres controláveis pelo usuário (como objetos qubit). Recomenda-se chamar esta função apenas com entradas confiáveis.
Parâmetros
method (str) – O método de layout a ser utilizado. Consulte a documentação de graphviz_draw() para obter a lista de métodos compatíveis
Retorna
Mapa de acoplamento desenhado.
Tipo de retorno
PIL.Image
from_full
classmethod from_full(num_qubits, bidirectional=True)
Retorna um mapa de acoplamento totalmente conectado em n qubits.
Tipo de retorno
from_grid
classmethod from_grid(num_rows, num_columns, bidirectional=True)
Retorna um mapa de acoplamento de qubits conectados em uma grade de num_rows x num_columns.
Tipo de retorno
from_heavy_hex
classmethod from_heavy_hex(distance, bidirectional=True)
Retorna um mapa de acoplamento de gráfico de hexágono pesado.
Um gráfico de hexágono pesado é descrito em:
https://journals.aps.org/prx/abstract/10.1103/PhysRevX.10.011022
Parâmetros
- distance (int) – A distância do código para o gráfico hexagonal pesado gerado. O valor da distância pode ser qualquer número inteiro positivo ímpar. A distância está relacionada ao número de qubits por: onde é o número de qubits e é o parâmetro
distance. - bidirectional (bool) – Se as bordas no gráfico de acoplamento de saída são bidirecionais ou não. Por padrão, isso é definido como
True
Retorna
Um gráfico de acoplamento hexagonal pesado
Tipo de retorno
from_heavy_square
classmethod from_heavy_square(distance, bidirectional=True)
Retorna um mapa de acoplamento de gráfico quadrado pesado.
Um gráfico quadrado pesado é descrito em:
https://journals.aps.org/prx/abstract/10.1103/PhysRevX.10.011022
Parâmetros
- distance (int) – A distância do código para o gráfico quadrado pesado gerado. O valor da distância pode ser qualquer número inteiro positivo ímpar. A distância está relacionada ao número de qubits por: onde é o número de qubits e é o parâmetro
distance. - bidirectional (bool) – Se as bordas no gráfico de acoplamento de saída são bidirecionais ou não. Por padrão, isso é definido como
True
Retorna
Um gráfico de acoplamento quadrado pesado
Tipo de retorno
from_hexagonal_lattice
classmethod from_hexagonal_lattice(rows, cols, bidirectional=True)
Retorna um mapa de acoplamento de gráfico de treliça hexagonal.
Parâmetros
- rows (int) – O número de linhas para gerar o gráfico.
- cols (int) – O número de colunas para gerar o gráfico.
- bidirectional (bool) – Se as bordas no gráfico de acoplamento de saída são bidirecionais ou não. Por padrão, isso é definido como
True
Retorna
Um gráfico de acoplamento de rede hexagonal
Tipo de retorno
from_line
classmethod from_line(num_qubits, bidirectional=True)
Retorna um mapa de acoplamento de n qubits conectados em uma linha.
Tipo de retorno
from_ring
classmethod from_ring(num_qubits, bidirectional=True)
Retorna um mapa de acoplamento de n qubits conectados a cada um de seus vizinhos em um anel.
Tipo de retorno
get_edges
get_edges()
Obtém a lista de bordas no gráfico de acoplamento.
Retorna
Cada borda é um par de qubits físicos.
Tipo de retorno
is_connected
is_connected()
Teste se o gráfico está conectado.
Retorna True se estiver conectado, False caso contrário
largest_connected_component
make_symmetric
neighbors
neighbors(physical_qubit)
Retorna os vizinhos mais próximos de um qubit físico.
A direcionalidade é importante, ou seja, um vizinho deve ser acessível com um salto na direção de uma borda.
reduce
reduce(mapping, check_if_connected=True)
Retorna um mapa de acoplamento reduzido que corresponde ao subgráfico de qubits selecionado no mapeamento.
Parâmetros
- mapping (list) – Um mapeamento de qubits reduzidos para qubits de dispositivos.
- check_if_connected (bool) – se True, verifica se o mapa de acoplamento reduzido está conectado.
Retorna
Um coupling_map reduzido para os qubits selecionados.
Tipo de retorno
Aumentos
CouplingError - O mapa de acoplamento reduzido deve ser conectado.
shortest_undirected_path
shortest_undirected_path(physical_qubit1, physical_qubit2)
Retorna o caminho não direcionado mais curto entre physical_qubit1 e physical_qubit2.
Parâmetros
Retorna
O caminho não direcionado mais curto
Tipo de retorno
Lista
Aumentos
CouplingError - Quando não houver um caminho entre physical_qubit1, physical_qubit2.