numpy 2.3.5__cp313-cp313-macosx_14_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of numpy might be problematic. Click here for more details.
- numpy/__config__.py +170 -0
- numpy/__config__.pyi +102 -0
- numpy/__init__.cython-30.pxd +1241 -0
- numpy/__init__.pxd +1154 -0
- numpy/__init__.py +945 -0
- numpy/__init__.pyi +6147 -0
- numpy/_array_api_info.py +346 -0
- numpy/_array_api_info.pyi +207 -0
- numpy/_configtool.py +39 -0
- numpy/_configtool.pyi +1 -0
- numpy/_core/__init__.py +186 -0
- numpy/_core/__init__.pyi +2 -0
- numpy/_core/_add_newdocs.py +6967 -0
- numpy/_core/_add_newdocs.pyi +3 -0
- numpy/_core/_add_newdocs_scalars.py +390 -0
- numpy/_core/_add_newdocs_scalars.pyi +16 -0
- numpy/_core/_asarray.py +134 -0
- numpy/_core/_asarray.pyi +41 -0
- numpy/_core/_dtype.py +366 -0
- numpy/_core/_dtype.pyi +58 -0
- numpy/_core/_dtype_ctypes.py +120 -0
- numpy/_core/_dtype_ctypes.pyi +83 -0
- numpy/_core/_exceptions.py +162 -0
- numpy/_core/_exceptions.pyi +55 -0
- numpy/_core/_internal.py +958 -0
- numpy/_core/_internal.pyi +72 -0
- numpy/_core/_machar.py +355 -0
- numpy/_core/_machar.pyi +55 -0
- numpy/_core/_methods.py +255 -0
- numpy/_core/_methods.pyi +22 -0
- numpy/_core/_multiarray_tests.cpython-313-darwin.so +0 -0
- numpy/_core/_multiarray_umath.cpython-313-darwin.so +0 -0
- numpy/_core/_operand_flag_tests.cpython-313-darwin.so +0 -0
- numpy/_core/_rational_tests.cpython-313-darwin.so +0 -0
- numpy/_core/_simd.cpython-313-darwin.so +0 -0
- numpy/_core/_simd.pyi +25 -0
- numpy/_core/_string_helpers.py +100 -0
- numpy/_core/_string_helpers.pyi +12 -0
- numpy/_core/_struct_ufunc_tests.cpython-313-darwin.so +0 -0
- numpy/_core/_type_aliases.py +119 -0
- numpy/_core/_type_aliases.pyi +97 -0
- numpy/_core/_ufunc_config.py +491 -0
- numpy/_core/_ufunc_config.pyi +78 -0
- numpy/_core/_umath_tests.cpython-313-darwin.so +0 -0
- numpy/_core/arrayprint.py +1775 -0
- numpy/_core/arrayprint.pyi +238 -0
- numpy/_core/cversions.py +13 -0
- numpy/_core/defchararray.py +1427 -0
- numpy/_core/defchararray.pyi +1135 -0
- numpy/_core/einsumfunc.py +1498 -0
- numpy/_core/einsumfunc.pyi +184 -0
- numpy/_core/fromnumeric.py +4269 -0
- numpy/_core/fromnumeric.pyi +1750 -0
- numpy/_core/function_base.py +545 -0
- numpy/_core/function_base.pyi +278 -0
- numpy/_core/getlimits.py +748 -0
- numpy/_core/getlimits.pyi +3 -0
- numpy/_core/include/numpy/__multiarray_api.c +376 -0
- numpy/_core/include/numpy/__multiarray_api.h +1628 -0
- numpy/_core/include/numpy/__ufunc_api.c +54 -0
- numpy/_core/include/numpy/__ufunc_api.h +341 -0
- numpy/_core/include/numpy/_neighborhood_iterator_imp.h +90 -0
- numpy/_core/include/numpy/_numpyconfig.h +33 -0
- numpy/_core/include/numpy/_public_dtype_api_table.h +86 -0
- numpy/_core/include/numpy/arrayobject.h +7 -0
- numpy/_core/include/numpy/arrayscalars.h +196 -0
- numpy/_core/include/numpy/dtype_api.h +480 -0
- numpy/_core/include/numpy/halffloat.h +70 -0
- numpy/_core/include/numpy/ndarrayobject.h +304 -0
- numpy/_core/include/numpy/ndarraytypes.h +1950 -0
- numpy/_core/include/numpy/npy_2_compat.h +249 -0
- numpy/_core/include/numpy/npy_2_complexcompat.h +28 -0
- numpy/_core/include/numpy/npy_3kcompat.h +374 -0
- numpy/_core/include/numpy/npy_common.h +977 -0
- numpy/_core/include/numpy/npy_cpu.h +124 -0
- numpy/_core/include/numpy/npy_endian.h +78 -0
- numpy/_core/include/numpy/npy_math.h +602 -0
- numpy/_core/include/numpy/npy_no_deprecated_api.h +20 -0
- numpy/_core/include/numpy/npy_os.h +42 -0
- numpy/_core/include/numpy/numpyconfig.h +182 -0
- numpy/_core/include/numpy/random/LICENSE.txt +21 -0
- numpy/_core/include/numpy/random/bitgen.h +20 -0
- numpy/_core/include/numpy/random/distributions.h +209 -0
- numpy/_core/include/numpy/random/libdivide.h +2079 -0
- numpy/_core/include/numpy/ufuncobject.h +343 -0
- numpy/_core/include/numpy/utils.h +37 -0
- numpy/_core/lib/libnpymath.a +0 -0
- numpy/_core/lib/npy-pkg-config/mlib.ini +12 -0
- numpy/_core/lib/npy-pkg-config/npymath.ini +20 -0
- numpy/_core/lib/pkgconfig/numpy.pc +7 -0
- numpy/_core/memmap.py +363 -0
- numpy/_core/memmap.pyi +3 -0
- numpy/_core/multiarray.py +1762 -0
- numpy/_core/multiarray.pyi +1285 -0
- numpy/_core/numeric.py +2760 -0
- numpy/_core/numeric.pyi +882 -0
- numpy/_core/numerictypes.py +633 -0
- numpy/_core/numerictypes.pyi +197 -0
- numpy/_core/overrides.py +183 -0
- numpy/_core/overrides.pyi +48 -0
- numpy/_core/printoptions.py +32 -0
- numpy/_core/printoptions.pyi +28 -0
- numpy/_core/records.py +1089 -0
- numpy/_core/records.pyi +333 -0
- numpy/_core/shape_base.py +998 -0
- numpy/_core/shape_base.pyi +175 -0
- numpy/_core/strings.py +1829 -0
- numpy/_core/strings.pyi +511 -0
- numpy/_core/tests/_locales.py +72 -0
- numpy/_core/tests/_natype.py +205 -0
- numpy/_core/tests/data/astype_copy.pkl +0 -0
- numpy/_core/tests/data/generate_umath_validation_data.cpp +170 -0
- numpy/_core/tests/data/recarray_from_file.fits +0 -0
- numpy/_core/tests/data/umath-validation-set-README.txt +15 -0
- numpy/_core/tests/data/umath-validation-set-arccos.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-arccosh.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-arcsin.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-arcsinh.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-arctan.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-arctanh.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-cbrt.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-cos.csv +1375 -0
- numpy/_core/tests/data/umath-validation-set-cosh.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-exp.csv +412 -0
- numpy/_core/tests/data/umath-validation-set-exp2.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-expm1.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-log.csv +271 -0
- numpy/_core/tests/data/umath-validation-set-log10.csv +1629 -0
- numpy/_core/tests/data/umath-validation-set-log1p.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-log2.csv +1629 -0
- numpy/_core/tests/data/umath-validation-set-sin.csv +1370 -0
- numpy/_core/tests/data/umath-validation-set-sinh.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-tan.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-tanh.csv +1429 -0
- numpy/_core/tests/examples/cython/checks.pyx +373 -0
- numpy/_core/tests/examples/cython/meson.build +43 -0
- numpy/_core/tests/examples/cython/setup.py +39 -0
- numpy/_core/tests/examples/limited_api/limited_api1.c +17 -0
- numpy/_core/tests/examples/limited_api/limited_api2.pyx +11 -0
- numpy/_core/tests/examples/limited_api/limited_api_latest.c +19 -0
- numpy/_core/tests/examples/limited_api/meson.build +59 -0
- numpy/_core/tests/examples/limited_api/setup.py +24 -0
- numpy/_core/tests/test__exceptions.py +90 -0
- numpy/_core/tests/test_abc.py +54 -0
- numpy/_core/tests/test_api.py +654 -0
- numpy/_core/tests/test_argparse.py +92 -0
- numpy/_core/tests/test_array_api_info.py +113 -0
- numpy/_core/tests/test_array_coercion.py +911 -0
- numpy/_core/tests/test_array_interface.py +222 -0
- numpy/_core/tests/test_arraymethod.py +84 -0
- numpy/_core/tests/test_arrayobject.py +75 -0
- numpy/_core/tests/test_arrayprint.py +1328 -0
- numpy/_core/tests/test_casting_floatingpoint_errors.py +154 -0
- numpy/_core/tests/test_casting_unittests.py +817 -0
- numpy/_core/tests/test_conversion_utils.py +206 -0
- numpy/_core/tests/test_cpu_dispatcher.py +49 -0
- numpy/_core/tests/test_cpu_features.py +432 -0
- numpy/_core/tests/test_custom_dtypes.py +315 -0
- numpy/_core/tests/test_cython.py +351 -0
- numpy/_core/tests/test_datetime.py +2734 -0
- numpy/_core/tests/test_defchararray.py +825 -0
- numpy/_core/tests/test_deprecations.py +454 -0
- numpy/_core/tests/test_dlpack.py +190 -0
- numpy/_core/tests/test_dtype.py +1995 -0
- numpy/_core/tests/test_einsum.py +1317 -0
- numpy/_core/tests/test_errstate.py +131 -0
- numpy/_core/tests/test_extint128.py +217 -0
- numpy/_core/tests/test_function_base.py +503 -0
- numpy/_core/tests/test_getlimits.py +205 -0
- numpy/_core/tests/test_half.py +568 -0
- numpy/_core/tests/test_hashtable.py +35 -0
- numpy/_core/tests/test_indexerrors.py +125 -0
- numpy/_core/tests/test_indexing.py +1455 -0
- numpy/_core/tests/test_item_selection.py +167 -0
- numpy/_core/tests/test_limited_api.py +102 -0
- numpy/_core/tests/test_longdouble.py +369 -0
- numpy/_core/tests/test_machar.py +30 -0
- numpy/_core/tests/test_mem_overlap.py +930 -0
- numpy/_core/tests/test_mem_policy.py +452 -0
- numpy/_core/tests/test_memmap.py +246 -0
- numpy/_core/tests/test_multiarray.py +10577 -0
- numpy/_core/tests/test_multithreading.py +292 -0
- numpy/_core/tests/test_nditer.py +3498 -0
- numpy/_core/tests/test_nep50_promotions.py +287 -0
- numpy/_core/tests/test_numeric.py +4247 -0
- numpy/_core/tests/test_numerictypes.py +651 -0
- numpy/_core/tests/test_overrides.py +791 -0
- numpy/_core/tests/test_print.py +200 -0
- numpy/_core/tests/test_protocols.py +46 -0
- numpy/_core/tests/test_records.py +544 -0
- numpy/_core/tests/test_regression.py +2670 -0
- numpy/_core/tests/test_scalar_ctors.py +207 -0
- numpy/_core/tests/test_scalar_methods.py +246 -0
- numpy/_core/tests/test_scalarbuffer.py +153 -0
- numpy/_core/tests/test_scalarinherit.py +105 -0
- numpy/_core/tests/test_scalarmath.py +1176 -0
- numpy/_core/tests/test_scalarprint.py +403 -0
- numpy/_core/tests/test_shape_base.py +891 -0
- numpy/_core/tests/test_simd.py +1341 -0
- numpy/_core/tests/test_simd_module.py +103 -0
- numpy/_core/tests/test_stringdtype.py +1814 -0
- numpy/_core/tests/test_strings.py +1499 -0
- numpy/_core/tests/test_ufunc.py +3313 -0
- numpy/_core/tests/test_umath.py +4928 -0
- numpy/_core/tests/test_umath_accuracy.py +124 -0
- numpy/_core/tests/test_umath_complex.py +626 -0
- numpy/_core/tests/test_unicode.py +368 -0
- numpy/_core/umath.py +60 -0
- numpy/_core/umath.pyi +197 -0
- numpy/_distributor_init.py +15 -0
- numpy/_distributor_init.pyi +1 -0
- numpy/_expired_attrs_2_0.py +79 -0
- numpy/_expired_attrs_2_0.pyi +62 -0
- numpy/_globals.py +96 -0
- numpy/_globals.pyi +17 -0
- numpy/_pyinstaller/__init__.py +0 -0
- numpy/_pyinstaller/__init__.pyi +0 -0
- numpy/_pyinstaller/hook-numpy.py +36 -0
- numpy/_pyinstaller/hook-numpy.pyi +13 -0
- numpy/_pyinstaller/tests/__init__.py +16 -0
- numpy/_pyinstaller/tests/pyinstaller-smoke.py +32 -0
- numpy/_pyinstaller/tests/test_pyinstaller.py +35 -0
- numpy/_pytesttester.py +201 -0
- numpy/_pytesttester.pyi +18 -0
- numpy/_typing/__init__.py +148 -0
- numpy/_typing/_add_docstring.py +153 -0
- numpy/_typing/_array_like.py +106 -0
- numpy/_typing/_char_codes.py +213 -0
- numpy/_typing/_dtype_like.py +114 -0
- numpy/_typing/_extended_precision.py +15 -0
- numpy/_typing/_nbit.py +19 -0
- numpy/_typing/_nbit_base.py +94 -0
- numpy/_typing/_nbit_base.pyi +40 -0
- numpy/_typing/_nested_sequence.py +79 -0
- numpy/_typing/_scalars.py +20 -0
- numpy/_typing/_shape.py +8 -0
- numpy/_typing/_ufunc.py +7 -0
- numpy/_typing/_ufunc.pyi +941 -0
- numpy/_utils/__init__.py +95 -0
- numpy/_utils/__init__.pyi +30 -0
- numpy/_utils/_convertions.py +18 -0
- numpy/_utils/_convertions.pyi +4 -0
- numpy/_utils/_inspect.py +192 -0
- numpy/_utils/_inspect.pyi +71 -0
- numpy/_utils/_pep440.py +486 -0
- numpy/_utils/_pep440.pyi +121 -0
- numpy/char/__init__.py +2 -0
- numpy/char/__init__.pyi +111 -0
- numpy/conftest.py +258 -0
- numpy/core/__init__.py +33 -0
- numpy/core/__init__.pyi +0 -0
- numpy/core/_dtype.py +10 -0
- numpy/core/_dtype.pyi +0 -0
- numpy/core/_dtype_ctypes.py +10 -0
- numpy/core/_dtype_ctypes.pyi +0 -0
- numpy/core/_internal.py +27 -0
- numpy/core/_multiarray_umath.py +57 -0
- numpy/core/_utils.py +21 -0
- numpy/core/arrayprint.py +10 -0
- numpy/core/defchararray.py +10 -0
- numpy/core/einsumfunc.py +10 -0
- numpy/core/fromnumeric.py +10 -0
- numpy/core/function_base.py +10 -0
- numpy/core/getlimits.py +10 -0
- numpy/core/multiarray.py +25 -0
- numpy/core/numeric.py +12 -0
- numpy/core/numerictypes.py +10 -0
- numpy/core/overrides.py +10 -0
- numpy/core/overrides.pyi +7 -0
- numpy/core/records.py +10 -0
- numpy/core/shape_base.py +10 -0
- numpy/core/umath.py +10 -0
- numpy/ctypeslib/__init__.py +13 -0
- numpy/ctypeslib/__init__.pyi +33 -0
- numpy/ctypeslib/_ctypeslib.py +603 -0
- numpy/ctypeslib/_ctypeslib.pyi +245 -0
- numpy/doc/ufuncs.py +138 -0
- numpy/dtypes.py +41 -0
- numpy/dtypes.pyi +631 -0
- numpy/exceptions.py +247 -0
- numpy/exceptions.pyi +27 -0
- numpy/f2py/__init__.py +86 -0
- numpy/f2py/__init__.pyi +6 -0
- numpy/f2py/__main__.py +5 -0
- numpy/f2py/__version__.py +1 -0
- numpy/f2py/__version__.pyi +1 -0
- numpy/f2py/_backends/__init__.py +9 -0
- numpy/f2py/_backends/__init__.pyi +5 -0
- numpy/f2py/_backends/_backend.py +44 -0
- numpy/f2py/_backends/_backend.pyi +46 -0
- numpy/f2py/_backends/_distutils.py +76 -0
- numpy/f2py/_backends/_distutils.pyi +13 -0
- numpy/f2py/_backends/_meson.py +231 -0
- numpy/f2py/_backends/_meson.pyi +63 -0
- numpy/f2py/_backends/meson.build.template +55 -0
- numpy/f2py/_isocbind.py +62 -0
- numpy/f2py/_isocbind.pyi +13 -0
- numpy/f2py/_src_pyf.py +247 -0
- numpy/f2py/_src_pyf.pyi +29 -0
- numpy/f2py/auxfuncs.py +1004 -0
- numpy/f2py/auxfuncs.pyi +264 -0
- numpy/f2py/capi_maps.py +811 -0
- numpy/f2py/capi_maps.pyi +33 -0
- numpy/f2py/cb_rules.py +665 -0
- numpy/f2py/cb_rules.pyi +17 -0
- numpy/f2py/cfuncs.py +1563 -0
- numpy/f2py/cfuncs.pyi +31 -0
- numpy/f2py/common_rules.py +143 -0
- numpy/f2py/common_rules.pyi +9 -0
- numpy/f2py/crackfortran.py +3725 -0
- numpy/f2py/crackfortran.pyi +258 -0
- numpy/f2py/diagnose.py +149 -0
- numpy/f2py/diagnose.pyi +1 -0
- numpy/f2py/f2py2e.py +786 -0
- numpy/f2py/f2py2e.pyi +76 -0
- numpy/f2py/f90mod_rules.py +269 -0
- numpy/f2py/f90mod_rules.pyi +16 -0
- numpy/f2py/func2subr.py +329 -0
- numpy/f2py/func2subr.pyi +7 -0
- numpy/f2py/rules.py +1629 -0
- numpy/f2py/rules.pyi +43 -0
- numpy/f2py/setup.cfg +3 -0
- numpy/f2py/src/fortranobject.c +1436 -0
- numpy/f2py/src/fortranobject.h +173 -0
- numpy/f2py/symbolic.py +1516 -0
- numpy/f2py/symbolic.pyi +221 -0
- numpy/f2py/tests/__init__.py +16 -0
- numpy/f2py/tests/src/abstract_interface/foo.f90 +34 -0
- numpy/f2py/tests/src/abstract_interface/gh18403_mod.f90 +6 -0
- numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +235 -0
- numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap +1 -0
- numpy/f2py/tests/src/assumed_shape/foo_free.f90 +34 -0
- numpy/f2py/tests/src/assumed_shape/foo_mod.f90 +41 -0
- numpy/f2py/tests/src/assumed_shape/foo_use.f90 +19 -0
- numpy/f2py/tests/src/assumed_shape/precision.f90 +4 -0
- numpy/f2py/tests/src/block_docstring/foo.f +6 -0
- numpy/f2py/tests/src/callback/foo.f +62 -0
- numpy/f2py/tests/src/callback/gh17797.f90 +7 -0
- numpy/f2py/tests/src/callback/gh18335.f90 +17 -0
- numpy/f2py/tests/src/callback/gh25211.f +10 -0
- numpy/f2py/tests/src/callback/gh25211.pyf +18 -0
- numpy/f2py/tests/src/callback/gh26681.f90 +18 -0
- numpy/f2py/tests/src/cli/gh_22819.pyf +6 -0
- numpy/f2py/tests/src/cli/hi77.f +3 -0
- numpy/f2py/tests/src/cli/hiworld.f90 +3 -0
- numpy/f2py/tests/src/common/block.f +11 -0
- numpy/f2py/tests/src/common/gh19161.f90 +10 -0
- numpy/f2py/tests/src/crackfortran/accesstype.f90 +13 -0
- numpy/f2py/tests/src/crackfortran/common_with_division.f +17 -0
- numpy/f2py/tests/src/crackfortran/data_common.f +8 -0
- numpy/f2py/tests/src/crackfortran/data_multiplier.f +5 -0
- numpy/f2py/tests/src/crackfortran/data_stmts.f90 +20 -0
- numpy/f2py/tests/src/crackfortran/data_with_comments.f +8 -0
- numpy/f2py/tests/src/crackfortran/foo_deps.f90 +6 -0
- numpy/f2py/tests/src/crackfortran/gh15035.f +16 -0
- numpy/f2py/tests/src/crackfortran/gh17859.f +12 -0
- numpy/f2py/tests/src/crackfortran/gh22648.pyf +7 -0
- numpy/f2py/tests/src/crackfortran/gh23533.f +5 -0
- numpy/f2py/tests/src/crackfortran/gh23598.f90 +4 -0
- numpy/f2py/tests/src/crackfortran/gh23598Warn.f90 +11 -0
- numpy/f2py/tests/src/crackfortran/gh23879.f90 +20 -0
- numpy/f2py/tests/src/crackfortran/gh27697.f90 +12 -0
- numpy/f2py/tests/src/crackfortran/gh2848.f90 +13 -0
- numpy/f2py/tests/src/crackfortran/operators.f90 +49 -0
- numpy/f2py/tests/src/crackfortran/privatemod.f90 +11 -0
- numpy/f2py/tests/src/crackfortran/publicmod.f90 +10 -0
- numpy/f2py/tests/src/crackfortran/pubprivmod.f90 +10 -0
- numpy/f2py/tests/src/crackfortran/unicode_comment.f90 +4 -0
- numpy/f2py/tests/src/f2cmap/.f2py_f2cmap +1 -0
- numpy/f2py/tests/src/f2cmap/isoFortranEnvMap.f90 +9 -0
- numpy/f2py/tests/src/isocintrin/isoCtests.f90 +34 -0
- numpy/f2py/tests/src/kind/foo.f90 +20 -0
- numpy/f2py/tests/src/mixed/foo.f +5 -0
- numpy/f2py/tests/src/mixed/foo_fixed.f90 +8 -0
- numpy/f2py/tests/src/mixed/foo_free.f90 +8 -0
- numpy/f2py/tests/src/modules/gh25337/data.f90 +8 -0
- numpy/f2py/tests/src/modules/gh25337/use_data.f90 +6 -0
- numpy/f2py/tests/src/modules/gh26920/two_mods_with_no_public_entities.f90 +21 -0
- numpy/f2py/tests/src/modules/gh26920/two_mods_with_one_public_routine.f90 +21 -0
- numpy/f2py/tests/src/modules/module_data_docstring.f90 +12 -0
- numpy/f2py/tests/src/modules/use_modules.f90 +20 -0
- numpy/f2py/tests/src/negative_bounds/issue_20853.f90 +7 -0
- numpy/f2py/tests/src/parameter/constant_array.f90 +45 -0
- numpy/f2py/tests/src/parameter/constant_both.f90 +57 -0
- numpy/f2py/tests/src/parameter/constant_compound.f90 +15 -0
- numpy/f2py/tests/src/parameter/constant_integer.f90 +22 -0
- numpy/f2py/tests/src/parameter/constant_non_compound.f90 +23 -0
- numpy/f2py/tests/src/parameter/constant_real.f90 +23 -0
- numpy/f2py/tests/src/quoted_character/foo.f +14 -0
- numpy/f2py/tests/src/regression/AB.inc +1 -0
- numpy/f2py/tests/src/regression/assignOnlyModule.f90 +25 -0
- numpy/f2py/tests/src/regression/datonly.f90 +17 -0
- numpy/f2py/tests/src/regression/f77comments.f +26 -0
- numpy/f2py/tests/src/regression/f77fixedform.f95 +5 -0
- numpy/f2py/tests/src/regression/f90continuation.f90 +9 -0
- numpy/f2py/tests/src/regression/incfile.f90 +5 -0
- numpy/f2py/tests/src/regression/inout.f90 +9 -0
- numpy/f2py/tests/src/regression/lower_f2py_fortran.f90 +5 -0
- numpy/f2py/tests/src/regression/mod_derived_types.f90 +23 -0
- numpy/f2py/tests/src/return_character/foo77.f +45 -0
- numpy/f2py/tests/src/return_character/foo90.f90 +48 -0
- numpy/f2py/tests/src/return_complex/foo77.f +45 -0
- numpy/f2py/tests/src/return_complex/foo90.f90 +48 -0
- numpy/f2py/tests/src/return_integer/foo77.f +56 -0
- numpy/f2py/tests/src/return_integer/foo90.f90 +59 -0
- numpy/f2py/tests/src/return_logical/foo77.f +56 -0
- numpy/f2py/tests/src/return_logical/foo90.f90 +59 -0
- numpy/f2py/tests/src/return_real/foo77.f +45 -0
- numpy/f2py/tests/src/return_real/foo90.f90 +48 -0
- numpy/f2py/tests/src/routines/funcfortranname.f +5 -0
- numpy/f2py/tests/src/routines/funcfortranname.pyf +11 -0
- numpy/f2py/tests/src/routines/subrout.f +4 -0
- numpy/f2py/tests/src/routines/subrout.pyf +10 -0
- numpy/f2py/tests/src/size/foo.f90 +44 -0
- numpy/f2py/tests/src/string/char.f90 +29 -0
- numpy/f2py/tests/src/string/fixed_string.f90 +34 -0
- numpy/f2py/tests/src/string/gh24008.f +8 -0
- numpy/f2py/tests/src/string/gh24662.f90 +7 -0
- numpy/f2py/tests/src/string/gh25286.f90 +14 -0
- numpy/f2py/tests/src/string/gh25286.pyf +12 -0
- numpy/f2py/tests/src/string/gh25286_bc.pyf +12 -0
- numpy/f2py/tests/src/string/scalar_string.f90 +9 -0
- numpy/f2py/tests/src/string/string.f +12 -0
- numpy/f2py/tests/src/value_attrspec/gh21665.f90 +9 -0
- numpy/f2py/tests/test_abstract_interface.py +26 -0
- numpy/f2py/tests/test_array_from_pyobj.py +678 -0
- numpy/f2py/tests/test_assumed_shape.py +50 -0
- numpy/f2py/tests/test_block_docstring.py +20 -0
- numpy/f2py/tests/test_callback.py +263 -0
- numpy/f2py/tests/test_character.py +641 -0
- numpy/f2py/tests/test_common.py +23 -0
- numpy/f2py/tests/test_crackfortran.py +421 -0
- numpy/f2py/tests/test_data.py +71 -0
- numpy/f2py/tests/test_docs.py +64 -0
- numpy/f2py/tests/test_f2cmap.py +17 -0
- numpy/f2py/tests/test_f2py2e.py +964 -0
- numpy/f2py/tests/test_isoc.py +56 -0
- numpy/f2py/tests/test_kind.py +53 -0
- numpy/f2py/tests/test_mixed.py +35 -0
- numpy/f2py/tests/test_modules.py +83 -0
- numpy/f2py/tests/test_parameter.py +129 -0
- numpy/f2py/tests/test_pyf_src.py +43 -0
- numpy/f2py/tests/test_quoted_character.py +18 -0
- numpy/f2py/tests/test_regression.py +187 -0
- numpy/f2py/tests/test_return_character.py +48 -0
- numpy/f2py/tests/test_return_complex.py +67 -0
- numpy/f2py/tests/test_return_integer.py +55 -0
- numpy/f2py/tests/test_return_logical.py +65 -0
- numpy/f2py/tests/test_return_real.py +109 -0
- numpy/f2py/tests/test_routines.py +29 -0
- numpy/f2py/tests/test_semicolon_split.py +75 -0
- numpy/f2py/tests/test_size.py +45 -0
- numpy/f2py/tests/test_string.py +100 -0
- numpy/f2py/tests/test_symbolic.py +495 -0
- numpy/f2py/tests/test_value_attrspec.py +15 -0
- numpy/f2py/tests/util.py +442 -0
- numpy/f2py/use_rules.py +99 -0
- numpy/f2py/use_rules.pyi +9 -0
- numpy/fft/__init__.py +215 -0
- numpy/fft/__init__.pyi +43 -0
- numpy/fft/_helper.py +235 -0
- numpy/fft/_helper.pyi +45 -0
- numpy/fft/_pocketfft.py +1693 -0
- numpy/fft/_pocketfft.pyi +138 -0
- numpy/fft/_pocketfft_umath.cpython-313-darwin.so +0 -0
- numpy/fft/helper.py +17 -0
- numpy/fft/helper.pyi +22 -0
- numpy/fft/tests/__init__.py +0 -0
- numpy/fft/tests/test_helper.py +167 -0
- numpy/fft/tests/test_pocketfft.py +589 -0
- numpy/lib/__init__.py +97 -0
- numpy/lib/__init__.pyi +44 -0
- numpy/lib/_array_utils_impl.py +62 -0
- numpy/lib/_array_utils_impl.pyi +26 -0
- numpy/lib/_arraypad_impl.py +890 -0
- numpy/lib/_arraypad_impl.pyi +89 -0
- numpy/lib/_arraysetops_impl.py +1260 -0
- numpy/lib/_arraysetops_impl.pyi +468 -0
- numpy/lib/_arrayterator_impl.py +224 -0
- numpy/lib/_arrayterator_impl.pyi +46 -0
- numpy/lib/_datasource.py +700 -0
- numpy/lib/_datasource.pyi +31 -0
- numpy/lib/_format_impl.py +1036 -0
- numpy/lib/_format_impl.pyi +26 -0
- numpy/lib/_function_base_impl.py +5844 -0
- numpy/lib/_function_base_impl.pyi +1164 -0
- numpy/lib/_histograms_impl.py +1085 -0
- numpy/lib/_histograms_impl.pyi +50 -0
- numpy/lib/_index_tricks_impl.py +1067 -0
- numpy/lib/_index_tricks_impl.pyi +208 -0
- numpy/lib/_iotools.py +900 -0
- numpy/lib/_iotools.pyi +114 -0
- numpy/lib/_nanfunctions_impl.py +2024 -0
- numpy/lib/_nanfunctions_impl.pyi +52 -0
- numpy/lib/_npyio_impl.py +2596 -0
- numpy/lib/_npyio_impl.pyi +301 -0
- numpy/lib/_polynomial_impl.py +1465 -0
- numpy/lib/_polynomial_impl.pyi +318 -0
- numpy/lib/_scimath_impl.py +642 -0
- numpy/lib/_scimath_impl.pyi +93 -0
- numpy/lib/_shape_base_impl.py +1301 -0
- numpy/lib/_shape_base_impl.pyi +235 -0
- numpy/lib/_stride_tricks_impl.py +549 -0
- numpy/lib/_stride_tricks_impl.pyi +74 -0
- numpy/lib/_twodim_base_impl.py +1201 -0
- numpy/lib/_twodim_base_impl.pyi +438 -0
- numpy/lib/_type_check_impl.py +699 -0
- numpy/lib/_type_check_impl.pyi +350 -0
- numpy/lib/_ufunclike_impl.py +207 -0
- numpy/lib/_ufunclike_impl.pyi +67 -0
- numpy/lib/_user_array_impl.py +299 -0
- numpy/lib/_user_array_impl.pyi +225 -0
- numpy/lib/_utils_impl.py +784 -0
- numpy/lib/_utils_impl.pyi +10 -0
- numpy/lib/_version.py +154 -0
- numpy/lib/_version.pyi +17 -0
- numpy/lib/array_utils.py +7 -0
- numpy/lib/array_utils.pyi +12 -0
- numpy/lib/format.py +24 -0
- numpy/lib/format.pyi +66 -0
- numpy/lib/introspect.py +95 -0
- numpy/lib/introspect.pyi +3 -0
- numpy/lib/mixins.py +180 -0
- numpy/lib/mixins.pyi +77 -0
- numpy/lib/npyio.py +1 -0
- numpy/lib/npyio.pyi +9 -0
- numpy/lib/recfunctions.py +1681 -0
- numpy/lib/recfunctions.pyi +435 -0
- numpy/lib/scimath.py +13 -0
- numpy/lib/scimath.pyi +30 -0
- numpy/lib/stride_tricks.py +1 -0
- numpy/lib/stride_tricks.pyi +6 -0
- numpy/lib/tests/__init__.py +0 -0
- numpy/lib/tests/data/py2-np0-objarr.npy +0 -0
- numpy/lib/tests/data/py2-objarr.npy +0 -0
- numpy/lib/tests/data/py2-objarr.npz +0 -0
- numpy/lib/tests/data/py3-objarr.npy +0 -0
- numpy/lib/tests/data/py3-objarr.npz +0 -0
- numpy/lib/tests/data/python3.npy +0 -0
- numpy/lib/tests/data/win64python2.npy +0 -0
- numpy/lib/tests/test__datasource.py +352 -0
- numpy/lib/tests/test__iotools.py +360 -0
- numpy/lib/tests/test__version.py +64 -0
- numpy/lib/tests/test_array_utils.py +32 -0
- numpy/lib/tests/test_arraypad.py +1415 -0
- numpy/lib/tests/test_arraysetops.py +1074 -0
- numpy/lib/tests/test_arrayterator.py +46 -0
- numpy/lib/tests/test_format.py +1054 -0
- numpy/lib/tests/test_function_base.py +4573 -0
- numpy/lib/tests/test_histograms.py +855 -0
- numpy/lib/tests/test_index_tricks.py +573 -0
- numpy/lib/tests/test_io.py +2848 -0
- numpy/lib/tests/test_loadtxt.py +1101 -0
- numpy/lib/tests/test_mixins.py +215 -0
- numpy/lib/tests/test_nanfunctions.py +1438 -0
- numpy/lib/tests/test_packbits.py +376 -0
- numpy/lib/tests/test_polynomial.py +320 -0
- numpy/lib/tests/test_recfunctions.py +1052 -0
- numpy/lib/tests/test_regression.py +231 -0
- numpy/lib/tests/test_shape_base.py +813 -0
- numpy/lib/tests/test_stride_tricks.py +656 -0
- numpy/lib/tests/test_twodim_base.py +559 -0
- numpy/lib/tests/test_type_check.py +473 -0
- numpy/lib/tests/test_ufunclike.py +97 -0
- numpy/lib/tests/test_utils.py +80 -0
- numpy/lib/user_array.py +1 -0
- numpy/lib/user_array.pyi +1 -0
- numpy/linalg/__init__.py +98 -0
- numpy/linalg/__init__.pyi +73 -0
- numpy/linalg/_linalg.py +3682 -0
- numpy/linalg/_linalg.pyi +475 -0
- numpy/linalg/_umath_linalg.cpython-313-darwin.so +0 -0
- numpy/linalg/_umath_linalg.pyi +61 -0
- numpy/linalg/lapack_lite.cpython-313-darwin.so +0 -0
- numpy/linalg/lapack_lite.pyi +141 -0
- numpy/linalg/linalg.py +17 -0
- numpy/linalg/linalg.pyi +69 -0
- numpy/linalg/tests/__init__.py +0 -0
- numpy/linalg/tests/test_deprecations.py +20 -0
- numpy/linalg/tests/test_linalg.py +2443 -0
- numpy/linalg/tests/test_regression.py +181 -0
- numpy/ma/API_CHANGES.txt +135 -0
- numpy/ma/LICENSE +24 -0
- numpy/ma/README.rst +236 -0
- numpy/ma/__init__.py +53 -0
- numpy/ma/__init__.pyi +458 -0
- numpy/ma/core.py +8933 -0
- numpy/ma/core.pyi +1462 -0
- numpy/ma/extras.py +2344 -0
- numpy/ma/extras.pyi +138 -0
- numpy/ma/mrecords.py +773 -0
- numpy/ma/mrecords.pyi +96 -0
- numpy/ma/tests/__init__.py +0 -0
- numpy/ma/tests/test_arrayobject.py +40 -0
- numpy/ma/tests/test_core.py +5886 -0
- numpy/ma/tests/test_deprecations.py +87 -0
- numpy/ma/tests/test_extras.py +1998 -0
- numpy/ma/tests/test_mrecords.py +497 -0
- numpy/ma/tests/test_old_ma.py +942 -0
- numpy/ma/tests/test_regression.py +100 -0
- numpy/ma/tests/test_subclassing.py +469 -0
- numpy/ma/testutils.py +294 -0
- numpy/matlib.py +380 -0
- numpy/matlib.pyi +582 -0
- numpy/matrixlib/__init__.py +12 -0
- numpy/matrixlib/__init__.pyi +5 -0
- numpy/matrixlib/defmatrix.py +1119 -0
- numpy/matrixlib/defmatrix.pyi +17 -0
- numpy/matrixlib/tests/__init__.py +0 -0
- numpy/matrixlib/tests/test_defmatrix.py +455 -0
- numpy/matrixlib/tests/test_interaction.py +360 -0
- numpy/matrixlib/tests/test_masked_matrix.py +240 -0
- numpy/matrixlib/tests/test_matrix_linalg.py +105 -0
- numpy/matrixlib/tests/test_multiarray.py +17 -0
- numpy/matrixlib/tests/test_numeric.py +18 -0
- numpy/matrixlib/tests/test_regression.py +31 -0
- numpy/polynomial/__init__.py +187 -0
- numpy/polynomial/__init__.pyi +25 -0
- numpy/polynomial/_polybase.py +1191 -0
- numpy/polynomial/_polybase.pyi +285 -0
- numpy/polynomial/_polytypes.pyi +892 -0
- numpy/polynomial/chebyshev.py +2003 -0
- numpy/polynomial/chebyshev.pyi +181 -0
- numpy/polynomial/hermite.py +1740 -0
- numpy/polynomial/hermite.pyi +107 -0
- numpy/polynomial/hermite_e.py +1642 -0
- numpy/polynomial/hermite_e.pyi +107 -0
- numpy/polynomial/laguerre.py +1675 -0
- numpy/polynomial/laguerre.pyi +100 -0
- numpy/polynomial/legendre.py +1605 -0
- numpy/polynomial/legendre.pyi +100 -0
- numpy/polynomial/polynomial.py +1616 -0
- numpy/polynomial/polynomial.pyi +89 -0
- numpy/polynomial/polyutils.py +759 -0
- numpy/polynomial/polyutils.pyi +423 -0
- numpy/polynomial/tests/__init__.py +0 -0
- numpy/polynomial/tests/test_chebyshev.py +623 -0
- numpy/polynomial/tests/test_classes.py +618 -0
- numpy/polynomial/tests/test_hermite.py +558 -0
- numpy/polynomial/tests/test_hermite_e.py +559 -0
- numpy/polynomial/tests/test_laguerre.py +540 -0
- numpy/polynomial/tests/test_legendre.py +571 -0
- numpy/polynomial/tests/test_polynomial.py +669 -0
- numpy/polynomial/tests/test_polyutils.py +128 -0
- numpy/polynomial/tests/test_printing.py +555 -0
- numpy/polynomial/tests/test_symbol.py +217 -0
- numpy/py.typed +0 -0
- numpy/random/LICENSE.md +71 -0
- numpy/random/__init__.pxd +14 -0
- numpy/random/__init__.py +213 -0
- numpy/random/__init__.pyi +124 -0
- numpy/random/_bounded_integers.cpython-313-darwin.so +0 -0
- numpy/random/_bounded_integers.pxd +29 -0
- numpy/random/_bounded_integers.pyi +1 -0
- numpy/random/_common.cpython-313-darwin.so +0 -0
- numpy/random/_common.pxd +107 -0
- numpy/random/_common.pyi +16 -0
- numpy/random/_examples/cffi/extending.py +44 -0
- numpy/random/_examples/cffi/parse.py +53 -0
- numpy/random/_examples/cython/extending.pyx +77 -0
- numpy/random/_examples/cython/extending_distributions.pyx +118 -0
- numpy/random/_examples/cython/meson.build +53 -0
- numpy/random/_examples/numba/extending.py +86 -0
- numpy/random/_examples/numba/extending_distributions.py +67 -0
- numpy/random/_generator.cpython-313-darwin.so +0 -0
- numpy/random/_generator.pyi +861 -0
- numpy/random/_mt19937.cpython-313-darwin.so +0 -0
- numpy/random/_mt19937.pyi +25 -0
- numpy/random/_pcg64.cpython-313-darwin.so +0 -0
- numpy/random/_pcg64.pyi +44 -0
- numpy/random/_philox.cpython-313-darwin.so +0 -0
- numpy/random/_philox.pyi +39 -0
- numpy/random/_pickle.py +88 -0
- numpy/random/_pickle.pyi +43 -0
- numpy/random/_sfc64.cpython-313-darwin.so +0 -0
- numpy/random/_sfc64.pyi +28 -0
- numpy/random/bit_generator.cpython-313-darwin.so +0 -0
- numpy/random/bit_generator.pxd +35 -0
- numpy/random/bit_generator.pyi +124 -0
- numpy/random/c_distributions.pxd +119 -0
- numpy/random/lib/libnpyrandom.a +0 -0
- numpy/random/mtrand.cpython-313-darwin.so +0 -0
- numpy/random/mtrand.pyi +703 -0
- numpy/random/tests/__init__.py +0 -0
- numpy/random/tests/data/__init__.py +0 -0
- numpy/random/tests/data/generator_pcg64_np121.pkl.gz +0 -0
- numpy/random/tests/data/generator_pcg64_np126.pkl.gz +0 -0
- numpy/random/tests/data/mt19937-testset-1.csv +1001 -0
- numpy/random/tests/data/mt19937-testset-2.csv +1001 -0
- numpy/random/tests/data/pcg64-testset-1.csv +1001 -0
- numpy/random/tests/data/pcg64-testset-2.csv +1001 -0
- numpy/random/tests/data/pcg64dxsm-testset-1.csv +1001 -0
- numpy/random/tests/data/pcg64dxsm-testset-2.csv +1001 -0
- numpy/random/tests/data/philox-testset-1.csv +1001 -0
- numpy/random/tests/data/philox-testset-2.csv +1001 -0
- numpy/random/tests/data/sfc64-testset-1.csv +1001 -0
- numpy/random/tests/data/sfc64-testset-2.csv +1001 -0
- numpy/random/tests/data/sfc64_np126.pkl.gz +0 -0
- numpy/random/tests/test_direct.py +592 -0
- numpy/random/tests/test_extending.py +127 -0
- numpy/random/tests/test_generator_mt19937.py +2809 -0
- numpy/random/tests/test_generator_mt19937_regressions.py +207 -0
- numpy/random/tests/test_random.py +1757 -0
- numpy/random/tests/test_randomstate.py +2130 -0
- numpy/random/tests/test_randomstate_regression.py +217 -0
- numpy/random/tests/test_regression.py +152 -0
- numpy/random/tests/test_seed_sequence.py +79 -0
- numpy/random/tests/test_smoke.py +819 -0
- numpy/rec/__init__.py +2 -0
- numpy/rec/__init__.pyi +23 -0
- numpy/strings/__init__.py +2 -0
- numpy/strings/__init__.pyi +97 -0
- numpy/testing/__init__.py +22 -0
- numpy/testing/__init__.pyi +102 -0
- numpy/testing/_private/__init__.py +0 -0
- numpy/testing/_private/__init__.pyi +0 -0
- numpy/testing/_private/extbuild.py +250 -0
- numpy/testing/_private/extbuild.pyi +25 -0
- numpy/testing/_private/utils.py +2752 -0
- numpy/testing/_private/utils.pyi +499 -0
- numpy/testing/overrides.py +84 -0
- numpy/testing/overrides.pyi +11 -0
- numpy/testing/print_coercion_tables.py +207 -0
- numpy/testing/print_coercion_tables.pyi +27 -0
- numpy/testing/tests/__init__.py +0 -0
- numpy/testing/tests/test_utils.py +1917 -0
- numpy/tests/__init__.py +0 -0
- numpy/tests/test__all__.py +10 -0
- numpy/tests/test_configtool.py +48 -0
- numpy/tests/test_ctypeslib.py +377 -0
- numpy/tests/test_lazyloading.py +38 -0
- numpy/tests/test_matlib.py +59 -0
- numpy/tests/test_numpy_config.py +46 -0
- numpy/tests/test_numpy_version.py +54 -0
- numpy/tests/test_public_api.py +806 -0
- numpy/tests/test_reloading.py +74 -0
- numpy/tests/test_scripts.py +49 -0
- numpy/tests/test_warnings.py +78 -0
- numpy/typing/__init__.py +201 -0
- numpy/typing/mypy_plugin.py +195 -0
- numpy/typing/tests/__init__.py +0 -0
- numpy/typing/tests/data/fail/arithmetic.pyi +126 -0
- numpy/typing/tests/data/fail/array_constructors.pyi +34 -0
- numpy/typing/tests/data/fail/array_like.pyi +15 -0
- numpy/typing/tests/data/fail/array_pad.pyi +6 -0
- numpy/typing/tests/data/fail/arrayprint.pyi +16 -0
- numpy/typing/tests/data/fail/arrayterator.pyi +14 -0
- numpy/typing/tests/data/fail/bitwise_ops.pyi +17 -0
- numpy/typing/tests/data/fail/char.pyi +65 -0
- numpy/typing/tests/data/fail/chararray.pyi +62 -0
- numpy/typing/tests/data/fail/comparisons.pyi +27 -0
- numpy/typing/tests/data/fail/constants.pyi +3 -0
- numpy/typing/tests/data/fail/datasource.pyi +15 -0
- numpy/typing/tests/data/fail/dtype.pyi +17 -0
- numpy/typing/tests/data/fail/einsumfunc.pyi +12 -0
- numpy/typing/tests/data/fail/flatiter.pyi +20 -0
- numpy/typing/tests/data/fail/fromnumeric.pyi +148 -0
- numpy/typing/tests/data/fail/histograms.pyi +12 -0
- numpy/typing/tests/data/fail/index_tricks.pyi +14 -0
- numpy/typing/tests/data/fail/lib_function_base.pyi +62 -0
- numpy/typing/tests/data/fail/lib_polynomial.pyi +29 -0
- numpy/typing/tests/data/fail/lib_utils.pyi +3 -0
- numpy/typing/tests/data/fail/lib_version.pyi +6 -0
- numpy/typing/tests/data/fail/linalg.pyi +48 -0
- numpy/typing/tests/data/fail/ma.pyi +143 -0
- numpy/typing/tests/data/fail/memmap.pyi +5 -0
- numpy/typing/tests/data/fail/modules.pyi +17 -0
- numpy/typing/tests/data/fail/multiarray.pyi +52 -0
- numpy/typing/tests/data/fail/ndarray.pyi +11 -0
- numpy/typing/tests/data/fail/ndarray_misc.pyi +36 -0
- numpy/typing/tests/data/fail/nditer.pyi +8 -0
- numpy/typing/tests/data/fail/nested_sequence.pyi +16 -0
- numpy/typing/tests/data/fail/npyio.pyi +24 -0
- numpy/typing/tests/data/fail/numerictypes.pyi +5 -0
- numpy/typing/tests/data/fail/random.pyi +62 -0
- numpy/typing/tests/data/fail/rec.pyi +17 -0
- numpy/typing/tests/data/fail/scalars.pyi +87 -0
- numpy/typing/tests/data/fail/shape.pyi +6 -0
- numpy/typing/tests/data/fail/shape_base.pyi +8 -0
- numpy/typing/tests/data/fail/stride_tricks.pyi +9 -0
- numpy/typing/tests/data/fail/strings.pyi +52 -0
- numpy/typing/tests/data/fail/testing.pyi +28 -0
- numpy/typing/tests/data/fail/twodim_base.pyi +32 -0
- numpy/typing/tests/data/fail/type_check.pyi +13 -0
- numpy/typing/tests/data/fail/ufunc_config.pyi +21 -0
- numpy/typing/tests/data/fail/ufunclike.pyi +21 -0
- numpy/typing/tests/data/fail/ufuncs.pyi +17 -0
- numpy/typing/tests/data/fail/warnings_and_errors.pyi +5 -0
- numpy/typing/tests/data/misc/extended_precision.pyi +9 -0
- numpy/typing/tests/data/mypy.ini +9 -0
- numpy/typing/tests/data/pass/arithmetic.py +612 -0
- numpy/typing/tests/data/pass/array_constructors.py +137 -0
- numpy/typing/tests/data/pass/array_like.py +43 -0
- numpy/typing/tests/data/pass/arrayprint.py +37 -0
- numpy/typing/tests/data/pass/arrayterator.py +27 -0
- numpy/typing/tests/data/pass/bitwise_ops.py +131 -0
- numpy/typing/tests/data/pass/comparisons.py +315 -0
- numpy/typing/tests/data/pass/dtype.py +57 -0
- numpy/typing/tests/data/pass/einsumfunc.py +36 -0
- numpy/typing/tests/data/pass/flatiter.py +19 -0
- numpy/typing/tests/data/pass/fromnumeric.py +272 -0
- numpy/typing/tests/data/pass/index_tricks.py +60 -0
- numpy/typing/tests/data/pass/lib_user_array.py +22 -0
- numpy/typing/tests/data/pass/lib_utils.py +19 -0
- numpy/typing/tests/data/pass/lib_version.py +18 -0
- numpy/typing/tests/data/pass/literal.py +51 -0
- numpy/typing/tests/data/pass/ma.py +174 -0
- numpy/typing/tests/data/pass/mod.py +149 -0
- numpy/typing/tests/data/pass/modules.py +45 -0
- numpy/typing/tests/data/pass/multiarray.py +76 -0
- numpy/typing/tests/data/pass/ndarray_conversion.py +87 -0
- numpy/typing/tests/data/pass/ndarray_misc.py +203 -0
- numpy/typing/tests/data/pass/ndarray_shape_manipulation.py +47 -0
- numpy/typing/tests/data/pass/nditer.py +4 -0
- numpy/typing/tests/data/pass/numeric.py +95 -0
- numpy/typing/tests/data/pass/numerictypes.py +17 -0
- numpy/typing/tests/data/pass/random.py +1497 -0
- numpy/typing/tests/data/pass/recfunctions.py +161 -0
- numpy/typing/tests/data/pass/scalars.py +248 -0
- numpy/typing/tests/data/pass/shape.py +19 -0
- numpy/typing/tests/data/pass/simple.py +168 -0
- numpy/typing/tests/data/pass/simple_py3.py +6 -0
- numpy/typing/tests/data/pass/ufunc_config.py +64 -0
- numpy/typing/tests/data/pass/ufunclike.py +47 -0
- numpy/typing/tests/data/pass/ufuncs.py +16 -0
- numpy/typing/tests/data/pass/warnings_and_errors.py +6 -0
- numpy/typing/tests/data/reveal/arithmetic.pyi +720 -0
- numpy/typing/tests/data/reveal/array_api_info.pyi +70 -0
- numpy/typing/tests/data/reveal/array_constructors.pyi +249 -0
- numpy/typing/tests/data/reveal/arraypad.pyi +22 -0
- numpy/typing/tests/data/reveal/arrayprint.pyi +25 -0
- numpy/typing/tests/data/reveal/arraysetops.pyi +74 -0
- numpy/typing/tests/data/reveal/arrayterator.pyi +27 -0
- numpy/typing/tests/data/reveal/bitwise_ops.pyi +167 -0
- numpy/typing/tests/data/reveal/char.pyi +224 -0
- numpy/typing/tests/data/reveal/chararray.pyi +137 -0
- numpy/typing/tests/data/reveal/comparisons.pyi +264 -0
- numpy/typing/tests/data/reveal/constants.pyi +14 -0
- numpy/typing/tests/data/reveal/ctypeslib.pyi +81 -0
- numpy/typing/tests/data/reveal/datasource.pyi +23 -0
- numpy/typing/tests/data/reveal/dtype.pyi +136 -0
- numpy/typing/tests/data/reveal/einsumfunc.pyi +39 -0
- numpy/typing/tests/data/reveal/emath.pyi +54 -0
- numpy/typing/tests/data/reveal/fft.pyi +37 -0
- numpy/typing/tests/data/reveal/flatiter.pyi +47 -0
- numpy/typing/tests/data/reveal/fromnumeric.pyi +347 -0
- numpy/typing/tests/data/reveal/getlimits.pyi +51 -0
- numpy/typing/tests/data/reveal/histograms.pyi +25 -0
- numpy/typing/tests/data/reveal/index_tricks.pyi +70 -0
- numpy/typing/tests/data/reveal/lib_function_base.pyi +213 -0
- numpy/typing/tests/data/reveal/lib_polynomial.pyi +144 -0
- numpy/typing/tests/data/reveal/lib_utils.pyi +17 -0
- numpy/typing/tests/data/reveal/lib_version.pyi +20 -0
- numpy/typing/tests/data/reveal/linalg.pyi +132 -0
- numpy/typing/tests/data/reveal/ma.pyi +369 -0
- numpy/typing/tests/data/reveal/matrix.pyi +73 -0
- numpy/typing/tests/data/reveal/memmap.pyi +19 -0
- numpy/typing/tests/data/reveal/mod.pyi +179 -0
- numpy/typing/tests/data/reveal/modules.pyi +51 -0
- numpy/typing/tests/data/reveal/multiarray.pyi +194 -0
- numpy/typing/tests/data/reveal/nbit_base_example.pyi +21 -0
- numpy/typing/tests/data/reveal/ndarray_assignability.pyi +77 -0
- numpy/typing/tests/data/reveal/ndarray_conversion.pyi +85 -0
- numpy/typing/tests/data/reveal/ndarray_misc.pyi +247 -0
- numpy/typing/tests/data/reveal/ndarray_shape_manipulation.pyi +39 -0
- numpy/typing/tests/data/reveal/nditer.pyi +49 -0
- numpy/typing/tests/data/reveal/nested_sequence.pyi +25 -0
- numpy/typing/tests/data/reveal/npyio.pyi +83 -0
- numpy/typing/tests/data/reveal/numeric.pyi +134 -0
- numpy/typing/tests/data/reveal/numerictypes.pyi +16 -0
- numpy/typing/tests/data/reveal/polynomial_polybase.pyi +220 -0
- numpy/typing/tests/data/reveal/polynomial_polyutils.pyi +219 -0
- numpy/typing/tests/data/reveal/polynomial_series.pyi +138 -0
- numpy/typing/tests/data/reveal/random.pyi +1546 -0
- numpy/typing/tests/data/reveal/rec.pyi +171 -0
- numpy/typing/tests/data/reveal/scalars.pyi +191 -0
- numpy/typing/tests/data/reveal/shape.pyi +13 -0
- numpy/typing/tests/data/reveal/shape_base.pyi +52 -0
- numpy/typing/tests/data/reveal/stride_tricks.pyi +27 -0
- numpy/typing/tests/data/reveal/strings.pyi +196 -0
- numpy/typing/tests/data/reveal/testing.pyi +198 -0
- numpy/typing/tests/data/reveal/twodim_base.pyi +145 -0
- numpy/typing/tests/data/reveal/type_check.pyi +67 -0
- numpy/typing/tests/data/reveal/ufunc_config.pyi +30 -0
- numpy/typing/tests/data/reveal/ufunclike.pyi +31 -0
- numpy/typing/tests/data/reveal/ufuncs.pyi +123 -0
- numpy/typing/tests/data/reveal/warnings_and_errors.pyi +11 -0
- numpy/typing/tests/test_isfile.py +32 -0
- numpy/typing/tests/test_runtime.py +102 -0
- numpy/typing/tests/test_typing.py +205 -0
- numpy/version.py +11 -0
- numpy/version.pyi +18 -0
- numpy-2.3.5.dist-info/LICENSE.txt +971 -0
- numpy-2.3.5.dist-info/METADATA +1093 -0
- numpy-2.3.5.dist-info/RECORD +897 -0
- numpy-2.3.5.dist-info/WHEEL +6 -0
- numpy-2.3.5.dist-info/entry_points.txt +13 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
from tempfile import NamedTemporaryFile
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
from numpy._core._multiarray_umath import (
|
|
5
|
+
_discover_array_parameters as discover_array_params,
|
|
6
|
+
)
|
|
7
|
+
from numpy._core._multiarray_umath import _get_sfloat_dtype
|
|
8
|
+
|
|
9
|
+
import numpy as np
|
|
10
|
+
from numpy.testing import assert_array_equal
|
|
11
|
+
|
|
12
|
+
SF = _get_sfloat_dtype()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class TestSFloat:
|
|
16
|
+
def _get_array(self, scaling, aligned=True):
|
|
17
|
+
if not aligned:
|
|
18
|
+
a = np.empty(3 * 8 + 1, dtype=np.uint8)[1:]
|
|
19
|
+
a = a.view(np.float64)
|
|
20
|
+
a[:] = [1., 2., 3.]
|
|
21
|
+
else:
|
|
22
|
+
a = np.array([1., 2., 3.])
|
|
23
|
+
|
|
24
|
+
a *= 1. / scaling # the casting code also uses the reciprocal.
|
|
25
|
+
return a.view(SF(scaling))
|
|
26
|
+
|
|
27
|
+
def test_sfloat_rescaled(self):
|
|
28
|
+
sf = SF(1.)
|
|
29
|
+
sf2 = sf.scaled_by(2.)
|
|
30
|
+
assert sf2.get_scaling() == 2.
|
|
31
|
+
sf6 = sf2.scaled_by(3.)
|
|
32
|
+
assert sf6.get_scaling() == 6.
|
|
33
|
+
|
|
34
|
+
def test_class_discovery(self):
|
|
35
|
+
# This does not test much, since we always discover the scaling as 1.
|
|
36
|
+
# But most of NumPy (when writing) does not understand DType classes
|
|
37
|
+
dt, _ = discover_array_params([1., 2., 3.], dtype=SF)
|
|
38
|
+
assert dt == SF(1.)
|
|
39
|
+
|
|
40
|
+
@pytest.mark.parametrize("scaling", [1., -1., 2.])
|
|
41
|
+
def test_scaled_float_from_floats(self, scaling):
|
|
42
|
+
a = np.array([1., 2., 3.], dtype=SF(scaling))
|
|
43
|
+
|
|
44
|
+
assert a.dtype.get_scaling() == scaling
|
|
45
|
+
assert_array_equal(scaling * a.view(np.float64), [1., 2., 3.])
|
|
46
|
+
|
|
47
|
+
def test_repr(self):
|
|
48
|
+
# Check the repr, mainly to cover the code paths:
|
|
49
|
+
assert repr(SF(scaling=1.)) == "_ScaledFloatTestDType(scaling=1.0)"
|
|
50
|
+
|
|
51
|
+
def test_dtype_str(self):
|
|
52
|
+
assert SF(1.).str == "_ScaledFloatTestDType(scaling=1.0)"
|
|
53
|
+
|
|
54
|
+
def test_dtype_name(self):
|
|
55
|
+
assert SF(1.).name == "_ScaledFloatTestDType64"
|
|
56
|
+
|
|
57
|
+
def test_sfloat_structured_dtype_printing(self):
|
|
58
|
+
dt = np.dtype([("id", int), ("value", SF(0.5))])
|
|
59
|
+
# repr of structured dtypes need special handling because the
|
|
60
|
+
# implementation bypasses the object repr
|
|
61
|
+
assert "('value', '_ScaledFloatTestDType64')" in repr(dt)
|
|
62
|
+
|
|
63
|
+
@pytest.mark.parametrize("scaling", [1., -1., 2.])
|
|
64
|
+
def test_sfloat_from_float(self, scaling):
|
|
65
|
+
a = np.array([1., 2., 3.]).astype(dtype=SF(scaling))
|
|
66
|
+
|
|
67
|
+
assert a.dtype.get_scaling() == scaling
|
|
68
|
+
assert_array_equal(scaling * a.view(np.float64), [1., 2., 3.])
|
|
69
|
+
|
|
70
|
+
@pytest.mark.parametrize("aligned", [True, False])
|
|
71
|
+
@pytest.mark.parametrize("scaling", [1., -1., 2.])
|
|
72
|
+
def test_sfloat_getitem(self, aligned, scaling):
|
|
73
|
+
a = self._get_array(1., aligned)
|
|
74
|
+
assert a.tolist() == [1., 2., 3.]
|
|
75
|
+
|
|
76
|
+
@pytest.mark.parametrize("aligned", [True, False])
|
|
77
|
+
def test_sfloat_casts(self, aligned):
|
|
78
|
+
a = self._get_array(1., aligned)
|
|
79
|
+
|
|
80
|
+
assert np.can_cast(a, SF(-1.), casting="equiv")
|
|
81
|
+
assert not np.can_cast(a, SF(-1.), casting="no")
|
|
82
|
+
na = a.astype(SF(-1.))
|
|
83
|
+
assert_array_equal(-1 * na.view(np.float64), a.view(np.float64))
|
|
84
|
+
|
|
85
|
+
assert np.can_cast(a, SF(2.), casting="same_kind")
|
|
86
|
+
assert not np.can_cast(a, SF(2.), casting="safe")
|
|
87
|
+
a2 = a.astype(SF(2.))
|
|
88
|
+
assert_array_equal(2 * a2.view(np.float64), a.view(np.float64))
|
|
89
|
+
|
|
90
|
+
@pytest.mark.parametrize("aligned", [True, False])
|
|
91
|
+
def test_sfloat_cast_internal_errors(self, aligned):
|
|
92
|
+
a = self._get_array(2e300, aligned)
|
|
93
|
+
|
|
94
|
+
with pytest.raises(TypeError,
|
|
95
|
+
match="error raised inside the core-loop: non-finite factor!"):
|
|
96
|
+
a.astype(SF(2e-300))
|
|
97
|
+
|
|
98
|
+
def test_sfloat_promotion(self):
|
|
99
|
+
assert np.result_type(SF(2.), SF(3.)) == SF(3.)
|
|
100
|
+
assert np.result_type(SF(3.), SF(2.)) == SF(3.)
|
|
101
|
+
# Float64 -> SF(1.) and then promotes normally, so both of this work:
|
|
102
|
+
assert np.result_type(SF(3.), np.float64) == SF(3.)
|
|
103
|
+
assert np.result_type(np.float64, SF(0.5)) == SF(1.)
|
|
104
|
+
|
|
105
|
+
# Test an undefined promotion:
|
|
106
|
+
with pytest.raises(TypeError):
|
|
107
|
+
np.result_type(SF(1.), np.int64)
|
|
108
|
+
|
|
109
|
+
def test_basic_multiply(self):
|
|
110
|
+
a = self._get_array(2.)
|
|
111
|
+
b = self._get_array(4.)
|
|
112
|
+
|
|
113
|
+
res = a * b
|
|
114
|
+
# multiplies dtype scaling and content separately:
|
|
115
|
+
assert res.dtype.get_scaling() == 8.
|
|
116
|
+
expected_view = a.view(np.float64) * b.view(np.float64)
|
|
117
|
+
assert_array_equal(res.view(np.float64), expected_view)
|
|
118
|
+
|
|
119
|
+
def test_possible_and_impossible_reduce(self):
|
|
120
|
+
# For reductions to work, the first and last operand must have the
|
|
121
|
+
# same dtype. For this parametric DType that is not necessarily true.
|
|
122
|
+
a = self._get_array(2.)
|
|
123
|
+
# Addition reduction works (as of writing requires to pass initial
|
|
124
|
+
# because setting a scaled-float from the default `0` fails).
|
|
125
|
+
res = np.add.reduce(a, initial=0.)
|
|
126
|
+
assert res == a.astype(np.float64).sum()
|
|
127
|
+
|
|
128
|
+
# But each multiplication changes the factor, so a reduction is not
|
|
129
|
+
# possible (the relaxed version of the old refusal to handle any
|
|
130
|
+
# flexible dtype).
|
|
131
|
+
with pytest.raises(TypeError,
|
|
132
|
+
match="the resolved dtypes are not compatible"):
|
|
133
|
+
np.multiply.reduce(a)
|
|
134
|
+
|
|
135
|
+
def test_basic_ufunc_at(self):
|
|
136
|
+
float_a = np.array([1., 2., 3.])
|
|
137
|
+
b = self._get_array(2.)
|
|
138
|
+
|
|
139
|
+
float_b = b.view(np.float64).copy()
|
|
140
|
+
np.multiply.at(float_b, [1, 1, 1], float_a)
|
|
141
|
+
np.multiply.at(b, [1, 1, 1], float_a)
|
|
142
|
+
|
|
143
|
+
assert_array_equal(b.view(np.float64), float_b)
|
|
144
|
+
|
|
145
|
+
def test_basic_multiply_promotion(self):
|
|
146
|
+
float_a = np.array([1., 2., 3.])
|
|
147
|
+
b = self._get_array(2.)
|
|
148
|
+
|
|
149
|
+
res1 = float_a * b
|
|
150
|
+
res2 = b * float_a
|
|
151
|
+
|
|
152
|
+
# one factor is one, so we get the factor of b:
|
|
153
|
+
assert res1.dtype == res2.dtype == b.dtype
|
|
154
|
+
expected_view = float_a * b.view(np.float64)
|
|
155
|
+
assert_array_equal(res1.view(np.float64), expected_view)
|
|
156
|
+
assert_array_equal(res2.view(np.float64), expected_view)
|
|
157
|
+
|
|
158
|
+
# Check that promotion works when `out` is used:
|
|
159
|
+
np.multiply(b, float_a, out=res2)
|
|
160
|
+
with pytest.raises(TypeError):
|
|
161
|
+
# The promoter accepts this (maybe it should not), but the SFloat
|
|
162
|
+
# result cannot be cast to integer:
|
|
163
|
+
np.multiply(b, float_a, out=np.arange(3))
|
|
164
|
+
|
|
165
|
+
def test_basic_addition(self):
|
|
166
|
+
a = self._get_array(2.)
|
|
167
|
+
b = self._get_array(4.)
|
|
168
|
+
|
|
169
|
+
res = a + b
|
|
170
|
+
# addition uses the type promotion rules for the result:
|
|
171
|
+
assert res.dtype == np.result_type(a.dtype, b.dtype)
|
|
172
|
+
expected_view = (a.astype(res.dtype).view(np.float64) +
|
|
173
|
+
b.astype(res.dtype).view(np.float64))
|
|
174
|
+
assert_array_equal(res.view(np.float64), expected_view)
|
|
175
|
+
|
|
176
|
+
def test_addition_cast_safety(self):
|
|
177
|
+
"""The addition method is special for the scaled float, because it
|
|
178
|
+
includes the "cast" between different factors, thus cast-safety
|
|
179
|
+
is influenced by the implementation.
|
|
180
|
+
"""
|
|
181
|
+
a = self._get_array(2.)
|
|
182
|
+
b = self._get_array(-2.)
|
|
183
|
+
c = self._get_array(3.)
|
|
184
|
+
|
|
185
|
+
# sign change is "equiv":
|
|
186
|
+
np.add(a, b, casting="equiv")
|
|
187
|
+
with pytest.raises(TypeError):
|
|
188
|
+
np.add(a, b, casting="no")
|
|
189
|
+
|
|
190
|
+
# Different factor is "same_kind" (default) so check that "safe" fails
|
|
191
|
+
with pytest.raises(TypeError):
|
|
192
|
+
np.add(a, c, casting="safe")
|
|
193
|
+
|
|
194
|
+
# Check that casting the output fails also (done by the ufunc here)
|
|
195
|
+
with pytest.raises(TypeError):
|
|
196
|
+
np.add(a, a, out=c, casting="safe")
|
|
197
|
+
|
|
198
|
+
@pytest.mark.parametrize("ufunc",
|
|
199
|
+
[np.logical_and, np.logical_or, np.logical_xor])
|
|
200
|
+
def test_logical_ufuncs_casts_to_bool(self, ufunc):
|
|
201
|
+
a = self._get_array(2.)
|
|
202
|
+
a[0] = 0. # make sure first element is considered False.
|
|
203
|
+
|
|
204
|
+
float_equiv = a.astype(float)
|
|
205
|
+
expected = ufunc(float_equiv, float_equiv)
|
|
206
|
+
res = ufunc(a, a)
|
|
207
|
+
assert_array_equal(res, expected)
|
|
208
|
+
|
|
209
|
+
# also check that the same works for reductions:
|
|
210
|
+
expected = ufunc.reduce(float_equiv)
|
|
211
|
+
res = ufunc.reduce(a)
|
|
212
|
+
assert_array_equal(res, expected)
|
|
213
|
+
|
|
214
|
+
# The output casting does not match the bool, bool -> bool loop:
|
|
215
|
+
with pytest.raises(TypeError):
|
|
216
|
+
ufunc(a, a, out=np.empty(a.shape, dtype=int), casting="equiv")
|
|
217
|
+
|
|
218
|
+
def test_wrapped_and_wrapped_reductions(self):
|
|
219
|
+
a = self._get_array(2.)
|
|
220
|
+
float_equiv = a.astype(float)
|
|
221
|
+
|
|
222
|
+
expected = np.hypot(float_equiv, float_equiv)
|
|
223
|
+
res = np.hypot(a, a)
|
|
224
|
+
assert res.dtype == a.dtype
|
|
225
|
+
res_float = res.view(np.float64) * 2
|
|
226
|
+
assert_array_equal(res_float, expected)
|
|
227
|
+
|
|
228
|
+
# Also check reduction (keepdims, due to incorrect getitem)
|
|
229
|
+
res = np.hypot.reduce(a, keepdims=True)
|
|
230
|
+
assert res.dtype == a.dtype
|
|
231
|
+
expected = np.hypot.reduce(float_equiv, keepdims=True)
|
|
232
|
+
assert res.view(np.float64) * 2 == expected
|
|
233
|
+
|
|
234
|
+
def test_astype_class(self):
|
|
235
|
+
# Very simple test that we accept `.astype()` also on the class.
|
|
236
|
+
# ScaledFloat always returns the default descriptor, but it does
|
|
237
|
+
# check the relevant code paths.
|
|
238
|
+
arr = np.array([1., 2., 3.], dtype=object)
|
|
239
|
+
|
|
240
|
+
res = arr.astype(SF) # passing the class class
|
|
241
|
+
expected = arr.astype(SF(1.)) # above will have discovered 1. scaling
|
|
242
|
+
assert_array_equal(res.view(np.float64), expected.view(np.float64))
|
|
243
|
+
|
|
244
|
+
def test_creation_class(self):
|
|
245
|
+
# passing in a dtype class should return
|
|
246
|
+
# the default descriptor
|
|
247
|
+
arr1 = np.array([1., 2., 3.], dtype=SF)
|
|
248
|
+
assert arr1.dtype == SF(1.)
|
|
249
|
+
arr2 = np.array([1., 2., 3.], dtype=SF(1.))
|
|
250
|
+
assert_array_equal(arr1.view(np.float64), arr2.view(np.float64))
|
|
251
|
+
assert arr1.dtype == arr2.dtype
|
|
252
|
+
|
|
253
|
+
assert np.empty(3, dtype=SF).dtype == SF(1.)
|
|
254
|
+
assert np.empty_like(arr1, dtype=SF).dtype == SF(1.)
|
|
255
|
+
assert np.zeros(3, dtype=SF).dtype == SF(1.)
|
|
256
|
+
assert np.zeros_like(arr1, dtype=SF).dtype == SF(1.)
|
|
257
|
+
|
|
258
|
+
def test_np_save_load(self):
|
|
259
|
+
# this monkeypatch is needed because pickle
|
|
260
|
+
# uses the repr of a type to reconstruct it
|
|
261
|
+
np._ScaledFloatTestDType = SF
|
|
262
|
+
|
|
263
|
+
arr = np.array([1.0, 2.0, 3.0], dtype=SF(1.0))
|
|
264
|
+
|
|
265
|
+
# adapted from RoundtripTest.roundtrip in np.save tests
|
|
266
|
+
with NamedTemporaryFile("wb", delete=False, suffix=".npz") as f:
|
|
267
|
+
with pytest.warns(UserWarning) as record:
|
|
268
|
+
np.savez(f.name, arr)
|
|
269
|
+
|
|
270
|
+
assert len(record) == 1
|
|
271
|
+
|
|
272
|
+
with np.load(f.name, allow_pickle=True) as data:
|
|
273
|
+
larr = data["arr_0"]
|
|
274
|
+
assert_array_equal(arr.view(np.float64), larr.view(np.float64))
|
|
275
|
+
assert larr.dtype == arr.dtype == SF(1.0)
|
|
276
|
+
|
|
277
|
+
del np._ScaledFloatTestDType
|
|
278
|
+
|
|
279
|
+
def test_flatiter(self):
|
|
280
|
+
arr = np.array([1.0, 2.0, 3.0], dtype=SF(1.0))
|
|
281
|
+
|
|
282
|
+
for i, val in enumerate(arr.flat):
|
|
283
|
+
assert arr[i] == val
|
|
284
|
+
|
|
285
|
+
@pytest.mark.parametrize(
|
|
286
|
+
"index", [
|
|
287
|
+
[1, 2], ..., slice(None, 2, None),
|
|
288
|
+
np.array([True, True, False]), np.array([0, 1])
|
|
289
|
+
], ids=["int_list", "ellipsis", "slice", "bool_array", "int_array"])
|
|
290
|
+
def test_flatiter_index(self, index):
|
|
291
|
+
arr = np.array([1.0, 2.0, 3.0], dtype=SF(1.0))
|
|
292
|
+
np.testing.assert_array_equal(
|
|
293
|
+
arr[index].view(np.float64), arr.flat[index].view(np.float64))
|
|
294
|
+
|
|
295
|
+
arr2 = arr.copy()
|
|
296
|
+
arr[index] = 5.0
|
|
297
|
+
arr2.flat[index] = 5.0
|
|
298
|
+
np.testing.assert_array_equal(
|
|
299
|
+
arr.view(np.float64), arr2.view(np.float64))
|
|
300
|
+
|
|
301
|
+
def test_type_pickle():
|
|
302
|
+
# can't actually unpickle, but we can pickle (if in namespace)
|
|
303
|
+
import pickle
|
|
304
|
+
|
|
305
|
+
np._ScaledFloatTestDType = SF
|
|
306
|
+
|
|
307
|
+
s = pickle.dumps(SF)
|
|
308
|
+
res = pickle.loads(s)
|
|
309
|
+
assert res is SF
|
|
310
|
+
|
|
311
|
+
del np._ScaledFloatTestDType
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
def test_is_numeric():
|
|
315
|
+
assert SF._is_numeric
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import subprocess
|
|
3
|
+
import sys
|
|
4
|
+
import sysconfig
|
|
5
|
+
from datetime import datetime
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
|
|
9
|
+
import numpy as np
|
|
10
|
+
from numpy.testing import IS_EDITABLE, IS_WASM, assert_array_equal
|
|
11
|
+
|
|
12
|
+
# This import is copied from random.tests.test_extending
|
|
13
|
+
try:
|
|
14
|
+
import cython
|
|
15
|
+
from Cython.Compiler.Version import version as cython_version
|
|
16
|
+
except ImportError:
|
|
17
|
+
cython = None
|
|
18
|
+
else:
|
|
19
|
+
from numpy._utils import _pep440
|
|
20
|
+
|
|
21
|
+
# Note: keep in sync with the one in pyproject.toml
|
|
22
|
+
required_version = "3.0.6"
|
|
23
|
+
if _pep440.parse(cython_version) < _pep440.Version(required_version):
|
|
24
|
+
# too old or wrong cython, skip the test
|
|
25
|
+
cython = None
|
|
26
|
+
|
|
27
|
+
pytestmark = pytest.mark.skipif(cython is None, reason="requires cython")
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
if IS_EDITABLE:
|
|
31
|
+
pytest.skip(
|
|
32
|
+
"Editable install doesn't support tests with a compile step",
|
|
33
|
+
allow_module_level=True
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@pytest.fixture(scope='module')
|
|
38
|
+
def install_temp(tmpdir_factory):
|
|
39
|
+
# Based in part on test_cython from random.tests.test_extending
|
|
40
|
+
if IS_WASM:
|
|
41
|
+
pytest.skip("No subprocess")
|
|
42
|
+
|
|
43
|
+
srcdir = os.path.join(os.path.dirname(__file__), 'examples', 'cython')
|
|
44
|
+
build_dir = tmpdir_factory.mktemp("cython_test") / "build"
|
|
45
|
+
os.makedirs(build_dir, exist_ok=True)
|
|
46
|
+
# Ensure we use the correct Python interpreter even when `meson` is
|
|
47
|
+
# installed in a different Python environment (see gh-24956)
|
|
48
|
+
native_file = str(build_dir / 'interpreter-native-file.ini')
|
|
49
|
+
with open(native_file, 'w') as f:
|
|
50
|
+
f.write("[binaries]\n")
|
|
51
|
+
f.write(f"python = '{sys.executable}'\n")
|
|
52
|
+
f.write(f"python3 = '{sys.executable}'")
|
|
53
|
+
|
|
54
|
+
try:
|
|
55
|
+
subprocess.check_call(["meson", "--version"])
|
|
56
|
+
except FileNotFoundError:
|
|
57
|
+
pytest.skip("No usable 'meson' found")
|
|
58
|
+
if sysconfig.get_platform() == "win-arm64":
|
|
59
|
+
pytest.skip("Meson unable to find MSVC linker on win-arm64")
|
|
60
|
+
if sys.platform == "win32":
|
|
61
|
+
subprocess.check_call(["meson", "setup",
|
|
62
|
+
"--buildtype=release",
|
|
63
|
+
"--vsenv", "--native-file", native_file,
|
|
64
|
+
str(srcdir)],
|
|
65
|
+
cwd=build_dir,
|
|
66
|
+
)
|
|
67
|
+
else:
|
|
68
|
+
subprocess.check_call(["meson", "setup",
|
|
69
|
+
"--native-file", native_file, str(srcdir)],
|
|
70
|
+
cwd=build_dir
|
|
71
|
+
)
|
|
72
|
+
try:
|
|
73
|
+
subprocess.check_call(["meson", "compile", "-vv"], cwd=build_dir)
|
|
74
|
+
except subprocess.CalledProcessError:
|
|
75
|
+
print("----------------")
|
|
76
|
+
print("meson build failed when doing")
|
|
77
|
+
print(f"'meson setup --native-file {native_file} {srcdir}'")
|
|
78
|
+
print("'meson compile -vv'")
|
|
79
|
+
print(f"in {build_dir}")
|
|
80
|
+
print("----------------")
|
|
81
|
+
raise
|
|
82
|
+
|
|
83
|
+
sys.path.append(str(build_dir))
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def test_is_timedelta64_object(install_temp):
|
|
87
|
+
import checks
|
|
88
|
+
|
|
89
|
+
assert checks.is_td64(np.timedelta64(1234))
|
|
90
|
+
assert checks.is_td64(np.timedelta64(1234, "ns"))
|
|
91
|
+
assert checks.is_td64(np.timedelta64("NaT", "ns"))
|
|
92
|
+
|
|
93
|
+
assert not checks.is_td64(1)
|
|
94
|
+
assert not checks.is_td64(None)
|
|
95
|
+
assert not checks.is_td64("foo")
|
|
96
|
+
assert not checks.is_td64(np.datetime64("now", "s"))
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def test_is_datetime64_object(install_temp):
|
|
100
|
+
import checks
|
|
101
|
+
|
|
102
|
+
assert checks.is_dt64(np.datetime64(1234, "ns"))
|
|
103
|
+
assert checks.is_dt64(np.datetime64("NaT", "ns"))
|
|
104
|
+
|
|
105
|
+
assert not checks.is_dt64(1)
|
|
106
|
+
assert not checks.is_dt64(None)
|
|
107
|
+
assert not checks.is_dt64("foo")
|
|
108
|
+
assert not checks.is_dt64(np.timedelta64(1234))
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def test_get_datetime64_value(install_temp):
|
|
112
|
+
import checks
|
|
113
|
+
|
|
114
|
+
dt64 = np.datetime64("2016-01-01", "ns")
|
|
115
|
+
|
|
116
|
+
result = checks.get_dt64_value(dt64)
|
|
117
|
+
expected = dt64.view("i8")
|
|
118
|
+
|
|
119
|
+
assert result == expected
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def test_get_timedelta64_value(install_temp):
|
|
123
|
+
import checks
|
|
124
|
+
|
|
125
|
+
td64 = np.timedelta64(12345, "h")
|
|
126
|
+
|
|
127
|
+
result = checks.get_td64_value(td64)
|
|
128
|
+
expected = td64.view("i8")
|
|
129
|
+
|
|
130
|
+
assert result == expected
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def test_get_datetime64_unit(install_temp):
|
|
134
|
+
import checks
|
|
135
|
+
|
|
136
|
+
dt64 = np.datetime64("2016-01-01", "ns")
|
|
137
|
+
result = checks.get_dt64_unit(dt64)
|
|
138
|
+
expected = 10
|
|
139
|
+
assert result == expected
|
|
140
|
+
|
|
141
|
+
td64 = np.timedelta64(12345, "h")
|
|
142
|
+
result = checks.get_dt64_unit(td64)
|
|
143
|
+
expected = 5
|
|
144
|
+
assert result == expected
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def test_abstract_scalars(install_temp):
|
|
148
|
+
import checks
|
|
149
|
+
|
|
150
|
+
assert checks.is_integer(1)
|
|
151
|
+
assert checks.is_integer(np.int8(1))
|
|
152
|
+
assert checks.is_integer(np.uint64(1))
|
|
153
|
+
|
|
154
|
+
def test_default_int(install_temp):
|
|
155
|
+
import checks
|
|
156
|
+
|
|
157
|
+
assert checks.get_default_integer() is np.dtype(int)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def test_ravel_axis(install_temp):
|
|
161
|
+
import checks
|
|
162
|
+
|
|
163
|
+
assert checks.get_ravel_axis() == np.iinfo("intc").min
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def test_convert_datetime64_to_datetimestruct(install_temp):
|
|
167
|
+
# GH#21199
|
|
168
|
+
import checks
|
|
169
|
+
|
|
170
|
+
res = checks.convert_datetime64_to_datetimestruct()
|
|
171
|
+
|
|
172
|
+
exp = {
|
|
173
|
+
"year": 2022,
|
|
174
|
+
"month": 3,
|
|
175
|
+
"day": 15,
|
|
176
|
+
"hour": 20,
|
|
177
|
+
"min": 1,
|
|
178
|
+
"sec": 55,
|
|
179
|
+
"us": 260292,
|
|
180
|
+
"ps": 0,
|
|
181
|
+
"as": 0,
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
assert res == exp
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
class TestDatetimeStrings:
|
|
188
|
+
def test_make_iso_8601_datetime(self, install_temp):
|
|
189
|
+
# GH#21199
|
|
190
|
+
import checks
|
|
191
|
+
dt = datetime(2016, 6, 2, 10, 45, 19)
|
|
192
|
+
# uses NPY_FR_s
|
|
193
|
+
result = checks.make_iso_8601_datetime(dt)
|
|
194
|
+
assert result == b"2016-06-02T10:45:19"
|
|
195
|
+
|
|
196
|
+
def test_get_datetime_iso_8601_strlen(self, install_temp):
|
|
197
|
+
# GH#21199
|
|
198
|
+
import checks
|
|
199
|
+
# uses NPY_FR_ns
|
|
200
|
+
res = checks.get_datetime_iso_8601_strlen()
|
|
201
|
+
assert res == 48
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
@pytest.mark.parametrize(
|
|
205
|
+
"arrays",
|
|
206
|
+
[
|
|
207
|
+
[np.random.rand(2)],
|
|
208
|
+
[np.random.rand(2), np.random.rand(3, 1)],
|
|
209
|
+
[np.random.rand(2), np.random.rand(2, 3, 2), np.random.rand(1, 3, 2)],
|
|
210
|
+
[np.random.rand(2, 1)] * 4 + [np.random.rand(1, 1, 1)],
|
|
211
|
+
]
|
|
212
|
+
)
|
|
213
|
+
def test_multiiter_fields(install_temp, arrays):
|
|
214
|
+
import checks
|
|
215
|
+
bcast = np.broadcast(*arrays)
|
|
216
|
+
|
|
217
|
+
assert bcast.ndim == checks.get_multiiter_number_of_dims(bcast)
|
|
218
|
+
assert bcast.size == checks.get_multiiter_size(bcast)
|
|
219
|
+
assert bcast.numiter == checks.get_multiiter_num_of_iterators(bcast)
|
|
220
|
+
assert bcast.shape == checks.get_multiiter_shape(bcast)
|
|
221
|
+
assert bcast.index == checks.get_multiiter_current_index(bcast)
|
|
222
|
+
assert all(
|
|
223
|
+
x.base is y.base
|
|
224
|
+
for x, y in zip(bcast.iters, checks.get_multiiter_iters(bcast))
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
def test_dtype_flags(install_temp):
|
|
229
|
+
import checks
|
|
230
|
+
dtype = np.dtype("i,O") # dtype with somewhat interesting flags
|
|
231
|
+
assert dtype.flags == checks.get_dtype_flags(dtype)
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
def test_conv_intp(install_temp):
|
|
235
|
+
import checks
|
|
236
|
+
|
|
237
|
+
class myint:
|
|
238
|
+
def __int__(self):
|
|
239
|
+
return 3
|
|
240
|
+
|
|
241
|
+
# These conversion passes via `__int__`, not `__index__`:
|
|
242
|
+
assert checks.conv_intp(3.) == 3
|
|
243
|
+
assert checks.conv_intp(myint()) == 3
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
def test_npyiter_api(install_temp):
|
|
247
|
+
import checks
|
|
248
|
+
arr = np.random.rand(3, 2)
|
|
249
|
+
|
|
250
|
+
it = np.nditer(arr)
|
|
251
|
+
assert checks.get_npyiter_size(it) == it.itersize == np.prod(arr.shape)
|
|
252
|
+
assert checks.get_npyiter_ndim(it) == it.ndim == 1
|
|
253
|
+
assert checks.npyiter_has_index(it) == it.has_index == False
|
|
254
|
+
|
|
255
|
+
it = np.nditer(arr, flags=["c_index"])
|
|
256
|
+
assert checks.npyiter_has_index(it) == it.has_index == True
|
|
257
|
+
assert (
|
|
258
|
+
checks.npyiter_has_delayed_bufalloc(it)
|
|
259
|
+
== it.has_delayed_bufalloc
|
|
260
|
+
== False
|
|
261
|
+
)
|
|
262
|
+
|
|
263
|
+
it = np.nditer(arr, flags=["buffered", "delay_bufalloc"])
|
|
264
|
+
assert (
|
|
265
|
+
checks.npyiter_has_delayed_bufalloc(it)
|
|
266
|
+
== it.has_delayed_bufalloc
|
|
267
|
+
== True
|
|
268
|
+
)
|
|
269
|
+
|
|
270
|
+
it = np.nditer(arr, flags=["multi_index"])
|
|
271
|
+
assert checks.get_npyiter_size(it) == it.itersize == np.prod(arr.shape)
|
|
272
|
+
assert checks.npyiter_has_multi_index(it) == it.has_multi_index == True
|
|
273
|
+
assert checks.get_npyiter_ndim(it) == it.ndim == 2
|
|
274
|
+
assert checks.test_get_multi_index_iter_next(it, arr)
|
|
275
|
+
|
|
276
|
+
arr2 = np.random.rand(2, 1, 2)
|
|
277
|
+
it = np.nditer([arr, arr2])
|
|
278
|
+
assert checks.get_npyiter_nop(it) == it.nop == 2
|
|
279
|
+
assert checks.get_npyiter_size(it) == it.itersize == 12
|
|
280
|
+
assert checks.get_npyiter_ndim(it) == it.ndim == 3
|
|
281
|
+
assert all(
|
|
282
|
+
x is y for x, y in zip(checks.get_npyiter_operands(it), it.operands)
|
|
283
|
+
)
|
|
284
|
+
assert all(
|
|
285
|
+
np.allclose(x, y)
|
|
286
|
+
for x, y in zip(checks.get_npyiter_itviews(it), it.itviews)
|
|
287
|
+
)
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
def test_fillwithbytes(install_temp):
|
|
291
|
+
import checks
|
|
292
|
+
|
|
293
|
+
arr = checks.compile_fillwithbyte()
|
|
294
|
+
assert_array_equal(arr, np.ones((1, 2)))
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
def test_complex(install_temp):
|
|
298
|
+
from checks import inc2_cfloat_struct
|
|
299
|
+
|
|
300
|
+
arr = np.array([0, 10 + 10j], dtype="F")
|
|
301
|
+
inc2_cfloat_struct(arr)
|
|
302
|
+
assert arr[1] == (12 + 12j)
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
def test_npystring_pack(install_temp):
|
|
306
|
+
"""Check that the cython API can write to a vstring array."""
|
|
307
|
+
import checks
|
|
308
|
+
|
|
309
|
+
arr = np.array(['a', 'b', 'c'], dtype='T')
|
|
310
|
+
assert checks.npystring_pack(arr) == 0
|
|
311
|
+
|
|
312
|
+
# checks.npystring_pack writes to the beginning of the array
|
|
313
|
+
assert arr[0] == "Hello world"
|
|
314
|
+
|
|
315
|
+
def test_npystring_load(install_temp):
|
|
316
|
+
"""Check that the cython API can load strings from a vstring array."""
|
|
317
|
+
import checks
|
|
318
|
+
|
|
319
|
+
arr = np.array(['abcd', 'b', 'c'], dtype='T')
|
|
320
|
+
result = checks.npystring_load(arr)
|
|
321
|
+
assert result == 'abcd'
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
def test_npystring_multiple_allocators(install_temp):
|
|
325
|
+
"""Check that the cython API can acquire/release multiple vstring allocators."""
|
|
326
|
+
import checks
|
|
327
|
+
|
|
328
|
+
dt = np.dtypes.StringDType(na_object=None)
|
|
329
|
+
arr1 = np.array(['abcd', 'b', 'c'], dtype=dt)
|
|
330
|
+
arr2 = np.array(['a', 'b', 'c'], dtype=dt)
|
|
331
|
+
|
|
332
|
+
assert checks.npystring_pack_multiple(arr1, arr2) == 0
|
|
333
|
+
assert arr1[0] == "Hello world"
|
|
334
|
+
assert arr1[-1] is None
|
|
335
|
+
assert arr2[0] == "test this"
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
def test_npystring_allocators_other_dtype(install_temp):
|
|
339
|
+
"""Check that allocators for non-StringDType arrays is NULL."""
|
|
340
|
+
import checks
|
|
341
|
+
|
|
342
|
+
arr1 = np.array([1, 2, 3], dtype='i')
|
|
343
|
+
arr2 = np.array([4, 5, 6], dtype='i')
|
|
344
|
+
|
|
345
|
+
assert checks.npystring_allocators_other_types(arr1, arr2) == 0
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
@pytest.mark.skipif(sysconfig.get_platform() == 'win-arm64', reason='no checks module on win-arm64')
|
|
349
|
+
def test_npy_uintp_type_enum():
|
|
350
|
+
import checks
|
|
351
|
+
assert checks.check_npy_uintp_type_enum()
|