IMSRG.normal_ordering

Module defining normal ordering utilities for the IMSRG.

Functions

compute_normal_ordered_hamiltonian_no2b(...)

Computes the normal-ordered Hamiltonian with respect to a reference state

create_occupations(basis, ref)

Creates an array of occupation numbers indicating which states in the basis are occupied in the reference state

expand_h2(h2)

Expands two-body matrix elements by applying antisymmetrization relations

expand_h3(h3)

Expands three-body matrix elements by applying antisymmetrization relations

get_three_body_permutations(pp, qq, rr)

Generates all antisymmetrized permutations of three indices with appropriate signs

IMSRG.normal_ordering.create_occupations(basis, ref)

Creates an array of occupation numbers indicating which states in the basis are occupied in the reference state

Parameters:
  • basis (list[tuple[int, int, int, int, int]]) – List of all possible single-particle states in the basis

  • ref (list[tuple[int, int, int, int, int]]) – List of occupied single-particle states in the reference configuration

Returns:

Array with 1.0 for occupied states and 0.0 for unoccupied states

Return type:

numpy array

IMSRG.normal_ordering.expand_h2(h2)

Expands two-body matrix elements by applying antisymmetrization relations

Generates all antisymmetrized matrix elements from the input two-body interactions using the relations <pq|rs> = -<qp|rs> = -<pq|sr> = <qp|sr>

Parameters:

h2 (list[tuple[int, int, int, int, float]]) – List of two-body matrix elements in format [p, q, r, s, matrix_element]

Returns:

Expanded list with all antisymmetrized two-body matrix elements

Return type:

list[tuple[int, int, int, int, float]]

IMSRG.normal_ordering.get_three_body_permutations(pp, qq, rr)

Generates all antisymmetrized permutations of three indices with appropriate signs

Computes the six permutations of three indices with the correct antisymmetrization factors for fermionic systems

Parameters:
  • pp (int) – First index

  • qq (int) – Second index

  • rr (int) – Third index

Returns:

List of permutations with format [index1, index2, index3, sign_factor]

Return type:

list[tuple[int, int, int, float]]

IMSRG.normal_ordering.expand_h3(h3)

Expands three-body matrix elements by applying antisymmetrization relations

Generates all antisymmetrized three-body matrix elements from the input interactions (with p < q < r and s < t < u) by applying permutations to both bra and ket indices with appropriate sign factors

Parameters:

h3 (list[tuple[int, int, int, int, int, int, float]]) – List of three-body matrix elements in format [p, q, r, s, t, u, matrix_element]

Returns:

Expanded list with all antisymmetrized three-body matrix elements

Return type:

list[tuple[int, int, int, int, int, int, float]]

IMSRG.normal_ordering.compute_normal_ordered_hamiltonian_no2b(occs, h1, h2, h3=None)

Computes the normal-ordered Hamiltonian with respect to a reference state

Transforms the Hamiltonian to normal-ordered form by summing over occupied states, yielding the reference-state energy, effective one-body (Fock) operator, and effective two-body interactions

Parameters:
  • occs (numpy array) – Occupation numbers for each single-particle state (1.0 if occupied, 0.0 if empty)

  • h1 (list[tuple[int, int, float]]) – One-body matrix elements in format [p, q, matrix_element]

  • h2 (list[tuple[int, int, int, int, float]]) – Two-body matrix elements in format [p, q, r, s, matrix_element]

  • h3 (list[tuple[int, int, int, int, int, int, float]] | None) – Optional; three-body matrix elements in format [p, q, r, s, t, u, matrix_element]

Returns:

Reference state energy, normal-ordered one-body operator (Fock matrix), normal-ordered two-body operator

Return type:

float, numpy array, numpy array