maxframe 1.3.1__cp38-cp38-macosx_10_9_universal2.whl → 2.0.0b1__cp38-cp38-macosx_10_9_universal2.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 (639) hide show
  1. maxframe/_utils.cpython-38-darwin.so +0 -0
  2. maxframe/_utils.pyi +21 -0
  3. maxframe/_utils.pyx +4 -3
  4. maxframe/codegen/__init__.py +27 -0
  5. maxframe/{codegen.py → codegen/core.py} +49 -43
  6. maxframe/codegen/spe/__init__.py +16 -0
  7. maxframe/codegen/spe/core.py +307 -0
  8. maxframe/codegen/spe/dataframe/__init__.py +37 -0
  9. maxframe/codegen/spe/dataframe/accessors/__init__.py +15 -0
  10. maxframe/codegen/spe/dataframe/accessors/base.py +53 -0
  11. maxframe/codegen/spe/dataframe/accessors/dict_.py +194 -0
  12. maxframe/codegen/spe/dataframe/accessors/list_.py +80 -0
  13. maxframe/codegen/spe/dataframe/arithmetic.py +84 -0
  14. maxframe/codegen/spe/dataframe/datasource.py +181 -0
  15. maxframe/codegen/spe/dataframe/datastore.py +204 -0
  16. maxframe/codegen/spe/dataframe/extensions.py +63 -0
  17. maxframe/codegen/spe/dataframe/fetch.py +26 -0
  18. maxframe/codegen/spe/dataframe/groupby.py +224 -0
  19. maxframe/codegen/spe/dataframe/indexing.py +238 -0
  20. maxframe/codegen/spe/dataframe/merge.py +73 -0
  21. maxframe/codegen/spe/dataframe/misc.py +286 -0
  22. maxframe/codegen/spe/dataframe/missing.py +64 -0
  23. maxframe/codegen/spe/dataframe/reduction.py +160 -0
  24. maxframe/codegen/spe/dataframe/sort.py +83 -0
  25. maxframe/codegen/spe/dataframe/statistics.py +46 -0
  26. maxframe/codegen/spe/dataframe/tests/__init__.py +13 -0
  27. maxframe/codegen/spe/dataframe/tests/accessors/__init__.py +13 -0
  28. maxframe/codegen/spe/dataframe/tests/accessors/test_base.py +33 -0
  29. maxframe/codegen/spe/dataframe/tests/accessors/test_dict.py +310 -0
  30. maxframe/codegen/spe/dataframe/tests/accessors/test_list.py +137 -0
  31. maxframe/codegen/spe/dataframe/tests/indexing/__init__.py +13 -0
  32. maxframe/codegen/spe/dataframe/tests/indexing/conftest.py +58 -0
  33. maxframe/codegen/spe/dataframe/tests/indexing/test_getitem.py +124 -0
  34. maxframe/codegen/spe/dataframe/tests/indexing/test_iloc.py +76 -0
  35. maxframe/codegen/spe/dataframe/tests/indexing/test_indexing.py +39 -0
  36. maxframe/codegen/spe/dataframe/tests/indexing/test_rename.py +51 -0
  37. maxframe/codegen/spe/dataframe/tests/indexing/test_reset_index.py +88 -0
  38. maxframe/codegen/spe/dataframe/tests/indexing/test_sample.py +45 -0
  39. maxframe/codegen/spe/dataframe/tests/indexing/test_set_axis.py +45 -0
  40. maxframe/codegen/spe/dataframe/tests/indexing/test_set_index.py +41 -0
  41. maxframe/codegen/spe/dataframe/tests/indexing/test_setitem.py +46 -0
  42. maxframe/codegen/spe/dataframe/tests/misc/__init__.py +13 -0
  43. maxframe/codegen/spe/dataframe/tests/misc/test_apply.py +133 -0
  44. maxframe/codegen/spe/dataframe/tests/misc/test_drop_duplicates.py +92 -0
  45. maxframe/codegen/spe/dataframe/tests/misc/test_misc.py +234 -0
  46. maxframe/codegen/spe/dataframe/tests/missing/__init__.py +13 -0
  47. maxframe/codegen/spe/dataframe/tests/missing/test_checkna.py +94 -0
  48. maxframe/codegen/spe/dataframe/tests/missing/test_dropna.py +50 -0
  49. maxframe/codegen/spe/dataframe/tests/missing/test_fillna.py +94 -0
  50. maxframe/codegen/spe/dataframe/tests/missing/test_replace.py +45 -0
  51. maxframe/codegen/spe/dataframe/tests/test_arithmetic.py +73 -0
  52. maxframe/codegen/spe/dataframe/tests/test_datasource.py +184 -0
  53. maxframe/codegen/spe/dataframe/tests/test_datastore.py +200 -0
  54. maxframe/codegen/spe/dataframe/tests/test_extensions.py +88 -0
  55. maxframe/codegen/spe/dataframe/tests/test_groupby.py +225 -0
  56. maxframe/codegen/spe/dataframe/tests/test_merge.py +400 -0
  57. maxframe/codegen/spe/dataframe/tests/test_reduction.py +104 -0
  58. maxframe/codegen/spe/dataframe/tests/test_sort.py +159 -0
  59. maxframe/codegen/spe/dataframe/tests/test_statistics.py +70 -0
  60. maxframe/codegen/spe/dataframe/tests/test_tseries.py +29 -0
  61. maxframe/codegen/spe/dataframe/tests/test_value_counts.py +60 -0
  62. maxframe/codegen/spe/dataframe/tests/test_window.py +69 -0
  63. maxframe/codegen/spe/dataframe/tseries.py +46 -0
  64. maxframe/codegen/spe/dataframe/udf.py +62 -0
  65. maxframe/codegen/spe/dataframe/value_counts.py +31 -0
  66. maxframe/codegen/spe/dataframe/window.py +65 -0
  67. maxframe/codegen/spe/learn/__init__.py +15 -0
  68. maxframe/codegen/spe/learn/contrib/__init__.py +15 -0
  69. maxframe/codegen/spe/learn/contrib/lightgbm.py +160 -0
  70. maxframe/codegen/spe/learn/contrib/models.py +41 -0
  71. maxframe/codegen/spe/learn/contrib/pytorch.py +49 -0
  72. maxframe/codegen/spe/learn/contrib/tests/__init__.py +13 -0
  73. maxframe/codegen/spe/learn/contrib/tests/test_lightgbm.py +123 -0
  74. maxframe/codegen/spe/learn/contrib/tests/test_models.py +41 -0
  75. maxframe/codegen/spe/learn/contrib/tests/test_pytorch.py +53 -0
  76. maxframe/codegen/spe/learn/contrib/tests/test_xgboost.py +98 -0
  77. maxframe/codegen/spe/learn/contrib/xgboost.py +152 -0
  78. maxframe/codegen/spe/learn/metrics/__init__.py +15 -0
  79. maxframe/codegen/spe/learn/metrics/_classification.py +120 -0
  80. maxframe/codegen/spe/learn/metrics/tests/__init__.py +13 -0
  81. maxframe/codegen/spe/learn/metrics/tests/test_classification.py +93 -0
  82. maxframe/codegen/spe/learn/model_selection/__init__.py +13 -0
  83. maxframe/codegen/spe/learn/model_selection/tests/__init__.py +13 -0
  84. maxframe/codegen/spe/learn/model_selection/tests/test_split.py +41 -0
  85. maxframe/codegen/spe/learn/preprocessing/__init__.py +15 -0
  86. maxframe/codegen/spe/learn/preprocessing/_data.py +37 -0
  87. maxframe/codegen/spe/learn/preprocessing/_label.py +47 -0
  88. maxframe/codegen/spe/learn/preprocessing/tests/__init__.py +13 -0
  89. maxframe/codegen/spe/learn/preprocessing/tests/test_data.py +31 -0
  90. maxframe/codegen/spe/learn/preprocessing/tests/test_label.py +43 -0
  91. maxframe/codegen/spe/learn/utils/__init__.py +15 -0
  92. maxframe/codegen/spe/learn/utils/checks.py +55 -0
  93. maxframe/codegen/spe/learn/utils/multiclass.py +60 -0
  94. maxframe/codegen/spe/learn/utils/shuffle.py +85 -0
  95. maxframe/codegen/spe/learn/utils/sparsefuncs.py +35 -0
  96. maxframe/codegen/spe/learn/utils/tests/__init__.py +13 -0
  97. maxframe/codegen/spe/learn/utils/tests/test_checks.py +48 -0
  98. maxframe/codegen/spe/learn/utils/tests/test_multiclass.py +52 -0
  99. maxframe/codegen/spe/learn/utils/tests/test_shuffle.py +50 -0
  100. maxframe/codegen/spe/learn/utils/tests/test_sparsefuncs.py +34 -0
  101. maxframe/codegen/spe/learn/utils/tests/test_validation.py +44 -0
  102. maxframe/codegen/spe/learn/utils/validation.py +35 -0
  103. maxframe/codegen/spe/objects.py +26 -0
  104. maxframe/codegen/spe/remote.py +29 -0
  105. maxframe/codegen/spe/tensor/__init__.py +28 -0
  106. maxframe/codegen/spe/tensor/arithmetic.py +95 -0
  107. maxframe/codegen/spe/tensor/core.py +41 -0
  108. maxframe/codegen/spe/tensor/datasource.py +165 -0
  109. maxframe/codegen/spe/tensor/extensions.py +35 -0
  110. maxframe/codegen/spe/tensor/fetch.py +26 -0
  111. maxframe/codegen/spe/tensor/indexing.py +63 -0
  112. maxframe/codegen/spe/tensor/linalg.py +63 -0
  113. maxframe/codegen/spe/tensor/merge.py +31 -0
  114. maxframe/codegen/spe/tensor/misc.py +121 -0
  115. maxframe/codegen/spe/tensor/random.py +29 -0
  116. maxframe/codegen/spe/tensor/reduction.py +39 -0
  117. maxframe/codegen/spe/tensor/reshape.py +26 -0
  118. maxframe/codegen/spe/tensor/sort.py +42 -0
  119. maxframe/codegen/spe/tensor/special.py +35 -0
  120. maxframe/codegen/spe/tensor/statistics.py +24 -0
  121. maxframe/codegen/spe/tensor/tests/__init__.py +13 -0
  122. maxframe/codegen/spe/tensor/tests/test_arithmetic.py +103 -0
  123. maxframe/codegen/spe/tensor/tests/test_datasource.py +99 -0
  124. maxframe/codegen/spe/tensor/tests/test_extensions.py +37 -0
  125. maxframe/codegen/spe/tensor/tests/test_indexing.py +44 -0
  126. maxframe/codegen/spe/tensor/tests/test_linalg.py +38 -0
  127. maxframe/codegen/spe/tensor/tests/test_merge.py +28 -0
  128. maxframe/codegen/spe/tensor/tests/test_misc.py +94 -0
  129. maxframe/codegen/spe/tensor/tests/test_random.py +55 -0
  130. maxframe/codegen/spe/tensor/tests/test_reduction.py +65 -0
  131. maxframe/codegen/spe/tensor/tests/test_reshape.py +39 -0
  132. maxframe/codegen/spe/tensor/tests/test_sort.py +49 -0
  133. maxframe/codegen/spe/tensor/tests/test_special.py +28 -0
  134. maxframe/codegen/spe/tensor/tests/test_statistics.py +29 -0
  135. maxframe/codegen/spe/tests/__init__.py +13 -0
  136. maxframe/codegen/spe/tests/test_remote.py +29 -0
  137. maxframe/codegen/spe/tests/test_spe_codegen.py +141 -0
  138. maxframe/codegen/spe/utils.py +54 -0
  139. maxframe/codegen/tests/__init__.py +13 -0
  140. maxframe/{tests → codegen/tests}/test_codegen.py +3 -5
  141. maxframe/config/__init__.py +1 -1
  142. maxframe/config/config.py +50 -23
  143. maxframe/config/tests/test_config.py +4 -12
  144. maxframe/config/validators.py +5 -0
  145. maxframe/conftest.py +38 -10
  146. maxframe/core/__init__.py +1 -0
  147. maxframe/core/context.py +110 -0
  148. maxframe/core/entity/__init__.py +1 -0
  149. maxframe/core/entity/core.py +0 -7
  150. maxframe/core/entity/objects.py +19 -5
  151. maxframe/core/entity/output_types.py +11 -0
  152. maxframe/core/entity/tests/test_objects.py +11 -12
  153. maxframe/core/entity/tileables.py +3 -1
  154. maxframe/core/entity/utils.py +15 -0
  155. maxframe/core/graph/__init__.py +6 -1
  156. maxframe/core/graph/builder/base.py +5 -1
  157. maxframe/core/graph/core.cpython-38-darwin.so +0 -0
  158. maxframe/core/graph/core.pyx +17 -6
  159. maxframe/core/graph/entity.py +18 -6
  160. maxframe/core/operator/__init__.py +8 -3
  161. maxframe/core/operator/base.py +35 -12
  162. maxframe/core/operator/core.py +37 -14
  163. maxframe/core/operator/fetch.py +5 -18
  164. maxframe/core/operator/objects.py +0 -20
  165. maxframe/core/operator/shuffle.py +6 -72
  166. maxframe/dataframe/__init__.py +1 -0
  167. maxframe/dataframe/accessors/datetime_/core.py +7 -4
  168. maxframe/dataframe/accessors/string_/core.py +9 -6
  169. maxframe/dataframe/arithmetic/core.py +31 -20
  170. maxframe/dataframe/arithmetic/tests/test_arithmetic.py +6 -0
  171. maxframe/dataframe/core.py +98 -91
  172. maxframe/dataframe/datasource/core.py +8 -1
  173. maxframe/dataframe/datasource/date_range.py +8 -0
  174. maxframe/dataframe/datasource/from_index.py +9 -5
  175. maxframe/dataframe/datasource/from_records.py +9 -2
  176. maxframe/dataframe/datasource/from_tensor.py +32 -21
  177. maxframe/dataframe/datasource/read_csv.py +8 -2
  178. maxframe/dataframe/datasource/read_odps_query.py +33 -3
  179. maxframe/dataframe/datasource/read_odps_table.py +20 -5
  180. maxframe/dataframe/datasource/read_parquet.py +8 -3
  181. maxframe/dataframe/datasource/tests/test_datasource.py +33 -0
  182. maxframe/dataframe/datastore/tests/test_to_odps.py +52 -1
  183. maxframe/dataframe/datastore/to_csv.py +7 -3
  184. maxframe/dataframe/datastore/to_odps.py +42 -6
  185. maxframe/dataframe/extensions/__init__.py +6 -1
  186. maxframe/dataframe/extensions/apply_chunk.py +96 -136
  187. maxframe/dataframe/extensions/flatjson.py +3 -2
  188. maxframe/dataframe/extensions/flatmap.py +15 -7
  189. maxframe/dataframe/fetch/core.py +12 -1
  190. maxframe/dataframe/groupby/__init__.py +7 -0
  191. maxframe/dataframe/groupby/aggregation.py +9 -8
  192. maxframe/dataframe/groupby/apply.py +50 -74
  193. maxframe/dataframe/groupby/apply_chunk.py +393 -0
  194. maxframe/dataframe/groupby/core.py +80 -17
  195. maxframe/dataframe/groupby/extensions.py +26 -0
  196. maxframe/dataframe/groupby/fill.py +9 -4
  197. maxframe/dataframe/groupby/sample.py +7 -7
  198. maxframe/dataframe/groupby/tests/test_groupby.py +3 -3
  199. maxframe/dataframe/groupby/transform.py +57 -54
  200. maxframe/dataframe/indexing/align.py +7 -6
  201. maxframe/dataframe/indexing/getitem.py +9 -8
  202. maxframe/dataframe/indexing/iloc.py +28 -23
  203. maxframe/dataframe/indexing/insert.py +7 -3
  204. maxframe/dataframe/indexing/loc.py +9 -8
  205. maxframe/dataframe/indexing/reindex.py +36 -30
  206. maxframe/dataframe/indexing/rename_axis.py +18 -10
  207. maxframe/dataframe/indexing/reset_index.py +0 -2
  208. maxframe/dataframe/indexing/sample.py +13 -9
  209. maxframe/dataframe/indexing/set_axis.py +9 -6
  210. maxframe/dataframe/indexing/setitem.py +8 -5
  211. maxframe/dataframe/indexing/where.py +12 -9
  212. maxframe/dataframe/merge/__init__.py +0 -1
  213. maxframe/dataframe/merge/concat.py +10 -31
  214. maxframe/dataframe/merge/merge.py +2 -24
  215. maxframe/dataframe/misc/__init__.py +6 -0
  216. maxframe/dataframe/misc/_duplicate.py +7 -3
  217. maxframe/dataframe/misc/apply.py +106 -139
  218. maxframe/dataframe/misc/astype.py +3 -2
  219. maxframe/dataframe/misc/case_when.py +11 -7
  220. maxframe/dataframe/misc/cut.py +11 -10
  221. maxframe/dataframe/misc/describe.py +7 -3
  222. maxframe/dataframe/misc/drop.py +13 -11
  223. maxframe/dataframe/misc/eval.py +0 -2
  224. maxframe/dataframe/misc/get_dummies.py +78 -49
  225. maxframe/dataframe/misc/isin.py +13 -10
  226. maxframe/dataframe/misc/map.py +21 -6
  227. maxframe/dataframe/misc/melt.py +8 -1
  228. maxframe/dataframe/misc/pivot.py +232 -0
  229. maxframe/dataframe/misc/pivot_table.py +52 -40
  230. maxframe/dataframe/misc/rechunk.py +59 -0
  231. maxframe/dataframe/misc/shift.py +7 -4
  232. maxframe/dataframe/misc/stack.py +5 -3
  233. maxframe/dataframe/misc/tests/test_misc.py +167 -1
  234. maxframe/dataframe/misc/transform.py +63 -65
  235. maxframe/dataframe/misc/value_counts.py +7 -4
  236. maxframe/dataframe/missing/dropna.py +16 -7
  237. maxframe/dataframe/missing/fillna.py +18 -10
  238. maxframe/dataframe/missing/replace.py +10 -6
  239. maxframe/dataframe/missing/tests/test_missing.py +2 -2
  240. maxframe/dataframe/operators.py +1 -27
  241. maxframe/dataframe/reduction/aggregation.py +65 -3
  242. maxframe/dataframe/reduction/core.py +3 -1
  243. maxframe/dataframe/reduction/median.py +1 -1
  244. maxframe/dataframe/reduction/tests/test_reduction.py +33 -0
  245. maxframe/dataframe/reduction/unique.py +53 -7
  246. maxframe/dataframe/statistics/corr.py +9 -6
  247. maxframe/dataframe/statistics/quantile.py +9 -6
  248. maxframe/dataframe/tseries/to_datetime.py +6 -4
  249. maxframe/dataframe/utils.py +219 -31
  250. maxframe/dataframe/window/rolling.py +7 -4
  251. maxframe/env.py +1 -0
  252. maxframe/errors.py +9 -0
  253. maxframe/extension.py +13 -2
  254. maxframe/io/objects/core.py +67 -51
  255. maxframe/io/objects/tensor.py +73 -17
  256. maxframe/io/objects/tests/test_object_io.py +8 -55
  257. maxframe/io/odpsio/arrow.py +15 -2
  258. maxframe/io/odpsio/schema.py +43 -13
  259. maxframe/io/odpsio/tableio.py +63 -11
  260. maxframe/io/odpsio/tests/test_arrow.py +1 -2
  261. maxframe/io/odpsio/tests/test_schema.py +114 -1
  262. maxframe/io/odpsio/tests/test_tableio.py +42 -0
  263. maxframe/io/odpsio/tests/test_volumeio.py +22 -48
  264. maxframe/learn/__init__.py +2 -2
  265. maxframe/learn/contrib/__init__.py +2 -2
  266. maxframe/learn/contrib/graph/connected_components.py +2 -1
  267. maxframe/learn/contrib/lightgbm/__init__.py +33 -0
  268. maxframe/learn/contrib/lightgbm/_predict.py +138 -0
  269. maxframe/learn/contrib/lightgbm/_train.py +163 -0
  270. maxframe/learn/contrib/lightgbm/callback.py +114 -0
  271. maxframe/learn/contrib/lightgbm/classifier.py +199 -0
  272. maxframe/learn/contrib/lightgbm/core.py +372 -0
  273. maxframe/learn/contrib/lightgbm/dataset.py +153 -0
  274. maxframe/learn/contrib/lightgbm/regressor.py +29 -0
  275. maxframe/learn/contrib/lightgbm/tests/__init__.py +13 -0
  276. maxframe/learn/contrib/lightgbm/tests/test_callback.py +58 -0
  277. maxframe/learn/contrib/models.py +38 -9
  278. maxframe/learn/contrib/utils.py +55 -0
  279. maxframe/learn/contrib/xgboost/callback.py +86 -0
  280. maxframe/learn/contrib/xgboost/classifier.py +26 -30
  281. maxframe/learn/contrib/xgboost/core.py +53 -42
  282. maxframe/learn/contrib/xgboost/dmatrix.py +19 -12
  283. maxframe/learn/contrib/xgboost/predict.py +16 -9
  284. maxframe/learn/contrib/xgboost/regressor.py +28 -27
  285. maxframe/learn/contrib/xgboost/tests/test_callback.py +41 -0
  286. maxframe/learn/contrib/xgboost/train.py +59 -16
  287. maxframe/learn/core.py +252 -0
  288. maxframe/learn/datasets/__init__.py +20 -0
  289. maxframe/learn/datasets/samples_generator.py +628 -0
  290. maxframe/learn/linear_model/__init__.py +15 -0
  291. maxframe/learn/linear_model/_base.py +163 -0
  292. maxframe/learn/linear_model/_lin_reg.py +175 -0
  293. maxframe/learn/metrics/__init__.py +25 -0
  294. maxframe/learn/metrics/_check_targets.py +95 -0
  295. maxframe/learn/metrics/_classification.py +1121 -0
  296. maxframe/learn/metrics/_regression.py +256 -0
  297. maxframe/learn/model_selection/__init__.py +15 -0
  298. maxframe/learn/model_selection/_split.py +451 -0
  299. maxframe/learn/model_selection/tests/__init__.py +13 -0
  300. maxframe/learn/model_selection/tests/test_split.py +156 -0
  301. maxframe/learn/preprocessing/__init__.py +16 -0
  302. maxframe/learn/preprocessing/_data/__init__.py +17 -0
  303. maxframe/learn/preprocessing/_data/min_max_scaler.py +390 -0
  304. maxframe/learn/preprocessing/_data/normalize.py +127 -0
  305. maxframe/learn/preprocessing/_data/standard_scaler.py +503 -0
  306. maxframe/learn/preprocessing/_data/utils.py +79 -0
  307. maxframe/learn/preprocessing/_label/__init__.py +16 -0
  308. maxframe/learn/preprocessing/_label/_label_binarizer.py +599 -0
  309. maxframe/learn/preprocessing/_label/_label_encoder.py +174 -0
  310. maxframe/learn/utils/__init__.py +4 -0
  311. maxframe/learn/utils/_encode.py +314 -0
  312. maxframe/learn/utils/checks.py +161 -0
  313. maxframe/learn/utils/core.py +33 -0
  314. maxframe/learn/utils/extmath.py +176 -0
  315. maxframe/learn/utils/multiclass.py +292 -0
  316. maxframe/learn/utils/shuffle.py +114 -0
  317. maxframe/learn/utils/sparsefuncs.py +87 -0
  318. maxframe/learn/utils/validation.py +775 -0
  319. maxframe/lib/__init__.py +0 -2
  320. maxframe/lib/compat.py +145 -0
  321. maxframe/lib/filesystem/_oss_lib/glob.py +1 -1
  322. maxframe/lib/mmh3.cpython-38-darwin.so +0 -0
  323. maxframe/lib/sparse/__init__.py +10 -15
  324. maxframe/lib/sparse/array.py +45 -33
  325. maxframe/lib/sparse/core.py +0 -2
  326. maxframe/lib/sparse/linalg.py +31 -0
  327. maxframe/lib/sparse/matrix.py +5 -2
  328. maxframe/lib/sparse/tests/__init__.py +0 -2
  329. maxframe/lib/sparse/tests/test_sparse.py +53 -53
  330. maxframe/lib/sparse/vector.py +0 -2
  331. maxframe/mixin.py +59 -2
  332. maxframe/opcodes.py +13 -5
  333. maxframe/protocol.py +67 -14
  334. maxframe/remote/core.py +16 -14
  335. maxframe/remote/run_script.py +6 -3
  336. maxframe/serialization/__init__.py +2 -0
  337. maxframe/serialization/core.cpython-38-darwin.so +0 -0
  338. maxframe/serialization/core.pxd +3 -0
  339. maxframe/serialization/core.pyi +3 -1
  340. maxframe/serialization/core.pyx +82 -4
  341. maxframe/serialization/pandas.py +5 -1
  342. maxframe/serialization/serializables/core.py +6 -5
  343. maxframe/serialization/serializables/field.py +2 -2
  344. maxframe/serialization/serializables/tests/test_field_type.py +3 -5
  345. maxframe/serialization/tests/test_serial.py +27 -0
  346. maxframe/session.py +4 -71
  347. maxframe/sperunner.py +165 -0
  348. maxframe/tensor/__init__.py +35 -2
  349. maxframe/tensor/arithmetic/__init__.py +2 -4
  350. maxframe/tensor/arithmetic/abs.py +0 -2
  351. maxframe/tensor/arithmetic/absolute.py +0 -2
  352. maxframe/tensor/arithmetic/add.py +34 -4
  353. maxframe/tensor/arithmetic/angle.py +0 -2
  354. maxframe/tensor/arithmetic/arccos.py +1 -4
  355. maxframe/tensor/arithmetic/arccosh.py +1 -3
  356. maxframe/tensor/arithmetic/arcsin.py +0 -2
  357. maxframe/tensor/arithmetic/arcsinh.py +0 -2
  358. maxframe/tensor/arithmetic/arctan.py +0 -2
  359. maxframe/tensor/arithmetic/arctan2.py +0 -2
  360. maxframe/tensor/arithmetic/arctanh.py +0 -2
  361. maxframe/tensor/arithmetic/around.py +0 -2
  362. maxframe/tensor/arithmetic/bitand.py +0 -2
  363. maxframe/tensor/arithmetic/bitor.py +1 -3
  364. maxframe/tensor/arithmetic/bitxor.py +1 -3
  365. maxframe/tensor/arithmetic/cbrt.py +0 -2
  366. maxframe/tensor/arithmetic/ceil.py +0 -2
  367. maxframe/tensor/arithmetic/clip.py +13 -13
  368. maxframe/tensor/arithmetic/conj.py +0 -2
  369. maxframe/tensor/arithmetic/copysign.py +0 -2
  370. maxframe/tensor/arithmetic/core.py +47 -39
  371. maxframe/tensor/arithmetic/cos.py +1 -3
  372. maxframe/tensor/arithmetic/cosh.py +0 -2
  373. maxframe/tensor/arithmetic/deg2rad.py +0 -2
  374. maxframe/tensor/arithmetic/degrees.py +0 -2
  375. maxframe/tensor/arithmetic/divide.py +0 -2
  376. maxframe/tensor/arithmetic/equal.py +0 -2
  377. maxframe/tensor/arithmetic/exp.py +1 -3
  378. maxframe/tensor/arithmetic/exp2.py +0 -2
  379. maxframe/tensor/arithmetic/expm1.py +0 -2
  380. maxframe/tensor/arithmetic/fabs.py +0 -2
  381. maxframe/tensor/arithmetic/fix.py +0 -2
  382. maxframe/tensor/arithmetic/float_power.py +0 -2
  383. maxframe/tensor/arithmetic/floor.py +0 -2
  384. maxframe/tensor/arithmetic/floordiv.py +0 -2
  385. maxframe/tensor/arithmetic/fmax.py +0 -2
  386. maxframe/tensor/arithmetic/fmin.py +0 -2
  387. maxframe/tensor/arithmetic/fmod.py +0 -2
  388. maxframe/tensor/arithmetic/frexp.py +6 -2
  389. maxframe/tensor/arithmetic/greater.py +0 -2
  390. maxframe/tensor/arithmetic/greater_equal.py +0 -2
  391. maxframe/tensor/arithmetic/hypot.py +0 -2
  392. maxframe/tensor/arithmetic/i0.py +1 -3
  393. maxframe/tensor/arithmetic/imag.py +0 -2
  394. maxframe/tensor/arithmetic/invert.py +1 -3
  395. maxframe/tensor/arithmetic/isclose.py +0 -2
  396. maxframe/tensor/arithmetic/iscomplex.py +0 -2
  397. maxframe/tensor/arithmetic/isfinite.py +1 -3
  398. maxframe/tensor/arithmetic/isinf.py +0 -2
  399. maxframe/tensor/arithmetic/isnan.py +0 -2
  400. maxframe/tensor/arithmetic/isreal.py +0 -2
  401. maxframe/tensor/arithmetic/ldexp.py +0 -2
  402. maxframe/tensor/arithmetic/less.py +0 -2
  403. maxframe/tensor/arithmetic/less_equal.py +0 -2
  404. maxframe/tensor/arithmetic/log.py +1 -3
  405. maxframe/tensor/arithmetic/log10.py +1 -3
  406. maxframe/tensor/arithmetic/log1p.py +1 -3
  407. maxframe/tensor/arithmetic/log2.py +1 -3
  408. maxframe/tensor/arithmetic/logaddexp.py +0 -2
  409. maxframe/tensor/arithmetic/logaddexp2.py +0 -2
  410. maxframe/tensor/arithmetic/logical_and.py +0 -2
  411. maxframe/tensor/arithmetic/logical_not.py +1 -3
  412. maxframe/tensor/arithmetic/logical_or.py +0 -2
  413. maxframe/tensor/arithmetic/logical_xor.py +0 -2
  414. maxframe/tensor/arithmetic/lshift.py +0 -2
  415. maxframe/tensor/arithmetic/maximum.py +0 -2
  416. maxframe/tensor/arithmetic/minimum.py +0 -2
  417. maxframe/tensor/arithmetic/mod.py +0 -2
  418. maxframe/tensor/arithmetic/modf.py +6 -2
  419. maxframe/tensor/arithmetic/multiply.py +37 -4
  420. maxframe/tensor/arithmetic/nan_to_num.py +0 -2
  421. maxframe/tensor/arithmetic/negative.py +0 -2
  422. maxframe/tensor/arithmetic/nextafter.py +0 -2
  423. maxframe/tensor/arithmetic/not_equal.py +0 -2
  424. maxframe/tensor/arithmetic/positive.py +0 -2
  425. maxframe/tensor/arithmetic/power.py +0 -2
  426. maxframe/tensor/arithmetic/rad2deg.py +0 -2
  427. maxframe/tensor/arithmetic/radians.py +0 -2
  428. maxframe/tensor/arithmetic/real.py +0 -2
  429. maxframe/tensor/arithmetic/reciprocal.py +5 -3
  430. maxframe/tensor/arithmetic/rint.py +1 -3
  431. maxframe/tensor/arithmetic/rshift.py +0 -2
  432. maxframe/tensor/arithmetic/setimag.py +0 -2
  433. maxframe/tensor/arithmetic/setreal.py +0 -2
  434. maxframe/tensor/arithmetic/sign.py +0 -2
  435. maxframe/tensor/arithmetic/signbit.py +0 -2
  436. maxframe/tensor/arithmetic/sin.py +0 -2
  437. maxframe/tensor/arithmetic/sinc.py +1 -3
  438. maxframe/tensor/arithmetic/sinh.py +0 -2
  439. maxframe/tensor/arithmetic/spacing.py +0 -2
  440. maxframe/tensor/arithmetic/sqrt.py +0 -2
  441. maxframe/tensor/arithmetic/square.py +0 -2
  442. maxframe/tensor/arithmetic/subtract.py +4 -2
  443. maxframe/tensor/arithmetic/tan.py +0 -2
  444. maxframe/tensor/arithmetic/tanh.py +0 -2
  445. maxframe/tensor/arithmetic/tests/__init__.py +0 -2
  446. maxframe/tensor/arithmetic/tests/test_arithmetic.py +43 -9
  447. maxframe/tensor/arithmetic/truediv.py +0 -2
  448. maxframe/tensor/arithmetic/trunc.py +0 -2
  449. maxframe/tensor/arithmetic/utils.py +32 -6
  450. maxframe/tensor/array_utils.py +3 -25
  451. maxframe/tensor/core.py +6 -6
  452. maxframe/tensor/datasource/__init__.py +10 -2
  453. maxframe/tensor/datasource/arange.py +0 -2
  454. maxframe/tensor/datasource/array.py +3 -22
  455. maxframe/tensor/datasource/core.py +15 -10
  456. maxframe/tensor/datasource/diag.py +140 -0
  457. maxframe/tensor/datasource/diagflat.py +69 -0
  458. maxframe/tensor/datasource/empty.py +0 -2
  459. maxframe/tensor/datasource/eye.py +95 -0
  460. maxframe/tensor/datasource/from_dataframe.py +0 -2
  461. maxframe/tensor/datasource/from_dense.py +0 -17
  462. maxframe/tensor/datasource/from_sparse.py +0 -2
  463. maxframe/tensor/datasource/full.py +0 -2
  464. maxframe/tensor/datasource/identity.py +54 -0
  465. maxframe/tensor/datasource/indices.py +115 -0
  466. maxframe/tensor/datasource/linspace.py +140 -0
  467. maxframe/tensor/datasource/meshgrid.py +135 -0
  468. maxframe/tensor/datasource/ones.py +8 -3
  469. maxframe/tensor/datasource/tests/test_datasource.py +32 -1
  470. maxframe/tensor/datasource/tri_array.py +107 -0
  471. maxframe/tensor/datasource/zeros.py +7 -3
  472. maxframe/tensor/extensions/__init__.py +31 -0
  473. maxframe/tensor/extensions/accessor.py +25 -0
  474. maxframe/tensor/extensions/apply_chunk.py +137 -0
  475. maxframe/tensor/indexing/__init__.py +1 -1
  476. maxframe/tensor/indexing/choose.py +8 -6
  477. maxframe/tensor/indexing/compress.py +0 -2
  478. maxframe/tensor/indexing/extract.py +0 -2
  479. maxframe/tensor/indexing/fill_diagonal.py +9 -6
  480. maxframe/tensor/indexing/flatnonzero.py +1 -3
  481. maxframe/tensor/indexing/getitem.py +10 -43
  482. maxframe/tensor/indexing/nonzero.py +2 -4
  483. maxframe/tensor/indexing/setitem.py +19 -9
  484. maxframe/tensor/indexing/slice.py +6 -3
  485. maxframe/tensor/indexing/take.py +0 -2
  486. maxframe/tensor/indexing/tests/__init__.py +0 -2
  487. maxframe/tensor/indexing/tests/test_indexing.py +0 -2
  488. maxframe/tensor/indexing/unravel_index.py +6 -6
  489. maxframe/tensor/lib/__init__.py +16 -0
  490. maxframe/tensor/lib/index_tricks.py +404 -0
  491. maxframe/tensor/linalg/__init__.py +36 -0
  492. maxframe/tensor/linalg/dot.py +145 -0
  493. maxframe/tensor/linalg/inner.py +36 -0
  494. maxframe/tensor/linalg/inv.py +83 -0
  495. maxframe/tensor/linalg/lu.py +115 -0
  496. maxframe/tensor/linalg/matmul.py +225 -0
  497. maxframe/tensor/linalg/qr.py +124 -0
  498. maxframe/tensor/linalg/solve_triangular.py +103 -0
  499. maxframe/tensor/linalg/svd.py +167 -0
  500. maxframe/tensor/linalg/tensordot.py +213 -0
  501. maxframe/tensor/linalg/vdot.py +73 -0
  502. maxframe/tensor/merge/__init__.py +4 -0
  503. maxframe/tensor/merge/append.py +74 -0
  504. maxframe/tensor/merge/column_stack.py +63 -0
  505. maxframe/tensor/merge/concatenate.py +3 -2
  506. maxframe/tensor/merge/dstack.py +71 -0
  507. maxframe/tensor/merge/hstack.py +70 -0
  508. maxframe/tensor/merge/stack.py +0 -2
  509. maxframe/tensor/merge/tests/test_merge.py +0 -2
  510. maxframe/tensor/misc/__init__.py +18 -5
  511. maxframe/tensor/misc/astype.py +10 -8
  512. maxframe/tensor/misc/broadcast_to.py +1 -1
  513. maxframe/tensor/misc/copy.py +64 -0
  514. maxframe/tensor/misc/diff.py +115 -0
  515. maxframe/tensor/misc/flatten.py +63 -0
  516. maxframe/tensor/misc/in1d.py +94 -0
  517. maxframe/tensor/misc/isin.py +130 -0
  518. maxframe/tensor/misc/ndim.py +53 -0
  519. maxframe/tensor/misc/ravel.py +0 -2
  520. maxframe/tensor/misc/repeat.py +129 -0
  521. maxframe/tensor/misc/searchsorted.py +147 -0
  522. maxframe/tensor/misc/setdiff1d.py +58 -0
  523. maxframe/tensor/misc/squeeze.py +117 -0
  524. maxframe/tensor/misc/swapaxes.py +113 -0
  525. maxframe/tensor/misc/tests/test_misc.py +0 -2
  526. maxframe/tensor/misc/transpose.py +8 -4
  527. maxframe/tensor/misc/trapezoid.py +123 -0
  528. maxframe/tensor/misc/unique.py +0 -1
  529. maxframe/tensor/misc/where.py +10 -8
  530. maxframe/tensor/operators.py +0 -34
  531. maxframe/tensor/random/__init__.py +3 -5
  532. maxframe/tensor/random/binomial.py +0 -2
  533. maxframe/tensor/random/bytes.py +0 -2
  534. maxframe/tensor/random/chisquare.py +0 -2
  535. maxframe/tensor/random/choice.py +9 -8
  536. maxframe/tensor/random/core.py +20 -5
  537. maxframe/tensor/random/dirichlet.py +0 -2
  538. maxframe/tensor/random/exponential.py +0 -2
  539. maxframe/tensor/random/f.py +2 -4
  540. maxframe/tensor/random/gamma.py +0 -2
  541. maxframe/tensor/random/geometric.py +0 -2
  542. maxframe/tensor/random/gumbel.py +0 -2
  543. maxframe/tensor/random/hypergeometric.py +0 -2
  544. maxframe/tensor/random/laplace.py +2 -4
  545. maxframe/tensor/random/logistic.py +0 -2
  546. maxframe/tensor/random/lognormal.py +0 -2
  547. maxframe/tensor/random/logseries.py +0 -2
  548. maxframe/tensor/random/multinomial.py +0 -2
  549. maxframe/tensor/random/multivariate_normal.py +0 -2
  550. maxframe/tensor/random/negative_binomial.py +0 -2
  551. maxframe/tensor/random/noncentral_chisquare.py +0 -2
  552. maxframe/tensor/random/noncentral_f.py +1 -3
  553. maxframe/tensor/random/normal.py +0 -2
  554. maxframe/tensor/random/pareto.py +0 -2
  555. maxframe/tensor/random/permutation.py +6 -3
  556. maxframe/tensor/random/poisson.py +0 -2
  557. maxframe/tensor/random/power.py +0 -2
  558. maxframe/tensor/random/rand.py +0 -2
  559. maxframe/tensor/random/randint.py +0 -2
  560. maxframe/tensor/random/randn.py +0 -2
  561. maxframe/tensor/random/random_integers.py +0 -2
  562. maxframe/tensor/random/random_sample.py +0 -2
  563. maxframe/tensor/random/rayleigh.py +0 -2
  564. maxframe/tensor/random/standard_cauchy.py +0 -2
  565. maxframe/tensor/random/standard_exponential.py +0 -2
  566. maxframe/tensor/random/standard_gamma.py +0 -2
  567. maxframe/tensor/random/standard_normal.py +0 -2
  568. maxframe/tensor/random/standard_t.py +0 -2
  569. maxframe/tensor/random/tests/__init__.py +0 -2
  570. maxframe/tensor/random/tests/test_random.py +0 -2
  571. maxframe/tensor/random/triangular.py +0 -2
  572. maxframe/tensor/random/uniform.py +0 -2
  573. maxframe/tensor/random/vonmises.py +0 -2
  574. maxframe/tensor/random/wald.py +0 -2
  575. maxframe/tensor/random/weibull.py +0 -2
  576. maxframe/tensor/random/zipf.py +0 -2
  577. maxframe/tensor/reduction/__init__.py +0 -2
  578. maxframe/tensor/reduction/all.py +0 -2
  579. maxframe/tensor/reduction/allclose.py +0 -2
  580. maxframe/tensor/reduction/any.py +0 -2
  581. maxframe/tensor/reduction/argmax.py +1 -3
  582. maxframe/tensor/reduction/argmin.py +1 -3
  583. maxframe/tensor/reduction/array_equal.py +0 -2
  584. maxframe/tensor/reduction/core.py +0 -2
  585. maxframe/tensor/reduction/count_nonzero.py +0 -2
  586. maxframe/tensor/reduction/cumprod.py +0 -2
  587. maxframe/tensor/reduction/cumsum.py +0 -2
  588. maxframe/tensor/reduction/max.py +0 -2
  589. maxframe/tensor/reduction/mean.py +0 -2
  590. maxframe/tensor/reduction/min.py +0 -2
  591. maxframe/tensor/reduction/nanargmax.py +0 -2
  592. maxframe/tensor/reduction/nanargmin.py +0 -2
  593. maxframe/tensor/reduction/nancumprod.py +0 -2
  594. maxframe/tensor/reduction/nancumsum.py +0 -2
  595. maxframe/tensor/reduction/nanmax.py +0 -2
  596. maxframe/tensor/reduction/nanmean.py +0 -2
  597. maxframe/tensor/reduction/nanmin.py +0 -2
  598. maxframe/tensor/reduction/nanprod.py +0 -2
  599. maxframe/tensor/reduction/nanstd.py +0 -2
  600. maxframe/tensor/reduction/nansum.py +0 -2
  601. maxframe/tensor/reduction/nanvar.py +0 -2
  602. maxframe/tensor/reduction/prod.py +0 -2
  603. maxframe/tensor/reduction/std.py +0 -2
  604. maxframe/tensor/reduction/sum.py +0 -2
  605. maxframe/tensor/reduction/tests/test_reduction.py +1 -4
  606. maxframe/tensor/reduction/var.py +0 -2
  607. maxframe/tensor/reshape/__init__.py +0 -2
  608. maxframe/tensor/reshape/reshape.py +6 -5
  609. maxframe/tensor/reshape/tests/__init__.py +0 -2
  610. maxframe/tensor/reshape/tests/test_reshape.py +0 -2
  611. maxframe/tensor/sort/__init__.py +16 -0
  612. maxframe/tensor/sort/argsort.py +150 -0
  613. maxframe/tensor/sort/sort.py +295 -0
  614. maxframe/tensor/special/__init__.py +37 -0
  615. maxframe/tensor/special/core.py +38 -0
  616. maxframe/tensor/special/misc.py +142 -0
  617. maxframe/tensor/special/statistical.py +56 -0
  618. maxframe/tensor/statistics/__init__.py +5 -0
  619. maxframe/tensor/statistics/average.py +143 -0
  620. maxframe/tensor/statistics/bincount.py +133 -0
  621. maxframe/tensor/statistics/quantile.py +10 -8
  622. maxframe/tensor/ufunc/__init__.py +0 -2
  623. maxframe/tensor/ufunc/ufunc.py +0 -2
  624. maxframe/tensor/utils.py +21 -3
  625. maxframe/tests/test_protocol.py +3 -3
  626. maxframe/tests/test_utils.py +210 -1
  627. maxframe/tests/utils.py +67 -1
  628. maxframe/udf.py +76 -6
  629. maxframe/utils.py +418 -17
  630. {maxframe-1.3.1.dist-info → maxframe-2.0.0b1.dist-info}/METADATA +4 -1
  631. maxframe-2.0.0b1.dist-info/RECORD +939 -0
  632. maxframe_client/clients/framedriver.py +19 -3
  633. maxframe_client/fetcher.py +113 -6
  634. maxframe_client/session/odps.py +173 -38
  635. maxframe_client/session/task.py +3 -1
  636. maxframe_client/tests/test_session.py +41 -5
  637. maxframe-1.3.1.dist-info/RECORD +0 -705
  638. {maxframe-1.3.1.dist-info → maxframe-2.0.0b1.dist-info}/WHEEL +0 -0
  639. {maxframe-1.3.1.dist-info → maxframe-2.0.0b1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,140 @@
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 ...core import ExecutableTuple
19
+ from ...serialization.serializables import AnyField, BoolField, Int64Field
20
+ from .core import TensorNoInput
21
+
22
+
23
+ class TensorLinspace(TensorNoInput):
24
+ _op_type_ = opcodes.TENSOR_LINSPACE
25
+
26
+ start = AnyField("start")
27
+ stop = AnyField("stop")
28
+ num = Int64Field("num")
29
+ endpoint = BoolField("endpoint")
30
+
31
+ def __init__(self, dtype=None, **kw):
32
+ dtype = np.dtype(np.linspace(0, 1, 1).dtype if dtype is None else dtype)
33
+ super().__init__(dtype=dtype, **kw)
34
+
35
+
36
+ def linspace(
37
+ start,
38
+ stop,
39
+ num=50,
40
+ endpoint=True,
41
+ retstep=False,
42
+ dtype=None,
43
+ gpu=None,
44
+ chunk_size=None,
45
+ ):
46
+ """
47
+ Return evenly spaced numbers over a specified interval.
48
+
49
+ Returns `num` evenly spaced samples, calculated over the
50
+ interval [`start`, `stop`].
51
+
52
+ The endpoint of the interval can optionally be excluded.
53
+
54
+ Parameters
55
+ ----------
56
+ start : scalar
57
+ The starting value of the sequence.
58
+ stop : scalar
59
+ The end value of the sequence, unless `endpoint` is set to False.
60
+ In that case, the sequence consists of all but the last of ``num + 1``
61
+ evenly spaced samples, so that `stop` is excluded. Note that the step
62
+ size changes when `endpoint` is False.
63
+ num : int, optional
64
+ Number of samples to generate. Default is 50. Must be non-negative.
65
+ endpoint : bool, optional
66
+ If True, `stop` is the last sample. Otherwise, it is not included.
67
+ Default is True.
68
+ retstep : bool, optional
69
+ If True, return (`samples`, `step`), where `step` is the spacing
70
+ between samples.
71
+ dtype : dtype, optional
72
+ The type of the output tensor. If `dtype` is not given, infer the data
73
+ type from the other input arguments.
74
+ gpu : bool, optional
75
+ Allocate the tensor on GPU if True, False as default
76
+ chunk_size : int or tuple of int or tuple of ints, optional
77
+ Desired chunk size on each dimension
78
+
79
+ Returns
80
+ -------
81
+ samples : Tensor
82
+ There are `num` equally spaced samples in the closed interval
83
+ ``[start, stop]`` or the half-open interval ``[start, stop)``
84
+ (depending on whether `endpoint` is True or False).
85
+ step : float, optional
86
+ Only returned if `retstep` is True
87
+
88
+ Size of spacing between samples.
89
+
90
+
91
+ See Also
92
+ --------
93
+ arange : Similar to `linspace`, but uses a step size (instead of the
94
+ number of samples).
95
+ logspace : Samples uniformly distributed in log space.
96
+
97
+ Examples
98
+ --------
99
+ >>> import maxframe.tensor as mt
100
+
101
+ >>> mt.linspace(2.0, 3.0, num=5).execute()
102
+ array([ 2. , 2.25, 2.5 , 2.75, 3. ])
103
+ >>> mt.linspace(2.0, 3.0, num=5, endpoint=False).execute()
104
+ array([ 2. , 2.2, 2.4, 2.6, 2.8])
105
+ >>> mt.linspace(2.0, 3.0, num=5, retstep=True).execute()
106
+ (array([ 2. , 2.25, 2.5 , 2.75, 3. ]), 0.25)
107
+
108
+ Graphical illustration:
109
+
110
+ >>> import matplotlib.pyplot as plt
111
+ >>> N = 8
112
+ >>> y = mt.zeros(N)
113
+ >>> x1 = mt.linspace(0, 10, N, endpoint=True)
114
+ >>> x2 = mt.linspace(0, 10, N, endpoint=False)
115
+ >>> plt.plot(x1.execute(), y.execute(), 'o')
116
+ [<matplotlib.lines.Line2D object at 0x...>]
117
+ >>> plt.plot(x2.execute(), y.execute() + 0.5, 'o')
118
+ [<matplotlib.lines.Line2D object at 0x...>]
119
+ >>> plt.ylim([-0.5, 1])
120
+ (-0.5, 1)
121
+ >>> plt.show()
122
+
123
+ """
124
+ num = int(num)
125
+
126
+ op = TensorLinspace(
127
+ start=start, stop=stop, num=num, endpoint=endpoint, dtype=dtype, gpu=gpu
128
+ )
129
+ shape = (num,)
130
+ ret = op(shape, chunk_size=chunk_size)
131
+
132
+ if not retstep:
133
+ return ret
134
+
135
+ if num > 1:
136
+ step = float(stop - start) / (num if not endpoint else num - 1)
137
+ else:
138
+ step = np.nan
139
+
140
+ return ExecutableTuple([ret, step])
@@ -0,0 +1,135 @@
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 .array import tensor
16
+
17
+
18
+ def meshgrid(*xi, **kwargs):
19
+ """
20
+ Return coordinate matrices from coordinate vectors.
21
+
22
+ Make N-D coordinate arrays for vectorized evaluations of
23
+ N-D scalar/vector fields over N-D grids, given
24
+ one-dimensional coordinate tensors x1, x2,..., xn.
25
+
26
+ Parameters
27
+ ----------
28
+ x1, x2,..., xn : array_like
29
+ 1-D arrays representing the coordinates of a grid.
30
+ indexing : {'xy', 'ij'}, optional
31
+ Cartesian ('xy', default) or matrix ('ij') indexing of output.
32
+ See Notes for more details.
33
+ sparse : bool, optional
34
+ If True a sparse grid is returned in order to conserve memory.
35
+ Default is False.
36
+
37
+ Returns
38
+ -------
39
+ X1, X2,..., XN : Tensor
40
+ For vectors `x1`, `x2`,..., 'xn' with lengths ``Ni=len(xi)`` ,
41
+ return ``(N1, N2, N3,...Nn)`` shaped tensors if indexing='ij'
42
+ or ``(N2, N1, N3,...Nn)`` shaped tensors if indexing='xy'
43
+ with the elements of `xi` repeated to fill the matrix along
44
+ the first dimension for `x1`, the second for `x2` and so on.
45
+
46
+ Notes
47
+ -----
48
+ This function supports both indexing conventions through the indexing
49
+ keyword argument. Giving the string 'ij' returns a meshgrid with
50
+ matrix indexing, while 'xy' returns a meshgrid with Cartesian indexing.
51
+ In the 2-D case with inputs of length M and N, the outputs are of shape
52
+ (N, M) for 'xy' indexing and (M, N) for 'ij' indexing. In the 3-D case
53
+ with inputs of length M, N and P, outputs are of shape (N, M, P) for
54
+ 'xy' indexing and (M, N, P) for 'ij' indexing. The difference is
55
+ illustrated by the following code snippet::
56
+
57
+ xv, yv = mt.meshgrid(x, y, sparse=False, indexing='ij')
58
+ for i in range(nx):
59
+ for j in range(ny):
60
+ # treat xv[i,j], yv[i,j]
61
+
62
+ xv, yv = mt.meshgrid(x, y, sparse=False, indexing='xy')
63
+ for i in range(nx):
64
+ for j in range(ny):
65
+ # treat xv[j,i], yv[j,i]
66
+
67
+ In the 1-D and 0-D case, the indexing and sparse keywords have no effect.
68
+
69
+ Examples
70
+ --------
71
+ >>> import maxframe.tensor as mt
72
+
73
+ >>> nx, ny = (3, 2)
74
+ >>> x = mt.linspace(0, 1, nx)
75
+ >>> y = mt.linspace(0, 1, ny)
76
+ >>> xv, yv = mt.meshgrid(x, y)
77
+ >>> xv.execute()
78
+ array([[ 0. , 0.5, 1. ],
79
+ [ 0. , 0.5, 1. ]])
80
+ >>> yv.execute()
81
+ array([[ 0., 0., 0.],
82
+ [ 1., 1., 1.]])
83
+ >>> xv, yv = mt.meshgrid(x, y, sparse=True) # make sparse output arrays
84
+ >>> xv.execute()
85
+ array([[ 0. , 0.5, 1. ]])
86
+ >>> yv.execute()
87
+ array([[ 0.],
88
+ [ 1.]])
89
+
90
+ `meshgrid` is very useful to evaluate functions on a grid.
91
+
92
+ >>> import matplotlib.pyplot as plt
93
+ >>> x = mt.arange(-5, 5, 0.1)
94
+ >>> y = mt.arange(-5, 5, 0.1)
95
+ >>> xx, yy = mt.meshgrid(x, y, sparse=True)
96
+ >>> z = mt.sin(xx**2 + yy**2) / (xx**2 + yy**2)
97
+ >>> h = plt.contourf(x,y,z)
98
+
99
+ """
100
+ from ..misc import broadcast_to
101
+
102
+ indexing = kwargs.pop("indexing", "xy")
103
+ sparse = kwargs.pop("sparse", False)
104
+
105
+ if kwargs:
106
+ raise TypeError(
107
+ f"meshgrid() got an unexpected keyword argument '{list(kwargs)[0]}'"
108
+ )
109
+ if indexing not in ("xy", "ij"):
110
+ raise ValueError("Valid values for `indexing` are 'xy' and 'ij'.")
111
+
112
+ xi = [tensor(x) for x in xi]
113
+ xi = [a.ravel() for a in xi]
114
+ shape = [x.size for x in xi]
115
+
116
+ if indexing == "xy" and len(xi) > 1:
117
+ xi[0], xi[1] = xi[1], xi[0]
118
+ shape[0], shape[1] = shape[1], shape[0]
119
+
120
+ grid = []
121
+ for i, x in enumerate(xi):
122
+ slc = [None] * len(shape)
123
+ slc[i] = slice(None)
124
+
125
+ r = x[tuple(slc)]
126
+
127
+ if not sparse:
128
+ r = broadcast_to(r, shape)
129
+
130
+ grid.append(r)
131
+
132
+ if indexing == "xy" and len(xi) > 1:
133
+ grid[0], grid[1] = grid[1], grid[0]
134
+
135
+ return grid
@@ -1,5 +1,3 @@
1
- #!/usr/bin/env python
2
- # -*- coding: utf-8 -*-
3
1
  # Copyright 1999-2025 Alibaba Group Holding Ltd.
4
2
  #
5
3
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -24,6 +22,7 @@ from ...serialization.serializables import (
24
22
  StringField,
25
23
  TupleField,
26
24
  )
25
+ from ...utils import on_deserialize_shape, on_serialize_shape
27
26
  from ..utils import get_order
28
27
  from .array import tensor
29
28
  from .core import TensorLike, TensorNoInput
@@ -33,7 +32,12 @@ class TensorOnes(TensorNoInput):
33
32
  _op_type_ = opcodes.TENSOR_ONES
34
33
 
35
34
  order = StringField("order")
36
- shape = TupleField("shape", FieldTypes.int64)
35
+ shape = TupleField(
36
+ "shape",
37
+ FieldTypes.int64,
38
+ on_serialize=on_serialize_shape,
39
+ on_deserialize=on_deserialize_shape,
40
+ )
37
41
  chunk_size = AnyField("chunk_size")
38
42
 
39
43
  def __init__(self, shape=None, **kwargs):
@@ -108,6 +112,7 @@ class TensorOnesLike(TensorLike):
108
112
  _op_type_ = opcodes.TENSOR_ONES_LIKE
109
113
 
110
114
  _input = KeyField("input")
115
+ order = StringField("order")
111
116
 
112
117
  def __init__(self, dtype=None, sparse=False, **kw):
113
118
  dtype = np.dtype(dtype) if dtype is not None else None
@@ -20,7 +20,7 @@ import scipy.sparse as sps
20
20
 
21
21
  from .... import dataframe as md
22
22
  from ....core import enter_mode
23
- from ... import arange, full, ones, ones_like, tensor, zeros
23
+ from ... import arange, diag, full, ones, ones_like, tensor, zeros
24
24
  from ...core import SparseTensor, Tensor
25
25
  from .. import array, asarray, ascontiguousarray, asfortranarray, fromdense
26
26
  from ..array import CSRMatrixDataSource
@@ -276,3 +276,34 @@ def test_from_dataframe():
276
276
  tensor = from_dataframe(mdf)
277
277
  assert tensor.shape == (3, 3)
278
278
  assert np.float64 == tensor.dtype
279
+
280
+
281
+ def test_diag():
282
+ # test 2-d, shape[0] == shape[1], k == 0
283
+ v = tensor(np.arange(16).reshape(4, 4), chunk_size=2)
284
+ t = diag(v)
285
+ assert t.shape == (4,)
286
+
287
+ v = tensor(np.arange(16).reshape(4, 4), chunk_size=(2, 3))
288
+ t = diag(v)
289
+ assert t.shape == (4,)
290
+
291
+ # test 1-d, k == 0
292
+ v = tensor(np.arange(3), chunk_size=2)
293
+ t = diag(v, sparse=True)
294
+ assert t.shape == (3, 3)
295
+
296
+ # test 2-d, shape[0] != shape[1]
297
+ v = tensor(np.arange(24).reshape(4, 6), chunk_size=2)
298
+ t = diag(v)
299
+ assert t.shape == np.diag(np.arange(24).reshape(4, 6)).shape
300
+
301
+ v = tensor(np.arange(24).reshape(4, 6), chunk_size=2)
302
+ t = diag(v, k=1)
303
+ assert t.shape == np.diag(np.arange(24).reshape(4, 6), k=1).shape
304
+ t = diag(v, k=2)
305
+ assert t.shape == np.diag(np.arange(24).reshape(4, 6), k=2).shape
306
+ t = diag(v, k=-1)
307
+ assert t.shape == np.diag(np.arange(24).reshape(4, 6), k=-1).shape
308
+ t = diag(v, k=-2)
309
+ assert t.shape == np.diag(np.arange(24).reshape(4, 6), k=-2).shape
@@ -0,0 +1,107 @@
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 ... import opcodes
16
+ from ...serialization.serializables import Int32Field
17
+ from ..core import TensorOrder
18
+ from .array import tensor as astensor
19
+ from .core import TensorHasInput
20
+
21
+
22
+ class TensorTriArray(TensorHasInput):
23
+ k = Int32Field("k")
24
+
25
+ def __call__(self, m, order=None):
26
+ order = TensorOrder.C_ORDER if order is None else order
27
+ return self.new_tensor([m], shape=m.shape, order=order)
28
+
29
+
30
+ class TensorTriu(TensorTriArray):
31
+ _op_type_ = opcodes.TENSOR_TRIU
32
+
33
+
34
+ def triu(m, k=0, gpu=None):
35
+ """
36
+ Upper triangle of a tensor.
37
+
38
+ Return a copy of a matrix with the elements below the `k`-th diagonal
39
+ zeroed.
40
+
41
+ Please refer to the documentation for `tril` for further details.
42
+
43
+ See Also
44
+ --------
45
+ tril : lower triangle of a tensor
46
+
47
+ Examples
48
+ --------
49
+ >>> import maxframe.tensor as mt
50
+
51
+ >>> mt.triu([[1,2,3],[4,5,6],[7,8,9],[10,11,12]], -1).execute()
52
+ array([[ 1, 2, 3],
53
+ [ 4, 5, 6],
54
+ [ 0, 8, 9],
55
+ [ 0, 0, 12]])
56
+
57
+ """
58
+ m = astensor(m)
59
+ gpu = m.op.gpu if gpu is None else gpu
60
+ op = TensorTriu(k=k, dtype=m.dtype, sparse=m.issparse(), gpu=gpu)
61
+ return op(m)
62
+
63
+
64
+ class TensorTril(TensorTriArray):
65
+ _op_type_ = opcodes.TENSOR_TRIL
66
+
67
+
68
+ def tril(m, k=0, gpu=None):
69
+ """
70
+ Lower triangle of a tensor.
71
+
72
+ Return a copy of a tensor with elements above the `k`-th diagonal zeroed.
73
+
74
+ Parameters
75
+ ----------
76
+ m : array_like, shape (M, N)
77
+ Input tensor.
78
+ k : int, optional
79
+ Diagonal above which to zero elements. `k = 0` (the default) is the
80
+ main diagonal, `k < 0` is below it and `k > 0` is above.
81
+ gpu : bool, optional
82
+ Allocate the tensor on GPU if True, None as default
83
+
84
+ Returns
85
+ -------
86
+ tril : Tensor, shape (M, N)
87
+ Lower triangle of `m`, of same shape and data-type as `m`.
88
+
89
+ See Also
90
+ --------
91
+ triu : same thing, only for the upper triangle
92
+
93
+ Examples
94
+ --------
95
+ >>> import maxframe.tensor as mt
96
+
97
+ >>> mt.tril([[1,2,3],[4,5,6],[7,8,9],[10,11,12]], -1).execute()
98
+ array([[ 0, 0, 0],
99
+ [ 4, 0, 0],
100
+ [ 7, 8, 0],
101
+ [10, 11, 12]])
102
+
103
+ """
104
+ m = astensor(m)
105
+ gpu = m.op.gpu if gpu is None else gpu
106
+ op = TensorTril(k=k, dtype=m.dtype, sparse=m.issparse(), gpu=gpu)
107
+ return op(m)
@@ -1,5 +1,3 @@
1
- #!/usr/bin/env python
2
- # -*- coding: utf-8 -*-
3
1
  # Copyright 1999-2025 Alibaba Group Holding Ltd.
4
2
  #
5
3
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -25,6 +23,7 @@ from ...serialization.serializables import (
25
23
  StringField,
26
24
  TupleField,
27
25
  )
26
+ from ...utils import on_deserialize_shape, on_serialize_shape
28
27
  from ..utils import get_order
29
28
  from .array import tensor
30
29
  from .core import TensorLike, TensorNoInput
@@ -34,7 +33,12 @@ class TensorZeros(TensorNoInput):
34
33
  _op_type_ = opcodes.TENSOR_ZEROS
35
34
 
36
35
  order = StringField("order")
37
- shape = TupleField("shape", FieldTypes.int64)
36
+ shape = TupleField(
37
+ "shape",
38
+ FieldTypes.int64,
39
+ on_serialize=on_serialize_shape,
40
+ on_deserialize=on_deserialize_shape,
41
+ )
38
42
  chunk_size = AnyField("chunk_size")
39
43
 
40
44
  def __init__(self, shape=None, **kwargs):
@@ -0,0 +1,31 @@
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 CachedAccessor
16
+ from .accessor import TensorMaxFrameAccessor
17
+ from .apply_chunk import apply_chunk
18
+
19
+
20
+ def _install():
21
+ from ..core import TENSOR_TYPE
22
+
23
+ TensorMaxFrameAccessor._register("apply_chunk", apply_chunk)
24
+
25
+ if TensorMaxFrameAccessor._api_count:
26
+ for t in TENSOR_TYPE:
27
+ t.mf = CachedAccessor("mf", TensorMaxFrameAccessor)
28
+
29
+
30
+ _install()
31
+ del _install
@@ -0,0 +1,25 @@
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 TYPE_CHECKING
16
+
17
+ from ...core import BaseMaxFrameAccessor
18
+
19
+ if TYPE_CHECKING:
20
+ from ..core import Tensor
21
+
22
+
23
+ class TensorMaxFrameAccessor(BaseMaxFrameAccessor):
24
+ _obj: "Tensor"
25
+ _api_count: int = 0
@@ -0,0 +1,137 @@
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 ...core import ENTITY_TYPE
19
+ from ...serialization.serializables import (
20
+ BoolField,
21
+ DictField,
22
+ FunctionField,
23
+ TupleField,
24
+ )
25
+ from ...udf import BuiltinFunction
26
+ from ...utils import find_objects, quiet_stdio, replace_objects
27
+ from ..core import TensorOrder
28
+ from ..operators import TensorOperator, TensorOperatorMixin
29
+
30
+
31
+ class TensorApplyChunk(TensorOperator, TensorOperatorMixin):
32
+ _op_type_ = opcodes.APPLY_CHUNK
33
+
34
+ func = FunctionField("func")
35
+ elementwise = BoolField("elementwise")
36
+ args = TupleField("args")
37
+ kwargs = DictField("kwargs")
38
+ with_chunk_index = BoolField("with_chunk_index")
39
+
40
+ @classmethod
41
+ def _set_inputs(cls, op: "TensorApplyChunk", inputs):
42
+ super()._set_inputs(op, inputs)
43
+ old_inputs = find_objects(op.args, ENTITY_TYPE) + find_objects(
44
+ op.kwargs, ENTITY_TYPE
45
+ )
46
+ mapping = {o: n for o, n in zip(old_inputs, op._inputs[1:])}
47
+ op.args = replace_objects(op.args, mapping)
48
+ op.kwargs = replace_objects(op.kwargs, mapping)
49
+
50
+ def has_custom_code(self) -> bool:
51
+ return not isinstance(self.func, BuiltinFunction)
52
+
53
+ def __call__(self, t, dtype=None, shape=None, order=None):
54
+ if dtype is None:
55
+ try:
56
+ kwargs = self.kwargs or dict()
57
+ if self.with_chunk_index:
58
+ kwargs["chunk_index"] = (0,) * t.ndim
59
+ with np.errstate(all="ignore"), quiet_stdio():
60
+ mock_result = self.func(
61
+ np.random.rand(2, 2).astype(t.dtype),
62
+ *(self.args or ()),
63
+ **kwargs
64
+ )
65
+ except:
66
+ raise TypeError("Cannot estimate output type of apply_chunk call")
67
+ dtype = mock_result.dtype
68
+ order = (
69
+ TensorOrder.C_ORDER
70
+ if mock_result.flags["C_CONTIGUOUS"]
71
+ else TensorOrder.F_ORDER
72
+ )
73
+
74
+ if shape is not None:
75
+ new_shape = shape
76
+ else:
77
+ new_shape = t.shape if self.elementwise else (np.nan,) * t.ndim
78
+ inputs = (
79
+ [t]
80
+ + find_objects(self.args, ENTITY_TYPE)
81
+ + find_objects(self.kwargs, ENTITY_TYPE)
82
+ )
83
+ return self.new_tensor(inputs, dtype=dtype, shape=new_shape, order=order)
84
+
85
+
86
+ def apply_chunk(t, func, args=(), **kwargs):
87
+ """
88
+ Apply function to each chunk.
89
+
90
+ Parameters
91
+ ----------
92
+ func : function
93
+ Function to apply to each chunk.
94
+ args : tuple
95
+ Positional arguments to pass to func in addition to the array.
96
+ **kwargs
97
+ Additional keyword arguments to pass as keywords arguments to func.
98
+
99
+ Returns
100
+ -------
101
+ Tensor
102
+ Result of applying ``func`` to each chunk of the Tensor.
103
+
104
+ Examples
105
+ --------
106
+ >>> import maxframe.tensor as mt
107
+ >>> a = mt.array([[4, 9]] * 3)
108
+ >>> a.execute()
109
+ array([[4, 9],
110
+ [4, 9],
111
+ [4, 9]])
112
+
113
+ Output dtype will be auto inferred.
114
+
115
+ >>> a.mf.apply_chunk(lambda c: c * 0.5).execute()
116
+ array([[2. , 4.5],
117
+ [2. , 4.5],
118
+ [2. , 4.5]])
119
+
120
+ You can specify ``dtype`` by yourself if auto infer failed.
121
+ """
122
+ elementwise = kwargs.pop("elementwise", None)
123
+ dtype = np.dtype(kwargs.pop("dtype")) if "dtype" in kwargs else None
124
+ shape = kwargs.pop("shape", None)
125
+ order = kwargs.pop("order", None)
126
+ sparse = kwargs.pop("sparse", t.issparse())
127
+ with_chunk_index = kwargs.pop("with_chunk_index", False)
128
+
129
+ op = TensorApplyChunk(
130
+ func=func,
131
+ args=args,
132
+ kwargs=kwargs,
133
+ elementwise=elementwise,
134
+ with_chunk_index=with_chunk_index,
135
+ sparse=sparse,
136
+ )
137
+ return op(t, dtype=dtype, shape=shape, order=order)
@@ -17,7 +17,7 @@ from .compress import compress
17
17
  from .extract import extract
18
18
  from .fill_diagonal import TensorFillDiagonal, fill_diagonal
19
19
  from .flatnonzero import flatnonzero
20
- from .getitem import FancyIndexingConcat, FancyIndexingDistribute, TensorIndex
20
+ from .getitem import TensorIndex
21
21
  from .nonzero import TensorNonzero, nonzero
22
22
  from .setitem import TensorIndexSetValue
23
23
  from .slice import TensorSlice