code: def _init_v(self, t, w0, dt):
          
  
          # here is where we scoot the velocity at t=t1 to v(t+1/2)
          F0 = self.F(t.copy(), w0.copy(), *self._func_args)
          a0 = F0[self.ndim:]
          v_1_2 = w0[self.ndim:] + a0*dt/2.
  
          return v_1_2
docs: Leapfrog updates the velocities offset a half-step from the
          position updates. If we're given initial conditions aligned in
          time, e.g. the positions and velocities at the same 0th step,
          then we have to initially scoot the velocities forward by a half
          step to prime the integrator.
  
          Parameters
          ----------
          dt : numeric
              The first timestep.