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,182 @@
|
|
|
1
|
+
""" Test functions for linalg module
|
|
2
|
+
"""
|
|
3
|
+
|
|
4
|
+
import pytest
|
|
5
|
+
|
|
6
|
+
import numpy as np
|
|
7
|
+
from numpy import arange, array, dot, float64, linalg, transpose
|
|
8
|
+
from numpy.testing import (
|
|
9
|
+
assert_,
|
|
10
|
+
assert_array_almost_equal,
|
|
11
|
+
assert_array_equal,
|
|
12
|
+
assert_array_less,
|
|
13
|
+
assert_equal,
|
|
14
|
+
assert_raises,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class TestRegression:
|
|
19
|
+
|
|
20
|
+
def test_eig_build(self):
|
|
21
|
+
# Ticket #652
|
|
22
|
+
rva = array([1.03221168e+02 + 0.j,
|
|
23
|
+
-1.91843603e+01 + 0.j,
|
|
24
|
+
-6.04004526e-01 + 15.84422474j,
|
|
25
|
+
-6.04004526e-01 - 15.84422474j,
|
|
26
|
+
-1.13692929e+01 + 0.j,
|
|
27
|
+
-6.57612485e-01 + 10.41755503j,
|
|
28
|
+
-6.57612485e-01 - 10.41755503j,
|
|
29
|
+
1.82126812e+01 + 0.j,
|
|
30
|
+
1.06011014e+01 + 0.j,
|
|
31
|
+
7.80732773e+00 + 0.j,
|
|
32
|
+
-7.65390898e-01 + 0.j,
|
|
33
|
+
1.51971555e-15 + 0.j,
|
|
34
|
+
-1.51308713e-15 + 0.j])
|
|
35
|
+
a = arange(13 * 13, dtype=float64)
|
|
36
|
+
a = a.reshape((13, 13))
|
|
37
|
+
a = a % 17
|
|
38
|
+
va, ve = linalg.eig(a)
|
|
39
|
+
va.sort()
|
|
40
|
+
rva.sort()
|
|
41
|
+
assert_array_almost_equal(va, rva)
|
|
42
|
+
|
|
43
|
+
def test_eigh_build(self):
|
|
44
|
+
# Ticket 662.
|
|
45
|
+
rvals = [68.60568999, 89.57756725, 106.67185574]
|
|
46
|
+
|
|
47
|
+
cov = array([[77.70273908, 3.51489954, 15.64602427],
|
|
48
|
+
[ 3.51489954, 88.97013878, -1.07431931],
|
|
49
|
+
[15.64602427, -1.07431931, 98.18223512]])
|
|
50
|
+
|
|
51
|
+
vals, vecs = linalg.eigh(cov)
|
|
52
|
+
assert_array_almost_equal(vals, rvals)
|
|
53
|
+
|
|
54
|
+
def test_svd_build(self):
|
|
55
|
+
# Ticket 627.
|
|
56
|
+
a = array([[0., 1.], [1., 1.], [2., 1.], [3., 1.]])
|
|
57
|
+
m, n = a.shape
|
|
58
|
+
u, s, vh = linalg.svd(a)
|
|
59
|
+
|
|
60
|
+
b = dot(transpose(u[:, n:]), a)
|
|
61
|
+
|
|
62
|
+
assert_array_almost_equal(b, np.zeros((2, 2)))
|
|
63
|
+
|
|
64
|
+
def test_norm_vector_badarg(self):
|
|
65
|
+
# Regression for #786: Frobenius norm for vectors raises
|
|
66
|
+
# ValueError.
|
|
67
|
+
assert_raises(ValueError, linalg.norm, array([1., 2., 3.]), 'fro')
|
|
68
|
+
|
|
69
|
+
def test_lapack_endian(self):
|
|
70
|
+
# For bug #1482
|
|
71
|
+
a = array([[ 5.7998084, -2.1825367],
|
|
72
|
+
[-2.1825367, 9.85910595]], dtype='>f8')
|
|
73
|
+
b = array(a, dtype='<f8')
|
|
74
|
+
|
|
75
|
+
ap = linalg.cholesky(a)
|
|
76
|
+
bp = linalg.cholesky(b)
|
|
77
|
+
assert_array_equal(ap, bp)
|
|
78
|
+
|
|
79
|
+
def test_large_svd_32bit(self):
|
|
80
|
+
# See gh-4442, 64bit would require very large/slow matrices.
|
|
81
|
+
x = np.eye(1000, 66)
|
|
82
|
+
np.linalg.svd(x)
|
|
83
|
+
|
|
84
|
+
def test_svd_no_uv(self):
|
|
85
|
+
# gh-4733
|
|
86
|
+
for shape in (3, 4), (4, 4), (4, 3):
|
|
87
|
+
for t in float, complex:
|
|
88
|
+
a = np.ones(shape, dtype=t)
|
|
89
|
+
w = linalg.svd(a, compute_uv=False)
|
|
90
|
+
c = np.count_nonzero(np.absolute(w) > 0.5)
|
|
91
|
+
assert_equal(c, 1)
|
|
92
|
+
assert_equal(np.linalg.matrix_rank(a), 1)
|
|
93
|
+
assert_array_less(1, np.linalg.norm(a, ord=2))
|
|
94
|
+
|
|
95
|
+
w_svdvals = linalg.svdvals(a)
|
|
96
|
+
assert_array_almost_equal(w, w_svdvals)
|
|
97
|
+
|
|
98
|
+
def test_norm_object_array(self):
|
|
99
|
+
# gh-7575
|
|
100
|
+
testvector = np.array([np.array([0, 1]), 0, 0], dtype=object)
|
|
101
|
+
|
|
102
|
+
norm = linalg.norm(testvector)
|
|
103
|
+
assert_array_equal(norm, [0, 1])
|
|
104
|
+
assert_(norm.dtype == np.dtype('float64'))
|
|
105
|
+
|
|
106
|
+
norm = linalg.norm(testvector, ord=1)
|
|
107
|
+
assert_array_equal(norm, [0, 1])
|
|
108
|
+
assert_(norm.dtype != np.dtype('float64'))
|
|
109
|
+
|
|
110
|
+
norm = linalg.norm(testvector, ord=2)
|
|
111
|
+
assert_array_equal(norm, [0, 1])
|
|
112
|
+
assert_(norm.dtype == np.dtype('float64'))
|
|
113
|
+
|
|
114
|
+
assert_raises(ValueError, linalg.norm, testvector, ord='fro')
|
|
115
|
+
assert_raises(ValueError, linalg.norm, testvector, ord='nuc')
|
|
116
|
+
assert_raises(ValueError, linalg.norm, testvector, ord=np.inf)
|
|
117
|
+
assert_raises(ValueError, linalg.norm, testvector, ord=-np.inf)
|
|
118
|
+
assert_raises(ValueError, linalg.norm, testvector, ord=0)
|
|
119
|
+
assert_raises(ValueError, linalg.norm, testvector, ord=-1)
|
|
120
|
+
assert_raises(ValueError, linalg.norm, testvector, ord=-2)
|
|
121
|
+
|
|
122
|
+
testmatrix = np.array([[np.array([0, 1]), 0, 0],
|
|
123
|
+
[0, 0, 0]], dtype=object)
|
|
124
|
+
|
|
125
|
+
norm = linalg.norm(testmatrix)
|
|
126
|
+
assert_array_equal(norm, [0, 1])
|
|
127
|
+
assert_(norm.dtype == np.dtype('float64'))
|
|
128
|
+
|
|
129
|
+
norm = linalg.norm(testmatrix, ord='fro')
|
|
130
|
+
assert_array_equal(norm, [0, 1])
|
|
131
|
+
assert_(norm.dtype == np.dtype('float64'))
|
|
132
|
+
|
|
133
|
+
assert_raises(TypeError, linalg.norm, testmatrix, ord='nuc')
|
|
134
|
+
assert_raises(ValueError, linalg.norm, testmatrix, ord=np.inf)
|
|
135
|
+
assert_raises(ValueError, linalg.norm, testmatrix, ord=-np.inf)
|
|
136
|
+
assert_raises(ValueError, linalg.norm, testmatrix, ord=0)
|
|
137
|
+
assert_raises(ValueError, linalg.norm, testmatrix, ord=1)
|
|
138
|
+
assert_raises(ValueError, linalg.norm, testmatrix, ord=-1)
|
|
139
|
+
assert_raises(TypeError, linalg.norm, testmatrix, ord=2)
|
|
140
|
+
assert_raises(TypeError, linalg.norm, testmatrix, ord=-2)
|
|
141
|
+
assert_raises(ValueError, linalg.norm, testmatrix, ord=3)
|
|
142
|
+
|
|
143
|
+
def test_lstsq_complex_larger_rhs(self):
|
|
144
|
+
# gh-9891
|
|
145
|
+
size = 20
|
|
146
|
+
n_rhs = 70
|
|
147
|
+
G = np.random.randn(size, size) + 1j * np.random.randn(size, size)
|
|
148
|
+
u = np.random.randn(size, n_rhs) + 1j * np.random.randn(size, n_rhs)
|
|
149
|
+
b = G.dot(u)
|
|
150
|
+
# This should work without segmentation fault.
|
|
151
|
+
u_lstsq, res, rank, sv = linalg.lstsq(G, b, rcond=None)
|
|
152
|
+
# check results just in case
|
|
153
|
+
assert_array_almost_equal(u_lstsq, u)
|
|
154
|
+
|
|
155
|
+
@pytest.mark.parametrize("upper", [True, False])
|
|
156
|
+
def test_cholesky_empty_array(self, upper):
|
|
157
|
+
# gh-25840 - upper=True hung before.
|
|
158
|
+
res = np.linalg.cholesky(np.zeros((0, 0)), upper=upper)
|
|
159
|
+
assert res.size == 0
|
|
160
|
+
|
|
161
|
+
@pytest.mark.parametrize("rtol", [0.0, [0.0] * 4, np.zeros((4,))])
|
|
162
|
+
def test_matrix_rank_rtol_argument(self, rtol):
|
|
163
|
+
# gh-25877
|
|
164
|
+
x = np.zeros((4, 3, 2))
|
|
165
|
+
res = np.linalg.matrix_rank(x, rtol=rtol)
|
|
166
|
+
assert res.shape == (4,)
|
|
167
|
+
|
|
168
|
+
@pytest.mark.thread_unsafe(reason="test is already testing threads with openblas")
|
|
169
|
+
def test_openblas_threading(self):
|
|
170
|
+
# gh-27036
|
|
171
|
+
# Test whether matrix multiplication involving a large matrix always
|
|
172
|
+
# gives the same (correct) answer
|
|
173
|
+
x = np.arange(500000, dtype=np.float64)
|
|
174
|
+
src = np.vstack((x, -10 * x)).T
|
|
175
|
+
matrix = np.array([[0, 1], [1, 0]])
|
|
176
|
+
expected = np.vstack((-10 * x, x)).T # src @ matrix
|
|
177
|
+
for i in range(200):
|
|
178
|
+
result = src @ matrix
|
|
179
|
+
mismatches = (~np.isclose(result, expected)).sum()
|
|
180
|
+
if mismatches != 0:
|
|
181
|
+
assert False, ("unexpected result from matmul, "
|
|
182
|
+
"probably due to OpenBLAS threading issues")
|
numpy/ma/API_CHANGES.txt
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
.. -*- rest -*-
|
|
2
|
+
|
|
3
|
+
==================================================
|
|
4
|
+
API changes in the new masked array implementation
|
|
5
|
+
==================================================
|
|
6
|
+
|
|
7
|
+
Masked arrays are subclasses of ndarray
|
|
8
|
+
---------------------------------------
|
|
9
|
+
|
|
10
|
+
Contrary to the original implementation, masked arrays are now regular
|
|
11
|
+
ndarrays::
|
|
12
|
+
|
|
13
|
+
>>> x = masked_array([1,2,3],mask=[0,0,1])
|
|
14
|
+
>>> print isinstance(x, numpy.ndarray)
|
|
15
|
+
True
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
``_data`` returns a view of the masked array
|
|
19
|
+
--------------------------------------------
|
|
20
|
+
|
|
21
|
+
Masked arrays are composed of a ``_data`` part and a ``_mask``. Accessing the
|
|
22
|
+
``_data`` part will return a regular ndarray or any of its subclass, depending
|
|
23
|
+
on the initial data::
|
|
24
|
+
|
|
25
|
+
>>> x = masked_array(numpy.matrix([[1,2],[3,4]]),mask=[[0,0],[0,1]])
|
|
26
|
+
>>> print x._data
|
|
27
|
+
[[1 2]
|
|
28
|
+
[3 4]]
|
|
29
|
+
>>> print type(x._data)
|
|
30
|
+
<class 'numpy.matrixlib.defmatrix.matrix'>
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
In practice, ``_data`` is implemented as a property, not as an attribute.
|
|
34
|
+
Therefore, you cannot access it directly, and some simple tests such as the
|
|
35
|
+
following one will fail::
|
|
36
|
+
|
|
37
|
+
>>>x._data is x._data
|
|
38
|
+
False
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
``filled(x)`` can return a subclass of ndarray
|
|
42
|
+
----------------------------------------------
|
|
43
|
+
The function ``filled(a)`` returns an array of the same type as ``a._data``::
|
|
44
|
+
|
|
45
|
+
>>> x = masked_array(numpy.matrix([[1,2],[3,4]]),mask=[[0,0],[0,1]])
|
|
46
|
+
>>> y = filled(x)
|
|
47
|
+
>>> print type(y)
|
|
48
|
+
<class 'numpy.matrixlib.defmatrix.matrix'>
|
|
49
|
+
>>> print y
|
|
50
|
+
matrix([[ 1, 2],
|
|
51
|
+
[ 3, 999999]])
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
``put``, ``putmask`` behave like their ndarray counterparts
|
|
55
|
+
-----------------------------------------------------------
|
|
56
|
+
|
|
57
|
+
Previously, ``putmask`` was used like this::
|
|
58
|
+
|
|
59
|
+
mask = [False,True,True]
|
|
60
|
+
x = array([1,4,7],mask=mask)
|
|
61
|
+
putmask(x,mask,[3])
|
|
62
|
+
|
|
63
|
+
which translated to::
|
|
64
|
+
|
|
65
|
+
x[~mask] = [3]
|
|
66
|
+
|
|
67
|
+
(Note that a ``True``-value in a mask suppresses a value.)
|
|
68
|
+
|
|
69
|
+
In other words, the mask had the same length as ``x``, whereas
|
|
70
|
+
``values`` had ``sum(~mask)`` elements.
|
|
71
|
+
|
|
72
|
+
Now, the behaviour is similar to that of ``ndarray.putmask``, where
|
|
73
|
+
the mask and the values are both the same length as ``x``, i.e.
|
|
74
|
+
|
|
75
|
+
::
|
|
76
|
+
|
|
77
|
+
putmask(x,mask,[3,0,0])
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
``fill_value`` is a property
|
|
81
|
+
----------------------------
|
|
82
|
+
|
|
83
|
+
``fill_value`` is no longer a method, but a property::
|
|
84
|
+
|
|
85
|
+
>>> print x.fill_value
|
|
86
|
+
999999
|
|
87
|
+
|
|
88
|
+
``cumsum`` and ``cumprod`` ignore missing values
|
|
89
|
+
------------------------------------------------
|
|
90
|
+
|
|
91
|
+
Missing values are assumed to be the identity element, i.e. 0 for
|
|
92
|
+
``cumsum`` and 1 for ``cumprod``::
|
|
93
|
+
|
|
94
|
+
>>> x = N.ma.array([1,2,3,4],mask=[False,True,False,False])
|
|
95
|
+
>>> print x
|
|
96
|
+
[1 -- 3 4]
|
|
97
|
+
>>> print x.cumsum()
|
|
98
|
+
[1 -- 4 8]
|
|
99
|
+
>> print x.cumprod()
|
|
100
|
+
[1 -- 3 12]
|
|
101
|
+
|
|
102
|
+
``bool(x)`` raises a ValueError
|
|
103
|
+
-------------------------------
|
|
104
|
+
|
|
105
|
+
Masked arrays now behave like regular ``ndarrays``, in that they cannot be
|
|
106
|
+
converted to booleans:
|
|
107
|
+
|
|
108
|
+
::
|
|
109
|
+
|
|
110
|
+
>>> x = N.ma.array([1,2,3])
|
|
111
|
+
>>> bool(x)
|
|
112
|
+
Traceback (most recent call last):
|
|
113
|
+
File "<stdin>", line 1, in <module>
|
|
114
|
+
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
==================================
|
|
118
|
+
New features (non exhaustive list)
|
|
119
|
+
==================================
|
|
120
|
+
|
|
121
|
+
``mr_``
|
|
122
|
+
-------
|
|
123
|
+
|
|
124
|
+
``mr_`` mimics the behavior of ``r_`` for masked arrays::
|
|
125
|
+
|
|
126
|
+
>>> np.ma.mr_[3,4,5]
|
|
127
|
+
masked_array(data = [3 4 5],
|
|
128
|
+
mask = False,
|
|
129
|
+
fill_value=999999)
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
``anom``
|
|
133
|
+
--------
|
|
134
|
+
|
|
135
|
+
The ``anom`` method returns the deviations from the average (anomalies).
|
numpy/ma/LICENSE
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
* Copyright (c) 2006, University of Georgia and Pierre G.F. Gerard-Marchant
|
|
2
|
+
* All rights reserved.
|
|
3
|
+
* Redistribution and use in source and binary forms, with or without
|
|
4
|
+
* modification, are permitted provided that the following conditions are met:
|
|
5
|
+
*
|
|
6
|
+
* * Redistributions of source code must retain the above copyright
|
|
7
|
+
* notice, this list of conditions and the following disclaimer.
|
|
8
|
+
* * Redistributions in binary form must reproduce the above copyright
|
|
9
|
+
* notice, this list of conditions and the following disclaimer in the
|
|
10
|
+
* documentation and/or other materials provided with the distribution.
|
|
11
|
+
* * Neither the name of the University of Georgia nor the
|
|
12
|
+
* names of its contributors may be used to endorse or promote products
|
|
13
|
+
* derived from this software without specific prior written permission.
|
|
14
|
+
*
|
|
15
|
+
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
|
|
16
|
+
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
17
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
18
|
+
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
|
19
|
+
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
20
|
+
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
21
|
+
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
22
|
+
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
23
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
24
|
+
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
numpy/ma/README.rst
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
==================================
|
|
2
|
+
A guide to masked arrays in NumPy
|
|
3
|
+
==================================
|
|
4
|
+
|
|
5
|
+
.. Contents::
|
|
6
|
+
|
|
7
|
+
See http://www.scipy.org/scipy/numpy/wiki/MaskedArray (dead link)
|
|
8
|
+
for updates of this document.
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
History
|
|
12
|
+
-------
|
|
13
|
+
|
|
14
|
+
As a regular user of MaskedArray, I (Pierre G.F. Gerard-Marchant) became
|
|
15
|
+
increasingly frustrated with the subclassing of masked arrays (even if
|
|
16
|
+
I can only blame my inexperience). I needed to develop a class of arrays
|
|
17
|
+
that could store some additional information along with numerical values,
|
|
18
|
+
while keeping the possibility for missing data (picture storing a series
|
|
19
|
+
of dates along with measurements, what would later become the `TimeSeries
|
|
20
|
+
Scikit <http://projects.scipy.org/scipy/scikits/wiki/TimeSeries>`__
|
|
21
|
+
(dead link).
|
|
22
|
+
|
|
23
|
+
I started to implement such a class, but then quickly realized that
|
|
24
|
+
any additional information disappeared when processing these subarrays
|
|
25
|
+
(for example, adding a constant value to a subarray would erase its
|
|
26
|
+
dates). I ended up writing the equivalent of *numpy.core.ma* for my
|
|
27
|
+
particular class, ufuncs included. Everything went fine until I needed to
|
|
28
|
+
subclass my new class, when more problems showed up: some attributes of
|
|
29
|
+
the new subclass were lost during processing. I identified the culprit as
|
|
30
|
+
MaskedArray, which returns masked ndarrays when I expected masked
|
|
31
|
+
arrays of my class. I was preparing myself to rewrite *numpy.core.ma*
|
|
32
|
+
when I forced myself to learn how to subclass ndarrays. As I became more
|
|
33
|
+
familiar with the *__new__* and *__array_finalize__* methods,
|
|
34
|
+
I started to wonder why masked arrays were objects, and not ndarrays,
|
|
35
|
+
and whether it wouldn't be more convenient for subclassing if they did
|
|
36
|
+
behave like regular ndarrays.
|
|
37
|
+
|
|
38
|
+
The new *maskedarray* is what I eventually come up with. The
|
|
39
|
+
main differences with the initial *numpy.core.ma* package are
|
|
40
|
+
that MaskedArray is now a subclass of *ndarray* and that the
|
|
41
|
+
*_data* section can now be any subclass of *ndarray*. Apart from a
|
|
42
|
+
couple of issues listed below, the behavior of the new MaskedArray
|
|
43
|
+
class reproduces the old one. Initially the *maskedarray*
|
|
44
|
+
implementation was marginally slower than *numpy.ma* in some areas,
|
|
45
|
+
but work is underway to speed it up; the expectation is that it can be
|
|
46
|
+
made substantially faster than the present *numpy.ma*.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
Note that if the subclass has some special methods and
|
|
50
|
+
attributes, they are not propagated to the masked version:
|
|
51
|
+
this would require a modification of the *__getattribute__*
|
|
52
|
+
method (first trying *ndarray.__getattribute__*, then trying
|
|
53
|
+
*self._data.__getattribute__* if an exception is raised in the first
|
|
54
|
+
place), which really slows things down.
|
|
55
|
+
|
|
56
|
+
Main differences
|
|
57
|
+
----------------
|
|
58
|
+
|
|
59
|
+
* The *_data* part of the masked array can be any subclass of ndarray (but not recarray, cf below).
|
|
60
|
+
* *fill_value* is now a property, not a function.
|
|
61
|
+
* in the majority of cases, the mask is forced to *nomask* when no value is actually masked. A notable exception is when a masked array (with no masked values) has just been unpickled.
|
|
62
|
+
* I got rid of the *share_mask* flag, I never understood its purpose.
|
|
63
|
+
* *put*, *putmask* and *take* now mimic the ndarray methods, to avoid unpleasant surprises. Moreover, *put* and *putmask* both update the mask when needed. * if *a* is a masked array, *bool(a)* raises a *ValueError*, as it does with ndarrays.
|
|
64
|
+
* in the same way, the comparison of two masked arrays is a masked array, not a boolean
|
|
65
|
+
* *filled(a)* returns an array of the same subclass as *a._data*, and no test is performed on whether it is contiguous or not.
|
|
66
|
+
* the mask is always printed, even if it's *nomask*, which makes things easy (for me at least) to remember that a masked array is used.
|
|
67
|
+
* *cumsum* works as if the *_data* array was filled with 0. The mask is preserved, but not updated.
|
|
68
|
+
* *cumprod* works as if the *_data* array was filled with 1. The mask is preserved, but not updated.
|
|
69
|
+
|
|
70
|
+
New features
|
|
71
|
+
------------
|
|
72
|
+
|
|
73
|
+
This list is non-exhaustive...
|
|
74
|
+
|
|
75
|
+
* the *mr_* function mimics *r_* for masked arrays.
|
|
76
|
+
* the *anom* method returns the anomalies (deviations from the average)
|
|
77
|
+
|
|
78
|
+
Using the new package with numpy.core.ma
|
|
79
|
+
----------------------------------------
|
|
80
|
+
|
|
81
|
+
I tried to make sure that the new package can understand old masked
|
|
82
|
+
arrays. Unfortunately, there's no upward compatibility.
|
|
83
|
+
|
|
84
|
+
For example:
|
|
85
|
+
|
|
86
|
+
>>> import numpy.core.ma as old_ma
|
|
87
|
+
>>> import maskedarray as new_ma
|
|
88
|
+
>>> x = old_ma.array([1,2,3,4,5], mask=[0,0,1,0,0])
|
|
89
|
+
>>> x
|
|
90
|
+
array(data =
|
|
91
|
+
[ 1 2 999999 4 5],
|
|
92
|
+
mask =
|
|
93
|
+
[False False True False False],
|
|
94
|
+
fill_value=999999)
|
|
95
|
+
>>> y = new_ma.array([1,2,3,4,5], mask=[0,0,1,0,0])
|
|
96
|
+
>>> y
|
|
97
|
+
array(data = [1 2 -- 4 5],
|
|
98
|
+
mask = [False False True False False],
|
|
99
|
+
fill_value=999999)
|
|
100
|
+
>>> x==y
|
|
101
|
+
array(data =
|
|
102
|
+
[True True True True True],
|
|
103
|
+
mask =
|
|
104
|
+
[False False True False False],
|
|
105
|
+
fill_value=?)
|
|
106
|
+
>>> old_ma.getmask(x) == new_ma.getmask(x)
|
|
107
|
+
array([True, True, True, True, True])
|
|
108
|
+
>>> old_ma.getmask(y) == new_ma.getmask(y)
|
|
109
|
+
array([True, True, False, True, True])
|
|
110
|
+
>>> old_ma.getmask(y)
|
|
111
|
+
False
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
Using maskedarray with matplotlib
|
|
115
|
+
---------------------------------
|
|
116
|
+
|
|
117
|
+
Starting with matplotlib 0.91.2, the masked array importing will work with
|
|
118
|
+
the maskedarray branch) as well as with earlier versions.
|
|
119
|
+
|
|
120
|
+
By default matplotlib still uses numpy.ma, but there is an rcParams setting
|
|
121
|
+
that you can use to select maskedarray instead. In the matplotlibrc file
|
|
122
|
+
you will find::
|
|
123
|
+
|
|
124
|
+
#maskedarray : False # True to use external maskedarray module
|
|
125
|
+
# instead of numpy.ma; this is a temporary #
|
|
126
|
+
setting for testing maskedarray.
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
Uncomment and set to True to select maskedarray everywhere.
|
|
130
|
+
Alternatively, you can test a script with maskedarray by using a
|
|
131
|
+
command-line option, e.g.::
|
|
132
|
+
|
|
133
|
+
python simple_plot.py --maskedarray
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
Masked records
|
|
137
|
+
--------------
|
|
138
|
+
|
|
139
|
+
Like *numpy.ma.core*, the *ndarray*-based implementation
|
|
140
|
+
of MaskedArray is limited when working with records: you can
|
|
141
|
+
mask any record of the array, but not a field in a record. If you
|
|
142
|
+
need this feature, you may want to give the *mrecords* package
|
|
143
|
+
a try (available in the *maskedarray* directory in the scipy
|
|
144
|
+
sandbox). This module defines a new class, *MaskedRecord*. An
|
|
145
|
+
instance of this class accepts a *recarray* as data, and uses two
|
|
146
|
+
masks: the *fieldmask* has as many entries as records in the array,
|
|
147
|
+
each entry with the same fields as a record, but of boolean types:
|
|
148
|
+
they indicate whether the field is masked or not; a record entry
|
|
149
|
+
is flagged as masked in the *mask* array if all the fields are
|
|
150
|
+
masked. A few examples in the file should give you an idea of what
|
|
151
|
+
can be done. Note that *mrecords* is still experimental...
|
|
152
|
+
|
|
153
|
+
Optimizing maskedarray
|
|
154
|
+
----------------------
|
|
155
|
+
|
|
156
|
+
Should masked arrays be filled before processing or not?
|
|
157
|
+
--------------------------------------------------------
|
|
158
|
+
|
|
159
|
+
In the current implementation, most operations on masked arrays involve
|
|
160
|
+
the following steps:
|
|
161
|
+
|
|
162
|
+
* the input arrays are filled
|
|
163
|
+
* the operation is performed on the filled arrays
|
|
164
|
+
* the mask is set for the results, from the combination of the input masks and the mask corresponding to the domain of the operation.
|
|
165
|
+
|
|
166
|
+
For example, consider the division of two masked arrays::
|
|
167
|
+
|
|
168
|
+
import numpy
|
|
169
|
+
import maskedarray as ma
|
|
170
|
+
x = ma.array([1,2,3,4],mask=[1,0,0,0], dtype=numpy.float64)
|
|
171
|
+
y = ma.array([-1,0,1,2], mask=[0,0,0,1], dtype=numpy.float64)
|
|
172
|
+
|
|
173
|
+
The division of x by y is then computed as::
|
|
174
|
+
|
|
175
|
+
d1 = x.filled(0) # d1 = array([0., 2., 3., 4.])
|
|
176
|
+
d2 = y.filled(1) # array([-1., 0., 1., 1.])
|
|
177
|
+
m = ma.mask_or(ma.getmask(x), ma.getmask(y)) # m =
|
|
178
|
+
array([True,False,False,True])
|
|
179
|
+
dm = ma.divide.domain(d1,d2) # array([False, True, False, False])
|
|
180
|
+
result = (d1/d2).view(MaskedArray) # masked_array([-0. inf, 3., 4.])
|
|
181
|
+
result._mask = logical_or(m, dm)
|
|
182
|
+
|
|
183
|
+
Note that a division by zero takes place. To avoid it, we can consider
|
|
184
|
+
to fill the input arrays, taking the domain mask into account, so that::
|
|
185
|
+
|
|
186
|
+
d1 = x._data.copy() # d1 = array([1., 2., 3., 4.])
|
|
187
|
+
d2 = y._data.copy() # array([-1., 0., 1., 2.])
|
|
188
|
+
dm = ma.divide.domain(d1,d2) # array([False, True, False, False])
|
|
189
|
+
numpy.putmask(d2, dm, 1) # d2 = array([-1., 1., 1., 2.])
|
|
190
|
+
m = ma.mask_or(ma.getmask(x), ma.getmask(y)) # m =
|
|
191
|
+
array([True,False,False,True])
|
|
192
|
+
result = (d1/d2).view(MaskedArray) # masked_array([-1. 0., 3., 2.])
|
|
193
|
+
result._mask = logical_or(m, dm)
|
|
194
|
+
|
|
195
|
+
Note that the *.copy()* is required to avoid updating the inputs with
|
|
196
|
+
*putmask*. The *.filled()* method also involves a *.copy()*.
|
|
197
|
+
|
|
198
|
+
A third possibility consists in avoid filling the arrays::
|
|
199
|
+
|
|
200
|
+
d1 = x._data # d1 = array([1., 2., 3., 4.])
|
|
201
|
+
d2 = y._data # array([-1., 0., 1., 2.])
|
|
202
|
+
dm = ma.divide.domain(d1,d2) # array([False, True, False, False])
|
|
203
|
+
m = ma.mask_or(ma.getmask(x), ma.getmask(y)) # m =
|
|
204
|
+
array([True,False,False,True])
|
|
205
|
+
result = (d1/d2).view(MaskedArray) # masked_array([-1. inf, 3., 2.])
|
|
206
|
+
result._mask = logical_or(m, dm)
|
|
207
|
+
|
|
208
|
+
Note that here again the division by zero takes place.
|
|
209
|
+
|
|
210
|
+
A quick benchmark gives the following results:
|
|
211
|
+
|
|
212
|
+
* *numpy.ma.divide* : 2.69 ms per loop
|
|
213
|
+
* classical division : 2.21 ms per loop
|
|
214
|
+
* division w/ prefilling : 2.34 ms per loop
|
|
215
|
+
* division w/o filling : 1.55 ms per loop
|
|
216
|
+
|
|
217
|
+
So, is it worth filling the arrays beforehand ? Yes, if we are interested
|
|
218
|
+
in avoiding floating-point exceptions that may fill the result with infs
|
|
219
|
+
and nans. No, if we are only interested into speed...
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
Thanks
|
|
223
|
+
------
|
|
224
|
+
|
|
225
|
+
I'd like to thank Paul Dubois, Travis Oliphant and Sasha for the
|
|
226
|
+
original masked array package: without you, I would never have started
|
|
227
|
+
that (it might be argued that I shouldn't have anyway, but that's
|
|
228
|
+
another story...). I also wish to extend these thanks to Reggie Dugard
|
|
229
|
+
and Eric Firing for their suggestions and numerous improvements.
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
Revision notes
|
|
233
|
+
--------------
|
|
234
|
+
|
|
235
|
+
* 08/25/2007 : Creation of this page
|
|
236
|
+
* 01/23/2007 : The package has been moved to the SciPy sandbox, and is regularly updated: please check out your SVN version!
|
numpy/ma/__init__.py
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""
|
|
2
|
+
=============
|
|
3
|
+
Masked Arrays
|
|
4
|
+
=============
|
|
5
|
+
|
|
6
|
+
Arrays sometimes contain invalid or missing data. When doing operations
|
|
7
|
+
on such arrays, we wish to suppress invalid values, which is the purpose masked
|
|
8
|
+
arrays fulfill (an example of typical use is given below).
|
|
9
|
+
|
|
10
|
+
For example, examine the following array:
|
|
11
|
+
|
|
12
|
+
>>> x = np.array([2, 1, 3, np.nan, 5, 2, 3, np.nan])
|
|
13
|
+
|
|
14
|
+
When we try to calculate the mean of the data, the result is undetermined:
|
|
15
|
+
|
|
16
|
+
>>> np.mean(x)
|
|
17
|
+
nan
|
|
18
|
+
|
|
19
|
+
The mean is calculated using roughly ``np.sum(x)/len(x)``, but since
|
|
20
|
+
any number added to ``NaN`` [1]_ produces ``NaN``, this doesn't work. Enter
|
|
21
|
+
masked arrays:
|
|
22
|
+
|
|
23
|
+
>>> m = np.ma.masked_array(x, np.isnan(x))
|
|
24
|
+
>>> m
|
|
25
|
+
masked_array(data=[2.0, 1.0, 3.0, --, 5.0, 2.0, 3.0, --],
|
|
26
|
+
mask=[False, False, False, True, False, False, False, True],
|
|
27
|
+
fill_value=1e+20)
|
|
28
|
+
|
|
29
|
+
Here, we construct a masked array that suppress all ``NaN`` values. We
|
|
30
|
+
may now proceed to calculate the mean of the other values:
|
|
31
|
+
|
|
32
|
+
>>> np.mean(m)
|
|
33
|
+
2.6666666666666665
|
|
34
|
+
|
|
35
|
+
.. [1] Not-a-Number, a floating point value that is the result of an
|
|
36
|
+
invalid operation.
|
|
37
|
+
|
|
38
|
+
.. moduleauthor:: Pierre Gerard-Marchant
|
|
39
|
+
.. moduleauthor:: Jarrod Millman
|
|
40
|
+
|
|
41
|
+
"""
|
|
42
|
+
from . import core, extras
|
|
43
|
+
from .core import *
|
|
44
|
+
from .extras import *
|
|
45
|
+
|
|
46
|
+
__all__ = ['core', 'extras']
|
|
47
|
+
__all__ += core.__all__
|
|
48
|
+
__all__ += extras.__all__
|
|
49
|
+
|
|
50
|
+
from numpy._pytesttester import PytestTester
|
|
51
|
+
|
|
52
|
+
test = PytestTester(__name__)
|
|
53
|
+
del PytestTester
|