numpy 2.4.1__cp314-cp314t-win_arm64.whl

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