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,249 @@
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 collections.abc import Iterable
16
+
17
+ import numpy as np
18
+
19
+ from ... import opcodes
20
+ from ...serialization.serializables import AnyField, BoolField, FieldTypes, TupleField
21
+ from ..arithmetic import sqrt
22
+ from ..datasource import tensor as astensor
23
+ from ..operators import TensorHasInput, TensorOperatorMixin
24
+ from ..utils import validate_axis
25
+ from .svd import svd
26
+
27
+
28
+ class TensorNorm(TensorHasInput, TensorOperatorMixin):
29
+ _op_type_ = opcodes.NORM
30
+
31
+ ord = AnyField("ord", default=None)
32
+ axis = TupleField("axis", FieldTypes.int32, default=0)
33
+ keepdims = BoolField("keepdims", default=None)
34
+
35
+ def __call__(self, x):
36
+ r = x.astype(self.dtype)
37
+ shape = self._norm(r, self.ord, self.axis, self.keepdims).shape
38
+ return self.new_tensor([x], shape)
39
+
40
+ @staticmethod
41
+ def _norm(r, ord, axis, keepdims):
42
+ if ord is None:
43
+ return sqrt((abs(r) ** 2).sum(axis=axis, keepdims=keepdims))
44
+ elif ord == "nuc":
45
+ if len(axis) == 1:
46
+ raise ValueError("Invalid norm order for vectors.")
47
+ return svd(r)[1][np.newaxis].sum(keepdims=keepdims)
48
+ elif ord == np.inf:
49
+ if r.ndim > 2:
50
+ raise ValueError("Improper number of dimensions to norm.")
51
+ r = abs(r)
52
+ if len(axis) == 1:
53
+ return r.max(axis=axis, keepdims=keepdims)
54
+ else:
55
+ return r.sum(axis=axis[1], keepdims=keepdims).max(keepdims=keepdims)
56
+ elif ord == -np.inf:
57
+ if r.ndim > 2:
58
+ raise ValueError("Improper number of dimensions to norm.")
59
+ r = abs(r)
60
+ if len(axis) == 1:
61
+ return r.min(axis=axis, keepdims=keepdims)
62
+ else:
63
+ return r.sum(axis=axis[1], keepdims=keepdims).min(keepdims=keepdims)
64
+ elif ord == 0:
65
+ if r.ndim > 2:
66
+ raise ValueError("Improper number of dimensions to norm.")
67
+ if len(axis) == 2:
68
+ raise ValueError("Invalid norm order for matrices.")
69
+ return (r != 0).astype(r.dtype).sum(axis=axis, keepdims=keepdims)
70
+ elif ord == 1:
71
+ if r.ndim > 2:
72
+ raise ValueError("Improper number of dimensions to norm.")
73
+ r = abs(r)
74
+ if len(axis) == 1:
75
+ return r.sum(axis=axis, keepdims=keepdims)
76
+ else:
77
+ return r.sum(axis=axis[0], keepdims=keepdims).max(keepdims=keepdims)
78
+ elif ord == -1 and len(axis) == 2:
79
+ if r.ndim > 2:
80
+ raise ValueError("Improper number of dimensions to norm.")
81
+ return abs(r).sum(axis=axis[0], keepdims=keepdims).min(keepdims=keepdims)
82
+ elif ord == 2 and len(axis) == 2:
83
+ return svd(r)[1][np.newaxis].max(keepdims=keepdims)
84
+ elif ord == -2 and len(axis) == 2:
85
+ return svd(r)[1][np.newaxis].min(keepdims=keepdims)
86
+ else:
87
+ if len(axis) == 2:
88
+ raise ValueError("Invalid norm order for matrices.")
89
+
90
+ return (abs(r) ** ord).sum(axis=axis, keepdims=keepdims) ** (1.0 / ord)
91
+
92
+
93
+ def norm(x, ord=None, axis=None, keepdims=False):
94
+ r"""
95
+ Matrix or vector norm.
96
+
97
+ This function is able to return one of eight different matrix norms,
98
+ or one of an infinite number of vector norms (described below), depending
99
+ on the value of the ``ord`` parameter.
100
+
101
+ Parameters
102
+ ----------
103
+ x : array_like
104
+ Input tensor. If `axis` is None, `x` must be 1-D or 2-D.
105
+ ord : {non-zero int, inf, -inf, 'fro', 'nuc'}, optional
106
+ Order of the norm (see table under ``Notes``). inf means maxframe tensor's
107
+ `inf` object.
108
+ axis : {int, 2-tuple of ints, None}, optional
109
+ If `axis` is an integer, it specifies the axis of `x` along which to
110
+ compute the vector norms. If `axis` is a 2-tuple, it specifies the
111
+ axes that hold 2-D matrices, and the matrix norms of these matrices
112
+ are computed. If `axis` is None then either a vector norm (when `x`
113
+ is 1-D) or a matrix norm (when `x` is 2-D) is returned.
114
+ keepdims : bool, optional
115
+ If this is set to True, the axes which are normed over are left in the
116
+ result as dimensions with size one. With this option the result will
117
+ broadcast correctly against the original `x`.
118
+
119
+ Returns
120
+ -------
121
+ n : float or Tensor
122
+ Norm of the matrix or vector(s).
123
+
124
+ Notes
125
+ -----
126
+ For values of ``ord <= 0``, the result is, strictly speaking, not a
127
+ mathematical 'norm', but it may still be useful for various numerical
128
+ purposes.
129
+
130
+ The following norms can be calculated:
131
+
132
+ ===== ============================ ==========================
133
+ ord norm for matrices norm for vectors
134
+ ===== ============================ ==========================
135
+ None Frobenius norm 2-norm
136
+ 'fro' Frobenius norm --
137
+ 'nuc' nuclear norm --
138
+ inf max(sum(abs(x), axis=1)) max(abs(x))
139
+ -inf min(sum(abs(x), axis=1)) min(abs(x))
140
+ 0 -- sum(x != 0)
141
+ 1 max(sum(abs(x), axis=0)) as below
142
+ -1 min(sum(abs(x), axis=0)) as below
143
+ 2 2-norm (largest sing. value) as below
144
+ -2 smallest singular value as below
145
+ other -- sum(abs(x)**ord)**(1./ord)
146
+ ===== ============================ ==========================
147
+
148
+ The Frobenius norm is given by [1]_:
149
+
150
+ :math:`||A||_F = [\\sum_{i,j} abs(a_{i,j})^2]^{1/2}`
151
+
152
+ The nuclear norm is the sum of the singular values.
153
+
154
+ References
155
+ ----------
156
+ .. [1] G. H. Golub and C. F. Van Loan, *Matrix Computations*,
157
+ Baltimore, MD, Johns Hopkins University Press, 1985, pg. 15
158
+
159
+ Examples
160
+ --------
161
+ >>> from maxframe.tensor import linalg as LA
162
+ >>> import maxframe.tensor as mt
163
+ >>> a = mt.arange(9) - 4
164
+ >>> a.execute()
165
+ array([-4, -3, -2, -1, 0, 1, 2, 3, 4])
166
+ >>> b = a.reshape((3, 3))
167
+ >>> b.execute()
168
+ array([[-4, -3, -2],
169
+ [-1, 0, 1],
170
+ [ 2, 3, 4]])
171
+
172
+ >>> LA.norm(a).execute()
173
+ 7.745966692414834
174
+ >>> LA.norm(b).execute()
175
+ 7.745966692414834
176
+ >>> LA.norm(b, 'fro').execute()
177
+ 7.745966692414834
178
+ >>> LA.norm(a, mt.inf).execute()
179
+ 4.0
180
+ >>> LA.norm(b, mt.inf).execute()
181
+ 9.0
182
+ >>> LA.norm(a, -mt.inf).execute()
183
+ 0.0
184
+ >>> LA.norm(b, -mt.inf).execute()
185
+ 2.0
186
+
187
+ >>> LA.norm(a, 1).execute()
188
+ 20.0
189
+ >>> LA.norm(b, 1).execute()
190
+ 7.0
191
+ >>> LA.norm(a, -1).execute()
192
+ 0.0
193
+ >>> LA.norm(b, -1).execute()
194
+ 6.0
195
+ >>> LA.norm(a, 2).execute()
196
+ 7.745966692414834
197
+ >>> LA.norm(b, 2).execute()
198
+ 7.3484692283495345
199
+
200
+ >>> LA.norm(a, -2).execute()
201
+ 0.0
202
+ >>> LA.norm(b, -2).execute()
203
+ 4.351066026358965e-18
204
+ >>> LA.norm(a, 3).execute()
205
+ 5.8480354764257312
206
+ >>> LA.norm(a, -3).execute()
207
+ 0.0
208
+
209
+ Using the `axis` argument to compute vector norms:
210
+
211
+ >>> c = mt.array([[ 1, 2, 3],
212
+ ... [-1, 1, 4]])
213
+ >>> LA.norm(c, axis=0).execute()
214
+ array([ 1.41421356, 2.23606798, 5. ])
215
+ >>> LA.norm(c, axis=1).execute()
216
+ array([ 3.74165739, 4.24264069])
217
+ >>> LA.norm(c, ord=1, axis=1).execute()
218
+ array([ 6., 6.])
219
+
220
+ Using the `axis` argument to compute matrix norms:
221
+
222
+ >>> m = mt.arange(8).reshape(2,2,2)
223
+ >>> LA.norm(m, axis=(1,2)).execute()
224
+ array([ 3.74165739, 11.22497216])
225
+ >>> LA.norm(m[0, :, :]).execute(), LA.norm(m[1, :, :]).execute()
226
+ (3.7416573867739413, 11.224972160321824)
227
+
228
+ """
229
+ x = astensor(x)
230
+ ndim = x.ndim
231
+
232
+ if ord == "fro":
233
+ ord = None
234
+ if axis is not None:
235
+ if isinstance(axis, Iterable):
236
+ axis = tuple(validate_axis(ndim, a) for a in axis)
237
+ else:
238
+ axis = (validate_axis(ndim, axis),)
239
+ else:
240
+ axis = tuple(range(x.ndim))
241
+
242
+ op = TensorNorm(
243
+ ord=ord,
244
+ axis=axis,
245
+ keepdims=keepdims,
246
+ dtype=np.result_type(x.dtype, np.float_),
247
+ sparse=x.issparse(),
248
+ )
249
+ return op(x)
@@ -0,0 +1,72 @@
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 ..datasource import tensor as astensor
16
+ from .cholesky import cholesky
17
+ from .lu import lu
18
+ from .solve_triangular import solve_triangular
19
+
20
+
21
+ def solve(a, b, sym_pos=False, sparse=None):
22
+ """
23
+ Solve the equation ``a x = b`` for ``x``.
24
+
25
+ Parameters
26
+ ----------
27
+ a : (M, M) array_like
28
+ A square matrix.
29
+ b : (M,) or (M, N) array_like
30
+ Right-hand side matrix in ``a x = b``.
31
+ sym_pos : bool
32
+ Assume `a` is symmetric and positive definite. If ``True``, use Cholesky
33
+ decomposition.
34
+ sparse: bool, optional
35
+ Return sparse value or not.
36
+
37
+ Returns
38
+ -------
39
+ x : (M,) or (M, N) ndarray
40
+ Solution to the system ``a x = b``. Shape of the return matches the
41
+ shape of `b`.
42
+
43
+ Raises
44
+ ------
45
+ LinAlgError
46
+ If `a` is singular.
47
+
48
+ Examples
49
+ --------
50
+ Given `a` and `b`, solve for `x`:
51
+
52
+ >>> import maxframe.tensor as mt
53
+ >>> a = mt.array([[3, 2, 0], [1, -1, 0], [0, 5, 1]])
54
+ >>> b = mt.array([2, 4, -1])
55
+ >>> x = mt.linalg.solve(a, b)
56
+ >>> x.execute()
57
+ array([ 2., -2., 9.])
58
+
59
+ >>> mt.dot(a, x).execute() # Check the result
60
+ array([ 2., 4., -1.])
61
+ """
62
+ a = astensor(a)
63
+ b = astensor(b)
64
+ if sym_pos:
65
+ l_ = cholesky(a, lower=True)
66
+ u = l_.T
67
+ else:
68
+ p, l_, u = lu(a)
69
+ b = p.T.dot(b)
70
+ sparse = sparse if sparse is not None else a.issparse()
71
+ uy = solve_triangular(l_, b, lower=True, sparse=sparse)
72
+ return solve_triangular(u, uy, sparse=sparse)
@@ -30,8 +30,8 @@ class TensorSolveTriangular(TensorOperator, TensorOperatorMixin):
30
30
 
