maxframe 2.0.0b2__cp37-cp37m-win32.whl → 2.3.0rc1__cp37-cp37m-win32.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 maxframe might be problematic. Click here for more details.

Files changed (443) hide show
  1. maxframe/__init__.py +1 -0
  2. maxframe/_utils.cp37-win32.pyd +0 -0
  3. maxframe/_utils.pyx +14 -1
  4. maxframe/codegen/core.py +9 -8
  5. maxframe/codegen/spe/core.py +1 -1
  6. maxframe/codegen/spe/dataframe/__init__.py +1 -0
  7. maxframe/codegen/spe/dataframe/accessors/base.py +18 -0
  8. maxframe/codegen/spe/dataframe/accessors/dict_.py +25 -130
  9. maxframe/codegen/spe/dataframe/accessors/list_.py +12 -48
  10. maxframe/codegen/spe/dataframe/accessors/struct_.py +28 -0
  11. maxframe/codegen/spe/dataframe/arithmetic.py +7 -2
  12. maxframe/codegen/spe/dataframe/groupby.py +88 -0
  13. maxframe/codegen/spe/dataframe/indexing.py +99 -4
  14. maxframe/codegen/spe/dataframe/merge.py +38 -1
  15. maxframe/codegen/spe/dataframe/misc.py +11 -33
  16. maxframe/codegen/spe/dataframe/reduction.py +32 -9
  17. maxframe/codegen/spe/dataframe/reshape.py +46 -0
  18. maxframe/codegen/spe/dataframe/sort.py +39 -18
  19. maxframe/codegen/spe/dataframe/tests/accessors/test_dict.py +9 -15
  20. maxframe/codegen/spe/dataframe/tests/accessors/test_list.py +4 -7
  21. maxframe/codegen/spe/dataframe/tests/accessors/test_struct.py +75 -0
  22. maxframe/codegen/spe/dataframe/tests/indexing/test_iloc.py +20 -1
  23. maxframe/codegen/spe/dataframe/tests/indexing/test_loc.py +35 -0
  24. maxframe/codegen/spe/dataframe/tests/misc/test_misc.py +0 -32
  25. maxframe/codegen/spe/dataframe/tests/test_groupby.py +81 -18
  26. maxframe/codegen/spe/dataframe/tests/test_merge.py +27 -1
  27. maxframe/codegen/spe/dataframe/tests/test_reduction.py +13 -0
  28. maxframe/codegen/spe/dataframe/tests/test_reshape.py +79 -0
  29. maxframe/codegen/spe/dataframe/tests/test_sort.py +20 -0
  30. maxframe/codegen/spe/dataframe/tseries.py +9 -0
  31. maxframe/codegen/spe/learn/contrib/lightgbm.py +4 -3
  32. maxframe/codegen/spe/learn/contrib/tests/test_xgboost.py +2 -1
  33. maxframe/codegen/spe/learn/metrics/__init__.py +1 -1
  34. maxframe/codegen/spe/learn/metrics/_ranking.py +76 -0
  35. maxframe/codegen/spe/learn/metrics/pairwise.py +51 -0
  36. maxframe/codegen/spe/learn/metrics/tests/test_pairwise.py +36 -0
  37. maxframe/codegen/spe/learn/metrics/tests/test_ranking.py +59 -0
  38. maxframe/codegen/spe/tensor/__init__.py +3 -0
  39. maxframe/codegen/spe/tensor/datasource.py +1 -0
  40. maxframe/codegen/spe/tensor/fft.py +74 -0
  41. maxframe/codegen/spe/tensor/linalg.py +29 -2
  42. maxframe/codegen/spe/tensor/misc.py +79 -25
  43. maxframe/codegen/spe/tensor/spatial.py +45 -0
  44. maxframe/codegen/spe/tensor/statistics.py +44 -0
  45. maxframe/codegen/spe/tensor/tests/test_fft.py +64 -0
  46. maxframe/codegen/spe/tensor/tests/test_linalg.py +15 -1
  47. maxframe/codegen/spe/tensor/tests/test_misc.py +52 -2
  48. maxframe/codegen/spe/tensor/tests/test_spatial.py +33 -0
  49. maxframe/codegen/spe/tensor/tests/test_statistics.py +15 -1
  50. maxframe/codegen/spe/tests/test_spe_codegen.py +6 -12
  51. maxframe/codegen/spe/utils.py +2 -0
  52. maxframe/config/config.py +73 -9
  53. maxframe/config/tests/test_validators.py +13 -1
  54. maxframe/config/validators.py +49 -0
  55. maxframe/conftest.py +54 -17
  56. maxframe/core/accessor.py +2 -2
  57. maxframe/core/base.py +2 -1
  58. maxframe/core/entity/core.py +5 -0
  59. maxframe/core/entity/tileables.py +3 -1
  60. maxframe/core/graph/core.cp37-win32.pyd +0 -0
  61. maxframe/core/graph/entity.py +8 -3
  62. maxframe/core/mode.py +6 -1
  63. maxframe/core/operator/base.py +9 -2
  64. maxframe/core/operator/core.py +10 -2
  65. maxframe/core/operator/utils.py +13 -0
  66. maxframe/dataframe/__init__.py +12 -5
  67. maxframe/dataframe/accessors/__init__.py +1 -1
  68. maxframe/dataframe/accessors/compat.py +45 -0
  69. maxframe/dataframe/accessors/datetime_/__init__.py +4 -1
  70. maxframe/dataframe/accessors/dict_/contains.py +7 -16
  71. maxframe/dataframe/accessors/dict_/core.py +48 -0
  72. maxframe/dataframe/accessors/dict_/getitem.py +17 -21
  73. maxframe/dataframe/accessors/dict_/length.py +7 -16
  74. maxframe/dataframe/accessors/dict_/remove.py +6 -18
  75. maxframe/dataframe/accessors/dict_/setitem.py +8 -18
  76. maxframe/dataframe/accessors/dict_/tests/test_dict_accessor.py +62 -22
  77. maxframe/dataframe/accessors/list_/__init__.py +2 -2
  78. maxframe/dataframe/accessors/list_/core.py +48 -0
  79. maxframe/dataframe/accessors/list_/getitem.py +12 -19
  80. maxframe/dataframe/accessors/list_/length.py +7 -16
  81. maxframe/dataframe/accessors/list_/tests/test_list_accessor.py +11 -9
  82. maxframe/dataframe/accessors/string_/__init__.py +4 -1
  83. maxframe/dataframe/accessors/struct_/__init__.py +37 -0
  84. maxframe/dataframe/accessors/struct_/accessor.py +39 -0
  85. maxframe/dataframe/accessors/struct_/core.py +43 -0
  86. maxframe/dataframe/accessors/struct_/dtypes.py +53 -0
  87. maxframe/dataframe/accessors/struct_/field.py +123 -0
  88. maxframe/dataframe/accessors/struct_/tests/__init__.py +13 -0
  89. maxframe/dataframe/accessors/struct_/tests/test_struct_accessor.py +91 -0
  90. maxframe/dataframe/arithmetic/__init__.py +18 -4
  91. maxframe/dataframe/arithmetic/between.py +106 -0
  92. maxframe/dataframe/arithmetic/dot.py +237 -0
  93. maxframe/dataframe/arithmetic/maximum.py +33 -0
  94. maxframe/dataframe/arithmetic/minimum.py +33 -0
  95. maxframe/dataframe/arithmetic/{around.py → round.py} +11 -7
  96. maxframe/dataframe/core.py +161 -224
  97. maxframe/dataframe/datasource/__init__.py +18 -0
  98. maxframe/dataframe/datasource/core.py +6 -0
  99. maxframe/dataframe/datasource/direct.py +57 -0
  100. maxframe/dataframe/datasource/from_dict.py +124 -0
  101. maxframe/dataframe/datasource/from_index.py +1 -1
  102. maxframe/dataframe/datasource/from_records.py +77 -0
  103. maxframe/dataframe/datasource/from_tensor.py +109 -41
  104. maxframe/dataframe/datasource/read_csv.py +21 -14
  105. maxframe/dataframe/datasource/read_odps_query.py +29 -6
  106. maxframe/dataframe/datasource/read_odps_table.py +32 -10
  107. maxframe/dataframe/datasource/read_parquet.py +38 -39
  108. maxframe/dataframe/datasource/tests/test_datasource.py +37 -0
  109. maxframe/dataframe/datastore/__init__.py +11 -1
  110. maxframe/dataframe/datastore/direct.py +268 -0
  111. maxframe/dataframe/datastore/to_csv.py +29 -41
  112. maxframe/dataframe/datastore/to_odps.py +36 -4
  113. maxframe/dataframe/extensions/__init__.py +20 -4
  114. maxframe/dataframe/extensions/apply_chunk.py +32 -6
  115. maxframe/dataframe/extensions/cartesian_chunk.py +153 -0
  116. maxframe/dataframe/extensions/collect_kv.py +126 -0
  117. maxframe/dataframe/extensions/extract_kv.py +177 -0
  118. maxframe/dataframe/extensions/flatjson.py +2 -1
  119. maxframe/dataframe/extensions/map_reduce.py +263 -0
  120. maxframe/dataframe/extensions/rebalance.py +62 -0
  121. maxframe/dataframe/extensions/tests/test_apply_chunk.py +9 -2
  122. maxframe/dataframe/extensions/tests/test_extensions.py +54 -0
  123. maxframe/dataframe/extensions/tests/test_map_reduce.py +135 -0
  124. maxframe/dataframe/groupby/__init__.py +17 -2
  125. maxframe/dataframe/groupby/aggregation.py +86 -49
  126. maxframe/dataframe/groupby/apply.py +1 -1
  127. maxframe/dataframe/groupby/apply_chunk.py +19 -5
  128. maxframe/dataframe/groupby/core.py +116 -16
  129. maxframe/dataframe/groupby/cum.py +4 -25
  130. maxframe/dataframe/groupby/expanding.py +264 -0
  131. maxframe/dataframe/groupby/fill.py +1 -1
  132. maxframe/dataframe/groupby/getitem.py +12 -5
  133. maxframe/dataframe/groupby/head.py +11 -1
  134. maxframe/dataframe/groupby/rank.py +136 -0
  135. maxframe/dataframe/groupby/rolling.py +206 -0
  136. maxframe/dataframe/groupby/shift.py +114 -0
  137. maxframe/dataframe/groupby/tests/test_groupby.py +0 -5
  138. maxframe/dataframe/indexing/__init__.py +22 -2
  139. maxframe/dataframe/indexing/droplevel.py +195 -0
  140. maxframe/dataframe/indexing/filter.py +169 -0
  141. maxframe/dataframe/indexing/get_level_values.py +76 -0
  142. maxframe/dataframe/indexing/iat.py +45 -0
  143. maxframe/dataframe/indexing/iloc.py +152 -12
  144. maxframe/dataframe/indexing/insert.py +46 -18
  145. maxframe/dataframe/indexing/loc.py +287 -7
  146. maxframe/dataframe/indexing/reindex.py +14 -5
  147. maxframe/dataframe/indexing/rename.py +6 -0
  148. maxframe/dataframe/indexing/rename_axis.py +2 -2
  149. maxframe/dataframe/indexing/reorder_levels.py +143 -0
  150. maxframe/dataframe/indexing/reset_index.py +33 -6
  151. maxframe/dataframe/indexing/sample.py +8 -0
  152. maxframe/dataframe/indexing/setitem.py +3 -3
  153. maxframe/dataframe/indexing/swaplevel.py +185 -0
  154. maxframe/dataframe/indexing/take.py +99 -0
  155. maxframe/dataframe/indexing/truncate.py +140 -0
  156. maxframe/dataframe/indexing/where.py +0 -11
  157. maxframe/dataframe/indexing/xs.py +148 -0
  158. maxframe/dataframe/merge/__init__.py +15 -1
  159. maxframe/dataframe/merge/append.py +97 -98
  160. maxframe/dataframe/merge/combine.py +244 -0
  161. maxframe/dataframe/merge/combine_first.py +120 -0
  162. maxframe/dataframe/merge/compare.py +387 -0
  163. maxframe/dataframe/merge/concat.py +183 -0
  164. maxframe/dataframe/merge/update.py +271 -0
  165. maxframe/dataframe/misc/__init__.py +28 -11
  166. maxframe/dataframe/misc/_duplicate.py +10 -4
  167. maxframe/dataframe/misc/apply.py +1 -1
  168. maxframe/dataframe/misc/check_unique.py +82 -0
  169. maxframe/dataframe/misc/clip.py +145 -0
  170. maxframe/dataframe/misc/describe.py +175 -9
  171. maxframe/dataframe/misc/drop.py +31 -0
  172. maxframe/dataframe/misc/drop_duplicates.py +2 -2
  173. maxframe/dataframe/misc/duplicated.py +2 -2
  174. maxframe/dataframe/misc/get_dummies.py +5 -1
  175. maxframe/dataframe/misc/infer_dtypes.py +251 -0
  176. maxframe/dataframe/misc/isin.py +2 -2
  177. maxframe/dataframe/misc/map.py +125 -18
  178. maxframe/dataframe/misc/repeat.py +159 -0
  179. maxframe/dataframe/misc/tests/test_misc.py +48 -3
  180. maxframe/dataframe/misc/to_numeric.py +3 -0
  181. maxframe/dataframe/misc/transform.py +12 -5
  182. maxframe/dataframe/misc/transpose.py +13 -1
  183. maxframe/dataframe/misc/valid_index.py +115 -0
  184. maxframe/dataframe/misc/value_counts.py +38 -4
  185. maxframe/dataframe/missing/checkna.py +14 -6
  186. maxframe/dataframe/missing/dropna.py +5 -0
  187. maxframe/dataframe/missing/fillna.py +1 -1
  188. maxframe/dataframe/missing/replace.py +7 -4
  189. maxframe/dataframe/reduction/__init__.py +35 -16
  190. maxframe/dataframe/reduction/aggregation.py +43 -14
  191. maxframe/dataframe/reduction/all.py +2 -2
  192. maxframe/dataframe/reduction/any.py +2 -2
  193. maxframe/dataframe/reduction/argmax.py +103 -0
  194. maxframe/dataframe/reduction/argmin.py +103 -0
  195. maxframe/dataframe/reduction/core.py +80 -24
  196. maxframe/dataframe/reduction/count.py +13 -9
  197. maxframe/dataframe/reduction/cov.py +166 -0
  198. maxframe/dataframe/reduction/cummax.py +2 -2
  199. maxframe/dataframe/reduction/cummin.py +2 -2
  200. maxframe/dataframe/reduction/cumprod.py +2 -2
  201. maxframe/dataframe/reduction/cumsum.py +2 -2
  202. maxframe/dataframe/reduction/custom_reduction.py +2 -2
  203. maxframe/dataframe/reduction/idxmax.py +185 -0
  204. maxframe/dataframe/reduction/idxmin.py +185 -0
  205. maxframe/dataframe/reduction/kurtosis.py +37 -30
  206. maxframe/dataframe/reduction/max.py +2 -2
  207. maxframe/dataframe/reduction/mean.py +9 -7
  208. maxframe/dataframe/reduction/median.py +2 -2
  209. maxframe/dataframe/reduction/min.py +2 -2
  210. maxframe/dataframe/reduction/mode.py +144 -0
  211. maxframe/dataframe/reduction/nunique.py +19 -11
  212. maxframe/dataframe/reduction/prod.py +18 -13
  213. maxframe/dataframe/reduction/reduction_size.py +2 -2
  214. maxframe/dataframe/reduction/sem.py +13 -9
  215. maxframe/dataframe/reduction/skew.py +31 -27
  216. maxframe/dataframe/reduction/str_concat.py +10 -7
  217. maxframe/dataframe/reduction/sum.py +18 -14
  218. maxframe/dataframe/reduction/tests/test_reduction.py +12 -0
  219. maxframe/dataframe/reduction/unique.py +20 -3
  220. maxframe/dataframe/reduction/var.py +16 -12
  221. maxframe/dataframe/reshape/__init__.py +38 -0
  222. maxframe/dataframe/{misc → reshape}/pivot.py +1 -0
  223. maxframe/dataframe/{misc → reshape}/pivot_table.py +1 -0
  224. maxframe/dataframe/reshape/unstack.py +114 -0
  225. maxframe/dataframe/sort/__init__.py +16 -1
  226. maxframe/dataframe/sort/argsort.py +68 -0
  227. maxframe/dataframe/sort/core.py +2 -1
  228. maxframe/dataframe/sort/nlargest.py +238 -0
  229. maxframe/dataframe/sort/nsmallest.py +228 -0
  230. maxframe/dataframe/sort/rank.py +147 -0
  231. maxframe/dataframe/statistics/__init__.py +3 -3
  232. maxframe/dataframe/statistics/corr.py +1 -0
  233. maxframe/dataframe/statistics/quantile.py +2 -2
  234. maxframe/dataframe/tests/test_typing.py +104 -0
  235. maxframe/dataframe/tests/test_utils.py +66 -2
  236. maxframe/dataframe/tseries/__init__.py +19 -0
  237. maxframe/dataframe/tseries/at_time.py +61 -0
  238. maxframe/dataframe/tseries/between_time.py +122 -0
  239. maxframe/dataframe/typing_.py +185 -0
  240. maxframe/dataframe/utils.py +125 -52
  241. maxframe/dataframe/window/aggregation.py +8 -4
  242. maxframe/dataframe/window/core.py +14 -1
  243. maxframe/dataframe/window/ewm.py +1 -3
  244. maxframe/dataframe/window/expanding.py +37 -35
  245. maxframe/dataframe/window/rolling.py +49 -39
  246. maxframe/dataframe/window/tests/test_expanding.py +1 -7
  247. maxframe/dataframe/window/tests/test_rolling.py +1 -1
  248. maxframe/env.py +7 -4
  249. maxframe/errors.py +2 -2
  250. maxframe/io/odpsio/schema.py +9 -3
  251. maxframe/io/odpsio/tableio.py +7 -2
  252. maxframe/io/odpsio/tests/test_schema.py +198 -83
  253. maxframe/learn/__init__.py +10 -2
  254. maxframe/learn/cluster/__init__.py +15 -0
  255. maxframe/learn/cluster/_kmeans.py +782 -0
  256. maxframe/learn/contrib/llm/core.py +18 -7
  257. maxframe/learn/contrib/llm/deploy/__init__.py +13 -0
  258. maxframe/learn/contrib/llm/deploy/config.py +221 -0
  259. maxframe/learn/contrib/llm/deploy/core.py +247 -0
  260. maxframe/learn/contrib/llm/deploy/framework.py +35 -0
  261. maxframe/learn/contrib/llm/deploy/loader.py +360 -0
  262. maxframe/learn/contrib/llm/deploy/tests/__init__.py +13 -0
  263. maxframe/learn/contrib/llm/deploy/tests/test_register_models.py +359 -0
  264. maxframe/learn/contrib/llm/models/__init__.py +1 -0
  265. maxframe/learn/contrib/llm/models/dashscope.py +12 -6
  266. maxframe/learn/contrib/llm/models/managed.py +76 -11
  267. maxframe/learn/contrib/llm/models/openai.py +72 -0
  268. maxframe/learn/contrib/llm/tests/__init__.py +13 -0
  269. maxframe/learn/contrib/llm/tests/test_core.py +34 -0
  270. maxframe/learn/contrib/llm/tests/test_openai.py +187 -0
  271. maxframe/learn/contrib/llm/tests/test_text_gen.py +155 -0
  272. maxframe/learn/contrib/llm/text.py +348 -42
  273. maxframe/learn/contrib/models.py +4 -1
  274. maxframe/learn/contrib/xgboost/classifier.py +2 -0
  275. maxframe/learn/contrib/xgboost/core.py +113 -4
  276. maxframe/learn/contrib/xgboost/predict.py +4 -2
  277. maxframe/learn/contrib/xgboost/regressor.py +5 -0
  278. maxframe/learn/contrib/xgboost/train.py +7 -2
  279. maxframe/learn/core.py +66 -0
  280. maxframe/learn/linear_model/_base.py +58 -1
  281. maxframe/learn/linear_model/_lin_reg.py +1 -1
  282. maxframe/learn/metrics/__init__.py +6 -0
  283. maxframe/learn/metrics/_classification.py +145 -0
  284. maxframe/learn/metrics/_ranking.py +477 -0
  285. maxframe/learn/metrics/_scorer.py +60 -0
  286. maxframe/learn/metrics/pairwise/__init__.py +21 -0
  287. maxframe/learn/metrics/pairwise/core.py +77 -0
  288. maxframe/learn/metrics/pairwise/cosine.py +115 -0
  289. maxframe/learn/metrics/pairwise/euclidean.py +176 -0
  290. maxframe/learn/metrics/pairwise/haversine.py +96 -0
  291. maxframe/learn/metrics/pairwise/manhattan.py +80 -0
  292. maxframe/learn/metrics/pairwise/pairwise.py +127 -0
  293. maxframe/learn/metrics/pairwise/pairwise_distances_topk.py +121 -0
  294. maxframe/learn/metrics/pairwise/rbf_kernel.py +51 -0
  295. maxframe/learn/metrics/tests/__init__.py +13 -0
  296. maxframe/learn/metrics/tests/test_scorer.py +26 -0
  297. maxframe/learn/preprocessing/_data/min_max_scaler.py +34 -23
  298. maxframe/learn/preprocessing/_data/standard_scaler.py +34 -25
  299. maxframe/learn/utils/__init__.py +2 -1
  300. maxframe/learn/utils/checks.py +1 -2
  301. maxframe/learn/utils/core.py +59 -0
  302. maxframe/learn/utils/extmath.py +79 -9
  303. maxframe/learn/utils/odpsio.py +262 -0
  304. maxframe/learn/utils/validation.py +2 -2
  305. maxframe/lib/compat.py +40 -0
  306. maxframe/lib/dtypes_extension/__init__.py +16 -1
  307. maxframe/lib/dtypes_extension/_fake_arrow_dtype.py +604 -0
  308. maxframe/lib/dtypes_extension/blob.py +304 -0
  309. maxframe/lib/dtypes_extension/dtypes.py +40 -0
  310. maxframe/lib/dtypes_extension/tests/test_blob.py +88 -0
  311. maxframe/lib/dtypes_extension/tests/test_dtypes.py +16 -1
  312. maxframe/lib/dtypes_extension/tests/test_fake_arrow_dtype.py +75 -0
  313. maxframe/lib/filesystem/_oss_lib/common.py +124 -50
  314. maxframe/lib/filesystem/_oss_lib/glob.py +1 -1
  315. maxframe/lib/filesystem/_oss_lib/handle.py +21 -25
  316. maxframe/lib/filesystem/base.py +1 -1
  317. maxframe/lib/filesystem/core.py +1 -1
  318. maxframe/lib/filesystem/oss.py +115 -46
  319. maxframe/lib/filesystem/tests/test_oss.py +74 -36
  320. maxframe/lib/mmh3.cp37-win32.pyd +0 -0
  321. maxframe/lib/wrapped_pickle.py +10 -0
  322. maxframe/opcodes.py +41 -15
  323. maxframe/protocol.py +12 -0
  324. maxframe/remote/core.py +4 -0
  325. maxframe/serialization/__init__.py +11 -2
  326. maxframe/serialization/arrow.py +38 -13
  327. maxframe/serialization/blob.py +32 -0
  328. maxframe/serialization/core.cp37-win32.pyd +0 -0
  329. maxframe/serialization/core.pyx +39 -1
  330. maxframe/serialization/exception.py +2 -4
  331. maxframe/serialization/numpy.py +11 -0
  332. maxframe/serialization/pandas.py +46 -9
  333. maxframe/serialization/serializables/core.py +2 -2
  334. maxframe/serialization/tests/test_serial.py +31 -4
  335. maxframe/tensor/__init__.py +38 -8
  336. maxframe/tensor/arithmetic/__init__.py +19 -10
  337. maxframe/tensor/arithmetic/core.py +2 -2
  338. maxframe/tensor/arithmetic/iscomplexobj.py +53 -0
  339. maxframe/tensor/arithmetic/tests/test_arithmetic.py +6 -9
  340. maxframe/tensor/core.py +6 -2
  341. maxframe/tensor/datasource/tests/test_datasource.py +2 -1
  342. maxframe/tensor/extensions/__init__.py +2 -0
  343. maxframe/tensor/extensions/apply_chunk.py +3 -3
  344. maxframe/tensor/extensions/rebalance.py +65 -0
  345. maxframe/tensor/fft/__init__.py +32 -0
  346. maxframe/tensor/fft/core.py +168 -0
  347. maxframe/tensor/fft/fft.py +112 -0
  348. maxframe/tensor/fft/fft2.py +118 -0
  349. maxframe/tensor/fft/fftfreq.py +80 -0
  350. maxframe/tensor/fft/fftn.py +123 -0
  351. maxframe/tensor/fft/fftshift.py +79 -0
  352. maxframe/tensor/fft/hfft.py +112 -0
  353. maxframe/tensor/fft/ifft.py +114 -0
  354. maxframe/tensor/fft/ifft2.py +115 -0
  355. maxframe/tensor/fft/ifftn.py +123 -0
  356. maxframe/tensor/fft/ifftshift.py +73 -0
  357. maxframe/tensor/fft/ihfft.py +93 -0
  358. maxframe/tensor/fft/irfft.py +118 -0
  359. maxframe/tensor/fft/irfft2.py +62 -0
  360. maxframe/tensor/fft/irfftn.py +114 -0
  361. maxframe/tensor/fft/rfft.py +116 -0
  362. maxframe/tensor/fft/rfft2.py +63 -0
  363. maxframe/tensor/fft/rfftfreq.py +87 -0
  364. maxframe/tensor/fft/rfftn.py +113 -0
  365. maxframe/tensor/indexing/fill_diagonal.py +1 -7
  366. maxframe/tensor/linalg/__init__.py +7 -0
  367. maxframe/tensor/linalg/_einsumfunc.py +1025 -0
  368. maxframe/tensor/linalg/cholesky.py +117 -0
  369. maxframe/tensor/linalg/einsum.py +339 -0
  370. maxframe/tensor/linalg/lstsq.py +100 -0
  371. maxframe/tensor/linalg/matrix_norm.py +75 -0
  372. maxframe/tensor/linalg/norm.py +249 -0
  373. maxframe/tensor/linalg/solve.py +72 -0
  374. maxframe/tensor/linalg/solve_triangular.py +2 -2
  375. maxframe/tensor/linalg/vector_norm.py +113 -0
  376. maxframe/tensor/misc/__init__.py +24 -1
  377. maxframe/tensor/misc/argwhere.py +72 -0
  378. maxframe/tensor/misc/array_split.py +46 -0
  379. maxframe/tensor/misc/broadcast_arrays.py +57 -0
  380. maxframe/tensor/misc/copyto.py +130 -0
  381. maxframe/tensor/misc/delete.py +104 -0
  382. maxframe/tensor/misc/dsplit.py +68 -0
  383. maxframe/tensor/misc/ediff1d.py +74 -0
  384. maxframe/tensor/misc/expand_dims.py +85 -0
  385. maxframe/tensor/misc/flip.py +90 -0
  386. maxframe/tensor/misc/fliplr.py +64 -0
  387. maxframe/tensor/misc/flipud.py +68 -0
  388. maxframe/tensor/misc/hsplit.py +85 -0
  389. maxframe/tensor/misc/insert.py +139 -0
  390. maxframe/tensor/misc/moveaxis.py +83 -0
  391. maxframe/tensor/misc/result_type.py +88 -0
  392. maxframe/tensor/misc/roll.py +124 -0
  393. maxframe/tensor/misc/rollaxis.py +77 -0
  394. maxframe/tensor/misc/shape.py +89 -0
  395. maxframe/tensor/misc/split.py +190 -0
  396. maxframe/tensor/misc/tile.py +109 -0
  397. maxframe/tensor/misc/vsplit.py +74 -0
  398. maxframe/tensor/reduction/array_equal.py +2 -1
  399. maxframe/tensor/sort/__init__.py +2 -0
  400. maxframe/tensor/sort/argpartition.py +98 -0
  401. maxframe/tensor/sort/partition.py +228 -0
  402. maxframe/tensor/spatial/__init__.py +15 -0
  403. maxframe/tensor/spatial/distance/__init__.py +17 -0
  404. maxframe/tensor/spatial/distance/cdist.py +421 -0
  405. maxframe/tensor/spatial/distance/pdist.py +398 -0
  406. maxframe/tensor/spatial/distance/squareform.py +153 -0
  407. maxframe/tensor/special/__init__.py +159 -21
  408. maxframe/tensor/special/airy.py +55 -0
  409. maxframe/tensor/special/bessel.py +199 -0
  410. maxframe/tensor/special/core.py +65 -4
  411. maxframe/tensor/special/ellip_func_integrals.py +155 -0
  412. maxframe/tensor/special/ellip_harm.py +55 -0
  413. maxframe/tensor/special/err_fresnel.py +223 -0
  414. maxframe/tensor/special/gamma_funcs.py +303 -0
  415. maxframe/tensor/special/hypergeometric_funcs.py +69 -0
  416. maxframe/tensor/special/info_theory.py +189 -0
  417. maxframe/tensor/special/misc.py +21 -0
  418. maxframe/tensor/statistics/__init__.py +6 -0
  419. maxframe/tensor/statistics/corrcoef.py +77 -0
  420. maxframe/tensor/statistics/cov.py +222 -0
  421. maxframe/tensor/statistics/digitize.py +126 -0
  422. maxframe/tensor/statistics/histogram.py +520 -0
  423. maxframe/tensor/statistics/median.py +85 -0
  424. maxframe/tensor/statistics/ptp.py +89 -0
  425. maxframe/tensor/utils.py +3 -3
  426. maxframe/tests/test_udf.py +61 -0
  427. maxframe/tests/test_utils.py +51 -6
  428. maxframe/tests/utils.py +0 -2
  429. maxframe/typing_.py +2 -0
  430. maxframe/udf.py +130 -9
  431. maxframe/utils.py +254 -27
  432. {maxframe-2.0.0b2.dist-info → maxframe-2.3.0rc1.dist-info}/METADATA +3 -3
  433. {maxframe-2.0.0b2.dist-info → maxframe-2.3.0rc1.dist-info}/RECORD +442 -264
  434. maxframe_client/fetcher.py +35 -4
  435. maxframe_client/session/odps.py +7 -2
  436. maxframe_client/session/task.py +8 -1
  437. maxframe_client/tests/test_fetcher.py +76 -3
  438. maxframe_client/tests/test_session.py +28 -1
  439. maxframe/dataframe/arrays.py +0 -864
  440. /maxframe/dataframe/{misc → reshape}/melt.py +0 -0
  441. /maxframe/dataframe/{misc → reshape}/stack.py +0 -0
  442. {maxframe-2.0.0b2.dist-info → maxframe-2.3.0rc1.dist-info}/WHEEL +0 -0
  443. {maxframe-2.0.0b2.dist-info → maxframe-2.3.0rc1.dist-info}/top_level.txt +0 -0
