diff --git a/numpy/__init__.py b/numpy/__init__.py index 496e49d833ad..4c43fd3fbc65 100644 --- a/numpy/__init__.py +++ b/numpy/__init__.py @@ -183,30 +183,27 @@ from . import lib from .lib import ( - DataSource, angle, append, apply_along_axis, apply_over_axes, - array_split, asarray_chkfinite, average, bartlett, - bincount, blackman, broadcast_arrays, broadcast_shapes, + DataSource, apply_along_axis, apply_over_axes, + array_split, broadcast_arrays, broadcast_shapes, broadcast_to, byte_bounds, c_, column_stack, common_type, - copy, corrcoef, cov, delete, diag, diag_indices, - diag_indices_from, diagflat, diff, digitize, dsplit, dstack, - ediff1d, emath, expand_dims, extract, eye, fill_diagonal, fix, - flip, fliplr, flipud, fromregex, get_array_wrap, genfromtxt, - get_include, gradient, hamming, hanning, histogram2d, - hsplit, i0, imag, in1d, - index_exp, info, insert, interp, intersect1d, iscomplex, + diag, diag_indices, + diag_indices_from, diagflat, dsplit, dstack, + ediff1d, emath, expand_dims, eye, fill_diagonal, fix, + fliplr, flipud, fromregex, get_array_wrap, genfromtxt, + get_include, histogram2d, + hsplit, imag, in1d, index_exp, info, intersect1d, iscomplex, iscomplexobj, isin, isneginf, isreal, isrealobj, - iterable, ix_, kaiser, kron, load, loadtxt, mask_indices, - median, meshgrid, mgrid, mintypecode, nan_to_num, - ndenumerate, ndindex, ogrid, packbits, pad, - percentile, piecewise, place, poly, poly1d, polyadd, polyder, + ix_, kron, load, loadtxt, mask_indices, + mgrid, mintypecode, nan_to_num, ndenumerate, ndindex, ogrid, + packbits, pad, poly, poly1d, polyadd, polyder, polydiv, polyfit, polyint, polymul, polysub, polyval, - put_along_axis, quantile, r_, ravel_multi_index, real, real_if_close, - roots, rot90, row_stack, s_, save, savetxt, savez, savez_compressed, - select, setdiff1d, setxor1d, show_runtime, sinc, sort_complex, split, - take_along_axis, tile, trapz, tri, tril, + put_along_axis, r_, ravel_multi_index, real, real_if_close, + roots, row_stack, s_, save, savetxt, savez, savez_compressed, + setdiff1d, setxor1d, show_runtime, split, + take_along_axis, tile, tri, tril, tril_indices, tril_indices_from, typename, union1d, unique, unpackbits, - unravel_index, unwrap, vander, vectorize, vsplit, trim_zeros, - triu, triu_indices, triu_indices_from, isposinf + unravel_index, vander, vsplit, triu, triu_indices, triu_indices_from, + isposinf ) from .lib._histograms_impl import ( histogram, histogram_bin_edges, histogramdd @@ -216,6 +213,13 @@ nanmedian, nanmin, nanpercentile, nanprod, nanquantile, nanstd, nansum, nanvar ) + from .lib._function_base_impl import ( + select, piecewise, trim_zeros, copy, iterable, percentile, diff, + gradient, angle, unwrap, sort_complex, flip, rot90, extract, place, + vectorize, asarray_chkfinite, average, bincount, digitize, cov, + corrcoef, median, sinc, hamming, hanning, bartlett, blackman, + kaiser, trapz, i0, meshgrid, delete, insert, append, interp, quantile + ) from . import matrixlib as _mat from .matrixlib import ( asmatrix, bmat, matrix @@ -278,6 +282,7 @@ __numpy_submodules__ | set(core.__all__) | set(lib.__all__) | set(_mat.__all__) | set(lib._histograms_impl.__all__) | set(lib._nanfunctions_impl.__all__) | + set(lib._function_base_impl.__all__) | {"show_config", "__version__"} ) diff --git a/numpy/__init__.pyi b/numpy/__init__.pyi index f74e894fc80f..8e101ffa5671 100644 --- a/numpy/__init__.pyi +++ b/numpy/__init__.pyi @@ -412,7 +412,7 @@ from numpy.lib.arraysetops import ( isin as isin, ) -from numpy.lib.function_base import ( +from numpy.lib._function_base_impl import ( select as select, piecewise as piecewise, trim_zeros as trim_zeros, diff --git a/numpy/_expired_attrs_2_0.py b/numpy/_expired_attrs_2_0.py index 5e89f37e074b..387a37751d09 100644 --- a/numpy/_expired_attrs_2_0.py +++ b/numpy/_expired_attrs_2_0.py @@ -60,4 +60,5 @@ "recfromtxt": "Use `np.genfromtxt` instead.", "deprecate": "Raise `DeprecationWarning` instead.", "deprecate_with_doc": "Raise `DeprecationWarning` instead.", + "disp": "Use your own printing function instead.", } diff --git a/numpy/core/tests/test_deprecations.py b/numpy/core/tests/test_deprecations.py index f63f1c0f91a3..b919be97046e 100644 --- a/numpy/core/tests/test_deprecations.py +++ b/numpy/core/tests/test_deprecations.py @@ -755,7 +755,7 @@ class TestLibImports(_DeprecationTestCase): def test_lib_functions_deprecation_call(self): from numpy.lib.utils import safe_eval from numpy.lib.npyio import recfromcsv, recfromtxt - from numpy.lib.function_base import disp + from numpy.lib._function_base_impl import disp from numpy.lib.shape_base import get_array_wrap from numpy.core.numerictypes import maximum_sctype from numpy.lib.tests.test_io import TextIO diff --git a/numpy/lib/__init__.py b/numpy/lib/__init__.py index 71989daf04af..b8845f271efb 100644 --- a/numpy/lib/__init__.py +++ b/numpy/lib/__init__.py @@ -21,8 +21,8 @@ # load module names. See https://github.com/networkx/networkx/issues/5838 from . import type_check from . import index_tricks -from . import function_base from . import _nanfunctions_impl +from . import _function_base_impl from . import shape_base from . import stride_tricks from . import twodim_base @@ -38,7 +38,6 @@ from .type_check import * from .index_tricks import * -from .function_base import * from .shape_base import * from .stride_tricks import * from .twodim_base import * @@ -52,12 +51,10 @@ from .arraypad import * from ._version import * from numpy.core._multiarray_umath import tracemalloc_domain -from .function_base import add_newdoc, add_docstring __all__ = ['emath'] __all__ += type_check.__all__ __all__ += index_tricks.__all__ -__all__ += function_base.__all__ __all__ += shape_base.__all__ __all__ += stride_tricks.__all__ __all__ += twodim_base.__all__ diff --git a/numpy/lib/__init__.pyi b/numpy/lib/__init__.pyi index 9f45a7982ea4..9a10a9934f7f 100644 --- a/numpy/lib/__init__.pyi +++ b/numpy/lib/__init__.pyi @@ -40,49 +40,6 @@ from numpy.lib.arrayterator import ( Arrayterator as Arrayterator, ) -from numpy.lib.function_base import ( - select as select, - piecewise as piecewise, - trim_zeros as trim_zeros, - copy as copy, - iterable as iterable, - percentile as percentile, - diff as diff, - gradient as gradient, - angle as angle, - unwrap as unwrap, - sort_complex as sort_complex, - disp as disp, - flip as flip, - rot90 as rot90, - extract as extract, - place as place, - vectorize as vectorize, - asarray_chkfinite as asarray_chkfinite, - average as average, - bincount as bincount, - digitize as digitize, - cov as cov, - corrcoef as corrcoef, - median as median, - sinc as sinc, - hamming as hamming, - hanning as hanning, - bartlett as bartlett, - blackman as blackman, - kaiser as kaiser, - trapz as trapz, - i0 as i0, - add_newdoc as add_newdoc, - add_docstring as add_docstring, - meshgrid as meshgrid, - delete as delete, - insert as insert, - append as append, - interp as interp, - quantile as quantile, -) - from numpy.lib.index_tricks import ( ravel_multi_index as ravel_multi_index, unravel_index as unravel_index, diff --git a/numpy/lib/function_base.py b/numpy/lib/_function_base_impl.py similarity index 100% rename from numpy/lib/function_base.py rename to numpy/lib/_function_base_impl.py diff --git a/numpy/lib/function_base.pyi b/numpy/lib/_function_base_impl.pyi similarity index 100% rename from numpy/lib/function_base.pyi rename to numpy/lib/_function_base_impl.pyi diff --git a/numpy/lib/_nanfunctions_impl.py b/numpy/lib/_nanfunctions_impl.py index 6b42c784cd73..cf55a842a382 100644 --- a/numpy/lib/_nanfunctions_impl.py +++ b/numpy/lib/_nanfunctions_impl.py @@ -23,7 +23,7 @@ import functools import warnings import numpy as np -from numpy.lib import function_base +from numpy.lib import _function_base_impl as fnb from numpy.core import overrides @@ -1213,9 +1213,9 @@ def nanmedian(a, axis=None, out=None, overwrite_input=False, keepdims=np._NoValu if a.size == 0: return np.nanmean(a, axis, out=out, keepdims=keepdims) - return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims, - axis=axis, out=out, - overwrite_input=overwrite_input) + return fnb._ureduce(a, func=_nanmedian, keepdims=keepdims, + axis=axis, out=out, + overwrite_input=overwrite_input) def _nanpercentile_dispatcher( @@ -1368,7 +1368,7 @@ def nanpercentile( """ if interpolation is not None: - method = function_base._check_interpolation_as_method( + method = fnb._check_interpolation_as_method( method, interpolation, "nanpercentile") a = np.asanyarray(a) @@ -1378,7 +1378,7 @@ def nanpercentile( q = np.true_divide(q, 100.0) # undo any decay that the ufunc performed (see gh-13105) q = np.asanyarray(q) - if not function_base._quantile_is_valid(q): + if not fnb._quantile_is_valid(q): raise ValueError("Percentiles must be in the range [0, 100]") return _nanquantile_unchecked( a, q, axis, out, overwrite_input, method, keepdims) @@ -1531,7 +1531,7 @@ def nanquantile( """ if interpolation is not None: - method = function_base._check_interpolation_as_method( + method = fnb._check_interpolation_as_method( method, interpolation, "nanquantile") a = np.asanyarray(a) @@ -1539,7 +1539,7 @@ def nanquantile( raise TypeError("a must be an array of real numbers") q = np.asanyarray(q) - if not function_base._quantile_is_valid(q): + if not fnb._quantile_is_valid(q): raise ValueError("Quantiles must be in the range [0, 1]") return _nanquantile_unchecked( a, q, axis, out, overwrite_input, method, keepdims) @@ -1559,14 +1559,14 @@ def _nanquantile_unchecked( # so deal them upfront if a.size == 0: return np.nanmean(a, axis, out=out, keepdims=keepdims) - return function_base._ureduce(a, - func=_nanquantile_ureduce_func, - q=q, - keepdims=keepdims, - axis=axis, - out=out, - overwrite_input=overwrite_input, - method=method) + return fnb._ureduce(a, + func=_nanquantile_ureduce_func, + q=q, + keepdims=keepdims, + axis=axis, + out=out, + overwrite_input=overwrite_input, + method=method) def _nanquantile_ureduce_func(a, q, axis=None, out=None, overwrite_input=False, @@ -1604,7 +1604,7 @@ def _nanquantile_1d(arr1d, q, overwrite_input=False, method="linear"): # convert to scalar return np.full(q.shape, np.nan, dtype=arr1d.dtype)[()] - return function_base._quantile_unchecked( + return fnb._quantile_unchecked( arr1d, q, overwrite_input=overwrite_input, method=method) diff --git a/numpy/lib/_nanfunctions_impl.pyi b/numpy/lib/_nanfunctions_impl.pyi index 8642055fedd2..9a27ed97880e 100644 --- a/numpy/lib/_nanfunctions_impl.pyi +++ b/numpy/lib/_nanfunctions_impl.pyi @@ -12,7 +12,7 @@ from numpy.core.fromnumeric import ( std ) -from numpy.lib.function_base import ( +from numpy.lib._function_base_impl import ( median, percentile, quantile, diff --git a/numpy/lib/index_tricks.py b/numpy/lib/index_tricks.py index 2e815b60e091..c7a2debdcdbc 100644 --- a/numpy/lib/index_tricks.py +++ b/numpy/lib/index_tricks.py @@ -10,10 +10,10 @@ from numpy.core.numerictypes import issubdtype import numpy.matrixlib as matrixlib -from .function_base import diff from numpy.core.multiarray import ravel_multi_index, unravel_index from numpy.core import overrides, linspace from numpy.lib.stride_tricks import as_strided +from numpy.lib._function_base_impl import diff array_function_dispatch = functools.partial( diff --git a/numpy/lib/polynomial.py b/numpy/lib/polynomial.py index f83d7ca62b3b..c86f27dea9a9 100644 --- a/numpy/lib/polynomial.py +++ b/numpy/lib/polynomial.py @@ -18,7 +18,7 @@ from numpy.core import overrides from numpy.exceptions import RankWarning from numpy.lib.twodim_base import diag, vander -from numpy.lib.function_base import trim_zeros +from numpy.lib._function_base_impl import trim_zeros from numpy.lib.type_check import iscomplex, real, imag, mintypecode from numpy.linalg import eigvals, lstsq, inv diff --git a/numpy/lib/tests/test_function_base.py b/numpy/lib/tests/test_function_base.py index 376d6bb6ac22..4a4b0f979644 100644 --- a/numpy/lib/tests/test_function_base.py +++ b/numpy/lib/tests/test_function_base.py @@ -11,21 +11,20 @@ from functools import partial import numpy as np -from numpy import ma +from numpy import ( + ma, angle, average, bartlett, blackman, corrcoef, cov, + delete, diff, digitize, extract, flipud, gradient, hamming, hanning, + i0, insert, interp, kaiser, meshgrid, piecewise, place, rot90, + select, setxor1d, sinc, trapz, trim_zeros, unwrap, unique, vectorize + ) from numpy.exceptions import AxisError from numpy.testing import ( assert_, assert_equal, assert_array_equal, assert_almost_equal, assert_array_almost_equal, assert_raises, assert_allclose, IS_PYPY, assert_warns, assert_raises_regex, suppress_warnings, HAS_REFCOUNT, IS_WASM ) -import numpy.lib.function_base as nfb +import numpy.lib._function_base_impl as nfb from numpy.random import rand -from numpy.lib import ( - angle, average, bartlett, blackman, corrcoef, cov, - delete, diff, digitize, extract, flipud, gradient, hamming, hanning, - i0, insert, interp, kaiser, meshgrid, piecewise, place, rot90, - select, setxor1d, sinc, trapz, trim_zeros, unwrap, unique, vectorize - ) from numpy.core.numeric import normalize_axis_tuple @@ -2212,14 +2211,14 @@ def test_simple(self): a = [1, 2, 3] b = [1, 2, np.inf] c = [1, 2, np.nan] - np.lib.asarray_chkfinite(a) - assert_raises(ValueError, np.lib.asarray_chkfinite, b) - assert_raises(ValueError, np.lib.asarray_chkfinite, c) + np.asarray_chkfinite(a) + assert_raises(ValueError, np.asarray_chkfinite, b) + assert_raises(ValueError, np.asarray_chkfinite, c) def test_dtype_order(self): # Regression test for missing dtype and order arguments a = [1, 2, 3] - a = np.lib.asarray_chkfinite(a, order='F', dtype=np.float64) + a = np.asarray_chkfinite(a, order='F', dtype=np.float64) assert_(a.dtype == np.float64) diff --git a/numpy/ma/core.py b/numpy/ma/core.py index 2995848adcf1..ab58928c602b 100644 --- a/numpy/ma/core.py +++ b/numpy/ma/core.py @@ -32,10 +32,8 @@ import numpy.core.umath as umath import numpy.core.numerictypes as ntypes from numpy.core import multiarray as mu -from numpy import ndarray, amax, amin, iscomplexobj, bool_, _NoValue -from numpy import array as narray -from numpy.lib.function_base import angle -from numpy import expand_dims +from numpy import ndarray, amax, amin, iscomplexobj, bool_, _NoValue, angle +from numpy import array as narray, expand_dims from numpy.core.numeric import normalize_axis_tuple from numpy._utils._inspect import getargspec, formatargspec @@ -1206,7 +1204,7 @@ def __call__(self, a, b, *args, **kwargs): cosh = _MaskedUnaryOperation(umath.cosh) tanh = _MaskedUnaryOperation(umath.tanh) abs = absolute = _MaskedUnaryOperation(umath.absolute) -angle = _MaskedUnaryOperation(angle) # from numpy.lib.function_base +angle = _MaskedUnaryOperation(angle) fabs = _MaskedUnaryOperation(umath.fabs) negative = _MaskedUnaryOperation(umath.negative) floor = _MaskedUnaryOperation(umath.floor) diff --git a/numpy/ma/core.pyi b/numpy/ma/core.pyi index 3357938007d3..000ded569c6c 100644 --- a/numpy/ma/core.pyi +++ b/numpy/ma/core.pyi @@ -12,10 +12,7 @@ from numpy import ( ones_like as ones_like, squeeze as squeeze, zeros_like as zeros_like, -) - -from numpy.lib.function_base import ( - angle as angle, + angle as angle ) # TODO: Set the `bound` to something more suitable once we diff --git a/numpy/ma/extras.py b/numpy/ma/extras.py index 23e97a739951..4a463fdc3655 100644 --- a/numpy/ma/extras.py +++ b/numpy/ma/extras.py @@ -34,7 +34,7 @@ from numpy import ndarray, array as nxarray from numpy.core.multiarray import normalize_axis_index from numpy.core.numeric import normalize_axis_tuple -from numpy.lib.function_base import _ureduce +from numpy.lib._function_base_impl import _ureduce from numpy.lib.index_tricks import AxisConcatenator diff --git a/numpy/tests/test_public_api.py b/numpy/tests/test_public_api.py index e65897aee5ce..4a1c2f0ff6ae 100644 --- a/numpy/tests/test_public_api.py +++ b/numpy/tests/test_public_api.py @@ -199,7 +199,6 @@ def test_NPY_NO_EXPORT(): "lib.arraypad", "lib.arraysetops", "lib.arrayterator", - "lib.function_base", "lib.index_tricks", "lib.npyio", "lib.polynomial",