ffsim.UCJOpSpinUnbalanced¶
- class ffsim.UCJOpSpinUnbalanced(diag_coulomb_mats, orbital_rotations, final_orbital_rotation=None, validate=True, rtol=1e-05, atol=1e-08)[source]¶
Bases:
SupportsApplyUnitary,SupportsApproximateEqualityA spin-unbalanced unitary cluster Jastrow operator.
A unitary cluster Jastrow (UCJ) operator has the form
\[\prod_{k = 1}^L \mathcal{U}_k e^{i \mathcal{J}_k} \mathcal{U}_k^\dagger\]where each \(\mathcal{U_k}\) is an orbital rotation and each \(\mathcal{J}\) is a diagonal Coulomb operator of the form
\[\begin{split}\mathcal{J} = \frac12\sum_{\substack{ij \\ \sigma \tau}} \mathbf{J}^{(\sigma \tau)}_{ij} n_{i\sigma} n_{j\tau}.\end{split}\]Since \(\mathbf{J}^{(\sigma \tau)}_{ij} = \mathbf{J}^{(\tau \sigma)}_{ji}\), each diagonal Coulomb operator requires 3 matrices for its description: \(\mathbf{J}^{(\alpha \alpha)}\), \(\mathbf{J}^{(\alpha \beta)}\), and \(\mathbf{J}^{(\beta \beta)}\). The number of terms \(L\) is referred to as the number of ansatz repetitions and is accessible via the
n_repsattribute.To support variational optimization of the orbital basis, an optional final orbital rotation can be included in the operator, to be performed at the end.
- diag_coulomb_mats¶
The diagonal Coulomb matrices, as a Numpy array of shape
(n_reps, 3, norb, norb)The last two axes index the rows and columns of the matrices, and the third from last axis, which has 3 dimensions, indexes the spin interaction type of the matrix: alpha-alpha, alpha-beta, and beta-beta (in that order). The first axis indexes the ansatz repetitions.- Type:
np.ndarray
- orbital_rotations¶
The orbital rotations, as a Numpy array of shape
(n_reps, 2, norb, norb). The last two axes index the rows and columns of the orbital rotations, and the third from last axis, which has 2 dimensions, indexes the spin sector of the orbital rotation: first alpha, then beta. The first axis indexes the ansatz repetitions.- Type:
np.ndarray
- final_orbital_rotation¶
The optional final orbital rotation, as a Numpy array of shape
(2, norb, norb). This can be viewed as a list of two orbital rotations, the first one for spin alpha and the second one for spin beta.- Type:
np.ndarray | None
- Parameters:
validate (
InitVar) – Whether to validate the operator attributes. Setting this to False skips validation, which is useful if you need to create many instances of this class and are confident that the attributes are valid.rtol (
InitVar) – Relative numerical tolerance for validation checks.atol (
InitVar) – Absolute numerical tolerance for validation checks.
Methods
from_parameters(params, *, norb, n_reps[, ...])Initialize the UCJ operator from a real-valued parameter vector.
from_t_amplitudes(t2, *[, t1, n_reps, ...])Initialize the UCJ operator from t2 (and optionally t1) amplitudes.
n_params(norb, n_reps, *[, ...])Return the number of parameters of an ansatz with given settings.
to_parameters([interaction_pairs])Convert the UCJ operator to a real-valued parameter vector.
Attributes
atoln_repsThe number of ansatz repetitions.
norbThe number of spatial orbitals.
rtolvalidate