@@ -12,26 +12,164 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- from .misc import softmax, softplus
16
- from .statistical import (
17
- TensorExpit,
18
- TensorLogExpit,
19
- TensorLogit,
20
- expit,
21
- log_expit,
22
- logit,
23
- )
15
+ try:
16
+ import scipy
24
17
 
18
+ from .airy import TensorAiry, TensorAirye, TensorItairy, airy, airye, itairy
19
+ from .bessel import (
20
+ TensorHankel1,
21
+ TensorHankel1e,
22
+ TensorHankel2,
23
+ TensorHankel2e,
24
+ TensorIV,
25
+ TensorIVE,
26
+ TensorJV,
27
+ TensorJVE,
28
+ TensorKN,
29
+ TensorKV,
30
+ TensorKVE,
31
+ TensorYN,
32
+ TensorYV,
33
+ TensorYVE,
34
+ hankel1,
35
+ hankel1e,
36
+ hankel2,
37
+ hankel2e,
38
+ iv,
39
+ ive,
40
+ jv,
41
+ jve,
42
+ kn,
43
+ kv,
44
+ kve,
45
+ yn,
46
+ yv,
47
+ yve,
48
+ )
49
+ from .ellip_func_integrals import (
50
+ TensorEllipe,
51
+ TensorEllipeinc,
52
+ TensorEllipk,
53
+ TensorEllipkinc,
54
+ TensorEllipkm1,
55
+ TensorElliprc,
56
+ TensorElliprd,
57
+ TensorElliprf,
58
+ TensorElliprg,
59
+ TensorElliprj,
60
+ ellipe,
61
+ ellipeinc,
62
+ ellipk,
63
+ ellipkinc,
64
+ ellipkm1,
65
+ elliprc,
66
+ elliprd,
67
+ elliprf,
68
+ elliprg,
69
+ elliprj,
70
+ )
71
+ from .ellip_harm import (
72
+ TensorEllipHarm,
73
+ TensorEllipHarm2,
74
+ TensorEllipNormal,
75
+ ellip_harm,
76
+ ellip_harm_2,
77
+ ellip_normal,
78
+ )
79
+ from .err_fresnel import (
80
+ TensorDawsn,
81
+ TensorErf,
82
+ TensorErfc,
83
+ TensorErfcinv,
84
+ TensorErfcx,
85
+ TensorErfi,
86
+ TensorErfinv,
87
+ TensorFresnel,
88
+ TensorModFresnelM,
89
+ TensorModFresnelP,
90
+ TensorVoigtProfile,
91
+ TensorWofz,
92
+ dawsn,
93
+ erf,
94
+ erfc,
95
+ erfcinv,
96
+ erfcx,
97
+ erfi,
98
+ erfinv,
99
+ fresnel,
100
+ modfresnelm,
101
+ modfresnelp,
102
+ voigt_profile,
103
+ wofz,
104
+ )
105
+ from .gamma_funcs import (
106
+ TensorBeta,
107
+ TensorBetaInc,
108
+ TensorBetaIncInv,
109
+ TensorBetaLn,
110
+ TensorDiGamma,
111
+ TensorGamma,
112
+ TensorGammaInc,
113
+ TensorGammaIncc,
114
+ TensorGammaInccInv,
115
+ TensorGammaIncInv,
116
+ TensorGammaln,
117
+ TensorGammaSgn,
118
+ TensorLogGamma,
119
+ TensorMultiGammaLn,
120
+ TensorPoch,
121
+ TensorPolyGamma,
122
+ TensorPsi,
123
+ TensorRGamma,
124
+ beta,
125
+ betainc,
126
+ betaincinv,
127
+ betaln,
128
+ digamma,
129
+ gamma,
130
+ gammainc,
131
+ gammaincc,
132
+ gammainccinv,
133
+ gammaincinv,
134
+ gammaln,
135
+ gammasgn,
136
+ loggamma,
137
+ multigammaln,
138
+ poch,
139
+ polygamma,
140
+ psi,
141
+ rgamma,
142
+ )
143
+ from .hypergeometric_funcs import (
144
+ TensorHYP0F1,
145
+ TensorHYP1F1,
146
+ TensorHYP2F1,
147
+ TensorHYPERU,
148
+ hyp0f1,
149
+ hyp1f1,
150
+ hyp2f1,
151
+ hyperu,
152
+ )
153
+ from .info_theory import (
154
+ TensorEntr,
155
+ TensorKlDiv,
156
+ TensorRelEntr,
157
+ entr,
158
+ kl_div,
159
+ rel_entr,
160
+ )
161
+ from .misc import TensorXLogY, softmax, softplus, xlogy
162
+ from .statistical import (
163
+ TensorExpit,
164
+ TensorLogExpit,
165
+ TensorLogit,
166
+ expit,
167
+ log_expit,
168
+ logit,
169
+ )
170
+ except ImportError: # pragma: no cover
171
+ pass
25
172
 
