Wouldn't it not be advantageous to change class HubbardHamiltonian(object) to be a child class of sisl.Hamiltonian? Now it seems to me more logical and we could avoid duplicating a lot of stuff.
In fact, perhaps we should think of an intermediate class SCFHamiltonian(sisl.Hamiltonian) that would generalize things for iterative/SCF problems (it could perhaps belong in sisl?), and then class HubbardHamiltonian(SCFHamiltonian) for the specifics of our MFH implementation?