maxframe 1.3.1__cp39-cp39-win_amd64.whl → 2.0.0__cp39-cp39-win_amd64.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 (640) hide show
  1. maxframe/_utils.cp39-win_amd64.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.cp39-win_amd64.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 +109 -19
  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 +80 -1
  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 +10 -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 +21 -58
  264. maxframe/io/odpsio/volumeio.py +23 -8
  265. maxframe/learn/__init__.py +2 -2
  266. maxframe/learn/contrib/__init__.py +2 -2
  267. maxframe/learn/contrib/graph/connected_components.py +2 -1
  268. maxframe/learn/contrib/lightgbm/__init__.py +33 -0
  269. maxframe/learn/contrib/lightgbm/_predict.py +138 -0
  270. maxframe/learn/contrib/lightgbm/_train.py +163 -0
  271. maxframe/learn/contrib/lightgbm/callback.py +114 -0
  272. maxframe/learn/contrib/lightgbm/classifier.py +199 -0
  273. maxframe/learn/contrib/lightgbm/core.py +372 -0
  274. maxframe/learn/contrib/lightgbm/dataset.py +153 -0
  275. maxframe/learn/contrib/lightgbm/regressor.py +29 -0
  276. maxframe/learn/contrib/lightgbm/tests/__init__.py +13 -0
  277. maxframe/learn/contrib/lightgbm/tests/test_callback.py +58 -0
  278. maxframe/learn/contrib/models.py +38 -9
  279. maxframe/learn/contrib/utils.py +55 -0
  280. maxframe/learn/contrib/xgboost/callback.py +86 -0
  281. maxframe/learn/contrib/xgboost/classifier.py +26 -30
  282. maxframe/learn/contrib/xgboost/core.py +54 -42
  283. maxframe/learn/contrib/xgboost/dmatrix.py +19 -12
  284. maxframe/learn/contrib/xgboost/predict.py +16 -9
  285. maxframe/learn/contrib/xgboost/regressor.py +28 -27
  286. maxframe/learn/contrib/xgboost/tests/test_callback.py +41 -0
  287. maxframe/learn/contrib/xgboost/train.py +59 -16
  288. maxframe/learn/core.py +252 -0
  289. maxframe/learn/datasets/__init__.py +20 -0
  290. maxframe/learn/datasets/samples_generator.py +628 -0
  291. maxframe/learn/linear_model/__init__.py +15 -0
  292. maxframe/learn/linear_model/_base.py +163 -0
  293. maxframe/learn/linear_model/_lin_reg.py +175 -0
  294. maxframe/learn/metrics/__init__.py +25 -0
  295. maxframe/learn/metrics/_check_targets.py +95 -0
  296. maxframe/learn/metrics/_classification.py +1121 -0
  297. maxframe/learn/metrics/_regression.py +256 -0
  298. maxframe/learn/model_selection/__init__.py +15 -0
  299. maxframe/learn/model_selection/_split.py +451 -0
  300. maxframe/learn/model_selection/tests/__init__.py +13 -0
  301. maxframe/learn/model_selection/tests/test_split.py +156 -0
  302. maxframe/learn/preprocessing/__init__.py +16 -0
  303. maxframe/learn/preprocessing/_data/__init__.py +17 -0
  304. maxframe/learn/preprocessing/_data/min_max_scaler.py +390 -0
  305. maxframe/learn/preprocessing/_data/normalize.py +127 -0
  306. maxframe/learn/preprocessing/_data/standard_scaler.py +503 -0
  307. maxframe/learn/preprocessing/_data/utils.py +79 -0
  308. maxframe/learn/preprocessing/_label/__init__.py +16 -0
  309. maxframe/learn/preprocessing/_label/_label_binarizer.py +599 -0
  310. maxframe/learn/preprocessing/_label/_label_encoder.py +174 -0
  311. maxframe/learn/utils/__init__.py +4 -0
  312. maxframe/learn/utils/_encode.py +314 -0
  313. maxframe/learn/utils/checks.py +161 -0
  314. maxframe/learn/utils/core.py +33 -0
  315. maxframe/learn/utils/extmath.py +176 -0
  316. maxframe/learn/utils/multiclass.py +292 -0
  317. maxframe/learn/utils/shuffle.py +114 -0
  318. maxframe/learn/utils/sparsefuncs.py +87 -0
  319. maxframe/learn/utils/validation.py +775 -0
  320. maxframe/lib/__init__.py +0 -2
  321. maxframe/lib/compat.py +145 -0
  322. maxframe/lib/filesystem/_oss_lib/glob.py +1 -1
  323. maxframe/lib/mmh3.cp39-win_amd64.pyd +0 -0
  324. maxframe/lib/sparse/__init__.py +10 -15
  325. maxframe/lib/sparse/array.py +45 -33
  326. maxframe/lib/sparse/core.py +0 -2
  327. maxframe/lib/sparse/linalg.py +31 -0
  328. maxframe/lib/sparse/matrix.py +5 -2
  329. maxframe/lib/sparse/tests/__init__.py +0 -2
  330. maxframe/lib/sparse/tests/test_sparse.py +53 -53
  331. maxframe/lib/sparse/vector.py +0 -2
  332. maxframe/mixin.py +59 -2
  333. maxframe/opcodes.py +13 -5
  334. maxframe/protocol.py +67 -14
  335. maxframe/remote/core.py +16 -14
  336. maxframe/remote/run_script.py +6 -3
  337. maxframe/serialization/__init__.py +2 -0
  338. maxframe/serialization/core.cp39-win_amd64.pyd +0 -0
  339. maxframe/serialization/core.pxd +3 -0
  340. maxframe/serialization/core.pyi +3 -1
  341. maxframe/serialization/core.pyx +82 -4
  342. maxframe/serialization/pandas.py +5 -1
  343. maxframe/serialization/serializables/core.py +6 -5
  344. maxframe/serialization/serializables/field.py +2 -2
  345. maxframe/serialization/serializables/tests/test_field_type.py +3 -5
  346. maxframe/serialization/tests/test_serial.py +27 -0
  347. maxframe/session.py +4 -71
  348. maxframe/sperunner.py +165 -0
  349. maxframe/tensor/__init__.py +35 -2
  350. maxframe/tensor/arithmetic/__init__.py +2 -4
  351. maxframe/tensor/arithmetic/abs.py +0 -2
  352. maxframe/tensor/arithmetic/absolute.py +0 -2
  353. maxframe/tensor/arithmetic/add.py +34 -4
  354. maxframe/tensor/arithmetic/angle.py +0 -2
  355. maxframe/tensor/arithmetic/arccos.py +1 -4
  356. maxframe/tensor/arithmetic/arccosh.py +1 -3
  357. maxframe/tensor/arithmetic/arcsin.py +0 -2
  358. maxframe/tensor/arithmetic/arcsinh.py +0 -2
  359. maxframe/tensor/arithmetic/arctan.py +0 -2
  360. maxframe/tensor/arithmetic/arctan2.py +0 -2
  361. maxframe/tensor/arithmetic/arctanh.py +0 -2
  362. maxframe/tensor/arithmetic/around.py +0 -2
  363. maxframe/tensor/arithmetic/bitand.py +0 -2
  364. maxframe/tensor/arithmetic/bitor.py +1 -3
  365. maxframe/tensor/arithmetic/bitxor.py +1 -3
  366. maxframe/tensor/arithmetic/cbrt.py +0 -2
  367. maxframe/tensor/arithmetic/ceil.py +0 -2
  368. maxframe/tensor/arithmetic/clip.py +13 -13
  369. maxframe/tensor/arithmetic/conj.py +0 -2
  370. maxframe/tensor/arithmetic/copysign.py +0 -2
  371. maxframe/tensor/arithmetic/core.py +47 -39
  372. maxframe/tensor/arithmetic/cos.py +1 -3
  373. maxframe/tensor/arithmetic/cosh.py +0 -2
  374. maxframe/tensor/arithmetic/deg2rad.py +0 -2
  375. maxframe/tensor/arithmetic/degrees.py +0 -2
  376. maxframe/tensor/arithmetic/divide.py +0 -2
  377. maxframe/tensor/arithmetic/equal.py +0 -2
  378. maxframe/tensor/arithmetic/exp.py +1 -3
  379. maxframe/tensor/arithmetic/exp2.py +0 -2
  380. maxframe/tensor/arithmetic/expm1.py +0 -2
  381. maxframe/tensor/arithmetic/fabs.py +0 -2
  382. maxframe/tensor/arithmetic/fix.py +0 -2
  383. maxframe/tensor/arithmetic/float_power.py +0 -2
  384. maxframe/tensor/arithmetic/floor.py +0 -2
  385. maxframe/tensor/arithmetic/floordiv.py +0 -2
  386. maxframe/tensor/arithmetic/fmax.py +0 -2
  387. maxframe/tensor/arithmetic/fmin.py +0 -2
  388. maxframe/tensor/arithmetic/fmod.py +0 -2
  389. maxframe/tensor/arithmetic/frexp.py +6 -2
  390. maxframe/tensor/arithmetic/greater.py +0 -2
  391. maxframe/tensor/arithmetic/greater_equal.py +0 -2
  392. maxframe/tensor/arithmetic/hypot.py +0 -2
  393. maxframe/tensor/arithmetic/i0.py +1 -3
  394. maxframe/tensor/arithmetic/imag.py +0 -2
  395. maxframe/tensor/arithmetic/invert.py +1 -3
  396. maxframe/tensor/arithmetic/isclose.py +0 -2
  397. maxframe/tensor/arithmetic/iscomplex.py +0 -2
  398. maxframe/tensor/arithmetic/isfinite.py +1 -3
  399. maxframe/tensor/arithmetic/isinf.py +0 -2
  400. maxframe/tensor/arithmetic/isnan.py +0 -2
  401. maxframe/tensor/arithmetic/isreal.py +0 -2
  402. maxframe/tensor/arithmetic/ldexp.py +0 -2
  403. maxframe/tensor/arithmetic/less.py +0 -2
  404. maxframe/tensor/arithmetic/less_equal.py +0 -2
  405. maxframe/tensor/arithmetic/log.py +1 -3
  406. maxframe/tensor/arithmetic/log10.py +1 -3
  407. maxframe/tensor/arithmetic/log1p.py +1 -3
  408. maxframe/tensor/arithmetic/log2.py +1 -3
  409. maxframe/tensor/arithmetic/logaddexp.py +0 -2
  410. maxframe/tensor/arithmetic/logaddexp2.py +0 -2
  411. maxframe/tensor/arithmetic/logical_and.py +0 -2
  412. maxframe/tensor/arithmetic/logical_not.py +1 -3
  413. maxframe/tensor/arithmetic/logical_or.py +0 -2
  414. maxframe/tensor/arithmetic/logical_xor.py +0 -2
  415. maxframe/tensor/arithmetic/lshift.py +0 -2
  416. maxframe/tensor/arithmetic/maximum.py +0 -2
  417. maxframe/tensor/arithmetic/minimum.py +0 -2
  418. maxframe/tensor/arithmetic/mod.py +0 -2
  419. maxframe/tensor/arithmetic/modf.py +6 -2
  420. maxframe/tensor/arithmetic/multiply.py +37 -4
  421. maxframe/tensor/arithmetic/nan_to_num.py +0 -2
  422. maxframe/tensor/arithmetic/negative.py +0 -2
  423. maxframe/tensor/arithmetic/nextafter.py +0 -2
  424. maxframe/tensor/arithmetic/not_equal.py +0 -2
  425. maxframe/tensor/arithmetic/positive.py +0 -2
  426. maxframe/tensor/arithmetic/power.py +0 -2
  427. maxframe/tensor/arithmetic/rad2deg.py +0 -2
  428. maxframe/tensor/arithmetic/radians.py +0 -2
  429. maxframe/tensor/arithmetic/real.py +0 -2
  430. maxframe/tensor/arithmetic/reciprocal.py +5 -3
  431. maxframe/tensor/arithmetic/rint.py +1 -3
  432. maxframe/tensor/arithmetic/rshift.py +0 -2
  433. maxframe/tensor/arithmetic/setimag.py +0 -2
  434. maxframe/tensor/arithmetic/setreal.py +0 -2
  435. maxframe/tensor/arithmetic/sign.py +0 -2
  436. maxframe/tensor/arithmetic/signbit.py +0 -2
  437. maxframe/tensor/arithmetic/sin.py +0 -2
  438. maxframe/tensor/arithmetic/sinc.py +1 -3
  439. maxframe/tensor/arithmetic/sinh.py +0 -2
  440. maxframe/tensor/arithmetic/spacing.py +0 -2
  441. maxframe/tensor/arithmetic/sqrt.py +0 -2
  442. maxframe/tensor/arithmetic/square.py +0 -2
  443. maxframe/tensor/arithmetic/subtract.py +4 -2
  444. maxframe/tensor/arithmetic/tan.py +0 -2
  445. maxframe/tensor/arithmetic/tanh.py +0 -2
  446. maxframe/tensor/arithmetic/tests/__init__.py +0 -2
  447. maxframe/tensor/arithmetic/tests/test_arithmetic.py +43 -9
  448. maxframe/tensor/arithmetic/truediv.py +0 -2
  449. maxframe/tensor/arithmetic/trunc.py +0 -2
  450. maxframe/tensor/arithmetic/utils.py +32 -6
  451. maxframe/tensor/array_utils.py +3 -25
  452. maxframe/tensor/core.py +6 -6
  453. maxframe/tensor/datasource/__init__.py +10 -2
  454. maxframe/tensor/datasource/arange.py +0 -2
  455. maxframe/tensor/datasource/array.py +3 -22
  456. maxframe/tensor/datasource/core.py +15 -10
  457. maxframe/tensor/datasource/diag.py +140 -0
  458. maxframe/tensor/datasource/diagflat.py +69 -0
  459. maxframe/tensor/datasource/empty.py +0 -2
  460. maxframe/tensor/datasource/eye.py +95 -0
  461. maxframe/tensor/datasource/from_dataframe.py +0 -2
  462. maxframe/tensor/datasource/from_dense.py +0 -17
  463. maxframe/tensor/datasource/from_sparse.py +0 -2
  464. maxframe/tensor/datasource/full.py +0 -2
  465. maxframe/tensor/datasource/identity.py +54 -0
  466. maxframe/tensor/datasource/indices.py +115 -0
  467. maxframe/tensor/datasource/linspace.py +140 -0
  468. maxframe/tensor/datasource/meshgrid.py +135 -0
  469. maxframe/tensor/datasource/ones.py +8 -3
  470. maxframe/tensor/datasource/tests/test_datasource.py +32 -1
  471. maxframe/tensor/datasource/tri_array.py +107 -0
  472. maxframe/tensor/datasource/zeros.py +7 -3
  473. maxframe/tensor/extensions/__init__.py +31 -0
  474. maxframe/tensor/extensions/accessor.py +25 -0
  475. maxframe/tensor/extensions/apply_chunk.py +137 -0
  476. maxframe/tensor/indexing/__init__.py +1 -1
  477. maxframe/tensor/indexing/choose.py +8 -6
  478. maxframe/tensor/indexing/compress.py +0 -2
  479. maxframe/tensor/indexing/extract.py +0 -2
  480. maxframe/tensor/indexing/fill_diagonal.py +9 -6
  481. maxframe/tensor/indexing/flatnonzero.py +1 -3
  482. maxframe/tensor/indexing/getitem.py +10 -43
  483. maxframe/tensor/indexing/nonzero.py +2 -4
  484. maxframe/tensor/indexing/setitem.py +19 -9
  485. maxframe/tensor/indexing/slice.py +6 -3
  486. maxframe/tensor/indexing/take.py +0 -2
  487. maxframe/tensor/indexing/tests/__init__.py +0 -2
  488. maxframe/tensor/indexing/tests/test_indexing.py +0 -2
  489. maxframe/tensor/indexing/unravel_index.py +6 -6
  490. maxframe/tensor/lib/__init__.py +16 -0
  491. maxframe/tensor/lib/index_tricks.py +404 -0
  492. maxframe/tensor/linalg/__init__.py +36 -0
  493. maxframe/tensor/linalg/dot.py +145 -0
  494. maxframe/tensor/linalg/inner.py +36 -0
  495. maxframe/tensor/linalg/inv.py +83 -0
  496. maxframe/tensor/linalg/lu.py +115 -0
  497. maxframe/tensor/linalg/matmul.py +225 -0
  498. maxframe/tensor/linalg/qr.py +124 -0
  499. maxframe/tensor/linalg/solve_triangular.py +103 -0
  500. maxframe/tensor/linalg/svd.py +167 -0
  501. maxframe/tensor/linalg/tensordot.py +213 -0
  502. maxframe/tensor/linalg/vdot.py +73 -0
  503. maxframe/tensor/merge/__init__.py +4 -0
  504. maxframe/tensor/merge/append.py +74 -0
  505. maxframe/tensor/merge/column_stack.py +63 -0
  506. maxframe/tensor/merge/concatenate.py +3 -2
  507. maxframe/tensor/merge/dstack.py +71 -0
  508. maxframe/tensor/merge/hstack.py +70 -0
  509. maxframe/tensor/merge/stack.py +0 -2
  510. maxframe/tensor/merge/tests/test_merge.py +0 -2
  511. maxframe/tensor/misc/__init__.py +18 -5
  512. maxframe/tensor/misc/astype.py +10 -8
  513. maxframe/tensor/misc/broadcast_to.py +1 -1
  514. maxframe/tensor/misc/copy.py +64 -0
  515. maxframe/tensor/misc/diff.py +115 -0
  516. maxframe/tensor/misc/flatten.py +63 -0
  517. maxframe/tensor/misc/in1d.py +94 -0
  518. maxframe/tensor/misc/isin.py +130 -0
  519. maxframe/tensor/misc/ndim.py +53 -0
  520. maxframe/tensor/misc/ravel.py +0 -2
  521. maxframe/tensor/misc/repeat.py +129 -0
  522. maxframe/tensor/misc/searchsorted.py +147 -0
  523. maxframe/tensor/misc/setdiff1d.py +58 -0
  524. maxframe/tensor/misc/squeeze.py +117 -0
  525. maxframe/tensor/misc/swapaxes.py +113 -0
  526. maxframe/tensor/misc/tests/test_misc.py +0 -2
  527. maxframe/tensor/misc/transpose.py +8 -4
  528. maxframe/tensor/misc/trapezoid.py +123 -0
  529. maxframe/tensor/misc/unique.py +0 -1
  530. maxframe/tensor/misc/where.py +10 -8
  531. maxframe/tensor/operators.py +0 -34
  532. maxframe/tensor/random/__init__.py +3 -5
  533. maxframe/tensor/random/binomial.py +0 -2
  534. maxframe/tensor/random/bytes.py +0 -2
  535. maxframe/tensor/random/chisquare.py +0 -2
  536. maxframe/tensor/random/choice.py +9 -8
  537. maxframe/tensor/random/core.py +20 -5
  538. maxframe/tensor/random/dirichlet.py +0 -2
  539. maxframe/tensor/random/exponential.py +0 -2
  540. maxframe/tensor/random/f.py +2 -4
  541. maxframe/tensor/random/gamma.py +0 -2
  542. maxframe/tensor/random/geometric.py +0 -2
  543. maxframe/tensor/random/gumbel.py +0 -2
  544. maxframe/tensor/random/hypergeometric.py +0 -2
  545. maxframe/tensor/random/laplace.py +2 -4
  546. maxframe/tensor/random/logistic.py +0 -2
  547. maxframe/tensor/random/lognormal.py +0 -2
  548. maxframe/tensor/random/logseries.py +0 -2
  549. maxframe/tensor/random/multinomial.py +0 -2
  550. maxframe/tensor/random/multivariate_normal.py +0 -2
  551. maxframe/tensor/random/negative_binomial.py +0 -2
  552. maxframe/tensor/random/noncentral_chisquare.py +0 -2
  553. maxframe/tensor/random/noncentral_f.py +1 -3
  554. maxframe/tensor/random/normal.py +0 -2
  555. maxframe/tensor/random/pareto.py +0 -2
  556. maxframe/tensor/random/permutation.py +6 -3
  557. maxframe/tensor/random/poisson.py +0 -2
  558. maxframe/tensor/random/power.py +0 -2
  559. maxframe/tensor/random/rand.py +0 -2
  560. maxframe/tensor/random/randint.py +0 -2
  561. maxframe/tensor/random/randn.py +0 -2
  562. maxframe/tensor/random/random_integers.py +0 -2
  563. maxframe/tensor/random/random_sample.py +0 -2
  564. maxframe/tensor/random/rayleigh.py +0 -2
  565. maxframe/tensor/random/standard_cauchy.py +0 -2
  566. maxframe/tensor/random/standard_exponential.py +0 -2
  567. maxframe/tensor/random/standard_gamma.py +0 -2
  568. maxframe/tensor/random/standard_normal.py +0 -2
  569. maxframe/tensor/random/standard_t.py +0 -2
  570. maxframe/tensor/random/tests/__init__.py +0 -2
  571. maxframe/tensor/random/tests/test_random.py +0 -2
  572. maxframe/tensor/random/triangular.py +0 -2
  573. maxframe/tensor/random/uniform.py +0 -2
  574. maxframe/tensor/random/vonmises.py +0 -2
  575. maxframe/tensor/random/wald.py +0 -2
  576. maxframe/tensor/random/weibull.py +0 -2
  577. maxframe/tensor/random/zipf.py +0 -2
  578. maxframe/tensor/reduction/__init__.py +0 -2
  579. maxframe/tensor/reduction/all.py +0 -2
  580. maxframe/tensor/reduction/allclose.py +0 -2
  581. maxframe/tensor/reduction/any.py +0 -2
  582. maxframe/tensor/reduction/argmax.py +1 -3
  583. maxframe/tensor/reduction/argmin.py +1 -3
  584. maxframe/tensor/reduction/array_equal.py +0 -2
  585. maxframe/tensor/reduction/core.py +0 -2
  586. maxframe/tensor/reduction/count_nonzero.py +0 -2
  587. maxframe/tensor/reduction/cumprod.py +0 -2
  588. maxframe/tensor/reduction/cumsum.py +0 -2
  589. maxframe/tensor/reduction/max.py +0 -2
  590. maxframe/tensor/reduction/mean.py +0 -2
  591. maxframe/tensor/reduction/min.py +0 -2
  592. maxframe/tensor/reduction/nanargmax.py +0 -2
  593. maxframe/tensor/reduction/nanargmin.py +0 -2
  594. maxframe/tensor/reduction/nancumprod.py +0 -2
  595. maxframe/tensor/reduction/nancumsum.py +0 -2
  596. maxframe/tensor/reduction/nanmax.py +0 -2
  597. maxframe/tensor/reduction/nanmean.py +0 -2
  598. maxframe/tensor/reduction/nanmin.py +0 -2
  599. maxframe/tensor/reduction/nanprod.py +0 -2
  600. maxframe/tensor/reduction/nanstd.py +0 -2
  601. maxframe/tensor/reduction/nansum.py +0 -2
  602. maxframe/tensor/reduction/nanvar.py +0 -2
  603. maxframe/tensor/reduction/prod.py +0 -2
  604. maxframe/tensor/reduction/std.py +0 -2
  605. maxframe/tensor/reduction/sum.py +0 -2
  606. maxframe/tensor/reduction/tests/test_reduction.py +1 -4
  607. maxframe/tensor/reduction/var.py +0 -2
  608. maxframe/tensor/reshape/__init__.py +0 -2
  609. maxframe/tensor/reshape/reshape.py +6 -5
  610. maxframe/tensor/reshape/tests/__init__.py +0 -2
  611. maxframe/tensor/reshape/tests/test_reshape.py +0 -2
  612. maxframe/tensor/sort/__init__.py +16 -0
  613. maxframe/tensor/sort/argsort.py +150 -0
  614. maxframe/tensor/sort/sort.py +295 -0
  615. maxframe/tensor/special/__init__.py +37 -0
  616. maxframe/tensor/special/core.py +38 -0
  617. maxframe/tensor/special/misc.py +142 -0
  618. maxframe/tensor/special/statistical.py +56 -0
  619. maxframe/tensor/statistics/__init__.py +5 -0
  620. maxframe/tensor/statistics/average.py +143 -0
  621. maxframe/tensor/statistics/bincount.py +133 -0
  622. maxframe/tensor/statistics/quantile.py +10 -8
  623. maxframe/tensor/ufunc/__init__.py +0 -2
  624. maxframe/tensor/ufunc/ufunc.py +0 -2
  625. maxframe/tensor/utils.py +21 -3
  626. maxframe/tests/test_protocol.py +3 -3
  627. maxframe/tests/test_utils.py +210 -1
  628. maxframe/tests/utils.py +59 -1
  629. maxframe/udf.py +76 -6
  630. maxframe/utils.py +418 -17
  631. {maxframe-1.3.1.dist-info → maxframe-2.0.0.dist-info}/METADATA +4 -1
  632. maxframe-2.0.0.dist-info/RECORD +939 -0
  633. {maxframe-1.3.1.dist-info → maxframe-2.0.0.dist-info}/WHEEL +1 -1
  634. maxframe_client/clients/framedriver.py +19 -3
  635. maxframe_client/fetcher.py +113 -6
  636. maxframe_client/session/odps.py +173 -38
  637. maxframe_client/session/task.py +3 -1
  638. maxframe_client/tests/test_session.py +41 -5
  639. maxframe-1.3.1.dist-info/RECORD +0 -705
  640. {maxframe-1.3.1.dist-info → maxframe-2.0.0.dist-info}/top_level.txt +0 -0
