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
@@ -0,0 +1,91 @@
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
+ import pandas as pd
16
+ import pyarrow as pa
17
+ import pytest
18
+
19
+ from ..... import dataframe as md
20
+ from .....utils import ARROW_DTYPE_NOT_SUPPORTED
21
+ from ..core import SeriesStructMethod
22
+
23
+ pytestmark = pytest.mark.skipif(
24
+ ARROW_DTYPE_NOT_SUPPORTED, reason="Arrow Dtype is not supported"
25
+ )
26
+
27
+
28
+ @pytest.fixture
29
+ def series():
30
+ version_type = pa.struct(
31
+ [
32
+ ("major", pa.int64()),
33
+ ("minor", pa.int64()),
34
+ ]
35
+ )
36
+ return md.Series(
37
+ [
38
+ {"version": {"major": 1, "minor": 5}, "project": "pandas"},
39
+ {"version": {"major": 2, "minor": 1}, "project": "pandas"},
40
+ {"version": {"major": 1, "minor": 26}, "project": "numpy"},
41
+ ],
42
+ dtype=pd.ArrowDtype(
43
+ pa.struct([("version", version_type), ("project", pa.string())])
44
+ ),
45
+ )
46
+
47
+
48
+ def test_dtypes(series):
49
+ pd.testing.assert_series_equal(
50
+ series.struct.dtypes,
51
+ pd.Series(
52
+ [
53
+ pd.ArrowDtype(
54
+ pa.struct([("major", pa.int64()), ("minor", pa.int64())])
55
+ ),
56
+ pd.ArrowDtype(pa.string()),
57
+ ],
58
+ index=["version", "project"],
59
+ ),
60
+ )
61
+
62
+
63
+ def test_field(series):
64
+ version_type = pa.struct(
65
+ [
66
+ ("major", pa.int64()),
67
+ ("minor", pa.int64()),
68
+ ]
69
+ )
70
+
71
+ s1 = series.struct.field("version")
72
+ assert isinstance(s1, md.Series)
73
+ assert s1.name == "version"
74
+ assert s1.dtype == pd.ArrowDtype(version_type)
75
+ assert s1.shape == (3,)
76
+ assert s1.index_value == series.index_value
77
+ op = s1.op
78
+ assert isinstance(op, SeriesStructMethod)
79
+ assert op.method == "field"
80
+ assert op.method_kwargs["name_or_index"] == "version"
81
+
82
+ s2 = series.struct.field(["version", "major"])
83
+ assert isinstance(s1, md.Series)
84
+ assert s2.name == "major"
85
+ assert s2.dtype == pd.ArrowDtype(pa.int64())
86
+ assert s2.shape == (3,)
87
+ assert s2.index_value == series.index_value
88
+ op = s2.op
89
+ assert isinstance(op, SeriesStructMethod)
90
+ assert op.method == "field"
91
+ assert op.method_kwargs["name_or_index"] == ["version", "major"]
@@ -29,14 +29,15 @@ from .arcsin import DataFrameArcsin
29
29
  from .arcsinh import DataFrameArcsinh
30
30
  from .arctan import DataFrameArctan
31
31
  from .arctanh import DataFrameArctanh
32
- from .around import DataFrameAround, around
32
+ from .between import between
33
33
  from .bitwise_and import DataFrameAnd, bitand, rbitand
34
- from .bitwise_or import DataFrameOr, bitor, rbitor
34
+ from .bitwise_or import DataFrameOr, DataFrameTreeOr, bitor, rbitor
35
35
  from .bitwise_xor import DataFrameXor, bitxor, rbitxor
36
36
  from .ceil import DataFrameCeil
37
37
  from .cos import DataFrameCos
38
38
  from .cosh import DataFrameCosh
39
39
  from .degrees import DataFrameDegrees
40
+ from .dot import DataFrameDot, dot, rdot
40
41
  from .equal import DataFrameEqual, eq
41
42
  from .exp import DataFrameExp
42
43
  from .exp2 import DataFrameExp2
@@ -52,12 +53,15 @@ from .less_equal import DataFrameLessEqual, le
52
53
  from .log import DataFrameLog
53
54
  from .log2 import DataFrameLog2
54
55
  from .log10 import DataFrameLog10
56
+ from .maximum import DataFrameMaximum
57
+ from .minimum import DataFrameMinimum
55
58
  from .mod import DataFrameMod, mod, rmod
