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,190 @@
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
+
19
+ from ... import opcodes
20
+ from ...core import ExecutableTuple
21
+ from ...lib.sparse.core import get_array_module
22
+ from ...serialization.serializables import AnyField, Int32Field
23
+ from ...typing_ import EntityType
24
+ from ..core import Tensor
25
+ from ..datasource import tensor as astensor
26
+ from ..operators import TensorHasInput, TensorOperatorMixin
27
+ from ..utils import calc_sliced_size
28
+
29
+
30
+ class TensorSplit(TensorHasInput, TensorOperatorMixin):
31
+ _op_type_ = opcodes.ARRAY_SPLIT
32
+
33
+ indices_or_sections = AnyField("indices_or_sections", default=None)
34
+ axis = Int32Field("axis", default=None)
35
+
36
+ @property
37
+ def output_limit(self):
38
+ return float("inf")
39
+
40
+ @classmethod
41
+ def _set_inputs(cls, op: "TensorSplit", inputs: List[EntityType]):
42
+ super()._set_inputs(op, inputs)
43
+ if len(inputs) > 1:
44
+ op.indices_or_sections = inputs[1]
45
+
46
+ def __call__(self, a, indices_or_sections, is_split=False):
47
+ axis = self.axis
48
+ size = a.shape[axis]
49
+ if np.isnan(size):
50
+ raise ValueError(
51
+ "cannot split array with unknown shape, "
52
+ "call `.execute()` on input tensor first"
53
+ )
54
+
55
+ if (
56
+ isinstance(indices_or_sections, Tensor)
57
+ and hasattr(indices_or_sections.op, "data")
58
+ and indices_or_sections.op.data is not None
59
+ ):
60
+ indices_or_sections = indices_or_sections.op.data
61
+
62
+ try:
63
+ indices_or_sections = int(indices_or_sections)
64
+ if is_split:
65
+ if size % indices_or_sections:
66
+ raise ValueError(
67
+ "tensor split does not result in an equal division"
68
+ )
69
+ nparts = indices_or_sections
70
+ nsplit = (size // indices_or_sections,) * nparts
71
+ else:
72
+ nparts = indices_or_sections
73
+ if size % indices_or_sections == 0:
74
+ nsplit = (size // indices_or_sections,) * nparts
75
+ else:
76
+ nsplit = (size // indices_or_sections + 1,) * (
77
+ size % indices_or_sections
78
+ ) + (size // indices_or_sections,) * (
79
+ size - size % indices_or_sections
80
+ )
81
+ except TypeError:
82
+ if isinstance(indices_or_sections, Tensor):
83
+ nparts = indices_or_sections.shape[0] + 1
84
+ nsplit = (np.nan,) * nparts
85
+ else:
86
+ ind = indices_or_sections = get_array_module(
87
+ indices_or_sections
88
+ ).asarray(indices_or_sections)
89
+ if indices_or_sections.ndim != 1 or not np.issubdtype(
90
+ indices_or_sections.dtype, np.integer
91
+ ):
92
+ raise TypeError("slice indices must be integers or None")
93
+ nparts = indices_or_sections.shape[0] + 1
94
+ get = lambda i: None if i < 0 or i >= len(ind) else ind[i]
95
+ nsplit = [
96
+ calc_sliced_size(size, slice(get(j - 1), get(j)))
97
+ for j in range(nparts)
98
+ ]
99
+
100
+ inputs = [a]
101
+ if isinstance(indices_or_sections, Tensor):
102
+ inputs.append(indices_or_sections)
103
+ else:
104
+ self.indices_or_sections = indices_or_sections
105
+
106
+ kws = [
107
+ {
108
+ "i": i,
109
+ "shape": a.shape[:axis] + (nsplit[i],) + a.shape[axis + 1 :],
110
+ "order": a.order,
111
+ }
112
+ for i in range(nparts)
113
+ ]
114
+ return ExecutableTuple(self.new_tensors(inputs, kws=kws, output_limit=nparts))
115
+
116
+
117
+ def _split(a, indices_or_sections, axis=0, is_split=False):
118
+ op = TensorSplit(axis=axis, dtype=a.dtype)
119
+ return op(a, indices_or_sections, is_split=is_split)
120
+
121
+
122
+ def split(ary, indices_or_sections, axis=0):
123
+ """
124
+ Split a tensor into multiple sub-tensors.
125
+
126
+ Parameters
127
+ ----------
128
+ ary : Tensor
129
+ Tensor to be divided into sub-tensors.
130
+ indices_or_sections : int or 1-D tensor
131
+ If `indices_or_sections` is an integer, N, the array will be divided
132
+ into N equal tensors along `axis`. If such a split is not possible,
133
+ an error is raised.
134
+
135
+ If `indices_or_sections` is a 1-D tensor of sorted integers, the entries
136
+ indicate where along `axis` the array is split. For example,
137
+ ``[2, 3]`` would, for ``axis=0``, result in
138
+
139
+ - ary[:2]
140
+ - ary[2:3]
141
+ - ary[3:]
142
+
143
+ If an index exceeds the dimension of the tensor along `axis`,
144
+ an empty sub-tensor is returned correspondingly.
145
+ axis : int, optional
146
+ The axis along which to split, default is 0.
147
+
148
+ Returns
149
+ -------
150
+ sub-tensors : list of Tensors
151
+ A list of sub-tensors.
152
+
153
+ Raises
154
+ ------
155
+ ValueError
156
+ If `indices_or_sections` is given as an integer, but
157
+ a split does not result in equal division.
158
+
159
+ See Also
160
+ --------
161
+ array_split : Split a tensor into multiple sub-tensors of equal or
162
+ near-equal size. Does not raise an exception if
163
+ an equal division cannot be made.
164
+ hsplit : Split into multiple sub-arrays horizontally (column-wise).
165
+ vsplit : Split tensor into multiple sub-tensors vertically (row wise).
166
+ dsplit : Split tensor into multiple sub-tensors along the 3rd axis (depth).
167
+ concatenate : Join a sequence of tensors along an existing axis.
168
+ stack : Join a sequence of tensors along a new axis.
169
+ hstack : Stack tensors in sequence horizontally (column wise).
170
+ vstack : Stack tensors in sequence vertically (row wise).
171
+ dstack : Stack tensors in sequence depth wise (along third dimension).
172
+
173
+ Examples
174
+ --------
175
+ >>> import maxframe.tensor as mt
176
+
177
+ >>> x = mt.arange(9.0)
178
+ >>> mt.split(x, 3).execute()
179
+ [array([ 0., 1., 2.]), array([ 3., 4., 5.]), array([ 6., 7., 8.])]
180
+
181
+ >>> x = mt.arange(8.0)
182
+ >>> mt.split(x, [3, 5, 6, 10]).execute()
183
+ [array([ 0., 1., 2.]),
184
+ array([ 3., 4.]),
185
+ array([ 5.]),
186
+ array([ 6., 7.]),
187
+ array([], dtype=float64)]
188
+
189
+ """
190
+ return _split(astensor(ary), indices_or_sections, axis=axis, is_split=True)
@@ -0,0 +1,109 @@
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
+
18
+ def tile(A, reps):
19
+ """
20
+ Construct a tensor by repeating A the number of times given by reps.
21
+
22
+ If `reps` has length ``d``, the result will have dimension of
23
+ ``max(d, A.ndim)``.
24
+
25
+ If ``A.ndim < d``, `A` is promoted to be d-dimensional by prepending new
26
+ axes. So a shape (3,) array is promoted to (1, 3) for 2-D replication,
27
+ or shape (1, 1, 3) for 3-D replication. If this is not the desired
28
+ behavior, promote `A` to d-dimensions manually before calling this
29
+ function.
30
+
31
+ If ``A.ndim > d``, `reps` is promoted to `A`.ndim by prepending 1's to it.
32
+ Thus for an `A` of shape (2, 3, 4, 5), a `reps` of (2, 2) is treated as
33
+ (1, 1, 2, 2).
34
+
35
+ Note : Although tile may be used for broadcasting, it is strongly
36
+ recommended to use MaxFrame's broadcasting operations and functions.
37
+
38
+ Parameters
39
+ ----------
40
+ A : array_like
41
+ The input tensor.
42
+ reps : array_like
43
+ The number of repetitions of `A` along each axis.
44
+
45
+ Returns
46
+ -------
47
+ c : Tensor
48
+ The tiled output tensor.
49
+
50
+ See Also
51
+ --------
52
+ repeat : Repeat elements of a tensor.
53
+ broadcast_to : Broadcast a tensor to a new shape
54
+
55
+ Examples
56
+ --------
57
+ >>> import maxframe.tensor as mt
58
+
59
+ >>> a = mt.array([0, 1, 2])
60
+ >>> mt.tile(a, 2).execute()
61
+ array([0, 1, 2, 0, 1, 2])
62
+ >>> mt.tile(a, (2, 2)).execute()
63
+ array([[0, 1, 2, 0, 1, 2],
64
+ [0, 1, 2, 0, 1, 2]])
65
+ >>> mt.tile(a, (2, 1, 2)).execute()
66
+ array([[[0, 1, 2, 0, 1, 2]],
67
+ [[0, 1, 2, 0, 1, 2]]])
68
+
69
+ >>> b = mt.array([[1, 2], [3, 4]])
70
+ >>> mt.tile(b, 2).execute()
71
+ array([[1, 2, 1, 2],
72
+ [3, 4, 3, 4]])
73
+ >>> mt.tile(b, (2, 1)).execute()
74
+ array([[1, 2],
75
+ [3, 4],
76
+ [1, 2],
77
+ [3, 4]])
78
+
79
+ >>> c = mt.array([1,2,3,4])
80
+ >>> mt.tile(c,(4,1)).execute()
81
+ array([[1, 2, 3, 4],
82
+ [1, 2, 3, 4],
83
+ [1, 2, 3, 4],
84
+ [1, 2, 3, 4]])
85
+ """
86
+ from ..merge import concatenate
87
+
88
+ try:
89
+ tup = tuple(reps)
90
+ except TypeError:
91
+ tup = (reps,)
92
+
93
+ d = len(tup)
94
+ if A.ndim < d:
95
+ A = A[tuple(np.newaxis for _ in range(d - A.ndim))]
96
+ elif A.ndim > d:
97
+ tup = (1,) * (A.ndim - d) + tup
98
+
99
+ a = A
100
+ for axis, rep in enumerate(tup):
101
+ if rep == 0:
102
+ slc = (slice(None),) * axis + (slice(0),)
103
+ a = a[slc]
104
+ elif rep < 0:
105
+ raise ValueError("negative dimensions are not allowed")
106
+ elif rep > 1:
107
+ a = concatenate([a] * rep, axis=axis)
108
+
109
+ return a
@@ -0,0 +1,74 @@
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 .split import split
16
+
17
+
18
+ def vsplit(a, indices_or_sections):
19
+ """
20
+ Split a tensor into multiple sub-tensors vertically (row-wise).
21
+
22
+ Please refer to the ``split`` documentation. ``vsplit`` is equivalent
23
+ to ``split`` with `axis=0` (default), the tensor is always split along the
24
+ first axis regardless of the tensor dimension.
25
+
26
+ See Also
27
+ --------
28
+ split : Split a tensor into multiple sub-tensors of equal size.
29
+
30
+ Examples
31
+ --------
32
+ >>> import maxframe.tensor as mt
33
+
34
+ >>> x = mt.arange(16.0).reshape(4, 4)
35
+ >>> x.execute()
36
+ array([[ 0., 1., 2., 3.],
37
+ [ 4., 5., 6., 7.],
38
+ [ 8., 9., 10., 11.],
39
+ [ 12., 13., 14., 15.]])
40
+ >>> mt.vsplit(x, 2).execute()
41
+ [array([[ 0., 1., 2., 3.],
42
+ [ 4., 5., 6., 7.]]),
43
+ array([[ 8., 9., 10., 11.],
44
+ [ 12., 13., 14., 15.]])]
45
+ >>> mt.vsplit(x, mt.array([3, 6])).execute()
46
+ [array([[ 0., 1., 2., 3.],
47
+ [ 4., 5., 6., 7.],
48
+ [ 8., 9., 10., 11.]]),
49
+ array([[ 12., 13., 14., 15.]]),
50
+ array([], dtype=float64)]
51
+
52
+ With a higher dimensional tensor the split is still along the first axis.
53
+
54
+ >>> x = mt.arange(8.0).reshape(2, 2, 2)
55
+ >>> x.execute()
56
+ array([[[ 0., 1.],
57
+ [ 2., 3.]],
58
+ [[ 4., 5.],
59
+ [ 6., 7.]]])
60
+ >>> mt.vsplit(x, 2).execute()
61
+ [array([[[ 0., 1.],
62
+ [ 2., 3.]]]),
63
+ array([[[ 4., 5.],
64
+ [ 6., 7.]]])]
65
+
66
+ """
67
+ from ..datasource import tensor as astensor
68
+
69
+ ary = a
70
+ a = astensor(a)
71
+
72
+ if a.ndim < 2:
73
+ raise ValueError("vsplit only works on tensors of 2 or more dimensions")
74
+ return split(ary, indices_or_sections, 0)
@@ -48,6 +48,7 @@ def array_equal(a1, a2):
48
48
  False
49
49
 
50
50
  """
51
+ from ..arithmetic import equal
51
52
  from ..datasource import tensor as astensor
52
53
  from ..datasource.scalar import scalar
53
54
  from .all import all
@@ -59,4 +60,4 @@ def array_equal(a1, a2):
59
60
 
60
61
  if a1.shape != a2.shape:
61
62
  return scalar(False)
62
- return all(astensor(a1 == a2))
63
+ return all(astensor(equal(a1, a2, magic=True)))
@@ -12,5 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ from .argpartition import argpartition
15
16
  from .argsort import argsort
17
+ from .partition import partition
16
18
  from .sort import sort
@@ -0,0 +1,98 @@
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 .partition import TensorPartition, _validate_partition_arguments
16
+
17
+
18
+ def argpartition(a, kth, axis=-1, kind="introselect", order=None, **kw):
19
+ """
20
+ Perform an indirect partition along the given axis using the
21
+ algorithm specified by the `kind` keyword. It returns an array of
22
+ indices of the same shape as `a` that index data along the given
23
+ axis in partitioned order.
24
+
25
+ .. versionadded:: 1.8.0
26
+
27
+ Parameters
28
+ ----------
29
+ a : array_like
30
+ Tensor to sort.
31
+ kth : int or sequence of ints
32
+ Element index to partition by. The k-th element will be in its
33
+ final sorted position and all smaller elements will be moved
34
+ before it and all larger elements behind it. The order all
35
+ elements in the partitions is undefined. If provided with a
36
+ sequence of k-th it will partition all of them into their sorted
37
+ position at once.
38
+ axis : int or None, optional
39
+ Axis along which to sort. The default is -1 (the last axis). If
40
+ None, the flattened tensor is used.
41
+ kind : {'introselect'}, optional
42
+ Selection algorithm. Default is 'introselect'
43
+ order : str or list of str, optional
44
+ When `a` is a tensor with fields defined, this argument
45
+ specifies which fields to compare first, second, etc. A single
46
+ field can be specified as a string, and not all fields need be
47
+ specified, but unspecified fields will still be used, in the
48
+ order in which they come up in the dtype, to break ties.
49
+
50
+ Returns
51
+ -------
52
+ index_tensor : Tensor, int
53
+ Tensor of indices that partition `a` along the specified axis.
54
+ If `a` is one-dimensional, ``a[index_tensor]`` yields a partitioned `a`.
55
+ More generally, ``np.take_along_axis(a, index_tensor, axis=a)`` always
56
+ yields the partitioned `a`, irrespective of dimensionality.
57
+
58
+ See Also
59
+ --------
60
+ partition : Describes partition algorithms used.
61
+ Tensor.partition : Inplace partition.
62
+ argsort : Full indirect sort
63
+
64
+ Notes
65
+ -----
66
+ See `partition` for notes on the different selection algorithms.
67
+
68
+ Examples
69
+ --------
70
+ One dimensional tensor:
71
+
72
+ >>> import maxframe.tensor as mt
73
+ >>> x = mt.array([3, 4, 2, 1])
74
+ >>> x[mt.argpartition(x, 3)].execute()
75
+ array([2, 1, 3, 4])
76
+ >>> x[mt.argpartition(x, (1, 3))].execute()
77
+ array([1, 2, 3, 4])
78
+
79
+ >>> x = [3, 4, 2, 1]
80
+ >>> mt.array(x)[mt.argpartition(x, 3)].execute()
81
+ array([2, 1, 3, 4])
82
+
83
+ """
84
+ a, kth, axis, kind, order, need_align = _validate_partition_arguments(
85
+ a, kth, axis, kind, order, kw
86
+ )
87
+ op = TensorPartition(
88
+ kth=kth,
89
+ axis=axis,
90
+ kind=kind,
91
+ order=order,
92
+ need_align=need_align,
93
+ return_value=False,
94
+ return_indices=True,
95
+ dtype=a.dtype,
96
+ gpu=a.op.gpu,
97
+ )
98
+ return op(a, kth)