canonical_order
canonical_order(op)
Retorna uma cópia de um operador com seus termos ordenados em ordem canônica.
Os termos são ordenados em uma ordem canônica que depende apenas da estrutura de cada termo (a sequência de operadores que ele representa) e não de seu coeficiente. A ordem é, portanto, determinística para um determinado conjunto de termos, independentemente de como o operador tenha sido montado. Os próprios termos permanecem inalterados — isso apenas os reordena, não simplifica nem coloca o operador na ordem normal.
Isso funciona para qualquer um dos tipos de operadores embutidos que implementam o protocolo OperatorTrait ; o operador retornado é do mesmo tipo que a entrada.
Quaisquer índices de grupo (ver, por exemplo, groups) são preservados: cada termo mantém seu índice de grupo à medida que se move, uma vez que o índice de grupo é uma marcação específica para cada termo, independente da ordem dos termos. Os termos do mesmo grupo simplesmente deixam de ser contíguos a partir de então. Se a entrada não tiver grupos, o resultado também não terá.
>>> from qiskit_fermions.operators import FermionOperator
>>> from qiskit_fermions.operators.terms.ordering import canonical_order
>>> op = FermionOperator.from_dict(
... {
... ((True, 1), (False, 0)): 1.0, # a†_1 a_0
... ((True, 0), (False, 1)): 2.0, # a†_0 a_1
... }
... )
>>> ordered = canonical_order(op)
>>> list(ordered.iter_terms())
[([(True, 0), (False, 1)], (2+0j)), ([(True, 1), (False, 0)], (1+0j))]
Parâmetros
op – o operador cujos termos devem ser reordenados.
Retorna
Um novo operador do mesmo tipo, com seus termos na ordem canônica.
Aumentos
TypeError – se não op for um tipo de operador compatível (consulte OperatorTrait).