numpy 2.4.1__pp311-pypy311_pp73-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.
- numpy/__config__.py +170 -0
- numpy/__config__.pyi +108 -0
- numpy/__init__.cython-30.pxd +1242 -0
- numpy/__init__.pxd +1155 -0
- numpy/__init__.py +942 -0
- numpy/__init__.pyi +6202 -0
- numpy/_array_api_info.py +346 -0
- numpy/_array_api_info.pyi +206 -0
- numpy/_configtool.py +39 -0
- numpy/_configtool.pyi +1 -0
- numpy/_core/__init__.py +201 -0
- numpy/_core/__init__.pyi +666 -0
- numpy/_core/_add_newdocs.py +7151 -0
- numpy/_core/_add_newdocs.pyi +2 -0
- numpy/_core/_add_newdocs_scalars.py +381 -0
- numpy/_core/_add_newdocs_scalars.pyi +16 -0
- numpy/_core/_asarray.py +130 -0
- numpy/_core/_asarray.pyi +43 -0
- numpy/_core/_dtype.py +366 -0
- numpy/_core/_dtype.pyi +56 -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 +54 -0
- numpy/_core/_internal.py +968 -0
- numpy/_core/_internal.pyi +61 -0
- numpy/_core/_methods.py +252 -0
- numpy/_core/_methods.pyi +22 -0
- numpy/_core/_multiarray_tests.pypy311-pp73-darwin.so +0 -0
- numpy/_core/_multiarray_umath.pypy311-pp73-darwin.so +0 -0
- numpy/_core/_operand_flag_tests.pypy311-pp73-darwin.so +0 -0
- numpy/_core/_rational_tests.pypy311-pp73-darwin.so +0 -0
- numpy/_core/_simd.pyi +35 -0
- numpy/_core/_simd.pypy311-pp73-darwin.so +0 -0
- numpy/_core/_string_helpers.py +100 -0
- numpy/_core/_string_helpers.pyi +12 -0
- numpy/_core/_struct_ufunc_tests.pypy311-pp73-darwin.so +0 -0
- numpy/_core/_type_aliases.py +131 -0
- numpy/_core/_type_aliases.pyi +86 -0
- numpy/_core/_ufunc_config.py +515 -0
- numpy/_core/_ufunc_config.pyi +69 -0
- numpy/_core/_umath_tests.pyi +47 -0
- numpy/_core/_umath_tests.pypy311-pp73-darwin.so +0 -0
- numpy/_core/arrayprint.py +1779 -0
- numpy/_core/arrayprint.pyi +158 -0
- numpy/_core/cversions.py +13 -0
- numpy/_core/defchararray.py +1414 -0
- numpy/_core/defchararray.pyi +1150 -0
- numpy/_core/einsumfunc.py +1650 -0
- numpy/_core/einsumfunc.pyi +184 -0
- numpy/_core/fromnumeric.py +4233 -0
- numpy/_core/fromnumeric.pyi +1735 -0
- numpy/_core/function_base.py +547 -0
- numpy/_core/function_base.pyi +276 -0
- numpy/_core/getlimits.py +462 -0
- numpy/_core/getlimits.pyi +124 -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 +55 -0
- numpy/_core/include/numpy/__ufunc_api.h +349 -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 +198 -0
- numpy/_core/include/numpy/dtype_api.h +547 -0
- numpy/_core/include/numpy/halffloat.h +70 -0
- numpy/_core/include/numpy/ndarrayobject.h +304 -0
- numpy/_core/include/numpy/ndarraytypes.h +1982 -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 +989 -0
- numpy/_core/include/numpy/npy_cpu.h +126 -0
- numpy/_core/include/numpy/npy_endian.h +79 -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 +185 -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 +1740 -0
- numpy/_core/multiarray.pyi +1316 -0
- numpy/_core/numeric.py +2758 -0
- numpy/_core/numeric.pyi +1276 -0
- numpy/_core/numerictypes.py +633 -0
- numpy/_core/numerictypes.pyi +196 -0
- numpy/_core/overrides.py +188 -0
- numpy/_core/overrides.pyi +47 -0
- numpy/_core/printoptions.py +32 -0
- numpy/_core/printoptions.pyi +28 -0
- numpy/_core/records.py +1088 -0
- numpy/_core/records.pyi +340 -0
- numpy/_core/shape_base.py +996 -0
- numpy/_core/shape_base.pyi +182 -0
- numpy/_core/strings.py +1813 -0
- numpy/_core/strings.pyi +536 -0
- numpy/_core/tests/_locales.py +72 -0
- numpy/_core/tests/_natype.py +144 -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 +655 -0
- numpy/_core/tests/test_argparse.py +90 -0
- numpy/_core/tests/test_array_api_info.py +113 -0
- numpy/_core/tests/test_array_coercion.py +928 -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 +1324 -0
- numpy/_core/tests/test_casting_floatingpoint_errors.py +154 -0
- numpy/_core/tests/test_casting_unittests.py +955 -0
- numpy/_core/tests/test_conversion_utils.py +209 -0
- numpy/_core/tests/test_cpu_dispatcher.py +48 -0
- numpy/_core/tests/test_cpu_features.py +450 -0
- numpy/_core/tests/test_custom_dtypes.py +393 -0
- numpy/_core/tests/test_cython.py +352 -0
- numpy/_core/tests/test_datetime.py +2792 -0
- numpy/_core/tests/test_defchararray.py +858 -0
- numpy/_core/tests/test_deprecations.py +460 -0
- numpy/_core/tests/test_dlpack.py +190 -0
- numpy/_core/tests/test_dtype.py +2110 -0
- numpy/_core/tests/test_einsum.py +1351 -0
- numpy/_core/tests/test_errstate.py +131 -0
- numpy/_core/tests/test_extint128.py +217 -0
- numpy/_core/tests/test_finfo.py +86 -0
- numpy/_core/tests/test_function_base.py +504 -0
- numpy/_core/tests/test_getlimits.py +171 -0
- numpy/_core/tests/test_half.py +593 -0
- numpy/_core/tests/test_hashtable.py +36 -0
- numpy/_core/tests/test_indexerrors.py +122 -0
- numpy/_core/tests/test_indexing.py +1692 -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 +370 -0
- numpy/_core/tests/test_mem_overlap.py +933 -0
- numpy/_core/tests/test_mem_policy.py +453 -0
- numpy/_core/tests/test_memmap.py +248 -0
- numpy/_core/tests/test_multiarray.py +11008 -0
- numpy/_core/tests/test_multiprocessing.py +55 -0
- numpy/_core/tests/test_multithreading.py +377 -0
- numpy/_core/tests/test_nditer.py +3533 -0
- numpy/_core/tests/test_nep50_promotions.py +287 -0
- numpy/_core/tests/test_numeric.py +4295 -0
- numpy/_core/tests/test_numerictypes.py +650 -0
- numpy/_core/tests/test_overrides.py +800 -0
- numpy/_core/tests/test_print.py +202 -0
- numpy/_core/tests/test_protocols.py +46 -0
- numpy/_core/tests/test_records.py +544 -0
- numpy/_core/tests/test_regression.py +2677 -0
- numpy/_core/tests/test_scalar_ctors.py +203 -0
- numpy/_core/tests/test_scalar_methods.py +328 -0
- numpy/_core/tests/test_scalarbuffer.py +153 -0
- numpy/_core/tests/test_scalarinherit.py +105 -0
- numpy/_core/tests/test_scalarmath.py +1168 -0
- numpy/_core/tests/test_scalarprint.py +403 -0
- numpy/_core/tests/test_shape_base.py +904 -0
- numpy/_core/tests/test_simd.py +1345 -0
- numpy/_core/tests/test_simd_module.py +105 -0
- numpy/_core/tests/test_stringdtype.py +1855 -0
- numpy/_core/tests/test_strings.py +1523 -0
- numpy/_core/tests/test_ufunc.py +3405 -0
- numpy/_core/tests/test_umath.py +4962 -0
- numpy/_core/tests/test_umath_accuracy.py +132 -0
- numpy/_core/tests/test_umath_complex.py +631 -0
- numpy/_core/tests/test_unicode.py +369 -0
- numpy/_core/umath.py +60 -0
- numpy/_core/umath.pyi +232 -0
- numpy/_distributor_init.py +15 -0
- numpy/_distributor_init.pyi +1 -0
- numpy/_expired_attrs_2_0.py +78 -0
- numpy/_expired_attrs_2_0.pyi +61 -0
- numpy/_globals.py +121 -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 +6 -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 +173 -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 +39 -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 +975 -0
- numpy/_utils/__init__.py +95 -0
- numpy/_utils/__init__.pyi +28 -0
- numpy/_utils/_convertions.py +18 -0
- numpy/_utils/_convertions.pyi +4 -0
- numpy/_utils/_inspect.py +192 -0
- numpy/_utils/_inspect.pyi +70 -0
- numpy/_utils/_pep440.py +486 -0
- numpy/_utils/_pep440.pyi +118 -0
- numpy/char/__init__.py +2 -0
- numpy/char/__init__.pyi +111 -0
- numpy/conftest.py +248 -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 +15 -0
- numpy/ctypeslib/_ctypeslib.py +603 -0
- numpy/ctypeslib/_ctypeslib.pyi +236 -0
- numpy/distutils/__init__.py +64 -0
- numpy/distutils/__init__.pyi +4 -0
- numpy/distutils/__pycache__/conv_template.pypy311.pyc +0 -0
- numpy/distutils/_shell_utils.py +87 -0
- numpy/distutils/armccompiler.py +26 -0
- numpy/distutils/ccompiler.py +826 -0
- numpy/distutils/ccompiler_opt.py +2668 -0
- numpy/distutils/checks/cpu_asimd.c +27 -0
- numpy/distutils/checks/cpu_asimddp.c +16 -0
- numpy/distutils/checks/cpu_asimdfhm.c +19 -0
- numpy/distutils/checks/cpu_asimdhp.c +15 -0
- numpy/distutils/checks/cpu_avx.c +20 -0
- numpy/distutils/checks/cpu_avx2.c +20 -0
- numpy/distutils/checks/cpu_avx512_clx.c +22 -0
- numpy/distutils/checks/cpu_avx512_cnl.c +24 -0
- numpy/distutils/checks/cpu_avx512_icl.c +26 -0
- numpy/distutils/checks/cpu_avx512_knl.c +25 -0
- numpy/distutils/checks/cpu_avx512_knm.c +30 -0
- numpy/distutils/checks/cpu_avx512_skx.c +26 -0
- numpy/distutils/checks/cpu_avx512_spr.c +26 -0
- numpy/distutils/checks/cpu_avx512cd.c +20 -0
- numpy/distutils/checks/cpu_avx512f.c +20 -0
- numpy/distutils/checks/cpu_f16c.c +22 -0
- numpy/distutils/checks/cpu_fma3.c +22 -0
- numpy/distutils/checks/cpu_fma4.c +13 -0
- numpy/distutils/checks/cpu_lsx.c +11 -0
- numpy/distutils/checks/cpu_neon.c +19 -0
- numpy/distutils/checks/cpu_neon_fp16.c +11 -0
- numpy/distutils/checks/cpu_neon_vfpv4.c +21 -0
- numpy/distutils/checks/cpu_popcnt.c +32 -0
- numpy/distutils/checks/cpu_rvv.c +13 -0
- numpy/distutils/checks/cpu_sse.c +20 -0
- numpy/distutils/checks/cpu_sse2.c +20 -0
- numpy/distutils/checks/cpu_sse3.c +20 -0
- numpy/distutils/checks/cpu_sse41.c +20 -0
- numpy/distutils/checks/cpu_sse42.c +20 -0
- numpy/distutils/checks/cpu_ssse3.c +20 -0
- numpy/distutils/checks/cpu_sve.c +14 -0
- numpy/distutils/checks/cpu_vsx.c +21 -0
- numpy/distutils/checks/cpu_vsx2.c +13 -0
- numpy/distutils/checks/cpu_vsx3.c +13 -0
- numpy/distutils/checks/cpu_vsx4.c +14 -0
- numpy/distutils/checks/cpu_vx.c +16 -0
- numpy/distutils/checks/cpu_vxe.c +25 -0
- numpy/distutils/checks/cpu_vxe2.c +21 -0
- numpy/distutils/checks/cpu_xop.c +12 -0
- numpy/distutils/checks/extra_avx512bw_mask.c +18 -0
- numpy/distutils/checks/extra_avx512dq_mask.c +16 -0
- numpy/distutils/checks/extra_avx512f_reduce.c +41 -0
- numpy/distutils/checks/extra_vsx3_half_double.c +12 -0
- numpy/distutils/checks/extra_vsx4_mma.c +21 -0
- numpy/distutils/checks/extra_vsx_asm.c +36 -0
- numpy/distutils/checks/test_flags.c +1 -0
- numpy/distutils/command/__init__.py +41 -0
- numpy/distutils/command/autodist.py +148 -0
- numpy/distutils/command/bdist_rpm.py +22 -0
- numpy/distutils/command/build.py +62 -0
- numpy/distutils/command/build_clib.py +469 -0
- numpy/distutils/command/build_ext.py +752 -0
- numpy/distutils/command/build_py.py +31 -0
- numpy/distutils/command/build_scripts.py +49 -0
- numpy/distutils/command/build_src.py +773 -0
- numpy/distutils/command/config.py +516 -0
- numpy/distutils/command/config_compiler.py +126 -0
- numpy/distutils/command/develop.py +15 -0
- numpy/distutils/command/egg_info.py +25 -0
- numpy/distutils/command/install.py +79 -0
- numpy/distutils/command/install_clib.py +40 -0
- numpy/distutils/command/install_data.py +24 -0
- numpy/distutils/command/install_headers.py +25 -0
- numpy/distutils/command/sdist.py +27 -0
- numpy/distutils/conv_template.py +329 -0
- numpy/distutils/core.py +215 -0
- numpy/distutils/cpuinfo.py +683 -0
- numpy/distutils/exec_command.py +315 -0
- numpy/distutils/extension.py +101 -0
- numpy/distutils/fcompiler/__init__.py +1035 -0
- numpy/distutils/fcompiler/absoft.py +158 -0
- numpy/distutils/fcompiler/arm.py +71 -0
- numpy/distutils/fcompiler/compaq.py +120 -0
- numpy/distutils/fcompiler/environment.py +88 -0
- numpy/distutils/fcompiler/fujitsu.py +46 -0
- numpy/distutils/fcompiler/g95.py +42 -0
- numpy/distutils/fcompiler/gnu.py +555 -0
- numpy/distutils/fcompiler/hpux.py +41 -0
- numpy/distutils/fcompiler/ibm.py +97 -0
- numpy/distutils/fcompiler/intel.py +211 -0
- numpy/distutils/fcompiler/lahey.py +45 -0
- numpy/distutils/fcompiler/mips.py +54 -0
- numpy/distutils/fcompiler/nag.py +87 -0
- numpy/distutils/fcompiler/none.py +28 -0
- numpy/distutils/fcompiler/nv.py +53 -0
- numpy/distutils/fcompiler/pathf95.py +33 -0
- numpy/distutils/fcompiler/pg.py +128 -0
- numpy/distutils/fcompiler/sun.py +51 -0
- numpy/distutils/fcompiler/vast.py +52 -0
- numpy/distutils/from_template.py +261 -0
- numpy/distutils/fujitsuccompiler.py +28 -0
- numpy/distutils/intelccompiler.py +106 -0
- numpy/distutils/lib2def.py +116 -0
- numpy/distutils/line_endings.py +77 -0
- numpy/distutils/log.py +111 -0
- numpy/distutils/mingw/gfortran_vs2003_hack.c +6 -0
- numpy/distutils/mingw32ccompiler.py +620 -0
- numpy/distutils/misc_util.py +2484 -0
- numpy/distutils/msvc9compiler.py +63 -0
- numpy/distutils/msvccompiler.py +76 -0
- numpy/distutils/npy_pkg_config.py +441 -0
- numpy/distutils/numpy_distribution.py +17 -0
- numpy/distutils/pathccompiler.py +21 -0
- numpy/distutils/system_info.py +3267 -0
- numpy/distutils/tests/__init__.py +0 -0
- numpy/distutils/tests/test_build_ext.py +74 -0
- numpy/distutils/tests/test_ccompiler_opt.py +808 -0
- numpy/distutils/tests/test_ccompiler_opt_conf.py +176 -0
- numpy/distutils/tests/test_exec_command.py +217 -0
- numpy/distutils/tests/test_fcompiler.py +43 -0
- numpy/distutils/tests/test_fcompiler_gnu.py +55 -0
- numpy/distutils/tests/test_fcompiler_intel.py +30 -0
- numpy/distutils/tests/test_fcompiler_nagfor.py +22 -0
- numpy/distutils/tests/test_from_template.py +44 -0
- numpy/distutils/tests/test_log.py +34 -0
- numpy/distutils/tests/test_mingw32ccompiler.py +47 -0
- numpy/distutils/tests/test_misc_util.py +88 -0
- numpy/distutils/tests/test_npy_pkg_config.py +84 -0
- numpy/distutils/tests/test_shell_utils.py +79 -0
- numpy/distutils/tests/test_system_info.py +334 -0
- numpy/distutils/tests/utilities.py +90 -0
- numpy/distutils/unixccompiler.py +141 -0
- numpy/doc/ufuncs.py +138 -0
- numpy/dtypes.py +41 -0
- numpy/dtypes.pyi +630 -0
- numpy/exceptions.py +246 -0
- numpy/exceptions.pyi +27 -0
- numpy/f2py/__init__.py +86 -0
- numpy/f2py/__init__.pyi +5 -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 +244 -0
- numpy/f2py/_backends/_meson.pyi +62 -0
- numpy/f2py/_backends/meson.build.template +58 -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 +28 -0
- numpy/f2py/auxfuncs.py +1004 -0
- numpy/f2py/auxfuncs.pyi +262 -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 +266 -0
- numpy/f2py/diagnose.py +149 -0
- numpy/f2py/diagnose.pyi +1 -0
- numpy/f2py/f2py2e.py +788 -0
- numpy/f2py/f2py2e.pyi +74 -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 +41 -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 +1518 -0
- numpy/f2py/symbolic.pyi +219 -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 +66 -0
- numpy/f2py/tests/test_f2cmap.py +17 -0
- numpy/f2py/tests/test_f2py2e.py +983 -0
- numpy/f2py/tests/test_isoc.py +56 -0
- numpy/f2py/tests/test_kind.py +52 -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 +500 -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 +213 -0
- numpy/fft/__init__.pyi +38 -0
- numpy/fft/_helper.py +235 -0
- numpy/fft/_helper.pyi +44 -0
- numpy/fft/_pocketfft.py +1693 -0
- numpy/fft/_pocketfft.pyi +137 -0
- numpy/fft/_pocketfft_umath.pypy311-pp73-darwin.so +0 -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 +52 -0
- numpy/lib/_array_utils_impl.py +62 -0
- numpy/lib/_array_utils_impl.pyi +10 -0
- numpy/lib/_arraypad_impl.py +926 -0
- numpy/lib/_arraypad_impl.pyi +88 -0
- numpy/lib/_arraysetops_impl.py +1158 -0
- numpy/lib/_arraysetops_impl.pyi +462 -0
- numpy/lib/_arrayterator_impl.py +224 -0
- numpy/lib/_arrayterator_impl.pyi +45 -0
- numpy/lib/_datasource.py +700 -0
- numpy/lib/_datasource.pyi +30 -0
- numpy/lib/_format_impl.py +1036 -0
- numpy/lib/_format_impl.pyi +56 -0
- numpy/lib/_function_base_impl.py +5760 -0
- numpy/lib/_function_base_impl.pyi +2324 -0
- numpy/lib/_histograms_impl.py +1085 -0
- numpy/lib/_histograms_impl.pyi +40 -0
- numpy/lib/_index_tricks_impl.py +1048 -0
- numpy/lib/_index_tricks_impl.pyi +267 -0
- numpy/lib/_iotools.py +900 -0
- numpy/lib/_iotools.pyi +116 -0
- numpy/lib/_nanfunctions_impl.py +2006 -0
- numpy/lib/_nanfunctions_impl.pyi +48 -0
- numpy/lib/_npyio_impl.py +2583 -0
- numpy/lib/_npyio_impl.pyi +299 -0
- numpy/lib/_polynomial_impl.py +1465 -0
- numpy/lib/_polynomial_impl.pyi +338 -0
- numpy/lib/_scimath_impl.py +642 -0
- numpy/lib/_scimath_impl.pyi +93 -0
- numpy/lib/_shape_base_impl.py +1289 -0
- numpy/lib/_shape_base_impl.pyi +236 -0
- numpy/lib/_stride_tricks_impl.py +582 -0
- numpy/lib/_stride_tricks_impl.pyi +73 -0
- numpy/lib/_twodim_base_impl.py +1201 -0
- numpy/lib/_twodim_base_impl.pyi +408 -0
- numpy/lib/_type_check_impl.py +710 -0
- numpy/lib/_type_check_impl.pyi +348 -0
- numpy/lib/_ufunclike_impl.py +199 -0
- numpy/lib/_ufunclike_impl.pyi +60 -0
- numpy/lib/_user_array_impl.py +310 -0
- numpy/lib/_user_array_impl.pyi +226 -0
- numpy/lib/_utils_impl.py +784 -0
- numpy/lib/_utils_impl.pyi +22 -0
- numpy/lib/_version.py +153 -0
- numpy/lib/_version.pyi +17 -0
- numpy/lib/array_utils.py +7 -0
- numpy/lib/array_utils.pyi +6 -0
- numpy/lib/format.py +24 -0
- numpy/lib/format.pyi +24 -0
- numpy/lib/introspect.py +94 -0
- numpy/lib/introspect.pyi +3 -0
- numpy/lib/mixins.py +180 -0
- numpy/lib/mixins.pyi +78 -0
- numpy/lib/npyio.py +1 -0
- numpy/lib/npyio.pyi +5 -0
- numpy/lib/recfunctions.py +1681 -0
- numpy/lib/recfunctions.pyi +444 -0
- numpy/lib/scimath.py +13 -0
- numpy/lib/scimath.pyi +12 -0
- numpy/lib/stride_tricks.py +1 -0
- numpy/lib/stride_tricks.pyi +4 -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 +328 -0
- numpy/lib/tests/test__iotools.py +358 -0
- numpy/lib/tests/test__version.py +64 -0
- numpy/lib/tests/test_array_utils.py +32 -0
- numpy/lib/tests/test_arraypad.py +1427 -0
- numpy/lib/tests/test_arraysetops.py +1302 -0
- numpy/lib/tests/test_arrayterator.py +45 -0
- numpy/lib/tests/test_format.py +1054 -0
- numpy/lib/tests/test_function_base.py +4750 -0
- numpy/lib/tests/test_histograms.py +855 -0
- numpy/lib/tests/test_index_tricks.py +693 -0
- numpy/lib/tests/test_io.py +2857 -0
- numpy/lib/tests/test_loadtxt.py +1099 -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 +325 -0
- numpy/lib/tests/test_recfunctions.py +1042 -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 +655 -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 +95 -0
- numpy/linalg/__init__.pyi +71 -0
- numpy/linalg/_linalg.py +3657 -0
- numpy/linalg/_linalg.pyi +548 -0
- numpy/linalg/_umath_linalg.pyi +60 -0
- numpy/linalg/_umath_linalg.pypy311-pp73-darwin.so +0 -0
- numpy/linalg/lapack_lite.pyi +143 -0
- numpy/linalg/lapack_lite.pypy311-pp73-darwin.so +0 -0
- numpy/linalg/tests/__init__.py +0 -0
- numpy/linalg/tests/test_deprecations.py +21 -0
- numpy/linalg/tests/test_linalg.py +2442 -0
- numpy/linalg/tests/test_regression.py +182 -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 +8929 -0
- numpy/ma/core.pyi +3720 -0
- numpy/ma/extras.py +2266 -0
- numpy/ma/extras.pyi +297 -0
- numpy/ma/mrecords.py +762 -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 +6008 -0
- numpy/ma/tests/test_deprecations.py +65 -0
- numpy/ma/tests/test_extras.py +1945 -0
- numpy/ma/tests/test_mrecords.py +495 -0
- numpy/ma/tests/test_old_ma.py +939 -0
- numpy/ma/tests/test_regression.py +83 -0
- numpy/ma/tests/test_subclassing.py +469 -0
- numpy/ma/testutils.py +294 -0
- numpy/ma/testutils.pyi +69 -0
- numpy/matlib.py +380 -0
- numpy/matlib.pyi +580 -0
- numpy/matrixlib/__init__.py +12 -0
- numpy/matrixlib/__init__.pyi +3 -0
- numpy/matrixlib/defmatrix.py +1119 -0
- numpy/matrixlib/defmatrix.pyi +218 -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 +110 -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 +31 -0
- numpy/polynomial/_polybase.py +1191 -0
- numpy/polynomial/_polybase.pyi +262 -0
- numpy/polynomial/_polytypes.pyi +501 -0
- numpy/polynomial/chebyshev.py +2001 -0
- numpy/polynomial/chebyshev.pyi +180 -0
- numpy/polynomial/hermite.py +1738 -0
- numpy/polynomial/hermite.pyi +106 -0
- numpy/polynomial/hermite_e.py +1640 -0
- numpy/polynomial/hermite_e.pyi +106 -0
- numpy/polynomial/laguerre.py +1673 -0
- numpy/polynomial/laguerre.pyi +100 -0
- numpy/polynomial/legendre.py +1603 -0
- numpy/polynomial/legendre.pyi +100 -0
- numpy/polynomial/polynomial.py +1625 -0
- numpy/polynomial/polynomial.pyi +109 -0
- numpy/polynomial/polyutils.py +759 -0
- numpy/polynomial/polyutils.pyi +307 -0
- numpy/polynomial/tests/__init__.py +0 -0
- numpy/polynomial/tests/test_chebyshev.py +618 -0
- numpy/polynomial/tests/test_classes.py +613 -0
- numpy/polynomial/tests/test_hermite.py +553 -0
- numpy/polynomial/tests/test_hermite_e.py +554 -0
- numpy/polynomial/tests/test_laguerre.py +535 -0
- numpy/polynomial/tests/test_legendre.py +566 -0
- numpy/polynomial/tests/test_polynomial.py +691 -0
- numpy/polynomial/tests/test_polyutils.py +123 -0
- numpy/polynomial/tests/test_printing.py +557 -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.pxd +29 -0
- numpy/random/_bounded_integers.pyi +1 -0
- numpy/random/_bounded_integers.pypy311-pp73-darwin.so +0 -0
- numpy/random/_common.pxd +110 -0
- numpy/random/_common.pyi +16 -0
- numpy/random/_common.pypy311-pp73-darwin.so +0 -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 +117 -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.pyi +862 -0
- numpy/random/_generator.pypy311-pp73-darwin.so +0 -0
- numpy/random/_mt19937.pyi +27 -0
- numpy/random/_mt19937.pypy311-pp73-darwin.so +0 -0
- numpy/random/_pcg64.pyi +41 -0
- numpy/random/_pcg64.pypy311-pp73-darwin.so +0 -0
- numpy/random/_philox.pyi +36 -0
- numpy/random/_philox.pypy311-pp73-darwin.so +0 -0
- numpy/random/_pickle.py +88 -0
- numpy/random/_pickle.pyi +43 -0
- numpy/random/_sfc64.pyi +25 -0
- numpy/random/_sfc64.pypy311-pp73-darwin.so +0 -0
- numpy/random/bit_generator.pxd +40 -0
- numpy/random/bit_generator.pyi +123 -0
- numpy/random/bit_generator.pypy311-pp73-darwin.so +0 -0
- numpy/random/c_distributions.pxd +119 -0
- numpy/random/lib/libnpyrandom.a +0 -0
- numpy/random/mtrand.pyi +759 -0
- numpy/random/mtrand.pypy311-pp73-darwin.so +0 -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 +595 -0
- numpy/random/tests/test_extending.py +131 -0
- numpy/random/tests/test_generator_mt19937.py +2825 -0
- numpy/random/tests/test_generator_mt19937_regressions.py +221 -0
- numpy/random/tests/test_random.py +1724 -0
- numpy/random/tests/test_randomstate.py +2099 -0
- numpy/random/tests/test_randomstate_regression.py +213 -0
- numpy/random/tests/test_regression.py +175 -0
- numpy/random/tests/test_seed_sequence.py +79 -0
- numpy/random/tests/test_smoke.py +882 -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 +107 -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 +2830 -0
- numpy/testing/_private/utils.pyi +505 -0
- numpy/testing/overrides.py +84 -0
- numpy/testing/overrides.pyi +10 -0
- numpy/testing/print_coercion_tables.py +207 -0
- numpy/testing/print_coercion_tables.pyi +26 -0
- numpy/testing/tests/__init__.py +0 -0
- numpy/testing/tests/test_utils.py +2123 -0
- numpy/tests/__init__.py +0 -0
- numpy/tests/test__all__.py +10 -0
- numpy/tests/test_configtool.py +51 -0
- numpy/tests/test_ctypeslib.py +383 -0
- numpy/tests/test_lazyloading.py +42 -0
- numpy/tests/test_matlib.py +59 -0
- numpy/tests/test_numpy_config.py +47 -0
- numpy/tests/test_numpy_version.py +54 -0
- numpy/tests/test_public_api.py +807 -0
- numpy/tests/test_reloading.py +76 -0
- numpy/tests/test_scripts.py +48 -0
- numpy/tests/test_warnings.py +79 -0
- numpy/typing/__init__.py +233 -0
- numpy/typing/__init__.pyi +3 -0
- numpy/typing/mypy_plugin.py +200 -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 +15 -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 +63 -0
- numpy/typing/tests/data/fail/chararray.pyi +61 -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 +16 -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 +38 -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 +60 -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 +52 -0
- numpy/typing/tests/data/fail/ma.pyi +155 -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 +49 -0
- numpy/typing/tests/data/fail/nditer.pyi +8 -0
- numpy/typing/tests/data/fail/nested_sequence.pyi +17 -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 +86 -0
- numpy/typing/tests/data/fail/shape.pyi +7 -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 +39 -0
- numpy/typing/tests/data/fail/type_check.pyi +12 -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 +8 -0
- numpy/typing/tests/data/pass/arithmetic.py +614 -0
- numpy/typing/tests/data/pass/array_constructors.py +138 -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 +28 -0
- numpy/typing/tests/data/pass/bitwise_ops.py +131 -0
- numpy/typing/tests/data/pass/comparisons.py +316 -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 +26 -0
- numpy/typing/tests/data/pass/fromnumeric.py +272 -0
- numpy/typing/tests/data/pass/index_tricks.py +62 -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 +52 -0
- numpy/typing/tests/data/pass/ma.py +199 -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 +77 -0
- numpy/typing/tests/data/pass/ndarray_conversion.py +81 -0
- numpy/typing/tests/data/pass/ndarray_misc.py +199 -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 +90 -0
- numpy/typing/tests/data/pass/numerictypes.py +17 -0
- numpy/typing/tests/data/pass/random.py +1498 -0
- numpy/typing/tests/data/pass/recfunctions.py +164 -0
- numpy/typing/tests/data/pass/scalars.py +249 -0
- numpy/typing/tests/data/pass/shape.py +19 -0
- numpy/typing/tests/data/pass/simple.py +170 -0
- numpy/typing/tests/data/pass/ufunc_config.py +64 -0
- numpy/typing/tests/data/pass/ufunclike.py +52 -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 +719 -0
- numpy/typing/tests/data/reveal/array_api_info.pyi +70 -0
- numpy/typing/tests/data/reveal/array_constructors.pyi +277 -0
- numpy/typing/tests/data/reveal/arraypad.pyi +27 -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 +166 -0
- numpy/typing/tests/data/reveal/char.pyi +225 -0
- numpy/typing/tests/data/reveal/chararray.pyi +138 -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 +132 -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 +86 -0
- numpy/typing/tests/data/reveal/fromnumeric.pyi +347 -0
- numpy/typing/tests/data/reveal/getlimits.pyi +53 -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 +409 -0
- numpy/typing/tests/data/reveal/lib_polynomial.pyi +147 -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 +154 -0
- numpy/typing/tests/data/reveal/ma.pyi +1098 -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 +178 -0
- numpy/typing/tests/data/reveal/modules.pyi +51 -0
- numpy/typing/tests/data/reveal/multiarray.pyi +197 -0
- numpy/typing/tests/data/reveal/nbit_base_example.pyi +20 -0
- numpy/typing/tests/data/reveal/ndarray_assignability.pyi +82 -0
- numpy/typing/tests/data/reveal/ndarray_conversion.pyi +83 -0
- numpy/typing/tests/data/reveal/ndarray_misc.pyi +246 -0
- numpy/typing/tests/data/reveal/ndarray_shape_manipulation.pyi +47 -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 +170 -0
- numpy/typing/tests/data/reveal/numerictypes.pyi +16 -0
- numpy/typing/tests/data/reveal/polynomial_polybase.pyi +217 -0
- numpy/typing/tests/data/reveal/polynomial_polyutils.pyi +218 -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 +225 -0
- numpy/typing/tests/data/reveal/type_check.pyi +67 -0
- numpy/typing/tests/data/reveal/ufunc_config.pyi +29 -0
- numpy/typing/tests/data/reveal/ufunclike.pyi +31 -0
- numpy/typing/tests/data/reveal/ufuncs.pyi +142 -0
- numpy/typing/tests/data/reveal/warnings_and_errors.pyi +11 -0
- numpy/typing/tests/test_isfile.py +38 -0
- numpy/typing/tests/test_runtime.py +110 -0
- numpy/typing/tests/test_typing.py +205 -0
- numpy/version.py +11 -0
- numpy/version.pyi +9 -0
- numpy-2.4.1.dist-info/METADATA +139 -0
- numpy-2.4.1.dist-info/RECORD +1039 -0
- numpy-2.4.1.dist-info/WHEEL +6 -0
- numpy-2.4.1.dist-info/entry_points.txt +13 -0
- numpy-2.4.1.dist-info/licenses/LICENSE.txt +935 -0
- numpy-2.4.1.dist-info/licenses/numpy/_core/include/numpy/libdivide/LICENSE.txt +21 -0
- numpy-2.4.1.dist-info/licenses/numpy/_core/src/common/pythoncapi-compat/COPYING +14 -0
- numpy-2.4.1.dist-info/licenses/numpy/_core/src/highway/LICENSE +371 -0
- numpy-2.4.1.dist-info/licenses/numpy/_core/src/multiarray/dragon4_LICENSE.txt +27 -0
- numpy-2.4.1.dist-info/licenses/numpy/_core/src/npysort/x86-simd-sort/LICENSE.md +28 -0
- numpy-2.4.1.dist-info/licenses/numpy/_core/src/umath/svml/LICENSE +30 -0
- numpy-2.4.1.dist-info/licenses/numpy/fft/pocketfft/LICENSE.md +25 -0
- numpy-2.4.1.dist-info/licenses/numpy/linalg/lapack_lite/LICENSE.txt +48 -0
- numpy-2.4.1.dist-info/licenses/numpy/ma/LICENSE +24 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/LICENSE.md +71 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/src/distributions/LICENSE.md +61 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/src/mt19937/LICENSE.md +61 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/src/pcg64/LICENSE.md +22 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/src/philox/LICENSE.md +31 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/src/sfc64/LICENSE.md +27 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/src/splitmix64/LICENSE.md +9 -0
numpy/_core/_internal.py
ADDED
|
@@ -0,0 +1,968 @@
|
|
|
1
|
+
"""
|
|
2
|
+
A place for internal code
|
|
3
|
+
|
|
4
|
+
Some things are more easily handled Python.
|
|
5
|
+
|
|
6
|
+
"""
|
|
7
|
+
import ast
|
|
8
|
+
import math
|
|
9
|
+
import re
|
|
10
|
+
import sys
|
|
11
|
+
import warnings
|
|
12
|
+
|
|
13
|
+
from numpy import _NoValue
|
|
14
|
+
from numpy.exceptions import DTypePromotionError
|
|
15
|
+
|
|
16
|
+
from .multiarray import StringDType, array, dtype, promote_types
|
|
17
|
+
|
|
18
|
+
try:
|
|
19
|
+
import ctypes
|
|
20
|
+
except ImportError:
|
|
21
|
+
ctypes = None
|
|
22
|
+
|
|
23
|
+
IS_PYPY = sys.implementation.name == 'pypy'
|
|
24
|
+
|
|
25
|
+
if sys.byteorder == 'little':
|
|
26
|
+
_nbo = '<'
|
|
27
|
+
else:
|
|
28
|
+
_nbo = '>'
|
|
29
|
+
|
|
30
|
+
def _makenames_list(adict, align):
|
|
31
|
+
allfields = []
|
|
32
|
+
|
|
33
|
+
for fname, obj in adict.items():
|
|
34
|
+
n = len(obj)
|
|
35
|
+
if not isinstance(obj, tuple) or n not in (2, 3):
|
|
36
|
+
raise ValueError("entry not a 2- or 3- tuple")
|
|
37
|
+
if n > 2 and obj[2] == fname:
|
|
38
|
+
continue
|
|
39
|
+
num = int(obj[1])
|
|
40
|
+
if num < 0:
|
|
41
|
+
raise ValueError("invalid offset.")
|
|
42
|
+
format = dtype(obj[0], align=align)
|
|
43
|
+
if n > 2:
|
|
44
|
+
title = obj[2]
|
|
45
|
+
else:
|
|
46
|
+
title = None
|
|
47
|
+
allfields.append((fname, format, num, title))
|
|
48
|
+
# sort by offsets
|
|
49
|
+
allfields.sort(key=lambda x: x[2])
|
|
50
|
+
names = [x[0] for x in allfields]
|
|
51
|
+
formats = [x[1] for x in allfields]
|
|
52
|
+
offsets = [x[2] for x in allfields]
|
|
53
|
+
titles = [x[3] for x in allfields]
|
|
54
|
+
|
|
55
|
+
return names, formats, offsets, titles
|
|
56
|
+
|
|
57
|
+
# Called in PyArray_DescrConverter function when
|
|
58
|
+
# a dictionary without "names" and "formats"
|
|
59
|
+
# fields is used as a data-type descriptor.
|
|
60
|
+
def _usefields(adict, align):
|
|
61
|
+
try:
|
|
62
|
+
names = adict[-1]
|
|
63
|
+
except KeyError:
|
|
64
|
+
names = None
|
|
65
|
+
if names is None:
|
|
66
|
+
names, formats, offsets, titles = _makenames_list(adict, align)
|
|
67
|
+
else:
|
|
68
|
+
formats = []
|
|
69
|
+
offsets = []
|
|
70
|
+
titles = []
|
|
71
|
+
for name in names:
|
|
72
|
+
res = adict[name]
|
|
73
|
+
formats.append(res[0])
|
|
74
|
+
offsets.append(res[1])
|
|
75
|
+
if len(res) > 2:
|
|
76
|
+
titles.append(res[2])
|
|
77
|
+
else:
|
|
78
|
+
titles.append(None)
|
|
79
|
+
|
|
80
|
+
return dtype({"names": names,
|
|
81
|
+
"formats": formats,
|
|
82
|
+
"offsets": offsets,
|
|
83
|
+
"titles": titles}, align)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
# construct an array_protocol descriptor list
|
|
87
|
+
# from the fields attribute of a descriptor
|
|
88
|
+
# This calls itself recursively but should eventually hit
|
|
89
|
+
# a descriptor that has no fields and then return
|
|
90
|
+
# a simple typestring
|
|
91
|
+
|
|
92
|
+
def _array_descr(descriptor):
|
|
93
|
+
fields = descriptor.fields
|
|
94
|
+
if fields is None:
|
|
95
|
+
subdtype = descriptor.subdtype
|
|
96
|
+
if subdtype is None:
|
|
97
|
+
if descriptor.metadata is None:
|
|
98
|
+
return descriptor.str
|
|
99
|
+
else:
|
|
100
|
+
new = descriptor.metadata.copy()
|
|
101
|
+
if new:
|
|
102
|
+
return (descriptor.str, new)
|
|
103
|
+
else:
|
|
104
|
+
return descriptor.str
|
|
105
|
+
else:
|
|
106
|
+
return (_array_descr(subdtype[0]), subdtype[1])
|
|
107
|
+
|
|
108
|
+
names = descriptor.names
|
|
109
|
+
ordered_fields = [fields[x] + (x,) for x in names]
|
|
110
|
+
result = []
|
|
111
|
+
offset = 0
|
|
112
|
+
for field in ordered_fields:
|
|
113
|
+
if field[1] > offset:
|
|
114
|
+
num = field[1] - offset
|
|
115
|
+
result.append(('', f'|V{num}'))
|
|
116
|
+
offset += num
|
|
117
|
+
elif field[1] < offset:
|
|
118
|
+
raise ValueError(
|
|
119
|
+
"dtype.descr is not defined for types with overlapping or "
|
|
120
|
+
"out-of-order fields")
|
|
121
|
+
if len(field) > 3:
|
|
122
|
+
name = (field[2], field[3])
|
|
123
|
+
else:
|
|
124
|
+
name = field[2]
|
|
125
|
+
if field[0].subdtype:
|
|
126
|
+
tup = (name, _array_descr(field[0].subdtype[0]),
|
|
127
|
+
field[0].subdtype[1])
|
|
128
|
+
else:
|
|
129
|
+
tup = (name, _array_descr(field[0]))
|
|
130
|
+
offset += field[0].itemsize
|
|
131
|
+
result.append(tup)
|
|
132
|
+
|
|
133
|
+
if descriptor.itemsize > offset:
|
|
134
|
+
num = descriptor.itemsize - offset
|
|
135
|
+
result.append(('', f'|V{num}'))
|
|
136
|
+
|
|
137
|
+
return result
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
# format_re was originally from numarray by J. Todd Miller
|
|
141
|
+
|
|
142
|
+
format_re = re.compile(r'(?P<order1>[<>|=]?)'
|
|
143
|
+
r'(?P<repeats> *[(]?[ ,0-9]*[)]? *)'
|
|
144
|
+
r'(?P<order2>[<>|=]?)'
|
|
145
|
+
r'(?P<dtype>[A-Za-z0-9.?]*(?:\[[a-zA-Z0-9,.]+\])?)')
|
|
146
|
+
sep_re = re.compile(r'\s*,\s*')
|
|
147
|
+
space_re = re.compile(r'\s+$')
|
|
148
|
+
|
|
149
|
+
# astr is a string (perhaps comma separated)
|
|
150
|
+
|
|
151
|
+
_convorder = {'=': _nbo}
|
|
152
|
+
|
|
153
|
+
def _commastring(astr):
|
|
154
|
+
startindex = 0
|
|
155
|
+
result = []
|
|
156
|
+
islist = False
|
|
157
|
+
while startindex < len(astr):
|
|
158
|
+
mo = format_re.match(astr, pos=startindex)
|
|
159
|
+
try:
|
|
160
|
+
(order1, repeats, order2, dtype) = mo.groups()
|
|
161
|
+
except (TypeError, AttributeError):
|
|
162
|
+
raise ValueError(
|
|
163
|
+
f'format number {len(result) + 1} of "{astr}" is not recognized'
|
|
164
|
+
) from None
|
|
165
|
+
startindex = mo.end()
|
|
166
|
+
# Separator or ending padding
|
|
167
|
+
if startindex < len(astr):
|
|
168
|
+
if space_re.match(astr, pos=startindex):
|
|
169
|
+
startindex = len(astr)
|
|
170
|
+
else:
|
|
171
|
+
mo = sep_re.match(astr, pos=startindex)
|
|
172
|
+
if not mo:
|
|
173
|
+
raise ValueError(
|
|
174
|
+
'format number %d of "%s" is not recognized' %
|
|
175
|
+
(len(result) + 1, astr))
|
|
176
|
+
startindex = mo.end()
|
|
177
|
+
islist = True
|
|
178
|
+
|
|
179
|
+
if order2 == '':
|
|
180
|
+
order = order1
|
|
181
|
+
elif order1 == '':
|
|
182
|
+
order = order2
|
|
183
|
+
else:
|
|
184
|
+
order1 = _convorder.get(order1, order1)
|
|
185
|
+
order2 = _convorder.get(order2, order2)
|
|
186
|
+
if (order1 != order2):
|
|
187
|
+
raise ValueError(
|
|
188
|
+
f'inconsistent byte-order specification {order1} and {order2}')
|
|
189
|
+
order = order1
|
|
190
|
+
|
|
191
|
+
if order in ('|', '=', _nbo):
|
|
192
|
+
order = ''
|
|
193
|
+
dtype = order + dtype
|
|
194
|
+
if repeats == '':
|
|
195
|
+
newitem = dtype
|
|
196
|
+
else:
|
|
197
|
+
if (repeats[0] == "(" and repeats[-1] == ")"
|
|
198
|
+
and repeats[1:-1].strip() != ""
|
|
199
|
+
and "," not in repeats):
|
|
200
|
+
warnings.warn(
|
|
201
|
+
'Passing in a parenthesized single number for repeats '
|
|
202
|
+
'is deprecated; pass either a single number or indicate '
|
|
203
|
+
'a tuple with a comma, like "(2,)".', DeprecationWarning,
|
|
204
|
+
stacklevel=2)
|
|
205
|
+
newitem = (dtype, ast.literal_eval(repeats))
|
|
206
|
+
|
|
207
|
+
result.append(newitem)
|
|
208
|
+
|
|
209
|
+
return result if islist else result[0]
|
|
210
|
+
|
|
211
|
+
class dummy_ctype:
|
|
212
|
+
|
|
213
|
+
def __init__(self, cls):
|
|
214
|
+
self._cls = cls
|
|
215
|
+
|
|
216
|
+
def __mul__(self, other):
|
|
217
|
+
return self
|
|
218
|
+
|
|
219
|
+
def __call__(self, *other):
|
|
220
|
+
return self._cls(other)
|
|
221
|
+
|
|
222
|
+
def __eq__(self, other):
|
|
223
|
+
return self._cls == other._cls
|
|
224
|
+
|
|
225
|
+
def __ne__(self, other):
|
|
226
|
+
return self._cls != other._cls
|
|
227
|
+
|
|
228
|
+
def _getintp_ctype():
|
|
229
|
+
val = _getintp_ctype.cache
|
|
230
|
+
if val is not None:
|
|
231
|
+
return val
|
|
232
|
+
if ctypes is None:
|
|
233
|
+
import numpy as np
|
|
234
|
+
val = dummy_ctype(np.intp)
|
|
235
|
+
else:
|
|
236
|
+
char = dtype('n').char
|
|
237
|
+
if char == 'i':
|
|
238
|
+
val = ctypes.c_int
|
|
239
|
+
elif char == 'l':
|
|
240
|
+
val = ctypes.c_long
|
|
241
|
+
elif char == 'q':
|
|
242
|
+
val = ctypes.c_longlong
|
|
243
|
+
else:
|
|
244
|
+
val = ctypes.c_long
|
|
245
|
+
_getintp_ctype.cache = val
|
|
246
|
+
return val
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
_getintp_ctype.cache = None
|
|
250
|
+
|
|
251
|
+
# Used for .ctypes attribute of ndarray
|
|
252
|
+
|
|
253
|
+
class _missing_ctypes:
|
|
254
|
+
def cast(self, num, obj):
|
|
255
|
+
return num.value
|
|
256
|
+
|
|
257
|
+
class c_void_p:
|
|
258
|
+
def __init__(self, ptr):
|
|
259
|
+
self.value = ptr
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
class _ctypes:
|
|
263
|
+
def __init__(self, array, ptr=None):
|
|
264
|
+
self._arr = array
|
|
265
|
+
|
|
266
|
+
if ctypes:
|
|
267
|
+
self._ctypes = ctypes
|
|
268
|
+
self._data = self._ctypes.c_void_p(ptr)
|
|
269
|
+
else:
|
|
270
|
+
# fake a pointer-like object that holds onto the reference
|
|
271
|
+
self._ctypes = _missing_ctypes()
|
|
272
|
+
self._data = self._ctypes.c_void_p(ptr)
|
|
273
|
+
self._data._objects = array
|
|
274
|
+
|
|
275
|
+
if self._arr.ndim == 0:
|
|
276
|
+
self._zerod = True
|
|
277
|
+
else:
|
|
278
|
+
self._zerod = False
|
|
279
|
+
|
|
280
|
+
def data_as(self, obj):
|
|
281
|
+
"""
|
|
282
|
+
Return the data pointer cast to a particular c-types object.
|
|
283
|
+
For example, calling ``self._as_parameter_`` is equivalent to
|
|
284
|
+
``self.data_as(ctypes.c_void_p)``. Perhaps you want to use
|
|
285
|
+
the data as a pointer to a ctypes array of floating-point data:
|
|
286
|
+
``self.data_as(ctypes.POINTER(ctypes.c_double))``.
|
|
287
|
+
|
|
288
|
+
The returned pointer will keep a reference to the array.
|
|
289
|
+
"""
|
|
290
|
+
# _ctypes.cast function causes a circular reference of self._data in
|
|
291
|
+
# self._data._objects. Attributes of self._data cannot be released
|
|
292
|
+
# until gc.collect is called. Make a copy of the pointer first then
|
|
293
|
+
# let it hold the array reference. This is a workaround to circumvent
|
|
294
|
+
# the CPython bug https://bugs.python.org/issue12836.
|
|
295
|
+
ptr = self._ctypes.cast(self._data, obj)
|
|
296
|
+
ptr._arr = self._arr
|
|
297
|
+
return ptr
|
|
298
|
+
|
|
299
|
+
def shape_as(self, obj):
|
|
300
|
+
"""
|
|
301
|
+
Return the shape tuple as an array of some other c-types
|
|
302
|
+
type. For example: ``self.shape_as(ctypes.c_short)``.
|
|
303
|
+
"""
|
|
304
|
+
if self._zerod:
|
|
305
|
+
return None
|
|
306
|
+
return (obj * self._arr.ndim)(*self._arr.shape)
|
|
307
|
+
|
|
308
|
+
def strides_as(self, obj):
|
|
309
|
+
"""
|
|
310
|
+
Return the strides tuple as an array of some other
|
|
311
|
+
c-types type. For example: ``self.strides_as(ctypes.c_longlong)``.
|
|
312
|
+
"""
|
|
313
|
+
if self._zerod:
|
|
314
|
+
return None
|
|
315
|
+
return (obj * self._arr.ndim)(*self._arr.strides)
|
|
316
|
+
|
|
317
|
+
@property
|
|
318
|
+
def data(self):
|
|
319
|
+
"""
|
|
320
|
+
A pointer to the memory area of the array as a Python integer.
|
|
321
|
+
This memory area may contain data that is not aligned, or not in
|
|
322
|
+
correct byte-order. The memory area may not even be writeable.
|
|
323
|
+
The array flags and data-type of this array should be respected
|
|
324
|
+
when passing this attribute to arbitrary C-code to avoid trouble
|
|
325
|
+
that can include Python crashing. User Beware! The value of this
|
|
326
|
+
attribute is exactly the same as:
|
|
327
|
+
``self._array_interface_['data'][0]``.
|
|
328
|
+
|
|
329
|
+
Note that unlike ``data_as``, a reference won't be kept to the array:
|
|
330
|
+
code like ``ctypes.c_void_p((a + b).ctypes.data)`` will result in a
|
|
331
|
+
pointer to a deallocated array, and should be spelt
|
|
332
|
+
``(a + b).ctypes.data_as(ctypes.c_void_p)``
|
|
333
|
+
"""
|
|
334
|
+
return self._data.value
|
|
335
|
+
|
|
336
|
+
@property
|
|
337
|
+
def shape(self):
|
|
338
|
+
"""
|
|
339
|
+
(c_intp*self.ndim): A ctypes array of length self.ndim where
|
|
340
|
+
the basetype is the C-integer corresponding to ``dtype('p')`` on this
|
|
341
|
+
platform (see `~numpy.ctypeslib.c_intp`). This base-type could be
|
|
342
|
+
`ctypes.c_int`, `ctypes.c_long`, or `ctypes.c_longlong` depending on
|
|
343
|
+
the platform. The ctypes array contains the shape of
|
|
344
|
+
the underlying array.
|
|
345
|
+
"""
|
|
346
|
+
return self.shape_as(_getintp_ctype())
|
|
347
|
+
|
|
348
|
+
@property
|
|
349
|
+
def strides(self):
|
|
350
|
+
"""
|
|
351
|
+
(c_intp*self.ndim): A ctypes array of length self.ndim where
|
|
352
|
+
the basetype is the same as for the shape attribute. This ctypes
|
|
353
|
+
array contains the strides information from the underlying array.
|
|
354
|
+
This strides information is important for showing how many bytes
|
|
355
|
+
must be jumped to get to the next element in the array.
|
|
356
|
+
"""
|
|
357
|
+
return self.strides_as(_getintp_ctype())
|
|
358
|
+
|
|
359
|
+
@property
|
|
360
|
+
def _as_parameter_(self):
|
|
361
|
+
"""
|
|
362
|
+
Overrides the ctypes semi-magic method
|
|
363
|
+
|
|
364
|
+
Enables `c_func(some_array.ctypes)`
|
|
365
|
+
"""
|
|
366
|
+
return self.data_as(ctypes.c_void_p)
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
def _newnames(datatype, order):
|
|
370
|
+
"""
|
|
371
|
+
Given a datatype and an order object, return a new names tuple, with the
|
|
372
|
+
order indicated
|
|
373
|
+
"""
|
|
374
|
+
oldnames = datatype.names
|
|
375
|
+
nameslist = list(oldnames)
|
|
376
|
+
if isinstance(order, str):
|
|
377
|
+
order = [order]
|
|
378
|
+
seen = set()
|
|
379
|
+
if isinstance(order, (list, tuple)):
|
|
380
|
+
for name in order:
|
|
381
|
+
try:
|
|
382
|
+
nameslist.remove(name)
|
|
383
|
+
except ValueError:
|
|
384
|
+
if name in seen:
|
|
385
|
+
raise ValueError(f"duplicate field name: {name}") from None
|
|
386
|
+
else:
|
|
387
|
+
raise ValueError(f"unknown field name: {name}") from None
|
|
388
|
+
seen.add(name)
|
|
389
|
+
return tuple(list(order) + nameslist)
|
|
390
|
+
raise ValueError(f"unsupported order value: {order}")
|
|
391
|
+
|
|
392
|
+
def _copy_fields(ary):
|
|
393
|
+
"""Return copy of structured array with padding between fields removed.
|
|
394
|
+
|
|
395
|
+
Parameters
|
|
396
|
+
----------
|
|
397
|
+
ary : ndarray
|
|
398
|
+
Structured array from which to remove padding bytes
|
|
399
|
+
|
|
400
|
+
Returns
|
|
401
|
+
-------
|
|
402
|
+
ary_copy : ndarray
|
|
403
|
+
Copy of ary with padding bytes removed
|
|
404
|
+
"""
|
|
405
|
+
dt = ary.dtype
|
|
406
|
+
copy_dtype = {'names': dt.names,
|
|
407
|
+
'formats': [dt.fields[name][0] for name in dt.names]}
|
|
408
|
+
return array(ary, dtype=copy_dtype, copy=True)
|
|
409
|
+
|
|
410
|
+
def _promote_fields(dt1, dt2):
|
|
411
|
+
""" Perform type promotion for two structured dtypes.
|
|
412
|
+
|
|
413
|
+
Parameters
|
|
414
|
+
----------
|
|
415
|
+
dt1 : structured dtype
|
|
416
|
+
First dtype.
|
|
417
|
+
dt2 : structured dtype
|
|
418
|
+
Second dtype.
|
|
419
|
+
|
|
420
|
+
Returns
|
|
421
|
+
-------
|
|
422
|
+
out : dtype
|
|
423
|
+
The promoted dtype
|
|
424
|
+
|
|
425
|
+
Notes
|
|
426
|
+
-----
|
|
427
|
+
If one of the inputs is aligned, the result will be. The titles of
|
|
428
|
+
both descriptors must match (point to the same field).
|
|
429
|
+
"""
|
|
430
|
+
# Both must be structured and have the same names in the same order
|
|
431
|
+
if (dt1.names is None or dt2.names is None) or dt1.names != dt2.names:
|
|
432
|
+
raise DTypePromotionError(
|
|
433
|
+
f"field names `{dt1.names}` and `{dt2.names}` mismatch.")
|
|
434
|
+
|
|
435
|
+
# if both are identical, we can (maybe!) just return the same dtype.
|
|
436
|
+
identical = dt1 is dt2
|
|
437
|
+
new_fields = []
|
|
438
|
+
for name in dt1.names:
|
|
439
|
+
field1 = dt1.fields[name]
|
|
440
|
+
field2 = dt2.fields[name]
|
|
441
|
+
new_descr = promote_types(field1[0], field2[0])
|
|
442
|
+
identical = identical and new_descr is field1[0]
|
|
443
|
+
|
|
444
|
+
# Check that the titles match (if given):
|
|
445
|
+
if field1[2:] != field2[2:]:
|
|
446
|
+
raise DTypePromotionError(
|
|
447
|
+
f"field titles of field '{name}' mismatch")
|
|
448
|
+
if len(field1) == 2:
|
|
449
|
+
new_fields.append((name, new_descr))
|
|
450
|
+
else:
|
|
451
|
+
new_fields.append(((field1[2], name), new_descr))
|
|
452
|
+
|
|
453
|
+
res = dtype(new_fields, align=dt1.isalignedstruct or dt2.isalignedstruct)
|
|
454
|
+
|
|
455
|
+
# Might as well preserve identity (and metadata) if the dtype is identical
|
|
456
|
+
# and the itemsize, offsets are also unmodified. This could probably be
|
|
457
|
+
# sped up, but also probably just be removed entirely.
|
|
458
|
+
if identical and res.itemsize == dt1.itemsize:
|
|
459
|
+
for name in dt1.names:
|
|
460
|
+
if dt1.fields[name][1] != res.fields[name][1]:
|
|
461
|
+
return res # the dtype changed.
|
|
462
|
+
return dt1
|
|
463
|
+
|
|
464
|
+
return res
|
|
465
|
+
|
|
466
|
+
|
|
467
|
+
def _getfield_is_safe(oldtype, newtype, offset):
|
|
468
|
+
""" Checks safety of getfield for object arrays.
|
|
469
|
+
|
|
470
|
+
As in _view_is_safe, we need to check that memory containing objects is not
|
|
471
|
+
reinterpreted as a non-object datatype and vice versa.
|
|
472
|
+
|
|
473
|
+
Parameters
|
|
474
|
+
----------
|
|
475
|
+
oldtype : data-type
|
|
476
|
+
Data type of the original ndarray.
|
|
477
|
+
newtype : data-type
|
|
478
|
+
Data type of the field being accessed by ndarray.getfield
|
|
479
|
+
offset : int
|
|
480
|
+
Offset of the field being accessed by ndarray.getfield
|
|
481
|
+
|
|
482
|
+
Raises
|
|
483
|
+
------
|
|
484
|
+
TypeError
|
|
485
|
+
If the field access is invalid
|
|
486
|
+
|
|
487
|
+
"""
|
|
488
|
+
if newtype.hasobject or oldtype.hasobject:
|
|
489
|
+
if offset == 0 and newtype == oldtype:
|
|
490
|
+
return
|
|
491
|
+
if oldtype.names is not None:
|
|
492
|
+
for name in oldtype.names:
|
|
493
|
+
if (oldtype.fields[name][1] == offset and
|
|
494
|
+
oldtype.fields[name][0] == newtype):
|
|
495
|
+
return
|
|
496
|
+
raise TypeError("Cannot get/set field of an object array")
|
|
497
|
+
return
|
|
498
|
+
|
|
499
|
+
def _view_is_safe(oldtype, newtype):
|
|
500
|
+
""" Checks safety of a view involving object arrays, for example when
|
|
501
|
+
doing::
|
|
502
|
+
|
|
503
|
+
np.zeros(10, dtype=oldtype).view(newtype)
|
|
504
|
+
|
|
505
|
+
Parameters
|
|
506
|
+
----------
|
|
507
|
+
oldtype : data-type
|
|
508
|
+
Data type of original ndarray
|
|
509
|
+
newtype : data-type
|
|
510
|
+
Data type of the view
|
|
511
|
+
|
|
512
|
+
Raises
|
|
513
|
+
------
|
|
514
|
+
TypeError
|
|
515
|
+
If the new type is incompatible with the old type.
|
|
516
|
+
|
|
517
|
+
"""
|
|
518
|
+
|
|
519
|
+
# if the types are equivalent, there is no problem.
|
|
520
|
+
# for example: dtype((np.record, 'i4,i4')) == dtype((np.void, 'i4,i4'))
|
|
521
|
+
if oldtype == newtype:
|
|
522
|
+
return
|
|
523
|
+
|
|
524
|
+
if newtype.hasobject or oldtype.hasobject:
|
|
525
|
+
raise TypeError("Cannot change data-type for array of references.")
|
|
526
|
+
return
|
|
527
|
+
|
|
528
|
+
|
|
529
|
+
# Given a string containing a PEP 3118 format specifier,
|
|
530
|
+
# construct a NumPy dtype
|
|
531
|
+
|
|
532
|
+
_pep3118_native_map = {
|
|
533
|
+
'?': '?',
|
|
534
|
+
'c': 'S1',
|
|
535
|
+
'b': 'b',
|
|
536
|
+
'B': 'B',
|
|
537
|
+
'h': 'h',
|
|
538
|
+
'H': 'H',
|
|
539
|
+
'i': 'i',
|
|
540
|
+
'I': 'I',
|
|
541
|
+
'l': 'l',
|
|
542
|
+
'L': 'L',
|
|
543
|
+
'q': 'q',
|
|
544
|
+
'Q': 'Q',
|
|
545
|
+
'e': 'e',
|
|
546
|
+
'f': 'f',
|
|
547
|
+
'd': 'd',
|
|
548
|
+
'g': 'g',
|
|
549
|
+
'Zf': 'F',
|
|
550
|
+
'Zd': 'D',
|
|
551
|
+
'Zg': 'G',
|
|
552
|
+
's': 'S',
|
|
553
|
+
'w': 'U',
|
|
554
|
+
'O': 'O',
|
|
555
|
+
'x': 'V', # padding
|
|
556
|
+
}
|
|
557
|
+
_pep3118_native_typechars = ''.join(_pep3118_native_map.keys())
|
|
558
|
+
|
|
559
|
+
_pep3118_standard_map = {
|
|
560
|
+
'?': '?',
|
|
561
|
+
'c': 'S1',
|
|
562
|
+
'b': 'b',
|
|
563
|
+
'B': 'B',
|
|
564
|
+
'h': 'i2',
|
|
565
|
+
'H': 'u2',
|
|
566
|
+
'i': 'i4',
|
|
567
|
+
'I': 'u4',
|
|
568
|
+
'l': 'i4',
|
|
569
|
+
'L': 'u4',
|
|
570
|
+
'q': 'i8',
|
|
571
|
+
'Q': 'u8',
|
|
572
|
+
'e': 'f2',
|
|
573
|
+
'f': 'f',
|
|
574
|
+
'd': 'd',
|
|
575
|
+
'Zf': 'F',
|
|
576
|
+
'Zd': 'D',
|
|
577
|
+
's': 'S',
|
|
578
|
+
'w': 'U',
|
|
579
|
+
'O': 'O',
|
|
580
|
+
'x': 'V', # padding
|
|
581
|
+
}
|
|
582
|
+
_pep3118_standard_typechars = ''.join(_pep3118_standard_map.keys())
|
|
583
|
+
|
|
584
|
+
_pep3118_unsupported_map = {
|
|
585
|
+
'u': 'UCS-2 strings',
|
|
586
|
+
'&': 'pointers',
|
|
587
|
+
't': 'bitfields',
|
|
588
|
+
'X': 'function pointers',
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
class _Stream:
|
|
592
|
+
def __init__(self, s):
|
|
593
|
+
self.s = s
|
|
594
|
+
self.byteorder = '@'
|
|
595
|
+
|
|
596
|
+
def advance(self, n):
|
|
597
|
+
res = self.s[:n]
|
|
598
|
+
self.s = self.s[n:]
|
|
599
|
+
return res
|
|
600
|
+
|
|
601
|
+
def consume(self, c):
|
|
602
|
+
if self.s[:len(c)] == c:
|
|
603
|
+
self.advance(len(c))
|
|
604
|
+
return True
|
|
605
|
+
return False
|
|
606
|
+
|
|
607
|
+
def consume_until(self, c):
|
|
608
|
+
if callable(c):
|
|
609
|
+
i = 0
|
|
610
|
+
while i < len(self.s) and not c(self.s[i]):
|
|
611
|
+
i = i + 1
|
|
612
|
+
return self.advance(i)
|
|
613
|
+
else:
|
|
614
|
+
i = self.s.index(c)
|
|
615
|
+
res = self.advance(i)
|
|
616
|
+
self.advance(len(c))
|
|
617
|
+
return res
|
|
618
|
+
|
|
619
|
+
@property
|
|
620
|
+
def next(self):
|
|
621
|
+
return self.s[0]
|
|
622
|
+
|
|
623
|
+
def __bool__(self):
|
|
624
|
+
return bool(self.s)
|
|
625
|
+
|
|
626
|
+
|
|
627
|
+
def _dtype_from_pep3118(spec):
|
|
628
|
+
stream = _Stream(spec)
|
|
629
|
+
dtype, align = __dtype_from_pep3118(stream, is_subdtype=False)
|
|
630
|
+
return dtype
|
|
631
|
+
|
|
632
|
+
def __dtype_from_pep3118(stream, is_subdtype):
|
|
633
|
+
field_spec = {
|
|
634
|
+
'names': [],
|
|
635
|
+
'formats': [],
|
|
636
|
+
'offsets': [],
|
|
637
|
+
'itemsize': 0
|
|
638
|
+
}
|
|
639
|
+
offset = 0
|
|
640
|
+
common_alignment = 1
|
|
641
|
+
is_padding = False
|
|
642
|
+
|
|
643
|
+
# Parse spec
|
|
644
|
+
while stream:
|
|
645
|
+
value = None
|
|
646
|
+
|
|
647
|
+
# End of structure, bail out to upper level
|
|
648
|
+
if stream.consume('}'):
|
|
649
|
+
break
|
|
650
|
+
|
|
651
|
+
# Sub-arrays (1)
|
|
652
|
+
shape = None
|
|
653
|
+
if stream.consume('('):
|
|
654
|
+
shape = stream.consume_until(')')
|
|
655
|
+
shape = tuple(map(int, shape.split(',')))
|
|
656
|
+
|
|
657
|
+
# Byte order
|
|
658
|
+
if stream.next in ('@', '=', '<', '>', '^', '!'):
|
|
659
|
+
byteorder = stream.advance(1)
|
|
660
|
+
if byteorder == '!':
|
|
661
|
+
byteorder = '>'
|
|
662
|
+
stream.byteorder = byteorder
|
|
663
|
+
|
|
664
|
+
# Byte order characters also control native vs. standard type sizes
|
|
665
|
+
if stream.byteorder in ('@', '^'):
|
|
666
|
+
type_map = _pep3118_native_map
|
|
667
|
+
type_map_chars = _pep3118_native_typechars
|
|
668
|
+
else:
|
|
669
|
+
type_map = _pep3118_standard_map
|
|
670
|
+
type_map_chars = _pep3118_standard_typechars
|
|
671
|
+
|
|
672
|
+
# Item sizes
|
|
673
|
+
itemsize_str = stream.consume_until(lambda c: not c.isdigit())
|
|
674
|
+
if itemsize_str:
|
|
675
|
+
itemsize = int(itemsize_str)
|
|
676
|
+
else:
|
|
677
|
+
itemsize = 1
|
|
678
|
+
|
|
679
|
+
# Data types
|
|
680
|
+
is_padding = False
|
|
681
|
+
|
|
682
|
+
if stream.consume('T{'):
|
|
683
|
+
value, align = __dtype_from_pep3118(
|
|
684
|
+
stream, is_subdtype=True)
|
|
685
|
+
elif stream.next in type_map_chars:
|
|
686
|
+
if stream.next == 'Z':
|
|
687
|
+
typechar = stream.advance(2)
|
|
688
|
+
else:
|
|
689
|
+
typechar = stream.advance(1)
|
|
690
|
+
|
|
691
|
+
is_padding = (typechar == 'x')
|
|
692
|
+
dtypechar = type_map[typechar]
|
|
693
|
+
if dtypechar in 'USV':
|
|
694
|
+
dtypechar += '%d' % itemsize
|
|
695
|
+
itemsize = 1
|
|
696
|
+
numpy_byteorder = {'@': '=', '^': '='}.get(
|
|
697
|
+
stream.byteorder, stream.byteorder)
|
|
698
|
+
value = dtype(numpy_byteorder + dtypechar)
|
|
699
|
+
align = value.alignment
|
|
700
|
+
elif stream.next in _pep3118_unsupported_map:
|
|
701
|
+
desc = _pep3118_unsupported_map[stream.next]
|
|
702
|
+
raise NotImplementedError(
|
|
703
|
+
f"Unrepresentable PEP 3118 data type {stream.next!r} ({desc})")
|
|
704
|
+
else:
|
|
705
|
+
raise ValueError(
|
|
706
|
+
f"Unknown PEP 3118 data type specifier {stream.s!r}"
|
|
707
|
+
)
|
|
708
|
+
|
|
709
|
+
#
|
|
710
|
+
# Native alignment may require padding
|
|
711
|
+
#
|
|
712
|
+
# Here we assume that the presence of a '@' character implicitly
|
|
713
|
+
# implies that the start of the array is *already* aligned.
|
|
714
|
+
#
|
|
715
|
+
extra_offset = 0
|
|
716
|
+
if stream.byteorder == '@':
|
|
717
|
+
start_padding = (-offset) % align
|
|
718
|
+
intra_padding = (-value.itemsize) % align
|
|
719
|
+
|
|
720
|
+
offset += start_padding
|
|
721
|
+
|
|
722
|
+
if intra_padding != 0:
|
|
723
|
+
if itemsize > 1 or (shape is not None and _prod(shape) > 1):
|
|
724
|
+
# Inject internal padding to the end of the sub-item
|
|
725
|
+
value = _add_trailing_padding(value, intra_padding)
|
|
726
|
+
else:
|
|
727
|
+
# We can postpone the injection of internal padding,
|
|
728
|
+
# as the item appears at most once
|
|
729
|
+
extra_offset += intra_padding
|
|
730
|
+
|
|
731
|
+
# Update common alignment
|
|
732
|
+
common_alignment = _lcm(align, common_alignment)
|
|
733
|
+
|
|
734
|
+
# Convert itemsize to sub-array
|
|
735
|
+
if itemsize != 1:
|
|
736
|
+
value = dtype((value, (itemsize,)))
|
|
737
|
+
|
|
738
|
+
# Sub-arrays (2)
|
|
739
|
+
if shape is not None:
|
|
740
|
+
value = dtype((value, shape))
|
|
741
|
+
|
|
742
|
+
# Field name
|
|
743
|
+
if stream.consume(':'):
|
|
744
|
+
name = stream.consume_until(':')
|
|
745
|
+
else:
|
|
746
|
+
name = None
|
|
747
|
+
|
|
748
|
+
if not (is_padding and name is None):
|
|
749
|
+
if name is not None and name in field_spec['names']:
|
|
750
|
+
raise RuntimeError(
|
|
751
|
+
f"Duplicate field name '{name}' in PEP3118 format"
|
|
752
|
+
)
|
|
753
|
+
field_spec['names'].append(name)
|
|
754
|
+
field_spec['formats'].append(value)
|
|
755
|
+
field_spec['offsets'].append(offset)
|
|
756
|
+
|
|
757
|
+
offset += value.itemsize
|
|
758
|
+
offset += extra_offset
|
|
759
|
+
|
|
760
|
+
field_spec['itemsize'] = offset
|
|
761
|
+
|
|
762
|
+
# extra final padding for aligned types
|
|
763
|
+
if stream.byteorder == '@':
|
|
764
|
+
field_spec['itemsize'] += (-offset) % common_alignment
|
|
765
|
+
|
|
766
|
+
# Check if this was a simple 1-item type, and unwrap it
|
|
767
|
+
if (field_spec['names'] == [None]
|
|
768
|
+
and field_spec['offsets'][0] == 0
|
|
769
|
+
and field_spec['itemsize'] == field_spec['formats'][0].itemsize
|
|
770
|
+
and not is_subdtype):
|
|
771
|
+
ret = field_spec['formats'][0]
|
|
772
|
+
else:
|
|
773
|
+
_fix_names(field_spec)
|
|
774
|
+
ret = dtype(field_spec)
|
|
775
|
+
|
|
776
|
+
# Finished
|
|
777
|
+
return ret, common_alignment
|
|
778
|
+
|
|
779
|
+
def _fix_names(field_spec):
|
|
780
|
+
""" Replace names which are None with the next unused f%d name """
|
|
781
|
+
names = field_spec['names']
|
|
782
|
+
for i, name in enumerate(names):
|
|
783
|
+
if name is not None:
|
|
784
|
+
continue
|
|
785
|
+
|
|
786
|
+
j = 0
|
|
787
|
+
while True:
|
|
788
|
+
name = f'f{j}'
|
|
789
|
+
if name not in names:
|
|
790
|
+
break
|
|
791
|
+
j = j + 1
|
|
792
|
+
names[i] = name
|
|
793
|
+
|
|
794
|
+
def _add_trailing_padding(value, padding):
|
|
795
|
+
"""Inject the specified number of padding bytes at the end of a dtype"""
|
|
796
|
+
if value.fields is None:
|
|
797
|
+
field_spec = {
|
|
798
|
+
'names': ['f0'],
|
|
799
|
+
'formats': [value],
|
|
800
|
+
'offsets': [0],
|
|
801
|
+
'itemsize': value.itemsize
|
|
802
|
+
}
|
|
803
|
+
else:
|
|
804
|
+
fields = value.fields
|
|
805
|
+
names = value.names
|
|
806
|
+
field_spec = {
|
|
807
|
+
'names': names,
|
|
808
|
+
'formats': [fields[name][0] for name in names],
|
|
809
|
+
'offsets': [fields[name][1] for name in names],
|
|
810
|
+
'itemsize': value.itemsize
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
field_spec['itemsize'] += padding
|
|
814
|
+
return dtype(field_spec)
|
|
815
|
+
|
|
816
|
+
def _prod(a):
|
|
817
|
+
p = 1
|
|
818
|
+
for x in a:
|
|
819
|
+
p *= x
|
|
820
|
+
return p
|
|
821
|
+
|
|
822
|
+
def _gcd(a, b):
|
|
823
|
+
"""Calculate the greatest common divisor of a and b"""
|
|
824
|
+
if not (math.isfinite(a) and math.isfinite(b)):
|
|
825
|
+
raise ValueError('Can only find greatest common divisor of '
|
|
826
|
+
f'finite arguments, found "{a}" and "{b}"')
|
|
827
|
+
while b:
|
|
828
|
+
a, b = b, a % b
|
|
829
|
+
return a
|
|
830
|
+
|
|
831
|
+
def _lcm(a, b):
|
|
832
|
+
return a // _gcd(a, b) * b
|
|
833
|
+
|
|
834
|
+
def array_ufunc_errmsg_formatter(dummy, ufunc, method, *inputs, **kwargs):
|
|
835
|
+
""" Format the error message for when __array_ufunc__ gives up. """
|
|
836
|
+
args_string = ', '.join([f'{arg!r}' for arg in inputs] +
|
|
837
|
+
[f'{k}={v!r}'
|
|
838
|
+
for k, v in kwargs.items()])
|
|
839
|
+
args = inputs + kwargs.get('out', ())
|
|
840
|
+
types_string = ', '.join(repr(type(arg).__name__) for arg in args)
|
|
841
|
+
return ('operand type(s) all returned NotImplemented from '
|
|
842
|
+
f'__array_ufunc__({ufunc!r}, {method!r}, {args_string}): {types_string}'
|
|
843
|
+
)
|
|
844
|
+
|
|
845
|
+
|
|
846
|
+
def array_function_errmsg_formatter(public_api, types):
|
|
847
|
+
""" Format the error message for when __array_ufunc__ gives up. """
|
|
848
|
+
func_name = f'{public_api.__module__}.{public_api.__name__}'
|
|
849
|
+
return (f"no implementation found for '{func_name}' on types that implement "
|
|
850
|
+
f'__array_function__: {list(types)}')
|
|
851
|
+
|
|
852
|
+
|
|
853
|
+
def _ufunc_doc_signature_formatter(ufunc):
|
|
854
|
+
"""
|
|
855
|
+
Builds a signature string which resembles PEP 457
|
|
856
|
+
|
|
857
|
+
This is used to construct the first line of the docstring
|
|
858
|
+
|
|
859
|
+
Keep in sync with `_ufunc_inspect_signature_builder`.
|
|
860
|
+
"""
|
|
861
|
+
|
|
862
|
+
# input arguments are simple
|
|
863
|
+
if ufunc.nin == 1:
|
|
864
|
+
in_args = 'x'
|
|
865
|
+
else:
|
|
866
|
+
in_args = ', '.join(f'x{i + 1}' for i in range(ufunc.nin))
|
|
867
|
+
|
|
868
|
+
# output arguments are both keyword or positional
|
|
869
|
+
if ufunc.nout == 0:
|
|
870
|
+
out_args = ', /, out=()'
|
|
871
|
+
elif ufunc.nout == 1:
|
|
872
|
+
out_args = ', /, out=None'
|
|
873
|
+
else:
|
|
874
|
+
out_args = '[, {positional}], / [, out={default}]'.format(
|
|
875
|
+
positional=', '.join(
|
|
876
|
+
f'out{i + 1}' for i in range(ufunc.nout)),
|
|
877
|
+
default=repr((None,) * ufunc.nout)
|
|
878
|
+
)
|
|
879
|
+
|
|
880
|
+
# keyword only args depend on whether this is a gufunc
|
|
881
|
+
kwargs = (
|
|
882
|
+
", casting='same_kind'"
|
|
883
|
+
", order='K'"
|
|
884
|
+
", dtype=None"
|
|
885
|
+
", subok=True"
|
|
886
|
+
)
|
|
887
|
+
|
|
888
|
+
# NOTE: gufuncs may or may not support the `axis` parameter
|
|
889
|
+
if ufunc.signature is None:
|
|
890
|
+
kwargs = f", where=True{kwargs}[, signature]"
|
|
891
|
+
else:
|
|
892
|
+
kwargs += "[, signature, axes, axis]"
|
|
893
|
+
|
|
894
|
+
# join all the parts together
|
|
895
|
+
return f'{ufunc.__name__}({in_args}{out_args}, *{kwargs})'
|
|
896
|
+
|
|
897
|
+
|
|
898
|
+
def _ufunc_inspect_signature_builder(ufunc):
|
|
899
|
+
"""
|
|
900
|
+
Builds a ``__signature__`` string.
|
|
901
|
+
|
|
902
|
+
Should be kept in sync with `_ufunc_doc_signature_formatter`.
|
|
903
|
+
"""
|
|
904
|
+
|
|
905
|
+
from inspect import Parameter, Signature
|
|
906
|
+
|
|
907
|
+
params = []
|
|
908
|
+
|
|
909
|
+
# positional-only input parameters
|
|
910
|
+
if ufunc.nin == 1:
|
|
911
|
+
params.append(Parameter("x", Parameter.POSITIONAL_ONLY))
|
|
912
|
+
else:
|
|
913
|
+
params.extend(
|
|
914
|
+
Parameter(f"x{i}", Parameter.POSITIONAL_ONLY)
|
|
915
|
+
for i in range(1, ufunc.nin + 1)
|
|
916
|
+
)
|
|
917
|
+
|
|
918
|
+
# for the sake of simplicity, we only consider a single output parameter
|
|
919
|
+
if ufunc.nout == 1:
|
|
920
|
+
out_default = None
|
|
921
|
+
else:
|
|
922
|
+
out_default = (None,) * ufunc.nout
|
|
923
|
+
params.append(
|
|
924
|
+
Parameter("out", Parameter.POSITIONAL_OR_KEYWORD, default=out_default),
|
|
925
|
+
)
|
|
926
|
+
|
|
927
|
+
if ufunc.signature is None:
|
|
928
|
+
params.append(Parameter("where", Parameter.KEYWORD_ONLY, default=True))
|
|
929
|
+
else:
|
|
930
|
+
# NOTE: not all gufuncs support the `axis` parameters
|
|
931
|
+
params.append(Parameter("axes", Parameter.KEYWORD_ONLY, default=_NoValue))
|
|
932
|
+
params.append(Parameter("axis", Parameter.KEYWORD_ONLY, default=_NoValue))
|
|
933
|
+
params.append(Parameter("keepdims", Parameter.KEYWORD_ONLY, default=False))
|
|
934
|
+
|
|
935
|
+
params.extend((
|
|
936
|
+
Parameter("casting", Parameter.KEYWORD_ONLY, default='same_kind'),
|
|
937
|
+
Parameter("order", Parameter.KEYWORD_ONLY, default='K'),
|
|
938
|
+
Parameter("dtype", Parameter.KEYWORD_ONLY, default=None),
|
|
939
|
+
Parameter("subok", Parameter.KEYWORD_ONLY, default=True),
|
|
940
|
+
Parameter("signature", Parameter.KEYWORD_ONLY, default=None),
|
|
941
|
+
))
|
|
942
|
+
|
|
943
|
+
return Signature(params)
|
|
944
|
+
|
|
945
|
+
|
|
946
|
+
def npy_ctypes_check(cls):
|
|
947
|
+
# determine if a class comes from ctypes, in order to work around
|
|
948
|
+
# a bug in the buffer protocol for those objects, bpo-10746
|
|
949
|
+
try:
|
|
950
|
+
# ctypes class are new-style, so have an __mro__. This probably fails
|
|
951
|
+
# for ctypes classes with multiple inheritance.
|
|
952
|
+
if IS_PYPY:
|
|
953
|
+
# (..., _ctypes.basics._CData, Bufferable, object)
|
|
954
|
+
ctype_base = cls.__mro__[-3]
|
|
955
|
+
else:
|
|
956
|
+
# # (..., _ctypes._CData, object)
|
|
957
|
+
ctype_base = cls.__mro__[-2]
|
|
958
|
+
# right now, they're part of the _ctypes module
|
|
959
|
+
return '_ctypes' in ctype_base.__module__
|
|
960
|
+
except Exception:
|
|
961
|
+
return False
|
|
962
|
+
|
|
963
|
+
# used to handle the _NoValue default argument for na_object
|
|
964
|
+
# in the C implementation of the __reduce__ method for stringdtype
|
|
965
|
+
def _convert_to_stringdtype_kwargs(coerce, na_object=_NoValue):
|
|
966
|
+
if na_object is _NoValue:
|
|
967
|
+
return StringDType(coerce=coerce)
|
|
968
|
+
return StringDType(coerce=coerce, na_object=na_object)
|