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
|
@@ -0,0 +1,826 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import re
|
|
3
|
+
import sys
|
|
4
|
+
import platform
|
|
5
|
+
import shlex
|
|
6
|
+
import time
|
|
7
|
+
import subprocess
|
|
8
|
+
from copy import copy
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from distutils import ccompiler
|
|
11
|
+
from distutils.ccompiler import (
|
|
12
|
+
compiler_class, gen_lib_options, get_default_compiler, new_compiler,
|
|
13
|
+
CCompiler
|
|
14
|
+
)
|
|
15
|
+
from distutils.errors import (
|
|
16
|
+
DistutilsExecError, DistutilsModuleError, DistutilsPlatformError,
|
|
17
|
+
CompileError, UnknownFileError
|
|
18
|
+
)
|
|
19
|
+
from distutils.sysconfig import customize_compiler
|
|
20
|
+
from distutils.version import LooseVersion
|
|
21
|
+
|
|
22
|
+
from numpy.distutils import log
|
|
23
|
+
from numpy.distutils.exec_command import (
|
|
24
|
+
filepath_from_subprocess_output, forward_bytes_to_stdout
|
|
25
|
+
)
|
|
26
|
+
from numpy.distutils.misc_util import cyg2win32, is_sequence, mingw32, \
|
|
27
|
+
get_num_build_jobs, \
|
|
28
|
+
_commandline_dep_string, \
|
|
29
|
+
sanitize_cxx_flags
|
|
30
|
+
|
|
31
|
+
# globals for parallel build management
|
|
32
|
+
import threading
|
|
33
|
+
|
|
34
|
+
_job_semaphore = None
|
|
35
|
+
_global_lock = threading.Lock()
|
|
36
|
+
_processing_files = set()
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _needs_build(obj, cc_args, extra_postargs, pp_opts):
|
|
40
|
+
"""
|
|
41
|
+
Check if an objects needs to be rebuild based on its dependencies
|
|
42
|
+
|
|
43
|
+
Parameters
|
|
44
|
+
----------
|
|
45
|
+
obj : str
|
|
46
|
+
object file
|
|
47
|
+
|
|
48
|
+
Returns
|
|
49
|
+
-------
|
|
50
|
+
bool
|
|
51
|
+
"""
|
|
52
|
+
# defined in unixcompiler.py
|
|
53
|
+
dep_file = obj + '.d'
|
|
54
|
+
if not os.path.exists(dep_file):
|
|
55
|
+
return True
|
|
56
|
+
|
|
57
|
+
# dep_file is a makefile containing 'object: dependencies'
|
|
58
|
+
# formatted like posix shell (spaces escaped, \ line continuations)
|
|
59
|
+
# the last line contains the compiler commandline arguments as some
|
|
60
|
+
# projects may compile an extension multiple times with different
|
|
61
|
+
# arguments
|
|
62
|
+
with open(dep_file) as f:
|
|
63
|
+
lines = f.readlines()
|
|
64
|
+
|
|
65
|
+
cmdline =_commandline_dep_string(cc_args, extra_postargs, pp_opts)
|
|
66
|
+
last_cmdline = lines[-1]
|
|
67
|
+
if last_cmdline != cmdline:
|
|
68
|
+
return True
|
|
69
|
+
|
|
70
|
+
contents = ''.join(lines[:-1])
|
|
71
|
+
deps = [x for x in shlex.split(contents, posix=True)
|
|
72
|
+
if x != "\n" and not x.endswith(":")]
|
|
73
|
+
|
|
74
|
+
try:
|
|
75
|
+
t_obj = os.stat(obj).st_mtime
|
|
76
|
+
|
|
77
|
+
# check if any of the dependencies is newer than the object
|
|
78
|
+
# the dependencies includes the source used to create the object
|
|
79
|
+
for f in deps:
|
|
80
|
+
if os.stat(f).st_mtime > t_obj:
|
|
81
|
+
return True
|
|
82
|
+
except OSError:
|
|
83
|
+
# no object counts as newer (shouldn't happen if dep_file exists)
|
|
84
|
+
return True
|
|
85
|
+
|
|
86
|
+
return False
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def replace_method(klass, method_name, func):
|
|
90
|
+
# Py3k does not have unbound method anymore, MethodType does not work
|
|
91
|
+
m = lambda self, *args, **kw: func(self, *args, **kw)
|
|
92
|
+
setattr(klass, method_name, m)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
######################################################################
|
|
96
|
+
## Method that subclasses may redefine. But don't call this method,
|
|
97
|
+
## it i private to CCompiler class and may return unexpected
|
|
98
|
+
## results if used elsewhere. So, you have been warned..
|
|
99
|
+
|
|
100
|
+
def CCompiler_find_executables(self):
|
|
101
|
+
"""
|
|
102
|
+
Does nothing here, but is called by the get_version method and can be
|
|
103
|
+
overridden by subclasses. In particular it is redefined in the `FCompiler`
|
|
104
|
+
class where more documentation can be found.
|
|
105
|
+
|
|
106
|
+
"""
|
|
107
|
+
pass
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
replace_method(CCompiler, 'find_executables', CCompiler_find_executables)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
# Using customized CCompiler.spawn.
|
|
114
|
+
def CCompiler_spawn(self, cmd, display=None, env=None):
|
|
115
|
+
"""
|
|
116
|
+
Execute a command in a sub-process.
|
|
117
|
+
|
|
118
|
+
Parameters
|
|
119
|
+
----------
|
|
120
|
+
cmd : str
|
|
121
|
+
The command to execute.
|
|
122
|
+
display : str or sequence of str, optional
|
|
123
|
+
The text to add to the log file kept by `numpy.distutils`.
|
|
124
|
+
If not given, `display` is equal to `cmd`.
|
|
125
|
+
env : a dictionary for environment variables, optional
|
|
126
|
+
|
|
127
|
+
Returns
|
|
128
|
+
-------
|
|
129
|
+
None
|
|
130
|
+
|
|
131
|
+
Raises
|
|
132
|
+
------
|
|
133
|
+
DistutilsExecError
|
|
134
|
+
If the command failed, i.e. the exit status was not 0.
|
|
135
|
+
|
|
136
|
+
"""
|
|
137
|
+
env = env if env is not None else dict(os.environ)
|
|
138
|
+
if display is None:
|
|
139
|
+
display = cmd
|
|
140
|
+
if is_sequence(display):
|
|
141
|
+
display = ' '.join(list(display))
|
|
142
|
+
log.info(display)
|
|
143
|
+
try:
|
|
144
|
+
if self.verbose:
|
|
145
|
+
subprocess.check_output(cmd, env=env)
|
|
146
|
+
else:
|
|
147
|
+
subprocess.check_output(cmd, stderr=subprocess.STDOUT, env=env)
|
|
148
|
+
except subprocess.CalledProcessError as exc:
|
|
149
|
+
o = exc.output
|
|
150
|
+
s = exc.returncode
|
|
151
|
+
except OSError as e:
|
|
152
|
+
# OSError doesn't have the same hooks for the exception
|
|
153
|
+
# output, but exec_command() historically would use an
|
|
154
|
+
# empty string for EnvironmentError (base class for
|
|
155
|
+
# OSError)
|
|
156
|
+
# o = b''
|
|
157
|
+
# still that would make the end-user lost in translation!
|
|
158
|
+
o = f"\n\n{e}\n\n\n"
|
|
159
|
+
try:
|
|
160
|
+
o = o.encode(sys.stdout.encoding)
|
|
161
|
+
except AttributeError:
|
|
162
|
+
o = o.encode('utf8')
|
|
163
|
+
# status previously used by exec_command() for parent
|
|
164
|
+
# of OSError
|
|
165
|
+
s = 127
|
|
166
|
+
else:
|
|
167
|
+
# use a convenience return here so that any kind of
|
|
168
|
+
# caught exception will execute the default code after the
|
|
169
|
+
# try / except block, which handles various exceptions
|
|
170
|
+
return None
|
|
171
|
+
|
|
172
|
+
if is_sequence(cmd):
|
|
173
|
+
cmd = ' '.join(list(cmd))
|
|
174
|
+
|
|
175
|
+
if self.verbose:
|
|
176
|
+
forward_bytes_to_stdout(o)
|
|
177
|
+
|
|
178
|
+
if re.search(b'Too many open files', o):
|
|
179
|
+
msg = '\nTry rerunning setup command until build succeeds.'
|
|
180
|
+
else:
|
|
181
|
+
msg = ''
|
|
182
|
+
raise DistutilsExecError('Command "%s" failed with exit status %d%s' %
|
|
183
|
+
(cmd, s, msg))
|
|
184
|
+
|
|
185
|
+
replace_method(CCompiler, 'spawn', CCompiler_spawn)
|
|
186
|
+
|
|
187
|
+
def CCompiler_object_filenames(self, source_filenames, strip_dir=0, output_dir=''):
|
|
188
|
+
"""
|
|
189
|
+
Return the name of the object files for the given source files.
|
|
190
|
+
|
|
191
|
+
Parameters
|
|
192
|
+
----------
|
|
193
|
+
source_filenames : list of str
|
|
194
|
+
The list of paths to source files. Paths can be either relative or
|
|
195
|
+
absolute, this is handled transparently.
|
|
196
|
+
strip_dir : bool, optional
|
|
197
|
+
Whether to strip the directory from the returned paths. If True,
|
|
198
|
+
the file name prepended by `output_dir` is returned. Default is False.
|
|
199
|
+
output_dir : str, optional
|
|
200
|
+
If given, this path is prepended to the returned paths to the
|
|
201
|
+
object files.
|
|
202
|
+
|
|
203
|
+
Returns
|
|
204
|
+
-------
|
|
205
|
+
obj_names : list of str
|
|
206
|
+
The list of paths to the object files corresponding to the source
|
|
207
|
+
files in `source_filenames`.
|
|
208
|
+
|
|
209
|
+
"""
|
|
210
|
+
if output_dir is None:
|
|
211
|
+
output_dir = ''
|
|
212
|
+
obj_names = []
|
|
213
|
+
for src_name in source_filenames:
|
|
214
|
+
base, ext = os.path.splitext(os.path.normpath(src_name))
|
|
215
|
+
base = os.path.splitdrive(base)[1] # Chop off the drive
|
|
216
|
+
base = base[os.path.isabs(base):] # If abs, chop off leading /
|
|
217
|
+
if base.startswith('..'):
|
|
218
|
+
# Resolve starting relative path components, middle ones
|
|
219
|
+
# (if any) have been handled by os.path.normpath above.
|
|
220
|
+
i = base.rfind('..')+2
|
|
221
|
+
d = base[:i]
|
|
222
|
+
d = os.path.basename(os.path.abspath(d))
|
|
223
|
+
base = d + base[i:]
|
|
224
|
+
if ext not in self.src_extensions:
|
|
225
|
+
raise UnknownFileError("unknown file type '%s' (from '%s')" % (ext, src_name))
|
|
226
|
+
if strip_dir:
|
|
227
|
+
base = os.path.basename(base)
|
|
228
|
+
obj_name = os.path.join(output_dir, base + self.obj_extension)
|
|
229
|
+
obj_names.append(obj_name)
|
|
230
|
+
return obj_names
|
|
231
|
+
|
|
232
|
+
replace_method(CCompiler, 'object_filenames', CCompiler_object_filenames)
|
|
233
|
+
|
|
234
|
+
def CCompiler_compile(self, sources, output_dir=None, macros=None,
|
|
235
|
+
include_dirs=None, debug=0, extra_preargs=None,
|
|
236
|
+
extra_postargs=None, depends=None):
|
|
237
|
+
"""
|
|
238
|
+
Compile one or more source files.
|
|
239
|
+
|
|
240
|
+
Please refer to the Python distutils API reference for more details.
|
|
241
|
+
|
|
242
|
+
Parameters
|
|
243
|
+
----------
|
|
244
|
+
sources : list of str
|
|
245
|
+
A list of filenames
|
|
246
|
+
output_dir : str, optional
|
|
247
|
+
Path to the output directory.
|
|
248
|
+
macros : list of tuples
|
|
249
|
+
A list of macro definitions.
|
|
250
|
+
include_dirs : list of str, optional
|
|
251
|
+
The directories to add to the default include file search path for
|
|
252
|
+
this compilation only.
|
|
253
|
+
debug : bool, optional
|
|
254
|
+
Whether or not to output debug symbols in or alongside the object
|
|
255
|
+
file(s).
|
|
256
|
+
extra_preargs, extra_postargs : ?
|
|
257
|
+
Extra pre- and post-arguments.
|
|
258
|
+
depends : list of str, optional
|
|
259
|
+
A list of file names that all targets depend on.
|
|
260
|
+
|
|
261
|
+
Returns
|
|
262
|
+
-------
|
|
263
|
+
objects : list of str
|
|
264
|
+
A list of object file names, one per source file `sources`.
|
|
265
|
+
|
|
266
|
+
Raises
|
|
267
|
+
------
|
|
268
|
+
CompileError
|
|
269
|
+
If compilation fails.
|
|
270
|
+
|
|
271
|
+
"""
|
|
272
|
+
global _job_semaphore
|
|
273
|
+
|
|
274
|
+
jobs = get_num_build_jobs()
|
|
275
|
+
|
|
276
|
+
# setup semaphore to not exceed number of compile jobs when parallelized at
|
|
277
|
+
# extension level (python >= 3.5)
|
|
278
|
+
with _global_lock:
|
|
279
|
+
if _job_semaphore is None:
|
|
280
|
+
_job_semaphore = threading.Semaphore(jobs)
|
|
281
|
+
|
|
282
|
+
if not sources:
|
|
283
|
+
return []
|
|
284
|
+
from numpy.distutils.fcompiler import (FCompiler,
|
|
285
|
+
FORTRAN_COMMON_FIXED_EXTENSIONS,
|
|
286
|
+
has_f90_header)
|
|
287
|
+
if isinstance(self, FCompiler):
|
|
288
|
+
display = []
|
|
289
|
+
for fc in ['f77', 'f90', 'fix']:
|
|
290
|
+
fcomp = getattr(self, 'compiler_'+fc)
|
|
291
|
+
if fcomp is None:
|
|
292
|
+
continue
|
|
293
|
+
display.append("Fortran %s compiler: %s" % (fc, ' '.join(fcomp)))
|
|
294
|
+
display = '\n'.join(display)
|
|
295
|
+
else:
|
|
296
|
+
ccomp = self.compiler_so
|
|
297
|
+
display = "C compiler: %s\n" % (' '.join(ccomp),)
|
|
298
|
+
log.info(display)
|
|
299
|
+
macros, objects, extra_postargs, pp_opts, build = \
|
|
300
|
+
self._setup_compile(output_dir, macros, include_dirs, sources,
|
|
301
|
+
depends, extra_postargs)
|
|
302
|
+
cc_args = self._get_cc_args(pp_opts, debug, extra_preargs)
|
|
303
|
+
display = "compile options: '%s'" % (' '.join(cc_args))
|
|
304
|
+
if extra_postargs:
|
|
305
|
+
display += "\nextra options: '%s'" % (' '.join(extra_postargs))
|
|
306
|
+
log.info(display)
|
|
307
|
+
|
|
308
|
+
def single_compile(args):
|
|
309
|
+
obj, (src, ext) = args
|
|
310
|
+
if not _needs_build(obj, cc_args, extra_postargs, pp_opts):
|
|
311
|
+
return
|
|
312
|
+
|
|
313
|
+
# check if we are currently already processing the same object
|
|
314
|
+
# happens when using the same source in multiple extensions
|
|
315
|
+
while True:
|
|
316
|
+
# need explicit lock as there is no atomic check and add with GIL
|
|
317
|
+
with _global_lock:
|
|
318
|
+
# file not being worked on, start working
|
|
319
|
+
if obj not in _processing_files:
|
|
320
|
+
_processing_files.add(obj)
|
|
321
|
+
break
|
|
322
|
+
# wait for the processing to end
|
|
323
|
+
time.sleep(0.1)
|
|
324
|
+
|
|
325
|
+
try:
|
|
326
|
+
# retrieve slot from our #job semaphore and build
|
|
327
|
+
with _job_semaphore:
|
|
328
|
+
self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
|
|
329
|
+
finally:
|
|
330
|
+
# register being done processing
|
|
331
|
+
with _global_lock:
|
|
332
|
+
_processing_files.remove(obj)
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
if isinstance(self, FCompiler):
|
|
336
|
+
objects_to_build = list(build.keys())
|
|
337
|
+
f77_objects, other_objects = [], []
|
|
338
|
+
for obj in objects:
|
|
339
|
+
if obj in objects_to_build:
|
|
340
|
+
src, ext = build[obj]
|
|
341
|
+
if self.compiler_type=='absoft':
|
|
342
|
+
obj = cyg2win32(obj)
|
|
343
|
+
src = cyg2win32(src)
|
|
344
|
+
if Path(src).suffix.lower() in FORTRAN_COMMON_FIXED_EXTENSIONS \
|
|
345
|
+
and not has_f90_header(src):
|
|
346
|
+
f77_objects.append((obj, (src, ext)))
|
|
347
|
+
else:
|
|
348
|
+
other_objects.append((obj, (src, ext)))
|
|
349
|
+
|
|
350
|
+
# f77 objects can be built in parallel
|
|
351
|
+
build_items = f77_objects
|
|
352
|
+
# build f90 modules serial, module files are generated during
|
|
353
|
+
# compilation and may be used by files later in the list so the
|
|
354
|
+
# ordering is important
|
|
355
|
+
for o in other_objects:
|
|
356
|
+
single_compile(o)
|
|
357
|
+
else:
|
|
358
|
+
build_items = build.items()
|
|
359
|
+
|
|
360
|
+
if len(build) > 1 and jobs > 1:
|
|
361
|
+
# build parallel
|
|
362
|
+
from concurrent.futures import ThreadPoolExecutor
|
|
363
|
+
with ThreadPoolExecutor(jobs) as pool:
|
|
364
|
+
res = pool.map(single_compile, build_items)
|
|
365
|
+
list(res) # access result to raise errors
|
|
366
|
+
else:
|
|
367
|
+
# build serial
|
|
368
|
+
for o in build_items:
|
|
369
|
+
single_compile(o)
|
|
370
|
+
|
|
371
|
+
# Return *all* object filenames, not just the ones we just built.
|
|
372
|
+
return objects
|
|
373
|
+
|
|
374
|
+
replace_method(CCompiler, 'compile', CCompiler_compile)
|
|
375
|
+
|
|
376
|
+
def CCompiler_customize_cmd(self, cmd, ignore=()):
|
|
377
|
+
"""
|
|
378
|
+
Customize compiler using distutils command.
|
|
379
|
+
|
|
380
|
+
Parameters
|
|
381
|
+
----------
|
|
382
|
+
cmd : class instance
|
|
383
|
+
An instance inheriting from ``distutils.cmd.Command``.
|
|
384
|
+
ignore : sequence of str, optional
|
|
385
|
+
List of ``distutils.ccompiler.CCompiler`` commands (without ``'set_'``) that should not be
|
|
386
|
+
altered. Strings that are checked for are:
|
|
387
|
+
``('include_dirs', 'define', 'undef', 'libraries', 'library_dirs',
|
|
388
|
+
'rpath', 'link_objects')``.
|
|
389
|
+
|
|
390
|
+
Returns
|
|
391
|
+
-------
|
|
392
|
+
None
|
|
393
|
+
|
|
394
|
+
"""
|
|
395
|
+
log.info('customize %s using %s' % (self.__class__.__name__,
|
|
396
|
+
cmd.__class__.__name__))
|
|
397
|
+
|
|
398
|
+
if (
|
|
399
|
+
hasattr(self, 'compiler') and
|
|
400
|
+
'clang' in self.compiler[0] and
|
|
401
|
+
not (platform.machine() == 'arm64' and sys.platform == 'darwin')
|
|
402
|
+
):
|
|
403
|
+
# clang defaults to a non-strict floating error point model.
|
|
404
|
+
# However, '-ftrapping-math' is not currently supported (2023-04-08)
|
|
405
|
+
# for macosx_arm64.
|
|
406
|
+
# Since NumPy and most Python libs give warnings for these, override:
|
|
407
|
+
self.compiler.append('-ftrapping-math')
|
|
408
|
+
self.compiler_so.append('-ftrapping-math')
|
|
409
|
+
|
|
410
|
+
def allow(attr):
|
|
411
|
+
return getattr(cmd, attr, None) is not None and attr not in ignore
|
|
412
|
+
|
|
413
|
+
if allow('include_dirs'):
|
|
414
|
+
self.set_include_dirs(cmd.include_dirs)
|
|
415
|
+
if allow('define'):
|
|
416
|
+
for (name, value) in cmd.define:
|
|
417
|
+
self.define_macro(name, value)
|
|
418
|
+
if allow('undef'):
|
|
419
|
+
for macro in cmd.undef:
|
|
420
|
+
self.undefine_macro(macro)
|
|
421
|
+
if allow('libraries'):
|
|
422
|
+
self.set_libraries(self.libraries + cmd.libraries)
|
|
423
|
+
if allow('library_dirs'):
|
|
424
|
+
self.set_library_dirs(self.library_dirs + cmd.library_dirs)
|
|
425
|
+
if allow('rpath'):
|
|
426
|
+
self.set_runtime_library_dirs(cmd.rpath)
|
|
427
|
+
if allow('link_objects'):
|
|
428
|
+
self.set_link_objects(cmd.link_objects)
|
|
429
|
+
|
|
430
|
+
replace_method(CCompiler, 'customize_cmd', CCompiler_customize_cmd)
|
|
431
|
+
|
|
432
|
+
def _compiler_to_string(compiler):
|
|
433
|
+
props = []
|
|
434
|
+
mx = 0
|
|
435
|
+
keys = list(compiler.executables.keys())
|
|
436
|
+
for key in ['version', 'libraries', 'library_dirs',
|
|
437
|
+
'object_switch', 'compile_switch',
|
|
438
|
+
'include_dirs', 'define', 'undef', 'rpath', 'link_objects']:
|
|
439
|
+
if key not in keys:
|
|
440
|
+
keys.append(key)
|
|
441
|
+
for key in keys:
|
|
442
|
+
if hasattr(compiler, key):
|
|
443
|
+
v = getattr(compiler, key)
|
|
444
|
+
mx = max(mx, len(key))
|
|
445
|
+
props.append((key, repr(v)))
|
|
446
|
+
fmt = '%-' + repr(mx+1) + 's = %s'
|
|
447
|
+
lines = [fmt % prop for prop in props]
|
|
448
|
+
return '\n'.join(lines)
|
|
449
|
+
|
|
450
|
+
def CCompiler_show_customization(self):
|
|
451
|
+
"""
|
|
452
|
+
Print the compiler customizations to stdout.
|
|
453
|
+
|
|
454
|
+
Parameters
|
|
455
|
+
----------
|
|
456
|
+
None
|
|
457
|
+
|
|
458
|
+
Returns
|
|
459
|
+
-------
|
|
460
|
+
None
|
|
461
|
+
|
|
462
|
+
Notes
|
|
463
|
+
-----
|
|
464
|
+
Printing is only done if the distutils log threshold is < 2.
|
|
465
|
+
|
|
466
|
+
"""
|
|
467
|
+
try:
|
|
468
|
+
self.get_version()
|
|
469
|
+
except Exception:
|
|
470
|
+
pass
|
|
471
|
+
if log._global_log.threshold<2:
|
|
472
|
+
print('*'*80)
|
|
473
|
+
print(self.__class__)
|
|
474
|
+
print(_compiler_to_string(self))
|
|
475
|
+
print('*'*80)
|
|
476
|
+
|
|
477
|
+
replace_method(CCompiler, 'show_customization', CCompiler_show_customization)
|
|
478
|
+
|
|
479
|
+
def CCompiler_customize(self, dist, need_cxx=0):
|
|
480
|
+
"""
|
|
481
|
+
Do any platform-specific customization of a compiler instance.
|
|
482
|
+
|
|
483
|
+
This method calls ``distutils.sysconfig.customize_compiler`` for
|
|
484
|
+
platform-specific customization, as well as optionally remove a flag
|
|
485
|
+
to suppress spurious warnings in case C++ code is being compiled.
|
|
486
|
+
|
|
487
|
+
Parameters
|
|
488
|
+
----------
|
|
489
|
+
dist : object
|
|
490
|
+
This parameter is not used for anything.
|
|
491
|
+
need_cxx : bool, optional
|
|
492
|
+
Whether or not C++ has to be compiled. If so (True), the
|
|
493
|
+
``"-Wstrict-prototypes"`` option is removed to prevent spurious
|
|
494
|
+
warnings. Default is False.
|
|
495
|
+
|
|
496
|
+
Returns
|
|
497
|
+
-------
|
|
498
|
+
None
|
|
499
|
+
|
|
500
|
+
Notes
|
|
501
|
+
-----
|
|
502
|
+
All the default options used by distutils can be extracted with::
|
|
503
|
+
|
|
504
|
+
from distutils import sysconfig
|
|
505
|
+
sysconfig.get_config_vars('CC', 'CXX', 'OPT', 'BASECFLAGS',
|
|
506
|
+
'CCSHARED', 'LDSHARED', 'SO')
|
|
507
|
+
|
|
508
|
+
"""
|
|
509
|
+
# See FCompiler.customize for suggested usage.
|
|
510
|
+
log.info('customize %s' % (self.__class__.__name__))
|
|
511
|
+
customize_compiler(self)
|
|
512
|
+
if need_cxx:
|
|
513
|
+
# In general, distutils uses -Wstrict-prototypes, but this option is
|
|
514
|
+
# not valid for C++ code, only for C. Remove it if it's there to
|
|
515
|
+
# avoid a spurious warning on every compilation.
|
|
516
|
+
try:
|
|
517
|
+
self.compiler_so.remove('-Wstrict-prototypes')
|
|
518
|
+
except (AttributeError, ValueError):
|
|
519
|
+
pass
|
|
520
|
+
|
|
521
|
+
if hasattr(self, 'compiler') and 'cc' in self.compiler[0]:
|
|
522
|
+
if not self.compiler_cxx:
|
|
523
|
+
if self.compiler[0].startswith('gcc'):
|
|
524
|
+
a, b = 'gcc', 'g++'
|
|
525
|
+
else:
|
|
526
|
+
a, b = 'cc', 'c++'
|
|
527
|
+
self.compiler_cxx = [self.compiler[0].replace(a, b)]\
|
|
528
|
+
+ self.compiler[1:]
|
|
529
|
+
else:
|
|
530
|
+
if hasattr(self, 'compiler'):
|
|
531
|
+
log.warn("#### %s #######" % (self.compiler,))
|
|
532
|
+
if not hasattr(self, 'compiler_cxx'):
|
|
533
|
+
log.warn('Missing compiler_cxx fix for ' + self.__class__.__name__)
|
|
534
|
+
|
|
535
|
+
|
|
536
|
+
# check if compiler supports gcc style automatic dependencies
|
|
537
|
+
# run on every extension so skip for known good compilers
|
|
538
|
+
if hasattr(self, 'compiler') and ('gcc' in self.compiler[0] or
|
|
539
|
+
'g++' in self.compiler[0] or
|
|
540
|
+
'clang' in self.compiler[0]):
|
|
541
|
+
self._auto_depends = True
|
|
542
|
+
elif os.name == 'posix':
|
|
543
|
+
import tempfile
|
|
544
|
+
import shutil
|
|
545
|
+
tmpdir = tempfile.mkdtemp()
|
|
546
|
+
try:
|
|
547
|
+
fn = os.path.join(tmpdir, "file.c")
|
|
548
|
+
with open(fn, "w") as f:
|
|
549
|
+
f.write("int a;\n")
|
|
550
|
+
self.compile([fn], output_dir=tmpdir,
|
|
551
|
+
extra_preargs=['-MMD', '-MF', fn + '.d'])
|
|
552
|
+
self._auto_depends = True
|
|
553
|
+
except CompileError:
|
|
554
|
+
self._auto_depends = False
|
|
555
|
+
finally:
|
|
556
|
+
shutil.rmtree(tmpdir)
|
|
557
|
+
|
|
558
|
+
return
|
|
559
|
+
|
|
560
|
+
replace_method(CCompiler, 'customize', CCompiler_customize)
|
|
561
|
+
|
|
562
|
+
def simple_version_match(pat=r'[-.\d]+', ignore='', start=''):
|
|
563
|
+
"""
|
|
564
|
+
Simple matching of version numbers, for use in CCompiler and FCompiler.
|
|
565
|
+
|
|
566
|
+
Parameters
|
|
567
|
+
----------
|
|
568
|
+
pat : str, optional
|
|
569
|
+
A regular expression matching version numbers.
|
|
570
|
+
Default is ``r'[-.\\d]+'``.
|
|
571
|
+
ignore : str, optional
|
|
572
|
+
A regular expression matching patterns to skip.
|
|
573
|
+
Default is ``''``, in which case nothing is skipped.
|
|
574
|
+
start : str, optional
|
|
575
|
+
A regular expression matching the start of where to start looking
|
|
576
|
+
for version numbers.
|
|
577
|
+
Default is ``''``, in which case searching is started at the
|
|
578
|
+
beginning of the version string given to `matcher`.
|
|
579
|
+
|
|
580
|
+
Returns
|
|
581
|
+
-------
|
|
582
|
+
matcher : callable
|
|
583
|
+
A function that is appropriate to use as the ``.version_match``
|
|
584
|
+
attribute of a ``distutils.ccompiler.CCompiler`` class. `matcher` takes a single parameter,
|
|
585
|
+
a version string.
|
|
586
|
+
|
|
587
|
+
"""
|
|
588
|
+
def matcher(self, version_string):
|
|
589
|
+
# version string may appear in the second line, so getting rid
|
|
590
|
+
# of new lines:
|
|
591
|
+
version_string = version_string.replace('\n', ' ')
|
|
592
|
+
pos = 0
|
|
593
|
+
if start:
|
|
594
|
+
m = re.match(start, version_string)
|
|
595
|
+
if not m:
|
|
596
|
+
return None
|
|
597
|
+
pos = m.end()
|
|
598
|
+
while True:
|
|
599
|
+
m = re.search(pat, version_string[pos:])
|
|
600
|
+
if not m:
|
|
601
|
+
return None
|
|
602
|
+
if ignore and re.match(ignore, m.group(0)):
|
|
603
|
+
pos = m.end()
|
|
604
|
+
continue
|
|
605
|
+
break
|
|
606
|
+
return m.group(0)
|
|
607
|
+
return matcher
|
|
608
|
+
|
|
609
|
+
def CCompiler_get_version(self, force=False, ok_status=[0]):
|
|
610
|
+
"""
|
|
611
|
+
Return compiler version, or None if compiler is not available.
|
|
612
|
+
|
|
613
|
+
Parameters
|
|
614
|
+
----------
|
|
615
|
+
force : bool, optional
|
|
616
|
+
If True, force a new determination of the version, even if the
|
|
617
|
+
compiler already has a version attribute. Default is False.
|
|
618
|
+
ok_status : list of int, optional
|
|
619
|
+
The list of status values returned by the version look-up process
|
|
620
|
+
for which a version string is returned. If the status value is not
|
|
621
|
+
in `ok_status`, None is returned. Default is ``[0]``.
|
|
622
|
+
|
|
623
|
+
Returns
|
|
624
|
+
-------
|
|
625
|
+
version : str or None
|
|
626
|
+
Version string, in the format of ``distutils.version.LooseVersion``.
|
|
627
|
+
|
|
628
|
+
"""
|
|
629
|
+
if not force and hasattr(self, 'version'):
|
|
630
|
+
return self.version
|
|
631
|
+
self.find_executables()
|
|
632
|
+
try:
|
|
633
|
+
version_cmd = self.version_cmd
|
|
634
|
+
except AttributeError:
|
|
635
|
+
return None
|
|
636
|
+
if not version_cmd or not version_cmd[0]:
|
|
637
|
+
return None
|
|
638
|
+
try:
|
|
639
|
+
matcher = self.version_match
|
|
640
|
+
except AttributeError:
|
|
641
|
+
try:
|
|
642
|
+
pat = self.version_pattern
|
|
643
|
+
except AttributeError:
|
|
644
|
+
return None
|
|
645
|
+
def matcher(version_string):
|
|
646
|
+
m = re.match(pat, version_string)
|
|
647
|
+
if not m:
|
|
648
|
+
return None
|
|
649
|
+
version = m.group('version')
|
|
650
|
+
return version
|
|
651
|
+
|
|
652
|
+
try:
|
|
653
|
+
output = subprocess.check_output(version_cmd, stderr=subprocess.STDOUT)
|
|
654
|
+
except subprocess.CalledProcessError as exc:
|
|
655
|
+
output = exc.output
|
|
656
|
+
status = exc.returncode
|
|
657
|
+
except OSError:
|
|
658
|
+
# match the historical returns for a parent
|
|
659
|
+
# exception class caught by exec_command()
|
|
660
|
+
status = 127
|
|
661
|
+
output = b''
|
|
662
|
+
else:
|
|
663
|
+
# output isn't actually a filepath but we do this
|
|
664
|
+
# for now to match previous distutils behavior
|
|
665
|
+
output = filepath_from_subprocess_output(output)
|
|
666
|
+
status = 0
|
|
667
|
+
|
|
668
|
+
version = None
|
|
669
|
+
if status in ok_status:
|
|
670
|
+
version = matcher(output)
|
|
671
|
+
if version:
|
|
672
|
+
version = LooseVersion(version)
|
|
673
|
+
self.version = version
|
|
674
|
+
return version
|
|
675
|
+
|
|
676
|
+
replace_method(CCompiler, 'get_version', CCompiler_get_version)
|
|
677
|
+
|
|
678
|
+
def CCompiler_cxx_compiler(self):
|
|
679
|
+
"""
|
|
680
|
+
Return the C++ compiler.
|
|
681
|
+
|
|
682
|
+
Parameters
|
|
683
|
+
----------
|
|
684
|
+
None
|
|
685
|
+
|
|
686
|
+
Returns
|
|
687
|
+
-------
|
|
688
|
+
cxx : class instance
|
|
689
|
+
The C++ compiler, as a ``distutils.ccompiler.CCompiler`` instance.
|
|
690
|
+
|
|
691
|
+
"""
|
|
692
|
+
if self.compiler_type in ('msvc', 'intelw', 'intelemw'):
|
|
693
|
+
return self
|
|
694
|
+
|
|
695
|
+
cxx = copy(self)
|
|
696
|
+
cxx.compiler_cxx = cxx.compiler_cxx
|
|
697
|
+
cxx.compiler_so = [cxx.compiler_cxx[0]] + \
|
|
698
|
+
sanitize_cxx_flags(cxx.compiler_so[1:])
|
|
699
|
+
if (sys.platform.startswith(('aix', 'os400')) and
|
|
700
|
+
'ld_so_aix' in cxx.linker_so[0]):
|
|
701
|
+
# AIX needs the ld_so_aix script included with Python
|
|
702
|
+
cxx.linker_so = [cxx.linker_so[0], cxx.compiler_cxx[0]] \
|
|
703
|
+
+ cxx.linker_so[2:]
|
|
704
|
+
if sys.platform.startswith('os400'):
|
|
705
|
+
#This is required by i 7.4 and prievous for PRId64 in printf() call.
|
|
706
|
+
cxx.compiler_so.append('-D__STDC_FORMAT_MACROS')
|
|
707
|
+
#This a bug of gcc10.3, which failed to handle the TLS init.
|
|
708
|
+
cxx.compiler_so.append('-fno-extern-tls-init')
|
|
709
|
+
cxx.linker_so.append('-fno-extern-tls-init')
|
|
710
|
+
else:
|
|
711
|
+
cxx.linker_so = [cxx.compiler_cxx[0]] + cxx.linker_so[1:]
|
|
712
|
+
return cxx
|
|
713
|
+
|
|
714
|
+
replace_method(CCompiler, 'cxx_compiler', CCompiler_cxx_compiler)
|
|
715
|
+
|
|
716
|
+
compiler_class['intel'] = ('intelccompiler', 'IntelCCompiler',
|
|
717
|
+
"Intel C Compiler for 32-bit applications")
|
|
718
|
+
compiler_class['intele'] = ('intelccompiler', 'IntelItaniumCCompiler',
|
|
719
|
+
"Intel C Itanium Compiler for Itanium-based applications")
|
|
720
|
+
compiler_class['intelem'] = ('intelccompiler', 'IntelEM64TCCompiler',
|
|
721
|
+
"Intel C Compiler for 64-bit applications")
|
|
722
|
+
compiler_class['intelw'] = ('intelccompiler', 'IntelCCompilerW',
|
|
723
|
+
"Intel C Compiler for 32-bit applications on Windows")
|
|
724
|
+
compiler_class['intelemw'] = ('intelccompiler', 'IntelEM64TCCompilerW',
|
|
725
|
+
"Intel C Compiler for 64-bit applications on Windows")
|
|
726
|
+
compiler_class['pathcc'] = ('pathccompiler', 'PathScaleCCompiler',
|
|
727
|
+
"PathScale Compiler for SiCortex-based applications")
|
|
728
|
+
compiler_class['arm'] = ('armccompiler', 'ArmCCompiler',
|
|
729
|
+
"Arm C Compiler")
|
|
730
|
+
compiler_class['fujitsu'] = ('fujitsuccompiler', 'FujitsuCCompiler',
|
|
731
|
+
"Fujitsu C Compiler")
|
|
732
|
+
|
|
733
|
+
ccompiler._default_compilers += (('linux.*', 'intel'),
|
|
734
|
+
('linux.*', 'intele'),
|
|
735
|
+
('linux.*', 'intelem'),
|
|
736
|
+
('linux.*', 'pathcc'),
|
|
737
|
+
('nt', 'intelw'),
|
|
738
|
+
('nt', 'intelemw'))
|
|
739
|
+
|
|
740
|
+
if sys.platform == 'win32':
|
|
741
|
+
compiler_class['mingw32'] = ('mingw32ccompiler', 'Mingw32CCompiler',
|
|
742
|
+
"Mingw32 port of GNU C Compiler for Win32"\
|
|
743
|
+
"(for MSC built Python)")
|
|
744
|
+
if mingw32():
|
|
745
|
+
# On windows platforms, we want to default to mingw32 (gcc)
|
|
746
|
+
# because msvc can't build blitz stuff.
|
|
747
|
+
log.info('Setting mingw32 as default compiler for nt.')
|
|
748
|
+
ccompiler._default_compilers = (('nt', 'mingw32'),) \
|
|
749
|
+
+ ccompiler._default_compilers
|
|
750
|
+
|
|
751
|
+
|
|
752
|
+
_distutils_new_compiler = new_compiler
|
|
753
|
+
def new_compiler (plat=None,
|
|
754
|
+
compiler=None,
|
|
755
|
+
verbose=None,
|
|
756
|
+
dry_run=0,
|
|
757
|
+
force=0):
|
|
758
|
+
# Try first C compilers from numpy.distutils.
|
|
759
|
+
if verbose is None:
|
|
760
|
+
verbose = log.get_threshold() <= log.INFO
|
|
761
|
+
if plat is None:
|
|
762
|
+
plat = os.name
|
|
763
|
+
try:
|
|
764
|
+
if compiler is None:
|
|
765
|
+
compiler = get_default_compiler(plat)
|
|
766
|
+
(module_name, class_name, long_description) = compiler_class[compiler]
|
|
767
|
+
except KeyError:
|
|
768
|
+
msg = "don't know how to compile C/C++ code on platform '%s'" % plat
|
|
769
|
+
if compiler is not None:
|
|
770
|
+
msg = msg + " with '%s' compiler" % compiler
|
|
771
|
+
raise DistutilsPlatformError(msg)
|
|
772
|
+
module_name = "numpy.distutils." + module_name
|
|
773
|
+
try:
|
|
774
|
+
__import__ (module_name)
|
|
775
|
+
except ImportError as e:
|
|
776
|
+
msg = str(e)
|
|
777
|
+
log.info('%s in numpy.distutils; trying from distutils',
|
|
778
|
+
str(msg))
|
|
779
|
+
module_name = module_name[6:]
|
|
780
|
+
try:
|
|
781
|
+
__import__(module_name)
|
|
782
|
+
except ImportError as e:
|
|
783
|
+
msg = str(e)
|
|
784
|
+
raise DistutilsModuleError("can't compile C/C++ code: unable to load "
|
|
785
|
+
"module '%s'" % module_name)
|
|
786
|
+
try:
|
|
787
|
+
module = sys.modules[module_name]
|
|
788
|
+
klass = vars(module)[class_name]
|
|
789
|
+
except KeyError:
|
|
790
|
+
raise DistutilsModuleError(("can't compile C/C++ code: unable to find "
|
|
791
|
+
"class '%s' in module '%s'") % (class_name, module_name))
|
|
792
|
+
compiler = klass(None, dry_run, force)
|
|
793
|
+
compiler.verbose = verbose
|
|
794
|
+
log.debug('new_compiler returns %s' % (klass))
|
|
795
|
+
return compiler
|
|
796
|
+
|
|
797
|
+
ccompiler.new_compiler = new_compiler
|
|
798
|
+
|
|
799
|
+
_distutils_gen_lib_options = gen_lib_options
|
|
800
|
+
def gen_lib_options(compiler, library_dirs, runtime_library_dirs, libraries):
|
|
801
|
+
# the version of this function provided by CPython allows the following
|
|
802
|
+
# to return lists, which are unpacked automatically:
|
|
803
|
+
# - compiler.runtime_library_dir_option
|
|
804
|
+
# our version extends the behavior to:
|
|
805
|
+
# - compiler.library_dir_option
|
|
806
|
+
# - compiler.library_option
|
|
807
|
+
# - compiler.find_library_file
|
|
808
|
+
r = _distutils_gen_lib_options(compiler, library_dirs,
|
|
809
|
+
runtime_library_dirs, libraries)
|
|
810
|
+
lib_opts = []
|
|
811
|
+
for i in r:
|
|
812
|
+
if is_sequence(i):
|
|
813
|
+
lib_opts.extend(list(i))
|
|
814
|
+
else:
|
|
815
|
+
lib_opts.append(i)
|
|
816
|
+
return lib_opts
|
|
817
|
+
ccompiler.gen_lib_options = gen_lib_options
|
|
818
|
+
|
|
819
|
+
# Also fix up the various compiler modules, which do
|
|
820
|
+
# from distutils.ccompiler import gen_lib_options
|
|
821
|
+
# Don't bother with mwerks, as we don't support Classic Mac.
|
|
822
|
+
for _cc in ['msvc9', 'msvc', '_msvc', 'bcpp', 'cygwinc', 'emxc', 'unixc']:
|
|
823
|
+
_m = sys.modules.get('distutils.' + _cc + 'compiler')
|
|
824
|
+
if _m is not None:
|
|
825
|
+
setattr(_m, 'gen_lib_options', gen_lib_options)
|
|
826
|
+
|