maxframe/lib/__init__.py CHANGED
@@ -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");
maxframe/lib/compat.py ADDED
@@ -0,0 +1,145 @@
1
+ from typing import TYPE_CHECKING, Callable, List, Sequence, Tuple, Union
2
+
3
+ import numpy as np
4
+ import pandas as pd
5
+
6
+ if TYPE_CHECKING:
7
+ from pandas._typing import ArrayLike, Scalar
8
+
9
+
10
+ def case_when(
11
+ self,
12
+ caselist: List[
13
+ Tuple[
14
+ Union[
15
+ "ArrayLike",
16
+ Callable[[pd.Series], Union[pd.Series, np.ndarray, Sequence[bool]]],
17
+ ],
18
+ Union[
19
+ "ArrayLike",
20
+ "Scalar",
21
+ Callable[[pd.Series], Union[pd.Series, np.ndarray]],
22
+ ],
23
+ ],
24
+ ],
25
+ ) -> pd.Series:
26
+ """
27
+ Replace values where the conditions are True.
28
+
29
+ Parameters
30
+ ----------
31
+ caselist : A list of tuples of conditions and expected replacements
32
+ Takes the form: ``(condition0, replacement0)``,
33
+ ``(condition1, replacement1)``, ... .
34
+ ``condition`` should be a 1-D boolean array-like object
35
+ or a callable. If ``condition`` is a callable,
36
+ it is computed on the Series
37
+ and should return a boolean Series or array.
38
+ The callable must not change the input Series
39
+ (though pandas doesn`t check it). ``replacement`` should be a
40
+ 1-D array-like object, a scalar or a callable.
41
+ If ``replacement`` is a callable, it is computed on the Series
42
+ and should return a scalar or Series. The callable
43
+ must not change the input Series
44
+ (though pandas doesn`t check it).
45
+
46
+ .. versionadded:: 2.2.0
47
+
48
+ Returns
49
+ -------
50
+ Series
51
+
52
+ See Also
53
+ --------
54
+ Series.mask : Replace values where the condition is True.
55
+
56
+ Examples
57
+ --------
58
+ >>> c = pd.Series([6, 7, 8, 9], name='c')
59
+ >>> a = pd.Series([0, 0, 1, 2])
60
+ >>> b = pd.Series([0, 3, 4, 5])
61
+
62
+ >>> c.case_when(caselist=[(a.gt(0), a), # condition, replacement
63
+ ... (b.gt(0), b)])
64
+ 0 6
65
+ 1 3
66
+ 2 1
67
+ 3 2
68
+ Name: c, dtype: int64
69
+ """
70
+ from pandas.api.types import is_scalar
71
+ from pandas.core import common as com
72
+ from pandas.core.construction import array as pd_array
73
+ from pandas.core.dtypes.cast import (
74
+ construct_1d_arraylike_from_scalar,
75
+ find_common_type,
76
+ infer_dtype_from,
77
+ )
78
+ from pandas.core.dtypes.generic import ABCSeries
79
+
80
+ if not isinstance(caselist, list):
81
+ raise TypeError(
82
+ f"The caselist argument should be a list; instead got {type(caselist)}"
83
+ )
84
+
85
+ if not caselist:
86
+ raise ValueError(
87
+ "provide at least one boolean condition, "
88
+ "with a corresponding replacement."
89
+ )
90
+
91
+ for num, entry in enumerate(caselist):
92
+ if not isinstance(entry, tuple):
93
+ raise TypeError(
94
+ f"Argument {num} must be a tuple; instead got {type(entry)}."
95
+ )
96
+ if len(entry) != 2:
97
+ raise ValueError(
98
+ f"Argument {num} must have length 2; "
99
+ "a condition and replacement; "
100
+ f"instead got length {len(entry)}."
101
+ )
102
+ caselist = [
103
+ (
104
+ com.apply_if_callable(condition, self),
105
+ com.apply_if_callable(replacement, self),
106
+ )
107
+ for condition, replacement in caselist
108
+ ]
109
+ default = self.copy()
110
+ conditions, replacements = zip(*caselist)
111
+ common_dtypes = [infer_dtype_from(arg)[0] for arg in [*replacements, default]]
112
+ if len(set(common_dtypes)) > 1:
113
+ common_dtype = find_common_type(common_dtypes)
114
+ updated_replacements = []
115
+ for condition, replacement in zip(conditions, replacements):
116
+ if is_scalar(replacement):
117
+ replacement = construct_1d_arraylike_from_scalar(
118
+ value=replacement, length=len(condition), dtype=common_dtype
119
+ )
120
+ elif isinstance(replacement, ABCSeries):
121
+ replacement = replacement.astype(common_dtype)
122
+ else:
123
+ replacement = pd_array(replacement, dtype=common_dtype)
124
+ updated_replacements.append(replacement)
125
+ replacements = updated_replacements
126
+ default = default.astype(common_dtype)
127
+
128
+ counter = reversed(range(len(conditions)))
129
+ for position, condition, replacement in zip(
130
+ counter, conditions[::-1], replacements[::-1]
131
+ ):
132
+ try:
133
+ default = default.mask(
134
+ condition, other=replacement, axis=0, inplace=False, level=None
135
+ )
136
+ except Exception as error:
137
+ raise ValueError(
138
+ f"Failed to apply condition{position} and replacement{position}."
139
+ ) from error
140
+ return default
141
+
142
+
143
+ def patch_pandas():
144
+ if not hasattr(pd.Series, "case_when"):
145
+ pd.Series.case_when = case_when
@@ -15,7 +15,7 @@
15
15
  """
16
16
  Filename globbing utility, modified from python glob.
17
17
 
18
- obviouslythis implementation is not optimal, it will cause too many
18
+ obviously, this implementation is not optimal, it will cause too many
19
19
  oss requests. Lately, We can then convert the glob expression into
20
20
  a regular expression, and then match the oss key list.
21
21
  But before that, we need to figure out how to deal with magic char
Binary file
@@ -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");
@@ -19,6 +17,7 @@ import operator
19
17
  from collections.abc import Iterable
20
18
  from functools import partial, reduce
21
19
 
20
+ from . import linalg
22
21
  from .array import SparseNDArray, call_sparse
23
22
  from .core import get_sparse_module, issparse
24
23
  from .matrix import SparseMatrix
@@ -313,6 +312,12 @@ airy = partial(_call_unary, "airy")
313
312
  airye = partial(_call_unary, "airye")
314
313
  itairy = partial(_call_unary, "itairy")
315
314
 
315
+ expit = partial(call_sparse, "expit")
316
+ logit = partial(call_sparse, "logit")
317
+ log_expit = partial(call_sparse, "log_expit")
318
+
319
+ softplus = partial(call_sparse, "softplus")
320
+
316
321
 
317
322
  def equal(a, b, **_):
318
323
  try:
@@ -837,23 +842,13 @@ def tril(m, k=0, gpu=False):
837
842
  raise NotImplementedError
838
843
 
839
844
 
840
- def lu(m):
841
- from .matrix import lu_sparse_matrix
842
-
843
- return lu_sparse_matrix(m)
844
-
845
-
846
- def solve_triangular(a, b, lower=False, sparse=True):
847
- from .matrix import solve_triangular_sparse_matrix
848
-
849
- return solve_triangular_sparse_matrix(a, b, lower=lower, sparse=sparse)
850
-
851
-
852
845
  def block(arrs):
853
846
  arr = arrs[0]
854
847
  while isinstance(arr, list):
855
848
  arr = arr[0]
856
- if arr.ndim != 2: # pragma: no cover
849
+ if arr.ndim == 1:
850
+ return concatenate(arrs)
851
+ elif arr.ndim != 2: # pragma: no cover
857
852
  raise NotImplementedError
858
853
 
859
854
  from .matrix import block
@@ -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");
@@ -280,7 +278,7 @@ class SparseArray(SparseNDArray):
280
278
  return NotImplemented
281
279
  other_xp = get_array_module(naked_other)
282
280
  if other_xp.isscalar(naked_other):
283
- return call_sparse("add", self, naked_other)
281
+ return other_xp.add(self.toarray(), naked_other)
284
282
  if issparse(naked_other):
285
283
  x = self.spmatrix + naked_other
286
284
  else:
@@ -296,7 +294,7 @@ class SparseArray(SparseNDArray):
296
294
  return NotImplemented
297
295
  other_xp = get_array_module(naked_other)
298
296
  if other_xp.isscalar(naked_other):
299
- return call_sparse("add", naked_other, self)
297
+ return other_xp.add(naked_other, self.toarray())
300
298
  if issparse(naked_other):
301
299
  x = self.spmatrix + naked_other
302
300
  else:
@@ -312,7 +310,7 @@ class SparseArray(SparseNDArray):
312
310
  return NotImplemented
313
311
  other_xp = get_array_module(naked_other)
314
312
  if other_xp.isscalar(naked_other):
315
- return call_sparse("subtract", self, naked_other)
313
+ return other_xp.subtract(self.toarray(), naked_other)
316
314
  if issparse(naked_other):
317
315
  x = self.spmatrix - naked_other
318
316
  else:
@@ -328,7 +326,7 @@ class SparseArray(SparseNDArray):
328
326
  return NotImplemented
329
327
  other_xp = get_array_module(naked_other)
330
328
  if other_xp.isscalar(naked_other):
331
- return call_sparse("subtract", naked_other, self)
329
+ return other_xp.subtract(naked_other, self.toarray())
332
330
  if issparse(naked_other):
333
331
  x = naked_other - self.spmatrix
334
332
  else:
@@ -645,19 +643,24 @@ class SparseArray(SparseNDArray):
645
643
  return SparseNDArray(self.spmatrix.conj(), shape=self.shape)
646
644
 
647
645
  def exp(self):
648
- return call_sparse("exp", self)
646
+ xp = get_array_module(self.spmatrix)
647
+ return xp.exp(self.toarray())
649
648
 
650
649
  def exp2(self):
651
- return call_sparse("exp2", self)
650
+ xp = get_array_module(self.spmatrix)
651
+ return xp.exp2(self.toarray())
652
652
 
653
653
  def log(self):
654
- return call_sparse("log", self)
654
+ xp = get_array_module(self.spmatrix)
655
+ return xp.log(self.toarray())
655
656
 
656
657
  def log2(self):
657
- return call_sparse("log2", self)
658
+ xp = get_array_module(self.spmatrix)
659
+ return xp.log2(self.toarray())
658
660
 
659
661
  def log10(self):
660
- return call_sparse("log10", self)
662
+ xp = get_array_module(self.spmatrix)
663
+ return xp.log10(self.toarray())
661
664
 
662
665
  def expm1(self):
663
666
  return SparseNDArray(self.spmatrix.expm1(), shape=self.shape)
@@ -675,7 +678,8 @@ class SparseArray(SparseNDArray):
675
678
  return call_sparse("cbrt", self)
676
679
 
677
680
  def reciprocal(self):
678
- return call_sparse("reciprocal", self)
681
+ xp = get_array_module(self.spmatrix)
682
+ return xp.reciprocal(self.toarray())
679
683
 
680
684
  def _scipy_unary(self, func_name):
681
685
  spmatrix = self.spmatrix
@@ -952,7 +956,8 @@ class SparseArray(SparseNDArray):
952
956
  return get_array_module(x).asarray(x)
953
957
 
954
958
  def logical_not(self):
955
- return call_sparse("logical_not", self)
959
+ xp = get_array_module(self.spmatrix)
960
+ return xp.logical_not(self.toarray())
956
961
 
957
962
  @staticmethod
958
963
  def _bitwise(this, other, method_name):
@@ -989,23 +994,27 @@ class SparseArray(SparseNDArray):
989
994
  return self._bitwise(other, self.spmatrix, "bitwise_and")
990
995
 
991
996
  def __or__(self, other):
992
- if get_array_module(other).isscalar(other):
993
- return call_sparse("bitwise_or", self, other)
997
+ other_xp = get_array_module(other)
998
+ if other_xp.isscalar(other):
999
+ return other_xp.bitwise_or(self.toarray(), other)
994
1000
  return self._bitwise(self.spmatrix, other, "bitwise_or")
995
1001
 
996
1002
  def __ror__(self, other):
997
- if get_array_module(other).isscalar(other):
998
- return call_sparse("bitwise_or", other, self)
1003
+ other_xp = get_array_module(other)
1004
+ if other_xp.isscalar(other):
1005
+ return other_xp.bitwise_or(other, self.toarray())
999
1006
  return self._bitwise(other, self.spmatrix, "bitwise_or")
1000
1007
 
1001
1008
  def __xor__(self, other):
1002
- if get_array_module(other).isscalar(other):
1003
- return call_sparse("bitwise_xor", self, other)
1009
+ other_xp = get_array_module(other)
1010
+ if other_xp.isscalar(other):
1011
+ return other_xp.bitwise_xor(self.toarray(), other)
1004
1012
  return self._bitwise(self.spmatrix, other, "bitwise_xor")
1005
1013
 
1006
1014
  def __rxor__(self, other):
1007
- if get_array_module(other).isscalar(other):
1008
- return call_sparse("bitwise_xor", other, self)
1015
+ other_xp = get_array_module(other)
1016
+ if other_xp.isscalar(other):
1017
+ return other_xp.bitwise_xor(other, self.toarray())
1009
1018
  return self._bitwise(other, self.spmatrix, "bitwise_xor")
1010
1019
 
1011
1020
  def isclose(self, other, **kw):
@@ -1020,7 +1029,8 @@ class SparseArray(SparseNDArray):
1020
1029
  return xp.isclose(self.toarray(), naked_other, **kw)
1021
1030
 
1022
1031
  def __invert__(self):
1023
- return call_sparse("invert", self)
1032
+ xp = get_array_module(self.spmatrix)
1033
+ return xp.invert(self.toarray())
1024
1034
 
1025
1035
  @staticmethod
1026
1036
  def _shift(this, other, method_name):
@@ -1087,7 +1097,8 @@ class SparseArray(SparseNDArray):
1087
1097
  return SparseNDArray(self.spmatrix.sin(), shape=self.shape)
1088
1098
 
1089
1099
  def cos(self):
1090
- return call_sparse("cos", self)
1100
+ xp = get_array_module(self.spmatrix)
1101
+ return xp.cos(self.toarray())
1091
1102
 
1092
1103
  def tan(self):
1093
1104
  return SparseNDArray(self.spmatrix.tan(), shape=self.shape)
@@ -1096,7 +1107,8 @@ class SparseArray(SparseNDArray):
1096
1107
  return SparseNDArray(self.spmatrix.arcsin(), shape=self.shape)
1097
1108
 
1098
1109
  def arccos(self):
1099
- return call_sparse("arccos", self)
1110
+ xp = get_array_module(self.spmatrix)
1111
+ return xp.arccos(self.toarray())
1100
1112
 
1101
1113
  def arctan(self):
1102
1114
  return SparseNDArray(self.spmatrix.arctan(), shape=self.shape)
@@ -1145,7 +1157,8 @@ class SparseArray(SparseNDArray):
1145
1157
  return SparseNDArray(self.spmatrix.arcsinh(), shape=self.shape)
1146
1158
 
1147
1159
  def arccosh(self):
1148
- return call_sparse("arccosh", self)
1160
+ xp = get_array_module(self.spmatrix)
1161
+ return xp.arccosh(self.toarray())
1149
1162
 
1150
1163
  def arctanh(self):
1151
1164
  return SparseNDArray(self.spmatrix.arctanh(), shape=self.shape)
@@ -1436,11 +1449,7 @@ class SparseArray(SparseNDArray):
1436
1449
 
1437
1450
  def i0(self):
1438
1451
  xp = get_array_module(self.spmatrix)
1439
- data = xp.i0(self.spmatrix.data).reshape(self.spmatrix.data.shape)
1440
- x = get_sparse_module(self.spmatrix).csr_matrix(
1441
- (data, self.spmatrix.indices, self.spmatrix.indptr), self.spmatrix.shape
1442
- )
1443
- return SparseNDArray(x, shape=self.shape)
1452
+ return xp.i0(self.toarray())
1444
1453
 
1445
1454
  def nan_to_num(self):
1446
1455
  return call_sparse("nan_to_num", self)
@@ -1517,13 +1526,16 @@ class SparseArray(SparseNDArray):
1517
1526
  )
1518
1527
 
1519
1528
  def sinc(self):
1520
- return call_sparse("sinc", self)
1529
+ xp = get_array_module(self.spmatrix)
1530
+ return xp.sinc(self.toarray())
1521
1531
 
1522
1532
  def isfinite(self):
1523
- return call_sparse("isfinite", self)
1533
+ xp = get_array_module(self.spmatrix)
1534
+ return xp.isfinite(self.toarray())
1524
1535
 
1525
1536
  def isreal(self):
1526
- return call_sparse("isreal", self)
1537
+ xp = get_array_module(self.spmatrix)
1538
+ return xp.isreal(self.toarray())
1527
1539
 
1528
1540
  def digitize(self, bins, right=False):
1529
1541
  return call_sparse("digitize", self, bins=bins, right=right)
@@ -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");
@@ -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
+
16
+ def inv(m):
17
+ from .matrix import inv_sparse_matrix
18
+
19
+ return inv_sparse_matrix(m)
20
+
21
+
22
+ def lu(m):
23
+ from .matrix import lu_sparse_matrix
24
+
25
+ return lu_sparse_matrix(m)
26
+
27
+
28
+ def solve_triangular(a, b, lower=False, sparse=True):
29
+ from .matrix import solve_triangular_sparse_matrix
30
+
31
+ return solve_triangular_sparse_matrix(a, b, lower=lower, sparse=sparse)
@@ -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");
@@ -113,6 +111,11 @@ def lu_sparse_matrix(a):
113
111
  )
114
112
 
115
113
 
114
+ def inv_sparse_matrix(a):
115
+ a = naked(a)
116
+ return SparseMatrix(splinalg.inv(a))
117
+
118
+
116
119
  def solve_triangular_sparse_matrix(a, b, lower=False, sparse=True):
117
120
  a = naked(a)
118
121
  b = b.toarray() if issparse(b) else b
@@ -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");
@@ -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");
@@ -85,10 +83,8 @@ def test_sparse_add():
85
83
  assert_array_equal(s1 + s2, s1 + s2)
86
84
  assert_array_equal(s1 + d1, s1 + d1)
87
85
  assert_array_equal(d1 + s1, d1 + s1)
88
- r = sps.csr_matrix(((s1.data + 1), s1.indices, s1.indptr), s1.shape)
89
- assert_array_equal(s1 + 1, r)
90
- r = sps.csr_matrix(((1 + s1.data), s1.indices, s1.indptr), s1.shape)
91
- assert_array_equal(1 + s1, r)
86
+ assert_array_equal(s1 + 1, s1.toarray() + 1)
87
+ assert_array_equal(1 + s1.toarray(), 1 + s1.toarray())
92
88
 
93
89
  # test sparse vector
94
90
  v = SparseNDArray(v1, shape=(3,))
@@ -108,10 +104,8 @@ def test_sparse_subtract():
108
104
  assert_array_equal(s1 - s2, s1 - s2)
109
105
  assert_array_equal(s1 - d1, s1 - d1)
110
106
  assert_array_equal(d1 - s1, d1 - s1)
111
- r = sps.csr_matrix(((s1.data - 1), s1.indices, s1.indptr), s1.shape)
112
- assert_array_equal(s1 - 1, r)
113
- r = sps.csr_matrix(((1 - s1.data), s1.indices, s1.indptr), s1.shape)
114
- assert_array_equal(1 - s1, r)
107
+ assert_array_equal(s1 - 1, s1.toarray() - 1)
108
+ assert_array_equal(1 - s1, 1 - s1.toarray())
115
109
 
116
110
  # test sparse vector
117
111
  v = SparseNDArray(v1, shape=(3,))
@@ -264,53 +258,59 @@ def test_sparse_bin():
264
258
  assert_array_equal(lm(2, v), rm(2, v1_data))
265
259
 
266
260
 
267
- def test_sparse_unary():
261
+ @pytest.mark.parametrize(
262
+ "method,dense",
263
+ [
264
+ ("exp", True),
265
+ ("exp2", True),
266
+ ("log", True),
267
+ ("log2", True),
268
+ ("log10", True),
269
+ ("reciprocal", True),
270
+ ("cos", True),
271
+ ("arccos", True),
272
+ ("arccosh", True),
273
+ ("sinc", True),
274
+ ("isreal", True),
275
+ ("isfinite", True),
276
+ ("negative", False),
277
+ ("positive", False),
278
+ ("absolute", False),
279
+ ("abs", False),
280
+ ("fabs", False),
281
+ ("rint", False),
282
+ ("sign", False),
283
+ ("conj", False),
284
+ ("expm1", False),
285
+ ("log1p", False),
286
+ ("sqrt", False),
287
+ ("square", False),
288
+ ("cbrt", False),
289
+ ("sin", False),
290
+ ("tan", False),
291
+ ("arcsin", False),
292
+ ("arctan", False),
293
+ ("arcsinh", False),
294
+ ("arctanh", False),
295
+ ("deg2rad", False),
296
+ ("rad2deg", False),
297
+ ("angle", False),
298
+ ("isnan", False),
299
+ ("isinf", False),
300
+ ("signbit", False),
301
+ ],
302
+ )
303
+ def test_sparse_unary_normal(method, dense):
268
304
  s1 = SparseNDArray(s1_data)
269
305
  v = SparseNDArray(v1, shape=(3,))
270
306
 
271
- for method in (
272
- "negative",
273
- "positive",
274
- "absolute",
275
- "abs",
276
- "fabs",
277
- "rint",
278
- "sign",
279
- "conj",
280
- "exp",
281
- "exp2",
282
- "log",
283
- "log2",
284
- "log10",
285
- "expm1",
286
- "log1p",
287
- "sqrt",
288
- "square",
289
- "cbrt",
290
- "reciprocal",
291
- "sin",
292
- "cos",
293
- "tan",
294
- "arcsin",
295
- "arccos",
296
- "arctan",
297
- "arcsinh",
298
- "arccosh",
299
- "arctanh",
300
- "deg2rad",
301
- "rad2deg",
302
- "angle",
303
- "isnan",
304
- "isinf",
305
- "signbit",
306
- "sinc",
307
- "isreal",
308
- "isfinite",
309
- ):
310
- lm, rm = getattr(mls, method), getattr(np, method)
307
+ lm, rm = getattr(mls, method), getattr(np, method)
308
+ if dense:
309
+ r = rm(s1.toarray())
310
+ else:
311
311
  r = sps.csr_matrix((rm(s1.data), s1.indices, s1.indptr), s1.shape)
312
- assert_array_equal(lm(s1), r)
313
- assert_array_equal(lm(v), rm(v1_data))
312
+ assert_array_equal(lm(s1), r)
313
+ assert_array_equal(lm(v), rm(v1_data))
314
314
 
315
315
 
316
316
  def test_sparse_dot():
@@ -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");