numpy 2.3.5__cp313-cp313-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.

Potentially problematic release.


This version of numpy might be problematic. Click here for more details.

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