openfermion.circuits.LowRankTrotterAlgorithm
A Trotter algorithm using the low rank decomposition strategy.
Inherits From: TrotterAlgorithm
openfermion.circuits.LowRankTrotterAlgorithm(
truncation_threshold: Optional[float] = 1e-08,
final_rank: Optional[int] = None,
spin_basis=True
) -> None
Used in the notebooks
This algorithm simulates an InteractionOperator with real coefficients.
The one-body terms are simulated in their diagonal basis; the basis change
is accomplished with a Bogoliubov transformation.
To simulate the two-body terms, the two-body tensor is decomposed into
singular components and possibly truncating. Then, each singular component
is simulated in the appropriate basis using a (non-fermionic) swap network.
The general idea is based on expressing the two-body operator as
$\sum{pqrs} h{pqrs} a^\dagger_p a^\dagger_q a_r as =
\sum{j=0}^{J-1} \lambdaj (\sum{pq} g_{jpq} a^\dagger_p aq)^2$
One can then diagonalize the squared one-body component as
math:\sum_{pq} g_{pqj} a^\dagger_p a_q =
R_j (\sum_{p} f_{pj} n_p) R_j^\dagger
Then, a 'low rank' Trotter step of the two-body tensor can be simulated as
$\prod{j=0}^{J-1}
R_j e^{-i \lambdaj \sum{pq} f{pj} f{qj} n_p n_q} R_j^\dagger$.
The \(R_j\) are Bogoliubov transformations, and one can
use a swap network to simulate the diagonal \(n_p n_q\) terms.
The value of J is either fully the square of the number of qubits,
which would imply no truncation, or it is specified by the user,
or it is chosen so that
\(\sum_{l=0}^{L-1} (\sum_{pq} |g_{lpq}|)^2 |\lambda_l| < x\)
where x is a truncation threshold specified by user.
Note |
|
When spin_basis=True (the default), the input
InteractionOperator must have a
spin-symmetric two-body tensor, i.e. identical interaction
coefficients for the alpha and beta spin channels. Hamiltonians
that break this symmetry will raise a ValueError.
|
Methods
asymmetric
View source
asymmetric(
hamiltonian: openfermion.circuits.trotter.trotter_algorithm.Hamiltonian
) -> Optional[openfermion.circuits.TrotterStep]
controlled_asymmetric
View source
controlled_asymmetric(
hamiltonian: openfermion.circuits.trotter.trotter_algorithm.Hamiltonian
) -> Optional[openfermion.circuits.TrotterStep]
controlled_symmetric
View source
controlled_symmetric(
hamiltonian: openfermion.circuits.trotter.trotter_algorithm.Hamiltonian
) -> Optional[openfermion.circuits.TrotterStep]
symmetric
View source
symmetric(
hamiltonian: openfermion.circuits.trotter.trotter_algorithm.Hamiltonian
) -> Optional[openfermion.circuits.TrotterStep]
Class Variables |
|
supported_types
|
{
<class 'openfermion.ops.representations.interaction_operator.InteractionOperator'>
}
|
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2026-07-14 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2026-07-14 UTC."],[],[]]