pub fn difference_access<T: RudaType<ExpandType: Assign> + Copy, I: RudaRead<T>, W: RudaWrite<T>, S: RudaWrite<T>, O: RudaBinaryOp<T>>(
input: &I,
output: &mut W,
scratch: &mut S,
op: &O,
neighbour: T,
valid: usize,
items: usize,
right: bool,
has_neighbour: bool,
)