26
- def _clear_nones():
27
- """Remove unsupported functions"""
28
- erase_key = []
29
- for member, val in globals().items():
30
- if val is None:
31
- erase_key.append(member)
32
- for key in erase_key:
33
- globals().pop(key, None)
34
-
35
-
36
- _clear_nones()
37
- del _clear_nones
173
+ _names_to_del = [_name for _name, _val in globals().items() if _val is None]
174
+ [globals().pop(_name) for _name in _names_to_del]
175
+ del _names_to_del
@@ -0,0 +1,55 @@
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from ..utils import implement_scipy, infer_scipy_dtype
16
+ from .core import TensorSpecialUnaryTupleOp, _register_special_op
17
+
18
+
19
+ @_register_special_op
20
+ class TensorAiry(TensorSpecialUnaryTupleOp):
21
+ _func_name = "airy"
22
+ _n_outputs = 4
23
+
24
+
25
+ @implement_scipy("scipy.special.airy")
26
+ @infer_scipy_dtype("scipy.special.airy", multi_outputs=True)
27
+ def airy(z, out=None, **kwargs):
28
+ op = TensorAiry(**kwargs)
29
+ return op(z, out=out)
30
+
31
+
32
+ @_register_special_op
33
+ class TensorAirye(TensorSpecialUnaryTupleOp):
34
+ _func_name = "airye"
35
+ _n_outputs = 4
36
+
37
+
38
+ @implement_scipy("scipy.special.airye")
39
+ @infer_scipy_dtype("scipy.special.airye", multi_outputs=True)
40
+ def airye(z, out=None, **kwargs):
41
+ op = TensorAirye(**kwargs)
42
+ return op(z, out=out)
43
+
44
+
45
+ @_register_special_op
46
+ class TensorItairy(TensorSpecialUnaryTupleOp):
47
+ _func_name = "itairy"
48
+ _n_outputs = 4
49
+
50
+
51
+ @implement_scipy("scipy.special.itairy")
52
+ @infer_scipy_dtype("scipy.special.itairy", multi_outputs=True)
53
+ def itairy(x, out=None, **kwargs):
54
+ op = TensorItairy(**kwargs)
55
+ return op(x, out=out)
@@ -0,0 +1,199 @@
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from ..arithmetic.utils import arithmetic_operator
16
+ from ..utils import implement_scipy, infer_scipy_dtype
17
+ from .core import TensorSpecialBinOp, _register_special_op
18
+
19
+
20
+ @_register_special_op
21
+ @arithmetic_operator(sparse_mode="binary_and")
22
+ class TensorJV(TensorSpecialBinOp):
23
+ _func_name = "jv"
24
+
25
+
26
+ @implement_scipy("scipy.special.jv")
27
+ @infer_scipy_dtype("scipy.special.jv")
28
+ def jv(v, z, **kwargs):
29
+ op = TensorJV(**kwargs)
30
+ return op(v, z)
31
+
32
+
33
+ @_register_special_op
34
+ @arithmetic_operator(sparse_mode="binary_and")
35
+ class TensorJVE(TensorSpecialBinOp):
36
+ _func_name = "jve"
37
+
38
+
39
+ @implement_scipy("scipy.special.jve")
40
+ @infer_scipy_dtype("scipy.special.jve")
41
+ def jve(v, z, **kwargs):
42
+ op = TensorJVE(**kwargs)
43
+ return op(v, z)
44
+
45
+
46
+ @_register_special_op
47
+ @arithmetic_operator(sparse_mode="binary_and")
48
+ class TensorYN(TensorSpecialBinOp):
49
+ _func_name = "yn"
50
+
51
+
52
+ @implement_scipy("scipy.special.yn")
53
+ @infer_scipy_dtype("scipy.special.yn")
54
+ def yn(n, x, **kwargs):
55
+ op = TensorYN(**kwargs)
56
+ return op(n, x)
57
+
58
+
59
+ @_register_special_op
60
+ @arithmetic_operator(sparse_mode="binary_and")
61
+ class TensorYV(TensorSpecialBinOp):
62
+ _func_name = "yv"
63
+
64
+
65
+ @implement_scipy("scipy.special.yv")
66
+ @infer_scipy_dtype("scipy.special.yv")
67
+ def yv(v, z, **kwargs):
68
+ op = TensorYV(**kwargs)
69
+ return op(v, z)
70
+
71
+
72
+ @_register_special_op
73
+ @arithmetic_operator(sparse_mode="binary_and")
74
+ class TensorYVE(TensorSpecialBinOp):
75
+ _func_name = "yve"
76
+
77
+
78
+ @implement_scipy("scipy.special.yve")
79
+ @infer_scipy_dtype("scipy.special.yve")
80
+ def yve(v, z, **kwargs):
81
+ op = TensorYVE(**kwargs)
82
+ return op(v, z)
83
+
84
+
85
+ @_register_special_op
86
+ @arithmetic_operator(sparse_mode="binary_and")
87
+ class TensorKN(TensorSpecialBinOp):
88
+ _func_name = "kn"
89
+
90
+
91
+ @implement_scipy("scipy.special.kn")
92
+ @infer_scipy_dtype("scipy.special.kn")
93
+ def kn(n, x, **kwargs):
94
+ op = TensorKN(**kwargs)
95
+ return op(n, x)
96
+
97
+
98
+ @_register_special_op
99
+ @arithmetic_operator(sparse_mode="binary_and")
100
+ class TensorKV(TensorSpecialBinOp):
101
+ _func_name = "kv"
102
+
103
+
104
+ @implement_scipy("scipy.special.kv")
105
+ @infer_scipy_dtype("scipy.special.kv")
106
+ def kv(v, z, **kwargs):
107
+ op = TensorKV(**kwargs)
108
+ return op(v, z)
109
+
110
+
111
+ @_register_special_op
112
+ @arithmetic_operator(sparse_mode="binary_and")
113
+ class TensorKVE(TensorSpecialBinOp):
114
+ _func_name = "kve"
115
+
116
+
117
+ @implement_scipy("scipy.special.kve")
118
+ @infer_scipy_dtype("scipy.special.kve")
119
+ def kve(v, z, **kwargs):
120
+ op = TensorKVE(**kwargs)
121
+ return op(v, z)
122
+
123
+
124
+ @_register_special_op
125
+ @arithmetic_operator(sparse_mode="binary_and")
126
+ class TensorIV(TensorSpecialBinOp):
127
+ _func_name = "iv"
128
+
129
+
130
+ @implement_scipy("scipy.special.iv")
131
+ @infer_scipy_dtype("scipy.special.iv")
132
+ def iv(v, z, **kwargs):
133
+ op = TensorIV(**kwargs)
134
+ return op(v, z)
135
+
136
+
137
+ @_register_special_op
138
+ @arithmetic_operator(sparse_mode="binary_and")
139
+ class TensorIVE(TensorSpecialBinOp):
140
+ _func_name = "ive"
141
+
142
+
143
+ @implement_scipy("scipy.special.ive")
144
+ @infer_scipy_dtype("scipy.special.ive")
145
+ def ive(v, z, **kwargs):
146
+ op = TensorIVE(**kwargs)
147
+ return op(v, z)
148
+
149
+
150
+ @_register_special_op
151
+ @arithmetic_operator(sparse_mode="binary_and")
152
+ class TensorHankel1(TensorSpecialBinOp):
153
+ _func_name = "hankel1"
154
+
155
+
156
+ @implement_scipy("scipy.special.hankel1")
157
+ @infer_scipy_dtype("scipy.special.hankel1")
158
+ def hankel1(v, z, **kwargs):
159
+ op = TensorHankel1(**kwargs)
160
+ return op(v, z)
161
+
162
+
163
+ @_register_special_op
164
+ @arithmetic_operator(sparse_mode="binary_and")
165
+ class TensorHankel1e(TensorSpecialBinOp):
166
+ _func_name = "hankel1e"
167
+
168
+
169
+ @implement_scipy("scipy.special.hankel1e")
170
+ @infer_scipy_dtype("scipy.special.hankel1e")
171
+ def hankel1e(v, z, **kwargs):
172
+ op = TensorHankel1e(**kwargs)
173
+ return op(v, z)
174
+
175
+
176
+ @_register_special_op
177
+ @arithmetic_operator(sparse_mode="binary_and")
178
+ class TensorHankel2(TensorSpecialBinOp):
179
+ _func_name = "hankel2"
180
+
181
+
182
+ @implement_scipy("scipy.special.hankel2")
183
+ @infer_scipy_dtype("scipy.special.hankel2")
184
+ def hankel2(v, z, **kwargs):
185
+ op = TensorHankel2(**kwargs)
186
+ return op(v, z)
187
+
188
+
189
+ @_register_special_op
190
+ @arithmetic_operator(sparse_mode="binary_and")
191
+ class TensorHankel2e(TensorSpecialBinOp):
192
+ _func_name = "hankel2e"
193
+
194
+
195
+ @implement_scipy("scipy.special.hankel2e")
196
+ @infer_scipy_dtype("scipy.special.hankel2e")
197
+ def hankel2e(v, z, **kwargs):
198
+ op = TensorHankel2e(**kwargs)
199
+ return op(v, z)
@@ -12,8 +12,18 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ import numpy as np
16
+
17
+ try:
18
+ import scipy.special as spspecial
19
+ except ImportError:
20
+ spspecial = None
21
+
15
22
  from ... import opcodes
