Right now, samples are Tuple[int, int, int], unless they're outside the arena, in which case they're None. This can create confusion because we've introduced a second type. It might make more sense to change this output to (None, None, None) (tuple of Nones) or (nan, nan, nan) (tuple of float('nan')).
Either is still inconsistent with the initial typing, because NaNs are floats. But at least you still maintain indexing. Using None would maintain truthiness, but would be trickier to integrate into numpy arrays used for maps.