openfermion.circuits.low_rank_two_body_decomposition

Convert two-body operator into sum of squared one-body operators.

As in arXiv:1808.02625, this function decomposes $\sum_{pqrs} h_{pqrs} a^\dagger_p a^\dagger_q a_r a_s$ as $\sum_{l} \lambda_l (\sum_{pq} g_{lpq} a^\dagger_p a_q)^2$ l is truncated to take max value L so that $\sum_{l=0}^{L-1} (\sum_{pq} |g_{lpq}|)^2 |\lambda_l| < x$

two_body_coefficients (ndarray): an N x N x N x N numpy array giving the $h_{pqrs}$ tensor. This tensor must be 8-fold symmetric (real integrals). truncation_threshold (optional Float): the value of x, above. final_rank (optional int): if provided, this specifies the value of L at which to truncate. This overrides truncation_threshold. spin_basis (bool): True if the two-body terms are passed in spin orbital basis. False if already in spatial orbital basis.

eigenvalues (ndarray of floats): length L array giving the $\lambda_l$. one_body_squares (ndarray of floats): L x N x N array of floats corresponding to the value of $g_{pql}$. one_body_correction (ndarray): One-body correction terms that result from reordering to chemist ordering, in spin-orbital basis. truncation_value (float): after truncation, this is the value $\sum_{l=0}^{L-1} (\sum_{pq} |g_{lpq}|)^2 |\lambda_l| < x$

TypeError Invalid two-body coefficient tensor specification.