UnitarySynthesisPlugin
class qiskit.transpiler.passes.synthesis.plugin.UnitarySynthesisPlugin
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)
Executar a síntese para a matriz unitária fornecida
Parâmetros
- unitary (numpy.ndarray) – A matriz unitária a ser sintetizada em um
DAGCircuitobjeto - 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 emUnitarySynthesisPluginpara 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