56
59
  from .multiply import DataFrameMul, mul, rmul
57
60
  from .negative import DataFrameNegative, negative
58
61
  from .not_equal import DataFrameNotEqual, ne
59
62
  from .power import DataFramePower, power, rpower
60
63
  from .radians import DataFrameRadians
64
+ from .round import DataFrameRound, round
61
65
  from .sin import DataFrameSin
62
66
  from .sinh import DataFrameSinh
63
67
  from .sqrt import DataFrameSqrt
@@ -220,7 +224,7 @@ def _install():
220
224
  DataFrameDegrees,
221
225
  DataFrameCeil,
222
226
  DataFrameFloor,
223
- DataFrameAround,
227
+ DataFrameRound,
224
228
  DataFrameExp,
225
229
  DataFrameExp2,
226
230
  DataFrameExpm1,
@@ -248,6 +252,8 @@ def _install():
248
252
  DataFramePower,
249
253
  DataFrameSubtract,
250
254
  DataFrameTrueDiv,
255
+ DataFrameMaximum,
256
+ DataFrameMinimum,
251
257
  ]
252
258
  for ufunc_op in ufunc_ops:
253
259
  register_tensor_ufunc(ufunc_op)
@@ -255,7 +261,8 @@ def _install():
255
261
  for entity in DATAFRAME_TYPE + SERIES_TYPE:
256
262
  setattr(entity, "__abs__", abs_)
257
263
  setattr(entity, "abs", abs_)
258
- _register_method(entity, "round", around)
264
+ _register_method(entity, "around", round)
265
+ _register_method(entity, "round", round)
259
266
  setattr(entity, "__invert__", invert)
260
267
 
261
268
  setattr(entity, "__add__", wrap_notimplemented_exception(add))
@@ -310,6 +317,10 @@ def _install():
310
317
  _register_bin_method(entity, "ge", ge)
311
318
  _register_bin_method(entity, "le", le)
312
319
 
320
+ setattr(entity, "__matmul__", dot)
321
+ setattr(entity, "__rmatmul__", rdot)
322
+ _register_method(entity, "dot", dot)
323
+
313
324
  setattr(entity, "__and__", wrap_notimplemented_exception(bitand))
314
325
  setattr(entity, "__rand__", wrap_notimplemented_exception(rbitand))
315
326
 
@@ -321,6 +332,9 @@ def _install():
321
332
 
322
333
  setattr(entity, "__neg__", wrap_notimplemented_exception(negative))
323
334
 
335
+ for entity in SERIES_TYPE:
336
+ setattr(entity, "between", between)
337
+
324
338
  for entity in INDEX_TYPE:
325
339
  setattr(entity, "__eq__", _wrap_eq())
326
340
 