31
31
  a = KeyField("a")
32
32
  b = KeyField("b")
33
- lower = BoolField("lower")
34
- strict = BoolField("strict")
33
+ lower = BoolField("lower", default=None)
34
+ strict = BoolField("strict", default=None)
35
35
 
36
36
  @classmethod
37
37
  def _set_inputs(cls, op: "TensorSolveTriangular", inputs: List[EntityData]):
@@ -0,0 +1,113 @@
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 normalize_axis_tuple
16
+
17
+
18
+ def vector_norm(x, *, axis=None, keepdims=False, ord=2):
19
+ """
20
+ Computes the vector norm of a vector (or batch of vectors) ``x``.
21
+
22
+ This function is Array API compatible.
23
+
24
+ Parameters
25
+ ----------
26
+ x : array_like
27
+ Input array.
28
+ axis : {None, int, 2-tuple of ints}, optional
29
+ If an integer, ``axis`` specifies the axis (dimension) along which
30
+ to compute vector norms. If an n-tuple, ``axis`` specifies the axes
31
+ (dimensions) along which to compute batched vector norms. If ``None``,
32
+ the vector norm must be computed over all array values (i.e.,
33
+ equivalent to computing the vector norm of a flattened array).
34
+ Default: ``None``.
35
+ keepdims : bool, optional
36
+ If this is set to True, the axes which are normed over are left in
37
+ the result as dimensions with size one. Default: False.
38
+ ord : {int, float, inf, -inf}, optional
39
+ The order of the norm. For details see the table under ``Notes``
40
+ in `numpy.linalg.norm`.
41
+
42
+ See Also
43
+ --------
44
+ numpy.linalg.norm : Generic norm function
45
+
46
+ Examples
47
+ --------
48
+ >>> from numpy import linalg as LA
49
+ >>> a = np.arange(9) + 1
50
+ >>> a
51
+ array([1, 2, 3, 4, 5, 6, 7, 8, 9])
52
+ >>> b = a.reshape((3, 3))
53
+ >>> b
54
+ array([[1, 2, 3],
55
+ [4, 5, 6],
56
+ [7, 8, 9]])
57
+
58
+ >>> LA.vector_norm(b)
59
+ 16.881943016134134
60
+ >>> LA.vector_norm(b, ord=np.inf)
61
+ 9.0
62
+ >>> LA.vector_norm(b, ord=-np.inf)
63
+ 1.0
64
+
65
+ >>> LA.vector_norm(b, ord=0)
66
+ 9.0
67
+ >>> LA.vector_norm(b, ord=1)
68
+ 45.0
69
+ >>> LA.vector_norm(b, ord=-1)
70
+ 0.3534857623790153
71
+ >>> LA.vector_norm(b, ord=2)
72
+ 16.881943016134134
73
+ >>> LA.vector_norm(b, ord=-2)
74
+ 0.8058837395885292
75
+
76
+ """
77
+ from ..datasource.array import asarray
78
+ from ..misc import transpose
79
+ from ..reduction import prod
80
+ from .norm import norm
81
+
82
+ x = asarray(x)
83
+ shape = list(x.shape)
84
+ if axis is None:
85
+ # Note: np.linalg.norm() doesn't handle 0-D arrays
86
+ x = x.ravel()
87
+ _axis = 0
88
+ elif isinstance(axis, tuple):
89
+ # Note: The axis argument supports any number of axes, whereas
90
+ # np.linalg.norm() only supports a single axis for vector norm.
91
+ normalized_axis = normalize_axis_tuple(axis, x.ndim)
92
+ rest = tuple(i for i in range(x.ndim) if i not in normalized_axis)
93
+ newshape = axis + rest
94
+ x = transpose(x, newshape).reshape(
95
+ (prod([x.shape[i] for i in axis], dtype=int), *[x.shape[i] for i in rest])
96
+ )
97
+ _axis = 0
98
+ else:
99
+ _axis = axis
100
+
101
+ res = norm(x, axis=_axis, ord=ord)
102
+
103
+ if keepdims:
104
+ # We can't reuse np.linalg.norm(keepdims) because of the reshape hacks
105
+ # above to avoid matrix norm logic.
106
+ _axis = normalize_axis_tuple(
107
+ range(len(shape)) if axis is None else axis, len(shape)
108
+ )
109
+ for i in _axis:
110
+ shape[i] = 1
111
+ res = res.reshape(tuple(shape))
112
+
113
+ return res
@@ -12,26 +12,47 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ from .argwhere import TensorArgwhere, argwhere
16
+ from .array_split import array_split
15
17
  from .astype import TensorAstype, astype
