numpy 2.4.1__pp311-pypy311_pp73-macosx_14_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- numpy/__config__.py +170 -0
- numpy/__config__.pyi +108 -0
- numpy/__init__.cython-30.pxd +1242 -0
- numpy/__init__.pxd +1155 -0
- numpy/__init__.py +942 -0
- numpy/__init__.pyi +6202 -0
- numpy/_array_api_info.py +346 -0
- numpy/_array_api_info.pyi +206 -0
- numpy/_configtool.py +39 -0
- numpy/_configtool.pyi +1 -0
- numpy/_core/__init__.py +201 -0
- numpy/_core/__init__.pyi +666 -0
- numpy/_core/_add_newdocs.py +7151 -0
- numpy/_core/_add_newdocs.pyi +2 -0
- numpy/_core/_add_newdocs_scalars.py +381 -0
- numpy/_core/_add_newdocs_scalars.pyi +16 -0
- numpy/_core/_asarray.py +130 -0
- numpy/_core/_asarray.pyi +43 -0
- numpy/_core/_dtype.py +366 -0
- numpy/_core/_dtype.pyi +56 -0
- numpy/_core/_dtype_ctypes.py +120 -0
- numpy/_core/_dtype_ctypes.pyi +83 -0
- numpy/_core/_exceptions.py +162 -0
- numpy/_core/_exceptions.pyi +54 -0
- numpy/_core/_internal.py +968 -0
- numpy/_core/_internal.pyi +61 -0
- numpy/_core/_methods.py +252 -0
- numpy/_core/_methods.pyi +22 -0
- numpy/_core/_multiarray_tests.pypy311-pp73-darwin.so +0 -0
- numpy/_core/_multiarray_umath.pypy311-pp73-darwin.so +0 -0
- numpy/_core/_operand_flag_tests.pypy311-pp73-darwin.so +0 -0
- numpy/_core/_rational_tests.pypy311-pp73-darwin.so +0 -0
- numpy/_core/_simd.pyi +35 -0
- numpy/_core/_simd.pypy311-pp73-darwin.so +0 -0
- numpy/_core/_string_helpers.py +100 -0
- numpy/_core/_string_helpers.pyi +12 -0
- numpy/_core/_struct_ufunc_tests.pypy311-pp73-darwin.so +0 -0
- numpy/_core/_type_aliases.py +131 -0
- numpy/_core/_type_aliases.pyi +86 -0
- numpy/_core/_ufunc_config.py +515 -0
- numpy/_core/_ufunc_config.pyi +69 -0
- numpy/_core/_umath_tests.pyi +47 -0
- numpy/_core/_umath_tests.pypy311-pp73-darwin.so +0 -0
- numpy/_core/arrayprint.py +1779 -0
- numpy/_core/arrayprint.pyi +158 -0
- numpy/_core/cversions.py +13 -0
- numpy/_core/defchararray.py +1414 -0
- numpy/_core/defchararray.pyi +1150 -0
- numpy/_core/einsumfunc.py +1650 -0
- numpy/_core/einsumfunc.pyi +184 -0
- numpy/_core/fromnumeric.py +4233 -0
- numpy/_core/fromnumeric.pyi +1735 -0
- numpy/_core/function_base.py +547 -0
- numpy/_core/function_base.pyi +276 -0
- numpy/_core/getlimits.py +462 -0
- numpy/_core/getlimits.pyi +124 -0
- numpy/_core/include/numpy/__multiarray_api.c +376 -0
- numpy/_core/include/numpy/__multiarray_api.h +1628 -0
- numpy/_core/include/numpy/__ufunc_api.c +55 -0
- numpy/_core/include/numpy/__ufunc_api.h +349 -0
- numpy/_core/include/numpy/_neighborhood_iterator_imp.h +90 -0
- numpy/_core/include/numpy/_numpyconfig.h +33 -0
- numpy/_core/include/numpy/_public_dtype_api_table.h +86 -0
- numpy/_core/include/numpy/arrayobject.h +7 -0
- numpy/_core/include/numpy/arrayscalars.h +198 -0
- numpy/_core/include/numpy/dtype_api.h +547 -0
- numpy/_core/include/numpy/halffloat.h +70 -0
- numpy/_core/include/numpy/ndarrayobject.h +304 -0
- numpy/_core/include/numpy/ndarraytypes.h +1982 -0
- numpy/_core/include/numpy/npy_2_compat.h +249 -0
- numpy/_core/include/numpy/npy_2_complexcompat.h +28 -0
- numpy/_core/include/numpy/npy_3kcompat.h +374 -0
- numpy/_core/include/numpy/npy_common.h +989 -0
- numpy/_core/include/numpy/npy_cpu.h +126 -0
- numpy/_core/include/numpy/npy_endian.h +79 -0
- numpy/_core/include/numpy/npy_math.h +602 -0
- numpy/_core/include/numpy/npy_no_deprecated_api.h +20 -0
- numpy/_core/include/numpy/npy_os.h +42 -0
- numpy/_core/include/numpy/numpyconfig.h +185 -0
- numpy/_core/include/numpy/random/LICENSE.txt +21 -0
- numpy/_core/include/numpy/random/bitgen.h +20 -0
- numpy/_core/include/numpy/random/distributions.h +209 -0
- numpy/_core/include/numpy/random/libdivide.h +2079 -0
- numpy/_core/include/numpy/ufuncobject.h +343 -0
- numpy/_core/include/numpy/utils.h +37 -0
- numpy/_core/lib/libnpymath.a +0 -0
- numpy/_core/lib/npy-pkg-config/mlib.ini +12 -0
- numpy/_core/lib/npy-pkg-config/npymath.ini +20 -0
- numpy/_core/lib/pkgconfig/numpy.pc +7 -0
- numpy/_core/memmap.py +363 -0
- numpy/_core/memmap.pyi +3 -0
- numpy/_core/multiarray.py +1740 -0
- numpy/_core/multiarray.pyi +1316 -0
- numpy/_core/numeric.py +2758 -0
- numpy/_core/numeric.pyi +1276 -0
- numpy/_core/numerictypes.py +633 -0
- numpy/_core/numerictypes.pyi +196 -0
- numpy/_core/overrides.py +188 -0
- numpy/_core/overrides.pyi +47 -0
- numpy/_core/printoptions.py +32 -0
- numpy/_core/printoptions.pyi +28 -0
- numpy/_core/records.py +1088 -0
- numpy/_core/records.pyi +340 -0
- numpy/_core/shape_base.py +996 -0
- numpy/_core/shape_base.pyi +182 -0
- numpy/_core/strings.py +1813 -0
- numpy/_core/strings.pyi +536 -0
- numpy/_core/tests/_locales.py +72 -0
- numpy/_core/tests/_natype.py +144 -0
- numpy/_core/tests/data/astype_copy.pkl +0 -0
- numpy/_core/tests/data/generate_umath_validation_data.cpp +170 -0
- numpy/_core/tests/data/recarray_from_file.fits +0 -0
- numpy/_core/tests/data/umath-validation-set-README.txt +15 -0
- numpy/_core/tests/data/umath-validation-set-arccos.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-arccosh.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-arcsin.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-arcsinh.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-arctan.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-arctanh.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-cbrt.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-cos.csv +1375 -0
- numpy/_core/tests/data/umath-validation-set-cosh.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-exp.csv +412 -0
- numpy/_core/tests/data/umath-validation-set-exp2.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-expm1.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-log.csv +271 -0
- numpy/_core/tests/data/umath-validation-set-log10.csv +1629 -0
- numpy/_core/tests/data/umath-validation-set-log1p.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-log2.csv +1629 -0
- numpy/_core/tests/data/umath-validation-set-sin.csv +1370 -0
- numpy/_core/tests/data/umath-validation-set-sinh.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-tan.csv +1429 -0
- numpy/_core/tests/data/umath-validation-set-tanh.csv +1429 -0
- numpy/_core/tests/examples/cython/checks.pyx +373 -0
- numpy/_core/tests/examples/cython/meson.build +43 -0
- numpy/_core/tests/examples/cython/setup.py +39 -0
- numpy/_core/tests/examples/limited_api/limited_api1.c +17 -0
- numpy/_core/tests/examples/limited_api/limited_api2.pyx +11 -0
- numpy/_core/tests/examples/limited_api/limited_api_latest.c +19 -0
- numpy/_core/tests/examples/limited_api/meson.build +59 -0
- numpy/_core/tests/examples/limited_api/setup.py +24 -0
- numpy/_core/tests/test__exceptions.py +90 -0
- numpy/_core/tests/test_abc.py +54 -0
- numpy/_core/tests/test_api.py +655 -0
- numpy/_core/tests/test_argparse.py +90 -0
- numpy/_core/tests/test_array_api_info.py +113 -0
- numpy/_core/tests/test_array_coercion.py +928 -0
- numpy/_core/tests/test_array_interface.py +222 -0
- numpy/_core/tests/test_arraymethod.py +84 -0
- numpy/_core/tests/test_arrayobject.py +75 -0
- numpy/_core/tests/test_arrayprint.py +1324 -0
- numpy/_core/tests/test_casting_floatingpoint_errors.py +154 -0
- numpy/_core/tests/test_casting_unittests.py +955 -0
- numpy/_core/tests/test_conversion_utils.py +209 -0
- numpy/_core/tests/test_cpu_dispatcher.py +48 -0
- numpy/_core/tests/test_cpu_features.py +450 -0
- numpy/_core/tests/test_custom_dtypes.py +393 -0
- numpy/_core/tests/test_cython.py +352 -0
- numpy/_core/tests/test_datetime.py +2792 -0
- numpy/_core/tests/test_defchararray.py +858 -0
- numpy/_core/tests/test_deprecations.py +460 -0
- numpy/_core/tests/test_dlpack.py +190 -0
- numpy/_core/tests/test_dtype.py +2110 -0
- numpy/_core/tests/test_einsum.py +1351 -0
- numpy/_core/tests/test_errstate.py +131 -0
- numpy/_core/tests/test_extint128.py +217 -0
- numpy/_core/tests/test_finfo.py +86 -0
- numpy/_core/tests/test_function_base.py +504 -0
- numpy/_core/tests/test_getlimits.py +171 -0
- numpy/_core/tests/test_half.py +593 -0
- numpy/_core/tests/test_hashtable.py +36 -0
- numpy/_core/tests/test_indexerrors.py +122 -0
- numpy/_core/tests/test_indexing.py +1692 -0
- numpy/_core/tests/test_item_selection.py +167 -0
- numpy/_core/tests/test_limited_api.py +102 -0
- numpy/_core/tests/test_longdouble.py +370 -0
- numpy/_core/tests/test_mem_overlap.py +933 -0
- numpy/_core/tests/test_mem_policy.py +453 -0
- numpy/_core/tests/test_memmap.py +248 -0
- numpy/_core/tests/test_multiarray.py +11008 -0
- numpy/_core/tests/test_multiprocessing.py +55 -0
- numpy/_core/tests/test_multithreading.py +377 -0
- numpy/_core/tests/test_nditer.py +3533 -0
- numpy/_core/tests/test_nep50_promotions.py +287 -0
- numpy/_core/tests/test_numeric.py +4295 -0
- numpy/_core/tests/test_numerictypes.py +650 -0
- numpy/_core/tests/test_overrides.py +800 -0
- numpy/_core/tests/test_print.py +202 -0
- numpy/_core/tests/test_protocols.py +46 -0
- numpy/_core/tests/test_records.py +544 -0
- numpy/_core/tests/test_regression.py +2677 -0
- numpy/_core/tests/test_scalar_ctors.py +203 -0
- numpy/_core/tests/test_scalar_methods.py +328 -0
- numpy/_core/tests/test_scalarbuffer.py +153 -0
- numpy/_core/tests/test_scalarinherit.py +105 -0
- numpy/_core/tests/test_scalarmath.py +1168 -0
- numpy/_core/tests/test_scalarprint.py +403 -0
- numpy/_core/tests/test_shape_base.py +904 -0
- numpy/_core/tests/test_simd.py +1345 -0
- numpy/_core/tests/test_simd_module.py +105 -0
- numpy/_core/tests/test_stringdtype.py +1855 -0
- numpy/_core/tests/test_strings.py +1523 -0
- numpy/_core/tests/test_ufunc.py +3405 -0
- numpy/_core/tests/test_umath.py +4962 -0
- numpy/_core/tests/test_umath_accuracy.py +132 -0
- numpy/_core/tests/test_umath_complex.py +631 -0
- numpy/_core/tests/test_unicode.py +369 -0
- numpy/_core/umath.py +60 -0
- numpy/_core/umath.pyi +232 -0
- numpy/_distributor_init.py +15 -0
- numpy/_distributor_init.pyi +1 -0
- numpy/_expired_attrs_2_0.py +78 -0
- numpy/_expired_attrs_2_0.pyi +61 -0
- numpy/_globals.py +121 -0
- numpy/_globals.pyi +17 -0
- numpy/_pyinstaller/__init__.py +0 -0
- numpy/_pyinstaller/__init__.pyi +0 -0
- numpy/_pyinstaller/hook-numpy.py +36 -0
- numpy/_pyinstaller/hook-numpy.pyi +6 -0
- numpy/_pyinstaller/tests/__init__.py +16 -0
- numpy/_pyinstaller/tests/pyinstaller-smoke.py +32 -0
- numpy/_pyinstaller/tests/test_pyinstaller.py +35 -0
- numpy/_pytesttester.py +201 -0
- numpy/_pytesttester.pyi +18 -0
- numpy/_typing/__init__.py +173 -0
- numpy/_typing/_add_docstring.py +153 -0
- numpy/_typing/_array_like.py +106 -0
- numpy/_typing/_char_codes.py +213 -0
- numpy/_typing/_dtype_like.py +114 -0
- numpy/_typing/_extended_precision.py +15 -0
- numpy/_typing/_nbit.py +19 -0
- numpy/_typing/_nbit_base.py +94 -0
- numpy/_typing/_nbit_base.pyi +39 -0
- numpy/_typing/_nested_sequence.py +79 -0
- numpy/_typing/_scalars.py +20 -0
- numpy/_typing/_shape.py +8 -0
- numpy/_typing/_ufunc.py +7 -0
- numpy/_typing/_ufunc.pyi +975 -0
- numpy/_utils/__init__.py +95 -0
- numpy/_utils/__init__.pyi +28 -0
- numpy/_utils/_convertions.py +18 -0
- numpy/_utils/_convertions.pyi +4 -0
- numpy/_utils/_inspect.py +192 -0
- numpy/_utils/_inspect.pyi +70 -0
- numpy/_utils/_pep440.py +486 -0
- numpy/_utils/_pep440.pyi +118 -0
- numpy/char/__init__.py +2 -0
- numpy/char/__init__.pyi +111 -0
- numpy/conftest.py +248 -0
- numpy/core/__init__.py +33 -0
- numpy/core/__init__.pyi +0 -0
- numpy/core/_dtype.py +10 -0
- numpy/core/_dtype.pyi +0 -0
- numpy/core/_dtype_ctypes.py +10 -0
- numpy/core/_dtype_ctypes.pyi +0 -0
- numpy/core/_internal.py +27 -0
- numpy/core/_multiarray_umath.py +57 -0
- numpy/core/_utils.py +21 -0
- numpy/core/arrayprint.py +10 -0
- numpy/core/defchararray.py +10 -0
- numpy/core/einsumfunc.py +10 -0
- numpy/core/fromnumeric.py +10 -0
- numpy/core/function_base.py +10 -0
- numpy/core/getlimits.py +10 -0
- numpy/core/multiarray.py +25 -0
- numpy/core/numeric.py +12 -0
- numpy/core/numerictypes.py +10 -0
- numpy/core/overrides.py +10 -0
- numpy/core/overrides.pyi +7 -0
- numpy/core/records.py +10 -0
- numpy/core/shape_base.py +10 -0
- numpy/core/umath.py +10 -0
- numpy/ctypeslib/__init__.py +13 -0
- numpy/ctypeslib/__init__.pyi +15 -0
- numpy/ctypeslib/_ctypeslib.py +603 -0
- numpy/ctypeslib/_ctypeslib.pyi +236 -0
- numpy/distutils/__init__.py +64 -0
- numpy/distutils/__init__.pyi +4 -0
- numpy/distutils/__pycache__/conv_template.pypy311.pyc +0 -0
- numpy/distutils/_shell_utils.py +87 -0
- numpy/distutils/armccompiler.py +26 -0
- numpy/distutils/ccompiler.py +826 -0
- numpy/distutils/ccompiler_opt.py +2668 -0
- numpy/distutils/checks/cpu_asimd.c +27 -0
- numpy/distutils/checks/cpu_asimddp.c +16 -0
- numpy/distutils/checks/cpu_asimdfhm.c +19 -0
- numpy/distutils/checks/cpu_asimdhp.c +15 -0
- numpy/distutils/checks/cpu_avx.c +20 -0
- numpy/distutils/checks/cpu_avx2.c +20 -0
- numpy/distutils/checks/cpu_avx512_clx.c +22 -0
- numpy/distutils/checks/cpu_avx512_cnl.c +24 -0
- numpy/distutils/checks/cpu_avx512_icl.c +26 -0
- numpy/distutils/checks/cpu_avx512_knl.c +25 -0
- numpy/distutils/checks/cpu_avx512_knm.c +30 -0
- numpy/distutils/checks/cpu_avx512_skx.c +26 -0
- numpy/distutils/checks/cpu_avx512_spr.c +26 -0
- numpy/distutils/checks/cpu_avx512cd.c +20 -0
- numpy/distutils/checks/cpu_avx512f.c +20 -0
- numpy/distutils/checks/cpu_f16c.c +22 -0
- numpy/distutils/checks/cpu_fma3.c +22 -0
- numpy/distutils/checks/cpu_fma4.c +13 -0
- numpy/distutils/checks/cpu_lsx.c +11 -0
- numpy/distutils/checks/cpu_neon.c +19 -0
- numpy/distutils/checks/cpu_neon_fp16.c +11 -0
- numpy/distutils/checks/cpu_neon_vfpv4.c +21 -0
- numpy/distutils/checks/cpu_popcnt.c +32 -0
- numpy/distutils/checks/cpu_rvv.c +13 -0
- numpy/distutils/checks/cpu_sse.c +20 -0
- numpy/distutils/checks/cpu_sse2.c +20 -0
- numpy/distutils/checks/cpu_sse3.c +20 -0
- numpy/distutils/checks/cpu_sse41.c +20 -0
- numpy/distutils/checks/cpu_sse42.c +20 -0
- numpy/distutils/checks/cpu_ssse3.c +20 -0
- numpy/distutils/checks/cpu_sve.c +14 -0
- numpy/distutils/checks/cpu_vsx.c +21 -0
- numpy/distutils/checks/cpu_vsx2.c +13 -0
- numpy/distutils/checks/cpu_vsx3.c +13 -0
- numpy/distutils/checks/cpu_vsx4.c +14 -0
- numpy/distutils/checks/cpu_vx.c +16 -0
- numpy/distutils/checks/cpu_vxe.c +25 -0
- numpy/distutils/checks/cpu_vxe2.c +21 -0
- numpy/distutils/checks/cpu_xop.c +12 -0
- numpy/distutils/checks/extra_avx512bw_mask.c +18 -0
- numpy/distutils/checks/extra_avx512dq_mask.c +16 -0
- numpy/distutils/checks/extra_avx512f_reduce.c +41 -0
- numpy/distutils/checks/extra_vsx3_half_double.c +12 -0
- numpy/distutils/checks/extra_vsx4_mma.c +21 -0
- numpy/distutils/checks/extra_vsx_asm.c +36 -0
- numpy/distutils/checks/test_flags.c +1 -0
- numpy/distutils/command/__init__.py +41 -0
- numpy/distutils/command/autodist.py +148 -0
- numpy/distutils/command/bdist_rpm.py +22 -0
- numpy/distutils/command/build.py +62 -0
- numpy/distutils/command/build_clib.py +469 -0
- numpy/distutils/command/build_ext.py +752 -0
- numpy/distutils/command/build_py.py +31 -0
- numpy/distutils/command/build_scripts.py +49 -0
- numpy/distutils/command/build_src.py +773 -0
- numpy/distutils/command/config.py +516 -0
- numpy/distutils/command/config_compiler.py +126 -0
- numpy/distutils/command/develop.py +15 -0
- numpy/distutils/command/egg_info.py +25 -0
- numpy/distutils/command/install.py +79 -0
- numpy/distutils/command/install_clib.py +40 -0
- numpy/distutils/command/install_data.py +24 -0
- numpy/distutils/command/install_headers.py +25 -0
- numpy/distutils/command/sdist.py +27 -0
- numpy/distutils/conv_template.py +329 -0
- numpy/distutils/core.py +215 -0
- numpy/distutils/cpuinfo.py +683 -0
- numpy/distutils/exec_command.py +315 -0
- numpy/distutils/extension.py +101 -0
- numpy/distutils/fcompiler/__init__.py +1035 -0
- numpy/distutils/fcompiler/absoft.py +158 -0
- numpy/distutils/fcompiler/arm.py +71 -0
- numpy/distutils/fcompiler/compaq.py +120 -0
- numpy/distutils/fcompiler/environment.py +88 -0
- numpy/distutils/fcompiler/fujitsu.py +46 -0
- numpy/distutils/fcompiler/g95.py +42 -0
- numpy/distutils/fcompiler/gnu.py +555 -0
- numpy/distutils/fcompiler/hpux.py +41 -0
- numpy/distutils/fcompiler/ibm.py +97 -0
- numpy/distutils/fcompiler/intel.py +211 -0
- numpy/distutils/fcompiler/lahey.py +45 -0
- numpy/distutils/fcompiler/mips.py +54 -0
- numpy/distutils/fcompiler/nag.py +87 -0
- numpy/distutils/fcompiler/none.py +28 -0
- numpy/distutils/fcompiler/nv.py +53 -0
- numpy/distutils/fcompiler/pathf95.py +33 -0
- numpy/distutils/fcompiler/pg.py +128 -0
- numpy/distutils/fcompiler/sun.py +51 -0
- numpy/distutils/fcompiler/vast.py +52 -0
- numpy/distutils/from_template.py +261 -0
- numpy/distutils/fujitsuccompiler.py +28 -0
- numpy/distutils/intelccompiler.py +106 -0
- numpy/distutils/lib2def.py +116 -0
- numpy/distutils/line_endings.py +77 -0
- numpy/distutils/log.py +111 -0
- numpy/distutils/mingw/gfortran_vs2003_hack.c +6 -0
- numpy/distutils/mingw32ccompiler.py +620 -0
- numpy/distutils/misc_util.py +2484 -0
- numpy/distutils/msvc9compiler.py +63 -0
- numpy/distutils/msvccompiler.py +76 -0
- numpy/distutils/npy_pkg_config.py +441 -0
- numpy/distutils/numpy_distribution.py +17 -0
- numpy/distutils/pathccompiler.py +21 -0
- numpy/distutils/system_info.py +3267 -0
- numpy/distutils/tests/__init__.py +0 -0
- numpy/distutils/tests/test_build_ext.py +74 -0
- numpy/distutils/tests/test_ccompiler_opt.py +808 -0
- numpy/distutils/tests/test_ccompiler_opt_conf.py +176 -0
- numpy/distutils/tests/test_exec_command.py +217 -0
- numpy/distutils/tests/test_fcompiler.py +43 -0
- numpy/distutils/tests/test_fcompiler_gnu.py +55 -0
- numpy/distutils/tests/test_fcompiler_intel.py +30 -0
- numpy/distutils/tests/test_fcompiler_nagfor.py +22 -0
- numpy/distutils/tests/test_from_template.py +44 -0
- numpy/distutils/tests/test_log.py +34 -0
- numpy/distutils/tests/test_mingw32ccompiler.py +47 -0
- numpy/distutils/tests/test_misc_util.py +88 -0
- numpy/distutils/tests/test_npy_pkg_config.py +84 -0
- numpy/distutils/tests/test_shell_utils.py +79 -0
- numpy/distutils/tests/test_system_info.py +334 -0
- numpy/distutils/tests/utilities.py +90 -0
- numpy/distutils/unixccompiler.py +141 -0
- numpy/doc/ufuncs.py +138 -0
- numpy/dtypes.py +41 -0
- numpy/dtypes.pyi +630 -0
- numpy/exceptions.py +246 -0
- numpy/exceptions.pyi +27 -0
- numpy/f2py/__init__.py +86 -0
- numpy/f2py/__init__.pyi +5 -0
- numpy/f2py/__main__.py +5 -0
- numpy/f2py/__version__.py +1 -0
- numpy/f2py/__version__.pyi +1 -0
- numpy/f2py/_backends/__init__.py +9 -0
- numpy/f2py/_backends/__init__.pyi +5 -0
- numpy/f2py/_backends/_backend.py +44 -0
- numpy/f2py/_backends/_backend.pyi +46 -0
- numpy/f2py/_backends/_distutils.py +76 -0
- numpy/f2py/_backends/_distutils.pyi +13 -0
- numpy/f2py/_backends/_meson.py +244 -0
- numpy/f2py/_backends/_meson.pyi +62 -0
- numpy/f2py/_backends/meson.build.template +58 -0
- numpy/f2py/_isocbind.py +62 -0
- numpy/f2py/_isocbind.pyi +13 -0
- numpy/f2py/_src_pyf.py +247 -0
- numpy/f2py/_src_pyf.pyi +28 -0
- numpy/f2py/auxfuncs.py +1004 -0
- numpy/f2py/auxfuncs.pyi +262 -0
- numpy/f2py/capi_maps.py +811 -0
- numpy/f2py/capi_maps.pyi +33 -0
- numpy/f2py/cb_rules.py +665 -0
- numpy/f2py/cb_rules.pyi +17 -0
- numpy/f2py/cfuncs.py +1563 -0
- numpy/f2py/cfuncs.pyi +31 -0
- numpy/f2py/common_rules.py +143 -0
- numpy/f2py/common_rules.pyi +9 -0
- numpy/f2py/crackfortran.py +3725 -0
- numpy/f2py/crackfortran.pyi +266 -0
- numpy/f2py/diagnose.py +149 -0
- numpy/f2py/diagnose.pyi +1 -0
- numpy/f2py/f2py2e.py +788 -0
- numpy/f2py/f2py2e.pyi +74 -0
- numpy/f2py/f90mod_rules.py +269 -0
- numpy/f2py/f90mod_rules.pyi +16 -0
- numpy/f2py/func2subr.py +329 -0
- numpy/f2py/func2subr.pyi +7 -0
- numpy/f2py/rules.py +1629 -0
- numpy/f2py/rules.pyi +41 -0
- numpy/f2py/setup.cfg +3 -0
- numpy/f2py/src/fortranobject.c +1436 -0
- numpy/f2py/src/fortranobject.h +173 -0
- numpy/f2py/symbolic.py +1518 -0
- numpy/f2py/symbolic.pyi +219 -0
- numpy/f2py/tests/__init__.py +16 -0
- numpy/f2py/tests/src/abstract_interface/foo.f90 +34 -0
- numpy/f2py/tests/src/abstract_interface/gh18403_mod.f90 +6 -0
- numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +235 -0
- numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap +1 -0
- numpy/f2py/tests/src/assumed_shape/foo_free.f90 +34 -0
- numpy/f2py/tests/src/assumed_shape/foo_mod.f90 +41 -0
- numpy/f2py/tests/src/assumed_shape/foo_use.f90 +19 -0
- numpy/f2py/tests/src/assumed_shape/precision.f90 +4 -0
- numpy/f2py/tests/src/block_docstring/foo.f +6 -0
- numpy/f2py/tests/src/callback/foo.f +62 -0
- numpy/f2py/tests/src/callback/gh17797.f90 +7 -0
- numpy/f2py/tests/src/callback/gh18335.f90 +17 -0
- numpy/f2py/tests/src/callback/gh25211.f +10 -0
- numpy/f2py/tests/src/callback/gh25211.pyf +18 -0
- numpy/f2py/tests/src/callback/gh26681.f90 +18 -0
- numpy/f2py/tests/src/cli/gh_22819.pyf +6 -0
- numpy/f2py/tests/src/cli/hi77.f +3 -0
- numpy/f2py/tests/src/cli/hiworld.f90 +3 -0
- numpy/f2py/tests/src/common/block.f +11 -0
- numpy/f2py/tests/src/common/gh19161.f90 +10 -0
- numpy/f2py/tests/src/crackfortran/accesstype.f90 +13 -0
- numpy/f2py/tests/src/crackfortran/common_with_division.f +17 -0
- numpy/f2py/tests/src/crackfortran/data_common.f +8 -0
- numpy/f2py/tests/src/crackfortran/data_multiplier.f +5 -0
- numpy/f2py/tests/src/crackfortran/data_stmts.f90 +20 -0
- numpy/f2py/tests/src/crackfortran/data_with_comments.f +8 -0
- numpy/f2py/tests/src/crackfortran/foo_deps.f90 +6 -0
- numpy/f2py/tests/src/crackfortran/gh15035.f +16 -0
- numpy/f2py/tests/src/crackfortran/gh17859.f +12 -0
- numpy/f2py/tests/src/crackfortran/gh22648.pyf +7 -0
- numpy/f2py/tests/src/crackfortran/gh23533.f +5 -0
- numpy/f2py/tests/src/crackfortran/gh23598.f90 +4 -0
- numpy/f2py/tests/src/crackfortran/gh23598Warn.f90 +11 -0
- numpy/f2py/tests/src/crackfortran/gh23879.f90 +20 -0
- numpy/f2py/tests/src/crackfortran/gh27697.f90 +12 -0
- numpy/f2py/tests/src/crackfortran/gh2848.f90 +13 -0
- numpy/f2py/tests/src/crackfortran/operators.f90 +49 -0
- numpy/f2py/tests/src/crackfortran/privatemod.f90 +11 -0
- numpy/f2py/tests/src/crackfortran/publicmod.f90 +10 -0
- numpy/f2py/tests/src/crackfortran/pubprivmod.f90 +10 -0
- numpy/f2py/tests/src/crackfortran/unicode_comment.f90 +4 -0
- numpy/f2py/tests/src/f2cmap/.f2py_f2cmap +1 -0
- numpy/f2py/tests/src/f2cmap/isoFortranEnvMap.f90 +9 -0
- numpy/f2py/tests/src/isocintrin/isoCtests.f90 +34 -0
- numpy/f2py/tests/src/kind/foo.f90 +20 -0
- numpy/f2py/tests/src/mixed/foo.f +5 -0
- numpy/f2py/tests/src/mixed/foo_fixed.f90 +8 -0
- numpy/f2py/tests/src/mixed/foo_free.f90 +8 -0
- numpy/f2py/tests/src/modules/gh25337/data.f90 +8 -0
- numpy/f2py/tests/src/modules/gh25337/use_data.f90 +6 -0
- numpy/f2py/tests/src/modules/gh26920/two_mods_with_no_public_entities.f90 +21 -0
- numpy/f2py/tests/src/modules/gh26920/two_mods_with_one_public_routine.f90 +21 -0
- numpy/f2py/tests/src/modules/module_data_docstring.f90 +12 -0
- numpy/f2py/tests/src/modules/use_modules.f90 +20 -0
- numpy/f2py/tests/src/negative_bounds/issue_20853.f90 +7 -0
- numpy/f2py/tests/src/parameter/constant_array.f90 +45 -0
- numpy/f2py/tests/src/parameter/constant_both.f90 +57 -0
- numpy/f2py/tests/src/parameter/constant_compound.f90 +15 -0
- numpy/f2py/tests/src/parameter/constant_integer.f90 +22 -0
- numpy/f2py/tests/src/parameter/constant_non_compound.f90 +23 -0
- numpy/f2py/tests/src/parameter/constant_real.f90 +23 -0
- numpy/f2py/tests/src/quoted_character/foo.f +14 -0
- numpy/f2py/tests/src/regression/AB.inc +1 -0
- numpy/f2py/tests/src/regression/assignOnlyModule.f90 +25 -0
- numpy/f2py/tests/src/regression/datonly.f90 +17 -0
- numpy/f2py/tests/src/regression/f77comments.f +26 -0
- numpy/f2py/tests/src/regression/f77fixedform.f95 +5 -0
- numpy/f2py/tests/src/regression/f90continuation.f90 +9 -0
- numpy/f2py/tests/src/regression/incfile.f90 +5 -0
- numpy/f2py/tests/src/regression/inout.f90 +9 -0
- numpy/f2py/tests/src/regression/lower_f2py_fortran.f90 +5 -0
- numpy/f2py/tests/src/regression/mod_derived_types.f90 +23 -0
- numpy/f2py/tests/src/return_character/foo77.f +45 -0
- numpy/f2py/tests/src/return_character/foo90.f90 +48 -0
- numpy/f2py/tests/src/return_complex/foo77.f +45 -0
- numpy/f2py/tests/src/return_complex/foo90.f90 +48 -0
- numpy/f2py/tests/src/return_integer/foo77.f +56 -0
- numpy/f2py/tests/src/return_integer/foo90.f90 +59 -0
- numpy/f2py/tests/src/return_logical/foo77.f +56 -0
- numpy/f2py/tests/src/return_logical/foo90.f90 +59 -0
- numpy/f2py/tests/src/return_real/foo77.f +45 -0
- numpy/f2py/tests/src/return_real/foo90.f90 +48 -0
- numpy/f2py/tests/src/routines/funcfortranname.f +5 -0
- numpy/f2py/tests/src/routines/funcfortranname.pyf +11 -0
- numpy/f2py/tests/src/routines/subrout.f +4 -0
- numpy/f2py/tests/src/routines/subrout.pyf +10 -0
- numpy/f2py/tests/src/size/foo.f90 +44 -0
- numpy/f2py/tests/src/string/char.f90 +29 -0
- numpy/f2py/tests/src/string/fixed_string.f90 +34 -0
- numpy/f2py/tests/src/string/gh24008.f +8 -0
- numpy/f2py/tests/src/string/gh24662.f90 +7 -0
- numpy/f2py/tests/src/string/gh25286.f90 +14 -0
- numpy/f2py/tests/src/string/gh25286.pyf +12 -0
- numpy/f2py/tests/src/string/gh25286_bc.pyf +12 -0
- numpy/f2py/tests/src/string/scalar_string.f90 +9 -0
- numpy/f2py/tests/src/string/string.f +12 -0
- numpy/f2py/tests/src/value_attrspec/gh21665.f90 +9 -0
- numpy/f2py/tests/test_abstract_interface.py +26 -0
- numpy/f2py/tests/test_array_from_pyobj.py +678 -0
- numpy/f2py/tests/test_assumed_shape.py +50 -0
- numpy/f2py/tests/test_block_docstring.py +20 -0
- numpy/f2py/tests/test_callback.py +263 -0
- numpy/f2py/tests/test_character.py +641 -0
- numpy/f2py/tests/test_common.py +23 -0
- numpy/f2py/tests/test_crackfortran.py +421 -0
- numpy/f2py/tests/test_data.py +71 -0
- numpy/f2py/tests/test_docs.py +66 -0
- numpy/f2py/tests/test_f2cmap.py +17 -0
- numpy/f2py/tests/test_f2py2e.py +983 -0
- numpy/f2py/tests/test_isoc.py +56 -0
- numpy/f2py/tests/test_kind.py +52 -0
- numpy/f2py/tests/test_mixed.py +35 -0
- numpy/f2py/tests/test_modules.py +83 -0
- numpy/f2py/tests/test_parameter.py +129 -0
- numpy/f2py/tests/test_pyf_src.py +43 -0
- numpy/f2py/tests/test_quoted_character.py +18 -0
- numpy/f2py/tests/test_regression.py +187 -0
- numpy/f2py/tests/test_return_character.py +48 -0
- numpy/f2py/tests/test_return_complex.py +67 -0
- numpy/f2py/tests/test_return_integer.py +55 -0
- numpy/f2py/tests/test_return_logical.py +65 -0
- numpy/f2py/tests/test_return_real.py +109 -0
- numpy/f2py/tests/test_routines.py +29 -0
- numpy/f2py/tests/test_semicolon_split.py +75 -0
- numpy/f2py/tests/test_size.py +45 -0
- numpy/f2py/tests/test_string.py +100 -0
- numpy/f2py/tests/test_symbolic.py +500 -0
- numpy/f2py/tests/test_value_attrspec.py +15 -0
- numpy/f2py/tests/util.py +442 -0
- numpy/f2py/use_rules.py +99 -0
- numpy/f2py/use_rules.pyi +9 -0
- numpy/fft/__init__.py +213 -0
- numpy/fft/__init__.pyi +38 -0
- numpy/fft/_helper.py +235 -0
- numpy/fft/_helper.pyi +44 -0
- numpy/fft/_pocketfft.py +1693 -0
- numpy/fft/_pocketfft.pyi +137 -0
- numpy/fft/_pocketfft_umath.pypy311-pp73-darwin.so +0 -0
- numpy/fft/tests/__init__.py +0 -0
- numpy/fft/tests/test_helper.py +167 -0
- numpy/fft/tests/test_pocketfft.py +589 -0
- numpy/lib/__init__.py +97 -0
- numpy/lib/__init__.pyi +52 -0
- numpy/lib/_array_utils_impl.py +62 -0
- numpy/lib/_array_utils_impl.pyi +10 -0
- numpy/lib/_arraypad_impl.py +926 -0
- numpy/lib/_arraypad_impl.pyi +88 -0
- numpy/lib/_arraysetops_impl.py +1158 -0
- numpy/lib/_arraysetops_impl.pyi +462 -0
- numpy/lib/_arrayterator_impl.py +224 -0
- numpy/lib/_arrayterator_impl.pyi +45 -0
- numpy/lib/_datasource.py +700 -0
- numpy/lib/_datasource.pyi +30 -0
- numpy/lib/_format_impl.py +1036 -0
- numpy/lib/_format_impl.pyi +56 -0
- numpy/lib/_function_base_impl.py +5760 -0
- numpy/lib/_function_base_impl.pyi +2324 -0
- numpy/lib/_histograms_impl.py +1085 -0
- numpy/lib/_histograms_impl.pyi +40 -0
- numpy/lib/_index_tricks_impl.py +1048 -0
- numpy/lib/_index_tricks_impl.pyi +267 -0
- numpy/lib/_iotools.py +900 -0
- numpy/lib/_iotools.pyi +116 -0
- numpy/lib/_nanfunctions_impl.py +2006 -0
- numpy/lib/_nanfunctions_impl.pyi +48 -0
- numpy/lib/_npyio_impl.py +2583 -0
- numpy/lib/_npyio_impl.pyi +299 -0
- numpy/lib/_polynomial_impl.py +1465 -0
- numpy/lib/_polynomial_impl.pyi +338 -0
- numpy/lib/_scimath_impl.py +642 -0
- numpy/lib/_scimath_impl.pyi +93 -0
- numpy/lib/_shape_base_impl.py +1289 -0
- numpy/lib/_shape_base_impl.pyi +236 -0
- numpy/lib/_stride_tricks_impl.py +582 -0
- numpy/lib/_stride_tricks_impl.pyi +73 -0
- numpy/lib/_twodim_base_impl.py +1201 -0
- numpy/lib/_twodim_base_impl.pyi +408 -0
- numpy/lib/_type_check_impl.py +710 -0
- numpy/lib/_type_check_impl.pyi +348 -0
- numpy/lib/_ufunclike_impl.py +199 -0
- numpy/lib/_ufunclike_impl.pyi +60 -0
- numpy/lib/_user_array_impl.py +310 -0
- numpy/lib/_user_array_impl.pyi +226 -0
- numpy/lib/_utils_impl.py +784 -0
- numpy/lib/_utils_impl.pyi +22 -0
- numpy/lib/_version.py +153 -0
- numpy/lib/_version.pyi +17 -0
- numpy/lib/array_utils.py +7 -0
- numpy/lib/array_utils.pyi +6 -0
- numpy/lib/format.py +24 -0
- numpy/lib/format.pyi +24 -0
- numpy/lib/introspect.py +94 -0
- numpy/lib/introspect.pyi +3 -0
- numpy/lib/mixins.py +180 -0
- numpy/lib/mixins.pyi +78 -0
- numpy/lib/npyio.py +1 -0
- numpy/lib/npyio.pyi +5 -0
- numpy/lib/recfunctions.py +1681 -0
- numpy/lib/recfunctions.pyi +444 -0
- numpy/lib/scimath.py +13 -0
- numpy/lib/scimath.pyi +12 -0
- numpy/lib/stride_tricks.py +1 -0
- numpy/lib/stride_tricks.pyi +4 -0
- numpy/lib/tests/__init__.py +0 -0
- numpy/lib/tests/data/py2-np0-objarr.npy +0 -0
- numpy/lib/tests/data/py2-objarr.npy +0 -0
- numpy/lib/tests/data/py2-objarr.npz +0 -0
- numpy/lib/tests/data/py3-objarr.npy +0 -0
- numpy/lib/tests/data/py3-objarr.npz +0 -0
- numpy/lib/tests/data/python3.npy +0 -0
- numpy/lib/tests/data/win64python2.npy +0 -0
- numpy/lib/tests/test__datasource.py +328 -0
- numpy/lib/tests/test__iotools.py +358 -0
- numpy/lib/tests/test__version.py +64 -0
- numpy/lib/tests/test_array_utils.py +32 -0
- numpy/lib/tests/test_arraypad.py +1427 -0
- numpy/lib/tests/test_arraysetops.py +1302 -0
- numpy/lib/tests/test_arrayterator.py +45 -0
- numpy/lib/tests/test_format.py +1054 -0
- numpy/lib/tests/test_function_base.py +4750 -0
- numpy/lib/tests/test_histograms.py +855 -0
- numpy/lib/tests/test_index_tricks.py +693 -0
- numpy/lib/tests/test_io.py +2857 -0
- numpy/lib/tests/test_loadtxt.py +1099 -0
- numpy/lib/tests/test_mixins.py +215 -0
- numpy/lib/tests/test_nanfunctions.py +1438 -0
- numpy/lib/tests/test_packbits.py +376 -0
- numpy/lib/tests/test_polynomial.py +325 -0
- numpy/lib/tests/test_recfunctions.py +1042 -0
- numpy/lib/tests/test_regression.py +231 -0
- numpy/lib/tests/test_shape_base.py +813 -0
- numpy/lib/tests/test_stride_tricks.py +655 -0
- numpy/lib/tests/test_twodim_base.py +559 -0
- numpy/lib/tests/test_type_check.py +473 -0
- numpy/lib/tests/test_ufunclike.py +97 -0
- numpy/lib/tests/test_utils.py +80 -0
- numpy/lib/user_array.py +1 -0
- numpy/lib/user_array.pyi +1 -0
- numpy/linalg/__init__.py +95 -0
- numpy/linalg/__init__.pyi +71 -0
- numpy/linalg/_linalg.py +3657 -0
- numpy/linalg/_linalg.pyi +548 -0
- numpy/linalg/_umath_linalg.pyi +60 -0
- numpy/linalg/_umath_linalg.pypy311-pp73-darwin.so +0 -0
- numpy/linalg/lapack_lite.pyi +143 -0
- numpy/linalg/lapack_lite.pypy311-pp73-darwin.so +0 -0
- numpy/linalg/tests/__init__.py +0 -0
- numpy/linalg/tests/test_deprecations.py +21 -0
- numpy/linalg/tests/test_linalg.py +2442 -0
- numpy/linalg/tests/test_regression.py +182 -0
- numpy/ma/API_CHANGES.txt +135 -0
- numpy/ma/LICENSE +24 -0
- numpy/ma/README.rst +236 -0
- numpy/ma/__init__.py +53 -0
- numpy/ma/__init__.pyi +458 -0
- numpy/ma/core.py +8929 -0
- numpy/ma/core.pyi +3720 -0
- numpy/ma/extras.py +2266 -0
- numpy/ma/extras.pyi +297 -0
- numpy/ma/mrecords.py +762 -0
- numpy/ma/mrecords.pyi +96 -0
- numpy/ma/tests/__init__.py +0 -0
- numpy/ma/tests/test_arrayobject.py +40 -0
- numpy/ma/tests/test_core.py +6008 -0
- numpy/ma/tests/test_deprecations.py +65 -0
- numpy/ma/tests/test_extras.py +1945 -0
- numpy/ma/tests/test_mrecords.py +495 -0
- numpy/ma/tests/test_old_ma.py +939 -0
- numpy/ma/tests/test_regression.py +83 -0
- numpy/ma/tests/test_subclassing.py +469 -0
- numpy/ma/testutils.py +294 -0
- numpy/ma/testutils.pyi +69 -0
- numpy/matlib.py +380 -0
- numpy/matlib.pyi +580 -0
- numpy/matrixlib/__init__.py +12 -0
- numpy/matrixlib/__init__.pyi +3 -0
- numpy/matrixlib/defmatrix.py +1119 -0
- numpy/matrixlib/defmatrix.pyi +218 -0
- numpy/matrixlib/tests/__init__.py +0 -0
- numpy/matrixlib/tests/test_defmatrix.py +455 -0
- numpy/matrixlib/tests/test_interaction.py +360 -0
- numpy/matrixlib/tests/test_masked_matrix.py +240 -0
- numpy/matrixlib/tests/test_matrix_linalg.py +110 -0
- numpy/matrixlib/tests/test_multiarray.py +17 -0
- numpy/matrixlib/tests/test_numeric.py +18 -0
- numpy/matrixlib/tests/test_regression.py +31 -0
- numpy/polynomial/__init__.py +187 -0
- numpy/polynomial/__init__.pyi +31 -0
- numpy/polynomial/_polybase.py +1191 -0
- numpy/polynomial/_polybase.pyi +262 -0
- numpy/polynomial/_polytypes.pyi +501 -0
- numpy/polynomial/chebyshev.py +2001 -0
- numpy/polynomial/chebyshev.pyi +180 -0
- numpy/polynomial/hermite.py +1738 -0
- numpy/polynomial/hermite.pyi +106 -0
- numpy/polynomial/hermite_e.py +1640 -0
- numpy/polynomial/hermite_e.pyi +106 -0
- numpy/polynomial/laguerre.py +1673 -0
- numpy/polynomial/laguerre.pyi +100 -0
- numpy/polynomial/legendre.py +1603 -0
- numpy/polynomial/legendre.pyi +100 -0
- numpy/polynomial/polynomial.py +1625 -0
- numpy/polynomial/polynomial.pyi +109 -0
- numpy/polynomial/polyutils.py +759 -0
- numpy/polynomial/polyutils.pyi +307 -0
- numpy/polynomial/tests/__init__.py +0 -0
- numpy/polynomial/tests/test_chebyshev.py +618 -0
- numpy/polynomial/tests/test_classes.py +613 -0
- numpy/polynomial/tests/test_hermite.py +553 -0
- numpy/polynomial/tests/test_hermite_e.py +554 -0
- numpy/polynomial/tests/test_laguerre.py +535 -0
- numpy/polynomial/tests/test_legendre.py +566 -0
- numpy/polynomial/tests/test_polynomial.py +691 -0
- numpy/polynomial/tests/test_polyutils.py +123 -0
- numpy/polynomial/tests/test_printing.py +557 -0
- numpy/polynomial/tests/test_symbol.py +217 -0
- numpy/py.typed +0 -0
- numpy/random/LICENSE.md +71 -0
- numpy/random/__init__.pxd +14 -0
- numpy/random/__init__.py +213 -0
- numpy/random/__init__.pyi +124 -0
- numpy/random/_bounded_integers.pxd +29 -0
- numpy/random/_bounded_integers.pyi +1 -0
- numpy/random/_bounded_integers.pypy311-pp73-darwin.so +0 -0
- numpy/random/_common.pxd +110 -0
- numpy/random/_common.pyi +16 -0
- numpy/random/_common.pypy311-pp73-darwin.so +0 -0
- numpy/random/_examples/cffi/extending.py +44 -0
- numpy/random/_examples/cffi/parse.py +53 -0
- numpy/random/_examples/cython/extending.pyx +77 -0
- numpy/random/_examples/cython/extending_distributions.pyx +117 -0
- numpy/random/_examples/cython/meson.build +53 -0
- numpy/random/_examples/numba/extending.py +86 -0
- numpy/random/_examples/numba/extending_distributions.py +67 -0
- numpy/random/_generator.pyi +862 -0
- numpy/random/_generator.pypy311-pp73-darwin.so +0 -0
- numpy/random/_mt19937.pyi +27 -0
- numpy/random/_mt19937.pypy311-pp73-darwin.so +0 -0
- numpy/random/_pcg64.pyi +41 -0
- numpy/random/_pcg64.pypy311-pp73-darwin.so +0 -0
- numpy/random/_philox.pyi +36 -0
- numpy/random/_philox.pypy311-pp73-darwin.so +0 -0
- numpy/random/_pickle.py +88 -0
- numpy/random/_pickle.pyi +43 -0
- numpy/random/_sfc64.pyi +25 -0
- numpy/random/_sfc64.pypy311-pp73-darwin.so +0 -0
- numpy/random/bit_generator.pxd +40 -0
- numpy/random/bit_generator.pyi +123 -0
- numpy/random/bit_generator.pypy311-pp73-darwin.so +0 -0
- numpy/random/c_distributions.pxd +119 -0
- numpy/random/lib/libnpyrandom.a +0 -0
- numpy/random/mtrand.pyi +759 -0
- numpy/random/mtrand.pypy311-pp73-darwin.so +0 -0
- numpy/random/tests/__init__.py +0 -0
- numpy/random/tests/data/__init__.py +0 -0
- numpy/random/tests/data/generator_pcg64_np121.pkl.gz +0 -0
- numpy/random/tests/data/generator_pcg64_np126.pkl.gz +0 -0
- numpy/random/tests/data/mt19937-testset-1.csv +1001 -0
- numpy/random/tests/data/mt19937-testset-2.csv +1001 -0
- numpy/random/tests/data/pcg64-testset-1.csv +1001 -0
- numpy/random/tests/data/pcg64-testset-2.csv +1001 -0
- numpy/random/tests/data/pcg64dxsm-testset-1.csv +1001 -0
- numpy/random/tests/data/pcg64dxsm-testset-2.csv +1001 -0
- numpy/random/tests/data/philox-testset-1.csv +1001 -0
- numpy/random/tests/data/philox-testset-2.csv +1001 -0
- numpy/random/tests/data/sfc64-testset-1.csv +1001 -0
- numpy/random/tests/data/sfc64-testset-2.csv +1001 -0
- numpy/random/tests/data/sfc64_np126.pkl.gz +0 -0
- numpy/random/tests/test_direct.py +595 -0
- numpy/random/tests/test_extending.py +131 -0
- numpy/random/tests/test_generator_mt19937.py +2825 -0
- numpy/random/tests/test_generator_mt19937_regressions.py +221 -0
- numpy/random/tests/test_random.py +1724 -0
- numpy/random/tests/test_randomstate.py +2099 -0
- numpy/random/tests/test_randomstate_regression.py +213 -0
- numpy/random/tests/test_regression.py +175 -0
- numpy/random/tests/test_seed_sequence.py +79 -0
- numpy/random/tests/test_smoke.py +882 -0
- numpy/rec/__init__.py +2 -0
- numpy/rec/__init__.pyi +23 -0
- numpy/strings/__init__.py +2 -0
- numpy/strings/__init__.pyi +97 -0
- numpy/testing/__init__.py +22 -0
- numpy/testing/__init__.pyi +107 -0
- numpy/testing/_private/__init__.py +0 -0
- numpy/testing/_private/__init__.pyi +0 -0
- numpy/testing/_private/extbuild.py +250 -0
- numpy/testing/_private/extbuild.pyi +25 -0
- numpy/testing/_private/utils.py +2830 -0
- numpy/testing/_private/utils.pyi +505 -0
- numpy/testing/overrides.py +84 -0
- numpy/testing/overrides.pyi +10 -0
- numpy/testing/print_coercion_tables.py +207 -0
- numpy/testing/print_coercion_tables.pyi +26 -0
- numpy/testing/tests/__init__.py +0 -0
- numpy/testing/tests/test_utils.py +2123 -0
- numpy/tests/__init__.py +0 -0
- numpy/tests/test__all__.py +10 -0
- numpy/tests/test_configtool.py +51 -0
- numpy/tests/test_ctypeslib.py +383 -0
- numpy/tests/test_lazyloading.py +42 -0
- numpy/tests/test_matlib.py +59 -0
- numpy/tests/test_numpy_config.py +47 -0
- numpy/tests/test_numpy_version.py +54 -0
- numpy/tests/test_public_api.py +807 -0
- numpy/tests/test_reloading.py +76 -0
- numpy/tests/test_scripts.py +48 -0
- numpy/tests/test_warnings.py +79 -0
- numpy/typing/__init__.py +233 -0
- numpy/typing/__init__.pyi +3 -0
- numpy/typing/mypy_plugin.py +200 -0
- numpy/typing/tests/__init__.py +0 -0
- numpy/typing/tests/data/fail/arithmetic.pyi +126 -0
- numpy/typing/tests/data/fail/array_constructors.pyi +34 -0
- numpy/typing/tests/data/fail/array_like.pyi +15 -0
- numpy/typing/tests/data/fail/array_pad.pyi +6 -0
- numpy/typing/tests/data/fail/arrayprint.pyi +15 -0
- numpy/typing/tests/data/fail/arrayterator.pyi +14 -0
- numpy/typing/tests/data/fail/bitwise_ops.pyi +17 -0
- numpy/typing/tests/data/fail/char.pyi +63 -0
- numpy/typing/tests/data/fail/chararray.pyi +61 -0
- numpy/typing/tests/data/fail/comparisons.pyi +27 -0
- numpy/typing/tests/data/fail/constants.pyi +3 -0
- numpy/typing/tests/data/fail/datasource.pyi +16 -0
- numpy/typing/tests/data/fail/dtype.pyi +17 -0
- numpy/typing/tests/data/fail/einsumfunc.pyi +12 -0
- numpy/typing/tests/data/fail/flatiter.pyi +38 -0
- numpy/typing/tests/data/fail/fromnumeric.pyi +148 -0
- numpy/typing/tests/data/fail/histograms.pyi +12 -0
- numpy/typing/tests/data/fail/index_tricks.pyi +14 -0
- numpy/typing/tests/data/fail/lib_function_base.pyi +60 -0
- numpy/typing/tests/data/fail/lib_polynomial.pyi +29 -0
- numpy/typing/tests/data/fail/lib_utils.pyi +3 -0
- numpy/typing/tests/data/fail/lib_version.pyi +6 -0
- numpy/typing/tests/data/fail/linalg.pyi +52 -0
- numpy/typing/tests/data/fail/ma.pyi +155 -0
- numpy/typing/tests/data/fail/memmap.pyi +5 -0
- numpy/typing/tests/data/fail/modules.pyi +17 -0
- numpy/typing/tests/data/fail/multiarray.pyi +52 -0
- numpy/typing/tests/data/fail/ndarray.pyi +11 -0
- numpy/typing/tests/data/fail/ndarray_misc.pyi +49 -0
- numpy/typing/tests/data/fail/nditer.pyi +8 -0
- numpy/typing/tests/data/fail/nested_sequence.pyi +17 -0
- numpy/typing/tests/data/fail/npyio.pyi +24 -0
- numpy/typing/tests/data/fail/numerictypes.pyi +5 -0
- numpy/typing/tests/data/fail/random.pyi +62 -0
- numpy/typing/tests/data/fail/rec.pyi +17 -0
- numpy/typing/tests/data/fail/scalars.pyi +86 -0
- numpy/typing/tests/data/fail/shape.pyi +7 -0
- numpy/typing/tests/data/fail/shape_base.pyi +8 -0
- numpy/typing/tests/data/fail/stride_tricks.pyi +9 -0
- numpy/typing/tests/data/fail/strings.pyi +52 -0
- numpy/typing/tests/data/fail/testing.pyi +28 -0
- numpy/typing/tests/data/fail/twodim_base.pyi +39 -0
- numpy/typing/tests/data/fail/type_check.pyi +12 -0
- numpy/typing/tests/data/fail/ufunc_config.pyi +21 -0
- numpy/typing/tests/data/fail/ufunclike.pyi +21 -0
- numpy/typing/tests/data/fail/ufuncs.pyi +17 -0
- numpy/typing/tests/data/fail/warnings_and_errors.pyi +5 -0
- numpy/typing/tests/data/misc/extended_precision.pyi +9 -0
- numpy/typing/tests/data/mypy.ini +8 -0
- numpy/typing/tests/data/pass/arithmetic.py +614 -0
- numpy/typing/tests/data/pass/array_constructors.py +138 -0
- numpy/typing/tests/data/pass/array_like.py +43 -0
- numpy/typing/tests/data/pass/arrayprint.py +37 -0
- numpy/typing/tests/data/pass/arrayterator.py +28 -0
- numpy/typing/tests/data/pass/bitwise_ops.py +131 -0
- numpy/typing/tests/data/pass/comparisons.py +316 -0
- numpy/typing/tests/data/pass/dtype.py +57 -0
- numpy/typing/tests/data/pass/einsumfunc.py +36 -0
- numpy/typing/tests/data/pass/flatiter.py +26 -0
- numpy/typing/tests/data/pass/fromnumeric.py +272 -0
- numpy/typing/tests/data/pass/index_tricks.py +62 -0
- numpy/typing/tests/data/pass/lib_user_array.py +22 -0
- numpy/typing/tests/data/pass/lib_utils.py +19 -0
- numpy/typing/tests/data/pass/lib_version.py +18 -0
- numpy/typing/tests/data/pass/literal.py +52 -0
- numpy/typing/tests/data/pass/ma.py +199 -0
- numpy/typing/tests/data/pass/mod.py +149 -0
- numpy/typing/tests/data/pass/modules.py +45 -0
- numpy/typing/tests/data/pass/multiarray.py +77 -0
- numpy/typing/tests/data/pass/ndarray_conversion.py +81 -0
- numpy/typing/tests/data/pass/ndarray_misc.py +199 -0
- numpy/typing/tests/data/pass/ndarray_shape_manipulation.py +47 -0
- numpy/typing/tests/data/pass/nditer.py +4 -0
- numpy/typing/tests/data/pass/numeric.py +90 -0
- numpy/typing/tests/data/pass/numerictypes.py +17 -0
- numpy/typing/tests/data/pass/random.py +1498 -0
- numpy/typing/tests/data/pass/recfunctions.py +164 -0
- numpy/typing/tests/data/pass/scalars.py +249 -0
- numpy/typing/tests/data/pass/shape.py +19 -0
- numpy/typing/tests/data/pass/simple.py +170 -0
- numpy/typing/tests/data/pass/ufunc_config.py +64 -0
- numpy/typing/tests/data/pass/ufunclike.py +52 -0
- numpy/typing/tests/data/pass/ufuncs.py +16 -0
- numpy/typing/tests/data/pass/warnings_and_errors.py +6 -0
- numpy/typing/tests/data/reveal/arithmetic.pyi +719 -0
- numpy/typing/tests/data/reveal/array_api_info.pyi +70 -0
- numpy/typing/tests/data/reveal/array_constructors.pyi +277 -0
- numpy/typing/tests/data/reveal/arraypad.pyi +27 -0
- numpy/typing/tests/data/reveal/arrayprint.pyi +25 -0
- numpy/typing/tests/data/reveal/arraysetops.pyi +74 -0
- numpy/typing/tests/data/reveal/arrayterator.pyi +27 -0
- numpy/typing/tests/data/reveal/bitwise_ops.pyi +166 -0
- numpy/typing/tests/data/reveal/char.pyi +225 -0
- numpy/typing/tests/data/reveal/chararray.pyi +138 -0
- numpy/typing/tests/data/reveal/comparisons.pyi +264 -0
- numpy/typing/tests/data/reveal/constants.pyi +14 -0
- numpy/typing/tests/data/reveal/ctypeslib.pyi +81 -0
- numpy/typing/tests/data/reveal/datasource.pyi +23 -0
- numpy/typing/tests/data/reveal/dtype.pyi +132 -0
- numpy/typing/tests/data/reveal/einsumfunc.pyi +39 -0
- numpy/typing/tests/data/reveal/emath.pyi +54 -0
- numpy/typing/tests/data/reveal/fft.pyi +37 -0
- numpy/typing/tests/data/reveal/flatiter.pyi +86 -0
- numpy/typing/tests/data/reveal/fromnumeric.pyi +347 -0
- numpy/typing/tests/data/reveal/getlimits.pyi +53 -0
- numpy/typing/tests/data/reveal/histograms.pyi +25 -0
- numpy/typing/tests/data/reveal/index_tricks.pyi +70 -0
- numpy/typing/tests/data/reveal/lib_function_base.pyi +409 -0
- numpy/typing/tests/data/reveal/lib_polynomial.pyi +147 -0
- numpy/typing/tests/data/reveal/lib_utils.pyi +17 -0
- numpy/typing/tests/data/reveal/lib_version.pyi +20 -0
- numpy/typing/tests/data/reveal/linalg.pyi +154 -0
- numpy/typing/tests/data/reveal/ma.pyi +1098 -0
- numpy/typing/tests/data/reveal/matrix.pyi +73 -0
- numpy/typing/tests/data/reveal/memmap.pyi +19 -0
- numpy/typing/tests/data/reveal/mod.pyi +178 -0
- numpy/typing/tests/data/reveal/modules.pyi +51 -0
- numpy/typing/tests/data/reveal/multiarray.pyi +197 -0
- numpy/typing/tests/data/reveal/nbit_base_example.pyi +20 -0
- numpy/typing/tests/data/reveal/ndarray_assignability.pyi +82 -0
- numpy/typing/tests/data/reveal/ndarray_conversion.pyi +83 -0
- numpy/typing/tests/data/reveal/ndarray_misc.pyi +246 -0
- numpy/typing/tests/data/reveal/ndarray_shape_manipulation.pyi +47 -0
- numpy/typing/tests/data/reveal/nditer.pyi +49 -0
- numpy/typing/tests/data/reveal/nested_sequence.pyi +25 -0
- numpy/typing/tests/data/reveal/npyio.pyi +83 -0
- numpy/typing/tests/data/reveal/numeric.pyi +170 -0
- numpy/typing/tests/data/reveal/numerictypes.pyi +16 -0
- numpy/typing/tests/data/reveal/polynomial_polybase.pyi +217 -0
- numpy/typing/tests/data/reveal/polynomial_polyutils.pyi +218 -0
- numpy/typing/tests/data/reveal/polynomial_series.pyi +138 -0
- numpy/typing/tests/data/reveal/random.pyi +1546 -0
- numpy/typing/tests/data/reveal/rec.pyi +171 -0
- numpy/typing/tests/data/reveal/scalars.pyi +191 -0
- numpy/typing/tests/data/reveal/shape.pyi +13 -0
- numpy/typing/tests/data/reveal/shape_base.pyi +52 -0
- numpy/typing/tests/data/reveal/stride_tricks.pyi +27 -0
- numpy/typing/tests/data/reveal/strings.pyi +196 -0
- numpy/typing/tests/data/reveal/testing.pyi +198 -0
- numpy/typing/tests/data/reveal/twodim_base.pyi +225 -0
- numpy/typing/tests/data/reveal/type_check.pyi +67 -0
- numpy/typing/tests/data/reveal/ufunc_config.pyi +29 -0
- numpy/typing/tests/data/reveal/ufunclike.pyi +31 -0
- numpy/typing/tests/data/reveal/ufuncs.pyi +142 -0
- numpy/typing/tests/data/reveal/warnings_and_errors.pyi +11 -0
- numpy/typing/tests/test_isfile.py +38 -0
- numpy/typing/tests/test_runtime.py +110 -0
- numpy/typing/tests/test_typing.py +205 -0
- numpy/version.py +11 -0
- numpy/version.pyi +9 -0
- numpy-2.4.1.dist-info/METADATA +139 -0
- numpy-2.4.1.dist-info/RECORD +1039 -0
- numpy-2.4.1.dist-info/WHEEL +6 -0
- numpy-2.4.1.dist-info/entry_points.txt +13 -0
- numpy-2.4.1.dist-info/licenses/LICENSE.txt +935 -0
- numpy-2.4.1.dist-info/licenses/numpy/_core/include/numpy/libdivide/LICENSE.txt +21 -0
- numpy-2.4.1.dist-info/licenses/numpy/_core/src/common/pythoncapi-compat/COPYING +14 -0
- numpy-2.4.1.dist-info/licenses/numpy/_core/src/highway/LICENSE +371 -0
- numpy-2.4.1.dist-info/licenses/numpy/_core/src/multiarray/dragon4_LICENSE.txt +27 -0
- numpy-2.4.1.dist-info/licenses/numpy/_core/src/npysort/x86-simd-sort/LICENSE.md +28 -0
- numpy-2.4.1.dist-info/licenses/numpy/_core/src/umath/svml/LICENSE +30 -0
- numpy-2.4.1.dist-info/licenses/numpy/fft/pocketfft/LICENSE.md +25 -0
- numpy-2.4.1.dist-info/licenses/numpy/linalg/lapack_lite/LICENSE.txt +48 -0
- numpy-2.4.1.dist-info/licenses/numpy/ma/LICENSE +24 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/LICENSE.md +71 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/src/distributions/LICENSE.md +61 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/src/mt19937/LICENSE.md +61 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/src/pcg64/LICENSE.md +22 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/src/philox/LICENSE.md +31 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/src/sfc64/LICENSE.md +27 -0
- numpy-2.4.1.dist-info/licenses/numpy/random/src/splitmix64/LICENSE.md +9 -0
numpy/random/_common.pxd
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#cython: language_level=3
|
|
2
|
+
|
|
3
|
+
from libc.stdint cimport uint32_t, uint64_t, int32_t, int64_t
|
|
4
|
+
|
|
5
|
+
import numpy as np
|
|
6
|
+
cimport numpy as np
|
|
7
|
+
|
|
8
|
+
from numpy.random cimport bitgen_t
|
|
9
|
+
|
|
10
|
+
cdef double POISSON_LAM_MAX
|
|
11
|
+
cdef double LEGACY_POISSON_LAM_MAX
|
|
12
|
+
cdef uint64_t MAXSIZE
|
|
13
|
+
|
|
14
|
+
cdef enum ConstraintType:
|
|
15
|
+
CONS_NONE
|
|
16
|
+
CONS_NON_NEGATIVE
|
|
17
|
+
CONS_POSITIVE
|
|
18
|
+
CONS_POSITIVE_NOT_NAN
|
|
19
|
+
CONS_BOUNDED_0_1
|
|
20
|
+
CONS_BOUNDED_GT_0_1
|
|
21
|
+
CONS_BOUNDED_LT_0_1
|
|
22
|
+
CONS_GT_1
|
|
23
|
+
CONS_GTE_1
|
|
24
|
+
CONS_POISSON
|
|
25
|
+
LEGACY_CONS_POISSON
|
|
26
|
+
LEGACY_CONS_NON_NEGATIVE_INBOUNDS_LONG
|
|
27
|
+
|
|
28
|
+
ctypedef ConstraintType constraint_type
|
|
29
|
+
ctypedef fused double_or_int64:
|
|
30
|
+
double
|
|
31
|
+
int64_t
|
|
32
|
+
|
|
33
|
+
cdef object benchmark(bitgen_t *bitgen, object lock, Py_ssize_t cnt, object method)
|
|
34
|
+
cdef object random_raw(bitgen_t *bitgen, object lock, object size, object output)
|
|
35
|
+
cdef object prepare_cffi(bitgen_t *bitgen)
|
|
36
|
+
cdef object prepare_ctypes(bitgen_t *bitgen)
|
|
37
|
+
cdef int check_constraint(double_or_int64 val, object name, constraint_type cons) except -1
|
|
38
|
+
cdef int check_array_constraint(np.ndarray val, object name, constraint_type cons) except -1
|
|
39
|
+
|
|
40
|
+
cdef extern from "include/aligned_malloc.h":
|
|
41
|
+
cdef void *PyArray_realloc_aligned(void *p, size_t n)
|
|
42
|
+
cdef void *PyArray_malloc_aligned(size_t n)
|
|
43
|
+
cdef void *PyArray_calloc_aligned(size_t n, size_t s)
|
|
44
|
+
cdef void PyArray_free_aligned(void *p)
|
|
45
|
+
|
|
46
|
+
ctypedef void (*random_double_fill)(bitgen_t *state, np.npy_intp count, double* out) noexcept nogil
|
|
47
|
+
ctypedef double (*random_double_0)(void *state) noexcept nogil
|
|
48
|
+
ctypedef double (*random_double_1)(void *state, double a) noexcept nogil
|
|
49
|
+
ctypedef double (*random_double_2)(void *state, double a, double b) noexcept nogil
|
|
50
|
+
ctypedef double (*random_double_3)(void *state, double a, double b, double c) noexcept nogil
|
|
51
|
+
|
|
52
|
+
ctypedef void (*random_float_fill)(bitgen_t *state, np.npy_intp count, float* out) noexcept nogil
|
|
53
|
+
ctypedef float (*random_float_0)(bitgen_t *state) noexcept nogil
|
|
54
|
+
ctypedef float (*random_float_1)(bitgen_t *state, float a) noexcept nogil
|
|
55
|
+
|
|
56
|
+
ctypedef int64_t (*random_uint_0)(void *state) noexcept nogil
|
|
57
|
+
ctypedef int64_t (*random_uint_d)(void *state, double a) noexcept nogil
|
|
58
|
+
ctypedef int64_t (*random_uint_dd)(void *state, double a, double b) noexcept nogil
|
|
59
|
+
ctypedef int64_t (*random_uint_di)(void *state, double a, uint64_t b) noexcept nogil
|
|
60
|
+
ctypedef int64_t (*random_uint_i)(void *state, int64_t a) noexcept nogil
|
|
61
|
+
ctypedef int64_t (*random_uint_iii)(void *state, int64_t a, int64_t b, int64_t c) noexcept nogil
|
|
62
|
+
|
|
63
|
+
ctypedef uint32_t (*random_uint_0_32)(bitgen_t *state) noexcept nogil
|
|
64
|
+
ctypedef uint32_t (*random_uint_1_i_32)(bitgen_t *state, uint32_t a) noexcept nogil
|
|
65
|
+
|
|
66
|
+
ctypedef int32_t (*random_int_2_i_32)(bitgen_t *state, int32_t a, int32_t b) noexcept nogil
|
|
67
|
+
ctypedef int64_t (*random_int_2_i)(bitgen_t *state, int64_t a, int64_t b) noexcept nogil
|
|
68
|
+
|
|
69
|
+
cdef double kahan_sum(double *darr, np.npy_intp n) noexcept
|
|
70
|
+
|
|
71
|
+
cdef inline double uint64_to_double(uint64_t rnd) noexcept nogil:
|
|
72
|
+
return (rnd >> 11) * (1.0 / 9007199254740992.0)
|
|
73
|
+
|
|
74
|
+
cdef object double_fill(void *func, bitgen_t *state, object size, object lock, object out)
|
|
75
|
+
|
|
76
|
+
cdef object float_fill(void *func, bitgen_t *state, object size, object lock, object out)
|
|
77
|
+
|
|
78
|
+
cdef object float_fill_from_double(void *func, bitgen_t *state, object size, object lock, object out)
|
|
79
|
+
|
|
80
|
+
cdef object wrap_int(object val, object bits)
|
|
81
|
+
|
|
82
|
+
cdef np.ndarray int_to_array(object value, object name, object bits, object uint_size)
|
|
83
|
+
|
|
84
|
+
cdef validate_output_shape(iter_shape, np.ndarray output)
|
|
85
|
+
|
|
86
|
+
cdef object cont(void *func, void *state, object size, object lock, int narg,
|
|
87
|
+
object a, object a_name, constraint_type a_constraint,
|
|
88
|
+
object b, object b_name, constraint_type b_constraint,
|
|
89
|
+
object c, object c_name, constraint_type c_constraint,
|
|
90
|
+
object out)
|
|
91
|
+
|
|
92
|
+
cdef object disc(void *func, void *state, object size, object lock,
|
|
93
|
+
int narg_double, int narg_int64,
|
|
94
|
+
object a, object a_name, constraint_type a_constraint,
|
|
95
|
+
object b, object b_name, constraint_type b_constraint,
|
|
96
|
+
object c, object c_name, constraint_type c_constraint)
|
|
97
|
+
|
|
98
|
+
cdef object cont_f(void *func, bitgen_t *state, object size, object lock,
|
|
99
|
+
object a, object a_name, constraint_type a_constraint,
|
|
100
|
+
object out)
|
|
101
|
+
|
|
102
|
+
cdef object cont_broadcast_3(void *func, void *state, object size, object lock,
|
|
103
|
+
np.ndarray a_arr, object a_name, constraint_type a_constraint,
|
|
104
|
+
np.ndarray b_arr, object b_name, constraint_type b_constraint,
|
|
105
|
+
np.ndarray c_arr, object c_name, constraint_type c_constraint)
|
|
106
|
+
|
|
107
|
+
cdef object discrete_broadcast_iii(void *func, void *state, object size, object lock,
|
|
108
|
+
np.ndarray a_arr, object a_name, constraint_type a_constraint,
|
|
109
|
+
np.ndarray b_arr, object b_name, constraint_type b_constraint,
|
|
110
|
+
np.ndarray c_arr, object c_name, constraint_type c_constraint)
|
numpy/random/_common.pyi
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from collections.abc import Callable
|
|
2
|
+
from typing import Any, NamedTuple, TypeAlias
|
|
3
|
+
|
|
4
|
+
import numpy as np
|
|
5
|
+
|
|
6
|
+
__all__: list[str] = ["interface"]
|
|
7
|
+
|
|
8
|
+
_CDataVoidPointer: TypeAlias = Any
|
|
9
|
+
|
|
10
|
+
class interface(NamedTuple):
|
|
11
|
+
state_address: int
|
|
12
|
+
state: _CDataVoidPointer
|
|
13
|
+
next_uint64: Callable[..., np.uint64]
|
|
14
|
+
next_uint32: Callable[..., np.uint32]
|
|
15
|
+
next_double: Callable[..., np.float64]
|
|
16
|
+
bit_generator: _CDataVoidPointer
|
|
Binary file
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Use cffi to access any of the underlying C functions from distributions.h
|
|
3
|
+
"""
|
|
4
|
+
import os
|
|
5
|
+
|
|
6
|
+
import cffi
|
|
7
|
+
|
|
8
|
+
import numpy as np
|
|
9
|
+
|
|
10
|
+
from .parse import parse_distributions_h
|
|
11
|
+
|
|
12
|
+
ffi = cffi.FFI()
|
|
13
|
+
|
|
14
|
+
inc_dir = os.path.join(np.get_include(), 'numpy')
|
|
15
|
+
|
|
16
|
+
# Basic numpy types
|
|
17
|
+
ffi.cdef('''
|
|
18
|
+
typedef intptr_t npy_intp;
|
|
19
|
+
typedef unsigned char npy_bool;
|
|
20
|
+
|
|
21
|
+
''')
|
|
22
|
+
|
|
23
|
+
parse_distributions_h(ffi, inc_dir)
|
|
24
|
+
|
|
25
|
+
lib = ffi.dlopen(np.random._generator.__file__)
|
|
26
|
+
|
|
27
|
+
# Compare the distributions.h random_standard_normal_fill to
|
|
28
|
+
# Generator.standard_random
|
|
29
|
+
bit_gen = np.random.PCG64()
|
|
30
|
+
rng = np.random.Generator(bit_gen)
|
|
31
|
+
state = bit_gen.state
|
|
32
|
+
|
|
33
|
+
interface = rng.bit_generator.cffi
|
|
34
|
+
n = 100
|
|
35
|
+
vals_cffi = ffi.new('double[%d]' % n)
|
|
36
|
+
lib.random_standard_normal_fill(interface.bit_generator, n, vals_cffi)
|
|
37
|
+
|
|
38
|
+
# reset the state
|
|
39
|
+
bit_gen.state = state
|
|
40
|
+
|
|
41
|
+
vals = rng.standard_normal(n)
|
|
42
|
+
|
|
43
|
+
for i in range(n):
|
|
44
|
+
assert vals[i] == vals_cffi[i]
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def parse_distributions_h(ffi, inc_dir):
|
|
5
|
+
"""
|
|
6
|
+
Parse distributions.h located in inc_dir for CFFI, filling in the ffi.cdef
|
|
7
|
+
|
|
8
|
+
Read the function declarations without the "#define ..." macros that will
|
|
9
|
+
be filled in when loading the library.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
with open(os.path.join(inc_dir, 'random', 'bitgen.h')) as fid:
|
|
13
|
+
s = []
|
|
14
|
+
for line in fid:
|
|
15
|
+
# massage the include file
|
|
16
|
+
if line.strip().startswith('#'):
|
|
17
|
+
continue
|
|
18
|
+
s.append(line)
|
|
19
|
+
ffi.cdef('\n'.join(s))
|
|
20
|
+
|
|
21
|
+
with open(os.path.join(inc_dir, 'random', 'distributions.h')) as fid:
|
|
22
|
+
s = []
|
|
23
|
+
in_skip = 0
|
|
24
|
+
ignoring = False
|
|
25
|
+
for line in fid:
|
|
26
|
+
# check for and remove extern "C" guards
|
|
27
|
+
if ignoring:
|
|
28
|
+
if line.strip().startswith('#endif'):
|
|
29
|
+
ignoring = False
|
|
30
|
+
continue
|
|
31
|
+
if line.strip().startswith('#ifdef __cplusplus'):
|
|
32
|
+
ignoring = True
|
|
33
|
+
|
|
34
|
+
# massage the include file
|
|
35
|
+
if line.strip().startswith('#'):
|
|
36
|
+
continue
|
|
37
|
+
|
|
38
|
+
# skip any inlined function definition
|
|
39
|
+
# which starts with 'static inline xxx(...) {'
|
|
40
|
+
# and ends with a closing '}'
|
|
41
|
+
if line.strip().startswith('static inline'):
|
|
42
|
+
in_skip += line.count('{')
|
|
43
|
+
continue
|
|
44
|
+
elif in_skip > 0:
|
|
45
|
+
in_skip += line.count('{')
|
|
46
|
+
in_skip -= line.count('}')
|
|
47
|
+
continue
|
|
48
|
+
|
|
49
|
+
# replace defines with their value or remove them
|
|
50
|
+
line = line.replace('DECLDIR', '')
|
|
51
|
+
line = line.replace('RAND_INT_TYPE', 'int64_t')
|
|
52
|
+
s.append(line)
|
|
53
|
+
ffi.cdef('\n'.join(s))
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#cython: language_level=3
|
|
2
|
+
|
|
3
|
+
from libc.stdint cimport uint32_t
|
|
4
|
+
from cpython.pycapsule cimport PyCapsule_IsValid, PyCapsule_GetPointer
|
|
5
|
+
|
|
6
|
+
import numpy as np
|
|
7
|
+
cimport numpy as np
|
|
8
|
+
cimport cython
|
|
9
|
+
|
|
10
|
+
from numpy.random cimport bitgen_t
|
|
11
|
+
from numpy.random import PCG64
|
|
12
|
+
|
|
13
|
+
np.import_array()
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@cython.boundscheck(False)
|
|
17
|
+
@cython.wraparound(False)
|
|
18
|
+
def uniform_mean(Py_ssize_t n):
|
|
19
|
+
cdef Py_ssize_t i
|
|
20
|
+
cdef bitgen_t *rng
|
|
21
|
+
cdef const char *capsule_name = "BitGenerator"
|
|
22
|
+
cdef double[::1] random_values
|
|
23
|
+
cdef np.ndarray randoms
|
|
24
|
+
|
|
25
|
+
x = PCG64()
|
|
26
|
+
capsule = x.capsule
|
|
27
|
+
if not PyCapsule_IsValid(capsule, capsule_name):
|
|
28
|
+
raise ValueError("Invalid pointer to anon_func_state")
|
|
29
|
+
rng = <bitgen_t *> PyCapsule_GetPointer(capsule, capsule_name)
|
|
30
|
+
random_values = np.empty(n)
|
|
31
|
+
# Best practice is to acquire the lock whenever generating random values.
|
|
32
|
+
# This prevents other threads from modifying the state. Acquiring the lock
|
|
33
|
+
# is only necessary if the GIL is also released, as in this example.
|
|
34
|
+
with x.lock, nogil:
|
|
35
|
+
for i in range(n):
|
|
36
|
+
random_values[i] = rng.next_double(rng.state)
|
|
37
|
+
randoms = np.asarray(random_values)
|
|
38
|
+
return randoms.mean()
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
# This function is declared nogil so it can be used without the GIL below
|
|
42
|
+
cdef uint32_t bounded_uint(uint32_t lb, uint32_t ub, bitgen_t *rng) nogil:
|
|
43
|
+
cdef uint32_t mask, delta, val
|
|
44
|
+
mask = delta = ub - lb
|
|
45
|
+
mask |= mask >> 1
|
|
46
|
+
mask |= mask >> 2
|
|
47
|
+
mask |= mask >> 4
|
|
48
|
+
mask |= mask >> 8
|
|
49
|
+
mask |= mask >> 16
|
|
50
|
+
|
|
51
|
+
val = rng.next_uint32(rng.state) & mask
|
|
52
|
+
while val > delta:
|
|
53
|
+
val = rng.next_uint32(rng.state) & mask
|
|
54
|
+
|
|
55
|
+
return lb + val
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@cython.boundscheck(False)
|
|
59
|
+
@cython.wraparound(False)
|
|
60
|
+
def bounded_uints(uint32_t lb, uint32_t ub, Py_ssize_t n):
|
|
61
|
+
cdef Py_ssize_t i
|
|
62
|
+
cdef bitgen_t *rng
|
|
63
|
+
cdef uint32_t[::1] out
|
|
64
|
+
cdef const char *capsule_name = "BitGenerator"
|
|
65
|
+
|
|
66
|
+
x = PCG64()
|
|
67
|
+
out = np.empty(n, dtype=np.uint32)
|
|
68
|
+
capsule = x.capsule
|
|
69
|
+
|
|
70
|
+
if not PyCapsule_IsValid(capsule, capsule_name):
|
|
71
|
+
raise ValueError("Invalid pointer to anon_func_state")
|
|
72
|
+
rng = <bitgen_t *>PyCapsule_GetPointer(capsule, capsule_name)
|
|
73
|
+
|
|
74
|
+
with x.lock, nogil:
|
|
75
|
+
for i in range(n):
|
|
76
|
+
out[i] = bounded_uint(lb, ub, rng)
|
|
77
|
+
return np.asarray(out)
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
#cython: language_level=3
|
|
2
|
+
"""
|
|
3
|
+
This file shows how the to use a BitGenerator to create a distribution.
|
|
4
|
+
"""
|
|
5
|
+
import numpy as np
|
|
6
|
+
cimport numpy as np
|
|
7
|
+
cimport cython
|
|
8
|
+
from cpython.pycapsule cimport PyCapsule_IsValid, PyCapsule_GetPointer
|
|
9
|
+
from libc.stdint cimport uint16_t, uint64_t
|
|
10
|
+
from numpy.random cimport bitgen_t
|
|
11
|
+
from numpy.random import PCG64
|
|
12
|
+
from numpy.random.c_distributions cimport (
|
|
13
|
+
random_standard_uniform_fill, random_standard_uniform_fill_f)
|
|
14
|
+
|
|
15
|
+
np.import_array()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@cython.boundscheck(False)
|
|
19
|
+
@cython.wraparound(False)
|
|
20
|
+
def uniforms(Py_ssize_t n):
|
|
21
|
+
"""
|
|
22
|
+
Create an array of `n` uniformly distributed doubles.
|
|
23
|
+
A 'real' distribution would want to process the values into
|
|
24
|
+
some non-uniform distribution
|
|
25
|
+
"""
|
|
26
|
+
cdef Py_ssize_t i
|
|
27
|
+
cdef bitgen_t *rng
|
|
28
|
+
cdef const char *capsule_name = "BitGenerator"
|
|
29
|
+
cdef double[::1] random_values
|
|
30
|
+
|
|
31
|
+
x = PCG64()
|
|
32
|
+
capsule = x.capsule
|
|
33
|
+
# Optional check that the capsule if from a BitGenerator
|
|
34
|
+
if not PyCapsule_IsValid(capsule, capsule_name):
|
|
35
|
+
raise ValueError("Invalid pointer to anon_func_state")
|
|
36
|
+
# Cast the pointer
|
|
37
|
+
rng = <bitgen_t *> PyCapsule_GetPointer(capsule, capsule_name)
|
|
38
|
+
random_values = np.empty(n, dtype='float64')
|
|
39
|
+
with x.lock, nogil:
|
|
40
|
+
for i in range(n):
|
|
41
|
+
# Call the function
|
|
42
|
+
random_values[i] = rng.next_double(rng.state)
|
|
43
|
+
randoms = np.asarray(random_values)
|
|
44
|
+
|
|
45
|
+
return randoms
|
|
46
|
+
|
|
47
|
+
# cython example 2
|
|
48
|
+
@cython.boundscheck(False)
|
|
49
|
+
@cython.wraparound(False)
|
|
50
|
+
def uint10_uniforms(Py_ssize_t n):
|
|
51
|
+
"""Uniform 10 bit integers stored as 16-bit unsigned integers"""
|
|
52
|
+
cdef Py_ssize_t i
|
|
53
|
+
cdef bitgen_t *rng
|
|
54
|
+
cdef const char *capsule_name = "BitGenerator"
|
|
55
|
+
cdef uint16_t[::1] random_values
|
|
56
|
+
cdef int bits_remaining
|
|
57
|
+
cdef int width = 10
|
|
58
|
+
cdef uint64_t buff, mask = 0x3FF
|
|
59
|
+
|
|
60
|
+
x = PCG64()
|
|
61
|
+
capsule = x.capsule
|
|
62
|
+
if not PyCapsule_IsValid(capsule, capsule_name):
|
|
63
|
+
raise ValueError("Invalid pointer to anon_func_state")
|
|
64
|
+
rng = <bitgen_t *> PyCapsule_GetPointer(capsule, capsule_name)
|
|
65
|
+
random_values = np.empty(n, dtype='uint16')
|
|
66
|
+
# Best practice is to release GIL and acquire the lock
|
|
67
|
+
bits_remaining = 0
|
|
68
|
+
with x.lock, nogil:
|
|
69
|
+
for i in range(n):
|
|
70
|
+
if bits_remaining < width:
|
|
71
|
+
buff = rng.next_uint64(rng.state)
|
|
72
|
+
random_values[i] = buff & mask
|
|
73
|
+
buff >>= width
|
|
74
|
+
|
|
75
|
+
randoms = np.asarray(random_values)
|
|
76
|
+
return randoms
|
|
77
|
+
|
|
78
|
+
# cython example 3
|
|
79
|
+
def uniforms_ex(bit_generator, Py_ssize_t n, dtype=np.float64):
|
|
80
|
+
"""
|
|
81
|
+
Create an array of `n` uniformly distributed doubles via a "fill" function.
|
|
82
|
+
|
|
83
|
+
A 'real' distribution would want to process the values into
|
|
84
|
+
some non-uniform distribution
|
|
85
|
+
|
|
86
|
+
Parameters
|
|
87
|
+
----------
|
|
88
|
+
bit_generator: BitGenerator instance
|
|
89
|
+
n: int
|
|
90
|
+
Output vector length
|
|
91
|
+
dtype: {str, dtype}, optional
|
|
92
|
+
Desired dtype, either 'd' (or 'float64') or 'f' (or 'float32'). The
|
|
93
|
+
default dtype value is 'd'
|
|
94
|
+
"""
|
|
95
|
+
cdef bitgen_t *rng
|
|
96
|
+
cdef const char *capsule_name = "BitGenerator"
|
|
97
|
+
cdef np.ndarray randoms
|
|
98
|
+
|
|
99
|
+
capsule = bit_generator.capsule
|
|
100
|
+
# Optional check that the capsule if from a BitGenerator
|
|
101
|
+
if not PyCapsule_IsValid(capsule, capsule_name):
|
|
102
|
+
raise ValueError("Invalid pointer to anon_func_state")
|
|
103
|
+
# Cast the pointer
|
|
104
|
+
rng = <bitgen_t *> PyCapsule_GetPointer(capsule, capsule_name)
|
|
105
|
+
|
|
106
|
+
_dtype = np.dtype(dtype)
|
|
107
|
+
randoms = np.empty(n, dtype=_dtype)
|
|
108
|
+
if _dtype == np.float32:
|
|
109
|
+
with bit_generator.lock:
|
|
110
|
+
random_standard_uniform_fill_f(rng, n, <float*>np.PyArray_DATA(randoms))
|
|
111
|
+
elif _dtype == np.float64:
|
|
112
|
+
with bit_generator.lock:
|
|
113
|
+
random_standard_uniform_fill(rng, n, <double*>np.PyArray_DATA(randoms))
|
|
114
|
+
else:
|
|
115
|
+
raise TypeError('Unsupported dtype %r for random' % _dtype)
|
|
116
|
+
return randoms
|
|
117
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
project('random-build-examples', 'c', 'cpp', 'cython')
|
|
2
|
+
|
|
3
|
+
py_mod = import('python')
|
|
4
|
+
py3 = py_mod.find_installation(pure: false)
|
|
5
|
+
|
|
6
|
+
cc = meson.get_compiler('c')
|
|
7
|
+
cy = meson.get_compiler('cython')
|
|
8
|
+
|
|
9
|
+
# Keep synced with pyproject.toml
|
|
10
|
+
if not cy.version().version_compare('>=3.0.6')
|
|
11
|
+
error('tests requires Cython >= 3.0.6')
|
|
12
|
+
endif
|
|
13
|
+
|
|
14
|
+
base_cython_args = []
|
|
15
|
+
if cy.version().version_compare('>=3.1.0')
|
|
16
|
+
base_cython_args += ['-Xfreethreading_compatible=True']
|
|
17
|
+
endif
|
|
18
|
+
|
|
19
|
+
_numpy_abs = run_command(py3, ['-c',
|
|
20
|
+
'import os; os.chdir(".."); import numpy; print(os.path.abspath(numpy.get_include() + "../../.."))'],
|
|
21
|
+
check: true).stdout().strip()
|
|
22
|
+
|
|
23
|
+
npymath_path = _numpy_abs / '_core' / 'lib'
|
|
24
|
+
npy_include_path = _numpy_abs / '_core' / 'include'
|
|
25
|
+
npyrandom_path = _numpy_abs / 'random' / 'lib'
|
|
26
|
+
npymath_lib = cc.find_library('npymath', dirs: npymath_path)
|
|
27
|
+
npyrandom_lib = cc.find_library('npyrandom', dirs: npyrandom_path)
|
|
28
|
+
|
|
29
|
+
py3.extension_module(
|
|
30
|
+
'extending_distributions',
|
|
31
|
+
'extending_distributions.pyx',
|
|
32
|
+
install: false,
|
|
33
|
+
include_directories: [npy_include_path],
|
|
34
|
+
dependencies: [npyrandom_lib, npymath_lib],
|
|
35
|
+
cython_args: base_cython_args,
|
|
36
|
+
)
|
|
37
|
+
py3.extension_module(
|
|
38
|
+
'extending',
|
|
39
|
+
'extending.pyx',
|
|
40
|
+
install: false,
|
|
41
|
+
include_directories: [npy_include_path],
|
|
42
|
+
dependencies: [npyrandom_lib, npymath_lib],
|
|
43
|
+
cython_args: base_cython_args,
|
|
44
|
+
)
|
|
45
|
+
py3.extension_module(
|
|
46
|
+
'extending_cpp',
|
|
47
|
+
'extending_distributions.pyx',
|
|
48
|
+
install: false,
|
|
49
|
+
override_options : ['cython_language=cpp'],
|
|
50
|
+
cython_args: base_cython_args + ['--module-name', 'extending_cpp'],
|
|
51
|
+
include_directories: [npy_include_path],
|
|
52
|
+
dependencies: [npyrandom_lib, npymath_lib],
|
|
53
|
+
)
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
from timeit import timeit
|
|
2
|
+
|
|
3
|
+
import numba as nb
|
|
4
|
+
|
|
5
|
+
import numpy as np
|
|
6
|
+
from numpy.random import PCG64
|
|
7
|
+
|
|
8
|
+
bit_gen = PCG64()
|
|
9
|
+
next_d = bit_gen.cffi.next_double
|
|
10
|
+
state_addr = bit_gen.cffi.state_address
|
|
11
|
+
|
|
12
|
+
def normals(n, state):
|
|
13
|
+
out = np.empty(n)
|
|
14
|
+
for i in range((n + 1) // 2):
|
|
15
|
+
x1 = 2.0 * next_d(state) - 1.0
|
|
16
|
+
x2 = 2.0 * next_d(state) - 1.0
|
|
17
|
+
r2 = x1 * x1 + x2 * x2
|
|
18
|
+
while r2 >= 1.0 or r2 == 0.0:
|
|
19
|
+
x1 = 2.0 * next_d(state) - 1.0
|
|
20
|
+
x2 = 2.0 * next_d(state) - 1.0
|
|
21
|
+
r2 = x1 * x1 + x2 * x2
|
|
22
|
+
f = np.sqrt(-2.0 * np.log(r2) / r2)
|
|
23
|
+
out[2 * i] = f * x1
|
|
24
|
+
if 2 * i + 1 < n:
|
|
25
|
+
out[2 * i + 1] = f * x2
|
|
26
|
+
return out
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# Compile using Numba
|
|
30
|
+
normalsj = nb.jit(normals, nopython=True)
|
|
31
|
+
# Must use state address not state with numba
|
|
32
|
+
n = 10000
|
|
33
|
+
|
|
34
|
+
def numbacall():
|
|
35
|
+
return normalsj(n, state_addr)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
rg = np.random.Generator(PCG64())
|
|
39
|
+
|
|
40
|
+
def numpycall():
|
|
41
|
+
return rg.normal(size=n)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# Check that the functions work
|
|
45
|
+
r1 = numbacall()
|
|
46
|
+
r2 = numpycall()
|
|
47
|
+
assert r1.shape == (n,)
|
|
48
|
+
assert r1.shape == r2.shape
|
|
49
|
+
|
|
50
|
+
t1 = timeit(numbacall, number=1000)
|
|
51
|
+
print(f'{t1:.2f} secs for {n} PCG64 (Numba/PCG64) gaussian randoms')
|
|
52
|
+
t2 = timeit(numpycall, number=1000)
|
|
53
|
+
print(f'{t2:.2f} secs for {n} PCG64 (NumPy/PCG64) gaussian randoms')
|
|
54
|
+
|
|
55
|
+
# example 2
|
|
56
|
+
|
|
57
|
+
next_u32 = bit_gen.ctypes.next_uint32
|
|
58
|
+
ctypes_state = bit_gen.ctypes.state
|
|
59
|
+
|
|
60
|
+
@nb.jit(nopython=True)
|
|
61
|
+
def bounded_uint(lb, ub, state):
|
|
62
|
+
mask = delta = ub - lb
|
|
63
|
+
mask |= mask >> 1
|
|
64
|
+
mask |= mask >> 2
|
|
65
|
+
mask |= mask >> 4
|
|
66
|
+
mask |= mask >> 8
|
|
67
|
+
mask |= mask >> 16
|
|
68
|
+
|
|
69
|
+
val = next_u32(state) & mask
|
|
70
|
+
while val > delta:
|
|
71
|
+
val = next_u32(state) & mask
|
|
72
|
+
|
|
73
|
+
return lb + val
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
print(bounded_uint(323, 2394691, ctypes_state.value))
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
@nb.jit(nopython=True)
|
|
80
|
+
def bounded_uints(lb, ub, n, state):
|
|
81
|
+
out = np.empty(n, dtype=np.uint32)
|
|
82
|
+
for i in range(n):
|
|
83
|
+
out[i] = bounded_uint(lb, ub, state)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
bounded_uints(323, 2394691, 10000000, ctypes_state.value)
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
r"""
|
|
2
|
+
Building the required library in this example requires a source distribution
|
|
3
|
+
of NumPy or clone of the NumPy git repository since distributions.c is not
|
|
4
|
+
included in binary distributions.
|
|
5
|
+
|
|
6
|
+
On *nix, execute in numpy/random/src/distributions
|
|
7
|
+
|
|
8
|
+
export ${PYTHON_VERSION}=3.8 # Python version
|
|
9
|
+
export PYTHON_INCLUDE=#path to Python's include folder, usually \
|
|
10
|
+
${PYTHON_HOME}/include/python${PYTHON_VERSION}m
|
|
11
|
+
export NUMPY_INCLUDE=#path to numpy's include folder, usually \
|
|
12
|
+
${PYTHON_HOME}/lib/python${PYTHON_VERSION}/site-packages/numpy/_core/include
|
|
13
|
+
gcc -shared -o libdistributions.so -fPIC distributions.c \
|
|
14
|
+
-I${NUMPY_INCLUDE} -I${PYTHON_INCLUDE}
|
|
15
|
+
mv libdistributions.so ../../_examples/numba/
|
|
16
|
+
|
|
17
|
+
On Windows
|
|
18
|
+
|
|
19
|
+
rem PYTHON_HOME and PYTHON_VERSION are setup dependent, this is an example
|
|
20
|
+
set PYTHON_HOME=c:\Anaconda
|
|
21
|
+
set PYTHON_VERSION=38
|
|
22
|
+
cl.exe /LD .\distributions.c -DDLL_EXPORT \
|
|
23
|
+
-I%PYTHON_HOME%\lib\site-packages\numpy\_core\include \
|
|
24
|
+
-I%PYTHON_HOME%\include %PYTHON_HOME%\libs\python%PYTHON_VERSION%.lib
|
|
25
|
+
move distributions.dll ../../_examples/numba/
|
|
26
|
+
"""
|
|
27
|
+
import os
|
|
28
|
+
|
|
29
|
+
import numba as nb
|
|
30
|
+
from cffi import FFI
|
|
31
|
+
|
|
32
|
+
import numpy as np
|
|
33
|
+
from numpy.random import PCG64
|
|
34
|
+
|
|
35
|
+
ffi = FFI()
|
|
36
|
+
if os.path.exists('./distributions.dll'):
|
|
37
|
+
lib = ffi.dlopen('./distributions.dll')
|
|
38
|
+
elif os.path.exists('./libdistributions.so'):
|
|
39
|
+
lib = ffi.dlopen('./libdistributions.so')
|
|
40
|
+
else:
|
|
41
|
+
raise RuntimeError('Required DLL/so file was not found.')
|
|
42
|
+
|
|
43
|
+
ffi.cdef("""
|
|
44
|
+
double random_standard_normal(void *bitgen_state);
|
|
45
|
+
""")
|
|
46
|
+
x = PCG64()
|
|
47
|
+
xffi = x.cffi
|
|
48
|
+
bit_generator = xffi.bit_generator
|
|
49
|
+
|
|
50
|
+
random_standard_normal = lib.random_standard_normal
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def normals(n, bit_generator):
|
|
54
|
+
out = np.empty(n)
|
|
55
|
+
for i in range(n):
|
|
56
|
+
out[i] = random_standard_normal(bit_generator)
|
|
57
|
+
return out
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
normalsj = nb.jit(normals, nopython=True)
|
|
61
|
+
|
|
62
|
+
# Numba requires a memory address for void *
|
|
63
|
+
# Can also get address from x.ctypes.bit_generator.value
|
|
64
|
+
bit_generator_address = int(ffi.cast('uintptr_t', bit_generator))
|
|
65
|
+
|
|
66
|
+
norm = normalsj(1000, bit_generator_address)
|
|
67
|
+
print(norm[:12])
|