maxframe 1.3.1__cp38-cp38-win32.whl → 2.0.0b1__cp38-cp38-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 (639) hide show
  1. maxframe/_utils.cp38-win32.pyd +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.cp38-win32.pyd +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.cp38-win32.pyd +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.cp38-win32.pyd +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,404 @@
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 math
16
+
17
+ import numpy as np
18
+ from numpy import ndindex
19
+
20
+ try:
21
+ from numpy import ScalarType
22
+ except ImportError:
23
+ from numpy.core.numeric import ScalarType
24
+
25
+ from .. import datasource as _nx
26
+ from ..core import Tensor
27
+ from ..merge import concatenate
28
+ from ..misc import ndim
29
+
30
+
31
+ class nd_grid(object):
32
+ """
33
+ Construct a multi-dimensional "meshgrid".
34
+
35
+ ``grid = nd_grid()`` creates an instance which will return a mesh-grid
36
+ when indexed. The dimension and number of the output arrays are equal
37
+ to the number of indexing dimensions. If the step length is not a
38
+ complex number, then the stop is not inclusive.
39
+
40
+ However, if the step length is a **complex number** (e.g. 5j), then the
41
+ integer part of its magnitude is interpreted as specifying the
42
+ number of points to create between the start and stop values, where
43
+ the stop value **is inclusive**.
44
+
45
+ If instantiated with an argument of ``sparse=True``, the mesh-grid is
46
+ open (or not fleshed out) so that only one-dimension of each returned
47
+ argument is greater than 1.
48
+
49
+ Parameters
50
+ ----------
51
+ sparse : bool, optional
52
+ Whether the grid is sparse or not. Default is False.
53
+
54
+ Notes
55
+ -----
56
+ Two instances of `nd_grid` are made available in the maxframe.tensor namespace,
57
+ `mgrid` and `ogrid`::
58
+
59
+ mgrid = nd_grid(sparse=False)
60
+ ogrid = nd_grid(sparse=True)
61
+
62
+ Users should use these pre-defined instances instead of using `nd_grid`
63
+ directly.
64
+
65
+ Examples
66
+ --------
67
+ >>> import maxframe.tensor as mt
68
+
69
+ >>> mgrid = mt.lib.index_tricks.nd_grid()
70
+ >>> mgrid[0:5,0:5]
71
+ array([[[0, 0, 0, 0, 0],
72
+ [1, 1, 1, 1, 1],
73
+ [2, 2, 2, 2, 2],
74
+ [3, 3, 3, 3, 3],
75
+ [4, 4, 4, 4, 4]],
76
+ [[0, 1, 2, 3, 4],
77
+ [0, 1, 2, 3, 4],
78
+ [0, 1, 2, 3, 4],
79
+ [0, 1, 2, 3, 4],
80
+ [0, 1, 2, 3, 4]]])
81
+ >>> mgrid[-1:1:5j]
82
+ array([-1. , -0.5, 0. , 0.5, 1. ])
83
+
84
+ >>> ogrid = mt.lib.index_tricks.nd_grid(sparse=True)
85
+ >>> ogrid[0:5,0:5]
86
+ [array([[0],
87
+ [1],
88
+ [2],
89
+ [3],
90
+ [4]]), array([[0, 1, 2, 3, 4]])]
91
+
92
+ """
93
+
94
+ def __init__(self, sparse=False):
95
+ self.sparse = sparse
96
+
97
+ def __getitem__(self, key):
98
+ try:
99
+ size = []
100
+ typ = int
101
+ for k in key:
102
+ step = k.step
103
+ start = k.start
104
+ if start is None:
105
+ start = 0
106
+ if step is None:
107
+ step = 1
108
+ if isinstance(step, complex):
109
+ size.append(int(abs(step)))
110
+ typ = float
111
+ else:
112
+ size.append(int(math.ceil((k.stop - start) / (step * 1.0))))
113
+ if (
114
+ isinstance(step, float)
115
+ or isinstance(start, float)
116
+ or isinstance(k.stop, float)
117
+ ):
118
+ typ = float
119
+ if self.sparse:
120
+ nn = [
121
+ _nx.arange(_x, dtype=_t) for _x, _t in zip(size, (typ,) * len(size))
122
+ ]
123
+ else:
124
+ nn = _nx.indices(size, typ)
125
+ for k in range(len(size)):
126
+ step = key[k].step
127
+ start = key[k].start
128
+ if start is None:
129
+ start = 0
130
+ if step is None:
131
+ step = 1
132
+ if isinstance(step, complex):
133
+ step = int(abs(step))
134
+ if step != 1:
135
+ step = (key[k].stop - start) / float(step - 1)
136
+ nn[k] = nn[k] * step + start
137
+ if self.sparse:
138
+ slobj = [np.newaxis] * len(size)
139
+ for k in range(len(size)):
140
+ slobj[k] = slice(None, None)
141
+ nn[k] = nn[k][slobj]
142
+ slobj[k] = np.newaxis
143
+ return nn
144
+ except (IndexError, TypeError): # pragma: no cover
145
+ step = key.step
146
+ stop = key.stop
147
+ start = key.start
148
+ if start is None:
149
+ start = 0
150
+ if isinstance(step, complex):
151
+ step = abs(step)
152
+ length = int(step)
153
+ if step != 1:
154
+ step = (key.stop - start) / float(step - 1)
155
+ stop = key.stop + step
156
+ return _nx.arange(0, length, 1, float) * step + start
157
+ else:
158
+ return _nx.arange(start, stop, step)
159
+
160
+ def __len__(self):
161
+ return 0
162
+
163
+
164
+ mgrid = nd_grid(sparse=False)
165
+ ogrid = nd_grid(sparse=True)
166
+
167
+
168
+ class AxisConcatenator:
169
+ def __init__(self, axis=0, matrix=False, ndmin=1, trans1d=-1):
170
+ self.axis = axis
171
+ self.matrix = matrix
172
+ self.trans1d = trans1d
173
+ self.ndmin = ndmin
174
+
175
+ def __getitem__(self, key):
176
+ # handle matrix builder syntax
177
+ if isinstance(key, str): # pragma: no cover
178
+ raise NotImplementedError("Does not support operation on matrix")
179
+
180
+ if not isinstance(key, tuple):
181
+ key = (key,)
182
+
183
+ # copy attributes, since they can be overridden in the first argument
184
+ trans1d = self.trans1d
185
+ ndmin = self.ndmin
186
+ matrix = self.matrix
187
+ axis = self.axis
188
+
189
+ objs = []
190
+ scalars = []
191
+ arraytypes = []
192
+ scalartypes = []
193
+
194
+ for k, item in enumerate(key):
195
+ scalar = False
196
+ if isinstance(item, slice):
197
+ step = item.step
198
+ start = item.start
199
+ stop = item.stop
200
+ if start is None:
201
+ start = 0
202
+ if step is None:
203
+ step = 1
204
+ if isinstance(step, complex):
205
+ size = int(abs(step))
206
+ newobj = _nx.linspace(start, stop, num=size)
207
+ else:
208
+ newobj = _nx.arange(start, stop, step)
209
+ if ndmin > 1:
210
+ newobj = _nx.array(newobj, copy=False, ndmin=ndmin)
211
+ if trans1d != -1:
212
+ newobj = newobj.swapaxes(-1, trans1d)
213
+ elif isinstance(item, str):
214
+ if k != 0:
215
+ raise ValueError("special directives must be the first entry.")
216
+ if item in ("r", "c"): # pragma: no cover
217
+ raise NotImplementedError("Does not support operation on matrix")
218
+ if "," in item:
219
+ vec = item.split(",")
220
+ try:
221
+ axis, ndmin = [int(x) for x in vec[:2]]
222
+ if len(vec) == 3:
223
+ trans1d = int(vec[2])
224
+ continue
225
+ except Exception: # pragma: no cover
226
+ raise ValueError("unknown special directive")
227
+ try:
228
+ axis = int(item)
229
+ continue
230
+ except (ValueError, TypeError): # pragma: no cover# pragma: no cover
231
+ raise ValueError("unknown special directive")
232
+ elif type(item) in ScalarType:
233
+ newobj = np.array(item, ndmin=ndmin)
234
+ scalars.append(len(objs))
235
+ scalar = True
236
+ scalartypes.append(newobj.dtype)
237
+ else:
238
+ item_ndim = ndim(item)
239
+ newobj = _nx.array(item, copy=False, ndmin=ndmin)
240
+ if trans1d != -1 and item_ndim < ndmin:
241
+ k2 = ndmin - item_ndim
242
+ k1 = trans1d
243
+ if k1 < 0:
244
+ k1 += k2 + 1
245
+ defaxes = list(range(ndmin))
246
+ axes = defaxes[:k1] + defaxes[k2:] + defaxes[k1:k2]
247
+ newobj = newobj.transpose(axes)
248
+ objs.append(newobj)
249
+ if not scalar and isinstance(newobj, Tensor):
250
+ arraytypes.append(newobj.dtype)
251
+
252
+ # Ensure that scalars won't up-cast unless warranted
253
+ final_dtype = np.result_type(*arraytypes, *scalartypes)
254
+ if final_dtype is not None:
255
+ for k in scalars:
256
+ objs[k] = objs[k].astype(final_dtype)
257
+
258
+ res = concatenate(tuple(objs), axis=axis)
259
+
260
+ if matrix: # pragma: no cover
261
+ raise NotImplementedError("Does not support operation on matrix")
262
+ return res
263
+
264
+ def __len__(self):
265
+ return 0
266
+
267
+
268
+ # separate classes are used here instead of just making r_ = concatentor(0),
269
+ # etc. because otherwise we couldn't get the doc string to come out right
270
+ # in help(r_)
271
+
272
+
273
+ class RClass(AxisConcatenator):
274
+ """
275
+ Translates slice objects to concatenation along the first axis.
276
+
277
+ This is a simple way to build up tensor quickly. There are two use cases.
278
+
279
+ 1. If the index expression contains comma separated tensors, then stack
280
+ them along their first axis.
281
+ 2. If the index expression contains slice notation or scalars then create
282
+ a 1-D tensor with a range indicated by the slice notation.
283
+
284
+ If slice notation is used, the syntax ``start:stop:step`` is equivalent
285
+ to ``mt.arange(start, stop, step)`` inside of the brackets. However, if
286
+ ``step`` is an imaginary number (i.e. 100j) then its integer portion is
287
+ interpreted as a number-of-points desired and the start and stop are
288
+ inclusive. In other words ``start:stop:stepj`` is interpreted as
289
+ ``mt.linspace(start, stop, step, endpoint=1)`` inside of the brackets.
290
+ After expansion of slice notation, all comma separated sequences are
291
+ concatenated together.
292
+
293
+ Optional character strings placed as the first element of the index
294
+ expression can be used to change the output. The strings 'r' or 'c' result
295
+ in matrix output. If the result is 1-D and 'r' is specified a 1 x N (row)
296
+ matrix is produced. If the result is 1-D and 'c' is specified, then a N x 1
297
+ (column) matrix is produced. If the result is 2-D then both provide the
298
+ same matrix result.
299
+
300
+ A string integer specifies which axis to stack multiple comma separated
301
+ tensors along. A string of two comma-separated integers allows indication
302
+ of the minimum number of dimensions to force each entry into as the
303
+ second integer (the axis to concatenate along is still the first integer).
304
+
305
+ A string with three comma-separated integers allows specification of the
306
+ axis to concatenate along, the minimum number of dimensions to force the
307
+ entries to, and which axis should contain the start of the tensors which
308
+ are less than the specified number of dimensions. In other words the third
309
+ integer allows you to specify where the 1's should be placed in the shape
310
+ of the tensors that have their shapes upgraded. By default, they are placed
311
+ in the front of the shape tuple. The third argument allows you to specify
312
+ where the start of the tensor should be instead. Thus, a third argument of
313
+ '0' would place the 1's at the end of the tensor shape. Negative integers
314
+ specify where in the new shape tuple the last dimension of upgraded tensors
315
+ should be placed, so the default is '-1'.
316
+
317
+ Parameters
318
+ ----------
319
+ Not a function, so takes no parameters
320
+
321
+
322
+ Returns
323
+ -------
324
+ A concatenated tensor or matrix.
325
+
326
+ See Also
327
+ --------
328
+ concatenate : Join a sequence of tensors along an existing axis.
329
+ c_ : Translates slice objects to concatenation along the second axis.
330
+
331
+ Examples
332
+ --------
333
+ >>> import maxframe.tensor as mt
334
+ >>> mt.r_[mt.array([1,2,3]), 0, 0, mt.array([4,5,6])].execute()
335
+ array([1, 2, 3, ..., 4, 5, 6])
336
+ >>> mt.r_[-1:1:6j, [0]*3, 5, 6].execute()
337
+ array([-1. , -0.6, -0.2, 0.2, 0.6, 1. , 0. , 0. , 0. , 5. , 6. ])
338
+
339
+ String integers specify the axis to concatenate along or the minimum
340
+ number of dimensions to force entries into.
341
+
342
+ >>> a = mt.array([[0, 1, 2], [3, 4, 5]])
343
+ >>> mt.r_['-1', a, a].execute() # concatenate along last axis
344
+ array([[0, 1, 2, 0, 1, 2],
345
+ [3, 4, 5, 3, 4, 5]])
346
+ >>> mt.r_['0,2', [1,2,3], [4,5,6]].execute() # concatenate along first axis, dim>=2
347
+ array([[1, 2, 3],
348
+ [4, 5, 6]])
349
+
350
+ >>> mt.r_['0,2,0', [1,2,3], [4,5,6]].execute()
351
+ array([[1],
352
+ [2],
353
+ [3],
354
+ [4],
355
+ [5],
356
+ [6]])
357
+ >>> mt.r_['1,2,0', [1,2,3], [4,5,6]].execute()
358
+ array([[1, 4],
359
+ [2, 5],
360
+ [3, 6]])
361
+ """
362
+
363
+ def __init__(self):
364
+ AxisConcatenator.__init__(self, 0)
365
+
366
+
367
+ r_ = RClass()
368
+
369
+
370
+ class CClass(AxisConcatenator):
371
+ """
372
+ Translates slice objects to concatenation along the second axis.
373
+
374
+ This is short-hand for ``mt.r_['-1,2,0', index expression]``, which is
375
+ useful because of its common occurrence. In particular, tensors will be
376
+ stacked along their last axis after being upgraded to at least 2-D with
377
+ 1's post-pended to the shape (column vectors made out of 1-D tensors).
378
+
379
+ See Also
380
+ --------
381
+ column_stack : Stack 1-D tensors as columns into a 2-D tensor.
382
+ r_ : For more detailed documentation.
383
+
384
+ Examples
385
+ --------
386
+ >>> import maxframe.tensor as mt
387
+
388
+ >>> mt.c_[mt.array([1,2,3]), mt.array([4,5,6])].execute()
389
+ array([[1, 4],
390
+ [2, 5],
391
+ [3, 6]])
392
+ >>> mt.c_[mt.array([[1,2,3]]), 0, 0, mt.array([[4,5,6]])].execute()
393
+ array([[1, 2, 3, ..., 4, 5, 6]])
394
+
395
+ """
396
+
397
+ def __init__(self):
398
+ AxisConcatenator.__init__(self, -1, ndmin=2, trans1d=0)
399
+
400
+
401
+ c_ = CClass()
402
+
403
+
404
+ __all__ = ["ndindex", "mgrid", "ogrid", "r_", "c_"]
@@ -0,0 +1,36 @@
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 .dot import TensorDot, dot
16
+ from .inner import inner, innerproduct
17
+ from .inv import TensorInv, inv
18
+ from .lu import TensorLU, lu
19
+ from .matmul import TensorMatmul, matmul
20
+ from .qr import TensorQR, qr
21
+ from .solve_triangular import TensorSolveTriangular, solve_triangular
22
+ from .svd import TensorSVD, svd
23
+ from .tensordot import TensorTensorDot, tensordot
24
+ from .vdot import vdot
25
+
26
+
27
+ def _install():
28
+ from ..core import Tensor, TensorData
29
+
30
+ for cls in (Tensor, TensorData):
31
+ setattr(cls, "__matmul__", matmul)
32
+ setattr(cls, "dot", dot)
33
+
34
+
35
+ _install()
36
+ del _install
@@ -0,0 +1,145 @@
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from typing import List
16
+
17
+ from ... import opcodes
18
+ from ...core import EntityData
19
+ from ...serialization.serializables import KeyField
20
+ from ..core import Tensor, TensorOrder
21
+ from ..datasource import tensor as astensor
22
+ from ..operators import TensorOperator, TensorOperatorMixin
23
+ from .tensordot import tensordot
24
+
25
+
26
+ class TensorDot(TensorOperator, TensorOperatorMixin):
27
+ _op_type_ = opcodes.DOT
28
+
29
+ a = KeyField("a")
30
+ b = KeyField("b")
31
+
32
+ @classmethod
33
+ def _set_inputs(cls, op: "TensorDot", inputs: List[EntityData]):
34
+ super()._set_inputs(op, inputs)
35
+ op.a, op.b = op._inputs
36
+
37
+
38
+ def dot(a, b, out=None, sparse=None):
39
+ """
40
+ Dot product of two arrays. Specifically,
41
+
42
+ - If both `a` and `b` are 1-D arrays, it is inner product of vectors
43
+ (without complex conjugation).
44
+
45
+ - If both `a` and `b` are 2-D arrays, it is matrix multiplication,
46
+ but using :func:`matmul` or ``a @ b`` is preferred.
47
+
48
+ - If either `a` or `b` is 0-D (scalar), it is equivalent to :func:`multiply`
49
+ and using ``numpy.multiply(a, b)`` or ``a * b`` is preferred.
50
+
51
+ - If `a` is an N-D array and `b` is a 1-D array, it is a sum product over
52
+ the last axis of `a` and `b`.
53
+
54
+ - If `a` is an N-D array and `b` is an M-D array (where ``M>=2``), it is a
55
+ sum product over the last axis of `a` and the second-to-last axis of `b`::
56
+
57
+ dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])
58
+
59
+ Parameters
60
+ ----------
61
+ a : array_like
62
+ First argument.
63
+ b : array_like
64
+ Second argument.
65
+ out : Tensor, optional
66
+ Output argument. This must have the exact kind that would be returned
67
+ if it was not used. In particular, it must have the right type, must be
68
+ C-contiguous, and its dtype must be the dtype that would be returned
69
+ for `dot(a,b)`. This is a performance feature. Therefore, if these
70
+ conditions are not met, an exception is raised, instead of attempting
71
+ to be flexible.
72
+
73
+ Returns
74
+ -------
75
+ output : Tensor
76
+ Returns the dot product of `a` and `b`. If `a` and `b` are both
77
+ scalars or both 1-D arrays then a scalar is returned; otherwise
78
+ a tensor is returned.
79
+ If `out` is given, then it is returned.
80
+
81
+ Raises
82
+ ------
83
+ ValueError
84
+ If the last dimension of `a` is not the same size as
85
+ the second-to-last dimension of `b`.
86
+
87
+ See Also
88
+ --------
89
+ vdot : Complex-conjugating dot product.
90
+ tensordot : Sum products over arbitrary axes.
91
+ einsum : Einstein summation convention.
92
+ matmul : '@' operator as method with out parameter.
93
+
94
+ Examples
95
+ --------
96
+ >>> import maxframe.tensor as mt
97
+
98
+ >>> mt.dot(3, 4).execute()
99
+ 12
100
+
101
+ Neither argument is complex-conjugated:
102
+
103
+ >>> mt.dot([2j, 3j], [2j, 3j]).execute()
104
+ (-13+0j)
105
+
106
+ For 2-D arrays it is the matrix product:
107
+
108
+ >>> a = [[1, 0], [0, 1]]
109
+ >>> b = [[4, 1], [2, 2]]
110
+ >>> mt.dot(a, b).execute()
111
+ array([[4, 1],
112
+ [2, 2]])
113
+
114
+ >>> a = mt.arange(3*4*5*6).reshape((3,4,5,6))
115
+ >>> b = mt.arange(3*4*5*6)[::-1].reshape((5,4,6,3))
116
+ >>> mt.dot(a, b)[2,3,2,1,2,2].execute()
117
+ 499128
118
+ >>> mt.sum(a[2,3,2,:] * b[1,2,:,2]).execute()
119
+ 499128
120
+ """
121
+ a, b = astensor(a), astensor(b)
122
+ if a.isscalar() and b.isscalar():
123
+ ret = a * b
124
+ else:
125
+ ret = tensordot(a, b, axes=((a.ndim - 1,), (b.ndim - 2,)), sparse=sparse)
126
+
127
+ if out is None:
128
+ return ret
129
+
130
+ # set to out
131
+ if not isinstance(out, Tensor):
132
+ raise TypeError(f"`out` must be a Tensor, got {type(out)} instead")
133
+ if out.shape != ret.shape:
134
+ raise ValueError("output tensor has wrong dimensions")
135
+ if not (
136
+ out.dtype == ret.dtype
137
+ and out.ndim == ret.ndim
138
+ and out.order == TensorOrder.C_ORDER
139
+ ):
140
+ raise ValueError(
141
+ "output tensor is not acceptable "
142
+ "(must have the right datatype, number of dimensions and be a C-Tensor"
143
+ )
144
+ out.data = ret.astype(out.dtype, order=out.order.value, copy=False).data
145
+ return out
@@ -0,0 +1,36 @@
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 .tensordot import tensordot
17
+
18
+
19
+ def inner(a, b, sparse=None):
20
+ """
21
+ Returns the inner product of a and b for arrays of floating point types.
22
+
23
+ Like the generic NumPy equivalent the product sum is over the last dimension
24
+ of a and b. The first argument is not conjugated.
25
+
26
+ """
27
+ a, b = astensor(a), astensor(b)
28
+ if a.isscalar() and b.isscalar():
29
+ ret = a * b
30
+ else:
31
+ ret = tensordot(a, b, axes=(-1, -1), sparse=sparse)
32
+
33
+ return ret
34
+
35
+
36
+ innerproduct = inner
@@ -0,0 +1,83 @@
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
+ from numpy.linalg import LinAlgError
17
+
18
+ from ... import opcodes
19
+ from ..core import TensorOrder
20
+ from ..datasource import tensor as astensor
21
+ from ..operators import TensorHasInput, TensorOperatorMixin
22
+
23
+
24
+ class TensorInv(TensorHasInput, TensorOperatorMixin):
25
+ _op_type_ = opcodes.INV
26
+
27
+ def __call__(self, a):
28
+ a = astensor(a)
29
+ return self.new_tensor([a], a.shape, order=TensorOrder.C_ORDER)
30
+
31
+
32
+ def inv(a, sparse=None):
33
+ """
34
+ Compute the (multiplicative) inverse of a matrix.
35
+ Given a square matrix `a`, return the matrix `ainv` satisfying
36
+ ``dot(a, ainv) = dot(ainv, a) = eye(a.shape[0])``.
37
+
38
+ Parameters
39
+ ----------
40
+ a : (..., M, M) array_like
41
+ Matrix to be inverted.
42
+ sparse: bool, optional
43
+ Return sparse value or not.
44
+
45
+ Returns
46
+ -------
47
+ ainv : (..., M, M) ndarray or matrix
48
+ (Multiplicative) inverse of the matrix `a`.
49
+
50
+ Raises
51
+ ------
52
+ LinAlgError
53
+ If `a` is not square or inversion fails.
54
+
55
+ Examples
56
+ --------
57
+ >>> import maxframe.tensor as mt
58
+ >>> a = np.array([[1., 2.], [3., 4.]])
59
+ >>> ainv = mt.linalg.inv(a)
60
+ >>> mt.allclose(mt.dot(a, ainv), mt.eye(2)).execute()
61
+ True
62
+
63
+ >>> mt.allclose(mt.dot(ainv, a), mt.eye(2)).execute()
64
+ True
65
+
66
+ >>> ainv.execute()
67
+ array([[ -2. , 1. ],
68
+ [ 1.5, -0.5]])
69
+ """
70
+
71
+ # TODO: using some parallel algorithm for matrix inversion.
72
+ a = astensor(a)
73
+ if a.ndim != 2:
74
+ raise LinAlgError(
75
+ f"{a.ndim}-dimensional array given. Tensor must be two-dimensional"
76
+ )
77
+ if a.shape[0] != a.shape[1]:
78
+ raise LinAlgError("Input must be square")
79
+
80
+ tiny_inv = np.linalg.inv(np.array([[1, 2], [2, 5]], dtype=a.dtype))
81
+ sparse = sparse if sparse is not None else a.issparse()
82
+ op = TensorInv(dtype=tiny_inv.dtype, sparse=sparse)
83
+ return op(a)