QDrift
class qiskit.synthesis.QDrift(reps=1, insert_barriers=False, cx_structure='chain', atomic_evolution=None, seed=None, wrap=False, preserve_order=True, *, atomic_evolution_sparse_observable=False)
Bases: ProductFormula
O método QDrift Trotterization, que seleciona cada termo na Trotterização de forma aleatória, com uma probabilidade proporcional ao seu peso. Com base no trabalho de Earl Campbell na Ref. [1].
Referências
[1] : E. Campbell, "A random compiler for fast Hamiltonian simulation" (2018). arXiv:quant-ph/1811.08017
Parâmetros
- reps (int) – O número de vezes para repetir o circuito de trotterização.
- insert_barriers (bool) – Se deve inserir barreiras entre as evoluções atômicas.
- cx_structure (str) – O modo de organizar as portas CX para as evoluções de Pauli pode ser
"chain", em que são usadas as conexões do próximo vizinho, ou"fountain", em que todos os qubits são conectados a um. Isso só tem efeito quandoatomic_evolution is None. - atomic_evolution (Callable[[QuantumCircuit, qiskit.quantum_info.Pauli |SparsePauliOp, float], None] | None) – Uma função para aplicar a evolução de um único
PauliouSparsePauliOpde apenas termos comutáveis, a um circuito. A função recebe três argumentos: o circuito ao qual anexar a evolução, o operador Pauli a ser evoluído e o tempo de evolução. Por padrão, uma única evolução de Pauli é decomposta em uma cadeia de portasCXe uma única portaRZ. - seed (int | None) – Uma semente opcional para a reprodutibilidade do processo de amostragem aleatória.
- wrap (bool) – Se deve envolver as evoluções atômicas em objetos de porta personalizados. Isso só tem efeito quando
atomic_evolution is None. - preserve_order (bool) – Se
False, permite reordenar os termos do operador para potencialmente produzir um circuito de evolução mais raso. Não é relevante ao sintetizar o operador com um único termo. - atomic_evolution_sparse_observable (bool) – Se for passado um
atomic_evolutionpersonalizado, que ainda não oferece suporte aSparseObservables como entrada, defina esse argumento comoFalsepara aplicar automaticamente uma conversão paraSparsePauliOp. Esse argumento é suportado até o Qiskit 2.2, momento em que todas as evoluções atômicas são obrigadas a suportarSparseObservables como entrada.
Atributos
settings
Retorna as configurações em um dicionário, que pode ser usado para reconstruir o objeto.
Retorna
Um dicionário que contém as configurações dessa fórmula de produto.
Aumentos
NotImplementedError - Se for definida uma evolução atômica personalizada, que não pode ser serializada.
Métodos
expand
expand(evolution)
Aplique a fórmula do produto para expandir o Hamiltoniano na porta de evolução.
Parâmetros
evolution (PauliEvolutionGate) – O PauliEvolutionGatecujo Hamiltoniano expandimos.
Retorna
Uma lista de rotações de Pauli em um formato esparso, em que cada elemento é (paulistring, qubits, coefficient). Por exemplo, a expansão Lie-Trotter de H = XI + ZZ retornaria [("X", [1], 1), ("ZZ", [0, 1], 1)].
Tipo de retorno
synthesize
synthesize(evolution)
Sintetizar a PauliEvolutionGate.
Parâmetros
evolution (PauliEvolutionGate) – A porta de evolução para sintetizar.
Retorna
Um circuito que implementa a evolução.
Tipo de retorno