16
- from ..arithmetic.core import TensorUnaryOp
23
+ from ...core import ExecutableTuple
24
+ from ...serialization.serializables import StringField
25
+ from ..arithmetic.core import TensorBinOp, TensorMultiOp, TensorUnaryOp
26
+ from ..datasource import tensor as astensor
17
27
 
18
28
  _func_name_to_special_cls = {}
19
29
 
@@ -29,10 +39,61 @@ class TensorSpecialOperatorMixin:
29
39
  _func_name = None
30
40
 
31
41
  def __new__(cls, *args, **kwargs):
32
- if cls._func_name is not None:
33
- return object.__new__(_func_name_to_special_cls[cls._func_name])
42
+ func_name = kwargs.get("func_name", cls._func_name)
43
+ kwargs["func_name"] = func_name
44
+ if func_name is not None:
45
+ return object.__new__(_func_name_to_special_cls[func_name])
34
46
  return super().__new__(cls, *args, **kwargs)
35
47
 
36
48
 
37
49
  class TensorSpecialUnaryOp(TensorSpecialOperatorMixin, TensorUnaryOp):
38
- pass
50
+ func_name = StringField("func_name")
51
+
52
+
53
+ class TensorSpecialBinOp(TensorSpecialOperatorMixin, TensorBinOp):
54
+ func_name = StringField("func_name")
55
+
56
+
57
+ class TensorSpecialMultiOp(TensorSpecialOperatorMixin, TensorMultiOp):
58
+ func_name = StringField("func_name")
59
+
60
+
61
+ class TensorSpecialUnaryTupleOp(TensorSpecialUnaryOp):
62
+ @property
63
+ def output_limit(self):
64
+ return self._n_outputs
65
+
66
+ def __call__(self, x, out=None):
67
+ x = astensor(x)
68
+
69
+ if out is not None:
70
+ if not isinstance(out, ExecutableTuple):
71
+ raise TypeError(
72
+ f"out should be ExecutableTuple object, got {type(out)} instead"
73
+ )
74
+ if len(out) != self._n_outputs:
75
+ raise TypeError(
76
+ "out should be an ExecutableTuple object with "
77
+ f"{self._n_outputs} elements, got {len(out)} instead"
78
+ )
79
+
80
+ func = getattr(spspecial, self._func_name)
81
+ res = func(np.ones(x.shape, dtype=x.dtype))
82
+ res_tensors = self.new_tensors(
83
+ [x],
84
+ kws=[
85
+ {
86
+ "side": f"{self._func_name}[{i}]",
87
+ "dtype": output.dtype,
88
+ "shape": output.shape,
89
+ }
90
+ for i, output in enumerate(res)
91
+ ],
92
+ )
93
+
94
+ if out is None:
95
+ return ExecutableTuple(res_tensors)
96
+
97
+ for res_tensor, out_tensor in zip(res_tensors, out):
98
+ out_tensor.data = res_tensor.data
99
+ return out
@@ -0,0 +1,155 @@
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from ..arithmetic.utils import arithmetic_operator
16
+ from ..utils import implement_scipy, infer_scipy_dtype
17
+ from .core import (
18
+ TensorSpecialBinOp,
19
+ TensorSpecialMultiOp,
20
+ TensorSpecialUnaryOp,
21
+ _register_special_op,
22
+ )
23
+
24
+
25
+ @_register_special_op
26
+ @arithmetic_operator(sparse_mode="unary")
27
+ class TensorEllipk(TensorSpecialUnaryOp):
28
+ _func_name = "ellipk"
29
+
30
+
31
+ @_register_special_op
32
+ @arithmetic_operator(sparse_mode="unary")
33
+ class TensorEllipkm1(TensorSpecialUnaryOp):
34
+ _func_name = "ellipkm1"
35
+
36
+
37
+ @_register_special_op
38
+ @arithmetic_operator(sparse_mode="binary_and")
39
+ class TensorEllipkinc(TensorSpecialBinOp):
40
+ _func_name = "ellipkinc"
41
+
42
+
43
+ @_register_special_op
44
+ @arithmetic_operator(sparse_mode="unary")
45
+ class TensorEllipe(TensorSpecialUnaryOp):
46
+ _func_name = "ellipe"
47
+
48
+
49
+ @_register_special_op
50
+ @arithmetic_operator(sparse_mode="binary_and")
51
+ class TensorEllipeinc(TensorSpecialBinOp):
52
+ _func_name = "ellipeinc"
53
+
54
+
55
+ @_register_special_op
56
+ @arithmetic_operator(sparse_mode="binary_and")
57
+ class TensorElliprc(TensorSpecialBinOp):
58
+ _func_name = "elliprc"
59
+
60
+
61
+ @_register_special_op
62
+ class TensorElliprd(TensorSpecialMultiOp):
63
+ _ARG_COUNT = 3
64
+ _func_name = "elliprd"
65
+
66
+
67
+ @_register_special_op
68
+ class TensorElliprf(TensorSpecialMultiOp):
69
+ _ARG_COUNT = 3
70
+ _func_name = "elliprf"
71
+
72
+
73
+ @_register_special_op
74
+ class TensorElliprg(TensorSpecialMultiOp):
75
+ _ARG_COUNT = 3
76
+ _func_name = "elliprg"
77
+
78
+
79
+ @_register_special_op
80
+ class TensorElliprj(TensorSpecialMultiOp):
81
+ _ARG_COUNT = 4
82
+ _func_name = "elliprj"
83
+
84
+
85
+ @implement_scipy("scipy.special.ellipk")
86
+ @infer_scipy_dtype("scipy.special.ellipk")
87
+ def ellipk(x, **kwargs):
88
+ op = TensorEllipk(**kwargs)
89
+ return op(x)
90
+
91
+
92
+ @implement_scipy("scipy.special.ellipkm1")
93
+ @infer_scipy_dtype("scipy.special.ellipkm1")
94
+ def ellipkm1(x, **kwargs):
95
+ op = TensorEllipkm1(**kwargs)
96
+ return op(x)
97
+
98
+
99
+ @implement_scipy("scipy.special.ellipkinc")
100
+ @infer_scipy_dtype("scipy.special.ellipkinc")
101
+ def ellipkinc(phi, m, **kwargs):
102
+ op = TensorEllipkinc(**kwargs)
103
+ return op(phi, m)
104
+
105
+
106
+ @implement_scipy("scipy.special.ellipe")
107
+ @infer_scipy_dtype("scipy.special.ellipe")
108
+ def ellipe(x, **kwargs):
109
+ op = TensorEllipe(**kwargs)
110
+ return op(x)
111
+
112
+
113
+ @implement_scipy("scipy.special.ellipeinc")
114
+ @infer_scipy_dtype("scipy.special.ellipeinc")
115
+ def ellipeinc(phi, m, **kwargs):
116
+ op = TensorEllipeinc(**kwargs)
117
+ return op(phi, m)
118
+
119
+
120
+ try:
121
+
122
+ @implement_scipy("scipy.special.elliprc")
123
+ @infer_scipy_dtype("scipy.special.elliprc")
124
+ def elliprc(x, y, **kwargs):
125
+ op = TensorElliprc(**kwargs)
126
+ return op(x, y)
127
+
128
+ @implement_scipy("scipy.special.elliprd")
129
+ @infer_scipy_dtype("scipy.special.elliprd")
130
+ def elliprd(x, y, z, **kwargs):
131
+ op = TensorElliprd(**kwargs)
132
+ return op(x, y, z)
133
+
134
+ @implement_scipy("scipy.special.elliprf")
135
+ @infer_scipy_dtype("scipy.special.elliprf")
136
+ def elliprf(x, y, z, **kwargs):
137
+ op = TensorElliprf(**kwargs)
138
+ return op(x, y, z)
139
+
140
+ @implement_scipy("scipy.special.elliprg")
141
+ @infer_scipy_dtype("scipy.special.elliprg")
142
+ def elliprg(x, y, z, **kwargs):
143
+ op = TensorElliprg(**kwargs)
144
+ return op(x, y, z)
145
+
146
+ @implement_scipy("scipy.special.elliprj")
147
+ @infer_scipy_dtype("scipy.special.elliprj")
148
+ def elliprj(x, y, z, p, **kwargs):
149
+ op = TensorElliprj(**kwargs)
150
+ return op(x, y, z, p)
151
+
152
+ except AttributeError:
153
+ # These functions are not implemented before scipy v1.8 so
154
+ # spsecial.func may cause AttributeError
155
+ elliprc = elliprd = elliprf = elliprg = elliprj = None