def __flatten_index(pos, shape):
    """
    Takes a three dimensional index (x,y,z) and computes the index required to access the
    same element in the flattened version of the array.
    """
    res = 0
    acc = 1
    for pi, si in zip(reversed(pos), reversed(shape)):
        res += pi * acc
        acc *= si
    return res
def __flatten_index ( pos , shape ) : res = 0 acc = 1 for pi , si in zip ( reversed ( pos ) , reversed ( shape ) ) : res += pi * acc acc *= si return res
Takes a three dimensional index (x,y,z) and computes the index required to access the
    same element in the flattened version of the array.