Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes15kdownloads
__init__.py956 linesDownload Raw Back to numpy
1"""
2NumPy
3=====
4
5Provides
6  1. An array object of arbitrary homogeneous items
7  2. Fast mathematical operations over arrays
8  3. Linear Algebra, Fourier Transforms, Random Number Generation
9
10How to use the documentation
11----------------------------
12Documentation is available in two forms: docstrings provided
13with the code, and a loose standing reference guide, available from
14`the NumPy homepage <https://numpy.org>`_.
15
16We recommend exploring the docstrings using
17`IPython <https://ipython.org>`_, an advanced Python shell with
18TAB-completion and introspection capabilities.  See below for further
19instructions.
20
21The docstring examples assume that `numpy` has been imported as ``np``::
22
23  >>> import numpy as np
24
25Code snippets are indicated by three greater-than signs::
26
27  >>> x = 42
28  >>> x = x + 1
29
30Use the built-in ``help`` function to view a function's docstring::
31
32  >>> help(np.sort)
33  ... # doctest: +SKIP
34
35For some objects, ``np.info(obj)`` may provide additional help.  This is
36particularly true if you see the line "Help on ufunc object:" at the top
37of the help() page.  Ufuncs are implemented in C, not Python, for speed.
38The native Python help() does not know how to view their help, but our
39np.info() function does.
40
41Available subpackages
42---------------------
43lib
44    Basic functions used by several sub-packages.
45random
46    Core Random Tools
47linalg
48    Core Linear Algebra Tools
49fft
50    Core FFT routines
51polynomial
52    Polynomial tools
53testing
54    NumPy testing tools
55distutils
56    Enhancements to distutils with support for
57    Fortran compilers support and more (for Python <= 3.11)
58
59Utilities
60---------
61test
62    Run numpy unittests
63show_config
64    Show numpy build configuration
65__version__
66    NumPy version string
67
68Viewing documentation using IPython
69-----------------------------------
70
71Start IPython and import `numpy` usually under the alias ``np``: `import
72numpy as np`.  Then, directly past or use the ``%cpaste`` magic to paste
73examples into the shell.  To see which functions are available in `numpy`,
74type ``np.<TAB>`` (where ``<TAB>`` refers to the TAB key), or use
75``np.*cos*?<ENTER>`` (where ``<ENTER>`` refers to the ENTER key) to narrow
76down the list.  To view the docstring for a function, use
77``np.cos?<ENTER>`` (to view the docstring) and ``np.cos??<ENTER>`` (to view
78the source code).
79
80Copies vs. in-place operation
81-----------------------------
82Most of the functions in `numpy` return a copy of the array argument
83(e.g., `np.sort`).  In-place versions of these functions are often
84available as array methods, i.e. ``x = np.array([1,2,3]); x.sort()``.
85Exceptions to this rule are documented.
86
87"""
88
89
90# start delvewheel patch
91def _delvewheel_patch_1_11_2():
92    import os
93    if os.path.isdir(libs_dir := os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir, 'numpy.libs'))):
94        os.add_dll_directory(libs_dir)
95
96
97_delvewheel_patch_1_11_2()
98del _delvewheel_patch_1_11_2
99# end delvewheel patch
100
101import os
102import sys
103import warnings
104
105# If a version with git hash was stored, use that instead
106from . import version
107from ._expired_attrs_2_0 import __expired_attributes__
108from ._globals import _CopyMode, _NoValue
109from .version import __version__
110
111# We first need to detect if we're being called as part of the numpy setup
112# procedure itself in a reliable manner.
113try:
114    __NUMPY_SETUP__  # noqa: B018
115except NameError:
116    __NUMPY_SETUP__ = False
117
118if __NUMPY_SETUP__:
119    sys.stderr.write('Running from numpy source directory.\n')
120else:
121    # Allow distributors to run custom init code before importing numpy._core
122    from . import _distributor_init
123
124    try:
125        from numpy.__config__ import show_config
126    except ImportError as e:
127        if isinstance(e, ModuleNotFoundError) and e.name == "numpy.__config__":
128            # The __config__ module itself was not found, so add this info:
129            msg = """Error importing numpy: you should not try to import numpy from
130            its source directory; please exit the numpy source tree, and relaunch
131            your python interpreter from there."""
132            raise ImportError(msg) from e
133        raise
134
135    from . import _core
136    from ._core import (
137        False_,
138        ScalarType,
139        True_,
140        abs,
141        absolute,
142        acos,
143        acosh,
144        add,
145        all,
146        allclose,
147        amax,
148        amin,
149        any,
150        arange,
151        arccos,
152        arccosh,
153        arcsin,
154        arcsinh,
155        arctan,
156        arctan2,
157        arctanh,
158        argmax,
159        argmin,
160        argpartition,
161        argsort,
162        argwhere,
163        around,
164        array,
165        array2string,
166        array_equal,
167        array_equiv,
168        array_repr,
169        array_str,
170        asanyarray,
171        asarray,
172        ascontiguousarray,
173        asfortranarray,
174        asin,
175        asinh,
176        astype,
177        atan,
178        atan2,
179        atanh,
180        atleast_1d,
181        atleast_2d,
182        atleast_3d,
183        base_repr,
184        binary_repr,
185        bitwise_and,
186        bitwise_count,
187        bitwise_invert,
188        bitwise_left_shift,
189        bitwise_not,
190        bitwise_or,
191        bitwise_right_shift,
192        bitwise_xor,
193        block,
194        bool,
195        bool_,
196        broadcast,
197        busday_count,
198        busday_offset,
199        busdaycalendar,
200        byte,
201        bytes_,
202        can_cast,
203        cbrt,
204        cdouble,
205        ceil,
206        character,
207        choose,
208        clip,
209        clongdouble,
210        complex64,
211        complex128,
212        complexfloating,
213        compress,
214        concat,
215        concatenate,
216        conj,
217        conjugate,
218        convolve,
219        copysign,
220        copyto,
221        correlate,
222        cos,
223        cosh,
224        count_nonzero,
225        cross,
226        csingle,
227        cumprod,
228        cumsum,
229        cumulative_prod,
230        cumulative_sum,
231        datetime64,
232        datetime_as_string,
233        datetime_data,
234        deg2rad,
235        degrees,
236        diagonal,
237        divide,
238        divmod,
239        dot,
240        double,
241        dtype,
242        e,
243        einsum,
244        einsum_path,
245        empty,
246        empty_like,
247        equal,
248        errstate,
249        euler_gamma,
250        exp,
251        exp2,
252        expm1,
253        fabs,
254        finfo,
255        flatiter,
256        flatnonzero,
257        flexible,
258        float16,
259        float32,
260        float64,
261        float_power,
262        floating,
263        floor,
264        floor_divide,
265        fmax,
266        fmin,
267        fmod,
268        format_float_positional,
269        format_float_scientific,
270        frexp,
271        from_dlpack,
272        frombuffer,
273        fromfile,
274        fromfunction,
275        fromiter,
276        frompyfunc,
277        fromstring,
278        full,
279        full_like,
280        gcd,
281        generic,
282        geomspace,
283        get_printoptions,
284        getbufsize,
285        geterr,
286        geterrcall,
287        greater,
288        greater_equal,
289        half,
290        heaviside,
291        hstack,
292        hypot,
293        identity,
294        iinfo,
295        indices,
296        inexact,
297        inf,
298        inner,
299        int8,
300        int16,
301        int32,
302        int64,
303        int_,
304        intc,
305        integer,
306        intp,
307        invert,
308        is_busday,
309        isclose,
310        isdtype,
311        isfinite,
312        isfortran,
313        isinf,
314        isnan,
315        isnat,
316        isscalar,
317        issubdtype,
318        lcm,
319        ldexp,
320        left_shift,
321        less,
322        less_equal,
323        lexsort,
324        linspace,
325        little_endian,
326        log,
327        log1p,
328        log2,
329        log10,
330        logaddexp,
331        logaddexp2,
332        logical_and,
333        logical_not,
334        logical_or,
335        logical_xor,
336        logspace,
337        long,
338        longdouble,
339        longlong,
340        matmul,
341        matrix_transpose,
342        matvec,
343        max,
344        maximum,
345        may_share_memory,
346        mean,
347        memmap,
348        min,
349        min_scalar_type,
350        minimum,
351        mod,
352        modf,
353        moveaxis,
354        multiply,
355        nan,
356        ndarray,
357        ndim,
358        nditer,
359        negative,
360        nested_iters,
361        newaxis,
362        nextafter,
363        nonzero,
364        not_equal,
365        number,
366        object_,
367        ones,
368        ones_like,
369        outer,
370        partition,
371        permute_dims,
372        pi,
373        positive,
374        pow,
375        power,
376        printoptions,
377        prod,
378        promote_types,
379        ptp,
380        put,
381        putmask,
382        rad2deg,
383        radians,
384        ravel,
385        recarray,
386        reciprocal,
387        record,
388        remainder,
389        repeat,
390        require,
391        reshape,
392        resize,
393        result_type,
394        right_shift,
395        rint,
396        roll,
397        rollaxis,
398        round,
399        sctypeDict,
400        searchsorted,
401        set_printoptions,
402        setbufsize,
403        seterr,
404        seterrcall,
405        shape,
406        shares_memory,
407        short,
408        sign,
409        signbit,
410        signedinteger,
411        sin,
412        single,
413        sinh,
414        size,
415        sort,
416        spacing,
417        sqrt,
418        square,
419        squeeze,
420        stack,
421        std,
422        str_,
423        subtract,
424        sum,
425        swapaxes,
426        take,
427        tan,
428        tanh,
429        tensordot,
430        timedelta64,
431        trace,
432        transpose,
433        true_divide,
434        trunc,
435        typecodes,
436        ubyte,
437        ufunc,
438        uint,
439        uint8,
440        uint16,
441        uint32,
442        uint64,
443        uintc,
444        uintp,
445        ulong,
446        ulonglong,
447        unsignedinteger,
448        unstack,
449        ushort,
450        var,
451        vdot,
452        vecdot,
453        vecmat,
454        void,
455        vstack,
456        where,
457        zeros,
458        zeros_like,
459    )
460
461    # NOTE: It's still under discussion whether these aliases
462    # should be removed.
463    for ta in ["float96", "float128", "complex192", "complex256"]:
464        try:
465            globals()[ta] = getattr(_core, ta)
466        except AttributeError:
467            pass
468    del ta
469
470    from . import lib, matrixlib as _mat
471    from .lib import scimath as emath
472    from .lib._arraypad_impl import pad
473    from .lib._arraysetops_impl import (
474        ediff1d,
475        intersect1d,
476        isin,
477        setdiff1d,
478        setxor1d,
479        union1d,
480        unique,
481        unique_all,
482        unique_counts,
483        unique_inverse,
484        unique_values,
485    )
486    from .lib._function_base_impl import (
487        angle,
488        append,
489        asarray_chkfinite,
490        average,
491        bartlett,
492        bincount,
493        blackman,
494        copy,
495        corrcoef,
496        cov,
497        delete,
498        diff,
499        digitize,
500        extract,
501        flip,
502        gradient,
503        hamming,
504        hanning,
505        i0,
506        insert,
507        interp,
508        iterable,
509        kaiser,
510        median,
511        meshgrid,
512        percentile,
513        piecewise,
514        place,
515        quantile,
516        rot90,
517        select,
518        sinc,
519        sort_complex,
520        trapezoid,
521        trim_zeros,
522        unwrap,
523        vectorize,
524    )
525    from .lib._histograms_impl import histogram, histogram_bin_edges, histogramdd
526    from .lib._index_tricks_impl import (
527        c_,
528        diag_indices,
529        diag_indices_from,
530        fill_diagonal,
531        index_exp,
532        ix_,
533        mgrid,
534        ndenumerate,
535        ndindex,
536        ogrid,
537        r_,
538        ravel_multi_index,
539        s_,
540        unravel_index,
541    )
542    from .lib._nanfunctions_impl import (
543        nanargmax,
544        nanargmin,
545        nancumprod,
546        nancumsum,
547        nanmax,
548        nanmean,
549        nanmedian,
550        nanmin,
551        nanpercentile,
552        nanprod,
553        nanquantile,
554        nanstd,
555        nansum,
556        nanvar,
557    )
558    from .lib._npyio_impl import (
559        fromregex,
560        genfromtxt,
561        load,
562        loadtxt,
563        packbits,
564        save,
565        savetxt,
566        savez,
567        savez_compressed,
568        unpackbits,
569    )
570    from .lib._polynomial_impl import (
571        poly,
572        poly1d,
573        polyadd,
574        polyder,
575        polydiv,
576        polyfit,
577        polyint,
578        polymul,
579        polysub,
580        polyval,
581        roots,
582    )
583    from .lib._shape_base_impl import (
584        apply_along_axis,
585        apply_over_axes,
586        array_split,
587        column_stack,
588        dsplit,
589        dstack,
590        expand_dims,
591        hsplit,
592        kron,
593        put_along_axis,
594        row_stack,
595        split,
596        take_along_axis,
597        tile,
598        vsplit,
599    )
600    from .lib._stride_tricks_impl import (
601        broadcast_arrays,
602        broadcast_shapes,
603        broadcast_to,
604    )
605    from .lib._twodim_base_impl import (
606        diag,
607        diagflat,
608        eye,
609        fliplr,
610        flipud,
611        histogram2d,
612        mask_indices,
613        tri,
614        tril,
615        tril_indices,
616        tril_indices_from,
617        triu,
618        triu_indices,
619        triu_indices_from,
620        vander,
621    )
622    from .lib._type_check_impl import (
623        common_type,
624        imag,
625        iscomplex,
626        iscomplexobj,
627        isreal,
628        isrealobj,
629        mintypecode,
630        nan_to_num,
631        real,
632        real_if_close,
633        typename,
634    )
635    from .lib._ufunclike_impl import fix, isneginf, isposinf
636    from .lib._utils_impl import get_include, info, show_runtime
637    from .matrixlib import asmatrix, bmat, matrix
638
639    # public submodules are imported lazily, therefore are accessible from
640    # __getattr__. Note that `distutils` (deprecated) and `array_api`
641    # (experimental label) are not added here, because `from numpy import *`
642    # must not raise any warnings - that's too disruptive.
643    __numpy_submodules__ = {
644        "linalg", "fft", "dtypes", "random", "polynomial", "ma",
645        "exceptions", "lib", "ctypeslib", "testing", "typing",
646        "f2py", "test", "rec", "char", "core", "strings",
647    }
648
649    # We build warning messages for former attributes
650    _msg = (
651        "module 'numpy' has no attribute '{n}'.\n"
652        "`np.{n}` was a deprecated alias for the builtin `{n}`. "
653        "To avoid this error in existing code, use `{n}` by itself. "
654        "Doing this will not modify any behavior and is safe. {extended_msg}\n"
655        "The aliases was originally deprecated in NumPy 1.20; for more "
656        "details and guidance see the original release note at:\n"
657        "    https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations")
658
659    _specific_msg = (
660        "If you specifically wanted the numpy scalar type, use `np.{}` here.")
661
662    _int_extended_msg = (
663        "When replacing `np.{}`, you may wish to use e.g. `np.int64` "
664        "or `np.int32` to specify the precision. If you wish to review "
665        "your current use, check the release note link for "
666        "additional information.")
667
668    _type_info = [
669        ("object", ""),  # The NumPy scalar only exists by name.
670        ("float", _specific_msg.format("float64")),
671        ("complex", _specific_msg.format("complex128")),
672        ("str", _specific_msg.format("str_")),
673        ("int", _int_extended_msg.format("int"))]
674
675    __former_attrs__ = {
676         n: _msg.format(n=n, extended_msg=extended_msg)
677         for n, extended_msg in _type_info
678     }
679
680    # Some of these could be defined right away, but most were aliases to
681    # the Python objects and only removed in NumPy 1.24.  Defining them should
682    # probably wait for NumPy 1.26 or 2.0.
683    # When defined, these should possibly not be added to `__all__` to avoid
684    # import with `from numpy import *`.
685    __future_scalars__ = {"str", "bytes", "object"}
686
687    __array_api_version__ = "2024.12"
688
689    from ._array_api_info import __array_namespace_info__
690
691    __all__ = list(
692        __numpy_submodules__ |
693        set(_core.__all__) |
694        set(_mat.__all__) |
695        set(lib._histograms_impl.__all__) |
696        set(lib._nanfunctions_impl.__all__) |
697        set(lib._function_base_impl.__all__) |
698        set(lib._twodim_base_impl.__all__) |
699        set(lib._shape_base_impl.__all__) |
700        set(lib._type_check_impl.__all__) |
701        set(lib._arraysetops_impl.__all__) |
702        set(lib._ufunclike_impl.__all__) |
703        set(lib._arraypad_impl.__all__) |
704        set(lib._utils_impl.__all__) |
705        set(lib._stride_tricks_impl.__all__) |
706        set(lib._polynomial_impl.__all__) |
707        set(lib._npyio_impl.__all__) |
708        set(lib._index_tricks_impl.__all__) |
709        {"emath", "show_config", "__version__", "__array_namespace_info__"}
710    )
711
712    # Filter out Cython harmless warnings
713    warnings.filterwarnings("ignore", message="numpy.dtype size changed")
714    warnings.filterwarnings("ignore", message="numpy.ufunc size changed")
715    warnings.filterwarnings("ignore", message="numpy.ndarray size changed")
716
717    def __getattr__(attr):
718        # Warn for expired attributes
719        import warnings
720
721        if attr == "linalg":
722            import numpy.linalg as linalg
723            return linalg
724        elif attr == "fft":
725            import numpy.fft as fft
726            return fft
727        elif attr == "dtypes":
728            import numpy.dtypes as dtypes
729            return dtypes
730        elif attr == "random":
731            import numpy.random as random
732            return random
733        elif attr == "polynomial":
734            import numpy.polynomial as polynomial
735            return polynomial
736        elif attr == "ma":
737            import numpy.ma as ma
738            return ma
739        elif attr == "ctypeslib":
740            import numpy.ctypeslib as ctypeslib
741            return ctypeslib
742        elif attr == "exceptions":
743            import numpy.exceptions as exceptions
744            return exceptions
745        elif attr == "testing":
746            import numpy.testing as testing
747            return testing
748        elif attr == "matlib":
749            import numpy.matlib as matlib
750            return matlib
751        elif attr == "f2py":
752            import numpy.f2py as f2py
753            return f2py
754        elif attr == "typing":
755            import numpy.typing as typing
756            return typing
757        elif attr == "rec":
758            import numpy.rec as rec
759            return rec
760        elif attr == "char":
761            import numpy.char as char
762            return char
763        elif attr == "array_api":
764            raise AttributeError("`numpy.array_api` is not available from "
765                                 "numpy 2.0 onwards", name=None)
766        elif attr == "core":
767            import numpy.core as core
768            return core
769        elif attr == "strings":
770            import numpy.strings as strings
771            return strings
772        elif attr == "distutils":
773            if 'distutils' in __numpy_submodules__:
774                import numpy.distutils as distutils
775                return distutils
776            else:
777                raise AttributeError("`numpy.distutils` is not available from "
778                                     "Python 3.12 onwards", name=None)
779
780        if attr in __future_scalars__:
781            # And future warnings for those that will change, but also give
782            # the AttributeError
783            warnings.warn(
784                f"In the future `np.{attr}` will be defined as the "
785                "corresponding NumPy scalar.", FutureWarning, stacklevel=2)
786
787        if attr in __former_attrs__:
788            raise AttributeError(__former_attrs__[attr], name=None)
789
790        if attr in __expired_attributes__:
791            raise AttributeError(
792                f"`np.{attr}` was removed in the NumPy 2.0 release. "
793                f"{__expired_attributes__[attr]}",
794                name=None
795            )
796
797        if attr == "chararray":
798            warnings.warn(
799                "`np.chararray` is deprecated and will be removed from "
800                "the main namespace in the future. Use an array with a string "
801                "or bytes dtype instead.", DeprecationWarning, stacklevel=2)
802            import numpy.char as char
803            return char.chararray
804
805        raise AttributeError(f"module {__name__!r} has no attribute {attr!r}")
806
807    def __dir__():
808        public_symbols = (
809            globals().keys() | __numpy_submodules__
810        )
811        public_symbols -= {
812            "matrixlib", "matlib", "tests", "conftest", "version",
813            "distutils", "array_api"
814        }
815        return list(public_symbols)
816
817    # Pytest testing
818    from numpy._pytesttester import PytestTester
819    test = PytestTester(__name__)
820    del PytestTester
821
822    def _sanity_check():
823        """
824        Quick sanity checks for common bugs caused by environment.
825        There are some cases e.g. with wrong BLAS ABI that cause wrong
826        results under specific runtime conditions that are not necessarily
827        achieved during test suite runs, and it is useful to catch those early.
828
829        See https://github.com/numpy/numpy/issues/8577 and other
830        similar bug reports.
831
832        """
833        try:
834            x = ones(2, dtype=float32)
835            if not abs(x.dot(x) - float32(2.0)) < 1e-5:
836                raise AssertionError
837        except AssertionError:
838            msg = ("The current Numpy installation ({!r}) fails to "
839                   "pass simple sanity checks. This can be caused for example "
840                   "by incorrect BLAS library being linked in, or by mixing "
841                   "package managers (pip, conda, apt, ...). Search closed "
842                   "numpy issues for similar problems.")
843            raise RuntimeError(msg.format(__file__)) from None
844
845    _sanity_check()
846    del _sanity_check
847
848    def _mac_os_check():
849        """
850        Quick Sanity check for Mac OS look for accelerate build bugs.
851        Testing numpy polyfit calls init_dgelsd(LAPACK)
852        """
853        try:
854            c = array([3., 2., 1.])
855            x = linspace(0, 2, 5)
856            y = polyval(c, x)
857            _ = polyfit(x, y, 2, cov=True)
858        except ValueError:
859            pass
860
861    if sys.platform == "darwin":
862        from . import exceptions
863        with warnings.catch_warnings(record=True) as w:
864            _mac_os_check()
865            # Throw runtime error, if the test failed
866            # Check for warning and report the error_message
867            if len(w) > 0:
868                for _wn in w:
869                    if _wn.category is exceptions.RankWarning:
870                        # Ignore other warnings, they may not be relevant (see gh-25433)
871                        error_message = (
872                            f"{_wn.category.__name__}: {_wn.message}"
873                        )
874                        msg = (
875                            "Polyfit sanity test emitted a warning, most likely due "
876                            "to using a buggy Accelerate backend."
877                            "\nIf you compiled yourself, more information is available at:"  # noqa: E501
878                            "\nhttps://numpy.org/devdocs/building/index.html"
879                            "\nOtherwise report this to the vendor "
880                            f"that provided NumPy.\n\n{error_message}\n")
881                        raise RuntimeError(msg)
882                del _wn
883            del w
884    del _mac_os_check
885
886    def blas_fpe_check():
887        # Check if BLAS adds spurious FPEs, mostly seen on M4 arms with Accelerate.
888        with errstate(all='raise'):
889            x = ones((20, 20))
890            try:
891                x @ x
892            except FloatingPointError:
893                res = _core._multiarray_umath._blas_supports_fpe(False)
894                if res:  # res was not modified (hardcoded to True for now)
895                    warnings.warn(
896                        "Spurious warnings given by blas but suppression not "
897                        "set up on this platform. Please open a NumPy issue.",
898                        UserWarning, stacklevel=2)
899
900    blas_fpe_check()
901    del blas_fpe_check
902
903    def hugepage_setup():
904        """
905        We usually use madvise hugepages support, but on some old kernels it
906        is slow and thus better avoided. Specifically kernel version 4.6
907        had a bug fix which probably fixed this:
908        https://github.com/torvalds/linux/commit/7cf91a98e607c2f935dbcc177d70011e95b8faff
909        """
910        use_hugepage = os.environ.get("NUMPY_MADVISE_HUGEPAGE", None)
911        if sys.platform == "linux" and use_hugepage is None:
912            # If there is an issue with parsing the kernel version,
913            # set use_hugepage to 0. Usage of LooseVersion will handle
914            # the kernel version parsing better, but avoided since it
915            # will increase the import time.
916            # See: #16679 for related discussion.
917            try:
918                use_hugepage = 1
919                kernel_version = os.uname().release.split(".")[:2]
920                kernel_version = tuple(int(v) for v in kernel_version)
921                if kernel_version < (4, 6):
922                    use_hugepage = 0
923            except ValueError:
924                use_hugepage = 0
925        elif use_hugepage is None:
926            # This is not Linux, so it should not matter, just enable anyway
927            use_hugepage = 1
928        else:
929            use_hugepage = int(use_hugepage)
930        return use_hugepage
931
932    # Note that this will currently only make a difference on Linux
933    _core.multiarray._set_madvise_hugepage(hugepage_setup())
934    del hugepage_setup
935
936    # Give a warning if NumPy is reloaded or imported on a sub-interpreter
937    # We do this from python, since the C-module may not be reloaded and
938    # it is tidier organized.
939    _core.multiarray._multiarray_umath._reload_guard()
940
941    # TODO: Remove the environment variable entirely now that it is "weak"
942    if (os.environ.get("NPY_PROMOTION_STATE", "weak") != "weak"):
943        warnings.warn(
944            "NPY_PROMOTION_STATE was a temporary feature for NumPy 2.0 "
945            "transition and is ignored after NumPy 2.2.",
946            UserWarning, stacklevel=2)
947
948    # Tell PyInstaller where to find hook-numpy.py
949    def _pyinstaller_hooks_dir():
950        from pathlib import Path
951        return [str(Path(__file__).with_name("_pyinstaller").resolve())]
952
953
954# Remove symbols imported for internal use
955del os, sys, warnings
956 
codekingpro/portable-devtools · Team Ai