numpy 2.4.1__cp314-cp314t-win_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 +955 -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.cp314t-win_arm64.lib +0 -0
- numpy/_core/_multiarray_tests.cp314t-win_arm64.pyd +0 -0
- numpy/_core/_multiarray_umath.cp314t-win_arm64.lib +0 -0
- numpy/_core/_multiarray_umath.cp314t-win_arm64.pyd +0 -0
- numpy/_core/_operand_flag_tests.cp314t-win_arm64.lib +0 -0
- numpy/_core/_operand_flag_tests.cp314t-win_arm64.pyd +0 -0
- numpy/_core/_rational_tests.cp314t-win_arm64.lib +0 -0
- numpy/_core/_rational_tests.cp314t-win_arm64.pyd +0 -0
- numpy/_core/_simd.cp314t-win_arm64.lib +0 -0
- numpy/_core/_simd.cp314t-win_arm64.pyd +0 -0
- numpy/_core/_simd.pyi +35 -0
- numpy/_core/_string_helpers.py +100 -0
- numpy/_core/_string_helpers.pyi +12 -0
- numpy/_core/_struct_ufunc_tests.cp314t-win_arm64.lib +0 -0
- numpy/_core/_struct_ufunc_tests.cp314t-win_arm64.pyd +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.cp314t-win_arm64.lib +0 -0
- numpy/_core/_umath_tests.cp314t-win_arm64.pyd +0 -0
- numpy/_core/_umath_tests.pyi +47 -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/npy-pkg-config/mlib.ini +12 -0
- numpy/_core/lib/npy-pkg-config/npymath.ini +20 -0
- numpy/_core/lib/npymath.lib +0 -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/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.cp314t-win_arm64.lib +0 -0
- numpy/fft/_pocketfft_umath.cp314t-win_arm64.pyd +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.cp314t-win_arm64.lib +0 -0
- numpy/linalg/_umath_linalg.cp314t-win_arm64.pyd +0 -0
- numpy/linalg/_umath_linalg.pyi +60 -0
- numpy/linalg/lapack_lite.cp314t-win_arm64.lib +0 -0
- numpy/linalg/lapack_lite.cp314t-win_arm64.pyd +0 -0
- numpy/linalg/lapack_lite.pyi +143 -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.cp314t-win_arm64.lib +0 -0
- numpy/random/_bounded_integers.cp314t-win_arm64.pyd +0 -0
- numpy/random/_bounded_integers.pxd +38 -0
- numpy/random/_bounded_integers.pyi +1 -0
- numpy/random/_common.cp314t-win_arm64.lib +0 -0
- numpy/random/_common.cp314t-win_arm64.pyd +0 -0
- numpy/random/_common.pxd +110 -0
- numpy/random/_common.pyi +16 -0
- numpy/random/_examples/cffi/extending.py +44 -0
- numpy/random/_examples/cffi/parse.py +53 -0
- numpy/random/_examples/cython/extending.pyx +77 -0
- numpy/random/_examples/cython/extending_distributions.pyx +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.cp314t-win_arm64.lib +0 -0
- numpy/random/_generator.cp314t-win_arm64.pyd +0 -0
- numpy/random/_generator.pyi +862 -0
- numpy/random/_mt19937.cp314t-win_arm64.lib +0 -0
- numpy/random/_mt19937.cp314t-win_arm64.pyd +0 -0
- numpy/random/_mt19937.pyi +27 -0
- numpy/random/_pcg64.cp314t-win_arm64.lib +0 -0
- numpy/random/_pcg64.cp314t-win_arm64.pyd +0 -0
- numpy/random/_pcg64.pyi +41 -0
- numpy/random/_philox.cp314t-win_arm64.lib +0 -0
- numpy/random/_philox.cp314t-win_arm64.pyd +0 -0
- numpy/random/_philox.pyi +36 -0
- numpy/random/_pickle.py +88 -0
- numpy/random/_pickle.pyi +43 -0
- numpy/random/_sfc64.cp314t-win_arm64.lib +0 -0
- numpy/random/_sfc64.cp314t-win_arm64.pyd +0 -0
- numpy/random/_sfc64.pyi +25 -0
- numpy/random/bit_generator.cp314t-win_arm64.lib +0 -0
- numpy/random/bit_generator.cp314t-win_arm64.pyd +0 -0
- numpy/random/bit_generator.pxd +40 -0
- numpy/random/bit_generator.pyi +123 -0
- numpy/random/c_distributions.pxd +119 -0
- numpy/random/lib/npyrandom.lib +0 -0
- numpy/random/mtrand.cp314t-win_arm64.lib +0 -0
- numpy/random/mtrand.cp314t-win_arm64.pyd +0 -0
- numpy/random/mtrand.pyi +759 -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/DELVEWHEEL +2 -0
- numpy-2.4.1.dist-info/METADATA +139 -0
- numpy-2.4.1.dist-info/RECORD +932 -0
- numpy-2.4.1.dist-info/WHEEL +4 -0
- numpy-2.4.1.dist-info/entry_points.txt +13 -0
- numpy-2.4.1.dist-info/licenses/LICENSE.txt +914 -0
- numpy-2.4.1.dist-info/licenses/numpy/_core/include/numpy/libdivide/LICENSE.txt +21 -0
- numpy-2.4.1.dist-info/licenses/numpy/_core/src/common/pythoncapi-compat/COPYING +14 -0
- numpy-2.4.1.dist-info/licenses/numpy/_core/src/highway/LICENSE +371 -0
- numpy-2.4.1.dist-info/licenses/numpy/_core/src/multiarray/dragon4_LICENSE.txt +27 -0
- numpy-2.4.1.dist-info/licenses/numpy/_core/src/npysort/x86-simd-sort/LICENSE.md +28 -0
- numpy-2.4.1.dist-info/licenses/numpy/_core/src/umath/svml/LICENSE +30 -0
- numpy-2.4.1.dist-info/licenses/numpy/fft/pocketfft/LICENSE.md +25 -0
- numpy-2.4.1.dist-info/licenses/numpy/linalg/lapack_lite/LICENSE.txt +48 -0
- numpy-2.4.1.dist-info/licenses/numpy/ma/LICENSE +24 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/LICENSE.md +71 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/src/distributions/LICENSE.md +61 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/src/mt19937/LICENSE.md +61 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/src/pcg64/LICENSE.md +22 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/src/philox/LICENSE.md +31 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/src/sfc64/LICENSE.md +27 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/src/splitmix64/LICENSE.md +9 -0
- numpy.libs/msvcp140-5f1c5dd31916990d94181e07bc3afb32.dll +0 -0
- numpy.libs/scipy_openblas-7b69cbfd2599e6035f1310f2a72d59a6.dll +0 -0
numpy/_core/records.py
ADDED
|
@@ -0,0 +1,1088 @@
|
|
|
1
|
+
"""
|
|
2
|
+
This module contains a set of functions for record arrays.
|
|
3
|
+
"""
|
|
4
|
+
import os
|
|
5
|
+
import warnings
|
|
6
|
+
from collections import Counter
|
|
7
|
+
from contextlib import nullcontext
|
|
8
|
+
|
|
9
|
+
from numpy._utils import set_module
|
|
10
|
+
|
|
11
|
+
from . import numeric as sb, numerictypes as nt
|
|
12
|
+
from .arrayprint import _get_legacy_print_mode
|
|
13
|
+
|
|
14
|
+
# All of the functions allow formats to be a dtype
|
|
15
|
+
__all__ = [
|
|
16
|
+
'record', 'recarray', 'format_parser', 'fromarrays', 'fromrecords',
|
|
17
|
+
'fromstring', 'fromfile', 'array', 'find_duplicate',
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
ndarray = sb.ndarray
|
|
22
|
+
|
|
23
|
+
_byteorderconv = {'b': '>',
|
|
24
|
+
'l': '<',
|
|
25
|
+
'n': '=',
|
|
26
|
+
'B': '>',
|
|
27
|
+
'L': '<',
|
|
28
|
+
'N': '=',
|
|
29
|
+
'S': 's',
|
|
30
|
+
's': 's',
|
|
31
|
+
'>': '>',
|
|
32
|
+
'<': '<',
|
|
33
|
+
'=': '=',
|
|
34
|
+
'|': '|',
|
|
35
|
+
'I': '|',
|
|
36
|
+
'i': '|'}
|
|
37
|
+
|
|
38
|
+
# formats regular expression
|
|
39
|
+
# allows multidimensional spec with a tuple syntax in front
|
|
40
|
+
# of the letter code '(2,3)f4' and ' ( 2 , 3 ) f4 '
|
|
41
|
+
# are equally allowed
|
|
42
|
+
|
|
43
|
+
numfmt = nt.sctypeDict
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@set_module('numpy.rec')
|
|
47
|
+
def find_duplicate(list):
|
|
48
|
+
"""Find duplication in a list, return a list of duplicated elements"""
|
|
49
|
+
return [
|
|
50
|
+
item
|
|
51
|
+
for item, counts in Counter(list).items()
|
|
52
|
+
if counts > 1
|
|
53
|
+
]
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
@set_module('numpy.rec')
|
|
57
|
+
class format_parser:
|
|
58
|
+
"""
|
|
59
|
+
Class to convert formats, names, titles description to a dtype.
|
|
60
|
+
|
|
61
|
+
After constructing the format_parser object, the dtype attribute is
|
|
62
|
+
the converted data-type:
|
|
63
|
+
``dtype = format_parser(formats, names, titles).dtype``
|
|
64
|
+
|
|
65
|
+
Attributes
|
|
66
|
+
----------
|
|
67
|
+
dtype : dtype
|
|
68
|
+
The converted data-type.
|
|
69
|
+
|
|
70
|
+
Parameters
|
|
71
|
+
----------
|
|
72
|
+
formats : str or list of str
|
|
73
|
+
The format description, either specified as a string with
|
|
74
|
+
comma-separated format descriptions in the form ``'f8, i4, S5'``, or
|
|
75
|
+
a list of format description strings in the form
|
|
76
|
+
``['f8', 'i4', 'S5']``.
|
|
77
|
+
names : str or list/tuple of str
|
|
78
|
+
The field names, either specified as a comma-separated string in the
|
|
79
|
+
form ``'col1, col2, col3'``, or as a list or tuple of strings in the
|
|
80
|
+
form ``['col1', 'col2', 'col3']``.
|
|
81
|
+
An empty list can be used, in that case default field names
|
|
82
|
+
('f0', 'f1', ...) are used.
|
|
83
|
+
titles : sequence
|
|
84
|
+
Sequence of title strings. An empty list can be used to leave titles
|
|
85
|
+
out.
|
|
86
|
+
aligned : bool, optional
|
|
87
|
+
If True, align the fields by padding as the C-compiler would.
|
|
88
|
+
Default is False.
|
|
89
|
+
byteorder : str, optional
|
|
90
|
+
If specified, all the fields will be changed to the
|
|
91
|
+
provided byte-order. Otherwise, the default byte-order is
|
|
92
|
+
used. For all available string specifiers, see `dtype.newbyteorder`.
|
|
93
|
+
|
|
94
|
+
See Also
|
|
95
|
+
--------
|
|
96
|
+
numpy.dtype, numpy.typename
|
|
97
|
+
|
|
98
|
+
Examples
|
|
99
|
+
--------
|
|
100
|
+
>>> import numpy as np
|
|
101
|
+
>>> np.rec.format_parser(['<f8', '<i4'], ['col1', 'col2'],
|
|
102
|
+
... ['T1', 'T2']).dtype
|
|
103
|
+
dtype([(('T1', 'col1'), '<f8'), (('T2', 'col2'), '<i4')])
|
|
104
|
+
|
|
105
|
+
`names` and/or `titles` can be empty lists. If `titles` is an empty list,
|
|
106
|
+
titles will simply not appear. If `names` is empty, default field names
|
|
107
|
+
will be used.
|
|
108
|
+
|
|
109
|
+
>>> np.rec.format_parser(['f8', 'i4', 'a5'], ['col1', 'col2', 'col3'],
|
|
110
|
+
... []).dtype
|
|
111
|
+
dtype([('col1', '<f8'), ('col2', '<i4'), ('col3', '<S5')])
|
|
112
|
+
>>> np.rec.format_parser(['<f8', '<i4', '<a5'], [], []).dtype
|
|
113
|
+
dtype([('f0', '<f8'), ('f1', '<i4'), ('f2', 'S5')])
|
|
114
|
+
|
|
115
|
+
"""
|
|
116
|
+
|
|
117
|
+
def __init__(self, formats, names, titles, aligned=False, byteorder=None):
|
|
118
|
+
self._parseFormats(formats, aligned)
|
|
119
|
+
self._setfieldnames(names, titles)
|
|
120
|
+
self._createdtype(byteorder)
|
|
121
|
+
|
|
122
|
+
def _parseFormats(self, formats, aligned=False):
|
|
123
|
+
""" Parse the field formats """
|
|
124
|
+
|
|
125
|
+
if formats is None:
|
|
126
|
+
raise ValueError("Need formats argument")
|
|
127
|
+
if isinstance(formats, list):
|
|
128
|
+
dtype = sb.dtype(
|
|
129
|
+
[
|
|
130
|
+
(f'f{i}', format_)
|
|
131
|
+
for i, format_ in enumerate(formats)
|
|
132
|
+
],
|
|
133
|
+
aligned,
|
|
134
|
+
)
|
|
135
|
+
else:
|
|
136
|
+
dtype = sb.dtype(formats, aligned)
|
|
137
|
+
fields = dtype.fields
|
|
138
|
+
if fields is None:
|
|
139
|
+
dtype = sb.dtype([('f1', dtype)], aligned)
|
|
140
|
+
fields = dtype.fields
|
|
141
|
+
keys = dtype.names
|
|
142
|
+
self._f_formats = [fields[key][0] for key in keys]
|
|
143
|
+
self._offsets = [fields[key][1] for key in keys]
|
|
144
|
+
self._nfields = len(keys)
|
|
145
|
+
|
|
146
|
+
def _setfieldnames(self, names, titles):
|
|
147
|
+
"""convert input field names into a list and assign to the _names
|
|
148
|
+
attribute """
|
|
149
|
+
|
|
150
|
+
if names:
|
|
151
|
+
if type(names) in [list, tuple]:
|
|
152
|
+
pass
|
|
153
|
+
elif isinstance(names, str):
|
|
154
|
+
names = names.split(',')
|
|
155
|
+
else:
|
|
156
|
+
raise NameError(f"illegal input names {repr(names)}")
|
|
157
|
+
|
|
158
|
+
self._names = [n.strip() for n in names[:self._nfields]]
|
|
159
|
+
else:
|
|
160
|
+
self._names = []
|
|
161
|
+
|
|
162
|
+
# if the names are not specified, they will be assigned as
|
|
163
|
+
# "f0, f1, f2,..."
|
|
164
|
+
# if not enough names are specified, they will be assigned as "f[n],
|
|
165
|
+
# f[n+1],..." etc. where n is the number of specified names..."
|
|
166
|
+
self._names += ['f%d' % i for i in range(len(self._names),
|
|
167
|
+
self._nfields)]
|
|
168
|
+
# check for redundant names
|
|
169
|
+
_dup = find_duplicate(self._names)
|
|
170
|
+
if _dup:
|
|
171
|
+
raise ValueError(f"Duplicate field names: {_dup}")
|
|
172
|
+
|
|
173
|
+
if titles:
|
|
174
|
+
self._titles = [n.strip() for n in titles[:self._nfields]]
|
|
175
|
+
else:
|
|
176
|
+
self._titles = []
|
|
177
|
+
titles = []
|
|
178
|
+
|
|
179
|
+
if self._nfields > len(titles):
|
|
180
|
+
self._titles += [None] * (self._nfields - len(titles))
|
|
181
|
+
|
|
182
|
+
def _createdtype(self, byteorder):
|
|
183
|
+
dtype = sb.dtype({
|
|
184
|
+
'names': self._names,
|
|
185
|
+
'formats': self._f_formats,
|
|
186
|
+
'offsets': self._offsets,
|
|
187
|
+
'titles': self._titles,
|
|
188
|
+
})
|
|
189
|
+
if byteorder is not None:
|
|
190
|
+
byteorder = _byteorderconv[byteorder[0]]
|
|
191
|
+
dtype = dtype.newbyteorder(byteorder)
|
|
192
|
+
|
|
193
|
+
self.dtype = dtype
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
class record(nt.void):
|
|
197
|
+
"""A data-type scalar that allows field access as attribute lookup.
|
|
198
|
+
"""
|
|
199
|
+
|
|
200
|
+
# manually set name and module so that this class's type shows up
|
|
201
|
+
# as numpy.record when printed
|
|
202
|
+
__name__ = 'record'
|
|
203
|
+
__module__ = 'numpy'
|
|
204
|
+
|
|
205
|
+
def __repr__(self):
|
|
206
|
+
if _get_legacy_print_mode() <= 113:
|
|
207
|
+
return self.__str__()
|
|
208
|
+
return super().__repr__()
|
|
209
|
+
|
|
210
|
+
def __str__(self):
|
|
211
|
+
if _get_legacy_print_mode() <= 113:
|
|
212
|
+
return str(self.item())
|
|
213
|
+
return super().__str__()
|
|
214
|
+
|
|
215
|
+
def __getattribute__(self, attr):
|
|
216
|
+
if attr in ('setfield', 'getfield', 'dtype'):
|
|
217
|
+
return nt.void.__getattribute__(self, attr)
|
|
218
|
+
try:
|
|
219
|
+
return nt.void.__getattribute__(self, attr)
|
|
220
|
+
except AttributeError:
|
|
221
|
+
pass
|
|
222
|
+
fielddict = nt.void.__getattribute__(self, 'dtype').fields
|
|
223
|
+
res = fielddict.get(attr, None)
|
|
224
|
+
if res:
|
|
225
|
+
obj = self.getfield(*res[:2])
|
|
226
|
+
# if it has fields return a record,
|
|
227
|
+
# otherwise return the object
|
|
228
|
+
try:
|
|
229
|
+
dt = obj.dtype
|
|
230
|
+
except AttributeError:
|
|
231
|
+
# happens if field is Object type
|
|
232
|
+
return obj
|
|
233
|
+
if dt.names is not None:
|
|
234
|
+
return obj.view((self.__class__, obj.dtype))
|
|
235
|
+
return obj
|
|
236
|
+
else:
|
|
237
|
+
raise AttributeError(f"'record' object has no attribute '{attr}'")
|
|
238
|
+
|
|
239
|
+
def __setattr__(self, attr, val):
|
|
240
|
+
if attr in ('setfield', 'getfield', 'dtype'):
|
|
241
|
+
raise AttributeError(f"Cannot set '{attr}' attribute")
|
|
242
|
+
fielddict = nt.void.__getattribute__(self, 'dtype').fields
|
|
243
|
+
res = fielddict.get(attr, None)
|
|
244
|
+
if res:
|
|
245
|
+
return self.setfield(val, *res[:2])
|
|
246
|
+
elif getattr(self, attr, None):
|
|
247
|
+
return nt.void.__setattr__(self, attr, val)
|
|
248
|
+
else:
|
|
249
|
+
raise AttributeError(f"'record' object has no attribute '{attr}'")
|
|
250
|
+
|
|
251
|
+
def __getitem__(self, indx):
|
|
252
|
+
obj = nt.void.__getitem__(self, indx)
|
|
253
|
+
|
|
254
|
+
# copy behavior of record.__getattribute__,
|
|
255
|
+
if isinstance(obj, nt.void) and obj.dtype.names is not None:
|
|
256
|
+
return obj.view((self.__class__, obj.dtype))
|
|
257
|
+
else:
|
|
258
|
+
# return a single element
|
|
259
|
+
return obj
|
|
260
|
+
|
|
261
|
+
def pprint(self):
|
|
262
|
+
"""Pretty-print all fields."""
|
|
263
|
+
# pretty-print all fields
|
|
264
|
+
names = self.dtype.names
|
|
265
|
+
maxlen = max(len(name) for name in names)
|
|
266
|
+
fmt = '%% %ds: %%s' % maxlen
|
|
267
|
+
rows = [fmt % (name, getattr(self, name)) for name in names]
|
|
268
|
+
return "\n".join(rows)
|
|
269
|
+
|
|
270
|
+
# The recarray is almost identical to a standard array (which supports
|
|
271
|
+
# named fields already) The biggest difference is that it can use
|
|
272
|
+
# attribute-lookup to find the fields and it is constructed using
|
|
273
|
+
# a record.
|
|
274
|
+
|
|
275
|
+
# If byteorder is given it forces a particular byteorder on all
|
|
276
|
+
# the fields (and any subfields)
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
@set_module("numpy.rec")
|
|
280
|
+
class recarray(ndarray):
|
|
281
|
+
"""Construct an ndarray that allows field access using attributes.
|
|
282
|
+
|
|
283
|
+
Arrays may have a data-types containing fields, analogous
|
|
284
|
+
to columns in a spread sheet. An example is ``[(x, int), (y, float)]``,
|
|
285
|
+
where each entry in the array is a pair of ``(int, float)``. Normally,
|
|
286
|
+
these attributes are accessed using dictionary lookups such as ``arr['x']``
|
|
287
|
+
and ``arr['y']``. Record arrays allow the fields to be accessed as members
|
|
288
|
+
of the array, using ``arr.x`` and ``arr.y``.
|
|
289
|
+
|
|
290
|
+
Parameters
|
|
291
|
+
----------
|
|
292
|
+
shape : tuple
|
|
293
|
+
Shape of output array.
|
|
294
|
+
dtype : data-type, optional
|
|
295
|
+
The desired data-type. By default, the data-type is determined
|
|
296
|
+
from `formats`, `names`, `titles`, `aligned` and `byteorder`.
|
|
297
|
+
formats : list of data-types, optional
|
|
298
|
+
A list containing the data-types for the different columns, e.g.
|
|
299
|
+
``['i4', 'f8', 'i4']``. `formats` does *not* support the new
|
|
300
|
+
convention of using types directly, i.e. ``(int, float, int)``.
|
|
301
|
+
Note that `formats` must be a list, not a tuple.
|
|
302
|
+
Given that `formats` is somewhat limited, we recommend specifying
|
|
303
|
+
`dtype` instead.
|
|
304
|
+
names : tuple of str, optional
|
|
305
|
+
The name of each column, e.g. ``('x', 'y', 'z')``.
|
|
306
|
+
buf : buffer, optional
|
|
307
|
+
By default, a new array is created of the given shape and data-type.
|
|
308
|
+
If `buf` is specified and is an object exposing the buffer interface,
|
|
309
|
+
the array will use the memory from the existing buffer. In this case,
|
|
310
|
+
the `offset` and `strides` keywords are available.
|
|
311
|
+
|
|
312
|
+
Other Parameters
|
|
313
|
+
----------------
|
|
314
|
+
titles : tuple of str, optional
|
|
315
|
+
Aliases for column names. For example, if `names` were
|
|
316
|
+
``('x', 'y', 'z')`` and `titles` is
|
|
317
|
+
``('x_coordinate', 'y_coordinate', 'z_coordinate')``, then
|
|
318
|
+
``arr['x']`` is equivalent to both ``arr.x`` and ``arr.x_coordinate``.
|
|
319
|
+
byteorder : {'<', '>', '='}, optional
|
|
320
|
+
Byte-order for all fields.
|
|
321
|
+
aligned : bool, optional
|
|
322
|
+
Align the fields in memory as the C-compiler would.
|
|
323
|
+
strides : tuple of ints, optional
|
|
324
|
+
Buffer (`buf`) is interpreted according to these strides (strides
|
|
325
|
+
define how many bytes each array element, row, column, etc.
|
|
326
|
+
occupy in memory).
|
|
327
|
+
offset : int, optional
|
|
328
|
+
Start reading buffer (`buf`) from this offset onwards.
|
|
329
|
+
order : {'C', 'F'}, optional
|
|
330
|
+
Row-major (C-style) or column-major (Fortran-style) order.
|
|
331
|
+
|
|
332
|
+
Returns
|
|
333
|
+
-------
|
|
334
|
+
rec : recarray
|
|
335
|
+
Empty array of the given shape and type.
|
|
336
|
+
|
|
337
|
+
See Also
|
|
338
|
+
--------
|
|
339
|
+
numpy.rec.fromrecords : Construct a record array from data.
|
|
340
|
+
numpy.record : fundamental data-type for `recarray`.
|
|
341
|
+
numpy.rec.format_parser : determine data-type from formats, names, titles.
|
|
342
|
+
|
|
343
|
+
Notes
|
|
344
|
+
-----
|
|
345
|
+
This constructor can be compared to ``empty``: it creates a new record
|
|
346
|
+
array but does not fill it with data. To create a record array from data,
|
|
347
|
+
use one of the following methods:
|
|
348
|
+
|
|
349
|
+
1. Create a standard ndarray and convert it to a record array,
|
|
350
|
+
using ``arr.view(np.recarray)``
|
|
351
|
+
2. Use the `buf` keyword.
|
|
352
|
+
3. Use `np.rec.fromrecords`.
|
|
353
|
+
|
|
354
|
+
Examples
|
|
355
|
+
--------
|
|
356
|
+
Create an array with two fields, ``x`` and ``y``:
|
|
357
|
+
|
|
358
|
+
>>> import numpy as np
|
|
359
|
+
>>> x = np.array([(1.0, 2), (3.0, 4)], dtype=[('x', '<f8'), ('y', '<i8')])
|
|
360
|
+
>>> x
|
|
361
|
+
array([(1., 2), (3., 4)], dtype=[('x', '<f8'), ('y', '<i8')])
|
|
362
|
+
|
|
363
|
+
>>> x['x']
|
|
364
|
+
array([1., 3.])
|
|
365
|
+
|
|
366
|
+
View the array as a record array:
|
|
367
|
+
|
|
368
|
+
>>> x = x.view(np.recarray)
|
|
369
|
+
|
|
370
|
+
>>> x.x
|
|
371
|
+
array([1., 3.])
|
|
372
|
+
|
|
373
|
+
>>> x.y
|
|
374
|
+
array([2, 4])
|
|
375
|
+
|
|
376
|
+
Create a new, empty record array:
|
|
377
|
+
|
|
378
|
+
>>> np.recarray((2,),
|
|
379
|
+
... dtype=[('x', int), ('y', float), ('z', int)]) #doctest: +SKIP
|
|
380
|
+
rec.array([(-1073741821, 1.2249118382103472e-301, 24547520),
|
|
381
|
+
(3471280, 1.2134086255804012e-316, 0)],
|
|
382
|
+
dtype=[('x', '<i4'), ('y', '<f8'), ('z', '<i4')])
|
|
383
|
+
|
|
384
|
+
"""
|
|
385
|
+
|
|
386
|
+
def __new__(subtype, shape, dtype=None, buf=None, offset=0, strides=None,
|
|
387
|
+
formats=None, names=None, titles=None,
|
|
388
|
+
byteorder=None, aligned=False, order='C'):
|
|
389
|
+
|
|
390
|
+
if dtype is not None:
|
|
391
|
+
descr = sb.dtype(dtype)
|
|
392
|
+
else:
|
|
393
|
+
descr = format_parser(
|
|
394
|
+
formats, names, titles, aligned, byteorder
|
|
395
|
+
).dtype
|
|
396
|
+
|
|
397
|
+
if buf is None:
|
|
398
|
+
self = ndarray.__new__(
|
|
399
|
+
subtype, shape, (record, descr), order=order
|
|
400
|
+
)
|
|
401
|
+
else:
|
|
402
|
+
self = ndarray.__new__(
|
|
403
|
+
subtype, shape, (record, descr), buffer=buf,
|
|
404
|
+
offset=offset, strides=strides, order=order
|
|
405
|
+
)
|
|
406
|
+
return self
|
|
407
|
+
|
|
408
|
+
def __array_finalize__(self, obj):
|
|
409
|
+
if self.dtype.type is not record and self.dtype.names is not None:
|
|
410
|
+
# if self.dtype is not np.record, invoke __setattr__ which will
|
|
411
|
+
# convert it to a record if it is a void dtype.
|
|
412
|
+
self.dtype = self.dtype
|
|
413
|
+
|
|
414
|
+
def __getattribute__(self, attr):
|
|
415
|
+
# See if ndarray has this attr, and return it if so. (note that this
|
|
416
|
+
# means a field with the same name as an ndarray attr cannot be
|
|
417
|
+
# accessed by attribute).
|
|
418
|
+
try:
|
|
419
|
+
return object.__getattribute__(self, attr)
|
|
420
|
+
except AttributeError: # attr must be a fieldname
|
|
421
|
+
pass
|
|
422
|
+
|
|
423
|
+
# look for a field with this name
|
|
424
|
+
fielddict = ndarray.__getattribute__(self, 'dtype').fields
|
|
425
|
+
try:
|
|
426
|
+
res = fielddict[attr][:2]
|
|
427
|
+
except (TypeError, KeyError) as e:
|
|
428
|
+
raise AttributeError(f"recarray has no attribute {attr}") from e
|
|
429
|
+
obj = self.getfield(*res)
|
|
430
|
+
|
|
431
|
+
# At this point obj will always be a recarray, since (see
|
|
432
|
+
# PyArray_GetField) the type of obj is inherited. Next, if obj.dtype is
|
|
433
|
+
# non-structured, convert it to an ndarray. Then if obj is structured
|
|
434
|
+
# with void type convert it to the same dtype.type (eg to preserve
|
|
435
|
+
# numpy.record type if present), since nested structured fields do not
|
|
436
|
+
# inherit type. Don't do this for non-void structures though.
|
|
437
|
+
if obj.dtype.names is not None:
|
|
438
|
+
if issubclass(obj.dtype.type, nt.void):
|
|
439
|
+
return obj.view(dtype=(self.dtype.type, obj.dtype))
|
|
440
|
+
return obj
|
|
441
|
+
else:
|
|
442
|
+
return obj.view(ndarray)
|
|
443
|
+
|
|
444
|
+
# Save the dictionary.
|
|
445
|
+
# If the attr is a field name and not in the saved dictionary
|
|
446
|
+
# Undo any "setting" of the attribute and do a setfield
|
|
447
|
+
# Thus, you can't create attributes on-the-fly that are field names.
|
|
448
|
+
def __setattr__(self, attr, val):
|
|
449
|
+
|
|
450
|
+
# Automatically convert (void) structured types to records
|
|
451
|
+
# (but not non-void structures, subarrays, or non-structured voids)
|
|
452
|
+
if (
|
|
453
|
+
attr == 'dtype' and
|
|
454
|
+
issubclass(val.type, nt.void) and
|
|
455
|
+
val.names is not None
|
|
456
|
+
):
|
|
457
|
+
val = sb.dtype((record, val))
|
|
458
|
+
|
|
459
|
+
newattr = attr not in self.__dict__
|
|
460
|
+
try:
|
|
461
|
+
ret = object.__setattr__(self, attr, val)
|
|
462
|
+
except Exception:
|
|
463
|
+
fielddict = ndarray.__getattribute__(self, 'dtype').fields or {}
|
|
464
|
+
if attr not in fielddict:
|
|
465
|
+
raise
|
|
466
|
+
else:
|
|
467
|
+
fielddict = ndarray.__getattribute__(self, 'dtype').fields or {}
|
|
468
|
+
if attr not in fielddict:
|
|
469
|
+
return ret
|
|
470
|
+
if newattr:
|
|
471
|
+
# We just added this one or this setattr worked on an
|
|
472
|
+
# internal attribute.
|
|
473
|
+
try:
|
|
474
|
+
object.__delattr__(self, attr)
|
|
475
|
+
except Exception:
|
|
476
|
+
return ret
|
|
477
|
+
try:
|
|
478
|
+
res = fielddict[attr][:2]
|
|
479
|
+
except (TypeError, KeyError) as e:
|
|
480
|
+
raise AttributeError(
|
|
481
|
+
f"record array has no attribute {attr}"
|
|
482
|
+
) from e
|
|
483
|
+
return self.setfield(val, *res)
|
|
484
|
+
|
|
485
|
+
def __getitem__(self, indx):
|
|
486
|
+
obj = super().__getitem__(indx)
|
|
487
|
+
|
|
488
|
+
# copy behavior of getattr, except that here
|
|
489
|
+
# we might also be returning a single element
|
|
490
|
+
if isinstance(obj, ndarray):
|
|
491
|
+
if obj.dtype.names is not None:
|
|
492
|
+
obj = obj.view(type(self))
|
|
493
|
+
if issubclass(obj.dtype.type, nt.void):
|
|
494
|
+
return obj.view(dtype=(self.dtype.type, obj.dtype))
|
|
495
|
+
return obj
|
|
496
|
+
else:
|
|
497
|
+
return obj.view(type=ndarray)
|
|
498
|
+
else:
|
|
499
|
+
# return a single element
|
|
500
|
+
return obj
|
|
501
|
+
|
|
502
|
+
def __repr__(self):
|
|
503
|
+
|
|
504
|
+
repr_dtype = self.dtype
|
|
505
|
+
if (
|
|
506
|
+
self.dtype.type is record or
|
|
507
|
+
not issubclass(self.dtype.type, nt.void)
|
|
508
|
+
):
|
|
509
|
+
# If this is a full record array (has numpy.record dtype),
|
|
510
|
+
# or if it has a scalar (non-void) dtype with no records,
|
|
511
|
+
# represent it using the rec.array function. Since rec.array
|
|
512
|
+
# converts dtype to a numpy.record for us, convert back
|
|
513
|
+
# to non-record before printing
|
|
514
|
+
if repr_dtype.type is record:
|
|
515
|
+
repr_dtype = sb.dtype((nt.void, repr_dtype))
|
|
516
|
+
prefix = "rec.array("
|
|
517
|
+
fmt = 'rec.array(%s,%sdtype=%s)'
|
|
518
|
+
else:
|
|
519
|
+
# otherwise represent it using np.array plus a view
|
|
520
|
+
# This should only happen if the user is playing
|
|
521
|
+
# strange games with dtypes.
|
|
522
|
+
prefix = "array("
|
|
523
|
+
fmt = 'array(%s,%sdtype=%s).view(numpy.recarray)'
|
|
524
|
+
|
|
525
|
+
# get data/shape string. logic taken from numeric.array_repr
|
|
526
|
+
if self.size > 0 or self.shape == (0,):
|
|
527
|
+
lst = sb.array2string(
|
|
528
|
+
self, separator=', ', prefix=prefix, suffix=',')
|
|
529
|
+
else:
|
|
530
|
+
# show zero-length shape unless it is (0,)
|
|
531
|
+
lst = f"[], shape={repr(self.shape)}"
|
|
532
|
+
|
|
533
|
+
lf = '\n' + ' ' * len(prefix)
|
|
534
|
+
if _get_legacy_print_mode() <= 113:
|
|
535
|
+
lf = ' ' + lf # trailing space
|
|
536
|
+
return fmt % (lst, lf, repr_dtype)
|
|
537
|
+
|
|
538
|
+
def field(self, attr, val=None):
|
|
539
|
+
if isinstance(attr, int):
|
|
540
|
+
names = ndarray.__getattribute__(self, 'dtype').names
|
|
541
|
+
attr = names[attr]
|
|
542
|
+
|
|
543
|
+
fielddict = ndarray.__getattribute__(self, 'dtype').fields
|
|
544
|
+
|
|
545
|
+
res = fielddict[attr][:2]
|
|
546
|
+
|
|
547
|
+
if val is None:
|
|
548
|
+
obj = self.getfield(*res)
|
|
549
|
+
if obj.dtype.names is not None:
|
|
550
|
+
return obj
|
|
551
|
+
return obj.view(ndarray)
|
|
552
|
+
else:
|
|
553
|
+
return self.setfield(val, *res)
|
|
554
|
+
|
|
555
|
+
|
|
556
|
+
def _deprecate_shape_0_as_None(shape):
|
|
557
|
+
if shape == 0:
|
|
558
|
+
warnings.warn(
|
|
559
|
+
"Passing `shape=0` to have the shape be inferred is deprecated, "
|
|
560
|
+
"and in future will be equivalent to `shape=(0,)`. To infer "
|
|
561
|
+
"the shape and suppress this warning, pass `shape=None` instead.",
|
|
562
|
+
FutureWarning, stacklevel=3)
|
|
563
|
+
return None
|
|
564
|
+
else:
|
|
565
|
+
return shape
|
|
566
|
+
|
|
567
|
+
|
|
568
|
+
@set_module("numpy.rec")
|
|
569
|
+
def fromarrays(arrayList, dtype=None, shape=None, formats=None,
|
|
570
|
+
names=None, titles=None, aligned=False, byteorder=None):
|
|
571
|
+
"""Create a record array from a (flat) list of arrays
|
|
572
|
+
|
|
573
|
+
Parameters
|
|
574
|
+
----------
|
|
575
|
+
arrayList : list or tuple
|
|
576
|
+
List of array-like objects (such as lists, tuples,
|
|
577
|
+
and ndarrays).
|
|
578
|
+
dtype : data-type, optional
|
|
579
|
+
valid dtype for all arrays
|
|
580
|
+
shape : int or tuple of ints, optional
|
|
581
|
+
Shape of the resulting array. If not provided, inferred from
|
|
582
|
+
``arrayList[0]``.
|
|
583
|
+
formats, names, titles, aligned, byteorder :
|
|
584
|
+
If `dtype` is ``None``, these arguments are passed to
|
|
585
|
+
`numpy.rec.format_parser` to construct a dtype. See that function for
|
|
586
|
+
detailed documentation.
|
|
587
|
+
|
|
588
|
+
Returns
|
|
589
|
+
-------
|
|
590
|
+
np.recarray
|
|
591
|
+
Record array consisting of given arrayList columns.
|
|
592
|
+
|
|
593
|
+
Examples
|
|
594
|
+
--------
|
|
595
|
+
>>> x1=np.array([1,2,3,4])
|
|
596
|
+
>>> x2=np.array(['a','dd','xyz','12'])
|
|
597
|
+
>>> x3=np.array([1.1,2,3,4])
|
|
598
|
+
>>> r = np.rec.fromarrays([x1,x2,x3],names='a,b,c')
|
|
599
|
+
>>> print(r[1])
|
|
600
|
+
(2, 'dd', 2.0) # may vary
|
|
601
|
+
>>> x1[1]=34
|
|
602
|
+
>>> r.a
|
|
603
|
+
array([1, 2, 3, 4])
|
|
604
|
+
|
|
605
|
+
>>> x1 = np.array([1, 2, 3, 4])
|
|
606
|
+
>>> x2 = np.array(['a', 'dd', 'xyz', '12'])
|
|
607
|
+
>>> x3 = np.array([1.1, 2, 3,4])
|
|
608
|
+
>>> r = np.rec.fromarrays(
|
|
609
|
+
... [x1, x2, x3],
|
|
610
|
+
... dtype=np.dtype([('a', np.int32), ('b', 'S3'), ('c', np.float32)]))
|
|
611
|
+
>>> r
|
|
612
|
+
rec.array([(1, b'a', 1.1), (2, b'dd', 2. ), (3, b'xyz', 3. ),
|
|
613
|
+
(4, b'12', 4. )],
|
|
614
|
+
dtype=[('a', '<i4'), ('b', 'S3'), ('c', '<f4')])
|
|
615
|
+
"""
|
|
616
|
+
|
|
617
|
+
arrayList = [sb.asarray(x) for x in arrayList]
|
|
618
|
+
|
|
619
|
+
# NumPy 1.19.0, 2020-01-01
|
|
620
|
+
shape = _deprecate_shape_0_as_None(shape)
|
|
621
|
+
|
|
622
|
+
if shape is None:
|
|
623
|
+
shape = arrayList[0].shape
|
|
624
|
+
elif isinstance(shape, int):
|
|
625
|
+
shape = (shape,)
|
|
626
|
+
|
|
627
|
+
if formats is None and dtype is None:
|
|
628
|
+
# go through each object in the list to see if it is an ndarray
|
|
629
|
+
# and determine the formats.
|
|
630
|
+
formats = [obj.dtype for obj in arrayList]
|
|
631
|
+
|
|
632
|
+
if dtype is not None:
|
|
633
|
+
descr = sb.dtype(dtype)
|
|
634
|
+
else:
|
|
635
|
+
descr = format_parser(formats, names, titles, aligned, byteorder).dtype
|
|
636
|
+
_names = descr.names
|
|
637
|
+
|
|
638
|
+
# Determine shape from data-type.
|
|
639
|
+
if len(descr) != len(arrayList):
|
|
640
|
+
raise ValueError("mismatch between the number of fields "
|
|
641
|
+
"and the number of arrays")
|
|
642
|
+
|
|
643
|
+
d0 = descr[0].shape
|
|
644
|
+
nn = len(d0)
|
|
645
|
+
if nn > 0:
|
|
646
|
+
shape = shape[:-nn]
|
|
647
|
+
|
|
648
|
+
_array = recarray(shape, descr)
|
|
649
|
+
|
|
650
|
+
# populate the record array (makes a copy)
|
|
651
|
+
for k, obj in enumerate(arrayList):
|
|
652
|
+
nn = descr[k].ndim
|
|
653
|
+
testshape = obj.shape[:obj.ndim - nn]
|
|
654
|
+
name = _names[k]
|
|
655
|
+
if testshape != shape:
|
|
656
|
+
raise ValueError(f'array-shape mismatch in array {k} ("{name}")')
|
|
657
|
+
|
|
658
|
+
_array[name] = obj
|
|
659
|
+
|
|
660
|
+
return _array
|
|
661
|
+
|
|
662
|
+
|
|
663
|
+
@set_module("numpy.rec")
|
|
664
|
+
def fromrecords(recList, dtype=None, shape=None, formats=None, names=None,
|
|
665
|
+
titles=None, aligned=False, byteorder=None):
|
|
666
|
+
"""Create a recarray from a list of records in text form.
|
|
667
|
+
|
|
668
|
+
Parameters
|
|
669
|
+
----------
|
|
670
|
+
recList : sequence
|
|
671
|
+
data in the same field may be heterogeneous - they will be promoted
|
|
672
|
+
to the highest data type.
|
|
673
|
+
dtype : data-type, optional
|
|
674
|
+
valid dtype for all arrays
|
|
675
|
+
shape : int or tuple of ints, optional
|
|
676
|
+
shape of each array.
|
|
677
|
+
formats, names, titles, aligned, byteorder :
|
|
678
|
+
If `dtype` is ``None``, these arguments are passed to
|
|
679
|
+
`numpy.format_parser` to construct a dtype. See that function for
|
|
680
|
+
detailed documentation.
|
|
681
|
+
|
|
682
|
+
If both `formats` and `dtype` are None, then this will auto-detect
|
|
683
|
+
formats. Use list of tuples rather than list of lists for faster
|
|
684
|
+
processing.
|
|
685
|
+
|
|
686
|
+
Returns
|
|
687
|
+
-------
|
|
688
|
+
np.recarray
|
|
689
|
+
record array consisting of given recList rows.
|
|
690
|
+
|
|
691
|
+
Examples
|
|
692
|
+
--------
|
|
693
|
+
>>> r=np.rec.fromrecords([(456,'dbe',1.2),(2,'de',1.3)],
|
|
694
|
+
... names='col1,col2,col3')
|
|
695
|
+
>>> print(r[0])
|
|
696
|
+
(456, 'dbe', 1.2)
|
|
697
|
+
>>> r.col1
|
|
698
|
+
array([456, 2])
|
|
699
|
+
>>> r.col2
|
|
700
|
+
array(['dbe', 'de'], dtype='<U3')
|
|
701
|
+
>>> import pickle
|
|
702
|
+
>>> pickle.loads(pickle.dumps(r))
|
|
703
|
+
rec.array([(456, 'dbe', 1.2), ( 2, 'de', 1.3)],
|
|
704
|
+
dtype=[('col1', '<i8'), ('col2', '<U3'), ('col3', '<f8')])
|
|
705
|
+
"""
|
|
706
|
+
|
|
707
|
+
if formats is None and dtype is None: # slower
|
|
708
|
+
obj = sb.array(recList, dtype=object)
|
|
709
|
+
arrlist = [
|
|
710
|
+
sb.array(obj[..., i].tolist()) for i in range(obj.shape[-1])
|
|
711
|
+
]
|
|
712
|
+
return fromarrays(arrlist, formats=formats, shape=shape, names=names,
|
|
713
|
+
titles=titles, aligned=aligned, byteorder=byteorder)
|
|
714
|
+
|
|
715
|
+
if dtype is not None:
|
|
716
|
+
descr = sb.dtype((record, dtype))
|
|
717
|
+
else:
|
|
718
|
+
descr = format_parser(
|
|
719
|
+
formats, names, titles, aligned, byteorder
|
|
720
|
+
).dtype
|
|
721
|
+
|
|
722
|
+
try:
|
|
723
|
+
retval = sb.array(recList, dtype=descr)
|
|
724
|
+
except (TypeError, ValueError):
|
|
725
|
+
# NumPy 1.19.0, 2020-01-01
|
|
726
|
+
shape = _deprecate_shape_0_as_None(shape)
|
|
727
|
+
if shape is None:
|
|
728
|
+
shape = len(recList)
|
|
729
|
+
if isinstance(shape, int):
|
|
730
|
+
shape = (shape,)
|
|
731
|
+
if len(shape) > 1:
|
|
732
|
+
raise ValueError("Can only deal with 1-d array.")
|
|
733
|
+
_array = recarray(shape, descr)
|
|
734
|
+
for k in range(_array.size):
|
|
735
|
+
_array[k] = tuple(recList[k])
|
|
736
|
+
# list of lists instead of list of tuples ?
|
|
737
|
+
# 2018-02-07, 1.14.1
|
|
738
|
+
warnings.warn(
|
|
739
|
+
"fromrecords expected a list of tuples, may have received a list "
|
|
740
|
+
"of lists instead. In the future that will raise an error",
|
|
741
|
+
FutureWarning, stacklevel=2)
|
|
742
|
+
return _array
|
|
743
|
+
else:
|
|
744
|
+
if shape is not None and retval.shape != shape:
|
|
745
|
+
retval.shape = shape
|
|
746
|
+
|
|
747
|
+
res = retval.view(recarray)
|
|
748
|
+
|
|
749
|
+
return res
|
|
750
|
+
|
|
751
|
+
|
|
752
|
+
@set_module("numpy.rec")
|
|
753
|
+
def fromstring(datastring, dtype=None, shape=None, offset=0, formats=None,
|
|
754
|
+
names=None, titles=None, aligned=False, byteorder=None):
|
|
755
|
+
r"""Create a record array from binary data
|
|
756
|
+
|
|
757
|
+
Note that despite the name of this function it does not accept `str`
|
|
758
|
+
instances.
|
|
759
|
+
|
|
760
|
+
Parameters
|
|
761
|
+
----------
|
|
762
|
+
datastring : bytes-like
|
|
763
|
+
Buffer of binary data
|
|
764
|
+
dtype : data-type, optional
|
|
765
|
+
Valid dtype for all arrays
|
|
766
|
+
shape : int or tuple of ints, optional
|
|
767
|
+
Shape of each array.
|
|
768
|
+
offset : int, optional
|
|
769
|
+
Position in the buffer to start reading from.
|
|
770
|
+
formats, names, titles, aligned, byteorder :
|
|
771
|
+
If `dtype` is ``None``, these arguments are passed to
|
|
772
|
+
`numpy.format_parser` to construct a dtype. See that function for
|
|
773
|
+
detailed documentation.
|
|
774
|
+
|
|
775
|
+
|
|
776
|
+
Returns
|
|
777
|
+
-------
|
|
778
|
+
np.recarray
|
|
779
|
+
Record array view into the data in datastring. This will be readonly
|
|
780
|
+
if `datastring` is readonly.
|
|
781
|
+
|
|
782
|
+
See Also
|
|
783
|
+
--------
|
|
784
|
+
numpy.frombuffer
|
|
785
|
+
|
|
786
|
+
Examples
|
|
787
|
+
--------
|
|
788
|
+
>>> a = b'\x01\x02\x03abc'
|
|
789
|
+
>>> np.rec.fromstring(a, dtype='u1,u1,u1,S3')
|
|
790
|
+
rec.array([(1, 2, 3, b'abc')],
|
|
791
|
+
dtype=[('f0', 'u1'), ('f1', 'u1'), ('f2', 'u1'), ('f3', 'S3')])
|
|
792
|
+
|
|
793
|
+
>>> grades_dtype = [('Name', (np.str_, 10)), ('Marks', np.float64),
|
|
794
|
+
... ('GradeLevel', np.int32)]
|
|
795
|
+
>>> grades_array = np.array([('Sam', 33.3, 3), ('Mike', 44.4, 5),
|
|
796
|
+
... ('Aadi', 66.6, 6)], dtype=grades_dtype)
|
|
797
|
+
>>> np.rec.fromstring(grades_array.tobytes(), dtype=grades_dtype)
|
|
798
|
+
rec.array([('Sam', 33.3, 3), ('Mike', 44.4, 5), ('Aadi', 66.6, 6)],
|
|
799
|
+
dtype=[('Name', '<U10'), ('Marks', '<f8'), ('GradeLevel', '<i4')])
|
|
800
|
+
|
|
801
|
+
>>> s = '\x01\x02\x03abc'
|
|
802
|
+
>>> np.rec.fromstring(s, dtype='u1,u1,u1,S3')
|
|
803
|
+
Traceback (most recent call last):
|
|
804
|
+
...
|
|
805
|
+
TypeError: a bytes-like object is required, not 'str'
|
|
806
|
+
"""
|
|
807
|
+
|
|
808
|
+
if dtype is None and formats is None:
|
|
809
|
+
raise TypeError("fromstring() needs a 'dtype' or 'formats' argument")
|
|
810
|
+
|
|
811
|
+
if dtype is not None:
|
|
812
|
+
descr = sb.dtype(dtype)
|
|
813
|
+
else:
|
|
814
|
+
descr = format_parser(formats, names, titles, aligned, byteorder).dtype
|
|
815
|
+
|
|
816
|
+
itemsize = descr.itemsize
|
|
817
|
+
|
|
818
|
+
# NumPy 1.19.0, 2020-01-01
|
|
819
|
+
shape = _deprecate_shape_0_as_None(shape)
|
|
820
|
+
|
|
821
|
+
if shape in (None, -1):
|
|
822
|
+
shape = (len(datastring) - offset) // itemsize
|
|
823
|
+
|
|
824
|
+
_array = recarray(shape, descr, buf=datastring, offset=offset)
|
|
825
|
+
return _array
|
|
826
|
+
|
|
827
|
+
def get_remaining_size(fd):
|
|
828
|
+
pos = fd.tell()
|
|
829
|
+
try:
|
|
830
|
+
fd.seek(0, 2)
|
|
831
|
+
return fd.tell() - pos
|
|
832
|
+
finally:
|
|
833
|
+
fd.seek(pos, 0)
|
|
834
|
+
|
|
835
|
+
|
|
836
|
+
@set_module("numpy.rec")
|
|
837
|
+
def fromfile(fd, dtype=None, shape=None, offset=0, formats=None,
|
|
838
|
+
names=None, titles=None, aligned=False, byteorder=None):
|
|
839
|
+
"""Create an array from binary file data
|
|
840
|
+
|
|
841
|
+
Parameters
|
|
842
|
+
----------
|
|
843
|
+
fd : str or file type
|
|
844
|
+
If file is a string or a path-like object then that file is opened,
|
|
845
|
+
else it is assumed to be a file object. The file object must
|
|
846
|
+
support random access (i.e. it must have tell and seek methods).
|
|
847
|
+
dtype : data-type, optional
|
|
848
|
+
valid dtype for all arrays
|
|
849
|
+
shape : int or tuple of ints, optional
|
|
850
|
+
shape of each array.
|
|
851
|
+
offset : int, optional
|
|
852
|
+
Position in the file to start reading from.
|
|
853
|
+
formats, names, titles, aligned, byteorder :
|
|
854
|
+
If `dtype` is ``None``, these arguments are passed to
|
|
855
|
+
`numpy.format_parser` to construct a dtype. See that function for
|
|
856
|
+
detailed documentation
|
|
857
|
+
|
|
858
|
+
Returns
|
|
859
|
+
-------
|
|
860
|
+
np.recarray
|
|
861
|
+
record array consisting of data enclosed in file.
|
|
862
|
+
|
|
863
|
+
Examples
|
|
864
|
+
--------
|
|
865
|
+
>>> from tempfile import TemporaryFile
|
|
866
|
+
>>> a = np.empty(10,dtype='f8,i4,a5')
|
|
867
|
+
>>> a[5] = (0.5,10,'abcde')
|
|
868
|
+
>>>
|
|
869
|
+
>>> fd=TemporaryFile()
|
|
870
|
+
>>> a = a.view(a.dtype.newbyteorder('<'))
|
|
871
|
+
>>> a.tofile(fd)
|
|
872
|
+
>>>
|
|
873
|
+
>>> _ = fd.seek(0)
|
|
874
|
+
>>> r=np.rec.fromfile(fd, formats='f8,i4,a5', shape=10,
|
|
875
|
+
... byteorder='<')
|
|
876
|
+
>>> print(r[5])
|
|
877
|
+
(0.5, 10, b'abcde')
|
|
878
|
+
>>> r.shape
|
|
879
|
+
(10,)
|
|
880
|
+
"""
|
|
881
|
+
|
|
882
|
+
if dtype is None and formats is None:
|
|
883
|
+
raise TypeError("fromfile() needs a 'dtype' or 'formats' argument")
|
|
884
|
+
|
|
885
|
+
# NumPy 1.19.0, 2020-01-01
|
|
886
|
+
shape = _deprecate_shape_0_as_None(shape)
|
|
887
|
+
|
|
888
|
+
if shape is None:
|
|
889
|
+
shape = (-1,)
|
|
890
|
+
elif isinstance(shape, int):
|
|
891
|
+
shape = (shape,)
|
|
892
|
+
|
|
893
|
+
if hasattr(fd, 'readinto'):
|
|
894
|
+
# GH issue 2504. fd supports io.RawIOBase or io.BufferedIOBase
|
|
895
|
+
# interface. Example of fd: gzip, BytesIO, BufferedReader
|
|
896
|
+
# file already opened
|
|
897
|
+
ctx = nullcontext(fd)
|
|
898
|
+
else:
|
|
899
|
+
# open file
|
|
900
|
+
ctx = open(os.fspath(fd), 'rb')
|
|
901
|
+
|
|
902
|
+
with ctx as fd:
|
|
903
|
+
if offset > 0:
|
|
904
|
+
fd.seek(offset, 1)
|
|
905
|
+
size = get_remaining_size(fd)
|
|
906
|
+
|
|
907
|
+
if dtype is not None:
|
|
908
|
+
descr = sb.dtype(dtype)
|
|
909
|
+
else:
|
|
910
|
+
descr = format_parser(
|
|
911
|
+
formats, names, titles, aligned, byteorder
|
|
912
|
+
).dtype
|
|
913
|
+
|
|
914
|
+
itemsize = descr.itemsize
|
|
915
|
+
|
|
916
|
+
shapeprod = sb.array(shape).prod(dtype=nt.intp)
|
|
917
|
+
shapesize = shapeprod * itemsize
|
|
918
|
+
if shapesize < 0:
|
|
919
|
+
shape = list(shape)
|
|
920
|
+
shape[shape.index(-1)] = size // -shapesize
|
|
921
|
+
shape = tuple(shape)
|
|
922
|
+
shapeprod = sb.array(shape).prod(dtype=nt.intp)
|
|
923
|
+
|
|
924
|
+
nbytes = shapeprod * itemsize
|
|
925
|
+
|
|
926
|
+
if nbytes > size:
|
|
927
|
+
raise ValueError(
|
|
928
|
+
"Not enough bytes left in file for specified "
|
|
929
|
+
"shape and type."
|
|
930
|
+
)
|
|
931
|
+
|
|
932
|
+
# create the array
|
|
933
|
+
_array = recarray(shape, descr)
|
|
934
|
+
nbytesread = fd.readinto(_array.data)
|
|
935
|
+
if nbytesread != nbytes:
|
|
936
|
+
raise OSError("Didn't read as many bytes as expected")
|
|
937
|
+
|
|
938
|
+
return _array
|
|
939
|
+
|
|
940
|
+
|
|
941
|
+
@set_module("numpy.rec")
|
|
942
|
+
def array(obj, dtype=None, shape=None, offset=0, strides=None, formats=None,
|
|
943
|
+
names=None, titles=None, aligned=False, byteorder=None, copy=True):
|
|
944
|
+
"""
|
|
945
|
+
Construct a record array from a wide-variety of objects.
|
|
946
|
+
|
|
947
|
+
A general-purpose record array constructor that dispatches to the
|
|
948
|
+
appropriate `recarray` creation function based on the inputs (see Notes).
|
|
949
|
+
|
|
950
|
+
Parameters
|
|
951
|
+
----------
|
|
952
|
+
obj : any
|
|
953
|
+
Input object. See Notes for details on how various input types are
|
|
954
|
+
treated.
|
|
955
|
+
dtype : data-type, optional
|
|
956
|
+
Valid dtype for array.
|
|
957
|
+
shape : int or tuple of ints, optional
|
|
958
|
+
Shape of each array.
|
|
959
|
+
offset : int, optional
|
|
960
|
+
Position in the file or buffer to start reading from.
|
|
961
|
+
strides : tuple of ints, optional
|
|
962
|
+
Buffer (`buf`) is interpreted according to these strides (strides
|
|
963
|
+
define how many bytes each array element, row, column, etc.
|
|
964
|
+
occupy in memory).
|
|
965
|
+
formats, names, titles, aligned, byteorder :
|
|
966
|
+
If `dtype` is ``None``, these arguments are passed to
|
|
967
|
+
`numpy.format_parser` to construct a dtype. See that function for
|
|
968
|
+
detailed documentation.
|
|
969
|
+
copy : bool, optional
|
|
970
|
+
Whether to copy the input object (True), or to use a reference instead.
|
|
971
|
+
This option only applies when the input is an ndarray or recarray.
|
|
972
|
+
Defaults to True.
|
|
973
|
+
|
|
974
|
+
Returns
|
|
975
|
+
-------
|
|
976
|
+
np.recarray
|
|
977
|
+
Record array created from the specified object.
|
|
978
|
+
|
|
979
|
+
Notes
|
|
980
|
+
-----
|
|
981
|
+
If `obj` is ``None``, then call the `~numpy.recarray` constructor. If
|
|
982
|
+
`obj` is a string, then call the `fromstring` constructor. If `obj` is a
|
|
983
|
+
list or a tuple, then if the first object is an `~numpy.ndarray`, call
|
|
984
|
+
`fromarrays`, otherwise call `fromrecords`. If `obj` is a
|
|
985
|
+
`~numpy.recarray`, then make a copy of the data in the recarray
|
|
986
|
+
(if ``copy=True``) and use the new formats, names, and titles. If `obj`
|
|
987
|
+
is a file, then call `fromfile`. Finally, if obj is an `ndarray`, then
|
|
988
|
+
return ``obj.view(recarray)``, making a copy of the data if ``copy=True``.
|
|
989
|
+
|
|
990
|
+
Examples
|
|
991
|
+
--------
|
|
992
|
+
>>> a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
|
|
993
|
+
>>> a
|
|
994
|
+
array([[1, 2, 3],
|
|
995
|
+
[4, 5, 6],
|
|
996
|
+
[7, 8, 9]])
|
|
997
|
+
|
|
998
|
+
>>> np.rec.array(a)
|
|
999
|
+
rec.array([[1, 2, 3],
|
|
1000
|
+
[4, 5, 6],
|
|
1001
|
+
[7, 8, 9]],
|
|
1002
|
+
dtype=int64)
|
|
1003
|
+
|
|
1004
|
+
>>> b = [(1, 1), (2, 4), (3, 9)]
|
|
1005
|
+
>>> c = np.rec.array(b, formats = ['i2', 'f2'], names = ('x', 'y'))
|
|
1006
|
+
>>> c
|
|
1007
|
+
rec.array([(1, 1.), (2, 4.), (3, 9.)],
|
|
1008
|
+
dtype=[('x', '<i2'), ('y', '<f2')])
|
|
1009
|
+
|
|
1010
|
+
>>> c.x
|
|
1011
|
+
array([1, 2, 3], dtype=int16)
|
|
1012
|
+
|
|
1013
|
+
>>> c.y
|
|
1014
|
+
array([1., 4., 9.], dtype=float16)
|
|
1015
|
+
|
|
1016
|
+
>>> r = np.rec.array(['abc','def'], names=['col1','col2'])
|
|
1017
|
+
>>> print(r.col1)
|
|
1018
|
+
abc
|
|
1019
|
+
|
|
1020
|
+
>>> r.col1
|
|
1021
|
+
array('abc', dtype='<U3')
|
|
1022
|
+
|
|
1023
|
+
>>> r.col2
|
|
1024
|
+
array('def', dtype='<U3')
|
|
1025
|
+
"""
|
|
1026
|
+
|
|
1027
|
+
if ((isinstance(obj, (type(None), str)) or hasattr(obj, 'readinto')) and
|
|
1028
|
+
formats is None and dtype is None):
|
|
1029
|
+
raise ValueError("Must define formats (or dtype) if object is "
|
|
1030
|
+
"None, string, or an open file")
|
|
1031
|
+
|
|
1032
|
+
kwds = {}
|
|
1033
|
+
if dtype is not None:
|
|
1034
|
+
dtype = sb.dtype(dtype)
|
|
1035
|
+
elif formats is not None:
|
|
1036
|
+
dtype = format_parser(formats, names, titles,
|
|
1037
|
+
aligned, byteorder).dtype
|
|
1038
|
+
else:
|
|
1039
|
+
kwds = {'formats': formats,
|
|
1040
|
+
'names': names,
|
|
1041
|
+
'titles': titles,
|
|
1042
|
+
'aligned': aligned,
|
|
1043
|
+
'byteorder': byteorder
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
if obj is None:
|
|
1047
|
+
if shape is None:
|
|
1048
|
+
raise ValueError("Must define a shape if obj is None")
|
|
1049
|
+
return recarray(shape, dtype, buf=obj, offset=offset, strides=strides)
|
|
1050
|
+
|
|
1051
|
+
elif isinstance(obj, bytes):
|
|
1052
|
+
return fromstring(obj, dtype, shape=shape, offset=offset, **kwds)
|
|
1053
|
+
|
|
1054
|
+
elif isinstance(obj, (list, tuple)):
|
|
1055
|
+
if isinstance(obj[0], (tuple, list)):
|
|
1056
|
+
return fromrecords(obj, dtype=dtype, shape=shape, **kwds)
|
|
1057
|
+
else:
|
|
1058
|
+
return fromarrays(obj, dtype=dtype, shape=shape, **kwds)
|
|
1059
|
+
|
|
1060
|
+
elif isinstance(obj, recarray):
|
|
1061
|
+
if dtype is not None and (obj.dtype != dtype):
|
|
1062
|
+
new = obj.view(dtype)
|
|
1063
|
+
else:
|
|
1064
|
+
new = obj
|
|
1065
|
+
if copy:
|
|
1066
|
+
new = new.copy()
|
|
1067
|
+
return new
|
|
1068
|
+
|
|
1069
|
+
elif hasattr(obj, 'readinto'):
|
|
1070
|
+
return fromfile(obj, dtype=dtype, shape=shape, offset=offset)
|
|
1071
|
+
|
|
1072
|
+
elif isinstance(obj, ndarray):
|
|
1073
|
+
if dtype is not None and (obj.dtype != dtype):
|
|
1074
|
+
new = obj.view(dtype)
|
|
1075
|
+
else:
|
|
1076
|
+
new = obj
|
|
1077
|
+
if copy:
|
|
1078
|
+
new = new.copy()
|
|
1079
|
+
return new.view(recarray)
|
|
1080
|
+
|
|
1081
|
+
else:
|
|
1082
|
+
interface = getattr(obj, "__array_interface__", None)
|
|
1083
|
+
if interface is None or not isinstance(interface, dict):
|
|
1084
|
+
raise ValueError("Unknown input type")
|
|
1085
|
+
obj = sb.array(obj)
|
|
1086
|
+
if dtype is not None and (obj.dtype != dtype):
|
|
1087
|
+
obj = obj.view(dtype)
|
|
1088
|
+
return obj.view(recarray)
|