Closed evanberkowitz closed 1 year ago
There's actually two issues. One is that the integrator's Jacobian was not incorporated correctly. The other is that the accept/reject is done according to (what else?) the real part of dH. The imaginary part of dH ought to be incorporated via reweighting; that's the point of the other return value. It's not a Jacobian; it's a reweighting factor.
The Jacobian in the HMC MCMC that we fix to 1 by (leapfrog, omelyan) being symplectic is a property of the integrator, not of the Markov chain. But, as it stands, the jacobian is returned by
tdg.HMC.MarkovChain.step
. This is wrong! Just get the jacobian from the integrator and incorporate it into the accept/reject insidestep
.