I have a feeling that `_warp_forward` and `_warp_backward` could be made into one function that does both things. Would reduce the amount of code we have to maintain...