Skip to main content
IBM Quantum Platform

UnitarySynthesisPlugin

class qiskit.transpiler.passes.synthesis.plugin.UnitarySynthesisPlugin

GitHub

Bases: ABC

Classe abstrata de plug-in de síntese unitária

Essa classe abstrata define a interface para plug-ins de síntese unitária.


Atributos

max_qubits

Retorna o número máximo de qubits suportados pelo plug-in de síntese unitária.

Se o tamanho da unidade a ser sintetizada exceder esse valor, será usado o plug-in default . Se não houver limite superior, retorne None e todos os unitários (>= min_qubits se estiver definido) serão passados para esse plug-in quando ele for ativado.

min_qubits

Retorna o número mínimo de qubits que o plug-in de síntese unitária suporta.

Se o tamanho da unidade a ser sintetizada estiver abaixo desse valor, será usado o plug-in default . Se não houver limite inferior, retorne None e todos os unitários (<= max_qubits se estiver definido) serão passados para esse plug-in quando ele for ativado.

supported_bases

Retorna um dicionário de bases compatíveis para síntese

Espera-se que isso retorne um dicionário em que a chave é uma base de cadeia de caracteres e o valor é uma lista de nomes de portas em que a base funciona. Se o método de síntese não for compatível com várias bases, deverá retornar None. Por exemplo:

{
    "XZX": ["rz", "rx"],
    "XYX": ["rx", "ry"],
}

Se um dicionário for retornado por esse método, os kwargs de execução receberão um parâmetro matched_basis que contém uma lista das cadeias de caracteres de base (ou seja, chaves no dicionário) que correspondem ao conjunto de portas de base de destino para a transpilação. Se nenhuma entrada no dicionário corresponder ao conjunto de portas da base de destino, o kwarg matched_basis será definido como uma lista vazia, e um plug-in poderá escolher como lidar com o conjunto de portas da base de destino que não corresponda aos recursos do plug-in.

supports_basis_gates

Retorna se o plug-in é compatível com o uso de basis_gates

Se isso retornar True , o método run() do plug-in receberá um kwarg basis_gates com uma lista de nomes de porta que o backend de destino suporta. Por exemplo, ['sx', 'x', 'cx', 'id', 'rz'].

supports_coupling_map

Retorna se o plug-in é compatível com o uso de coupling_map

Se isso retornar True , o método run() do plug-in receberá um kwarg coupling_map. O kwarg coupling_map será definido como uma tupla com o primeiro elemento sendo um objeto CouplingMap representando a conectividade de qubit do backend de destino, o segundo elemento será uma lista de inteiros que representam os índices de qubit no mapa de acoplamento em que a unidade está. Observe que, se o backend de destino não tiver um mapa de acoplamento definido, o valor do kwarg coupling_map será (None, qubit_indices).

supports_gate_errors

Retorna se o plug-in é compatível com o uso de gate_errors

gate_errors será um dicionário na forma de {gate_name: {(qubit_1, qubit_2): error}}. Por exemplo:

{
'sx': {(0,): 0.0006149355812506126, (1,): 0.0006149355812506126},
'cx': {(0, 1): 0.012012477900732316, (1, 0): 5.191111111111111e-07}
}

Observe que esse dicionário pode não estar completo ou pode estar vazio, pois depende de o backend de destino relatar erros de porta em cada porta para cada qubit. As taxas de erro de porta informadas em gate_errors são fornecidas pelo objeto Backend do dispositivo de destino e o significado exato pode ser diferente dependendo do backend.

supports_gate_errors_by_qubit

Retorna se o plug-in é compatível com o uso de gate_errors_by_qubit

Isso difere de supports_gate_errors/gate_errors por usar uma visão diferente dos mesmos dados. Em vez de ser codificado pelo nome da porta, ele é codificado por qubit e usa Gate para representar as portas (em vez dos nomes das portas).

gate_errors_by_qubit será um dicionário na forma de {(qubits,): [Gate, error]}. Por exemplo:

