'Produce two hyperrectangles by splitting.
In general, if you need to compute maximum and minimum
distances to the children, it can be done more efficiently
by updating the maximum and minimum distances to the parent.
Parameters
d : int
Axis to split hyperrectangle along.
split : float
Position along axis `d` to split at.'

def split(self, d, split):

    mid = np.copy(self.maxes)
    mid[d] = split
    less = Rectangle(self.mins, mid)
    mid = np.copy(self.mins)
    mid[d] = split
    greater = Rectangle(mid, self.maxes)
    return (less, greater)
