neuralqx.operators.computational.Euclidean4d.numba.volume module

An implementation for the volume oeprator of the Euclidean WCL 4-d model using a ComputationalOperator rather than a LocalOperator

class VolumeOperator(H, vertex)

Bases: ComputationalOperator

Returns the (diagonal) volume operator at a single vertex v in the U(1)^3 model.

The operator acts on the charge basis \(|\vec{m}\rangle\) by summing, over all oriented edge triplets that meet at v, the signed scalar triple products of the corresponding 3-component U(1) charge vectors, and then taking the absolute value and square root:

\[\hat{V}_v \,|\vec{m}\rangle \;=\; \sqrt{\left| \sum_{(e_1,e_2,e_3)\ni v} \epsilon_v(e_1,e_2,e_3)\; \vec m_{e_1}\!\cdot\!\big(\vec m_{e_2}\times \vec m_{e_3}\big) \right|}\;|\vec{m}\rangle,\]

where each edge charge vector is

\[\vec m_{e} = \big( m_e^{(1)}, \, m_e^{(2)} , \, m_e^{(3)} \big),\]

and \(\epsilon_v(e_1, e_2, e_3) \in \{+1,-1\}\) is the orientation sign of the ordered triple at the vertex (right-hand rule with the graph’s local orientation). The operator is Hermitian and non-negative, and it is diagonal in the charge basis.

Implementation details

  • The set of contributing triplets at v is taken from graph.connectivities[str(v)]['edges'], their orientation signs are taken from graph.signs[str(v)].

  • Each triplet contributes \(\epsilon_v(e_1,e_2,e_3)\;\vec m_{e_1}\!\cdot\!(\vec m_{e_2}\times\vec m_{e_3})\). All contributions are summed before applying \(\sqrt{|\cdot|}\).

  • Edge orientations enter only through \(\epsilon_v(\cdot)\), the charge vectors themselves are used as-is.

Notes

  • Units: overall normalization/constant is 1 by convention

  • For non-planar embeddings, the triplets should be provided in the same ordering/convention as returned by the graph’s connectivities (not by any planarized drawing).

property is_hermitian

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)