{
(0,): [SXGate(): 0.0006149355812506126, RZGate(): 0.0],
(0, 1): [CXGate(): 0.012012477900732316]
}

Observe que esse dicionário pode não estar completo ou pode estar vazio, pois depende de o backend de destino relatar erros de porta em cada porta para cada qubit. As taxas de erro de porta informadas em gate_errors são fornecidas pelo objeto Backend do dispositivo de destino e o significado exato pode ser diferente dependendo do backend.

O padrão é False

supports_gate_lengths

Retorna se o plug-in é compatível com o uso de gate_lengths

gate_lengths será um dicionário na forma de {gate_name: {(qubit_1, qubit_2): length}}. Por exemplo:

{
'sx': {(0,): 0.0006149355812506126, (1,): 0.0006149355812506126},
'cx': {(0, 1): 0.012012477900732316, (1, 0): 5.191111111111111e-07}
}

em que o valor length está em unidades de segundos.

Observe que esse dicionário pode não estar completo ou pode estar vazio, pois depende do backend de destino que informa os comprimentos de porta em cada porta para cada qubit.

supports_gate_lengths_by_qubit

Retorna se o plug-in é compatível com o uso de gate_lengths_by_qubit

Isso difere de supports_gate_lengths/gate_lengths por usar uma visão diferente dos mesmos dados. Em vez de ser codificado pelo nome da porta, ele é codificado por qubit e usa Gate para representar as portas (em vez dos nomes das portas)

gate_lengths_by_qubit será um dicionário na forma de {(qubits,): [Gate, length]}. Por exemplo:

{
(0,): [SXGate(): 0.0006149355812506126, RZGate(): 0.0],
(0, 1): [CXGate(): 0.012012477900732316]
}

em que o valor length está em unidades de segundos.

Observe que esse dicionário pode não estar completo ou pode estar vazio, pois depende do backend de destino que informa os comprimentos de porta em cada porta para cada qubit.

O padrão é False

supports_natural_direction

Retorna se o plug-in suporta uma alternância para considerar a direcionalidade de portas de 2 qubit como natural_direction.

Consulte a documentação do UnitarySynthesis para saber os valores possíveis e o significado desses valores.

supports_pulse_optimize

Retorna se o plug-in suporta uma alternância para otimizar os pulsos durante a síntese como pulse_optimize.

Consulte a documentação do UnitarySynthesis para saber os valores possíveis e o significado desses valores.

supports_target

Se o plug-in é compatível com target como uma opção

target será um objeto Target representando o dispositivo de destino para a saída da passagem de síntese.

Por padrão, isso será False , pois a interface do plug-in é anterior à classe Target classe. Se um plug-in retornar True para esse atributo, espera-se que o plug-in use o parâmetro Target em vez dos valores passados se algum dos parâmetros supports_gate_lengths, supports_gate_errors, supports_coupling_map e supports_basis_gates estiver definido (embora o ideal seja que todos esses parâmetros contenham informações duplicadas).


Métodos

run

abstractmethod run(unitary, **options)

GitHub

Executar a síntese para a matriz unitária fornecida

Parâmetros

  • unitary (numpy.ndarray) – A matriz unitária a ser sintetizada em um DAGCircuit objeto
  • options - Os kwargs opcionais que são passados com base na saída dos métodos support_* na classe. Consulte a documentação desses métodos em UnitarySynthesisPlugin para ver quais são as chaves e os valores.

Retorna

A representação do circuito dag do unitário. Como alternativa, você pode retornar uma tupla no formato (dag, wires) , em que dag é a representação do circuito dag da representação do circuito da unitária e wires é o mapeamento de fios a ser usado para qiskit.dagcircuit.DAGCircuit.substitute_node_with_dag(). Se você retornar uma tupla e wires for None , isso se comportará exatamente como se apenas um DAGCircuit fosse retornado. Além disso, se esse retorno for None , nenhuma substituição será feita.

Tipo de retorno

DAGCircuit

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.