Evolution

class Evolution(num_modes, operator, time=1.0)

Bases: FermionicGate

Implements the time evolution of an operator.

Given a fermionic operator \(H\) and an evolution time \(t\), this gate implements the unitary

\[U = e^{-i t H}.\]

For \(U\) to be unitary, \(H\) must be Hermitian. This is the caller’s responsibility and is not verified.

Note

How this evolution is decomposed into a circuit is not fixed by this gate alone. The default _define() implementation splits the evolution group-by-group when the operator has groups assigned, and term-by-term otherwise, yielding a first-order product formula (which is exact only when the individual factors mutually commute). The transpilation process may further alter this decomposition (for example, QDriftTrotterization replaces it with a randomized product formula).

Initializing an instance of this gate can be done with the arguments listed below.

Parameters:
  • num_modes (int) – the number of fermionic modes on which this gate acts.

  • operator (OperatorTrait) – the Hermitian operator \(H\) under which to time evolve the acted-upon fermionic modes.

  • time (float) – the evolution time \(t\) entering the exponent of \(e^{-i t H}\). A negative value evolves backwards in time.

Attributes

operator

The operator under which to time evolve the acted-upon fermionic modes.