Local observables
We most often want to calculate local observables (which I refer to as densities) and their associated currents.
While arbitrary observables can be defined by general Hermitian matrices, local observables are defined by block diagonal Hermitian matrices, where the block diagonal structure is over the sites (i.e. they are diagonal in the spatial degrees of freedom).
We want to provide an easy way for specifying such objects. The user will have to provide a FinalizedBuilder
and a function that takes the same args as the Hamiltonian onsites and returns a matrix for that site.
The objects themselves will be functors that can be called with a wavefunction and hamiltonian arguments
(maybe we will explicitly split off the time part) and will return the expectation value of the observable.