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.
Files changed (1039) hide show
  1. numpy/__config__.py +170 -0
  2. numpy/__config__.pyi +108 -0
  3. numpy/__init__.cython-30.pxd +1242 -0
  4. numpy/__init__.pxd +1155 -0
  5. numpy/__init__.py +942 -0
  6. numpy/__init__.pyi +6202 -0
  7. numpy/_array_api_info.py +346 -0
  8. numpy/_array_api_info.pyi +206 -0
  9. numpy/_configtool.py +39 -0
  10. numpy/_configtool.pyi +1 -0
  11. numpy/_core/__init__.py +201 -0
  12. numpy/_core/__init__.pyi +666 -0
  13. numpy/_core/_add_newdocs.py +7151 -0
  14. numpy/_core/_add_newdocs.pyi +2 -0
  15. numpy/_core/_add_newdocs_scalars.py +381 -0
  16. numpy/_core/_add_newdocs_scalars.pyi +16 -0
  17. numpy/_core/_asarray.py +130 -0
  18. numpy/_core/_asarray.pyi +43 -0
  19. numpy/_core/_dtype.py +366 -0
  20. numpy/_core/_dtype.pyi +56 -0
  21. numpy/_core/_dtype_ctypes.py +120 -0
  22. numpy/_core/_dtype_ctypes.pyi +83 -0
  23. numpy/_core/_exceptions.py +162 -0
  24. numpy/_core/_exceptions.pyi +54 -0
  25. numpy/_core/_internal.py +968 -0
  26. numpy/_core/_internal.pyi +61 -0
  27. numpy/_core/_methods.py +252 -0
  28. numpy/_core/_methods.pyi +22 -0
  29. numpy/_core/_multiarray_tests.pypy311-pp73-darwin.so +0 -0
  30. numpy/_core/_multiarray_umath.pypy311-pp73-darwin.so +0 -0
  31. numpy/_core/_operand_flag_tests.pypy311-pp73-darwin.so +0 -0
  32. numpy/_core/_rational_tests.pypy311-pp73-darwin.so +0 -0
  33. numpy/_core/_simd.pyi +35 -0
  34. numpy/_core/_simd.pypy311-pp73-darwin.so +0 -0
  35. numpy/_core/_string_helpers.py +100 -0
  36. numpy/_core/_string_helpers.pyi +12 -0
  37. numpy/_core/_struct_ufunc_tests.pypy311-pp73-darwin.so +0 -0
  38. numpy/_core/_type_aliases.py +131 -0
  39. numpy/_core/_type_aliases.pyi +86 -0
  40. numpy/_core/_ufunc_config.py +515 -0
  41. numpy/_core/_ufunc_config.pyi +69 -0
  42. numpy/_core/_umath_tests.pyi +47 -0
  43. numpy/_core/_umath_tests.pypy311-pp73-darwin.so +0 -0
  44. numpy/_core/arrayprint.py +1779 -0
  45. numpy/_core/arrayprint.pyi +158 -0
  46. numpy/_core/cversions.py +13 -0
  47. numpy/_core/defchararray.py +1414 -0
  48. numpy/_core/defchararray.pyi +1150 -0
  49. numpy/_core/einsumfunc.py +1650 -0
  50. numpy/_core/einsumfunc.pyi +184 -0
  51. numpy/_core/fromnumeric.py +4233 -0
  52. numpy/_core/fromnumeric.pyi +1735 -0
  53. numpy/_core/function_base.py +547 -0
  54. numpy/_core/function_base.pyi +276 -0
  55. numpy/_core/getlimits.py +462 -0
  56. numpy/_core/getlimits.pyi +124 -0
  57. numpy/_core/include/numpy/__multiarray_api.c +376 -0
  58. numpy/_core/include/numpy/__multiarray_api.h +1628 -0
  59. numpy/_core/include/numpy/__ufunc_api.c +55 -0
  60. numpy/_core/include/numpy/__ufunc_api.h +349 -0
  61. numpy/_core/include/numpy/_neighborhood_iterator_imp.h +90 -0
  62. numpy/_core/include/numpy/_numpyconfig.h +33 -0
  63. numpy/_core/include/numpy/_public_dtype_api_table.h +86 -0
  64. numpy/_core/include/numpy/arrayobject.h +7 -0
  65. numpy/_core/include/numpy/arrayscalars.h +198 -0
  66. numpy/_core/include/numpy/dtype_api.h +547 -0
  67. numpy/_core/include/numpy/halffloat.h +70 -0
  68. numpy/_core/include/numpy/ndarrayobject.h +304 -0
  69. numpy/_core/include/numpy/ndarraytypes.h +1982 -0
  70. numpy/_core/include/numpy/npy_2_compat.h +249 -0
  71. numpy/_core/include/numpy/npy_2_complexcompat.h +28 -0
  72. numpy/_core/include/numpy/npy_3kcompat.h +374 -0
  73. numpy/_core/include/numpy/npy_common.h +989 -0
  74. numpy/_core/include/numpy/npy_cpu.h +126 -0
  75. numpy/_core/include/numpy/npy_endian.h +79 -0
  76. numpy/_core/include/numpy/npy_math.h +602 -0
  77. numpy/_core/include/numpy/npy_no_deprecated_api.h +20 -0
  78. numpy/_core/include/numpy/npy_os.h +42 -0
  79. numpy/_core/include/numpy/numpyconfig.h +185 -0
  80. numpy/_core/include/numpy/random/LICENSE.txt +21 -0
  81. numpy/_core/include/numpy/random/bitgen.h +20 -0
  82. numpy/_core/include/numpy/random/distributions.h +209 -0
  83. numpy/_core/include/numpy/random/libdivide.h +2079 -0
  84. numpy/_core/include/numpy/ufuncobject.h +343 -0
  85. numpy/_core/include/numpy/utils.h +37 -0
  86. numpy/_core/lib/libnpymath.a +0 -0
  87. numpy/_core/lib/npy-pkg-config/mlib.ini +12 -0
  88. numpy/_core/lib/npy-pkg-config/npymath.ini +20 -0
  89. numpy/_core/lib/pkgconfig/numpy.pc +7 -0
  90. numpy/_core/memmap.py +363 -0
  91. numpy/_core/memmap.pyi +3 -0
  92. numpy/_core/multiarray.py +1740 -0
  93. numpy/_core/multiarray.pyi +1316 -0
  94. numpy/_core/numeric.py +2758 -0
  95. numpy/_core/numeric.pyi +1276 -0
  96. numpy/_core/numerictypes.py +633 -0
  97. numpy/_core/numerictypes.pyi +196 -0
  98. numpy/_core/overrides.py +188 -0
  99. numpy/_core/overrides.pyi +47 -0
  100. numpy/_core/printoptions.py +32 -0
  101. numpy/_core/printoptions.pyi +28 -0
  102. numpy/_core/records.py +1088 -0
  103. numpy/_core/records.pyi +340 -0
  104. numpy/_core/shape_base.py +996 -0
  105. numpy/_core/shape_base.pyi +182 -0
  106. numpy/_core/strings.py +1813 -0
  107. numpy/_core/strings.pyi +536 -0
  108. numpy/_core/tests/_locales.py +72 -0
  109. numpy/_core/tests/_natype.py +144 -0
  110. numpy/_core/tests/data/astype_copy.pkl +0 -0
  111. numpy/_core/tests/data/generate_umath_validation_data.cpp +170 -0
  112. numpy/_core/tests/data/recarray_from_file.fits +0 -0
  113. numpy/_core/tests/data/umath-validation-set-README.txt +15 -0
  114. numpy/_core/tests/data/umath-validation-set-arccos.csv +1429 -0
  115. numpy/_core/tests/data/umath-validation-set-arccosh.csv +1429 -0
  116. numpy/_core/tests/data/umath-validation-set-arcsin.csv +1429 -0
  117. numpy/_core/tests/data/umath-validation-set-arcsinh.csv +1429 -0
  118. numpy/_core/tests/data/umath-validation-set-arctan.csv +1429 -0
  119. numpy/_core/tests/data/umath-validation-set-arctanh.csv +1429 -0
  120. numpy/_core/tests/data/umath-validation-set-cbrt.csv +1429 -0
  121. numpy/_core/tests/data/umath-validation-set-cos.csv +1375 -0
  122. numpy/_core/tests/data/umath-validation-set-cosh.csv +1429 -0
  123. numpy/_core/tests/data/umath-validation-set-exp.csv +412 -0
  124. numpy/_core/tests/data/umath-validation-set-exp2.csv +1429 -0
  125. numpy/_core/tests/data/umath-validation-set-expm1.csv +1429 -0
  126. numpy/_core/tests/data/umath-validation-set-log.csv +271 -0
  127. numpy/_core/tests/data/umath-validation-set-log10.csv +1629 -0
  128. numpy/_core/tests/data/umath-validation-set-log1p.csv +1429 -0
  129. numpy/_core/tests/data/umath-validation-set-log2.csv +1629 -0
  130. numpy/_core/tests/data/umath-validation-set-sin.csv +1370 -0
  131. numpy/_core/tests/data/umath-validation-set-sinh.csv +1429 -0
  132. numpy/_core/tests/data/umath-validation-set-tan.csv +1429 -0
  133. numpy/_core/tests/data/umath-validation-set-tanh.csv +1429 -0
  134. numpy/_core/tests/examples/cython/checks.pyx +373 -0
  135. numpy/_core/tests/examples/cython/meson.build +43 -0
  136. numpy/_core/tests/examples/cython/setup.py +39 -0
  137. numpy/_core/tests/examples/limited_api/limited_api1.c +17 -0
  138. numpy/_core/tests/examples/limited_api/limited_api2.pyx +11 -0
  139. numpy/_core/tests/examples/limited_api/limited_api_latest.c +19 -0
  140. numpy/_core/tests/examples/limited_api/meson.build +59 -0
  141. numpy/_core/tests/examples/limited_api/setup.py +24 -0
  142. numpy/_core/tests/test__exceptions.py +90 -0
  143. numpy/_core/tests/test_abc.py +54 -0
  144. numpy/_core/tests/test_api.py +655 -0
  145. numpy/_core/tests/test_argparse.py +90 -0
  146. numpy/_core/tests/test_array_api_info.py +113 -0
  147. numpy/_core/tests/test_array_coercion.py +928 -0
  148. numpy/_core/tests/test_array_interface.py +222 -0
  149. numpy/_core/tests/test_arraymethod.py +84 -0
  150. numpy/_core/tests/test_arrayobject.py +75 -0
  151. numpy/_core/tests/test_arrayprint.py +1324 -0
  152. numpy/_core/tests/test_casting_floatingpoint_errors.py +154 -0
  153. numpy/_core/tests/test_casting_unittests.py +955 -0
  154. numpy/_core/tests/test_conversion_utils.py +209 -0
  155. numpy/_core/tests/test_cpu_dispatcher.py +48 -0
  156. numpy/_core/tests/test_cpu_features.py +450 -0
  157. numpy/_core/tests/test_custom_dtypes.py +393 -0
  158. numpy/_core/tests/test_cython.py +352 -0
  159. numpy/_core/tests/test_datetime.py +2792 -0
  160. numpy/_core/tests/test_defchararray.py +858 -0
  161. numpy/_core/tests/test_deprecations.py +460 -0
  162. numpy/_core/tests/test_dlpack.py +190 -0
  163. numpy/_core/tests/test_dtype.py +2110 -0
  164. numpy/_core/tests/test_einsum.py +1351 -0
  165. numpy/_core/tests/test_errstate.py +131 -0
  166. numpy/_core/tests/test_extint128.py +217 -0
  167. numpy/_core/tests/test_finfo.py +86 -0
  168. numpy/_core/tests/test_function_base.py +504 -0
  169. numpy/_core/tests/test_getlimits.py +171 -0
  170. numpy/_core/tests/test_half.py +593 -0
  171. numpy/_core/tests/test_hashtable.py +36 -0
  172. numpy/_core/tests/test_indexerrors.py +122 -0
  173. numpy/_core/tests/test_indexing.py +1692 -0
  174. numpy/_core/tests/test_item_selection.py +167 -0
  175. numpy/_core/tests/test_limited_api.py +102 -0
  176. numpy/_core/tests/test_longdouble.py +370 -0
  177. numpy/_core/tests/test_mem_overlap.py +933 -0
  178. numpy/_core/tests/test_mem_policy.py +453 -0
  179. numpy/_core/tests/test_memmap.py +248 -0
  180. numpy/_core/tests/test_multiarray.py +11008 -0
  181. numpy/_core/tests/test_multiprocessing.py +55 -0
  182. numpy/_core/tests/test_multithreading.py +377 -0
  183. numpy/_core/tests/test_nditer.py +3533 -0
  184. numpy/_core/tests/test_nep50_promotions.py +287 -0
  185. numpy/_core/tests/test_numeric.py +4295 -0
  186. numpy/_core/tests/test_numerictypes.py +650 -0
  187. numpy/_core/tests/test_overrides.py +800 -0
  188. numpy/_core/tests/test_print.py +202 -0
  189. numpy/_core/tests/test_protocols.py +46 -0
  190. numpy/_core/tests/test_records.py +544 -0
  191. numpy/_core/tests/test_regression.py +2677 -0
  192. numpy/_core/tests/test_scalar_ctors.py +203 -0
  193. numpy/_core/tests/test_scalar_methods.py +328 -0
  194. numpy/_core/tests/test_scalarbuffer.py +153 -0
  195. numpy/_core/tests/test_scalarinherit.py +105 -0
  196. numpy/_core/tests/test_scalarmath.py +1168 -0
  197. numpy/_core/tests/test_scalarprint.py +403 -0
  198. numpy/_core/tests/test_shape_base.py +904 -0
  199. numpy/_core/tests/test_simd.py +1345 -0
  200. numpy/_core/tests/test_simd_module.py +105 -0
  201. numpy/_core/tests/test_stringdtype.py +1855 -0
  202. numpy/_core/tests/test_strings.py +1523 -0
  203. numpy/_core/tests/test_ufunc.py +3405 -0
  204. numpy/_core/tests/test_umath.py +4962 -0
  205. numpy/_core/tests/test_umath_accuracy.py +132 -0
  206. numpy/_core/tests/test_umath_complex.py +631 -0
  207. numpy/_core/tests/test_unicode.py +369 -0
  208. numpy/_core/umath.py +60 -0
  209. numpy/_core/umath.pyi +232 -0
  210. numpy/_distributor_init.py +15 -0
  211. numpy/_distributor_init.pyi +1 -0
  212. numpy/_expired_attrs_2_0.py +78 -0
  213. numpy/_expired_attrs_2_0.pyi +61 -0
  214. numpy/_globals.py +121 -0
  215. numpy/_globals.pyi +17 -0
  216. numpy/_pyinstaller/__init__.py +0 -0
  217. numpy/_pyinstaller/__init__.pyi +0 -0
  218. numpy/_pyinstaller/hook-numpy.py +36 -0
  219. numpy/_pyinstaller/hook-numpy.pyi +6 -0
  220. numpy/_pyinstaller/tests/__init__.py +16 -0
  221. numpy/_pyinstaller/tests/pyinstaller-smoke.py +32 -0
  222. numpy/_pyinstaller/tests/test_pyinstaller.py +35 -0
  223. numpy/_pytesttester.py +201 -0
  224. numpy/_pytesttester.pyi +18 -0
  225. numpy/_typing/__init__.py +173 -0
  226. numpy/_typing/_add_docstring.py +153 -0
  227. numpy/_typing/_array_like.py +106 -0
  228. numpy/_typing/_char_codes.py +213 -0
  229. numpy/_typing/_dtype_like.py +114 -0
  230. numpy/_typing/_extended_precision.py +15 -0
  231. numpy/_typing/_nbit.py +19 -0
  232. numpy/_typing/_nbit_base.py +94 -0
  233. numpy/_typing/_nbit_base.pyi +39 -0
  234. numpy/_typing/_nested_sequence.py +79 -0
  235. numpy/_typing/_scalars.py +20 -0
  236. numpy/_typing/_shape.py +8 -0
  237. numpy/_typing/_ufunc.py +7 -0
  238. numpy/_typing/_ufunc.pyi +975 -0
  239. numpy/_utils/__init__.py +95 -0
  240. numpy/_utils/__init__.pyi +28 -0
  241. numpy/_utils/_convertions.py +18 -0
  242. numpy/_utils/_convertions.pyi +4 -0
  243. numpy/_utils/_inspect.py +192 -0
  244. numpy/_utils/_inspect.pyi +70 -0
  245. numpy/_utils/_pep440.py +486 -0
  246. numpy/_utils/_pep440.pyi +118 -0
  247. numpy/char/__init__.py +2 -0
  248. numpy/char/__init__.pyi +111 -0
  249. numpy/conftest.py +248 -0
  250. numpy/core/__init__.py +33 -0
  251. numpy/core/__init__.pyi +0 -0
  252. numpy/core/_dtype.py +10 -0
  253. numpy/core/_dtype.pyi +0 -0
  254. numpy/core/_dtype_ctypes.py +10 -0
  255. numpy/core/_dtype_ctypes.pyi +0 -0
  256. numpy/core/_internal.py +27 -0
  257. numpy/core/_multiarray_umath.py +57 -0
  258. numpy/core/_utils.py +21 -0
  259. numpy/core/arrayprint.py +10 -0
  260. numpy/core/defchararray.py +10 -0
  261. numpy/core/einsumfunc.py +10 -0
  262. numpy/core/fromnumeric.py +10 -0
  263. numpy/core/function_base.py +10 -0
  264. numpy/core/getlimits.py +10 -0
  265. numpy/core/multiarray.py +25 -0
  266. numpy/core/numeric.py +12 -0
  267. numpy/core/numerictypes.py +10 -0
  268. numpy/core/overrides.py +10 -0
  269. numpy/core/overrides.pyi +7 -0
  270. numpy/core/records.py +10 -0
  271. numpy/core/shape_base.py +10 -0
  272. numpy/core/umath.py +10 -0
  273. numpy/ctypeslib/__init__.py +13 -0
  274. numpy/ctypeslib/__init__.pyi +15 -0
  275. numpy/ctypeslib/_ctypeslib.py +603 -0
  276. numpy/ctypeslib/_ctypeslib.pyi +236 -0
  277. numpy/distutils/__init__.py +64 -0
  278. numpy/distutils/__init__.pyi +4 -0
  279. numpy/distutils/__pycache__/conv_template.pypy311.pyc +0 -0
  280. numpy/distutils/_shell_utils.py +87 -0
  281. numpy/distutils/armccompiler.py +26 -0
  282. numpy/distutils/ccompiler.py +826 -0
  283. numpy/distutils/ccompiler_opt.py +2668 -0
  284. numpy/distutils/checks/cpu_asimd.c +27 -0
  285. numpy/distutils/checks/cpu_asimddp.c +16 -0
  286. numpy/distutils/checks/cpu_asimdfhm.c +19 -0
  287. numpy/distutils/checks/cpu_asimdhp.c +15 -0
  288. numpy/distutils/checks/cpu_avx.c +20 -0
  289. numpy/distutils/checks/cpu_avx2.c +20 -0
  290. numpy/distutils/checks/cpu_avx512_clx.c +22 -0
  291. numpy/distutils/checks/cpu_avx512_cnl.c +24 -0
  292. numpy/distutils/checks/cpu_avx512_icl.c +26 -0
  293. numpy/distutils/checks/cpu_avx512_knl.c +25 -0
  294. numpy/distutils/checks/cpu_avx512_knm.c +30 -0
  295. numpy/distutils/checks/cpu_avx512_skx.c +26 -0
  296. numpy/distutils/checks/cpu_avx512_spr.c +26 -0
  297. numpy/distutils/checks/cpu_avx512cd.c +20 -0
  298. numpy/distutils/checks/cpu_avx512f.c +20 -0
  299. numpy/distutils/checks/cpu_f16c.c +22 -0
  300. numpy/distutils/checks/cpu_fma3.c +22 -0
  301. numpy/distutils/checks/cpu_fma4.c +13 -0
  302. numpy/distutils/checks/cpu_lsx.c +11 -0
  303. numpy/distutils/checks/cpu_neon.c +19 -0
  304. numpy/distutils/checks/cpu_neon_fp16.c +11 -0
  305. numpy/distutils/checks/cpu_neon_vfpv4.c +21 -0
  306. numpy/distutils/checks/cpu_popcnt.c +32 -0
  307. numpy/distutils/checks/cpu_rvv.c +13 -0
  308. numpy/distutils/checks/cpu_sse.c +20 -0
  309. numpy/distutils/checks/cpu_sse2.c +20 -0
  310. numpy/distutils/checks/cpu_sse3.c +20 -0
  311. numpy/distutils/checks/cpu_sse41.c +20 -0
  312. numpy/distutils/checks/cpu_sse42.c +20 -0
  313. numpy/distutils/checks/cpu_ssse3.c +20 -0
  314. numpy/distutils/checks/cpu_sve.c +14 -0
  315. numpy/distutils/checks/cpu_vsx.c +21 -0
  316. numpy/distutils/checks/cpu_vsx2.c +13 -0
  317. numpy/distutils/checks/cpu_vsx3.c +13 -0
  318. numpy/distutils/checks/cpu_vsx4.c +14 -0
  319. numpy/distutils/checks/cpu_vx.c +16 -0
  320. numpy/distutils/checks/cpu_vxe.c +25 -0
  321. numpy/distutils/checks/cpu_vxe2.c +21 -0
  322. numpy/distutils/checks/cpu_xop.c +12 -0
  323. numpy/distutils/checks/extra_avx512bw_mask.c +18 -0
  324. numpy/distutils/checks/extra_avx512dq_mask.c +16 -0
  325. numpy/distutils/checks/extra_avx512f_reduce.c +41 -0
  326. numpy/distutils/checks/extra_vsx3_half_double.c +12 -0
  327. numpy/distutils/checks/extra_vsx4_mma.c +21 -0
  328. numpy/distutils/checks/extra_vsx_asm.c +36 -0
  329. numpy/distutils/checks/test_flags.c +1 -0
  330. numpy/distutils/command/__init__.py +41 -0
  331. numpy/distutils/command/autodist.py +148 -0
  332. numpy/distutils/command/bdist_rpm.py +22 -0
  333. numpy/distutils/command/build.py +62 -0
  334. numpy/distutils/command/build_clib.py +469 -0
  335. numpy/distutils/command/build_ext.py +752 -0
  336. numpy/distutils/command/build_py.py +31 -0
  337. numpy/distutils/command/build_scripts.py +49 -0
  338. numpy/distutils/command/build_src.py +773 -0
  339. numpy/distutils/command/config.py +516 -0
  340. numpy/distutils/command/config_compiler.py +126 -0
  341. numpy/distutils/command/develop.py +15 -0
  342. numpy/distutils/command/egg_info.py +25 -0
  343. numpy/distutils/command/install.py +79 -0
  344. numpy/distutils/command/install_clib.py +40 -0
  345. numpy/distutils/command/install_data.py +24 -0
  346. numpy/distutils/command/install_headers.py +25 -0
  347. numpy/distutils/command/sdist.py +27 -0
  348. numpy/distutils/conv_template.py +329 -0
  349. numpy/distutils/core.py +215 -0
  350. numpy/distutils/cpuinfo.py +683 -0
  351. numpy/distutils/exec_command.py +315 -0
  352. numpy/distutils/extension.py +101 -0
  353. numpy/distutils/fcompiler/__init__.py +1035 -0
  354. numpy/distutils/fcompiler/absoft.py +158 -0
  355. numpy/distutils/fcompiler/arm.py +71 -0
  356. numpy/distutils/fcompiler/compaq.py +120 -0
  357. numpy/distutils/fcompiler/environment.py +88 -0
  358. numpy/distutils/fcompiler/fujitsu.py +46 -0
  359. numpy/distutils/fcompiler/g95.py +42 -0
  360. numpy/distutils/fcompiler/gnu.py +555 -0
  361. numpy/distutils/fcompiler/hpux.py +41 -0
  362. numpy/distutils/fcompiler/ibm.py +97 -0
  363. numpy/distutils/fcompiler/intel.py +211 -0
  364. numpy/distutils/fcompiler/lahey.py +45 -0
  365. numpy/distutils/fcompiler/mips.py +54 -0
  366. numpy/distutils/fcompiler/nag.py +87 -0
  367. numpy/distutils/fcompiler/none.py +28 -0
  368. numpy/distutils/fcompiler/nv.py +53 -0
  369. numpy/distutils/fcompiler/pathf95.py +33 -0
  370. numpy/distutils/fcompiler/pg.py +128 -0
  371. numpy/distutils/fcompiler/sun.py +51 -0
  372. numpy/distutils/fcompiler/vast.py +52 -0
  373. numpy/distutils/from_template.py +261 -0
  374. numpy/distutils/fujitsuccompiler.py +28 -0
  375. numpy/distutils/intelccompiler.py +106 -0
  376. numpy/distutils/lib2def.py +116 -0
  377. numpy/distutils/line_endings.py +77 -0
  378. numpy/distutils/log.py +111 -0
  379. numpy/distutils/mingw/gfortran_vs2003_hack.c +6 -0
  380. numpy/distutils/mingw32ccompiler.py +620 -0
  381. numpy/distutils/misc_util.py +2484 -0
  382. numpy/distutils/msvc9compiler.py +63 -0
  383. numpy/distutils/msvccompiler.py +76 -0
  384. numpy/distutils/npy_pkg_config.py +441 -0
  385. numpy/distutils/numpy_distribution.py +17 -0
  386. numpy/distutils/pathccompiler.py +21 -0
  387. numpy/distutils/system_info.py +3267 -0
  388. numpy/distutils/tests/__init__.py +0 -0
  389. numpy/distutils/tests/test_build_ext.py +74 -0
  390. numpy/distutils/tests/test_ccompiler_opt.py +808 -0
  391. numpy/distutils/tests/test_ccompiler_opt_conf.py +176 -0
  392. numpy/distutils/tests/test_exec_command.py +217 -0
  393. numpy/distutils/tests/test_fcompiler.py +43 -0
  394. numpy/distutils/tests/test_fcompiler_gnu.py +55 -0
  395. numpy/distutils/tests/test_fcompiler_intel.py +30 -0
  396. numpy/distutils/tests/test_fcompiler_nagfor.py +22 -0
  397. numpy/distutils/tests/test_from_template.py +44 -0
  398. numpy/distutils/tests/test_log.py +34 -0
  399. numpy/distutils/tests/test_mingw32ccompiler.py +47 -0
  400. numpy/distutils/tests/test_misc_util.py +88 -0
  401. numpy/distutils/tests/test_npy_pkg_config.py +84 -0
  402. numpy/distutils/tests/test_shell_utils.py +79 -0
  403. numpy/distutils/tests/test_system_info.py +334 -0
  404. numpy/distutils/tests/utilities.py +90 -0
  405. numpy/distutils/unixccompiler.py +141 -0
  406. numpy/doc/ufuncs.py +138 -0
  407. numpy/dtypes.py +41 -0
  408. numpy/dtypes.pyi +630 -0
  409. numpy/exceptions.py +246 -0
  410. numpy/exceptions.pyi +27 -0
  411. numpy/f2py/__init__.py +86 -0
  412. numpy/f2py/__init__.pyi +5 -0
  413. numpy/f2py/__main__.py +5 -0
  414. numpy/f2py/__version__.py +1 -0
  415. numpy/f2py/__version__.pyi +1 -0
  416. numpy/f2py/_backends/__init__.py +9 -0
  417. numpy/f2py/_backends/__init__.pyi +5 -0
  418. numpy/f2py/_backends/_backend.py +44 -0
  419. numpy/f2py/_backends/_backend.pyi +46 -0
  420. numpy/f2py/_backends/_distutils.py +76 -0
  421. numpy/f2py/_backends/_distutils.pyi +13 -0
  422. numpy/f2py/_backends/_meson.py +244 -0
  423. numpy/f2py/_backends/_meson.pyi +62 -0
  424. numpy/f2py/_backends/meson.build.template +58 -0
  425. numpy/f2py/_isocbind.py +62 -0
  426. numpy/f2py/_isocbind.pyi +13 -0
  427. numpy/f2py/_src_pyf.py +247 -0
  428. numpy/f2py/_src_pyf.pyi +28 -0
  429. numpy/f2py/auxfuncs.py +1004 -0
  430. numpy/f2py/auxfuncs.pyi +262 -0
  431. numpy/f2py/capi_maps.py +811 -0
  432. numpy/f2py/capi_maps.pyi +33 -0
  433. numpy/f2py/cb_rules.py +665 -0
  434. numpy/f2py/cb_rules.pyi +17 -0
  435. numpy/f2py/cfuncs.py +1563 -0
  436. numpy/f2py/cfuncs.pyi +31 -0
  437. numpy/f2py/common_rules.py +143 -0
  438. numpy/f2py/common_rules.pyi +9 -0
  439. numpy/f2py/crackfortran.py +3725 -0
  440. numpy/f2py/crackfortran.pyi +266 -0
  441. numpy/f2py/diagnose.py +149 -0
  442. numpy/f2py/diagnose.pyi +1 -0
  443. numpy/f2py/f2py2e.py +788 -0
  444. numpy/f2py/f2py2e.pyi +74 -0
  445. numpy/f2py/f90mod_rules.py +269 -0
  446. numpy/f2py/f90mod_rules.pyi +16 -0
  447. numpy/f2py/func2subr.py +329 -0
  448. numpy/f2py/func2subr.pyi +7 -0
  449. numpy/f2py/rules.py +1629 -0
  450. numpy/f2py/rules.pyi +41 -0
  451. numpy/f2py/setup.cfg +3 -0
  452. numpy/f2py/src/fortranobject.c +1436 -0
  453. numpy/f2py/src/fortranobject.h +173 -0
  454. numpy/f2py/symbolic.py +1518 -0
  455. numpy/f2py/symbolic.pyi +219 -0
  456. numpy/f2py/tests/__init__.py +16 -0
  457. numpy/f2py/tests/src/abstract_interface/foo.f90 +34 -0
  458. numpy/f2py/tests/src/abstract_interface/gh18403_mod.f90 +6 -0
  459. numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +235 -0
  460. numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap +1 -0
  461. numpy/f2py/tests/src/assumed_shape/foo_free.f90 +34 -0
  462. numpy/f2py/tests/src/assumed_shape/foo_mod.f90 +41 -0
  463. numpy/f2py/tests/src/assumed_shape/foo_use.f90 +19 -0
  464. numpy/f2py/tests/src/assumed_shape/precision.f90 +4 -0
  465. numpy/f2py/tests/src/block_docstring/foo.f +6 -0
  466. numpy/f2py/tests/src/callback/foo.f +62 -0
  467. numpy/f2py/tests/src/callback/gh17797.f90 +7 -0
  468. numpy/f2py/tests/src/callback/gh18335.f90 +17 -0
  469. numpy/f2py/tests/src/callback/gh25211.f +10 -0
  470. numpy/f2py/tests/src/callback/gh25211.pyf +18 -0
  471. numpy/f2py/tests/src/callback/gh26681.f90 +18 -0
  472. numpy/f2py/tests/src/cli/gh_22819.pyf +6 -0
  473. numpy/f2py/tests/src/cli/hi77.f +3 -0
  474. numpy/f2py/tests/src/cli/hiworld.f90 +3 -0
  475. numpy/f2py/tests/src/common/block.f +11 -0
  476. numpy/f2py/tests/src/common/gh19161.f90 +10 -0
  477. numpy/f2py/tests/src/crackfortran/accesstype.f90 +13 -0
  478. numpy/f2py/tests/src/crackfortran/common_with_division.f +17 -0
  479. numpy/f2py/tests/src/crackfortran/data_common.f +8 -0
  480. numpy/f2py/tests/src/crackfortran/data_multiplier.f +5 -0
  481. numpy/f2py/tests/src/crackfortran/data_stmts.f90 +20 -0
  482. numpy/f2py/tests/src/crackfortran/data_with_comments.f +8 -0
  483. numpy/f2py/tests/src/crackfortran/foo_deps.f90 +6 -0
  484. numpy/f2py/tests/src/crackfortran/gh15035.f +16 -0
  485. numpy/f2py/tests/src/crackfortran/gh17859.f +12 -0
  486. numpy/f2py/tests/src/crackfortran/gh22648.pyf +7 -0
  487. numpy/f2py/tests/src/crackfortran/gh23533.f +5 -0
  488. numpy/f2py/tests/src/crackfortran/gh23598.f90 +4 -0
  489. numpy/f2py/tests/src/crackfortran/gh23598Warn.f90 +11 -0
  490. numpy/f2py/tests/src/crackfortran/gh23879.f90 +20 -0
  491. numpy/f2py/tests/src/crackfortran/gh27697.f90 +12 -0
  492. numpy/f2py/tests/src/crackfortran/gh2848.f90 +13 -0
  493. numpy/f2py/tests/src/crackfortran/operators.f90 +49 -0
  494. numpy/f2py/tests/src/crackfortran/privatemod.f90 +11 -0
  495. numpy/f2py/tests/src/crackfortran/publicmod.f90 +10 -0
  496. numpy/f2py/tests/src/crackfortran/pubprivmod.f90 +10 -0
  497. numpy/f2py/tests/src/crackfortran/unicode_comment.f90 +4 -0
  498. numpy/f2py/tests/src/f2cmap/.f2py_f2cmap +1 -0
  499. numpy/f2py/tests/src/f2cmap/isoFortranEnvMap.f90 +9 -0
  500. numpy/f2py/tests/src/isocintrin/isoCtests.f90 +34 -0
  501. numpy/f2py/tests/src/kind/foo.f90 +20 -0
  502. numpy/f2py/tests/src/mixed/foo.f +5 -0
  503. numpy/f2py/tests/src/mixed/foo_fixed.f90 +8 -0
  504. numpy/f2py/tests/src/mixed/foo_free.f90 +8 -0
  505. numpy/f2py/tests/src/modules/gh25337/data.f90 +8 -0
  506. numpy/f2py/tests/src/modules/gh25337/use_data.f90 +6 -0
  507. numpy/f2py/tests/src/modules/gh26920/two_mods_with_no_public_entities.f90 +21 -0
  508. numpy/f2py/tests/src/modules/gh26920/two_mods_with_one_public_routine.f90 +21 -0
  509. numpy/f2py/tests/src/modules/module_data_docstring.f90 +12 -0
  510. numpy/f2py/tests/src/modules/use_modules.f90 +20 -0
  511. numpy/f2py/tests/src/negative_bounds/issue_20853.f90 +7 -0
  512. numpy/f2py/tests/src/parameter/constant_array.f90 +45 -0
  513. numpy/f2py/tests/src/parameter/constant_both.f90 +57 -0
  514. numpy/f2py/tests/src/parameter/constant_compound.f90 +15 -0
  515. numpy/f2py/tests/src/parameter/constant_integer.f90 +22 -0
  516. numpy/f2py/tests/src/parameter/constant_non_compound.f90 +23 -0
  517. numpy/f2py/tests/src/parameter/constant_real.f90 +23 -0
  518. numpy/f2py/tests/src/quoted_character/foo.f +14 -0
  519. numpy/f2py/tests/src/regression/AB.inc +1 -0
  520. numpy/f2py/tests/src/regression/assignOnlyModule.f90 +25 -0
  521. numpy/f2py/tests/src/regression/datonly.f90 +17 -0
  522. numpy/f2py/tests/src/regression/f77comments.f +26 -0
  523. numpy/f2py/tests/src/regression/f77fixedform.f95 +5 -0
  524. numpy/f2py/tests/src/regression/f90continuation.f90 +9 -0
  525. numpy/f2py/tests/src/regression/incfile.f90 +5 -0
  526. numpy/f2py/tests/src/regression/inout.f90 +9 -0
  527. numpy/f2py/tests/src/regression/lower_f2py_fortran.f90 +5 -0
  528. numpy/f2py/tests/src/regression/mod_derived_types.f90 +23 -0
  529. numpy/f2py/tests/src/return_character/foo77.f +45 -0
  530. numpy/f2py/tests/src/return_character/foo90.f90 +48 -0
  531. numpy/f2py/tests/src/return_complex/foo77.f +45 -0
  532. numpy/f2py/tests/src/return_complex/foo90.f90 +48 -0
  533. numpy/f2py/tests/src/return_integer/foo77.f +56 -0
  534. numpy/f2py/tests/src/return_integer/foo90.f90 +59 -0
  535. numpy/f2py/tests/src/return_logical/foo77.f +56 -0
  536. numpy/f2py/tests/src/return_logical/foo90.f90 +59 -0
  537. numpy/f2py/tests/src/return_real/foo77.f +45 -0
  538. numpy/f2py/tests/src/return_real/foo90.f90 +48 -0
  539. numpy/f2py/tests/src/routines/funcfortranname.f +5 -0
  540. numpy/f2py/tests/src/routines/funcfortranname.pyf +11 -0
  541. numpy/f2py/tests/src/routines/subrout.f +4 -0
  542. numpy/f2py/tests/src/routines/subrout.pyf +10 -0
  543. numpy/f2py/tests/src/size/foo.f90 +44 -0
  544. numpy/f2py/tests/src/string/char.f90 +29 -0
  545. numpy/f2py/tests/src/string/fixed_string.f90 +34 -0
  546. numpy/f2py/tests/src/string/gh24008.f +8 -0
  547. numpy/f2py/tests/src/string/gh24662.f90 +7 -0
  548. numpy/f2py/tests/src/string/gh25286.f90 +14 -0
  549. numpy/f2py/tests/src/string/gh25286.pyf +12 -0
  550. numpy/f2py/tests/src/string/gh25286_bc.pyf +12 -0
  551. numpy/f2py/tests/src/string/scalar_string.f90 +9 -0
  552. numpy/f2py/tests/src/string/string.f +12 -0
  553. numpy/f2py/tests/src/value_attrspec/gh21665.f90 +9 -0
  554. numpy/f2py/tests/test_abstract_interface.py +26 -0
  555. numpy/f2py/tests/test_array_from_pyobj.py +678 -0
  556. numpy/f2py/tests/test_assumed_shape.py +50 -0
  557. numpy/f2py/tests/test_block_docstring.py +20 -0
  558. numpy/f2py/tests/test_callback.py +263 -0
  559. numpy/f2py/tests/test_character.py +641 -0
  560. numpy/f2py/tests/test_common.py +23 -0
  561. numpy/f2py/tests/test_crackfortran.py +421 -0
  562. numpy/f2py/tests/test_data.py +71 -0
  563. numpy/f2py/tests/test_docs.py +66 -0
  564. numpy/f2py/tests/test_f2cmap.py +17 -0
  565. numpy/f2py/tests/test_f2py2e.py +983 -0
  566. numpy/f2py/tests/test_isoc.py +56 -0
  567. numpy/f2py/tests/test_kind.py +52 -0
  568. numpy/f2py/tests/test_mixed.py +35 -0
  569. numpy/f2py/tests/test_modules.py +83 -0
  570. numpy/f2py/tests/test_parameter.py +129 -0
  571. numpy/f2py/tests/test_pyf_src.py +43 -0
  572. numpy/f2py/tests/test_quoted_character.py +18 -0
  573. numpy/f2py/tests/test_regression.py +187 -0
  574. numpy/f2py/tests/test_return_character.py +48 -0
  575. numpy/f2py/tests/test_return_complex.py +67 -0
  576. numpy/f2py/tests/test_return_integer.py +55 -0
  577. numpy/f2py/tests/test_return_logical.py +65 -0
  578. numpy/f2py/tests/test_return_real.py +109 -0
  579. numpy/f2py/tests/test_routines.py +29 -0
  580. numpy/f2py/tests/test_semicolon_split.py +75 -0
  581. numpy/f2py/tests/test_size.py +45 -0
  582. numpy/f2py/tests/test_string.py +100 -0
  583. numpy/f2py/tests/test_symbolic.py +500 -0
  584. numpy/f2py/tests/test_value_attrspec.py +15 -0
  585. numpy/f2py/tests/util.py +442 -0
  586. numpy/f2py/use_rules.py +99 -0
  587. numpy/f2py/use_rules.pyi +9 -0
  588. numpy/fft/__init__.py +213 -0
  589. numpy/fft/__init__.pyi +38 -0
  590. numpy/fft/_helper.py +235 -0
  591. numpy/fft/_helper.pyi +44 -0
  592. numpy/fft/_pocketfft.py +1693 -0
  593. numpy/fft/_pocketfft.pyi +137 -0
  594. numpy/fft/_pocketfft_umath.pypy311-pp73-darwin.so +0 -0
  595. numpy/fft/tests/__init__.py +0 -0
  596. numpy/fft/tests/test_helper.py +167 -0
  597. numpy/fft/tests/test_pocketfft.py +589 -0
  598. numpy/lib/__init__.py +97 -0
  599. numpy/lib/__init__.pyi +52 -0
  600. numpy/lib/_array_utils_impl.py +62 -0
  601. numpy/lib/_array_utils_impl.pyi +10 -0
  602. numpy/lib/_arraypad_impl.py +926 -0
  603. numpy/lib/_arraypad_impl.pyi +88 -0
  604. numpy/lib/_arraysetops_impl.py +1158 -0
  605. numpy/lib/_arraysetops_impl.pyi +462 -0
  606. numpy/lib/_arrayterator_impl.py +224 -0
  607. numpy/lib/_arrayterator_impl.pyi +45 -0
  608. numpy/lib/_datasource.py +700 -0
  609. numpy/lib/_datasource.pyi +30 -0
  610. numpy/lib/_format_impl.py +1036 -0
  611. numpy/lib/_format_impl.pyi +56 -0
  612. numpy/lib/_function_base_impl.py +5760 -0
  613. numpy/lib/_function_base_impl.pyi +2324 -0
  614. numpy/lib/_histograms_impl.py +1085 -0
  615. numpy/lib/_histograms_impl.pyi +40 -0
  616. numpy/lib/_index_tricks_impl.py +1048 -0
  617. numpy/lib/_index_tricks_impl.pyi +267 -0
  618. numpy/lib/_iotools.py +900 -0
  619. numpy/lib/_iotools.pyi +116 -0
  620. numpy/lib/_nanfunctions_impl.py +2006 -0
  621. numpy/lib/_nanfunctions_impl.pyi +48 -0
  622. numpy/lib/_npyio_impl.py +2583 -0
  623. numpy/lib/_npyio_impl.pyi +299 -0
  624. numpy/lib/_polynomial_impl.py +1465 -0
  625. numpy/lib/_polynomial_impl.pyi +338 -0
  626. numpy/lib/_scimath_impl.py +642 -0
  627. numpy/lib/_scimath_impl.pyi +93 -0
  628. numpy/lib/_shape_base_impl.py +1289 -0
  629. numpy/lib/_shape_base_impl.pyi +236 -0
  630. numpy/lib/_stride_tricks_impl.py +582 -0
  631. numpy/lib/_stride_tricks_impl.pyi +73 -0
  632. numpy/lib/_twodim_base_impl.py +1201 -0
  633. numpy/lib/_twodim_base_impl.pyi +408 -0
  634. numpy/lib/_type_check_impl.py +710 -0
  635. numpy/lib/_type_check_impl.pyi +348 -0
  636. numpy/lib/_ufunclike_impl.py +199 -0
  637. numpy/lib/_ufunclike_impl.pyi +60 -0
  638. numpy/lib/_user_array_impl.py +310 -0
  639. numpy/lib/_user_array_impl.pyi +226 -0
  640. numpy/lib/_utils_impl.py +784 -0
  641. numpy/lib/_utils_impl.pyi +22 -0
  642. numpy/lib/_version.py +153 -0
  643. numpy/lib/_version.pyi +17 -0
  644. numpy/lib/array_utils.py +7 -0
  645. numpy/lib/array_utils.pyi +6 -0
  646. numpy/lib/format.py +24 -0
  647. numpy/lib/format.pyi +24 -0
  648. numpy/lib/introspect.py +94 -0
  649. numpy/lib/introspect.pyi +3 -0
  650. numpy/lib/mixins.py +180 -0
  651. numpy/lib/mixins.pyi +78 -0
  652. numpy/lib/npyio.py +1 -0
  653. numpy/lib/npyio.pyi +5 -0
  654. numpy/lib/recfunctions.py +1681 -0
  655. numpy/lib/recfunctions.pyi +444 -0
  656. numpy/lib/scimath.py +13 -0
  657. numpy/lib/scimath.pyi +12 -0
  658. numpy/lib/stride_tricks.py +1 -0
  659. numpy/lib/stride_tricks.pyi +4 -0
  660. numpy/lib/tests/__init__.py +0 -0
  661. numpy/lib/tests/data/py2-np0-objarr.npy +0 -0
  662. numpy/lib/tests/data/py2-objarr.npy +0 -0
  663. numpy/lib/tests/data/py2-objarr.npz +0 -0
  664. numpy/lib/tests/data/py3-objarr.npy +0 -0
  665. numpy/lib/tests/data/py3-objarr.npz +0 -0
  666. numpy/lib/tests/data/python3.npy +0 -0
  667. numpy/lib/tests/data/win64python2.npy +0 -0
  668. numpy/lib/tests/test__datasource.py +328 -0
  669. numpy/lib/tests/test__iotools.py +358 -0
  670. numpy/lib/tests/test__version.py +64 -0
  671. numpy/lib/tests/test_array_utils.py +32 -0
  672. numpy/lib/tests/test_arraypad.py +1427 -0
  673. numpy/lib/tests/test_arraysetops.py +1302 -0
  674. numpy/lib/tests/test_arrayterator.py +45 -0
  675. numpy/lib/tests/test_format.py +1054 -0
  676. numpy/lib/tests/test_function_base.py +4750 -0
  677. numpy/lib/tests/test_histograms.py +855 -0
  678. numpy/lib/tests/test_index_tricks.py +693 -0
  679. numpy/lib/tests/test_io.py +2857 -0
  680. numpy/lib/tests/test_loadtxt.py +1099 -0
  681. numpy/lib/tests/test_mixins.py +215 -0
  682. numpy/lib/tests/test_nanfunctions.py +1438 -0
  683. numpy/lib/tests/test_packbits.py +376 -0
  684. numpy/lib/tests/test_polynomial.py +325 -0
  685. numpy/lib/tests/test_recfunctions.py +1042 -0
  686. numpy/lib/tests/test_regression.py +231 -0
  687. numpy/lib/tests/test_shape_base.py +813 -0
  688. numpy/lib/tests/test_stride_tricks.py +655 -0
  689. numpy/lib/tests/test_twodim_base.py +559 -0
  690. numpy/lib/tests/test_type_check.py +473 -0
  691. numpy/lib/tests/test_ufunclike.py +97 -0
  692. numpy/lib/tests/test_utils.py +80 -0
  693. numpy/lib/user_array.py +1 -0
  694. numpy/lib/user_array.pyi +1 -0
  695. numpy/linalg/__init__.py +95 -0
  696. numpy/linalg/__init__.pyi +71 -0
  697. numpy/linalg/_linalg.py +3657 -0
  698. numpy/linalg/_linalg.pyi +548 -0
  699. numpy/linalg/_umath_linalg.pyi +60 -0
  700. numpy/linalg/_umath_linalg.pypy311-pp73-darwin.so +0 -0
  701. numpy/linalg/lapack_lite.pyi +143 -0
  702. numpy/linalg/lapack_lite.pypy311-pp73-darwin.so +0 -0
  703. numpy/linalg/tests/__init__.py +0 -0
  704. numpy/linalg/tests/test_deprecations.py +21 -0
  705. numpy/linalg/tests/test_linalg.py +2442 -0
  706. numpy/linalg/tests/test_regression.py +182 -0
  707. numpy/ma/API_CHANGES.txt +135 -0
  708. numpy/ma/LICENSE +24 -0
  709. numpy/ma/README.rst +236 -0
  710. numpy/ma/__init__.py +53 -0
  711. numpy/ma/__init__.pyi +458 -0
  712. numpy/ma/core.py +8929 -0
  713. numpy/ma/core.pyi +3720 -0
  714. numpy/ma/extras.py +2266 -0
  715. numpy/ma/extras.pyi +297 -0
  716. numpy/ma/mrecords.py +762 -0
  717. numpy/ma/mrecords.pyi +96 -0
  718. numpy/ma/tests/__init__.py +0 -0
  719. numpy/ma/tests/test_arrayobject.py +40 -0
  720. numpy/ma/tests/test_core.py +6008 -0
  721. numpy/ma/tests/test_deprecations.py +65 -0
  722. numpy/ma/tests/test_extras.py +1945 -0
  723. numpy/ma/tests/test_mrecords.py +495 -0
  724. numpy/ma/tests/test_old_ma.py +939 -0
  725. numpy/ma/tests/test_regression.py +83 -0
  726. numpy/ma/tests/test_subclassing.py +469 -0
  727. numpy/ma/testutils.py +294 -0
  728. numpy/ma/testutils.pyi +69 -0
  729. numpy/matlib.py +380 -0
  730. numpy/matlib.pyi +580 -0
  731. numpy/matrixlib/__init__.py +12 -0
  732. numpy/matrixlib/__init__.pyi +3 -0
  733. numpy/matrixlib/defmatrix.py +1119 -0
  734. numpy/matrixlib/defmatrix.pyi +218 -0
  735. numpy/matrixlib/tests/__init__.py +0 -0
  736. numpy/matrixlib/tests/test_defmatrix.py +455 -0
  737. numpy/matrixlib/tests/test_interaction.py +360 -0
  738. numpy/matrixlib/tests/test_masked_matrix.py +240 -0
  739. numpy/matrixlib/tests/test_matrix_linalg.py +110 -0
  740. numpy/matrixlib/tests/test_multiarray.py +17 -0
  741. numpy/matrixlib/tests/test_numeric.py +18 -0
  742. numpy/matrixlib/tests/test_regression.py +31 -0
  743. numpy/polynomial/__init__.py +187 -0
  744. numpy/polynomial/__init__.pyi +31 -0
  745. numpy/polynomial/_polybase.py +1191 -0
  746. numpy/polynomial/_polybase.pyi +262 -0
  747. numpy/polynomial/_polytypes.pyi +501 -0
  748. numpy/polynomial/chebyshev.py +2001 -0
  749. numpy/polynomial/chebyshev.pyi +180 -0
  750. numpy/polynomial/hermite.py +1738 -0
  751. numpy/polynomial/hermite.pyi +106 -0
  752. numpy/polynomial/hermite_e.py +1640 -0
  753. numpy/polynomial/hermite_e.pyi +106 -0
  754. numpy/polynomial/laguerre.py +1673 -0
  755. numpy/polynomial/laguerre.pyi +100 -0
  756. numpy/polynomial/legendre.py +1603 -0
  757. numpy/polynomial/legendre.pyi +100 -0
  758. numpy/polynomial/polynomial.py +1625 -0
  759. numpy/polynomial/polynomial.pyi +109 -0
  760. numpy/polynomial/polyutils.py +759 -0
  761. numpy/polynomial/polyutils.pyi +307 -0
  762. numpy/polynomial/tests/__init__.py +0 -0
  763. numpy/polynomial/tests/test_chebyshev.py +618 -0
  764. numpy/polynomial/tests/test_classes.py +613 -0
  765. numpy/polynomial/tests/test_hermite.py +553 -0
  766. numpy/polynomial/tests/test_hermite_e.py +554 -0
  767. numpy/polynomial/tests/test_laguerre.py +535 -0
  768. numpy/polynomial/tests/test_legendre.py +566 -0
  769. numpy/polynomial/tests/test_polynomial.py +691 -0
  770. numpy/polynomial/tests/test_polyutils.py +123 -0
  771. numpy/polynomial/tests/test_printing.py +557 -0
  772. numpy/polynomial/tests/test_symbol.py +217 -0
  773. numpy/py.typed +0 -0
  774. numpy/random/LICENSE.md +71 -0
  775. numpy/random/__init__.pxd +14 -0
  776. numpy/random/__init__.py +213 -0
  777. numpy/random/__init__.pyi +124 -0
  778. numpy/random/_bounded_integers.pxd +29 -0
  779. numpy/random/_bounded_integers.pyi +1 -0
  780. numpy/random/_bounded_integers.pypy311-pp73-darwin.so +0 -0
  781. numpy/random/_common.pxd +110 -0
  782. numpy/random/_common.pyi +16 -0
  783. numpy/random/_common.pypy311-pp73-darwin.so +0 -0
  784. numpy/random/_examples/cffi/extending.py +44 -0
  785. numpy/random/_examples/cffi/parse.py +53 -0
  786. numpy/random/_examples/cython/extending.pyx +77 -0
  787. numpy/random/_examples/cython/extending_distributions.pyx +117 -0
  788. numpy/random/_examples/cython/meson.build +53 -0
  789. numpy/random/_examples/numba/extending.py +86 -0
  790. numpy/random/_examples/numba/extending_distributions.py +67 -0
  791. numpy/random/_generator.pyi +862 -0
  792. numpy/random/_generator.pypy311-pp73-darwin.so +0 -0
  793. numpy/random/_mt19937.pyi +27 -0
  794. numpy/random/_mt19937.pypy311-pp73-darwin.so +0 -0
  795. numpy/random/_pcg64.pyi +41 -0
  796. numpy/random/_pcg64.pypy311-pp73-darwin.so +0 -0
  797. numpy/random/_philox.pyi +36 -0
  798. numpy/random/_philox.pypy311-pp73-darwin.so +0 -0
  799. numpy/random/_pickle.py +88 -0
  800. numpy/random/_pickle.pyi +43 -0
  801. numpy/random/_sfc64.pyi +25 -0
  802. numpy/random/_sfc64.pypy311-pp73-darwin.so +0 -0
  803. numpy/random/bit_generator.pxd +40 -0
  804. numpy/random/bit_generator.pyi +123 -0
  805. numpy/random/bit_generator.pypy311-pp73-darwin.so +0 -0
  806. numpy/random/c_distributions.pxd +119 -0
  807. numpy/random/lib/libnpyrandom.a +0 -0
  808. numpy/random/mtrand.pyi +759 -0
  809. numpy/random/mtrand.pypy311-pp73-darwin.so +0 -0
  810. numpy/random/tests/__init__.py +0 -0
  811. numpy/random/tests/data/__init__.py +0 -0
  812. numpy/random/tests/data/generator_pcg64_np121.pkl.gz +0 -0
  813. numpy/random/tests/data/generator_pcg64_np126.pkl.gz +0 -0
  814. numpy/random/tests/data/mt19937-testset-1.csv +1001 -0
  815. numpy/random/tests/data/mt19937-testset-2.csv +1001 -0
  816. numpy/random/tests/data/pcg64-testset-1.csv +1001 -0
  817. numpy/random/tests/data/pcg64-testset-2.csv +1001 -0
  818. numpy/random/tests/data/pcg64dxsm-testset-1.csv +1001 -0
  819. numpy/random/tests/data/pcg64dxsm-testset-2.csv +1001 -0
  820. numpy/random/tests/data/philox-testset-1.csv +1001 -0
  821. numpy/random/tests/data/philox-testset-2.csv +1001 -0
  822. numpy/random/tests/data/sfc64-testset-1.csv +1001 -0
  823. numpy/random/tests/data/sfc64-testset-2.csv +1001 -0
  824. numpy/random/tests/data/sfc64_np126.pkl.gz +0 -0
  825. numpy/random/tests/test_direct.py +595 -0
  826. numpy/random/tests/test_extending.py +131 -0
  827. numpy/random/tests/test_generator_mt19937.py +2825 -0
  828. numpy/random/tests/test_generator_mt19937_regressions.py +221 -0
  829. numpy/random/tests/test_random.py +1724 -0
  830. numpy/random/tests/test_randomstate.py +2099 -0
  831. numpy/random/tests/test_randomstate_regression.py +213 -0
  832. numpy/random/tests/test_regression.py +175 -0
  833. numpy/random/tests/test_seed_sequence.py +79 -0
  834. numpy/random/tests/test_smoke.py +882 -0
  835. numpy/rec/__init__.py +2 -0
  836. numpy/rec/__init__.pyi +23 -0
  837. numpy/strings/__init__.py +2 -0
  838. numpy/strings/__init__.pyi +97 -0
  839. numpy/testing/__init__.py +22 -0
  840. numpy/testing/__init__.pyi +107 -0
  841. numpy/testing/_private/__init__.py +0 -0
  842. numpy/testing/_private/__init__.pyi +0 -0
  843. numpy/testing/_private/extbuild.py +250 -0
  844. numpy/testing/_private/extbuild.pyi +25 -0
  845. numpy/testing/_private/utils.py +2830 -0
  846. numpy/testing/_private/utils.pyi +505 -0
  847. numpy/testing/overrides.py +84 -0
  848. numpy/testing/overrides.pyi +10 -0
  849. numpy/testing/print_coercion_tables.py +207 -0
  850. numpy/testing/print_coercion_tables.pyi +26 -0
  851. numpy/testing/tests/__init__.py +0 -0
  852. numpy/testing/tests/test_utils.py +2123 -0
  853. numpy/tests/__init__.py +0 -0
  854. numpy/tests/test__all__.py +10 -0
  855. numpy/tests/test_configtool.py +51 -0
  856. numpy/tests/test_ctypeslib.py +383 -0
  857. numpy/tests/test_lazyloading.py +42 -0
  858. numpy/tests/test_matlib.py +59 -0
  859. numpy/tests/test_numpy_config.py +47 -0
  860. numpy/tests/test_numpy_version.py +54 -0
  861. numpy/tests/test_public_api.py +807 -0
  862. numpy/tests/test_reloading.py +76 -0
  863. numpy/tests/test_scripts.py +48 -0
  864. numpy/tests/test_warnings.py +79 -0
  865. numpy/typing/__init__.py +233 -0
  866. numpy/typing/__init__.pyi +3 -0
  867. numpy/typing/mypy_plugin.py +200 -0
  868. numpy/typing/tests/__init__.py +0 -0
  869. numpy/typing/tests/data/fail/arithmetic.pyi +126 -0
  870. numpy/typing/tests/data/fail/array_constructors.pyi +34 -0
  871. numpy/typing/tests/data/fail/array_like.pyi +15 -0
  872. numpy/typing/tests/data/fail/array_pad.pyi +6 -0
  873. numpy/typing/tests/data/fail/arrayprint.pyi +15 -0
  874. numpy/typing/tests/data/fail/arrayterator.pyi +14 -0
  875. numpy/typing/tests/data/fail/bitwise_ops.pyi +17 -0
  876. numpy/typing/tests/data/fail/char.pyi +63 -0
  877. numpy/typing/tests/data/fail/chararray.pyi +61 -0
  878. numpy/typing/tests/data/fail/comparisons.pyi +27 -0
  879. numpy/typing/tests/data/fail/constants.pyi +3 -0
  880. numpy/typing/tests/data/fail/datasource.pyi +16 -0
  881. numpy/typing/tests/data/fail/dtype.pyi +17 -0
  882. numpy/typing/tests/data/fail/einsumfunc.pyi +12 -0
  883. numpy/typing/tests/data/fail/flatiter.pyi +38 -0
  884. numpy/typing/tests/data/fail/fromnumeric.pyi +148 -0
  885. numpy/typing/tests/data/fail/histograms.pyi +12 -0
  886. numpy/typing/tests/data/fail/index_tricks.pyi +14 -0
  887. numpy/typing/tests/data/fail/lib_function_base.pyi +60 -0
  888. numpy/typing/tests/data/fail/lib_polynomial.pyi +29 -0
  889. numpy/typing/tests/data/fail/lib_utils.pyi +3 -0
  890. numpy/typing/tests/data/fail/lib_version.pyi +6 -0
  891. numpy/typing/tests/data/fail/linalg.pyi +52 -0
  892. numpy/typing/tests/data/fail/ma.pyi +155 -0
  893. numpy/typing/tests/data/fail/memmap.pyi +5 -0
  894. numpy/typing/tests/data/fail/modules.pyi +17 -0
  895. numpy/typing/tests/data/fail/multiarray.pyi +52 -0
  896. numpy/typing/tests/data/fail/ndarray.pyi +11 -0
  897. numpy/typing/tests/data/fail/ndarray_misc.pyi +49 -0
  898. numpy/typing/tests/data/fail/nditer.pyi +8 -0
  899. numpy/typing/tests/data/fail/nested_sequence.pyi +17 -0
  900. numpy/typing/tests/data/fail/npyio.pyi +24 -0
  901. numpy/typing/tests/data/fail/numerictypes.pyi +5 -0
  902. numpy/typing/tests/data/fail/random.pyi +62 -0
  903. numpy/typing/tests/data/fail/rec.pyi +17 -0
  904. numpy/typing/tests/data/fail/scalars.pyi +86 -0
  905. numpy/typing/tests/data/fail/shape.pyi +7 -0
  906. numpy/typing/tests/data/fail/shape_base.pyi +8 -0
  907. numpy/typing/tests/data/fail/stride_tricks.pyi +9 -0
  908. numpy/typing/tests/data/fail/strings.pyi +52 -0
  909. numpy/typing/tests/data/fail/testing.pyi +28 -0
  910. numpy/typing/tests/data/fail/twodim_base.pyi +39 -0
  911. numpy/typing/tests/data/fail/type_check.pyi +12 -0
  912. numpy/typing/tests/data/fail/ufunc_config.pyi +21 -0
  913. numpy/typing/tests/data/fail/ufunclike.pyi +21 -0
  914. numpy/typing/tests/data/fail/ufuncs.pyi +17 -0
  915. numpy/typing/tests/data/fail/warnings_and_errors.pyi +5 -0
  916. numpy/typing/tests/data/misc/extended_precision.pyi +9 -0
  917. numpy/typing/tests/data/mypy.ini +8 -0
  918. numpy/typing/tests/data/pass/arithmetic.py +614 -0
  919. numpy/typing/tests/data/pass/array_constructors.py +138 -0
  920. numpy/typing/tests/data/pass/array_like.py +43 -0
  921. numpy/typing/tests/data/pass/arrayprint.py +37 -0
  922. numpy/typing/tests/data/pass/arrayterator.py +28 -0
  923. numpy/typing/tests/data/pass/bitwise_ops.py +131 -0
  924. numpy/typing/tests/data/pass/comparisons.py +316 -0
  925. numpy/typing/tests/data/pass/dtype.py +57 -0
  926. numpy/typing/tests/data/pass/einsumfunc.py +36 -0
  927. numpy/typing/tests/data/pass/flatiter.py +26 -0
  928. numpy/typing/tests/data/pass/fromnumeric.py +272 -0
  929. numpy/typing/tests/data/pass/index_tricks.py +62 -0
  930. numpy/typing/tests/data/pass/lib_user_array.py +22 -0
  931. numpy/typing/tests/data/pass/lib_utils.py +19 -0
  932. numpy/typing/tests/data/pass/lib_version.py +18 -0
  933. numpy/typing/tests/data/pass/literal.py +52 -0
  934. numpy/typing/tests/data/pass/ma.py +199 -0
  935. numpy/typing/tests/data/pass/mod.py +149 -0
  936. numpy/typing/tests/data/pass/modules.py +45 -0
  937. numpy/typing/tests/data/pass/multiarray.py +77 -0
  938. numpy/typing/tests/data/pass/ndarray_conversion.py +81 -0
  939. numpy/typing/tests/data/pass/ndarray_misc.py +199 -0
  940. numpy/typing/tests/data/pass/ndarray_shape_manipulation.py +47 -0
  941. numpy/typing/tests/data/pass/nditer.py +4 -0
  942. numpy/typing/tests/data/pass/numeric.py +90 -0
  943. numpy/typing/tests/data/pass/numerictypes.py +17 -0
  944. numpy/typing/tests/data/pass/random.py +1498 -0
  945. numpy/typing/tests/data/pass/recfunctions.py +164 -0
  946. numpy/typing/tests/data/pass/scalars.py +249 -0
  947. numpy/typing/tests/data/pass/shape.py +19 -0
  948. numpy/typing/tests/data/pass/simple.py +170 -0
  949. numpy/typing/tests/data/pass/ufunc_config.py +64 -0
  950. numpy/typing/tests/data/pass/ufunclike.py +52 -0
  951. numpy/typing/tests/data/pass/ufuncs.py +16 -0
  952. numpy/typing/tests/data/pass/warnings_and_errors.py +6 -0
  953. numpy/typing/tests/data/reveal/arithmetic.pyi +719 -0
  954. numpy/typing/tests/data/reveal/array_api_info.pyi +70 -0
  955. numpy/typing/tests/data/reveal/array_constructors.pyi +277 -0
  956. numpy/typing/tests/data/reveal/arraypad.pyi +27 -0
  957. numpy/typing/tests/data/reveal/arrayprint.pyi +25 -0
  958. numpy/typing/tests/data/reveal/arraysetops.pyi +74 -0
  959. numpy/typing/tests/data/reveal/arrayterator.pyi +27 -0
  960. numpy/typing/tests/data/reveal/bitwise_ops.pyi +166 -0
  961. numpy/typing/tests/data/reveal/char.pyi +225 -0
  962. numpy/typing/tests/data/reveal/chararray.pyi +138 -0
  963. numpy/typing/tests/data/reveal/comparisons.pyi +264 -0
  964. numpy/typing/tests/data/reveal/constants.pyi +14 -0
  965. numpy/typing/tests/data/reveal/ctypeslib.pyi +81 -0
  966. numpy/typing/tests/data/reveal/datasource.pyi +23 -0
  967. numpy/typing/tests/data/reveal/dtype.pyi +132 -0
  968. numpy/typing/tests/data/reveal/einsumfunc.pyi +39 -0
  969. numpy/typing/tests/data/reveal/emath.pyi +54 -0
  970. numpy/typing/tests/data/reveal/fft.pyi +37 -0
  971. numpy/typing/tests/data/reveal/flatiter.pyi +86 -0
  972. numpy/typing/tests/data/reveal/fromnumeric.pyi +347 -0
  973. numpy/typing/tests/data/reveal/getlimits.pyi +53 -0
  974. numpy/typing/tests/data/reveal/histograms.pyi +25 -0
  975. numpy/typing/tests/data/reveal/index_tricks.pyi +70 -0
  976. numpy/typing/tests/data/reveal/lib_function_base.pyi +409 -0
  977. numpy/typing/tests/data/reveal/lib_polynomial.pyi +147 -0
  978. numpy/typing/tests/data/reveal/lib_utils.pyi +17 -0
  979. numpy/typing/tests/data/reveal/lib_version.pyi +20 -0
  980. numpy/typing/tests/data/reveal/linalg.pyi +154 -0
  981. numpy/typing/tests/data/reveal/ma.pyi +1098 -0
  982. numpy/typing/tests/data/reveal/matrix.pyi +73 -0
  983. numpy/typing/tests/data/reveal/memmap.pyi +19 -0
  984. numpy/typing/tests/data/reveal/mod.pyi +178 -0
  985. numpy/typing/tests/data/reveal/modules.pyi +51 -0
  986. numpy/typing/tests/data/reveal/multiarray.pyi +197 -0
  987. numpy/typing/tests/data/reveal/nbit_base_example.pyi +20 -0
  988. numpy/typing/tests/data/reveal/ndarray_assignability.pyi +82 -0
  989. numpy/typing/tests/data/reveal/ndarray_conversion.pyi +83 -0
  990. numpy/typing/tests/data/reveal/ndarray_misc.pyi +246 -0
  991. numpy/typing/tests/data/reveal/ndarray_shape_manipulation.pyi +47 -0
  992. numpy/typing/tests/data/reveal/nditer.pyi +49 -0
  993. numpy/typing/tests/data/reveal/nested_sequence.pyi +25 -0
  994. numpy/typing/tests/data/reveal/npyio.pyi +83 -0
  995. numpy/typing/tests/data/reveal/numeric.pyi +170 -0
  996. numpy/typing/tests/data/reveal/numerictypes.pyi +16 -0
  997. numpy/typing/tests/data/reveal/polynomial_polybase.pyi +217 -0
  998. numpy/typing/tests/data/reveal/polynomial_polyutils.pyi +218 -0
  999. numpy/typing/tests/data/reveal/polynomial_series.pyi +138 -0
  1000. numpy/typing/tests/data/reveal/random.pyi +1546 -0
  1001. numpy/typing/tests/data/reveal/rec.pyi +171 -0
  1002. numpy/typing/tests/data/reveal/scalars.pyi +191 -0
  1003. numpy/typing/tests/data/reveal/shape.pyi +13 -0
  1004. numpy/typing/tests/data/reveal/shape_base.pyi +52 -0
  1005. numpy/typing/tests/data/reveal/stride_tricks.pyi +27 -0
  1006. numpy/typing/tests/data/reveal/strings.pyi +196 -0
  1007. numpy/typing/tests/data/reveal/testing.pyi +198 -0
  1008. numpy/typing/tests/data/reveal/twodim_base.pyi +225 -0
  1009. numpy/typing/tests/data/reveal/type_check.pyi +67 -0
  1010. numpy/typing/tests/data/reveal/ufunc_config.pyi +29 -0
  1011. numpy/typing/tests/data/reveal/ufunclike.pyi +31 -0
  1012. numpy/typing/tests/data/reveal/ufuncs.pyi +142 -0
  1013. numpy/typing/tests/data/reveal/warnings_and_errors.pyi +11 -0
  1014. numpy/typing/tests/test_isfile.py +38 -0
  1015. numpy/typing/tests/test_runtime.py +110 -0
  1016. numpy/typing/tests/test_typing.py +205 -0
  1017. numpy/version.py +11 -0
  1018. numpy/version.pyi +9 -0
  1019. numpy-2.4.1.dist-info/METADATA +139 -0
  1020. numpy-2.4.1.dist-info/RECORD +1039 -0
  1021. numpy-2.4.1.dist-info/WHEEL +6 -0
  1022. numpy-2.4.1.dist-info/entry_points.txt +13 -0
  1023. numpy-2.4.1.dist-info/licenses/LICENSE.txt +935 -0
  1024. numpy-2.4.1.dist-info/licenses/numpy/_core/include/numpy/libdivide/LICENSE.txt +21 -0
  1025. numpy-2.4.1.dist-info/licenses/numpy/_core/src/common/pythoncapi-compat/COPYING +14 -0
  1026. numpy-2.4.1.dist-info/licenses/numpy/_core/src/highway/LICENSE +371 -0
  1027. numpy-2.4.1.dist-info/licenses/numpy/_core/src/multiarray/dragon4_LICENSE.txt +27 -0
  1028. numpy-2.4.1.dist-info/licenses/numpy/_core/src/npysort/x86-simd-sort/LICENSE.md +28 -0
  1029. numpy-2.4.1.dist-info/licenses/numpy/_core/src/umath/svml/LICENSE +30 -0
  1030. numpy-2.4.1.dist-info/licenses/numpy/fft/pocketfft/LICENSE.md +25 -0
  1031. numpy-2.4.1.dist-info/licenses/numpy/linalg/lapack_lite/LICENSE.txt +48 -0
  1032. numpy-2.4.1.dist-info/licenses/numpy/ma/LICENSE +24 -0
  1033. numpy-2.4.1.dist-info/licenses/numpy/random/LICENSE.md +71 -0
  1034. numpy-2.4.1.dist-info/licenses/numpy/random/src/distributions/LICENSE.md +61 -0
  1035. numpy-2.4.1.dist-info/licenses/numpy/random/src/mt19937/LICENSE.md +61 -0
  1036. numpy-2.4.1.dist-info/licenses/numpy/random/src/pcg64/LICENSE.md +22 -0
  1037. numpy-2.4.1.dist-info/licenses/numpy/random/src/philox/LICENSE.md +31 -0
  1038. numpy-2.4.1.dist-info/licenses/numpy/random/src/sfc64/LICENSE.md +27 -0
  1039. numpy-2.4.1.dist-info/licenses/numpy/random/src/splitmix64/LICENSE.md +9 -0
