numpy.ndarray.__new__
numpy.ndarray.__array_wrap__
Returns either a new reference to self if dtype is not given or a new array of provided data type if dtype is different from the current dtype of the array.