neuralqx.operators.computational.qr.numba.lorentzian_constraint module

class LorentzianConstraint(H, *, immirzi=1.0)

Bases: ComputationalOperator

Quantum-Reduced LQG Lorentzian constraint on a single-vertex, 3-edge graph.

With edge labels (x, y, z) = (0, 1, 2):

H_L = -16 * (D_x^2 + D_y^2 + D_z^2)

where for each direction d in {x,y,z}:

D_d = F_d^(1/4) * (1/2) * (1 - c(d)) * F_d^(1/4),

F_x = E(x)^(3/2) * E(y)^(-1/2) * E(z)^(-1/2), F_y = E(y)^(3/2) * E(x)^(-1/2) * E(z)^(-1/2), F_z = E(z)^(3/2) * E(x)^(-1/2) * E(y)^(-1/2).

Implementation notes:
  • c(d) = (1/2) * (C_d + A_d) with non-cyclic single-step shifts.

  • Per direction, D_d has three one-step channels:

    diag (delta=0, coeff=+1/2), raise (delta=+1, coeff=-1/4), lower (delta=-1, coeff=-1/4).

  • D_d^2 is evaluated explicitly by summing all 3x3 path combinations.

  • Total padded connection count is fixed to 3 directions * 9 paths = 27.

property is_hermitian: bool

This function must return either True or False based on whether your operator is Hermitian or not. Note that unlike for the case of LocalOperator types, you must specify by-hand whether this operator is Hermitian or not, there is no implementation to deduce that information for you as there is no matrices stored in this operator type.

This property plays a role in determining the computational path to be taken when computing gradients. If you specify that the operator is Hermitian while in reality it is not, the computed gradients will be incorrect.

Returns:

True if this operator is Hermitian, False otherwise

property dtype

Specify a JAX NumPy or NumPy dtype for this operator (that is, what is the dtype of the matrix elements returned by this operator)