@@ -0,0 +1,1673 @@
1
+ """
2
+ ==================================================
3
+ Laguerre Series (:mod:`numpy.polynomial.laguerre`)
4
+ ==================================================
5
+
6
+ This module provides a number of objects (mostly functions) useful for
7
+ dealing with Laguerre series, including a `Laguerre` class that
8
+ encapsulates the usual arithmetic operations. (General information
9
+ on how this module represents and works with such polynomials is in the
10
+ docstring for its "parent" sub-package, `numpy.polynomial`).
11
+
12
+ Classes
13
+ -------
14
+ .. autosummary::
15
+ :toctree: generated/
16
+
17
+ Laguerre
18
+
19
+ Constants
20
+ ---------
21
+ .. autosummary::
22
+ :toctree: generated/
23
+
24
+ lagdomain
25
+ lagzero
26
+ lagone
27
+ lagx
28
+
29
+ Arithmetic
30
+ ----------
31
+ .. autosummary::
32
+ :toctree: generated/
33
+
34
+ lagadd
35
+ lagsub
36
+ lagmulx
37
+ lagmul
38
+ lagdiv
39
+ lagpow
40
+ lagval
41
+ lagval2d
42
+ lagval3d
43
+ laggrid2d
44
+ laggrid3d
45
+
46
+ Calculus
47
+ --------
48
+ .. autosummary::
49
+ :toctree: generated/
50
+
51
+ lagder
52
+ lagint
53
+
54
+ Misc Functions
55
+ --------------
56
+ .. autosummary::
57
+ :toctree: generated/
58
+
59
+ lagfromroots
60
+ lagroots
61
+ lagvander
62
+ lagvander2d
63
+ lagvander3d
64
+ laggauss
65
+ lagweight
66
+ lagcompanion
67
+ lagfit
68
+ lagtrim
69
+ lagline
70
+ lag2poly
71
+ poly2lag
72
+
73
+ See also
74
+ --------
75
+ `numpy.polynomial`
76
+
77
+ """
78
+ import numpy as np
79
+
80
+ from . import polyutils as pu
81
+ from ._polybase import ABCPolyBase
82
+
83
+ __all__ = [
84
+ 'lagzero', 'lagone', 'lagx', 'lagdomain', 'lagline', 'lagadd',
85
+ 'lagsub', 'lagmulx', 'lagmul', 'lagdiv', 'lagpow', 'lagval', 'lagder',
86
+ 'lagint', 'lag2poly', 'poly2lag', 'lagfromroots', 'lagvander',
87
+ 'lagfit', 'lagtrim', 'lagroots', 'Laguerre', 'lagval2d', 'lagval3d',
88
+ 'laggrid2d', 'laggrid3d', 'lagvander2d', 'lagvander3d', 'lagcompanion',
89
+ 'laggauss', 'lagweight']
90
+
91
+ lagtrim = pu.trimcoef
92
+
93
+
94
+ def poly2lag(pol):
95
+ """
96
+ poly2lag(pol)
97
+
98
+ Convert a polynomial to a Laguerre series.
99
+
100
+ Convert an array representing the coefficients of a polynomial (relative
101
+ to the "standard" basis) ordered from lowest degree to highest, to an
102
+ array of the coefficients of the equivalent Laguerre series, ordered
103
+ from lowest to highest degree.
104
+
105
+ Parameters
106
+ ----------
107
+ pol : array_like
108
+ 1-D array containing the polynomial coefficients
109
+
110
+ Returns
111
+ -------
112
+ c : ndarray
113
+ 1-D array containing the coefficients of the equivalent Laguerre
114
+ series.
115
+
116
+ See Also
117
+ --------
118
+ lag2poly
119
+
120
+ Notes
121
+ -----
122
+ The easy way to do conversions between polynomial basis sets
123
+ is to use the convert method of a class instance.
124
+
125
+ Examples
126
+ --------
127
+ >>> import numpy as np
128
+ >>> from numpy.polynomial.laguerre import poly2lag
129
+ >>> poly2lag(np.arange(4))
130
+ array([ 23., -63., 58., -18.])
131
+
132
+ """
133
+ [pol] = pu.as_series([pol])
134
+ res = 0
135
+ for p in pol[::-1]:
136
+ res = lagadd(lagmulx(res), p)
137
+ return res
138
+
139
+
140
+ def lag2poly(c):
141
+ """
142
+ Convert a Laguerre series to a polynomial.
143
+
144
+ Convert an array representing the coefficients of a Laguerre series,
145
+ ordered from lowest degree to highest, to an array of the coefficients
146
+ of the equivalent polynomial (relative to the "standard" basis) ordered
147
+ from lowest to highest degree.
148
+
149
+ Parameters
150
+ ----------
151
+ c : array_like
152
+ 1-D array containing the Laguerre series coefficients, ordered
153
+ from lowest order term to highest.
154
+
155
+ Returns
156
+ -------
157
+ pol : ndarray
158
+ 1-D array containing the coefficients of the equivalent polynomial
159
+ (relative to the "standard" basis) ordered from lowest order term
160
+ to highest.
161
+
162
+ See Also
163
+ --------
164
+ poly2lag
165
+
166
+ Notes
167
+ -----
168
+ The easy way to do conversions between polynomial basis sets
169
+ is to use the convert method of a class instance.
170
+
171
+ Examples
172
+ --------
173
+ >>> from numpy.polynomial.laguerre import lag2poly
174
+ >>> lag2poly([ 23., -63., 58., -18.])
175
+ array([0., 1., 2., 3.])
176
+
177
+ """
178
+ from .polynomial import polyadd, polymulx, polysub
179
+
180
+ [c] = pu.as_series([c])
181
+ n = len(c)
182
+ if n == 1:
183
+ return c
184
+ else:
185
+ c0 = c[-2]
186
+ c1 = c[-1]
187
+ # i is the current degree of c1
188
+ for i in range(n - 1, 1, -1):
189
+ tmp = c0
190
+ c0 = polysub(c[i - 2], (c1 * (i - 1)) / i)
191
+ c1 = polyadd(tmp, polysub((2 * i - 1) * c1, polymulx(c1)) / i)
192
+ return polyadd(c0, polysub(c1, polymulx(c1)))
193
+
194
+
195
+ #
196
+ # These are constant arrays are of integer type so as to be compatible
197
+ # with the widest range of other types, such as Decimal.
198
+ #
199
+
200
+ # Laguerre
201
+ lagdomain = np.array([0., 1.])
202
+
203
+ # Laguerre coefficients representing zero.
204
+ lagzero = np.array([0])
205
+
206
+ # Laguerre coefficients representing one.
207
+ lagone = np.array([1])
208
+
209
+ # Laguerre coefficients representing the identity x.
210
+ lagx = np.array([1, -1])
211
+
212
+
213
+ def lagline(off, scl):
214
+ """
215
+ Laguerre series whose graph is a straight line.
216
+
217
+ Parameters
218
+ ----------
219
+ off, scl : scalars
220
+ The specified line is given by ``off + scl*x``.
221
+
222
+ Returns
223
+ -------
224
+ y : ndarray
225
+ This module's representation of the Laguerre series for
226
+ ``off + scl*x``.
227
+
228
+ See Also
229
+ --------
230
+ numpy.polynomial.polynomial.polyline
231
+ numpy.polynomial.chebyshev.chebline
232
+ numpy.polynomial.legendre.legline
233
+ numpy.polynomial.hermite.hermline
234
+ numpy.polynomial.hermite_e.hermeline
235
+
236
+ Examples
237
+ --------
238
+ >>> from numpy.polynomial.laguerre import lagline, lagval
239
+ >>> lagval(0,lagline(3, 2))
240
+ 3.0
241
+ >>> lagval(1,lagline(3, 2))
242
+ 5.0
243
+
244
+ """
245
+ if scl != 0:
246
+ return np.array([off + scl, -scl])
247
+ else:
248
+ return np.array([off])
249
+
250
+
251
+ def lagfromroots(roots):
252
+ """
253
+ Generate a Laguerre series with given roots.
254
+
255
+ The function returns the coefficients of the polynomial
256
+
257
+ .. math:: p(x) = (x - r_0) * (x - r_1) * ... * (x - r_n),
258
+
259
+ in Laguerre form, where the :math:`r_n` are the roots specified in `roots`.
260
+ If a zero has multiplicity n, then it must appear in `roots` n times.
261
+ For instance, if 2 is a root of multiplicity three and 3 is a root of
262
+ multiplicity 2, then `roots` looks something like [2, 2, 2, 3, 3]. The
263
+ roots can appear in any order.
264
+
265
+ If the returned coefficients are `c`, then
266
+
267
+ .. math:: p(x) = c_0 + c_1 * L_1(x) + ... + c_n * L_n(x)
268
+
269
+ The coefficient of the last term is not generally 1 for monic
270
+ polynomials in Laguerre form.
271
+
272
+ Parameters
273
+ ----------
274
+ roots : array_like
275
+ Sequence containing the roots.
276
+
277
+ Returns
278
+ -------
279
+ out : ndarray
280
+ 1-D array of coefficients. If all roots are real then `out` is a
281
+ real array, if some of the roots are complex, then `out` is complex
282
+ even if all the coefficients in the result are real (see Examples
283
+ below).
284
+
285
+ See Also
286
+ --------
287
+ numpy.polynomial.polynomial.polyfromroots
288
+ numpy.polynomial.legendre.legfromroots
289
+ numpy.polynomial.chebyshev.chebfromroots
290
+ numpy.polynomial.hermite.hermfromroots
291
+ numpy.polynomial.hermite_e.hermefromroots
292
+
293
+ Examples
294
+ --------
295
+ >>> from numpy.polynomial.laguerre import lagfromroots, lagval
296
+ >>> coef = lagfromroots((-1, 0, 1))
297
+ >>> lagval((-1, 0, 1), coef)
298
+ array([0., 0., 0.])
299
+ >>> coef = lagfromroots((-1j, 1j))
300
+ >>> lagval((-1j, 1j), coef)
301
+ array([0.+0.j, 0.+0.j])
302
+
303
+ """
304
+ return pu._fromroots(lagline, lagmul, roots)
305
+
306
+
307
+ def lagadd(c1, c2):
308
+ """
309
+ Add one Laguerre series to another.
310
+
311
+ Returns the sum of two Laguerre series `c1` + `c2`. The arguments
312
+ are sequences of coefficients ordered from lowest order term to
313
+ highest, i.e., [1,2,3] represents the series ``P_0 + 2*P_1 + 3*P_2``.
314
+
315
+ Parameters
316
+ ----------
317
+ c1, c2 : array_like
318
+ 1-D arrays of Laguerre series coefficients ordered from low to
319
+ high.
320
+
321
+ Returns
322
+ -------
323
+ out : ndarray
324
+ Array representing the Laguerre series of their sum.
325
+
326
+ See Also
327
+ --------
328
+ lagsub, lagmulx, lagmul, lagdiv, lagpow
329
+
330
+ Notes
331
+ -----
332
+ Unlike multiplication, division, etc., the sum of two Laguerre series
333
+ is a Laguerre series (without having to "reproject" the result onto
334
+ the basis set) so addition, just like that of "standard" polynomials,
335
+ is simply "component-wise."
336
+
337
+ Examples
338
+ --------
339
+ >>> from numpy.polynomial.laguerre import lagadd
340
+ >>> lagadd([1, 2, 3], [1, 2, 3, 4])
341
+ array([2., 4., 6., 4.])
342
+
343
+ """
344
+ return pu._add(c1, c2)
345
+
346
+
347
+ def lagsub(c1, c2):
348
+ """
349
+ Subtract one Laguerre series from another.
350
+
351
+ Returns the difference of two Laguerre series `c1` - `c2`. The
352
+ sequences of coefficients are from lowest order term to highest, i.e.,
353
+ [1,2,3] represents the series ``P_0 + 2*P_1 + 3*P_2``.
354
+
355
+ Parameters
356
+ ----------
357
+ c1, c2 : array_like
358
+ 1-D arrays of Laguerre series coefficients ordered from low to
359
+ high.
360
+
361
+ Returns
362
+ -------
363
+ out : ndarray
364
+ Of Laguerre series coefficients representing their difference.
365
+
366
+ See Also
367
+ --------
368
+ lagadd, lagmulx, lagmul, lagdiv, lagpow
369
+
370
+ Notes
371
+ -----
372
+ Unlike multiplication, division, etc., the difference of two Laguerre
373
+ series is a Laguerre series (without having to "reproject" the result
374
+ onto the basis set) so subtraction, just like that of "standard"
375
+ polynomials, is simply "component-wise."
376
+
377
+ Examples
378
+ --------
379
+ >>> from numpy.polynomial.laguerre import lagsub
380
+ >>> lagsub([1, 2, 3, 4], [1, 2, 3])
381
+ array([0., 0., 0., 4.])
382
+
383
+ """
384
+ return pu._sub(c1, c2)
385
+
386
+
387
+ def lagmulx(c):
388
+ """Multiply a Laguerre series by x.
389
+
390
+ Multiply the Laguerre series `c` by x, where x is the independent
391
+ variable.
392
+
393
+
394
+ Parameters
395
+ ----------
396
+ c : array_like
397
+ 1-D array of Laguerre series coefficients ordered from low to
398
+ high.
399
+
400
+ Returns
401
+ -------
402
+ out : ndarray
403
+ Array representing the result of the multiplication.
404
+
405
+ See Also
406
+ --------
407
+ lagadd, lagsub, lagmul, lagdiv, lagpow
408
+
409
+ Notes
410
+ -----
411
+ The multiplication uses the recursion relationship for Laguerre
412
+ polynomials in the form
413
+
414
+ .. math::
415
+
416
+ xP_i(x) = (-(i + 1)*P_{i + 1}(x) + (2i + 1)P_{i}(x) - iP_{i - 1}(x))
417
+
418
+ Examples
419
+ --------
420
+ >>> from numpy.polynomial.laguerre import lagmulx
421
+ >>> lagmulx([1, 2, 3])
422
+ array([-1., -1., 11., -9.])
423
+
424
+ """
425
+ # c is a trimmed copy
426
+ [c] = pu.as_series([c])
427
+ # The zero series needs special treatment
428
+ if len(c) == 1 and c[0] == 0:
429
+ return c
430
+
431
+ prd = np.empty(len(c) + 1, dtype=c.dtype)
432
+ prd[0] = c[0]
433
+ prd[1] = -c[0]
434
+ for i in range(1, len(c)):
435
+ prd[i + 1] = -c[i] * (i + 1)
436
+ prd[i] += c[i] * (2 * i + 1)
437
+ prd[i - 1] -= c[i] * i
438
+ return prd
439
+
440
+
441
+ def lagmul(c1, c2):
442
+ """
443
+ Multiply one Laguerre series by another.
444
+
445
+ Returns the product of two Laguerre series `c1` * `c2`. The arguments
446
+ are sequences of coefficients, from lowest order "term" to highest,
447
+ e.g., [1,2,3] represents the series ``P_0 + 2*P_1 + 3*P_2``.
448
+
449
+ Parameters
450
+ ----------
451
+ c1, c2 : array_like
452
+ 1-D arrays of Laguerre series coefficients ordered from low to
453
+ high.
454
+
455
+ Returns
456
+ -------
457
+ out : ndarray
458
+ Of Laguerre series coefficients representing their product.
459
+
460
+ See Also
461
+ --------
462
+ lagadd, lagsub, lagmulx, lagdiv, lagpow
463
+
464
+ Notes
465
+ -----
466
+ In general, the (polynomial) product of two C-series results in terms
467
+ that are not in the Laguerre polynomial basis set. Thus, to express
468
+ the product as a Laguerre series, it is necessary to "reproject" the
469
+ product onto said basis set, which may produce "unintuitive" (but
470
+ correct) results; see Examples section below.
471
+
472
+ Examples
473
+ --------
474
+ >>> from numpy.polynomial.laguerre import lagmul
475
+ >>> lagmul([1, 2, 3], [0, 1, 2])
476
+ array([ 8., -13., 38., -51., 36.])
477
+
478
+ """
479
+ # s1, s2 are trimmed copies
480
+ [c1, c2] = pu.as_series([c1, c2])
481
+
482
+ if len(c1) > len(c2):
483
+ c = c2
484
+ xs = c1
485
+ else:
486
+ c = c1
487
+ xs = c2
488
+
489
+ if len(c) == 1:
490
+ c0 = c[0] * xs
491
+ c1 = 0
492
+ elif len(c) == 2:
493
+ c0 = c[0] * xs
494
+ c1 = c[1] * xs
495
+ else:
496
+ nd = len(c)
497
+ c0 = c[-2] * xs
498
+ c1 = c[-1] * xs
499
+ for i in range(3, len(c) + 1):
500
+ tmp = c0
501
+ nd = nd - 1
502
+ c0 = lagsub(c[-i] * xs, (c1 * (nd - 1)) / nd)
503
+ c1 = lagadd(tmp, lagsub((2 * nd - 1) * c1, lagmulx(c1)) / nd)
504
+ return lagadd(c0, lagsub(c1, lagmulx(c1)))
505
+
506
+
507
+ def lagdiv(c1, c2):
508
+ """
509
+ Divide one Laguerre series by another.
510
+
511
+ Returns the quotient-with-remainder of two Laguerre series
512
+ `c1` / `c2`. The arguments are sequences of coefficients from lowest
513
+ order "term" to highest, e.g., [1,2,3] represents the series
514
+ ``P_0 + 2*P_1 + 3*P_2``.
515
+
516
+ Parameters
517
+ ----------
518
+ c1, c2 : array_like
519
+ 1-D arrays of Laguerre series coefficients ordered from low to
520
+ high.
521
+
522
+ Returns
523
+ -------
524
+ [quo, rem] : ndarrays
525
+ Of Laguerre series coefficients representing the quotient and
526
+ remainder.
527
+
528
+ See Also
529
+ --------
530
+ lagadd, lagsub, lagmulx, lagmul, lagpow
531
+
532
+ Notes
533
+ -----
534
+ In general, the (polynomial) division of one Laguerre series by another
535
+ results in quotient and remainder terms that are not in the Laguerre
536
+ polynomial basis set. Thus, to express these results as a Laguerre
537
+ series, it is necessary to "reproject" the results onto the Laguerre
538
+ basis set, which may produce "unintuitive" (but correct) results; see
539
+ Examples section below.
540
+
541
+ Examples
542
+ --------
543
+ >>> from numpy.polynomial.laguerre import lagdiv
544
+ >>> lagdiv([ 8., -13., 38., -51., 36.], [0, 1, 2])
545
+ (array([1., 2., 3.]), array([0.]))
546
+ >>> lagdiv([ 9., -12., 38., -51., 36.], [0, 1, 2])
547
+ (array([1., 2., 3.]), array([1., 1.]))
548
+
549
+ """
550
+ return pu._div(lagmul, c1, c2)
551
+
552
+
553
+ def lagpow(c, pow, maxpower=16):
554
+ """Raise a Laguerre series to a power.
555
+
556
+ Returns the Laguerre series `c` raised to the power `pow`. The
557
+ argument `c` is a sequence of coefficients ordered from low to high.
558
+ i.e., [1,2,3] is the series ``P_0 + 2*P_1 + 3*P_2.``
559
+
560
+ Parameters
561
+ ----------
562
+ c : array_like
563
+ 1-D array of Laguerre series coefficients ordered from low to
564
+ high.
565
+ pow : integer
566
+ Power to which the series will be raised
567
+ maxpower : integer, optional
568
+ Maximum power allowed. This is mainly to limit growth of the series
569
+ to unmanageable size. Default is 16
570
+
571
+ Returns
572
+ -------
573
+ coef : ndarray
574
+ Laguerre series of power.
575
+
576
+ See Also
577
+ --------
578
+ lagadd, lagsub, lagmulx, lagmul, lagdiv
579
+
580
+ Examples
581
+ --------
582
+ >>> from numpy.polynomial.laguerre import lagpow
583
+ >>> lagpow([1, 2, 3], 2)
584
+ array([ 14., -16., 56., -72., 54.])
585
+
586
+ """
587
+ return pu._pow(lagmul, c, pow, maxpower)
588
+
589
+
590
+ def lagder(c, m=1, scl=1, axis=0):
591
+ """
592
+ Differentiate a Laguerre series.
593
+
594
+ Returns the Laguerre series coefficients `c` differentiated `m` times
595
+ along `axis`. At each iteration the result is multiplied by `scl` (the
596
+ scaling factor is for use in a linear change of variable). The argument
597
+ `c` is an array of coefficients from low to high degree along each
598
+ axis, e.g., [1,2,3] represents the series ``1*L_0 + 2*L_1 + 3*L_2``
599
+ while [[1,2],[1,2]] represents ``1*L_0(x)*L_0(y) + 1*L_1(x)*L_0(y) +
600
+ 2*L_0(x)*L_1(y) + 2*L_1(x)*L_1(y)`` if axis=0 is ``x`` and axis=1 is
601
+ ``y``.
602
+
603
+ Parameters
604
+ ----------
605
+ c : array_like
606
+ Array of Laguerre series coefficients. If `c` is multidimensional
607
+ the different axis correspond to different variables with the
608
+ degree in each axis given by the corresponding index.
609
+ m : int, optional
610
+ Number of derivatives taken, must be non-negative. (Default: 1)
611
+ scl : scalar, optional
612
+ Each differentiation is multiplied by `scl`. The end result is
613
+ multiplication by ``scl**m``. This is for use in a linear change of
614
+ variable. (Default: 1)
615
+ axis : int, optional
616
+ Axis over which the derivative is taken. (Default: 0).
617
+
618
+ Returns
619
+ -------
620
+ der : ndarray
621
+ Laguerre series of the derivative.
622
+
623
+ See Also
624
+ --------
625
+ lagint
626
+
627
+ Notes
628
+ -----
629
+ In general, the result of differentiating a Laguerre series does not
630
+ resemble the same operation on a power series. Thus the result of this
631
+ function may be "unintuitive," albeit correct; see Examples section
632
+ below.
633
+
634
+ Examples
635
+ --------
636
+ >>> from numpy.polynomial.laguerre import lagder
637
+ >>> lagder([ 1., 1., 1., -3.])
638
+ array([1., 2., 3.])
639
+ >>> lagder([ 1., 0., 0., -4., 3.], m=2)
640
+ array([1., 2., 3.])
641
+
642
+ """
643
+ c = np.array(c, ndmin=1, copy=True)
644
+ if c.dtype.char in '?bBhHiIlLqQpP':
645
+ c = c.astype(np.double)
646
+
647
+ cnt = pu._as_int(m, "the order of derivation")
648
+ iaxis = pu._as_int(axis, "the axis")
649
+ if cnt < 0:
650
+ raise ValueError("The order of derivation must be non-negative")
651
+ iaxis = np.lib.array_utils.normalize_axis_index(iaxis, c.ndim)
652
+
653
+ if cnt == 0:
654
+ return c
655
+
656
+ c = np.moveaxis(c, iaxis, 0)
657
+ n = len(c)
658
+ if cnt >= n:
659
+ c = c[:1] * 0
660
+ else:
661
+ for i in range(cnt):
662
+ n = n - 1
663
+ c *= scl
664
+ der = np.empty((n,) + c.shape[1:], dtype=c.dtype)
665
+ for j in range(n, 1, -1):
666
+ der[j - 1] = -c[j]
667
+ c[j - 1] += c[j]
668
+ der[0] = -c[1]
669
+ c = der
670
+ c = np.moveaxis(c, 0, iaxis)
671
+ return c
672
+
673
+
674
+ def lagint(c, m=1, k=[], lbnd=0, scl=1, axis=0):
675
+ """
676
+ Integrate a Laguerre series.
677
+
678
+ Returns the Laguerre series coefficients `c` integrated `m` times from
679
+ `lbnd` along `axis`. At each iteration the resulting series is
680
+ **multiplied** by `scl` and an integration constant, `k`, is added.
681
+ The scaling factor is for use in a linear change of variable. ("Buyer
682
+ beware": note that, depending on what one is doing, one may want `scl`
683
+ to be the reciprocal of what one might expect; for more information,
684
+ see the Notes section below.) The argument `c` is an array of
685
+ coefficients from low to high degree along each axis, e.g., [1,2,3]
686
+ represents the series ``L_0 + 2*L_1 + 3*L_2`` while [[1,2],[1,2]]
687
+ represents ``1*L_0(x)*L_0(y) + 1*L_1(x)*L_0(y) + 2*L_0(x)*L_1(y) +
688
+ 2*L_1(x)*L_1(y)`` if axis=0 is ``x`` and axis=1 is ``y``.
689
+
690
+
691
+ Parameters
692
+ ----------
693
+ c : array_like
694
+ Array of Laguerre series coefficients. If `c` is multidimensional
695
+ the different axis correspond to different variables with the
696
+ degree in each axis given by the corresponding index.
697
+ m : int, optional
698
+ Order of integration, must be positive. (Default: 1)
699
+ k : {[], list, scalar}, optional
700
+ Integration constant(s). The value of the first integral at
701
+ ``lbnd`` is the first value in the list, the value of the second
702
+ integral at ``lbnd`` is the second value, etc. If ``k == []`` (the
703
+ default), all constants are set to zero. If ``m == 1``, a single
704
+ scalar can be given instead of a list.
705
+ lbnd : scalar, optional
706
+ The lower bound of the integral. (Default: 0)
707
+ scl : scalar, optional
708
+ Following each integration the result is *multiplied* by `scl`
709
+ before the integration constant is added. (Default: 1)
710
+ axis : int, optional
711
+ Axis over which the integral is taken. (Default: 0).
712
+
713
+ Returns
714
+ -------
715
+ S : ndarray
716
+ Laguerre series coefficients of the integral.
717
+
718
+ Raises
719
+ ------
720
+ ValueError
721
+ If ``m < 0``, ``len(k) > m``, ``np.ndim(lbnd) != 0``, or
722
+ ``np.ndim(scl) != 0``.
723
+
724
+ See Also
725
+ --------
726
+ lagder
727
+
728
+ Notes
729
+ -----
730
+ Note that the result of each integration is *multiplied* by `scl`.
731
+ Why is this important to note? Say one is making a linear change of
732
+ variable :math:`u = ax + b` in an integral relative to `x`. Then
733
+ :math:`dx = du/a`, so one will need to set `scl` equal to
734
+ :math:`1/a` - perhaps not what one would have first thought.
735
+
736
+ Also note that, in general, the result of integrating a C-series needs
737
+ to be "reprojected" onto the C-series basis set. Thus, typically,
738
+ the result of this function is "unintuitive," albeit correct; see
739
+ Examples section below.
740
+
741
+ Examples
742
+ --------
743
+ >>> from numpy.polynomial.laguerre import lagint
744
+ >>> lagint([1,2,3])
745
+ array([ 1., 1., 1., -3.])
746
+ >>> lagint([1,2,3], m=2)
747
+ array([ 1., 0., 0., -4., 3.])
748
+ >>> lagint([1,2,3], k=1)
749
+ array([ 2., 1., 1., -3.])
750
+ >>> lagint([1,2,3], lbnd=-1)
751
+ array([11.5, 1. , 1. , -3. ])
752
+ >>> lagint([1,2], m=2, k=[1,2], lbnd=-1)
753
+ array([ 11.16666667, -5. , -3. , 2. ]) # may vary
754
+
755
+ """
756
+ c = np.array(c, ndmin=1, copy=True)
757
+ if c.dtype.char in '?bBhHiIlLqQpP':
758
+ c = c.astype(np.double)
759
+ if not np.iterable(k):
760
+ k = [k]
761
+ cnt = pu._as_int(m, "the order of integration")
762
+ iaxis = pu._as_int(axis, "the axis")
763
+ if cnt < 0:
764
+ raise ValueError("The order of integration must be non-negative")
765
+ if len(k) > cnt:
766
+ raise ValueError("Too many integration constants")
767
+ if np.ndim(lbnd) != 0:
768
+ raise ValueError("lbnd must be a scalar.")
769
+ if np.ndim(scl) != 0:
770
+ raise ValueError("scl must be a scalar.")
771
+ iaxis = np.lib.array_utils.normalize_axis_index(iaxis, c.ndim)
772
+
773
+ if cnt == 0:
774
+ return c
775
+
776
+ c = np.moveaxis(c, iaxis, 0)
777
+ k = list(k) + [0] * (cnt - len(k))
778
+ for i in range(cnt):
779
+ n = len(c)
780
+ c *= scl
781
+ if n == 1 and np.all(c[0] == 0):
782
+ c[0] += k[i]
783
+ else:
784
+ tmp = np.empty((n + 1,) + c.shape[1:], dtype=c.dtype)
785
+ tmp[0] = c[0]
786
+ tmp[1] = -c[0]
787
+ for j in range(1, n):
788
+ tmp[j] += c[j]
789
+ tmp[j + 1] = -c[j]
790
+ tmp[0] += k[i] - lagval(lbnd, tmp)
791
+ c = tmp
792
+ c = np.moveaxis(c, 0, iaxis)
793
+ return c
794
+
795
+
796
+ def lagval(x, c, tensor=True):
797
+ """
798
+ Evaluate a Laguerre series at points x.
799
+
800
+ If `c` is of length ``n + 1``, this function returns the value:
801
+
802
+ .. math:: p(x) = c_0 * L_0(x) + c_1 * L_1(x) + ... + c_n * L_n(x)
803
+
804
+ The parameter `x` is converted to an array only if it is a tuple or a
805
+ list, otherwise it is treated as a scalar. In either case, either `x`
806
+ or its elements must support multiplication and addition both with
807
+ themselves and with the elements of `c`.
808
+
809
+ If `c` is a 1-D array, then ``p(x)`` will have the same shape as `x`. If
810
+ `c` is multidimensional, then the shape of the result depends on the
811
+ value of `tensor`. If `tensor` is true the shape will be c.shape[1:] +
812
+ x.shape. If `tensor` is false the shape will be c.shape[1:]. Note that
813
+ scalars have shape (,).
814
+
815
+ Trailing zeros in the coefficients will be used in the evaluation, so
816
+ they should be avoided if efficiency is a concern.
817
+
818
+ Parameters
819
+ ----------
820
+ x : array_like, compatible object
821
+ If `x` is a list or tuple, it is converted to an ndarray, otherwise
822
+ it is left unchanged and treated as a scalar. In either case, `x`
823
+ or its elements must support addition and multiplication with
824
+ themselves and with the elements of `c`.
825
+ c : array_like
826
+ Array of coefficients ordered so that the coefficients for terms of
827
+ degree n are contained in c[n]. If `c` is multidimensional the
828
+ remaining indices enumerate multiple polynomials. In the two
829
+ dimensional case the coefficients may be thought of as stored in
830
+ the columns of `c`.
831
+ tensor : boolean, optional
832
+ If True, the shape of the coefficient array is extended with ones
833
+ on the right, one for each dimension of `x`. Scalars have dimension 0
834
+ for this action. The result is that every column of coefficients in
835
+ `c` is evaluated for every element of `x`. If False, `x` is broadcast
836
+ over the columns of `c` for the evaluation. This keyword is useful
837
+ when `c` is multidimensional. The default value is True.
838
+
839
+ Returns
840
+ -------
841
+ values : ndarray, algebra_like
842
+ The shape of the return value is described above.
843
+
844
+ See Also
845
+ --------
846
+ lagval2d, laggrid2d, lagval3d, laggrid3d
847
+
848
+ Notes
849
+ -----
850
+ The evaluation uses Clenshaw recursion, aka synthetic division.
851
+
852
+ Examples
853
+ --------
854
+ >>> from numpy.polynomial.laguerre import lagval
855
+ >>> coef = [1, 2, 3]
856
+ >>> lagval(1, coef)
857
+ -0.5
858
+ >>> lagval([[1, 2],[3, 4]], coef)
859
+ array([[-0.5, -4. ],
860
+ [-4.5, -2. ]])
861
+
862
+ """
863
+ c = np.array(c, ndmin=1, copy=None)
864
+ if c.dtype.char in '?bBhHiIlLqQpP':
865
+ c = c.astype(np.double)
866
+ if isinstance(x, (tuple, list)):
867
+ x = np.asarray(x)
868
+ if isinstance(x, np.ndarray) and tensor:
869
+ c = c.reshape(c.shape + (1,) * x.ndim)
870
+
871
+ if len(c) == 1:
872
+ c0 = c[0]
873
+ c1 = 0
874
+ elif len(c) == 2:
875
+ c0 = c[0]
876
+ c1 = c[1]
877
+ else:
878
+ nd = len(c)
879
+ c0 = c[-2]
880
+ c1 = c[-1]
881
+ for i in range(3, len(c) + 1):
882
+ tmp = c0
883
+ nd = nd - 1
884
+ c0 = c[-i] - (c1 * (nd - 1)) / nd
885
+ c1 = tmp + (c1 * ((2 * nd - 1) - x)) / nd
886
+ return c0 + c1 * (1 - x)
887
+
888
+
889
+ def lagval2d(x, y, c):
890
+ """
891
+ Evaluate a 2-D Laguerre series at points (x, y).
892
+
893
+ This function returns the values:
894
+
895
+ .. math:: p(x,y) = \\sum_{i,j} c_{i,j} * L_i(x) * L_j(y)
896
+
897
+ The parameters `x` and `y` are converted to arrays only if they are
898
+ tuples or a lists, otherwise they are treated as a scalars and they
899
+ must have the same shape after conversion. In either case, either `x`
900
+ and `y` or their elements must support multiplication and addition both
901
+ with themselves and with the elements of `c`.
902
+
903
+ If `c` is a 1-D array a one is implicitly appended to its shape to make
904
+ it 2-D. The shape of the result will be c.shape[2:] + x.shape.
905
+
906
+ Parameters
907
+ ----------
908
+ x, y : array_like, compatible objects
909
+ The two dimensional series is evaluated at the points ``(x, y)``,
910
+ where `x` and `y` must have the same shape. If `x` or `y` is a list
911
+ or tuple, it is first converted to an ndarray, otherwise it is left
912
+ unchanged and if it isn't an ndarray it is treated as a scalar.
913
+ c : array_like
914
+ Array of coefficients ordered so that the coefficient of the term
915
+ of multi-degree i,j is contained in ``c[i,j]``. If `c` has
916
+ dimension greater than two the remaining indices enumerate multiple
917
+ sets of coefficients.
918
+
919
+ Returns
920
+ -------
921
+ values : ndarray, compatible object
922
+ The values of the two dimensional polynomial at points formed with
923
+ pairs of corresponding values from `x` and `y`.
924
+
925
+ See Also
926
+ --------
927
+ lagval, laggrid2d, lagval3d, laggrid3d
928
+
929
+ Examples
930
+ --------
931
+ >>> from numpy.polynomial.laguerre import lagval2d
932
+ >>> c = [[1, 2],[3, 4]]
933
+ >>> lagval2d(1, 1, c)
934
+ 1.0
935
+ """
936
+ return pu._valnd(lagval, c, x, y)
937
+
938
+
939
+ def laggrid2d(x, y, c):
940
+ """
941
+ Evaluate a 2-D Laguerre series on the Cartesian product of x and y.
942
+
943
+ This function returns the values:
944
+
945
+ .. math:: p(a,b) = \\sum_{i,j} c_{i,j} * L_i(a) * L_j(b)
946
+
947
+ where the points ``(a, b)`` consist of all pairs formed by taking
948
+ `a` from `x` and `b` from `y`. The resulting points form a grid with
949
+ `x` in the first dimension and `y` in the second.
950
+
951
+ The parameters `x` and `y` are converted to arrays only if they are
952
+ tuples or a lists, otherwise they are treated as a scalars. In either
953
+ case, either `x` and `y` or their elements must support multiplication
954
+ and addition both with themselves and with the elements of `c`.
955
+
956
+ If `c` has fewer than two dimensions, ones are implicitly appended to
957
+ its shape to make it 2-D. The shape of the result will be c.shape[2:] +
958
+ x.shape + y.shape.
959
+
960
+ Parameters
961
+ ----------
962
+ x, y : array_like, compatible objects
963
+ The two dimensional series is evaluated at the points in the
964
+ Cartesian product of `x` and `y`. If `x` or `y` is a list or
965
+ tuple, it is first converted to an ndarray, otherwise it is left
966
+ unchanged and, if it isn't an ndarray, it is treated as a scalar.
967
+ c : array_like
968
+ Array of coefficients ordered so that the coefficient of the term of
969
+ multi-degree i,j is contained in ``c[i,j]``. If `c` has dimension
970
+ greater than two the remaining indices enumerate multiple sets of
971
+ coefficients.
972
+
973
+ Returns
974
+ -------
975
+ values : ndarray, compatible object
976
+ The values of the two dimensional Chebyshev series at points in the
977
+ Cartesian product of `x` and `y`.
978
+
979
+ See Also
980
+ --------
981
+ lagval, lagval2d, lagval3d, laggrid3d
982
+
983
+ Examples
984
+ --------
985
+ >>> from numpy.polynomial.laguerre import laggrid2d
986
+ >>> c = [[1, 2], [3, 4]]
987
+ >>> laggrid2d([0, 1], [0, 1], c)
988
+ array([[10., 4.],
989
+ [ 3., 1.]])
990
+
991
+ """
992
+ return pu._gridnd(lagval, c, x, y)
993
+
994
+
995
+ def lagval3d(x, y, z, c):
996
+ """
997
+ Evaluate a 3-D Laguerre series at points (x, y, z).
998
+
999
+ This function returns the values:
1000
+
1001
+ .. math:: p(x,y,z) = \\sum_{i,j,k} c_{i,j,k} * L_i(x) * L_j(y) * L_k(z)
1002
+
1003
+ The parameters `x`, `y`, and `z` are converted to arrays only if
1004
+ they are tuples or a lists, otherwise they are treated as a scalars and
1005
+ they must have the same shape after conversion. In either case, either
1006
+ `x`, `y`, and `z` or their elements must support multiplication and
1007
+ addition both with themselves and with the elements of `c`.
1008
+
1009
+ If `c` has fewer than 3 dimensions, ones are implicitly appended to its
1010
+ shape to make it 3-D. The shape of the result will be c.shape[3:] +
1011
+ x.shape.
1012
+
1013
+ Parameters
1014
+ ----------
1015
+ x, y, z : array_like, compatible object
1016
+ The three dimensional series is evaluated at the points
1017
+ ``(x, y, z)``, where `x`, `y`, and `z` must have the same shape. If
1018
+ any of `x`, `y`, or `z` is a list or tuple, it is first converted
1019
+ to an ndarray, otherwise it is left unchanged and if it isn't an
1020
+ ndarray it is treated as a scalar.
1021
+ c : array_like
1022
+ Array of coefficients ordered so that the coefficient of the term of
1023
+ multi-degree i,j,k is contained in ``c[i,j,k]``. If `c` has dimension
1024
+ greater than 3 the remaining indices enumerate multiple sets of
1025
+ coefficients.
1026
+
1027
+ Returns
1028
+ -------
1029
+ values : ndarray, compatible object
1030
+ The values of the multidimensional polynomial on points formed with
1031
+ triples of corresponding values from `x`, `y`, and `z`.
1032
+
1033
+ See Also
1034
+ --------
1035
+ lagval, lagval2d, laggrid2d, laggrid3d
1036
+
1037
+ Examples
1038
+ --------
1039
+ >>> from numpy.polynomial.laguerre import lagval3d
1040
+ >>> c = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
1041
+ >>> lagval3d(1, 1, 2, c)
1042
+ -1.0
1043
+
1044
+ """
1045
+ return pu._valnd(lagval, c, x, y, z)
1046
+
1047
+
1048
+ def laggrid3d(x, y, z, c):
1049
+ """
1050
+ Evaluate a 3-D Laguerre series on the Cartesian product of x, y, and z.
1051
+
1052
+ This function returns the values:
1053
+
1054
+ .. math:: p(a,b,c) = \\sum_{i,j,k} c_{i,j,k} * L_i(a) * L_j(b) * L_k(c)
1055
+
1056
+ where the points ``(a, b, c)`` consist of all triples formed by taking
1057
+ `a` from `x`, `b` from `y`, and `c` from `z`. The resulting points form
1058
+ a grid with `x` in the first dimension, `y` in the second, and `z` in
1059
+ the third.
1060
+
1061
+ The parameters `x`, `y`, and `z` are converted to arrays only if they
1062
+ are tuples or a lists, otherwise they are treated as a scalars. In
1063
+ either case, either `x`, `y`, and `z` or their elements must support
1064
+ multiplication and addition both with themselves and with the elements
1065
+ of `c`.
1066
+
1067
+ If `c` has fewer than three dimensions, ones are implicitly appended to
1068
+ its shape to make it 3-D. The shape of the result will be c.shape[3:] +
1069
+ x.shape + y.shape + z.shape.
1070
+
1071
+ Parameters
1072
+ ----------
1073
+ x, y, z : array_like, compatible objects
1074
+ The three dimensional series is evaluated at the points in the
1075
+ Cartesian product of `x`, `y`, and `z`. If `x`, `y`, or `z` is a
1076
+ list or tuple, it is first converted to an ndarray, otherwise it is
1077
+ left unchanged and, if it isn't an ndarray, it is treated as a
1078
+ scalar.
1079
+ c : array_like
1080
+ Array of coefficients ordered so that the coefficients for terms of
1081
+ degree i,j are contained in ``c[i,j]``. If `c` has dimension
1082
+ greater than two the remaining indices enumerate multiple sets of
1083
+ coefficients.
1084
+
1085
+ Returns
1086
+ -------
1087
+ values : ndarray, compatible object
1088
+ The values of the two dimensional polynomial at points in the Cartesian
1089
+ product of `x` and `y`.
1090
+
1091
+ See Also
1092
+ --------
1093
+ lagval, lagval2d, laggrid2d, lagval3d
1094
+
1095
+ Examples
1096
+ --------
1097
+ >>> from numpy.polynomial.laguerre import laggrid3d
1098
+ >>> c = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
1099
+ >>> laggrid3d([0, 1], [0, 1], [2, 4], c)
1100
+ array([[[ -4., -44.],
1101
+ [ -2., -18.]],
1102
+ [[ -2., -14.],
1103
+ [ -1., -5.]]])
1104
+
1105
+ """
1106
+ return pu._gridnd(lagval, c, x, y, z)
1107
+
1108
+
1109
+ def lagvander(x, deg):
1110
+ """Pseudo-Vandermonde matrix of given degree.
1111
+
1112
+ Returns the pseudo-Vandermonde matrix of degree `deg` and sample points
1113
+ `x`. The pseudo-Vandermonde matrix is defined by
1114
+
1115
+ .. math:: V[..., i] = L_i(x)
1116
+
1117
+ where ``0 <= i <= deg``. The leading indices of `V` index the elements of
1118
+ `x` and the last index is the degree of the Laguerre polynomial.
1119
+
1120
+ If `c` is a 1-D array of coefficients of length ``n + 1`` and `V` is the
1121
+ array ``V = lagvander(x, n)``, then ``np.dot(V, c)`` and
1122
+ ``lagval(x, c)`` are the same up to roundoff. This equivalence is
1123
+ useful both for least squares fitting and for the evaluation of a large
1124
+ number of Laguerre series of the same degree and sample points.
1125
+
1126
+ Parameters
1127
+ ----------
1128
+ x : array_like
1129
+ Array of points. The dtype is converted to float64 or complex128
1130
+ depending on whether any of the elements are complex. If `x` is
1131
+ scalar it is converted to a 1-D array.
1132
+ deg : int
1133
+ Degree of the resulting matrix.
1134
+
1135
+ Returns
1136
+ -------
1137
+ vander : ndarray
1138
+ The pseudo-Vandermonde matrix. The shape of the returned matrix is
1139
+ ``x.shape + (deg + 1,)``, where The last index is the degree of the
1140
+ corresponding Laguerre polynomial. The dtype will be the same as
1141
+ the converted `x`.
1142
+
1143
+ Examples
1144
+ --------
1145
+ >>> import numpy as np
1146
+ >>> from numpy.polynomial.laguerre import lagvander
1147
+ >>> x = np.array([0, 1, 2])
1148
+ >>> lagvander(x, 3)
1149
+ array([[ 1. , 1. , 1. , 1. ],
1150
+ [ 1. , 0. , -0.5 , -0.66666667],
1151
+ [ 1. , -1. , -1. , -0.33333333]])
1152
+
1153
+ """
1154
+ ideg = pu._as_int(deg, "deg")
1155
+ if ideg < 0:
1156
+ raise ValueError("deg must be non-negative")
1157
+
1158
+ x = np.array(x, copy=None, ndmin=1) + 0.0
1159
+ dims = (ideg + 1,) + x.shape
1160
+ dtyp = x.dtype
1161
+ v = np.empty(dims, dtype=dtyp)
1162
+ v[0] = x * 0 + 1
1163
+ if ideg > 0:
1164
+ v[1] = 1 - x
1165
+ for i in range(2, ideg + 1):
1166
+ v[i] = (v[i - 1] * (2 * i - 1 - x) - v[i - 2] * (i - 1)) / i
1167
+ return np.moveaxis(v, 0, -1)
1168
+
1169
+
1170
+ def lagvander2d(x, y, deg):
1171
+ """Pseudo-Vandermonde matrix of given degrees.
1172
+
1173
+ Returns the pseudo-Vandermonde matrix of degrees `deg` and sample
1174
+ points ``(x, y)``. The pseudo-Vandermonde matrix is defined by
1175
+
1176
+ .. math:: V[..., (deg[1] + 1)*i + j] = L_i(x) * L_j(y),
1177
+
1178
+ where ``0 <= i <= deg[0]`` and ``0 <= j <= deg[1]``. The leading indices of
1179
+ `V` index the points ``(x, y)`` and the last index encodes the degrees of
1180
+ the Laguerre polynomials.
1181
+
1182
+ If ``V = lagvander2d(x, y, [xdeg, ydeg])``, then the columns of `V`
1183
+ correspond to the elements of a 2-D coefficient array `c` of shape
1184
+ (xdeg + 1, ydeg + 1) in the order
1185
+
1186
+ .. math:: c_{00}, c_{01}, c_{02}, ... , c_{10}, c_{11}, c_{12}, ...
1187
+
1188
+ and ``np.dot(V, c.flat)`` and ``lagval2d(x, y, c)`` will be the same
1189
+ up to roundoff. This equivalence is useful both for least squares
1190
+ fitting and for the evaluation of a large number of 2-D Laguerre
1191
+ series of the same degrees and sample points.
1192
+
1193
+ Parameters
1194
+ ----------
1195
+ x, y : array_like
1196
+ Arrays of point coordinates, all of the same shape. The dtypes
1197
+ will be converted to either float64 or complex128 depending on
1198
+ whether any of the elements are complex. Scalars are converted to
1199
+ 1-D arrays.
1200
+ deg : list of ints
1201
+ List of maximum degrees of the form [x_deg, y_deg].
1202
+
1203
+ Returns
1204
+ -------
1205
+ vander2d : ndarray
1206
+ The shape of the returned matrix is ``x.shape + (order,)``, where
1207
+ :math:`order = (deg[0]+1)*(deg[1]+1)`. The dtype will be the same
1208
+ as the converted `x` and `y`.
1209
+
1210
+ See Also
1211
+ --------
1212
+ lagvander, lagvander3d, lagval2d, lagval3d
1213
+
1214
+ Examples
1215
+ --------
1216
+ >>> import numpy as np
1217
+ >>> from numpy.polynomial.laguerre import lagvander2d
1218
+ >>> x = np.array([0])
1219
+ >>> y = np.array([2])
1220
+ >>> lagvander2d(x, y, [2, 1])
1221
+ array([[ 1., -1., 1., -1., 1., -1.]])
1222
+
1223
+ """
1224
+ return pu._vander_nd_flat((lagvander, lagvander), (x, y), deg)
1225
+
1226
+
1227
+ def lagvander3d(x, y, z, deg):
1228
+ """Pseudo-Vandermonde matrix of given degrees.
1229
+
1230
+ Returns the pseudo-Vandermonde matrix of degrees `deg` and sample
1231
+ points ``(x, y, z)``. If `l`, `m`, `n` are the given degrees in `x`, `y`, `z`,
1232
+ then The pseudo-Vandermonde matrix is defined by
1233
+
1234
+ .. math:: V[..., (m+1)(n+1)i + (n+1)j + k] = L_i(x)*L_j(y)*L_k(z),
1235
+
1236
+ where ``0 <= i <= l``, ``0 <= j <= m``, and ``0 <= j <= n``. The leading
1237
+ indices of `V` index the points ``(x, y, z)`` and the last index encodes
1238
+ the degrees of the Laguerre polynomials.
1239
+
1240
+ If ``V = lagvander3d(x, y, z, [xdeg, ydeg, zdeg])``, then the columns
1241
+ of `V` correspond to the elements of a 3-D coefficient array `c` of
1242
+ shape (xdeg + 1, ydeg + 1, zdeg + 1) in the order
1243
+
1244
+ .. math:: c_{000}, c_{001}, c_{002},... , c_{010}, c_{011}, c_{012},...
1245
+
1246
+ and ``np.dot(V, c.flat)`` and ``lagval3d(x, y, z, c)`` will be the
1247
+ same up to roundoff. This equivalence is useful both for least squares
1248
+ fitting and for the evaluation of a large number of 3-D Laguerre
1249
+ series of the same degrees and sample points.
1250
+
1251
+ Parameters
1252
+ ----------
1253
+ x, y, z : array_like
1254
+ Arrays of point coordinates, all of the same shape. The dtypes will
1255
+ be converted to either float64 or complex128 depending on whether
1256
+ any of the elements are complex. Scalars are converted to 1-D
1257
+ arrays.
1258
+ deg : list of ints
1259
+ List of maximum degrees of the form [x_deg, y_deg, z_deg].
1260
+
1261
+ Returns
1262
+ -------
1263
+ vander3d : ndarray
1264
+ The shape of the returned matrix is ``x.shape + (order,)``, where
1265
+ :math:`order = (deg[0]+1)*(deg[1]+1)*(deg[2]+1)`. The dtype will
1266
+ be the same as the converted `x`, `y`, and `z`.
1267
+
1268
+ See Also
1269
+ --------
1270
+ lagvander, lagvander3d, lagval2d, lagval3d
1271
+
1272
+ Examples
1273
+ --------
1274
+ >>> import numpy as np
1275
+ >>> from numpy.polynomial.laguerre import lagvander3d
1276
+ >>> x = np.array([0])
1277
+ >>> y = np.array([2])
1278
+ >>> z = np.array([0])
1279
+ >>> lagvander3d(x, y, z, [2, 1, 3])
1280
+ array([[ 1., 1., 1., 1., -1., -1., -1., -1., 1., 1., 1., 1., -1.,
1281
+ -1., -1., -1., 1., 1., 1., 1., -1., -1., -1., -1.]])
1282
+
1283
+ """
1284
+ return pu._vander_nd_flat((lagvander, lagvander, lagvander), (x, y, z), deg)
1285
+
1286
+
1287
+ def lagfit(x, y, deg, rcond=None, full=False, w=None):
1288
+ """
1289
+ Least squares fit of Laguerre series to data.
1290
+
1291
+ Return the coefficients of a Laguerre series of degree `deg` that is the
1292
+ least squares fit to the data values `y` given at points `x`. If `y` is
1293
+ 1-D the returned coefficients will also be 1-D. If `y` is 2-D multiple
1294
+ fits are done, one for each column of `y`, and the resulting
1295
+ coefficients are stored in the corresponding columns of a 2-D return.
1296
+ The fitted polynomial(s) are in the form
1297
+
1298
+ .. math:: p(x) = c_0 + c_1 * L_1(x) + ... + c_n * L_n(x),
1299
+
1300
+ where ``n`` is `deg`.
1301
+
1302
+ Parameters
1303
+ ----------
1304
+ x : array_like, shape (M,)
1305
+ x-coordinates of the M sample points ``(x[i], y[i])``.
1306
+ y : array_like, shape (M,) or (M, K)
1307
+ y-coordinates of the sample points. Several data sets of sample
1308
+ points sharing the same x-coordinates can be fitted at once by
1309
+ passing in a 2D-array that contains one dataset per column.
1310
+ deg : int or 1-D array_like
1311
+ Degree(s) of the fitting polynomials. If `deg` is a single integer
1312
+ all terms up to and including the `deg`'th term are included in the
1313
+ fit. For NumPy versions >= 1.11.0 a list of integers specifying the
1314
+ degrees of the terms to include may be used instead.
1315
+ rcond : float, optional
1316
+ Relative condition number of the fit. Singular values smaller than
1317
+ this relative to the largest singular value will be ignored. The
1318
+ default value is len(x)*eps, where eps is the relative precision of
1319
+ the float type, about 2e-16 in most cases.
1320
+ full : bool, optional
1321
+ Switch determining nature of return value. When it is False (the
1322
+ default) just the coefficients are returned, when True diagnostic
1323
+ information from the singular value decomposition is also returned.
1324
+ w : array_like, shape (`M`,), optional
1325
+ Weights. If not None, the weight ``w[i]`` applies to the unsquared
1326
+ residual ``y[i] - y_hat[i]`` at ``x[i]``. Ideally the weights are
1327
+ chosen so that the errors of the products ``w[i]*y[i]`` all have the
1328
+ same variance. When using inverse-variance weighting, use
1329
+ ``w[i] = 1/sigma(y[i])``. The default value is None.
1330
+
1331
+ Returns
1332
+ -------
1333
+ coef : ndarray, shape (M,) or (M, K)
1334
+ Laguerre coefficients ordered from low to high. If `y` was 2-D,
1335
+ the coefficients for the data in column *k* of `y` are in column
1336
+ *k*.
1337
+
1338
+ [residuals, rank, singular_values, rcond] : list
1339
+ These values are only returned if ``full == True``
1340
+
1341
+ - residuals -- sum of squared residuals of the least squares fit
1342
+ - rank -- the numerical rank of the scaled Vandermonde matrix
1343
+ - singular_values -- singular values of the scaled Vandermonde matrix
1344
+ - rcond -- value of `rcond`.
1345
+
1346
+ For more details, see `numpy.linalg.lstsq`.
1347
+
1348
+ Warns
1349
+ -----
1350
+ RankWarning
1351
+ The rank of the coefficient matrix in the least-squares fit is
1352
+ deficient. The warning is only raised if ``full == False``. The
1353
+ warnings can be turned off by
1354
+
1355
+ >>> import warnings
1356
+ >>> warnings.simplefilter('ignore', np.exceptions.RankWarning)
1357
+
1358
+ See Also
1359
+ --------
1360
+ numpy.polynomial.polynomial.polyfit
1361
+ numpy.polynomial.legendre.legfit
1362
+ numpy.polynomial.chebyshev.chebfit
1363
+ numpy.polynomial.hermite.hermfit
1364
+ numpy.polynomial.hermite_e.hermefit
1365
+ lagval : Evaluates a Laguerre series.
1366
+ lagvander : pseudo Vandermonde matrix of Laguerre series.
1367
+ lagweight : Laguerre weight function.
1368
+ numpy.linalg.lstsq : Computes a least-squares fit from the matrix.
1369
+ scipy.interpolate.UnivariateSpline : Computes spline fits.
1370
+
1371
+ Notes
1372
+ -----
1373
+ The solution is the coefficients of the Laguerre series ``p`` that
1374
+ minimizes the sum of the weighted squared errors
1375
+
1376
+ .. math:: E = \\sum_j w_j^2 * |y_j - p(x_j)|^2,
1377
+
1378
+ where the :math:`w_j` are the weights. This problem is solved by
1379
+ setting up as the (typically) overdetermined matrix equation
1380
+
1381
+ .. math:: V(x) * c = w * y,
1382
+
1383
+ where ``V`` is the weighted pseudo Vandermonde matrix of `x`, ``c`` are the
1384
+ coefficients to be solved for, `w` are the weights, and `y` are the
1385
+ observed values. This equation is then solved using the singular value
1386
+ decomposition of ``V``.
1387
+
1388
+ If some of the singular values of `V` are so small that they are
1389
+ neglected, then a `~exceptions.RankWarning` will be issued. This means that
1390
+ the coefficient values may be poorly determined. Using a lower order fit
1391
+ will usually get rid of the warning. The `rcond` parameter can also be
1392
+ set to a value smaller than its default, but the resulting fit may be
1393
+ spurious and have large contributions from roundoff error.
1394
+
1395
+ Fits using Laguerre series are probably most useful when the data can
1396
+ be approximated by ``sqrt(w(x)) * p(x)``, where ``w(x)`` is the Laguerre
1397
+ weight. In that case the weight ``sqrt(w(x[i]))`` should be used
1398
+ together with data values ``y[i]/sqrt(w(x[i]))``. The weight function is
1399
+ available as `lagweight`.
1400
+
1401
+ References
1402
+ ----------
1403
+ .. [1] Wikipedia, "Curve fitting",
1404
+ https://en.wikipedia.org/wiki/Curve_fitting
1405
+
1406
+ Examples
1407
+ --------
1408
+ >>> import numpy as np
1409
+ >>> from numpy.polynomial.laguerre import lagfit, lagval
1410
+ >>> x = np.linspace(0, 10)
1411
+ >>> rng = np.random.default_rng()
1412
+ >>> err = rng.normal(scale=1./10, size=len(x))
1413
+ >>> y = lagval(x, [1, 2, 3]) + err
1414
+ >>> lagfit(x, y, 2)
1415
+ array([1.00578369, 1.99417356, 2.99827656]) # may vary
1416
+
1417
+ """
1418
+ return pu._fit(lagvander, x, y, deg, rcond, full, w)
1419
+
1420
+
1421
+ def lagcompanion(c):
1422
+ """
1423
+ Return the companion matrix of c.
1424
+
1425
+ The usual companion matrix of the Laguerre polynomials is already
1426
+ symmetric when `c` is a basis Laguerre polynomial, so no scaling is
1427
+ applied.
1428
+
1429
+ Parameters
1430
+ ----------
1431
+ c : array_like
1432
+ 1-D array of Laguerre series coefficients ordered from low to high
1433
+ degree.
1434
+
1435
+ Returns
1436
+ -------
1437
+ mat : ndarray
1438
+ Companion matrix of dimensions (deg, deg).
1439
+
1440
+ Examples
1441
+ --------
1442
+ >>> from numpy.polynomial.laguerre import lagcompanion
1443
+ >>> lagcompanion([1, 2, 3])
1444
+ array([[ 1. , -0.33333333],
1445
+ [-1. , 4.33333333]])
1446
+
1447
+ """
1448
+ # c is a trimmed copy
1449
+ [c] = pu.as_series([c])
1450
+ if len(c) < 2:
1451
+ raise ValueError('Series must have maximum degree of at least 1.')
1452
+ if len(c) == 2:
1453
+ return np.array([[1 + c[0] / c[1]]])
1454
+
1455
+ n = len(c) - 1
1456
+ mat = np.zeros((n, n), dtype=c.dtype)
1457
+ top = mat.reshape(-1)[1::n + 1]
1458
+ mid = mat.reshape(-1)[0::n + 1]
1459
+ bot = mat.reshape(-1)[n::n + 1]
1460
+ top[...] = -np.arange(1, n)
1461
+ mid[...] = 2. * np.arange(n) + 1.
1462
+ bot[...] = top
1463
+ mat[:, -1] += (c[:-1] / c[-1]) * n
1464
+ return mat
1465
+
1466
+
1467
+ def lagroots(c):
1468
+ """
1469
+ Compute the roots of a Laguerre series.
1470
+
1471
+ Return the roots (a.k.a. "zeros") of the polynomial
1472
+
1473
+ .. math:: p(x) = \\sum_i c[i] * L_i(x).
1474
+
1475
+ Parameters
1476
+ ----------
1477
+ c : 1-D array_like
1478
+ 1-D array of coefficients.
1479
+
1480
+ Returns
1481
+ -------
1482
+ out : ndarray
1483
+ Array of the roots of the series. If all the roots are real,
1484
+ then `out` is also real, otherwise it is complex.
1485
+
1486
+ See Also
1487
+ --------
1488
+ numpy.polynomial.polynomial.polyroots
1489
+ numpy.polynomial.legendre.legroots
1490
+ numpy.polynomial.chebyshev.chebroots
1491
+ numpy.polynomial.hermite.hermroots
1492
+ numpy.polynomial.hermite_e.hermeroots
1493
+
1494
+ Notes
1495
+ -----
1496
+ The root estimates are obtained as the eigenvalues of the companion
1497
+ matrix, Roots far from the origin of the complex plane may have large
1498
+ errors due to the numerical instability of the series for such
1499
+ values. Roots with multiplicity greater than 1 will also show larger
1500
+ errors as the value of the series near such points is relatively
1501
+ insensitive to errors in the roots. Isolated roots near the origin can
1502
+ be improved by a few iterations of Newton's method.
1503
+
1504
+ The Laguerre series basis polynomials aren't powers of `x` so the
1505
+ results of this function may seem unintuitive.
1506
+
1507
+ Examples
1508
+ --------
1509
+ >>> from numpy.polynomial.laguerre import lagroots, lagfromroots
1510
+ >>> coef = lagfromroots([0, 1, 2])
1511
+ >>> coef
1512
+ array([ 2., -8., 12., -6.])
1513
+ >>> lagroots(coef)
1514
+ array([-4.4408921e-16, 1.0000000e+00, 2.0000000e+00])
1515
+
1516
+ """
1517
+ # c is a trimmed copy
1518
+ [c] = pu.as_series([c])
1519
+ if len(c) <= 1:
1520
+ return np.array([], dtype=c.dtype)
1521
+ if len(c) == 2:
1522
+ return np.array([1 + c[0] / c[1]])
1523
+
1524
+ # rotated companion matrix reduces error
1525
+ m = lagcompanion(c)[::-1, ::-1]
1526
+ r = np.linalg.eigvals(m)
1527
+ r.sort()
1528
+ return r
1529
+
1530
+
1531
+ def laggauss(deg):
1532
+ """
1533
+ Gauss-Laguerre quadrature.
1534
+
1535
+ Computes the sample points and weights for Gauss-Laguerre quadrature.
1536
+ These sample points and weights will correctly integrate polynomials of
1537
+ degree :math:`2*deg - 1` or less over the interval :math:`[0, \\inf]`
1538
+ with the weight function :math:`f(x) = \\exp(-x)`.
1539
+
1540
+ Parameters
1541
+ ----------
1542
+ deg : int
1543
+ Number of sample points and weights. It must be >= 1.
1544
+
1545
+ Returns
1546
+ -------
1547
+ x : ndarray
1548
+ 1-D ndarray containing the sample points.
1549
+ y : ndarray
1550
+ 1-D ndarray containing the weights.
1551
+
1552
+ Notes
1553
+ -----
1554
+ The results have only been tested up to degree 100 higher degrees may
1555
+ be problematic. The weights are determined by using the fact that
1556
+
1557
+ .. math:: w_k = c / (L'_n(x_k) * L_{n-1}(x_k))
1558
+
1559
+ where :math:`c` is a constant independent of :math:`k` and :math:`x_k`
1560
+ is the k'th root of :math:`L_n`, and then scaling the results to get
1561
+ the right value when integrating 1.
1562
+
1563
+ Examples
1564
+ --------
1565
+ >>> from numpy.polynomial.laguerre import laggauss
1566
+ >>> laggauss(2)
1567
+ (array([0.58578644, 3.41421356]), array([0.85355339, 0.14644661]))
1568
+
1569
+ """
1570
+ ideg = pu._as_int(deg, "deg")
1571
+ if ideg <= 0:
1572
+ raise ValueError("deg must be a positive integer")
1573
+
1574
+ # first approximation of roots. We use the fact that the companion
1575
+ # matrix is symmetric in this case in order to obtain better zeros.
1576
+ c = np.array([0] * deg + [1])
1577
+ m = lagcompanion(c)
1578
+ x = np.linalg.eigvalsh(m)
1579
+
1580
+ # improve roots by one application of Newton
1581
+ dy = lagval(x, c)
1582
+ df = lagval(x, lagder(c))
1583
+ x -= dy / df
1584
+
1585
+ # compute the weights. We scale the factor to avoid possible numerical
1586
+ # overflow.
1587
+ fm = lagval(x, c[1:])
1588
+ fm /= np.abs(fm).max()
1589
+ df /= np.abs(df).max()
1590
+ w = 1 / (fm * df)
1591
+
1592
+ # scale w to get the right value, 1 in this case
1593
+ w /= w.sum()
1594
+
1595
+ return x, w
1596
+
1597
+
1598
+ def lagweight(x):
1599
+ """Weight function of the Laguerre polynomials.
1600
+
1601
+ The weight function is :math:`exp(-x)` and the interval of integration
1602
+ is :math:`[0, \\inf]`. The Laguerre polynomials are orthogonal, but not
1603
+ normalized, with respect to this weight function.
1604
+
1605
+ Parameters
1606
+ ----------
1607
+ x : array_like
1608
+ Values at which the weight function will be computed.
1609
+
1610
+ Returns
1611
+ -------
1612
+ w : ndarray
1613
+ The weight function at `x`.
1614
+
1615
+ Examples
1616
+ --------
1617
+ >>> from numpy.polynomial.laguerre import lagweight
1618
+ >>> x = np.array([0, 1, 2])
1619
+ >>> lagweight(x)
1620
+ array([1. , 0.36787944, 0.13533528])
1621
+
1622
+ """
1623
+ w = np.exp(-x)
1624
+ return w
1625
+
1626
+ #
1627
+ # Laguerre series class
1628
+ #
1629
+
1630
+ class Laguerre(ABCPolyBase):
1631
+ """A Laguerre series class.
1632
+
1633
+ The Laguerre class provides the standard Python numerical methods
1634
+ '+', '-', '*', '//', '%', 'divmod', '**', and '()' as well as the
1635
+ attributes and methods listed below.
1636
+
1637
+ Parameters
1638
+ ----------
1639
+ coef : array_like
1640
+ Laguerre coefficients in order of increasing degree, i.e,
1641
+ ``(1, 2, 3)`` gives ``1*L_0(x) + 2*L_1(X) + 3*L_2(x)``.
1642
+ domain : (2,) array_like, optional
1643
+ Domain to use. The interval ``[domain[0], domain[1]]`` is mapped
1644
+ to the interval ``[window[0], window[1]]`` by shifting and scaling.
1645
+ The default value is [0., 1.].
1646
+ window : (2,) array_like, optional
1647
+ Window, see `domain` for its use. The default value is [0., 1.].
1648
+ symbol : str, optional
1649
+ Symbol used to represent the independent variable in string
1650
+ representations of the polynomial expression, e.g. for printing.
1651
+ The symbol must be a valid Python identifier. Default value is 'x'.
1652
+
1653
+ .. versionadded:: 1.24
1654
+
1655
+ """
1656
+ # Virtual Functions
1657
+ _add = staticmethod(lagadd)
1658
+ _sub = staticmethod(lagsub)
1659
+ _mul = staticmethod(lagmul)
1660
+ _div = staticmethod(lagdiv)
1661
+ _pow = staticmethod(lagpow)
1662
+ _val = staticmethod(lagval)
1663
+ _int = staticmethod(lagint)
1664
+ _der = staticmethod(lagder)
1665
+ _fit = staticmethod(lagfit)
1666
+ _line = staticmethod(lagline)
1667
+ _roots = staticmethod(lagroots)
1668
+ _fromroots = staticmethod(lagfromroots)
1669
+
1670
+ # Virtual properties
1671
+ domain = np.array(lagdomain)
1672
+ window = np.array(lagdomain)
1673
+ basis_name = 'L'