numpy 2.3.5__cp313-cp313-macosx_14_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

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