16
18
  from .atleast_1d import atleast_1d
17
19
  from .atleast_2d import atleast_2d
18
20
  from .atleast_3d import atleast_3d
21
+ from .broadcast_arrays import broadcast_arrays
19
22
  from .broadcast_to import TensorBroadcastTo, broadcast_to
20
23
  from .copy import copy
24
+ from .copyto import TensorCopyTo, copyto
25
+ from .delete import TensorDelete, delete
21
26
  from .diff import TensorDiff, diff
27
+ from .dsplit import dsplit
28
+ from .ediff1d import ediff1d
29
+ from .expand_dims import expand_dims
22
30
  from .flatten import flatten
31
+ from .flip import flip
32
+ from .fliplr import fliplr
33
+ from .flipud import flipud
34
+ from .hsplit import hsplit
23
35
  from .in1d import in1d
36
+ from .insert import insert
24
37
  from .isin import TensorIsIn, isin
38
+ from .moveaxis import moveaxis
25
39
  from .ndim import ndim
26
40
  from .ravel import ravel
27
41
  from .repeat import TensorRepeat, repeat
42
+ from .result_type import result_type
43
+ from .roll import roll
44
+ from .rollaxis import rollaxis
28
45
  from .searchsorted import TensorSearchsorted, searchsorted
29
46
  from .setdiff1d import setdiff1d
