# Wavefunction

Wavefunctions define a quantum mechanical many electron state. Wavefunctions can be written as weighted sums over Slater determinants and Slater determinants are antisymmetric products of one particle wavefunctions or spin-orbitals.

When possible we use $\tau$ as the index referring to different spin-orbitals, when written as functions we use the letter phi written in its “closed” form ($\varphi$). Mostly orbitals are refered to using creation and annihilation operators using the relation: $$|\varphi_{\tau}(\vec{r})\rangle = a^{\dagger}_{\tau}|0\rangle$$ For a set of spin-orbitals $\tau\in D$ we can define subsets $D_i$ wich allows us to define single Slater determinants as: $$|\phi_i\rangle = \Pi_{\tau \in D_i} a^{\dagger}_{\tau}|0\rangle,$$ where we used the variable phi to refer to a single Slater determinant and the dimension of the set $D_i$ determines the number of electrons in this Slater determinant. Many electron wavefunctions or states will be labeled by the letter psi and are defined as weighted sums over single Slater determinants. $$\psi = \sum_i \alpha_i \phi_i$$

In Quanty states can be saved as sums over single Slater determinants on a given orbital basis. The wavefunction object stores these states using several optimizations. Some of the internal elements of the wavefunction object are exported and can be changed using the interface. The goal is to do most of the optimizations automatic and not have the user to think about data representations, memory fragmentations and hash table sizes. At the same time experienced users should get full control. At the moment we are working to extend the code in both directions. One thing you still have to think about is the size of the hash-key. If your calculation is slower than it should be have a look at the property NBitsKey.