pub fn project_slater_determinant(
py: Python<'_>,
inp_sym: PathBuf,
pydet: PySlaterDeterminant,
projection_targets: Vec<PyProjectionTarget>,
calculate_energies: bool,
calculate_density_matrices: bool,
pybaos: Vec<PyBasisAngularOrder>,
use_magnetic_group: Option<MagneticSymmetryAnalysisKind>,
use_double_group: bool,
symmetry_transformation_kind: SymmetryTransformationKind,
write_character_table: bool,
infinite_order_to_finite: Option<u32>,
sao: Option<PyArray2RC<'_>>,
sao_h: Option<PyArray2RC<'_>>,
enuc: Option<PyScalarRC>,
onee: Option<PyArray2RC<'_>>,
twoe: Option<PyArray4RC<'_>>,
py_get_jk: Option<Py<PyFunction>>,
thresh_offdiag: Option<f64>,
thresh_zeroov: Option<f64>,
) -> PyResult<(Vec<String>, Py<PyAny>)>Expand description
Python-exposed function to perform symmetry projection for real and complex Slater determinants.
§Arguments
inp_sym- A path to theQSym2FileType::Symfile containing the symmetry-group detection result for the system. This will be used to construct abstract groups and character tables for symmetry projection.pydet- A Slater determinant whose coefficient matrices are of typefloat64orcomplex128.projection_targets- A sequence of subspace labels for projection. Each label is either a symbolic string or a numerical index for the subspace in the character table of the prevailing group.calculate_energies- A boolean indicating if the energies of the projected wavefunctions (which are multi-determinantal wavefunctions specified in an orbit basis) are to be calculated. Iftrue, thenthresh_offdiag,thresh_zeroov,enuc,onee, and eithertwoeorpy_get_jkmust also be specified for Löwdin pairing and Hamiltonian matrix element computation.calculate_density_matrices- A boolean indicating if the density matrices for the projected wavefunctions (which are multi-determinantal wavefunctions) are to be calculated. Iftrue, thenthresh_offdiagandthresh_zeroovmust also be specified for Löwdin pairing.pybaos- Python-exposed structures containing basis angular order information, one for each explicit component per coefficient matrix.use_magnetic_group- An option indicating if the magnetic group is to be used for symmetry analysis, and if so, whether unitary representations or unitary-antiunitary corepresentations should be used.use_double_group- A boolean indicating if the double group of the prevailing symmetry group is to be used for representation analysis instead.symmetry_transformation_kind- An enumerated type indicating the type of symmetry transformations to be performed on the origin Slater determinant to generate the orbit.write_character_table- A boolean indicating if the character table of the prevailing symmetry group is to be printed out.infinite_order_to_finite- The finite order with which infinite-order generators are to be interpreted to form a finite subgroup of the prevailing infinite group. This finite subgroup will be used for symmetry analysis.sao- The optional atomic-orbital overlap matrix whose elements are of typefloat64orcomplex128. If this is not present, no squared norms, energies, or density matrices of the resulting multi-determinants will be computed.sao_h- The optional complex-symmetric atomic-orbital overlap matrix whose elements are of typefloat64orcomplex128. This is required if antiunitary symmetry operations are involved.enuc- The optional nuclear repulsion energy, which is only required forcalculate_energies.onee- The optional one-electron integral matrix whose elements are of typefloat64orcomplex128, which is only required forcalculate_energies.twoe- The optional two-electron integral tensor in physicists’ ordering whose elements are of typefloat64orcomplex128, which is only required forcalculate_energies. Either this orpy_get_jkmust be specified, but not both.py_get_jk- An optional Python function callable on a density matrix $\mathbf{D}$ to calculate the corresponding $\mathbf{J}$ and $\mathbf{K}$ matrices by contracting with appropriate two-electron integrals calculated on-the-fly, which is only required forcalculate_energies. Either this ortwoemust be specified, but not both. Python type:Callable[[numpy.2darray[float] | numpy.2darray[complex]], tuple[numpy.2darray[float], numpy.2darray[float]] | tuple[numpy.2darray[complex], numpy.2darray[complex]]] | None.thresh_offdiag- The optional threshold for identifying non-zero off-diagonal elements in Löwdin pairing, which is required forcalculate_energiesandcalculate_density_matrices.thresh_zeroov- The optional threshold for identifying non-zero overlaps in Löwdin pairing, which is required forcalculate_energiesandcalculate_density_matrices.
§Returns
The result will be returned as a tuple where the first item is a list of the labels of the subspaces used for projection, and the second item is an object containing
- the Slater determinant basis,
- the linear combination coefficients as a two-dimensional array with each column corresponding to one projected state,
- the energies of the projected states if requested, or
NaNif not, and - the density matrices of the projected states if requested, or
Noneif not.