47
+ from .shape import TensorGetShape, shape
48
+ from .split import TensorSplit, split
30
49
  from .squeeze import TensorSqueeze, squeeze
31
50
  from .swapaxes import TensorSwapAxes, swapaxes
51
+ from .tile import tile
32
52
  from .transpose import TensorTranspose, transpose
33
53
  from .trapezoid import TensorTrapezoid, trapezoid
34
54
  from .unique import TensorUnique, unique
55
+ from .vsplit import vsplit
35
56
  from .where import TensorWhere, where
36
57
 
37
58
 
@@ -41,8 +62,10 @@ def _install():
41
62
  for cls in (Tensor, TensorData):
42
63
  setattr(cls, "astype", astype)
43
64
  setattr(cls, "flatten", flatten)
44
- setattr(cls, "swapaxes", swapaxes)
45
65
  setattr(cls, "ravel", ravel)
66
+ setattr(cls, "repeat", repeat)
67
+ setattr(cls, "squeeze", squeeze)
68
+ setattr(cls, "swapaxes", swapaxes)
46
69
 
47
70
 
48
71
  _install()
@@ -0,0 +1,72 @@
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 ..datasource import tensor as astensor
19
+ from ..operators import TensorHasInput, TensorOperatorMixin
20
+
21
+
22
+ class TensorArgwhere(TensorHasInput, TensorOperatorMixin):
23
+ _op_type_ = opcodes.ARGWHERE
24
+
25
+ def __call__(self, a):
26
+ shape = (np.nan, a.ndim)
27
+ return self.new_tensor([a], shape)
28
+
29
+
30
+ def argwhere(a):
31
+ """
32
+ Find the indices of tensor elements that are non-zero, grouped by element.
33
+
34
+ Parameters
35
+ ----------
36
+ a : array_like
37
+ Input data.
38
+
39
+ Returns
40
+ -------
41
+ index_tensor : Tensor
42
+ Indices of elements that are non-zero. Indices are grouped by element.
43
+
44
+ See Also
45
+ --------
46
+ where, nonzero
47
+
48
+ Notes
49
+ -----
50
+ ``mt.argwhere(a)`` is the same as ``mt.transpose(mt.nonzero(a))``.
51
+
52
+ The output of ``argwhere`` is not suitable for indexing tensors.
53
+ For this purpose use ``nonzero(a)`` instead.
54
+
55
+ Examples
56
+ --------
57
+ >>> import maxframe.tensor as mt
58
+
59
+ >>> x = mt.arange(6).reshape(2,3)
60
+ >>> x.execute()
61
+ array([[0, 1, 2],
62
+ [3, 4, 5]])
63
+ >>> mt.argwhere(x>1).execute()
64
+ array([[0, 2],
65
+ [1, 0],
66
+ [1, 1],
67
+ [1, 2]])
68
+
69
+ """
70
+ a = astensor(a).astype(bool, order="A")
71
+ op = TensorArgwhere(dtype=np.dtype(np.intp))
72
+ return op(a)
@@ -0,0 +1,46 @@
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 array_split(a, indices_or_sections, axis=0):
19
+ """
20
+ Split a tensor into multiple sub-tensors.
21
+
22
+ Please refer to the ``split`` documentation. The only difference
23
+ between these functions is that ``array_split`` allows
24
+ `indices_or_sections` to be an integer that does *not* equally
25
+ divide the axis. For a tensor of length l that should be split
26
+ into n sections, it returns l % n sub-arrays of size l//n + 1
27
+ and the rest of size l//n.
28
+
29
+ See Also
30
+ --------
31
+ split : Split tensor into multiple sub-tensors of equal size.
32
+
33
+ Examples
34
+ --------
35
+ >>> import maxframe.tensor as mt
36
+
37
+ >>> x = mt.arange(8.0)
38
+ >>> mt.array_split(x, 3).execute()
39
+ [array([ 0., 1., 2.]), array([ 3., 4., 5.]), array([ 6., 7.])]
40
+
41
+ >>> x = mt.arange(7.0)
42
+ >>> mt.array_split(x, 3).execute()
43
+ [array([ 0., 1., 2.]), array([ 3., 4.]), array([ 5., 6.])]
44
+
45
+ """
46
+ return _split(a, indices_or_sections, axis=axis)
@@ -0,0 +1,57 @@
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 ...core import ExecutableTuple
16
+ from ..datasource import tensor as astensor
17
+ from ..utils import broadcast_shape
18
+ from .broadcast_to import broadcast_to
19
+
20
+
21
+ def broadcast_arrays(*args, **kwargs):
22
+ """
23
+ Broadcast any number of arrays against each other.
24
+
25
+ Parameters
26
+ ----------
27
+ `*args` : array_likes
28
+ The tensors to broadcast.
29
+
30
+ Returns
31
+ -------
32
+ broadcasted : list of tensors
33
+
34
+ Examples
35
+ --------
36
+ >>> import maxframe.tensor as mt
37
+
38
+ >>> x = mt.array([[1,2,3]])
39
+ >>> y = mt.array([[1],[2],[3]])
40
+ >>> mt.broadcast_arrays(x, y).execute()
41
+ [array([[1, 2, 3],
42
+ [1, 2, 3],
43
+ [1, 2, 3]]), array([[1, 1, 1],
44
+ [2, 2, 2],
45
+ [3, 3, 3]])]
46
+
47
+ """
48
+ if kwargs:
49
+ raise TypeError(
50
+ "broadcast_arrays() got an unexpected keyword "
51
+ f"argument {next(iter(kwargs.keys()))!r}"
52
+ )
53
+
54
+ args = [astensor(arg) for arg in args]
55
+
56
+ shape = broadcast_shape(*[arg.shape for arg in args])
57
+ return ExecutableTuple([broadcast_to(a, shape) for a in args])