@@ -0,0 +1,106 @@
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
+
16
+ def between(series, left, right, inclusive="both"):
17
+ """
18
+ Return boolean Series equivalent to left <= series <= right.
19
+ This function returns a boolean vector containing `True` wherever the
20
+ corresponding Series element is between the boundary values `left` and
21
+ `right`. NA values are treated as `False`.
22
+
23
+ Parameters
24
+ ----------
25
+ left : scalar or list-like
26
+ Left boundary.
27
+ right : scalar or list-like
28
+ Right boundary.
29
+ inclusive : {"both", "neither", "left", "right"}
30
+ Include boundaries. Whether to set each bound as closed or open.
31
+
32
+ Returns
33
+ -------
34
+ Series
35
+ Series representing whether each element is between left and
36
+ right (inclusive).
37
+
38
+ See Also
39
+ --------
40
+ Series.gt : Greater than of series and other.
41
+ Series.lt : Less than of series and other.
42
+
43
+ Notes
44
+ -----
45
+ This function is equivalent to ``(left <= ser) & (ser <= right)``
46
+
47
+ Examples
48
+ --------
49
+ >>> import maxframe.dataframe as md
50
+ >>> s = md.Series([2, 0, 4, 8, np.nan])
51
+
52
+ Boundary values are included by default:
53
+
54
+ >>> s.between(1, 4).execute()
55
+ 0 True
56
+ 1 False
57
+ 2 True
58
+ 3 False
59
+ 4 False
60
+ dtype: bool
61
+
62
+ With `inclusive` set to ``"neither"`` boundary values are excluded:
63
+
64
+ >>> s.between(1, 4, inclusive="neither").execute()
65
+ 0 True
66
+ 1 False
67
+ 2 False
68
+ 3 False
69
+ 4 False
70
+ dtype: bool
71
+
72
+ `left` and `right` can be any scalar value:
73
+
74
+ >>> s = md.Series(['Alice', 'Bob', 'Carol', 'Eve'])
75
+ >>> s.between('Anna', 'Daniel').execute()
76
+ 0 False
77
+ 1 True
78
+ 2 True
79
+ 3 False
80
+ dtype: bool
81
+ """
82
+ if isinstance(inclusive, bool): # pragma: no cover
83
+ # for pandas < 1.3.0
84
+ if inclusive:
85
+ inclusive = "both"
86
+ else:
87
+ inclusive = "neither"
88
+ if inclusive == "both":
89
+ lmask = series >= left
90
+ rmask = series <= right
91
+ elif inclusive == "left":
92
+ lmask = series >= left
93
+ rmask = series < right
94
+ elif inclusive == "right":
95
+ lmask = series > left
96
+ rmask = series <= right
97
+ elif inclusive == "neither":
98
+ lmask = series > left
99
+ rmask = series < right
100
+ else:
101
+ raise ValueError(
102
+ "Inclusive has to be either string of 'both',"
103
+ "'left', 'right', or 'neither'."
104
+ )
105
+
106
+ return lmask & rmask
@@ -0,0 +1,237 @@
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 typing import List
16
+
17
+ import numpy as np
18
+ import pandas as pd
19
+
20
+ from ... import opcodes
21
+ from ...core import EntityData
22
+ from ...serialization.serializables import AnyField, KeyField
23
+ from ...tensor import tensor as astensor
24
+ from ...tensor.core import TENSOR_TYPE
25
+ from ..core import DATAFRAME_TYPE, SERIES_TYPE
26
+ from ..operators import DataFrameOperator, DataFrameOperatorMixin
27
+ from ..utils import parse_index
28
+
29
+
30
+ class DataFrameDot(DataFrameOperator, DataFrameOperatorMixin):
31
+ _op_type_ = opcodes.DOT
32
+
33
+ lhs = KeyField("lhs")
34
+ rhs = AnyField("rhs")
35
+
36
+ def __init__(self, output_types=None, **kw):
37
+ super().__init__(_output_types=output_types, **kw)
38
+
39
+ @classmethod
40
+ def _set_inputs(cls, op: "DataFrameDot", inputs: List[EntityData]):
41
+ super()._set_inputs(op, inputs)
42
+ op.lhs, op.rhs = op._inputs[:2]
43
+
44
+ def __call__(self, lhs, rhs):
45
+ lhs = self._process_input(lhs)
46
+ rhs = self._process_input(rhs)
47
+ if not isinstance(rhs, (DATAFRAME_TYPE, SERIES_TYPE)):
48
+ rhs = astensor(rhs)
49
+ test_rhs = rhs
50
+ else:
51
+ test_rhs = rhs.to_tensor()
52
+
53
+ test_ret = lhs.to_tensor().dot(test_rhs)
54
+ if test_ret.ndim == 0:
55
+ if isinstance(lhs, SERIES_TYPE) and isinstance(rhs, TENSOR_TYPE):
56
+ # return tensor
57
+ return test_ret
58
+ return self.new_scalar([lhs, rhs], dtype=test_ret.dtype)
59
+ elif test_ret.ndim == 1:
60
+ if lhs.ndim == 1:
61
+ if hasattr(rhs, "columns_value"):
62
+ index_value = rhs.columns_value
63
+ else:
64
+ # tensor
65
+ length = -1 if np.isnan(rhs.shape[1]) else rhs.shape[1]
66
+ pd_index = pd.RangeIndex(length)
67
+ index_value = parse_index(pd_index, store_data=True)
68
+ else:
69
+ assert rhs.ndim == 1
70
+ index_value = lhs.index_value
71
+ return self.new_series(
72
+ [lhs, rhs],
73
+ shape=test_ret.shape,
74
+ dtype=test_ret.dtype,
75
+ index_value=index_value,
76
+ )
77
+ else:
78
+ if isinstance(rhs, TENSOR_TYPE):
79
+ dtypes = pd.Series(
80
+ np.repeat(test_ret.dtype, test_ret.shape[1]),
81
+ index=pd.RangeIndex(test_ret.shape[1]),
82
+ )
83
+ columns_value = parse_index(dtypes.index, store_data=True)
84
+ else:
85
+ dtypes = pd.Series(
86
+ np.repeat(test_ret.dtype, test_ret.shape[1]),
87
+ index=rhs.columns_value.to_pandas(),
88
+ )
89
+ columns_value = rhs.columns_value
90
+ return self.new_dataframe(
91
+ [lhs, rhs],
92
+ shape=test_ret.shape,
93
+ index_value=lhs.index_value,
94
+ columns_value=columns_value,
95
+ dtypes=dtypes,
96
+ )
97
+
98
+
99
+ def dot(df_or_series, other):
100
+ op = DataFrameDot(lhs=df_or_series, rhs=other)
101
+ return op(df_or_series, other)
102
+
103
+
104
+ def rdot(df_or_series, other):
105
+ op = DataFrameDot(lhs=other, rhs=df_or_series)
106
+ return op(other, df_or_series)
107
+
108
+
109
+ dot.__frame_doc__ = """
110
+ Compute the matrix multiplication between the DataFrame and other.
111
+
112
+ This method computes the matrix product between the DataFrame and the
113
+ values of an other Series, DataFrame or a numpy array.
114
+
115
+ It can also be called using ``self @ other`` in Python >= 3.5.
116
+
117
+ Parameters
118
+ ----------
119
+ other : Series, DataFrame or array-like
120
+ The other object to compute the matrix product with.
121
+
122
+ Returns
123
+ -------
124
+ Series or DataFrame
125
+ If other is a Series, return the matrix product between self and
126
+ other as a Series. If other is a DataFrame or a numpy.array, return
127
+ the matrix product of self and other in a DataFrame of a np.array.
128
+
129
+ See Also
130
+ --------
131
+ Series.dot: Similar method for Series.
132
+
133
+ Notes
134
+ -----
135
+ The dimensions of DataFrame and other must be compatible in order to
136
+ compute the matrix multiplication. In addition, the column names of
137
+ DataFrame and the index of other must contain the same values, as they
138
+ will be aligned prior to the multiplication.
139
+
140
+ The dot method for Series computes the inner product, instead of the
141
+ matrix product here.
142
+
143
+ Examples
144
+ --------
145
+ Here we multiply a DataFrame with a Series.
146
+
147
+ >>> import maxframe.tensor as mt
148
+ >>> import maxframe.dataframe as md
149
+ >>> df = md.DataFrame([[0, 1, -2, -1], [1, 1, 1, 1]])
150
+ >>> s = md.Series([1, 1, 2, 1])
151
+ >>> df.dot(s).execute()
152
+ 0 -4
153
+ 1 5
154
+ dtype: int64
155
+
156
+ Here we multiply a DataFrame with another DataFrame.
157
+
158
+ >>> other = md.DataFrame([[0, 1], [1, 2], [-1, -1], [2, 0]])
159
+ >>> df.dot(other).execute()
160
+ 0 1
161
+ 0 1 4
162
+ 1 2 2
163
+
164
+ Note that the dot method give the same result as @
165
+
166
+ >>> (df @ other).execute()
167
+ 0 1
168
+ 0 1 4
169
+ 1 2 2
170
+
171
+ The dot method works also if other is an np.array.
172
+
173
+ >>> arr = mt.array([[0, 1], [1, 2], [-1, -1], [2, 0]])
174
+ >>> df.dot(arr).execute()
175
+ 0 1
176
+ 0 1 4
177
+ 1 2 2
178
+
179
+ Note how shuffling of the objects does not change the result.
180
+
181
+ >>> s2 = s.reindex([1, 0, 2, 3])
182
+ >>> df.dot(s2).execute()
183
+ 0 -4
184
+ 1 5
185
+ dtype: int64
186
+ """
187
+ dot.__series_doc__ = """
188
+ Compute the dot product between the Series and the columns of other.
189
+
190
+ This method computes the dot product between the Series and another
191
+ one, or the Series and each columns of a DataFrame, or the Series and
192
+ each columns of an array.
193
+
194
+ It can also be called using `self @ other` in Python >= 3.5.
195
+
196
+ Parameters
197
+ ----------
198
+ other : Series, DataFrame or array-like
199
+ The other object to compute the dot product with its columns.
200
+
201
+ Returns
202
+ -------
203
+ scalar, Series or numpy.ndarray
204
+ Return the dot product of the Series and other if other is a
205
+ Series, the Series of the dot product of Series and each rows of
206
+ other if other is a DataFrame or a numpy.ndarray between the Series
207
+ and each columns of the numpy array.
208
+
209
+ See Also
210
+ --------
211
+ DataFrame.dot: Compute the matrix product with the DataFrame.
212
+ Series.mul: Multiplication of series and other, element-wise.
213
+
214
+ Notes
215
+ -----
216
+ The Series and other has to share the same index if other is a Series
217
+ or a DataFrame.
218
+
219
+ Examples
220
+ --------
221
+ >>> import maxframe.tensor as mt
222
+ >>> import maxframe.dataframe as md
223
+ >>> s = md.Series([0, 1, 2, 3])
224
+ >>> other = md.Series([-1, 2, -3, 4])
225
+ >>> s.dot(other).execute()
226
+ 8
227
+ >>> (s @ other).execute()
228
+ 8
229
+ >>> df = md.DataFrame([[0, 1], [-2, 3], [4, -5], [6, 7]])
230
+ >>> s.dot(df).execute()
231
+ 0 24
232
+ 1 14
233
+ dtype: int64
234
+ >>> arr = mt.array([[0, 1], [-2, 3], [4, -5], [6, 7]])
235
+ >>> s.dot(arr).execute()
236
+ array([24, 14])
237
+ """
@@ -0,0 +1,33 @@
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
+ import numpy as np
16
+
17
+ from ... import opcodes
18
+ from ...utils import classproperty
19
+ from .core import DataFrameBinopUfunc
20
+
21
+
22
+ class DataFrameMaximum(DataFrameBinopUfunc):
23
+ _op_type_ = opcodes.MAXIMUM
24
+
25
+ @classproperty
26
+ def _operator(self):
27
+ return np.maximum
28
+
29
+ @classproperty
30
+ def tensor_op_type(self):
31
+ from ...tensor.arithmetic import TensorMaximum
32
+
33
+ return TensorMaximum
@@ -0,0 +1,33 @@
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
+ import numpy as np
16
+
17
+ from ... import opcodes
18
+ from ...utils import classproperty
19
+ from .core import DataFrameBinopUfunc
20
+
21
+
22
+ class DataFrameMinimum(DataFrameBinopUfunc):
23
+ _op_type_ = opcodes.MINIMUM
24
+
25
+ @classproperty
26
+ def _operator(self):
27
+ return np.minimum
28
+
29
+ @classproperty
30
+ def tensor_op_type(self):
31
+ from ...tensor.arithmetic import TensorMinimum
32
+
33
+ return TensorMinimum
@@ -18,9 +18,10 @@ from ...utils import classproperty
18
18
  from .core import DataFrameUnaryUfunc
19
19
 
20
20
 
21
- class DataFrameAround(DataFrameUnaryUfunc):
21
+ class DataFrameRound(DataFrameUnaryUfunc):
22
22
  _op_type_ = opcodes.AROUND
23
- _func_name = "around"
23
+ _func_name = "round"
24
+ _legacy_name = "DataFrameAround" # since v2.3.0
24
25
 
25
26
  decimals = Int32Field("decimals", default=None)
26
27
 
@@ -34,17 +35,20 @@ class DataFrameAround(DataFrameUnaryUfunc):
34
35
  return TensorAround
35
36
 
36
37
 
37
- def around(df, decimals=0, *args, **kwargs):
38
+ def round(df, decimals=0, *args, **kwargs):
38
39
  if len(args) > 0:
39
40
  raise TypeError(
40
41
  f"round() takes 0 positional arguments but {len(args)} was given"
41
42
  )
42
- op = DataFrameAround(decimals=decimals, **kwargs)
43
+ op = DataFrameRound(decimals=decimals, **kwargs)
43
44
  return op(df)
44
45
 
45
46
 
46
- # FIXME Series input of decimals not supported yet
47
- around.__frame_doc__ = """
47
+ # keep for import compatibility
48
+ DataFrameAround = DataFrameRound
49
+
50
+
51
+ round.__frame_doc__ = """
48
52
  Round a DataFrame to a variable number of decimal places.
49
53
 
50
54
  Parameters
@@ -108,7 +112,7 @@ places as value
108
112
  2 0.7 0.0
109
113
  3 0.2 0.0
110
114
  """
111
- around.__series_doc__ = """
115
+ round.__series_doc__ = """
112
116
  Round each value in a Series to the given number of decimals.
113
117
 
114
118
  Parameters