maxframe 2.4.0rc1__cp312-cp312-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.
Files changed (1122) hide show
  1. maxframe/__init__.py +33 -0
  2. maxframe/_utils.cp312-win32.pyd +0 -0
  3. maxframe/_utils.pxd +33 -0
  4. maxframe/_utils.pyi +21 -0
  5. maxframe/_utils.pyx +561 -0
  6. maxframe/codegen/__init__.py +27 -0
  7. maxframe/codegen/core.py +597 -0
  8. maxframe/codegen/spe/__init__.py +16 -0
  9. maxframe/codegen/spe/core.py +307 -0
  10. maxframe/codegen/spe/dataframe/__init__.py +38 -0
  11. maxframe/codegen/spe/dataframe/accessors/__init__.py +15 -0
  12. maxframe/codegen/spe/dataframe/accessors/base.py +71 -0
  13. maxframe/codegen/spe/dataframe/accessors/dict_.py +89 -0
  14. maxframe/codegen/spe/dataframe/accessors/list_.py +44 -0
  15. maxframe/codegen/spe/dataframe/accessors/struct_.py +28 -0
  16. maxframe/codegen/spe/dataframe/arithmetic.py +89 -0
  17. maxframe/codegen/spe/dataframe/datasource.py +181 -0
  18. maxframe/codegen/spe/dataframe/datastore.py +204 -0
  19. maxframe/codegen/spe/dataframe/extensions.py +63 -0
  20. maxframe/codegen/spe/dataframe/fetch.py +26 -0
  21. maxframe/codegen/spe/dataframe/groupby.py +312 -0
  22. maxframe/codegen/spe/dataframe/indexing.py +333 -0
  23. maxframe/codegen/spe/dataframe/merge.py +110 -0
  24. maxframe/codegen/spe/dataframe/misc.py +264 -0
  25. maxframe/codegen/spe/dataframe/missing.py +64 -0
  26. maxframe/codegen/spe/dataframe/reduction.py +183 -0
  27. maxframe/codegen/spe/dataframe/reshape.py +46 -0
  28. maxframe/codegen/spe/dataframe/sort.py +104 -0
  29. maxframe/codegen/spe/dataframe/statistics.py +46 -0
  30. maxframe/codegen/spe/dataframe/tests/__init__.py +13 -0
  31. maxframe/codegen/spe/dataframe/tests/accessors/__init__.py +13 -0
  32. maxframe/codegen/spe/dataframe/tests/accessors/test_base.py +33 -0
  33. maxframe/codegen/spe/dataframe/tests/accessors/test_dict.py +304 -0
  34. maxframe/codegen/spe/dataframe/tests/accessors/test_list.py +134 -0
  35. maxframe/codegen/spe/dataframe/tests/accessors/test_struct.py +75 -0
  36. maxframe/codegen/spe/dataframe/tests/indexing/__init__.py +13 -0
  37. maxframe/codegen/spe/dataframe/tests/indexing/conftest.py +58 -0
  38. maxframe/codegen/spe/dataframe/tests/indexing/test_getitem.py +124 -0
  39. maxframe/codegen/spe/dataframe/tests/indexing/test_iloc.py +95 -0
  40. maxframe/codegen/spe/dataframe/tests/indexing/test_indexing.py +39 -0
  41. maxframe/codegen/spe/dataframe/tests/indexing/test_loc.py +35 -0
  42. maxframe/codegen/spe/dataframe/tests/indexing/test_rename.py +51 -0
  43. maxframe/codegen/spe/dataframe/tests/indexing/test_reset_index.py +88 -0
  44. maxframe/codegen/spe/dataframe/tests/indexing/test_sample.py +45 -0
  45. maxframe/codegen/spe/dataframe/tests/indexing/test_set_axis.py +45 -0
  46. maxframe/codegen/spe/dataframe/tests/indexing/test_set_index.py +41 -0
  47. maxframe/codegen/spe/dataframe/tests/indexing/test_setitem.py +46 -0
  48. maxframe/codegen/spe/dataframe/tests/misc/__init__.py +13 -0
  49. maxframe/codegen/spe/dataframe/tests/misc/test_apply.py +133 -0
  50. maxframe/codegen/spe/dataframe/tests/misc/test_drop_duplicates.py +92 -0
  51. maxframe/codegen/spe/dataframe/tests/misc/test_misc.py +202 -0
  52. maxframe/codegen/spe/dataframe/tests/missing/__init__.py +13 -0
  53. maxframe/codegen/spe/dataframe/tests/missing/test_checkna.py +94 -0
  54. maxframe/codegen/spe/dataframe/tests/missing/test_dropna.py +50 -0
  55. maxframe/codegen/spe/dataframe/tests/missing/test_fillna.py +94 -0
  56. maxframe/codegen/spe/dataframe/tests/missing/test_replace.py +45 -0
  57. maxframe/codegen/spe/dataframe/tests/test_arithmetic.py +73 -0
  58. maxframe/codegen/spe/dataframe/tests/test_datasource.py +184 -0
  59. maxframe/codegen/spe/dataframe/tests/test_datastore.py +200 -0
  60. maxframe/codegen/spe/dataframe/tests/test_extensions.py +88 -0
  61. maxframe/codegen/spe/dataframe/tests/test_groupby.py +288 -0
  62. maxframe/codegen/spe/dataframe/tests/test_merge.py +426 -0
  63. maxframe/codegen/spe/dataframe/tests/test_reduction.py +117 -0
  64. maxframe/codegen/spe/dataframe/tests/test_reshape.py +79 -0
  65. maxframe/codegen/spe/dataframe/tests/test_sort.py +179 -0
  66. maxframe/codegen/spe/dataframe/tests/test_statistics.py +70 -0
  67. maxframe/codegen/spe/dataframe/tests/test_tseries.py +29 -0
  68. maxframe/codegen/spe/dataframe/tests/test_value_counts.py +60 -0
  69. maxframe/codegen/spe/dataframe/tests/test_window.py +69 -0
  70. maxframe/codegen/spe/dataframe/tseries.py +55 -0
  71. maxframe/codegen/spe/dataframe/udf.py +62 -0
  72. maxframe/codegen/spe/dataframe/value_counts.py +31 -0
  73. maxframe/codegen/spe/dataframe/window.py +65 -0
  74. maxframe/codegen/spe/learn/__init__.py +15 -0
  75. maxframe/codegen/spe/learn/contrib/__init__.py +15 -0
  76. maxframe/codegen/spe/learn/contrib/lightgbm.py +161 -0
  77. maxframe/codegen/spe/learn/contrib/models.py +41 -0
  78. maxframe/codegen/spe/learn/contrib/pytorch.py +49 -0
  79. maxframe/codegen/spe/learn/contrib/tests/__init__.py +13 -0
  80. maxframe/codegen/spe/learn/contrib/tests/test_lightgbm.py +123 -0
  81. maxframe/codegen/spe/learn/contrib/tests/test_models.py +41 -0
  82. maxframe/codegen/spe/learn/contrib/tests/test_pytorch.py +53 -0
  83. maxframe/codegen/spe/learn/contrib/tests/test_xgboost.py +99 -0
  84. maxframe/codegen/spe/learn/contrib/xgboost.py +152 -0
  85. maxframe/codegen/spe/learn/metrics/__init__.py +15 -0
  86. maxframe/codegen/spe/learn/metrics/_classification.py +120 -0
  87. maxframe/codegen/spe/learn/metrics/_ranking.py +76 -0
  88. maxframe/codegen/spe/learn/metrics/pairwise.py +51 -0
  89. maxframe/codegen/spe/learn/metrics/tests/__init__.py +13 -0
  90. maxframe/codegen/spe/learn/metrics/tests/test_classification.py +93 -0
  91. maxframe/codegen/spe/learn/metrics/tests/test_pairwise.py +36 -0
  92. maxframe/codegen/spe/learn/metrics/tests/test_ranking.py +59 -0
  93. maxframe/codegen/spe/learn/model_selection/__init__.py +13 -0
  94. maxframe/codegen/spe/learn/model_selection/tests/__init__.py +13 -0
  95. maxframe/codegen/spe/learn/model_selection/tests/test_split.py +41 -0
  96. maxframe/codegen/spe/learn/preprocessing/__init__.py +15 -0
  97. maxframe/codegen/spe/learn/preprocessing/_data.py +37 -0
  98. maxframe/codegen/spe/learn/preprocessing/_label.py +47 -0
  99. maxframe/codegen/spe/learn/preprocessing/tests/__init__.py +13 -0
  100. maxframe/codegen/spe/learn/preprocessing/tests/test_data.py +31 -0
  101. maxframe/codegen/spe/learn/preprocessing/tests/test_label.py +43 -0
  102. maxframe/codegen/spe/learn/utils/__init__.py +15 -0
  103. maxframe/codegen/spe/learn/utils/checks.py +55 -0
  104. maxframe/codegen/spe/learn/utils/multiclass.py +60 -0
  105. maxframe/codegen/spe/learn/utils/shuffle.py +85 -0
  106. maxframe/codegen/spe/learn/utils/sparsefuncs.py +35 -0
  107. maxframe/codegen/spe/learn/utils/tests/__init__.py +13 -0
  108. maxframe/codegen/spe/learn/utils/tests/test_checks.py +48 -0
  109. maxframe/codegen/spe/learn/utils/tests/test_multiclass.py +52 -0
  110. maxframe/codegen/spe/learn/utils/tests/test_shuffle.py +50 -0
  111. maxframe/codegen/spe/learn/utils/tests/test_sparsefuncs.py +34 -0
  112. maxframe/codegen/spe/learn/utils/tests/test_validation.py +44 -0
  113. maxframe/codegen/spe/learn/utils/validation.py +35 -0
  114. maxframe/codegen/spe/objects.py +26 -0
  115. maxframe/codegen/spe/remote.py +29 -0
  116. maxframe/codegen/spe/tensor/__init__.py +31 -0
  117. maxframe/codegen/spe/tensor/arithmetic.py +95 -0
  118. maxframe/codegen/spe/tensor/core.py +41 -0
  119. maxframe/codegen/spe/tensor/datasource.py +166 -0
  120. maxframe/codegen/spe/tensor/extensions.py +35 -0
  121. maxframe/codegen/spe/tensor/fetch.py +26 -0
  122. maxframe/codegen/spe/tensor/fft.py +74 -0
  123. maxframe/codegen/spe/tensor/indexing.py +63 -0
  124. maxframe/codegen/spe/tensor/linalg.py +90 -0
  125. maxframe/codegen/spe/tensor/merge.py +31 -0
  126. maxframe/codegen/spe/tensor/misc.py +175 -0
  127. maxframe/codegen/spe/tensor/random.py +29 -0
  128. maxframe/codegen/spe/tensor/reduction.py +39 -0
  129. maxframe/codegen/spe/tensor/reshape.py +26 -0
  130. maxframe/codegen/spe/tensor/sort.py +42 -0
  131. maxframe/codegen/spe/tensor/spatial.py +45 -0
  132. maxframe/codegen/spe/tensor/special.py +35 -0
  133. maxframe/codegen/spe/tensor/statistics.py +68 -0
  134. maxframe/codegen/spe/tensor/tests/__init__.py +13 -0
  135. maxframe/codegen/spe/tensor/tests/test_arithmetic.py +103 -0
  136. maxframe/codegen/spe/tensor/tests/test_datasource.py +99 -0
  137. maxframe/codegen/spe/tensor/tests/test_extensions.py +37 -0
  138. maxframe/codegen/spe/tensor/tests/test_fft.py +64 -0
  139. maxframe/codegen/spe/tensor/tests/test_indexing.py +44 -0
  140. maxframe/codegen/spe/tensor/tests/test_linalg.py +52 -0
  141. maxframe/codegen/spe/tensor/tests/test_merge.py +28 -0
  142. maxframe/codegen/spe/tensor/tests/test_misc.py +144 -0
  143. maxframe/codegen/spe/tensor/tests/test_random.py +55 -0
  144. maxframe/codegen/spe/tensor/tests/test_reduction.py +65 -0
  145. maxframe/codegen/spe/tensor/tests/test_reshape.py +39 -0
  146. maxframe/codegen/spe/tensor/tests/test_sort.py +49 -0
  147. maxframe/codegen/spe/tensor/tests/test_spatial.py +33 -0
  148. maxframe/codegen/spe/tensor/tests/test_special.py +28 -0
  149. maxframe/codegen/spe/tensor/tests/test_statistics.py +43 -0
  150. maxframe/codegen/spe/tests/__init__.py +13 -0
  151. maxframe/codegen/spe/tests/test_remote.py +29 -0
  152. maxframe/codegen/spe/tests/test_spe_codegen.py +135 -0
  153. maxframe/codegen/spe/utils.py +56 -0
  154. maxframe/codegen/tests/__init__.py +13 -0
  155. maxframe/codegen/tests/test_codegen.py +67 -0
  156. maxframe/config/__init__.py +15 -0
  157. maxframe/config/config.py +630 -0
  158. maxframe/config/tests/__init__.py +13 -0
  159. maxframe/config/tests/test_config.py +114 -0
  160. maxframe/config/tests/test_validators.py +46 -0
  161. maxframe/config/validators.py +142 -0
  162. maxframe/conftest.py +261 -0
  163. maxframe/core/__init__.py +53 -0
  164. maxframe/core/accessor.py +45 -0
  165. maxframe/core/base.py +157 -0
  166. maxframe/core/context.py +110 -0
  167. maxframe/core/entity/__init__.py +34 -0
  168. maxframe/core/entity/core.py +150 -0
  169. maxframe/core/entity/executable.py +337 -0
  170. maxframe/core/entity/objects.py +115 -0
  171. maxframe/core/entity/output_types.py +101 -0
  172. maxframe/core/entity/tests/__init__.py +13 -0
  173. maxframe/core/entity/tests/test_objects.py +42 -0
  174. maxframe/core/entity/tileables.py +376 -0
  175. maxframe/core/entity/utils.py +39 -0
  176. maxframe/core/graph/__init__.py +22 -0
  177. maxframe/core/graph/builder/__init__.py +15 -0
  178. maxframe/core/graph/builder/base.py +90 -0
  179. maxframe/core/graph/builder/tileable.py +34 -0
  180. maxframe/core/graph/builder/utils.py +37 -0
  181. maxframe/core/graph/core.cp312-win32.pyd +0 -0
  182. maxframe/core/graph/core.pyx +478 -0
  183. maxframe/core/graph/entity.py +187 -0
  184. maxframe/core/graph/tests/__init__.py +13 -0
  185. maxframe/core/graph/tests/test_graph.py +205 -0
  186. maxframe/core/mode.py +101 -0
  187. maxframe/core/operator/__init__.py +32 -0
  188. maxframe/core/operator/base.py +481 -0
  189. maxframe/core/operator/core.py +307 -0
  190. maxframe/core/operator/fetch.py +40 -0
  191. maxframe/core/operator/objects.py +43 -0
  192. maxframe/core/operator/shuffle.py +45 -0
  193. maxframe/core/operator/tests/__init__.py +13 -0
  194. maxframe/core/operator/tests/test_core.py +64 -0
  195. maxframe/core/operator/utils.py +68 -0
  196. maxframe/core/tests/__init__.py +13 -0
  197. maxframe/core/tests/test_mode.py +75 -0
  198. maxframe/dataframe/__init__.py +90 -0
  199. maxframe/dataframe/accessors/__init__.py +20 -0
  200. maxframe/dataframe/accessors/compat.py +45 -0
  201. maxframe/dataframe/accessors/datetime_/__init__.py +35 -0
  202. maxframe/dataframe/accessors/datetime_/accessor.py +67 -0
  203. maxframe/dataframe/accessors/datetime_/core.py +106 -0
  204. maxframe/dataframe/accessors/datetime_/tests/__init__.py +13 -0
  205. maxframe/dataframe/accessors/datetime_/tests/test_datetime_accessor.py +41 -0
  206. maxframe/dataframe/accessors/dict_/__init__.py +45 -0
  207. maxframe/dataframe/accessors/dict_/accessor.py +39 -0
  208. maxframe/dataframe/accessors/dict_/contains.py +72 -0
  209. maxframe/dataframe/accessors/dict_/core.py +48 -0
  210. maxframe/dataframe/accessors/dict_/getitem.py +140 -0
  211. maxframe/dataframe/accessors/dict_/length.py +64 -0
  212. maxframe/dataframe/accessors/dict_/remove.py +75 -0
  213. maxframe/dataframe/accessors/dict_/setitem.py +79 -0
  214. maxframe/dataframe/accessors/dict_/tests/__init__.py +13 -0
  215. maxframe/dataframe/accessors/dict_/tests/test_dict_accessor.py +168 -0
  216. maxframe/dataframe/accessors/list_/__init__.py +39 -0
  217. maxframe/dataframe/accessors/list_/accessor.py +39 -0
  218. maxframe/dataframe/accessors/list_/core.py +48 -0
  219. maxframe/dataframe/accessors/list_/getitem.py +128 -0
  220. maxframe/dataframe/accessors/list_/length.py +64 -0
  221. maxframe/dataframe/accessors/list_/tests/__init__.py +13 -0
  222. maxframe/dataframe/accessors/list_/tests/test_list_accessor.py +81 -0
  223. maxframe/dataframe/accessors/plotting/__init__.py +40 -0
  224. maxframe/dataframe/accessors/plotting/core.py +78 -0
  225. maxframe/dataframe/accessors/plotting/tests/__init__.py +13 -0
  226. maxframe/dataframe/accessors/plotting/tests/test_plotting_accessor.py +136 -0
  227. maxframe/dataframe/accessors/string_/__init__.py +36 -0
  228. maxframe/dataframe/accessors/string_/accessor.py +215 -0
  229. maxframe/dataframe/accessors/string_/core.py +226 -0
  230. maxframe/dataframe/accessors/string_/tests/__init__.py +13 -0
  231. maxframe/dataframe/accessors/string_/tests/test_string_accessor.py +73 -0
  232. maxframe/dataframe/accessors/struct_/__init__.py +39 -0
  233. maxframe/dataframe/accessors/struct_/accessor.py +39 -0
  234. maxframe/dataframe/accessors/struct_/core.py +43 -0
  235. maxframe/dataframe/accessors/struct_/dtypes.py +53 -0
  236. maxframe/dataframe/accessors/struct_/field.py +123 -0
  237. maxframe/dataframe/accessors/struct_/tests/__init__.py +13 -0
  238. maxframe/dataframe/accessors/struct_/tests/test_struct_accessor.py +91 -0
  239. maxframe/dataframe/arithmetic/__init__.py +373 -0
  240. maxframe/dataframe/arithmetic/abs.py +33 -0
  241. maxframe/dataframe/arithmetic/add.py +60 -0
  242. maxframe/dataframe/arithmetic/arccos.py +28 -0
  243. maxframe/dataframe/arithmetic/arccosh.py +28 -0
  244. maxframe/dataframe/arithmetic/arcsin.py +28 -0
  245. maxframe/dataframe/arithmetic/arcsinh.py +28 -0
  246. maxframe/dataframe/arithmetic/arctan.py +28 -0
  247. maxframe/dataframe/arithmetic/arctanh.py +28 -0
  248. maxframe/dataframe/arithmetic/between.py +106 -0
  249. maxframe/dataframe/arithmetic/bitwise_and.py +46 -0
  250. maxframe/dataframe/arithmetic/bitwise_or.py +50 -0
  251. maxframe/dataframe/arithmetic/bitwise_xor.py +46 -0
  252. maxframe/dataframe/arithmetic/ceil.py +28 -0
  253. maxframe/dataframe/arithmetic/core.py +361 -0
  254. maxframe/dataframe/arithmetic/cos.py +28 -0
  255. maxframe/dataframe/arithmetic/cosh.py +28 -0
  256. maxframe/dataframe/arithmetic/degrees.py +28 -0
  257. maxframe/dataframe/arithmetic/docstring.py +416 -0
  258. maxframe/dataframe/arithmetic/dot.py +237 -0
  259. maxframe/dataframe/arithmetic/equal.py +58 -0
  260. maxframe/dataframe/arithmetic/exp.py +28 -0
  261. maxframe/dataframe/arithmetic/exp2.py +28 -0
  262. maxframe/dataframe/arithmetic/expm1.py +28 -0
  263. maxframe/dataframe/arithmetic/floor.py +28 -0
  264. maxframe/dataframe/arithmetic/floordiv.py +64 -0
  265. maxframe/dataframe/arithmetic/greater.py +59 -0
  266. maxframe/dataframe/arithmetic/greater_equal.py +59 -0
  267. maxframe/dataframe/arithmetic/invert.py +33 -0
  268. maxframe/dataframe/arithmetic/is_ufuncs.py +62 -0
  269. maxframe/dataframe/arithmetic/less.py +57 -0
  270. maxframe/dataframe/arithmetic/less_equal.py +59 -0
  271. maxframe/dataframe/arithmetic/log.py +28 -0
  272. maxframe/dataframe/arithmetic/log10.py +28 -0
  273. maxframe/dataframe/arithmetic/log2.py +28 -0
  274. maxframe/dataframe/arithmetic/maximum.py +33 -0
  275. maxframe/dataframe/arithmetic/minimum.py +33 -0
  276. maxframe/dataframe/arithmetic/mod.py +60 -0
  277. maxframe/dataframe/arithmetic/multiply.py +60 -0
  278. maxframe/dataframe/arithmetic/negative.py +33 -0
  279. maxframe/dataframe/arithmetic/not_equal.py +58 -0
  280. maxframe/dataframe/arithmetic/power.py +68 -0
  281. maxframe/dataframe/arithmetic/radians.py +28 -0
  282. maxframe/dataframe/arithmetic/round.py +144 -0
  283. maxframe/dataframe/arithmetic/sin.py +28 -0
  284. maxframe/dataframe/arithmetic/sinh.py +28 -0
  285. maxframe/dataframe/arithmetic/sqrt.py +28 -0
  286. maxframe/dataframe/arithmetic/subtract.py +64 -0
  287. maxframe/dataframe/arithmetic/tan.py +28 -0
  288. maxframe/dataframe/arithmetic/tanh.py +28 -0
  289. maxframe/dataframe/arithmetic/tests/__init__.py +13 -0
  290. maxframe/dataframe/arithmetic/tests/test_arithmetic.py +747 -0
  291. maxframe/dataframe/arithmetic/truediv.py +64 -0
  292. maxframe/dataframe/arithmetic/trunc.py +28 -0
  293. maxframe/dataframe/core.py +2386 -0
  294. maxframe/dataframe/datasource/__init__.py +33 -0
  295. maxframe/dataframe/datasource/core.py +112 -0
  296. maxframe/dataframe/datasource/dataframe.py +59 -0
  297. maxframe/dataframe/datasource/date_range.py +512 -0
  298. maxframe/dataframe/datasource/direct.py +57 -0
  299. maxframe/dataframe/datasource/from_dict.py +124 -0
  300. maxframe/dataframe/datasource/from_index.py +58 -0
  301. maxframe/dataframe/datasource/from_records.py +191 -0
  302. maxframe/dataframe/datasource/from_tensor.py +503 -0
  303. maxframe/dataframe/datasource/index.py +117 -0
  304. maxframe/dataframe/datasource/read_csv.py +534 -0
  305. maxframe/dataframe/datasource/read_odps_query.py +536 -0
  306. maxframe/dataframe/datasource/read_odps_table.py +295 -0
  307. maxframe/dataframe/datasource/read_parquet.py +278 -0
  308. maxframe/dataframe/datasource/series.py +55 -0
  309. maxframe/dataframe/datasource/tests/__init__.py +13 -0
  310. maxframe/dataframe/datasource/tests/test_datasource.py +663 -0
  311. maxframe/dataframe/datastore/__init__.py +41 -0
  312. maxframe/dataframe/datastore/core.py +28 -0
  313. maxframe/dataframe/datastore/direct.py +268 -0
  314. maxframe/dataframe/datastore/tests/__init__.py +13 -0
  315. maxframe/dataframe/datastore/tests/test_to_odps.py +99 -0
  316. maxframe/dataframe/datastore/to_csv.py +219 -0
  317. maxframe/dataframe/datastore/to_json.py +215 -0
  318. maxframe/dataframe/datastore/to_odps.py +285 -0
  319. maxframe/dataframe/datastore/to_parquet.py +121 -0
  320. maxframe/dataframe/extensions/__init__.py +70 -0
  321. maxframe/dataframe/extensions/accessor.py +35 -0
  322. maxframe/dataframe/extensions/apply_chunk.py +733 -0
  323. maxframe/dataframe/extensions/cartesian_chunk.py +153 -0
  324. maxframe/dataframe/extensions/collect_kv.py +126 -0
  325. maxframe/dataframe/extensions/extract_kv.py +177 -0
  326. maxframe/dataframe/extensions/flatjson.py +133 -0
  327. maxframe/dataframe/extensions/flatmap.py +329 -0
  328. maxframe/dataframe/extensions/map_reduce.py +263 -0
  329. maxframe/dataframe/extensions/rebalance.py +62 -0
  330. maxframe/dataframe/extensions/reshuffle.py +83 -0
  331. maxframe/dataframe/extensions/tests/__init__.py +13 -0
  332. maxframe/dataframe/extensions/tests/test_apply_chunk.py +194 -0
  333. maxframe/dataframe/extensions/tests/test_extensions.py +198 -0
  334. maxframe/dataframe/extensions/tests/test_map_reduce.py +135 -0
  335. maxframe/dataframe/fetch/__init__.py +15 -0
  336. maxframe/dataframe/fetch/core.py +97 -0
  337. maxframe/dataframe/groupby/__init__.py +105 -0
  338. maxframe/dataframe/groupby/aggregation.py +485 -0
  339. maxframe/dataframe/groupby/apply.py +235 -0
  340. maxframe/dataframe/groupby/apply_chunk.py +407 -0
  341. maxframe/dataframe/groupby/core.py +342 -0
  342. maxframe/dataframe/groupby/cum.py +102 -0
  343. maxframe/dataframe/groupby/expanding.py +264 -0
  344. maxframe/dataframe/groupby/extensions.py +26 -0
  345. maxframe/dataframe/groupby/fill.py +149 -0
  346. maxframe/dataframe/groupby/getitem.py +105 -0
  347. maxframe/dataframe/groupby/head.py +115 -0
  348. maxframe/dataframe/groupby/rank.py +136 -0
  349. maxframe/dataframe/groupby/rolling.py +206 -0
  350. maxframe/dataframe/groupby/sample.py +214 -0
  351. maxframe/dataframe/groupby/shift.py +114 -0
  352. maxframe/dataframe/groupby/tests/__init__.py +13 -0
  353. maxframe/dataframe/groupby/tests/test_groupby.py +373 -0
  354. maxframe/dataframe/groupby/transform.py +264 -0
  355. maxframe/dataframe/indexing/__init__.py +104 -0
  356. maxframe/dataframe/indexing/add_prefix_suffix.py +110 -0
  357. maxframe/dataframe/indexing/align.py +350 -0
  358. maxframe/dataframe/indexing/at.py +83 -0
  359. maxframe/dataframe/indexing/droplevel.py +195 -0
  360. maxframe/dataframe/indexing/filter.py +169 -0
  361. maxframe/dataframe/indexing/get_level_values.py +76 -0
  362. maxframe/dataframe/indexing/getitem.py +205 -0
  363. maxframe/dataframe/indexing/iat.py +82 -0
  364. maxframe/dataframe/indexing/iloc.py +711 -0
  365. maxframe/dataframe/indexing/insert.py +118 -0
  366. maxframe/dataframe/indexing/loc.py +694 -0
  367. maxframe/dataframe/indexing/reindex.py +541 -0
  368. maxframe/dataframe/indexing/rename.py +445 -0
  369. maxframe/dataframe/indexing/rename_axis.py +217 -0
  370. maxframe/dataframe/indexing/reorder_levels.py +143 -0
  371. maxframe/dataframe/indexing/reset_index.py +427 -0
  372. maxframe/dataframe/indexing/sample.py +232 -0
  373. maxframe/dataframe/indexing/set_axis.py +197 -0
  374. maxframe/dataframe/indexing/set_index.py +128 -0
  375. maxframe/dataframe/indexing/setitem.py +133 -0
  376. maxframe/dataframe/indexing/swaplevel.py +185 -0
  377. maxframe/dataframe/indexing/take.py +99 -0
  378. maxframe/dataframe/indexing/tests/__init__.py +13 -0
  379. maxframe/dataframe/indexing/tests/test_indexing.py +488 -0
  380. maxframe/dataframe/indexing/truncate.py +140 -0
  381. maxframe/dataframe/indexing/where.py +300 -0
  382. maxframe/dataframe/indexing/xs.py +148 -0
  383. maxframe/dataframe/initializer.py +298 -0
  384. maxframe/dataframe/merge/__init__.py +53 -0
  385. maxframe/dataframe/merge/append.py +120 -0
  386. maxframe/dataframe/merge/combine.py +244 -0
  387. maxframe/dataframe/merge/combine_first.py +120 -0
  388. maxframe/dataframe/merge/compare.py +387 -0
  389. maxframe/dataframe/merge/concat.py +500 -0
  390. maxframe/dataframe/merge/merge.py +806 -0
  391. maxframe/dataframe/merge/tests/__init__.py +13 -0
  392. maxframe/dataframe/merge/tests/test_merge.py +390 -0
  393. maxframe/dataframe/merge/update.py +271 -0
  394. maxframe/dataframe/misc/__init__.py +145 -0
  395. maxframe/dataframe/misc/_duplicate.py +56 -0
  396. maxframe/dataframe/misc/apply.py +730 -0
  397. maxframe/dataframe/misc/astype.py +237 -0
  398. maxframe/dataframe/misc/case_when.py +145 -0
  399. maxframe/dataframe/misc/check_monotonic.py +84 -0
  400. maxframe/dataframe/misc/check_unique.py +82 -0
  401. maxframe/dataframe/misc/clip.py +145 -0
  402. maxframe/dataframe/misc/cut.py +386 -0
  403. maxframe/dataframe/misc/describe.py +278 -0
  404. maxframe/dataframe/misc/diff.py +210 -0
  405. maxframe/dataframe/misc/drop.py +473 -0
  406. maxframe/dataframe/misc/drop_duplicates.py +251 -0
  407. maxframe/dataframe/misc/duplicated.py +292 -0
  408. maxframe/dataframe/misc/eval.py +730 -0
  409. maxframe/dataframe/misc/explode.py +171 -0
  410. maxframe/dataframe/misc/factorize.py +160 -0
  411. maxframe/dataframe/misc/get_dummies.py +241 -0
  412. maxframe/dataframe/misc/infer_dtypes.py +251 -0
  413. maxframe/dataframe/misc/isin.py +220 -0
  414. maxframe/dataframe/misc/map.py +360 -0
  415. maxframe/dataframe/misc/memory_usage.py +248 -0
  416. maxframe/dataframe/misc/pct_change.py +68 -0
  417. maxframe/dataframe/misc/qcut.py +104 -0
  418. maxframe/dataframe/misc/rechunk.py +59 -0
  419. maxframe/dataframe/misc/repeat.py +159 -0
  420. maxframe/dataframe/misc/select_dtypes.py +104 -0
  421. maxframe/dataframe/misc/shift.py +259 -0
  422. maxframe/dataframe/misc/tests/__init__.py +13 -0
  423. maxframe/dataframe/misc/tests/test_misc.py +649 -0
  424. maxframe/dataframe/misc/to_numeric.py +181 -0
  425. maxframe/dataframe/misc/transform.py +346 -0
  426. maxframe/dataframe/misc/transpose.py +148 -0
  427. maxframe/dataframe/misc/valid_index.py +115 -0
  428. maxframe/dataframe/misc/value_counts.py +206 -0
  429. maxframe/dataframe/missing/__init__.py +53 -0
  430. maxframe/dataframe/missing/checkna.py +231 -0
  431. maxframe/dataframe/missing/dropna.py +294 -0
  432. maxframe/dataframe/missing/fillna.py +283 -0
  433. maxframe/dataframe/missing/replace.py +446 -0
  434. maxframe/dataframe/missing/tests/__init__.py +13 -0
  435. maxframe/dataframe/missing/tests/test_missing.py +90 -0
  436. maxframe/dataframe/operators.py +231 -0
  437. maxframe/dataframe/reduction/__init__.py +129 -0
  438. maxframe/dataframe/reduction/aggregation.py +502 -0
  439. maxframe/dataframe/reduction/all.py +78 -0
  440. maxframe/dataframe/reduction/any.py +78 -0
  441. maxframe/dataframe/reduction/argmax.py +103 -0
  442. maxframe/dataframe/reduction/argmin.py +103 -0
  443. maxframe/dataframe/reduction/core.py +923 -0
  444. maxframe/dataframe/reduction/count.py +63 -0
  445. maxframe/dataframe/reduction/cov.py +166 -0
  446. maxframe/dataframe/reduction/cummax.py +30 -0
  447. maxframe/dataframe/reduction/cummin.py +30 -0
  448. maxframe/dataframe/reduction/cumprod.py +30 -0
  449. maxframe/dataframe/reduction/cumsum.py +30 -0
  450. maxframe/dataframe/reduction/custom_reduction.py +42 -0
  451. maxframe/dataframe/reduction/idxmax.py +185 -0
  452. maxframe/dataframe/reduction/idxmin.py +185 -0
  453. maxframe/dataframe/reduction/kurtosis.py +111 -0
  454. maxframe/dataframe/reduction/max.py +65 -0
  455. maxframe/dataframe/reduction/mean.py +63 -0
  456. maxframe/dataframe/reduction/median.py +56 -0
  457. maxframe/dataframe/reduction/min.py +65 -0
  458. maxframe/dataframe/reduction/mode.py +190 -0
  459. maxframe/dataframe/reduction/nunique.py +149 -0
  460. maxframe/dataframe/reduction/prod.py +81 -0
  461. maxframe/dataframe/reduction/reduction_size.py +36 -0
  462. maxframe/dataframe/reduction/sem.py +73 -0
  463. maxframe/dataframe/reduction/skew.py +93 -0
  464. maxframe/dataframe/reduction/std.py +53 -0
  465. maxframe/dataframe/reduction/str_concat.py +51 -0
  466. maxframe/dataframe/reduction/sum.py +81 -0
  467. maxframe/dataframe/reduction/tests/__init__.py +13 -0
  468. maxframe/dataframe/reduction/tests/test_reduction.py +598 -0
  469. maxframe/dataframe/reduction/unique.py +153 -0
  470. maxframe/dataframe/reduction/var.py +76 -0
  471. maxframe/dataframe/reshape/__init__.py +38 -0
  472. maxframe/dataframe/reshape/melt.py +169 -0
  473. maxframe/dataframe/reshape/pivot.py +233 -0
  474. maxframe/dataframe/reshape/pivot_table.py +275 -0
  475. maxframe/dataframe/reshape/stack.py +240 -0
  476. maxframe/dataframe/reshape/unstack.py +114 -0
  477. maxframe/dataframe/sort/__init__.py +49 -0
  478. maxframe/dataframe/sort/argsort.py +68 -0
  479. maxframe/dataframe/sort/core.py +37 -0
  480. maxframe/dataframe/sort/nlargest.py +238 -0
  481. maxframe/dataframe/sort/nsmallest.py +228 -0
  482. maxframe/dataframe/sort/rank.py +147 -0
  483. maxframe/dataframe/sort/sort_index.py +153 -0
  484. maxframe/dataframe/sort/sort_values.py +308 -0
  485. maxframe/dataframe/sort/tests/__init__.py +13 -0
  486. maxframe/dataframe/sort/tests/test_sort.py +85 -0
  487. maxframe/dataframe/statistics/__init__.py +33 -0
  488. maxframe/dataframe/statistics/corr.py +284 -0
  489. maxframe/dataframe/statistics/quantile.py +338 -0
  490. maxframe/dataframe/statistics/tests/__init__.py +13 -0
  491. maxframe/dataframe/statistics/tests/test_statistics.py +82 -0
  492. maxframe/dataframe/tests/__init__.py +13 -0
  493. maxframe/dataframe/tests/test_initializer.py +60 -0
  494. maxframe/dataframe/tests/test_typing.py +119 -0
  495. maxframe/dataframe/tests/test_utils.py +169 -0
  496. maxframe/dataframe/tseries/__init__.py +32 -0
  497. maxframe/dataframe/tseries/at_time.py +61 -0
  498. maxframe/dataframe/tseries/between_time.py +122 -0
  499. maxframe/dataframe/tseries/tests/__init__.py +13 -0
  500. maxframe/dataframe/tseries/tests/test_tseries.py +30 -0
  501. maxframe/dataframe/tseries/to_datetime.py +299 -0
  502. maxframe/dataframe/typing_.py +196 -0
  503. maxframe/dataframe/ufunc/__init__.py +27 -0
  504. maxframe/dataframe/ufunc/tensor.py +54 -0
  505. maxframe/dataframe/ufunc/ufunc.py +53 -0
  506. maxframe/dataframe/utils.py +1728 -0
  507. maxframe/dataframe/window/__init__.py +29 -0
  508. maxframe/dataframe/window/aggregation.py +100 -0
  509. maxframe/dataframe/window/core.py +82 -0
  510. maxframe/dataframe/window/ewm.py +247 -0
  511. maxframe/dataframe/window/expanding.py +151 -0
  512. maxframe/dataframe/window/rolling.py +389 -0
  513. maxframe/dataframe/window/tests/__init__.py +13 -0
  514. maxframe/dataframe/window/tests/test_ewm.py +70 -0
  515. maxframe/dataframe/window/tests/test_expanding.py +60 -0
  516. maxframe/dataframe/window/tests/test_rolling.py +57 -0
  517. maxframe/env.py +37 -0
  518. maxframe/errors.py +52 -0
  519. maxframe/extension.py +131 -0
  520. maxframe/io/__init__.py +13 -0
  521. maxframe/io/objects/__init__.py +24 -0
  522. maxframe/io/objects/core.py +156 -0
  523. maxframe/io/objects/tensor.py +133 -0
  524. maxframe/io/objects/tests/__init__.py +13 -0
  525. maxframe/io/objects/tests/test_object_io.py +85 -0
  526. maxframe/io/odpsio/__init__.py +24 -0
  527. maxframe/io/odpsio/arrow.py +161 -0
  528. maxframe/io/odpsio/schema.py +533 -0
  529. maxframe/io/odpsio/tableio.py +736 -0
  530. maxframe/io/odpsio/tests/__init__.py +13 -0
  531. maxframe/io/odpsio/tests/test_arrow.py +132 -0
  532. maxframe/io/odpsio/tests/test_schema.py +582 -0
  533. maxframe/io/odpsio/tests/test_tableio.py +205 -0
  534. maxframe/io/odpsio/tests/test_volumeio.py +75 -0
  535. maxframe/io/odpsio/volumeio.py +102 -0
  536. maxframe/learn/__init__.py +25 -0
  537. maxframe/learn/cluster/__init__.py +15 -0
  538. maxframe/learn/cluster/_kmeans.py +782 -0
  539. maxframe/learn/contrib/__init__.py +17 -0
  540. maxframe/learn/contrib/graph/__init__.py +15 -0
  541. maxframe/learn/contrib/graph/connected_components.py +216 -0
  542. maxframe/learn/contrib/graph/tests/__init__.py +13 -0
  543. maxframe/learn/contrib/graph/tests/test_connected_components.py +53 -0
  544. maxframe/learn/contrib/lightgbm/__init__.py +33 -0
  545. maxframe/learn/contrib/lightgbm/_predict.py +138 -0
  546. maxframe/learn/contrib/lightgbm/_train.py +163 -0
  547. maxframe/learn/contrib/lightgbm/callback.py +114 -0
  548. maxframe/learn/contrib/lightgbm/classifier.py +199 -0
  549. maxframe/learn/contrib/lightgbm/core.py +372 -0
  550. maxframe/learn/contrib/lightgbm/dataset.py +153 -0
  551. maxframe/learn/contrib/lightgbm/regressor.py +29 -0
  552. maxframe/learn/contrib/lightgbm/tests/__init__.py +13 -0
  553. maxframe/learn/contrib/lightgbm/tests/test_callback.py +58 -0
  554. maxframe/learn/contrib/llm/__init__.py +17 -0
  555. maxframe/learn/contrib/llm/core.py +105 -0
  556. maxframe/learn/contrib/llm/deploy/__init__.py +13 -0
  557. maxframe/learn/contrib/llm/deploy/config.py +221 -0
  558. maxframe/learn/contrib/llm/deploy/core.py +247 -0
  559. maxframe/learn/contrib/llm/deploy/framework.py +35 -0
  560. maxframe/learn/contrib/llm/deploy/loader.py +360 -0
  561. maxframe/learn/contrib/llm/deploy/tests/__init__.py +13 -0
  562. maxframe/learn/contrib/llm/deploy/tests/test_register_models.py +359 -0
  563. maxframe/learn/contrib/llm/models/__init__.py +16 -0
  564. maxframe/learn/contrib/llm/models/dashscope.py +114 -0
  565. maxframe/learn/contrib/llm/models/managed.py +119 -0
  566. maxframe/learn/contrib/llm/models/openai.py +72 -0
  567. maxframe/learn/contrib/llm/multi_modal.py +135 -0
  568. maxframe/learn/contrib/llm/tests/__init__.py +13 -0
  569. maxframe/learn/contrib/llm/tests/test_core.py +34 -0
  570. maxframe/learn/contrib/llm/tests/test_openai.py +187 -0
  571. maxframe/learn/contrib/llm/tests/test_text_gen.py +155 -0
  572. maxframe/learn/contrib/llm/text.py +608 -0
  573. maxframe/learn/contrib/models.py +109 -0
  574. maxframe/learn/contrib/pytorch/__init__.py +16 -0
  575. maxframe/learn/contrib/pytorch/run_function.py +110 -0
  576. maxframe/learn/contrib/pytorch/run_script.py +102 -0
  577. maxframe/learn/contrib/pytorch/tests/__init__.py +13 -0
  578. maxframe/learn/contrib/pytorch/tests/test_pytorch.py +42 -0
  579. maxframe/learn/contrib/utils.py +108 -0
  580. maxframe/learn/contrib/xgboost/__init__.py +33 -0
  581. maxframe/learn/contrib/xgboost/callback.py +86 -0
  582. maxframe/learn/contrib/xgboost/classifier.py +119 -0
  583. maxframe/learn/contrib/xgboost/core.py +469 -0
  584. maxframe/learn/contrib/xgboost/dmatrix.py +157 -0
  585. maxframe/learn/contrib/xgboost/predict.py +133 -0
  586. maxframe/learn/contrib/xgboost/regressor.py +91 -0
  587. maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
  588. maxframe/learn/contrib/xgboost/tests/test_callback.py +41 -0
  589. maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
  590. maxframe/learn/contrib/xgboost/train.py +181 -0
  591. maxframe/learn/core.py +344 -0
  592. maxframe/learn/datasets/__init__.py +20 -0
  593. maxframe/learn/datasets/samples_generator.py +628 -0
  594. maxframe/learn/linear_model/__init__.py +15 -0
  595. maxframe/learn/linear_model/_base.py +220 -0
  596. maxframe/learn/linear_model/_lin_reg.py +175 -0
  597. maxframe/learn/metrics/__init__.py +31 -0
  598. maxframe/learn/metrics/_check_targets.py +95 -0
  599. maxframe/learn/metrics/_classification.py +1266 -0
  600. maxframe/learn/metrics/_ranking.py +477 -0
  601. maxframe/learn/metrics/_regression.py +256 -0
  602. maxframe/learn/metrics/_scorer.py +60 -0
  603. maxframe/learn/metrics/pairwise/__init__.py +21 -0
  604. maxframe/learn/metrics/pairwise/core.py +77 -0
  605. maxframe/learn/metrics/pairwise/cosine.py +115 -0
  606. maxframe/learn/metrics/pairwise/euclidean.py +176 -0
  607. maxframe/learn/metrics/pairwise/haversine.py +96 -0
  608. maxframe/learn/metrics/pairwise/manhattan.py +80 -0
  609. maxframe/learn/metrics/pairwise/pairwise.py +127 -0
  610. maxframe/learn/metrics/pairwise/pairwise_distances_topk.py +121 -0
  611. maxframe/learn/metrics/pairwise/rbf_kernel.py +51 -0
  612. maxframe/learn/metrics/tests/__init__.py +13 -0
  613. maxframe/learn/metrics/tests/test_scorer.py +26 -0
  614. maxframe/learn/model_selection/__init__.py +15 -0
  615. maxframe/learn/model_selection/_split.py +451 -0
  616. maxframe/learn/model_selection/tests/__init__.py +13 -0
  617. maxframe/learn/model_selection/tests/test_split.py +156 -0
  618. maxframe/learn/preprocessing/__init__.py +16 -0
  619. maxframe/learn/preprocessing/_data/__init__.py +17 -0
  620. maxframe/learn/preprocessing/_data/min_max_scaler.py +401 -0
  621. maxframe/learn/preprocessing/_data/normalize.py +127 -0
  622. maxframe/learn/preprocessing/_data/standard_scaler.py +512 -0
  623. maxframe/learn/preprocessing/_data/utils.py +79 -0
  624. maxframe/learn/preprocessing/_label/__init__.py +16 -0
  625. maxframe/learn/preprocessing/_label/_label_binarizer.py +599 -0
  626. maxframe/learn/preprocessing/_label/_label_encoder.py +174 -0
  627. maxframe/learn/utils/__init__.py +20 -0
  628. maxframe/learn/utils/_encode.py +312 -0
  629. maxframe/learn/utils/checks.py +160 -0
  630. maxframe/learn/utils/core.py +121 -0
  631. maxframe/learn/utils/extmath.py +246 -0
  632. maxframe/learn/utils/multiclass.py +292 -0
  633. maxframe/learn/utils/odpsio.py +262 -0
  634. maxframe/learn/utils/shuffle.py +114 -0
  635. maxframe/learn/utils/sparsefuncs.py +87 -0
  636. maxframe/learn/utils/validation.py +775 -0
  637. maxframe/lib/__init__.py +13 -0
  638. maxframe/lib/aio/__init__.py +27 -0
  639. maxframe/lib/aio/_runners.py +162 -0
  640. maxframe/lib/aio/_threads.py +35 -0
  641. maxframe/lib/aio/base.py +82 -0
  642. maxframe/lib/aio/file.py +85 -0
  643. maxframe/lib/aio/isolation.py +100 -0
  644. maxframe/lib/aio/lru.py +242 -0
  645. maxframe/lib/aio/parallelism.py +37 -0
  646. maxframe/lib/aio/tests/__init__.py +13 -0
  647. maxframe/lib/aio/tests/test_aio_file.py +55 -0
  648. maxframe/lib/compat.py +185 -0
  649. maxframe/lib/compression.py +55 -0
  650. maxframe/lib/cython/__init__.py +13 -0
  651. maxframe/lib/cython/libcpp.pxd +30 -0
  652. maxframe/lib/dtypes_extension/__init__.py +30 -0
  653. maxframe/lib/dtypes_extension/_fake_arrow_dtype.py +609 -0
  654. maxframe/lib/dtypes_extension/blob.py +304 -0
  655. maxframe/lib/dtypes_extension/dtypes.py +106 -0
  656. maxframe/lib/dtypes_extension/tests/__init__.py +13 -0
  657. maxframe/lib/dtypes_extension/tests/test_blob.py +88 -0
  658. maxframe/lib/dtypes_extension/tests/test_dtypes.py +63 -0
  659. maxframe/lib/dtypes_extension/tests/test_fake_arrow_dtype.py +75 -0
  660. maxframe/lib/filesystem/__init__.py +22 -0
  661. maxframe/lib/filesystem/_glob.py +173 -0
  662. maxframe/lib/filesystem/_oss_lib/__init__.py +13 -0
  663. maxframe/lib/filesystem/_oss_lib/common.py +274 -0
  664. maxframe/lib/filesystem/_oss_lib/glob.py +147 -0
  665. maxframe/lib/filesystem/_oss_lib/handle.py +180 -0
  666. maxframe/lib/filesystem/arrow.py +240 -0
  667. maxframe/lib/filesystem/base.py +327 -0
  668. maxframe/lib/filesystem/core.py +95 -0
  669. maxframe/lib/filesystem/fshandler.py +136 -0
  670. maxframe/lib/filesystem/fsmap.py +164 -0
  671. maxframe/lib/filesystem/hdfs.py +31 -0
  672. maxframe/lib/filesystem/local.py +120 -0
  673. maxframe/lib/filesystem/oss.py +283 -0
  674. maxframe/lib/filesystem/tests/__init__.py +13 -0
  675. maxframe/lib/filesystem/tests/test_filesystem.py +205 -0
  676. maxframe/lib/filesystem/tests/test_fshandler.py +281 -0
  677. maxframe/lib/filesystem/tests/test_oss.py +220 -0
  678. maxframe/lib/functools_compat.py +81 -0
  679. maxframe/lib/mmh3.cp312-win32.pyd +0 -0
  680. maxframe/lib/mmh3.pyi +43 -0
  681. maxframe/lib/mmh3_src/MurmurHash3.cpp +339 -0
  682. maxframe/lib/mmh3_src/MurmurHash3.h +43 -0
  683. maxframe/lib/mmh3_src/mmh3module.cpp +387 -0
  684. maxframe/lib/sparse/__init__.py +856 -0
  685. maxframe/lib/sparse/array.py +1616 -0
  686. maxframe/lib/sparse/core.py +90 -0
  687. maxframe/lib/sparse/linalg.py +31 -0
  688. maxframe/lib/sparse/matrix.py +244 -0
  689. maxframe/lib/sparse/tests/__init__.py +13 -0
  690. maxframe/lib/sparse/tests/test_sparse.py +476 -0
  691. maxframe/lib/sparse/vector.py +148 -0
  692. maxframe/lib/tblib/LICENSE +20 -0
  693. maxframe/lib/tblib/__init__.py +327 -0
  694. maxframe/lib/tblib/cpython.py +83 -0
  695. maxframe/lib/tblib/decorators.py +44 -0
  696. maxframe/lib/tblib/pickling_support.py +90 -0
  697. maxframe/lib/tests/__init__.py +13 -0
  698. maxframe/lib/tests/test_wrapped_pickle.py +51 -0
  699. maxframe/lib/version.py +620 -0
  700. maxframe/lib/wrapped_pickle.py +177 -0
  701. maxframe/mixin.py +157 -0
  702. maxframe/opcodes.py +654 -0
  703. maxframe/protocol.py +611 -0
  704. maxframe/remote/__init__.py +18 -0
  705. maxframe/remote/core.py +212 -0
  706. maxframe/remote/run_script.py +124 -0
  707. maxframe/serialization/__init__.py +39 -0
  708. maxframe/serialization/arrow.py +107 -0
  709. maxframe/serialization/blob.py +32 -0
  710. maxframe/serialization/core.cp312-win32.pyd +0 -0
  711. maxframe/serialization/core.pxd +50 -0
  712. maxframe/serialization/core.pyi +66 -0
  713. maxframe/serialization/core.pyx +1282 -0
  714. maxframe/serialization/exception.py +90 -0
  715. maxframe/serialization/maxframe_objects.py +39 -0
  716. maxframe/serialization/numpy.py +110 -0
  717. maxframe/serialization/pandas.py +278 -0
  718. maxframe/serialization/scipy.py +71 -0
  719. maxframe/serialization/serializables/__init__.py +55 -0
  720. maxframe/serialization/serializables/core.py +469 -0
  721. maxframe/serialization/serializables/field.py +624 -0
  722. maxframe/serialization/serializables/field_type.py +592 -0
  723. maxframe/serialization/serializables/tests/__init__.py +13 -0
  724. maxframe/serialization/serializables/tests/test_field_type.py +119 -0
  725. maxframe/serialization/serializables/tests/test_serializable.py +313 -0
  726. maxframe/serialization/tests/__init__.py +13 -0
  727. maxframe/serialization/tests/test_serial.py +516 -0
  728. maxframe/session.py +1250 -0
  729. maxframe/sperunner.py +165 -0
  730. maxframe/tensor/__init__.py +325 -0
  731. maxframe/tensor/arithmetic/__init__.py +322 -0
  732. maxframe/tensor/arithmetic/abs.py +66 -0
  733. maxframe/tensor/arithmetic/absolute.py +66 -0
  734. maxframe/tensor/arithmetic/add.py +112 -0
  735. maxframe/tensor/arithmetic/angle.py +70 -0
  736. maxframe/tensor/arithmetic/arccos.py +101 -0
  737. maxframe/tensor/arithmetic/arccosh.py +89 -0
  738. maxframe/tensor/arithmetic/arcsin.py +92 -0
  739. maxframe/tensor/arithmetic/arcsinh.py +84 -0
  740. maxframe/tensor/arithmetic/arctan.py +104 -0
  741. maxframe/tensor/arithmetic/arctan2.py +126 -0
  742. maxframe/tensor/arithmetic/arctanh.py +84 -0
  743. maxframe/tensor/arithmetic/around.py +112 -0
  744. maxframe/tensor/arithmetic/bitand.py +93 -0
  745. maxframe/tensor/arithmetic/bitor.py +100 -0
  746. maxframe/tensor/arithmetic/bitxor.py +93 -0
  747. maxframe/tensor/arithmetic/cbrt.py +64 -0
  748. maxframe/tensor/arithmetic/ceil.py +69 -0
  749. maxframe/tensor/arithmetic/clip.py +165 -0
  750. maxframe/tensor/arithmetic/conj.py +72 -0
  751. maxframe/tensor/arithmetic/copysign.py +76 -0
  752. maxframe/tensor/arithmetic/core.py +546 -0
  753. maxframe/tensor/arithmetic/cos.py +83 -0
  754. maxframe/tensor/arithmetic/cosh.py +70 -0
  755. maxframe/tensor/arithmetic/deg2rad.py +70 -0
  756. maxframe/tensor/arithmetic/degrees.py +75 -0
  757. maxframe/tensor/arithmetic/divide.py +112 -0
  758. maxframe/tensor/arithmetic/equal.py +74 -0
  759. maxframe/tensor/arithmetic/exp.py +104 -0
  760. maxframe/tensor/arithmetic/exp2.py +65 -0
  761. maxframe/tensor/arithmetic/expm1.py +77 -0
  762. maxframe/tensor/arithmetic/fabs.py +72 -0
  763. maxframe/tensor/arithmetic/fix.py +67 -0
  764. maxframe/tensor/arithmetic/float_power.py +101 -0
  765. maxframe/tensor/arithmetic/floor.py +75 -0
  766. maxframe/tensor/arithmetic/floordiv.py +92 -0
  767. maxframe/tensor/arithmetic/fmax.py +103 -0
  768. maxframe/tensor/arithmetic/fmin.py +104 -0
  769. maxframe/tensor/arithmetic/fmod.py +97 -0
  770. maxframe/tensor/arithmetic/frexp.py +96 -0
  771. maxframe/tensor/arithmetic/greater.py +75 -0
  772. maxframe/tensor/arithmetic/greater_equal.py +67 -0
  773. maxframe/tensor/arithmetic/hypot.py +75 -0
  774. maxframe/tensor/arithmetic/i0.py +87 -0
  775. maxframe/tensor/arithmetic/imag.py +65 -0
  776. maxframe/tensor/arithmetic/invert.py +108 -0
  777. maxframe/tensor/arithmetic/isclose.py +114 -0
  778. maxframe/tensor/arithmetic/iscomplex.py +62 -0
  779. maxframe/tensor/arithmetic/iscomplexobj.py +53 -0
  780. maxframe/tensor/arithmetic/isfinite.py +104 -0
  781. maxframe/tensor/arithmetic/isinf.py +101 -0
  782. maxframe/tensor/arithmetic/isnan.py +80 -0
  783. maxframe/tensor/arithmetic/isreal.py +61 -0
  784. maxframe/tensor/arithmetic/ldexp.py +97 -0
  785. maxframe/tensor/arithmetic/less.py +67 -0
  786. maxframe/tensor/arithmetic/less_equal.py +67 -0
  787. maxframe/tensor/arithmetic/log.py +90 -0
  788. maxframe/tensor/arithmetic/log10.py +83 -0
  789. maxframe/tensor/arithmetic/log1p.py +93 -0
  790. maxframe/tensor/arithmetic/log2.py +83 -0
  791. maxframe/tensor/arithmetic/logaddexp.py +78 -0
  792. maxframe/tensor/arithmetic/logaddexp2.py +76 -0
  793. maxframe/tensor/arithmetic/logical_and.py +79 -0
  794. maxframe/tensor/arithmetic/logical_not.py +72 -0
  795. maxframe/tensor/arithmetic/logical_or.py +80 -0
  796. maxframe/tensor/arithmetic/logical_xor.py +86 -0
  797. maxframe/tensor/arithmetic/lshift.py +80 -0
  798. maxframe/tensor/arithmetic/maximum.py +106 -0
  799. maxframe/tensor/arithmetic/minimum.py +106 -0
  800. maxframe/tensor/arithmetic/mod.py +102 -0
  801. maxframe/tensor/arithmetic/modf.py +87 -0
  802. maxframe/tensor/arithmetic/multiply.py +114 -0
  803. maxframe/tensor/arithmetic/nan_to_num.py +97 -0
  804. maxframe/tensor/arithmetic/negative.py +63 -0
  805. maxframe/tensor/arithmetic/nextafter.py +66 -0
  806. maxframe/tensor/arithmetic/not_equal.py +70 -0
  807. maxframe/tensor/arithmetic/positive.py +45 -0
  808. maxframe/tensor/arithmetic/power.py +104 -0
  809. maxframe/tensor/arithmetic/rad2deg.py +69 -0
  810. maxframe/tensor/arithmetic/radians.py +75 -0
  811. maxframe/tensor/arithmetic/real.py +68 -0
  812. maxframe/tensor/arithmetic/reciprocal.py +78 -0
  813. maxframe/tensor/arithmetic/rint.py +66 -0
  814. maxframe/tensor/arithmetic/rshift.py +79 -0
  815. maxframe/tensor/arithmetic/setimag.py +27 -0
  816. maxframe/tensor/arithmetic/setreal.py +27 -0
  817. maxframe/tensor/arithmetic/sign.py +79 -0
  818. maxframe/tensor/arithmetic/signbit.py +63 -0
  819. maxframe/tensor/arithmetic/sin.py +96 -0
  820. maxframe/tensor/arithmetic/sinc.py +100 -0
  821. maxframe/tensor/arithmetic/sinh.py +91 -0
  822. maxframe/tensor/arithmetic/spacing.py +70 -0
  823. maxframe/tensor/arithmetic/sqrt.py +79 -0
  824. maxframe/tensor/arithmetic/square.py +67 -0
  825. maxframe/tensor/arithmetic/subtract.py +83 -0
  826. maxframe/tensor/arithmetic/tan.py +86 -0
  827. maxframe/tensor/arithmetic/tanh.py +90 -0
  828. maxframe/tensor/arithmetic/tests/__init__.py +13 -0
  829. maxframe/tensor/arithmetic/tests/test_arithmetic.py +449 -0
  830. maxframe/tensor/arithmetic/truediv.py +102 -0
  831. maxframe/tensor/arithmetic/trunc.py +70 -0
  832. maxframe/tensor/arithmetic/utils.py +91 -0
  833. maxframe/tensor/array_utils.py +164 -0
  834. maxframe/tensor/core.py +597 -0
  835. maxframe/tensor/datasource/__init__.py +40 -0
  836. maxframe/tensor/datasource/arange.py +154 -0
  837. maxframe/tensor/datasource/array.py +399 -0
  838. maxframe/tensor/datasource/core.py +114 -0
  839. maxframe/tensor/datasource/diag.py +140 -0
  840. maxframe/tensor/datasource/diagflat.py +69 -0
  841. maxframe/tensor/datasource/empty.py +167 -0
  842. maxframe/tensor/datasource/eye.py +95 -0
  843. maxframe/tensor/datasource/from_dataframe.py +68 -0
  844. maxframe/tensor/datasource/from_dense.py +37 -0
  845. maxframe/tensor/datasource/from_sparse.py +45 -0
  846. maxframe/tensor/datasource/full.py +184 -0
  847. maxframe/tensor/datasource/identity.py +54 -0
  848. maxframe/tensor/datasource/indices.py +115 -0
  849. maxframe/tensor/datasource/linspace.py +140 -0
  850. maxframe/tensor/datasource/meshgrid.py +135 -0
  851. maxframe/tensor/datasource/ones.py +178 -0
  852. maxframe/tensor/datasource/scalar.py +40 -0
  853. maxframe/tensor/datasource/tests/__init__.py +13 -0
  854. maxframe/tensor/datasource/tests/test_datasource.py +310 -0
  855. maxframe/tensor/datasource/tri_array.py +107 -0
  856. maxframe/tensor/datasource/zeros.py +192 -0
  857. maxframe/tensor/extensions/__init__.py +33 -0
  858. maxframe/tensor/extensions/accessor.py +25 -0
  859. maxframe/tensor/extensions/apply_chunk.py +137 -0
  860. maxframe/tensor/extensions/rebalance.py +65 -0
  861. maxframe/tensor/fetch/__init__.py +15 -0
  862. maxframe/tensor/fetch/core.py +54 -0
  863. maxframe/tensor/fft/__init__.py +32 -0
  864. maxframe/tensor/fft/core.py +168 -0
  865. maxframe/tensor/fft/fft.py +112 -0
  866. maxframe/tensor/fft/fft2.py +118 -0
  867. maxframe/tensor/fft/fftfreq.py +80 -0
  868. maxframe/tensor/fft/fftn.py +123 -0
  869. maxframe/tensor/fft/fftshift.py +79 -0
  870. maxframe/tensor/fft/hfft.py +112 -0
  871. maxframe/tensor/fft/ifft.py +114 -0
  872. maxframe/tensor/fft/ifft2.py +115 -0
  873. maxframe/tensor/fft/ifftn.py +123 -0
  874. maxframe/tensor/fft/ifftshift.py +73 -0
  875. maxframe/tensor/fft/ihfft.py +93 -0
  876. maxframe/tensor/fft/irfft.py +118 -0
  877. maxframe/tensor/fft/irfft2.py +62 -0
  878. maxframe/tensor/fft/irfftn.py +114 -0
  879. maxframe/tensor/fft/rfft.py +116 -0
  880. maxframe/tensor/fft/rfft2.py +63 -0
  881. maxframe/tensor/fft/rfftfreq.py +87 -0
  882. maxframe/tensor/fft/rfftn.py +113 -0
  883. maxframe/tensor/indexing/__init__.py +47 -0
  884. maxframe/tensor/indexing/choose.py +198 -0
  885. maxframe/tensor/indexing/compress.py +122 -0
  886. maxframe/tensor/indexing/core.py +190 -0
  887. maxframe/tensor/indexing/extract.py +69 -0
  888. maxframe/tensor/indexing/fill_diagonal.py +180 -0
  889. maxframe/tensor/indexing/flatnonzero.py +58 -0
  890. maxframe/tensor/indexing/getitem.py +144 -0
  891. maxframe/tensor/indexing/nonzero.py +118 -0
  892. maxframe/tensor/indexing/setitem.py +142 -0
  893. maxframe/tensor/indexing/slice.py +32 -0
  894. maxframe/tensor/indexing/take.py +128 -0
  895. maxframe/tensor/indexing/tests/__init__.py +13 -0
  896. maxframe/tensor/indexing/tests/test_indexing.py +232 -0
  897. maxframe/tensor/indexing/unravel_index.py +103 -0
  898. maxframe/tensor/lib/__init__.py +16 -0
  899. maxframe/tensor/lib/index_tricks.py +404 -0
  900. maxframe/tensor/linalg/__init__.py +43 -0
  901. maxframe/tensor/linalg/_einsumfunc.py +1025 -0
  902. maxframe/tensor/linalg/cholesky.py +117 -0
  903. maxframe/tensor/linalg/dot.py +145 -0
  904. maxframe/tensor/linalg/einsum.py +339 -0
  905. maxframe/tensor/linalg/inner.py +36 -0
  906. maxframe/tensor/linalg/inv.py +83 -0
  907. maxframe/tensor/linalg/lstsq.py +100 -0
  908. maxframe/tensor/linalg/lu.py +115 -0
  909. maxframe/tensor/linalg/matmul.py +225 -0
  910. maxframe/tensor/linalg/matrix_norm.py +75 -0
  911. maxframe/tensor/linalg/norm.py +249 -0
  912. maxframe/tensor/linalg/qr.py +124 -0
  913. maxframe/tensor/linalg/solve.py +72 -0
  914. maxframe/tensor/linalg/solve_triangular.py +103 -0
  915. maxframe/tensor/linalg/svd.py +167 -0
  916. maxframe/tensor/linalg/tensordot.py +213 -0
  917. maxframe/tensor/linalg/vdot.py +73 -0
  918. maxframe/tensor/linalg/vector_norm.py +113 -0
  919. maxframe/tensor/merge/__init__.py +21 -0
  920. maxframe/tensor/merge/append.py +74 -0
  921. maxframe/tensor/merge/column_stack.py +63 -0
  922. maxframe/tensor/merge/concatenate.py +103 -0
  923. maxframe/tensor/merge/dstack.py +71 -0
  924. maxframe/tensor/merge/hstack.py +70 -0
  925. maxframe/tensor/merge/stack.py +130 -0
  926. maxframe/tensor/merge/tests/__init__.py +13 -0
  927. maxframe/tensor/merge/tests/test_merge.py +79 -0
  928. maxframe/tensor/merge/vstack.py +74 -0
  929. maxframe/tensor/misc/__init__.py +72 -0
  930. maxframe/tensor/misc/argwhere.py +72 -0
  931. maxframe/tensor/misc/array_split.py +46 -0
  932. maxframe/tensor/misc/astype.py +121 -0
  933. maxframe/tensor/misc/atleast_1d.py +72 -0
  934. maxframe/tensor/misc/atleast_2d.py +70 -0
  935. maxframe/tensor/misc/atleast_3d.py +85 -0
  936. maxframe/tensor/misc/broadcast_arrays.py +57 -0
  937. maxframe/tensor/misc/broadcast_to.py +89 -0
  938. maxframe/tensor/misc/copy.py +64 -0
  939. maxframe/tensor/misc/copyto.py +130 -0
  940. maxframe/tensor/misc/delete.py +104 -0
  941. maxframe/tensor/misc/diff.py +115 -0
  942. maxframe/tensor/misc/dsplit.py +68 -0
  943. maxframe/tensor/misc/ediff1d.py +74 -0
  944. maxframe/tensor/misc/expand_dims.py +85 -0
  945. maxframe/tensor/misc/flatten.py +63 -0
  946. maxframe/tensor/misc/flip.py +90 -0
  947. maxframe/tensor/misc/fliplr.py +64 -0
  948. maxframe/tensor/misc/flipud.py +68 -0
  949. maxframe/tensor/misc/hsplit.py +85 -0
  950. maxframe/tensor/misc/in1d.py +94 -0
  951. maxframe/tensor/misc/insert.py +139 -0
  952. maxframe/tensor/misc/isin.py +130 -0
  953. maxframe/tensor/misc/moveaxis.py +83 -0
  954. maxframe/tensor/misc/ndim.py +53 -0
  955. maxframe/tensor/misc/ravel.py +90 -0
  956. maxframe/tensor/misc/repeat.py +129 -0
  957. maxframe/tensor/misc/result_type.py +88 -0
  958. maxframe/tensor/misc/roll.py +124 -0
  959. maxframe/tensor/misc/rollaxis.py +77 -0
  960. maxframe/tensor/misc/searchsorted.py +147 -0
  961. maxframe/tensor/misc/setdiff1d.py +58 -0
  962. maxframe/tensor/misc/shape.py +89 -0
  963. maxframe/tensor/misc/split.py +190 -0
  964. maxframe/tensor/misc/squeeze.py +117 -0
  965. maxframe/tensor/misc/swapaxes.py +113 -0
  966. maxframe/tensor/misc/tests/__init__.py +13 -0
  967. maxframe/tensor/misc/tests/test_misc.py +112 -0
  968. maxframe/tensor/misc/tile.py +109 -0
  969. maxframe/tensor/misc/transpose.py +133 -0
  970. maxframe/tensor/misc/trapezoid.py +123 -0
  971. maxframe/tensor/misc/unique.py +227 -0
  972. maxframe/tensor/misc/vsplit.py +74 -0
  973. maxframe/tensor/misc/where.py +129 -0
  974. maxframe/tensor/operators.py +83 -0
  975. maxframe/tensor/random/__init__.py +166 -0
  976. maxframe/tensor/random/beta.py +87 -0
  977. maxframe/tensor/random/binomial.py +135 -0
  978. maxframe/tensor/random/bytes.py +37 -0
  979. maxframe/tensor/random/chisquare.py +108 -0
  980. maxframe/tensor/random/choice.py +187 -0
  981. maxframe/tensor/random/core.py +249 -0
  982. maxframe/tensor/random/dirichlet.py +121 -0
  983. maxframe/tensor/random/exponential.py +92 -0
  984. maxframe/tensor/random/f.py +133 -0
  985. maxframe/tensor/random/gamma.py +126 -0
  986. maxframe/tensor/random/geometric.py +91 -0
  987. maxframe/tensor/random/gumbel.py +165 -0
  988. maxframe/tensor/random/hypergeometric.py +146 -0
  989. maxframe/tensor/random/laplace.py +131 -0
  990. maxframe/tensor/random/logistic.py +127 -0
  991. maxframe/tensor/random/lognormal.py +157 -0
  992. maxframe/tensor/random/logseries.py +120 -0
  993. maxframe/tensor/random/multinomial.py +131 -0
  994. maxframe/tensor/random/multivariate_normal.py +190 -0
  995. maxframe/tensor/random/negative_binomial.py +123 -0
  996. maxframe/tensor/random/noncentral_chisquare.py +130 -0
  997. maxframe/tensor/random/noncentral_f.py +124 -0
  998. maxframe/tensor/random/normal.py +141 -0
  999. maxframe/tensor/random/pareto.py +138 -0
  1000. maxframe/tensor/random/permutation.py +107 -0
  1001. maxframe/tensor/random/poisson.py +109 -0
  1002. maxframe/tensor/random/power.py +140 -0
  1003. maxframe/tensor/random/rand.py +80 -0
  1004. maxframe/tensor/random/randint.py +119 -0
  1005. maxframe/tensor/random/randn.py +94 -0
  1006. maxframe/tensor/random/random_integers.py +121 -0
  1007. maxframe/tensor/random/random_sample.py +84 -0
  1008. maxframe/tensor/random/rayleigh.py +108 -0
  1009. maxframe/tensor/random/shuffle.py +61 -0
  1010. maxframe/tensor/random/standard_cauchy.py +103 -0
  1011. maxframe/tensor/random/standard_exponential.py +70 -0
  1012. maxframe/tensor/random/standard_gamma.py +118 -0
  1013. maxframe/tensor/random/standard_normal.py +72 -0
  1014. maxframe/tensor/random/standard_t.py +133 -0
  1015. maxframe/tensor/random/tests/__init__.py +13 -0
  1016. maxframe/tensor/random/tests/test_random.py +165 -0
  1017. maxframe/tensor/random/triangular.py +117 -0
  1018. maxframe/tensor/random/uniform.py +129 -0
  1019. maxframe/tensor/random/vonmises.py +129 -0
  1020. maxframe/tensor/random/wald.py +112 -0
  1021. maxframe/tensor/random/weibull.py +138 -0
  1022. maxframe/tensor/random/zipf.py +120 -0
  1023. maxframe/tensor/rechunk/__init__.py +26 -0
  1024. maxframe/tensor/rechunk/rechunk.py +43 -0
  1025. maxframe/tensor/reduction/__init__.py +64 -0
  1026. maxframe/tensor/reduction/all.py +101 -0
  1027. maxframe/tensor/reduction/allclose.py +86 -0
  1028. maxframe/tensor/reduction/any.py +103 -0
  1029. maxframe/tensor/reduction/argmax.py +101 -0
  1030. maxframe/tensor/reduction/argmin.py +101 -0
  1031. maxframe/tensor/reduction/array_equal.py +63 -0
  1032. maxframe/tensor/reduction/core.py +166 -0
  1033. maxframe/tensor/reduction/count_nonzero.py +80 -0
  1034. maxframe/tensor/reduction/cumprod.py +95 -0
  1035. maxframe/tensor/reduction/cumsum.py +99 -0
  1036. maxframe/tensor/reduction/max.py +118 -0
  1037. maxframe/tensor/reduction/mean.py +122 -0
  1038. maxframe/tensor/reduction/min.py +118 -0
  1039. maxframe/tensor/reduction/nanargmax.py +80 -0
  1040. maxframe/tensor/reduction/nanargmin.py +74 -0
  1041. maxframe/tensor/reduction/nancumprod.py +89 -0
  1042. maxframe/tensor/reduction/nancumsum.py +92 -0
  1043. maxframe/tensor/reduction/nanmax.py +109 -0
  1044. maxframe/tensor/reduction/nanmean.py +105 -0
  1045. maxframe/tensor/reduction/nanmin.py +109 -0
  1046. maxframe/tensor/reduction/nanprod.py +92 -0
  1047. maxframe/tensor/reduction/nanstd.py +124 -0
  1048. maxframe/tensor/reduction/nansum.py +113 -0
  1049. maxframe/tensor/reduction/nanvar.py +149 -0
  1050. maxframe/tensor/reduction/prod.py +128 -0
  1051. maxframe/tensor/reduction/std.py +132 -0
  1052. maxframe/tensor/reduction/sum.py +123 -0
  1053. maxframe/tensor/reduction/tests/__init__.py +13 -0
  1054. maxframe/tensor/reduction/tests/test_reduction.py +189 -0
  1055. maxframe/tensor/reduction/var.py +176 -0
  1056. maxframe/tensor/reshape/__init__.py +15 -0
  1057. maxframe/tensor/reshape/reshape.py +192 -0
  1058. maxframe/tensor/reshape/tests/__init__.py +13 -0
  1059. maxframe/tensor/reshape/tests/test_reshape.py +35 -0
  1060. maxframe/tensor/sort/__init__.py +18 -0
  1061. maxframe/tensor/sort/argpartition.py +98 -0
  1062. maxframe/tensor/sort/argsort.py +150 -0
  1063. maxframe/tensor/sort/partition.py +228 -0
  1064. maxframe/tensor/sort/sort.py +295 -0
  1065. maxframe/tensor/spatial/__init__.py +15 -0
  1066. maxframe/tensor/spatial/distance/__init__.py +17 -0
  1067. maxframe/tensor/spatial/distance/cdist.py +421 -0
  1068. maxframe/tensor/spatial/distance/pdist.py +398 -0
  1069. maxframe/tensor/spatial/distance/squareform.py +153 -0
  1070. maxframe/tensor/special/__init__.py +175 -0
  1071. maxframe/tensor/special/airy.py +55 -0
  1072. maxframe/tensor/special/bessel.py +199 -0
  1073. maxframe/tensor/special/core.py +99 -0
  1074. maxframe/tensor/special/ellip_func_integrals.py +155 -0
  1075. maxframe/tensor/special/ellip_harm.py +55 -0
  1076. maxframe/tensor/special/err_fresnel.py +223 -0
  1077. maxframe/tensor/special/gamma_funcs.py +303 -0
  1078. maxframe/tensor/special/hypergeometric_funcs.py +69 -0
  1079. maxframe/tensor/special/info_theory.py +189 -0
  1080. maxframe/tensor/special/misc.py +163 -0
  1081. maxframe/tensor/special/statistical.py +56 -0
  1082. maxframe/tensor/statistics/__init__.py +24 -0
  1083. maxframe/tensor/statistics/average.py +143 -0
  1084. maxframe/tensor/statistics/bincount.py +133 -0
  1085. maxframe/tensor/statistics/corrcoef.py +77 -0
  1086. maxframe/tensor/statistics/cov.py +222 -0
  1087. maxframe/tensor/statistics/digitize.py +126 -0
  1088. maxframe/tensor/statistics/histogram.py +520 -0
  1089. maxframe/tensor/statistics/median.py +85 -0
  1090. maxframe/tensor/statistics/percentile.py +175 -0
  1091. maxframe/tensor/statistics/ptp.py +89 -0
  1092. maxframe/tensor/statistics/quantile.py +290 -0
  1093. maxframe/tensor/ufunc/__init__.py +24 -0
  1094. maxframe/tensor/ufunc/ufunc.py +198 -0
  1095. maxframe/tensor/utils.py +719 -0
  1096. maxframe/tests/__init__.py +13 -0
  1097. maxframe/tests/test_protocol.py +178 -0
  1098. maxframe/tests/test_udf.py +61 -0
  1099. maxframe/tests/test_utils.py +627 -0
  1100. maxframe/tests/utils.py +245 -0
  1101. maxframe/typing_.py +42 -0
  1102. maxframe/udf.py +435 -0
  1103. maxframe/utils.py +1774 -0
  1104. maxframe-2.4.0rc1.dist-info/METADATA +109 -0
  1105. maxframe-2.4.0rc1.dist-info/RECORD +1122 -0
  1106. maxframe-2.4.0rc1.dist-info/WHEEL +5 -0
  1107. maxframe-2.4.0rc1.dist-info/top_level.txt +3 -0
  1108. maxframe_client/__init__.py +16 -0
  1109. maxframe_client/clients/__init__.py +13 -0
  1110. maxframe_client/clients/framedriver.py +137 -0
  1111. maxframe_client/conftest.py +15 -0
  1112. maxframe_client/fetcher.py +411 -0
  1113. maxframe_client/session/__init__.py +22 -0
  1114. maxframe_client/session/consts.py +39 -0
  1115. maxframe_client/session/graph.py +125 -0
  1116. maxframe_client/session/odps.py +813 -0
  1117. maxframe_client/session/task.py +329 -0
  1118. maxframe_client/session/tests/__init__.py +13 -0
  1119. maxframe_client/session/tests/test_task.py +115 -0
  1120. maxframe_client/tests/__init__.py +13 -0
  1121. maxframe_client/tests/test_fetcher.py +215 -0
  1122. maxframe_client/tests/test_session.py +409 -0
@@ -0,0 +1,1616 @@
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 functools import partialmethod
16
+
17
+ from ...utils import ceildiv
18
+ from .core import (
19
+ cp,
20
+ cps,
21
+ get_array_module,
22
+ get_sparse_module,
23
+ is_cupy,
24
+ issparse,
25
+ naked,
26
+ np,
27
+ )
28
+
29
+
30
+ class SparseNDArray:
31
+ __slots__ = ("__weakref__",)
32
+ __array_priority__ = 21
33
+
34
+ def __new__(cls, *args, **kwargs):
35
+ shape = kwargs.get("shape", None)
36
+ if shape is not None and len(shape) == 1:
37
+ from .vector import SparseVector
38
+
39
+ return object.__new__(SparseVector)
40
+ if len(args) == 1 and issparse(args[0]) and args[0].ndim == 2:
41
+ from .matrix import SparseMatrix
42
+
43
+ return object.__new__(SparseMatrix)
44
+
45
+ else:
46
+ if cls is not SparseNDArray:
47
+ return object.__new__(cls)
48
+ else:
49
+ raise ValueError(
50
+ f"The construct params of {cls.__name__} are invalid: "
51
+ f"args={args}, kwargs={kwargs}"
52
+ )
53
+
54
+ @property
55
+ def raw(self):
56
+ raise NotImplementedError
57
+
58
+
59
+ def call_sparse(method, *args, **kwargs):
60
+ new_args = []
61
+ make_dense = False
62
+ matrix = None
63
+ for arg in args:
64
+ if hasattr(arg, "spmatrix"):
65
+ # todo add support for multiple sparse arrays
66
+ if make_dense or matrix is not None:
67
+ make_dense = True
68
+ matrix = arg
69
+ new_args.append(matrix.spmatrix.data)
70
+ else:
71
+ if isinstance(arg, np.ndarray):
72
+ make_dense = True
73
+ new_args.append(arg)
74
+
75
+ spmatrix = matrix.spmatrix
76
+ if make_dense:
77
+ new_args = [arg.toarray() if hasattr(arg, "spmatrix") else arg for arg in args]
78
+
79
+ xp = get_array_module(spmatrix)
80
+ try:
81
+ new_data = getattr(xp, method)(*new_args, **kwargs)
82
+ except AttributeError:
83
+ if xp is np:
84
+ from scipy import special
85
+ else:
86
+ from cupyx.scipy import special
87
+ new_data = getattr(special, method)(*new_args, **kwargs)
88
+
89
+ if not make_dense:
90
+ new_spmatrix = get_sparse_module(spmatrix).csr_matrix(
91
+ (new_data, spmatrix.indices, spmatrix.indptr), spmatrix.shape
92
+ )
93
+ else:
94
+ new_spmatrix = get_sparse_module(spmatrix).csr_matrix(new_data)
95
+ return SparseNDArray(new_spmatrix, shape=matrix.shape)
96
+
97
+
98
+ class SparseArray(SparseNDArray):
99
+ __slots__ = ("spmatrix",)
100
+
101
+ @property
102
+ def ndim(self):
103
+ return len(self.shape)
104
+
105
+ def tocsr(self):
106
+ return self
107
+
108
+ def toarray(self):
109
+ if self.shape != self.spmatrix.shape:
110
+ return self.spmatrix.toarray().reshape(self.shape)
111
+ else:
112
+ return self.spmatrix.toarray()
113
+
114
+ def todense(self):
115
+ return self.toarray()
116
+
117
+ def ascupy(self):
118
+ is_cp = get_array_module(self.spmatrix) is cp
119
+ if is_cp:
120
+ return self
121
+ mat_tuple = (
122
+ cp.asarray(self.data),
123
+ cp.asarray(self.indices),
124
+ cp.asarray(self.indptr),
125
+ )
126
+ return SparseNDArray(
127
+ cps.csr_matrix(mat_tuple, shape=self.spmatrix.shape), shape=self.shape
128
+ )
129
+
130
+ def asscipy(self):
131
+ is_cp = get_array_module(self.spmatrix) is cp
132
+ if not is_cp:
133
+ return self
134
+ return SparseNDArray(self.spmatrix.get(), shape=self.shape)
135
+
136
+ def __array__(self, dtype=None):
137
+ x = self.toarray()
138
+ if dtype and x.dtype != dtype:
139
+ return x.astype(dtype)
140
+ return x
141
+
142
+ @property
143
+ def nbytes(self):
144
+ return (
145
+ self.spmatrix.data.nbytes
146
+ + self.spmatrix.indptr.nbytes
147
+ + self.spmatrix.indices.nbytes
148
+ )
149
+
150
+ @property
151
+ def raw(self):
152
+ return self.spmatrix
153
+
154
+ @property
155
+ def data(self):
156
+ return self.spmatrix.data
157
+
158
+ @property
159
+ def indptr(self):
160
+ return self.spmatrix.indptr
161
+
162
+ @property
163
+ def indices(self):
164
+ return self.spmatrix.indices
165
+
166
+ @property
167
+ def nnz(self):
168
+ return self.spmatrix.nnz
169
+
170
+ @property
171
+ def shape(self):
172
+ raise self.spmatrix.shape
173
+
174
+ @property
175
+ def dtype(self):
176
+ return self.spmatrix.dtype
177
+
178
+ def copy(self):
179
+ return SparseNDArray(self.spmatrix.copy(), shape=self.shape)
180
+
181
+ @property
182
+ def real(self):
183
+ xps = get_sparse_module(self.spmatrix)
184
+ return SparseNDArray(
185
+ xps.csr_matrix(
186
+ (self.spmatrix.data.real, self.spmatrix.indices, self.spmatrix.indptr),
187
+ self.spmatrix.shape,
188
+ ),
189
+ shape=self.shape,
190
+ )
191
+
192
+ @real.setter
193
+ def real(self, r):
194
+ xps = get_sparse_module(self.spmatrix)
195
+ x = self.spmatrix.toarray()
196
+ if issparse(r):
197
+ r = r.toarray()
198
+ x.real = r
199
+ self.spmatrix = xps.csr_matrix(x)
200
+
201
+ @property
202
+ def imag(self):
203
+ xps = get_sparse_module(self.spmatrix)
204
+ return SparseNDArray(
205
+ xps.csr_matrix(
206
+ (self.spmatrix.data.imag, self.spmatrix.indices, self.spmatrix.indptr),
207
+ self.spmatrix.shape,
208
+ ),
209
+ shape=self.shape,
210
+ )
211
+
212
+ @imag.setter
213
+ def imag(self, imag):
214
+ xps = get_sparse_module(self.spmatrix)
215
+ x = self.spmatrix.toarray()
216
+ if issparse(imag):
217
+ imag = imag.toarray()
218
+ x.imag = imag
219
+ self.spmatrix = xps.csr_matrix(x)
220
+
221
+ def __getattr__(self, attr):
222
+ is_cp = get_array_module(self.spmatrix) is cp
223
+ if attr == "device" and is_cp:
224
+ try:
225
+ return self.spmatrix.device
226
+ except NotImplementedError:
227
+ return cp.cuda.Device(0)
228
+ if attr == "get" and is_cp:
229
+ return lambda: SparseNDArray(self.spmatrix.get(), shape=self.shape)
230
+
231
+ return super().__getattribute__(attr)
232
+
233
+ def __getstate__(self):
234
+ return self.spmatrix
235
+
236
+ def __setstate__(self, state):
237
+ self.spmatrix = state
238
+
239
+ def astype(self, dtype, **_):
240
+ dtype = np.dtype(dtype)
241
+ if self.dtype == dtype:
242
+ return self
243
+ return SparseNDArray(self.spmatrix.astype(dtype), shape=self.shape)
244
+
245
+ def transpose(self, axes=None):
246
+ raise NotImplementedError
247
+
248
+ def swapaxes(self, axis1, axis2):
249
+ if axis1 == 0 and axis2 == 1:
250
+ return self
251
+
252
+ assert axis1 == 1 and axis2 == 0
253
+ return self.transpose()
254
+
255
+ def reshape(self, shape, **_):
256
+ sp_shape = shape if len(shape) == 2 else (1, shape[0])
257
+ spmatrix = self.spmatrix.tolil().reshape(sp_shape)
258
+ return SparseNDArray(spmatrix, shape=shape)
259
+
260
+ def broadcast_to(self, shape):
261
+ # TODO(jisheng): implement broadcast_to
262
+ raise NotImplementedError
263
+
264
+ def squeeze(self, axis=None):
265
+ # TODO(jisheng): implement squeeze
266
+ raise NotImplementedError
267
+
268
+ @property
269
+ def T(self):
270
+ raise NotImplementedError
271
+
272
+ # ---------------- arithmetic ----------------------
273
+
274
+ def __add__(self, other):
275
+ try:
276
+ naked_other = naked(other)
277
+ except TypeError:
278
+ return NotImplemented
279
+ other_xp = get_array_module(naked_other)
280
+ if other_xp.isscalar(naked_other):
281
+ return other_xp.add(self.toarray(), naked_other)
282
+ if issparse(naked_other):
283
+ x = self.spmatrix + naked_other
284
+ else:
285
+ x = self.toarray() + naked_other
286
+ if issparse(x):
287
+ return SparseNDArray(x, shape=self.shape)
288
+ return get_array_module(x).asarray(x)
289
+
290
+ def __radd__(self, other):
291
+ try:
292
+ naked_other = naked(other)
293
+ except TypeError:
294
+ return NotImplemented
295
+ other_xp = get_array_module(naked_other)
296
+ if other_xp.isscalar(naked_other):
297
+ return other_xp.add(naked_other, self.toarray())
298
+ if issparse(naked_other):
299
+ x = self.spmatrix + naked_other
300
+ else:
301
+ x = self.toarray() + naked_other
302
+ if issparse(x):
303
+ return SparseNDArray(x, shape=self.shape)
304
+ return get_array_module(x).asarray(x)
305
+
306
+ def __sub__(self, other):
307
+ try:
308
+ naked_other = naked(other)
309
+ except TypeError:
310
+ return NotImplemented
311
+ other_xp = get_array_module(naked_other)
312
+ if other_xp.isscalar(naked_other):
313
+ return other_xp.subtract(self.toarray(), naked_other)
314
+ if issparse(naked_other):
315
+ x = self.spmatrix - naked_other
316
+ else:
317
+ x = self.toarray() - naked_other
318
+ if issparse(x):
319
+ return SparseNDArray(x, shape=self.shape)
320
+ return get_array_module(x).asarray(x)
321
+
322
+ def __rsub__(self, other):
323
+ try:
324
+ naked_other = naked(other)
325
+ except TypeError:
326
+ return NotImplemented
327
+ other_xp = get_array_module(naked_other)
328
+ if other_xp.isscalar(naked_other):
329
+ return other_xp.subtract(naked_other, self.toarray())
330
+ if issparse(naked_other):
331
+ x = naked_other - self.spmatrix
332
+ else:
333
+ x = naked_other - self.toarray()
334
+ if issparse(x):
335
+ return SparseNDArray(x, shape=self.shape)
336
+ return get_array_module(x).asarray(x)
337
+
338
+ def __mul__(self, other):
339
+ try:
340
+ naked_other = naked(other)
341
+ except TypeError:
342
+ return NotImplemented
343
+ if is_cupy(self.spmatrix):
344
+ if not cp.isscalar(naked_other):
345
+ # TODO(jisheng): cupy does not implement multiply method
346
+ is_other_sparse = issparse(naked_other)
347
+ if (
348
+ is_other_sparse
349
+ and self.spmatrix.nnz == naked_other.nnz
350
+ and cp.all(self.spmatrix.indptr == naked_other.indptr)
351
+ and cp.all(self.spmatrix.indices == naked_other.indices)
352
+ ):
353
+ x = cps.csr_matrix(
354
+ (
355
+ self.spmatrix.data * naked_other.data,
356
+ self.spmatrix.indices,
357
+ self.spmatrix.indptr,
358
+ ),
359
+ self.spmatrix.shape,
360
+ )
361
+ else:
362
+ if is_other_sparse:
363
+ naked_other = other.toarray()
364
+ dense = self.spmatrix.toarray()
365
+ res = cp.multiply(dense, naked_other, out=dense)
366
+ x = cps.csr_matrix(res)
367
+ else:
368
+ x = self.spmatrix * naked_other
369
+ else:
370
+ x = self.spmatrix.multiply(naked_other)
371
+ if issparse(x):
372
+ return SparseNDArray(x, shape=self.shape)
373
+ return get_array_module(x).asarray(x)
374
+
375
+ def __rmul__(self, other):
376
+ try:
377
+ naked_other = naked(other)
378
+ except TypeError:
379
+ return NotImplemented
380
+ if is_cupy(self.spmatrix):
381
+ if not cp.isscalar(naked_other):
382
+ # TODO(jisheng): cupy does not implement multiply method
383
+ is_other_sparse = issparse(naked_other)
384
+ if (
385
+ is_other_sparse
386
+ and self.spmatrix.nnz == naked_other.nnz
387
+ and cp.all(self.spmatrix.indptr == naked_other.indptr)
388
+ and cp.all(self.spmatrix.indices == naked_other.indices)
389
+ ):
390
+ x = cps.csr_matrix(
391
+ (
392
+ naked_other.data * self.spmatrix.data,
393
+ self.spmatrix.indices,
394
+ self.spmatrix.indptr,
395
+ ),
396
+ self.spmatrix.shape,
397
+ )
398
+ else:
399
+ if is_other_sparse:
400
+ naked_other = other.toarray()
401
+ dense = self.spmatrix.toarray()
402
+ res = cp.multiply(naked_other, dense, out=dense)
403
+ x = cps.csr_matrix(res)
404
+ else:
405
+ x = naked_other * self.spmatrix
406
+ else:
407
+ x = self.spmatrix.multiply(naked_other)
408
+ if issparse(x):
409
+ return SparseNDArray(x, shape=self.shape)
410
+ return get_array_module(x).asarray(x)
411
+
412
+ def __matmul__(self, other):
413
+ from . import matmul
414
+
415
+ return matmul(self, other)
416
+
417
+ def __rmatmul__(self, other):
418
+ from . import matmul
419
+
420
+ return matmul(other, self)
421
+
422
+ def __div__(self, other):
423
+ return self.__truediv__(other)
424
+
425
+ def __rdiv__(self, other):
426
+ return self.__rtruediv__(other)
427
+
428
+ def __truediv__(self, other):
429
+ try:
430
+ naked_other = naked(other)
431
+ except TypeError:
432
+ return NotImplemented
433
+ x = self.spmatrix / naked_other
434
+ if issparse(x):
435
+ return SparseNDArray(x, shape=self.shape)
436
+ return get_array_module(x).asarray(x)
437
+
438
+ def __rtruediv__(self, other):
439
+ try:
440
+ naked_other = naked(other)
441
+ except TypeError:
442
+ return NotImplemented
443
+ try:
444
+ x = naked_other / self.spmatrix
445
+ except TypeError:
446
+ x = naked_other / self.spmatrix.toarray()
447
+ if issparse(x):
448
+ return SparseNDArray(x, shape=self.shape)
449
+ return get_array_module(x).asarray(x)
450
+
451
+ def __floordiv__(self, other):
452
+ try:
453
+ naked_other = naked(other)
454
+ except TypeError:
455
+ return NotImplemented
456
+ other_xp = get_array_module(naked_other)
457
+ if other_xp.isscalar(naked_other):
458
+ return call_sparse("floor_divide", self, naked_other)
459
+ else:
460
+ if issparse(naked_other):
461
+ naked_other = other.toarray()
462
+ x = get_sparse_module(self.spmatrix).csr_matrix(
463
+ self.toarray() // naked_other
464
+ )
465
+ else:
466
+ x = self.toarray() // naked_other
467
+ if issparse(x):
468
+ return SparseNDArray(x, shape=self.shape)
469
+ return get_array_module(x).asarray(x)
470
+
471
+ def __rfloordiv__(self, other):
472
+ try:
473
+ naked_other = naked(other)
474
+ except TypeError:
475
+ return NotImplemented
476
+ other_xp = get_array_module(naked_other)
477
+ if other_xp.isscalar(naked_other):
478
+ return call_sparse("floor_divide", naked_other, self)
479
+ else:
480
+ if issparse(naked_other):
481
+ naked_other = other.toarray()
482
+ x = get_sparse_module(self.spmatrix).csr_matrix(
483
+ naked_other // self.toarray()
484
+ )
485
+ else:
486
+ x = naked_other // self.toarray()
487
+ if issparse(x):
488
+ return SparseNDArray(x, shape=self.shape)
489
+ return get_array_module(x).asarray(x)
490
+
491
+ def __pow__(self, other, modulo=None):
492
+ if modulo is not None:
493
+ return NotImplemented
494
+
495
+ try:
496
+ naked_other = naked(other)
497
+ except TypeError:
498
+ return NotImplemented
499
+ if get_array_module(naked_other).isscalar(naked_other):
500
+ try:
501
+ x = self.spmatrix.power(naked_other)
502
+ except ValueError as e: # pragma: no cover
503
+ # https://github.com/scipy/scipy/issues/8678
504
+ assert "WRITEBACKIFCOPY" in e.args[0]
505
+ self.spmatrix = self.spmatrix.copy()
506
+ x = self.spmatrix.power(naked_other)
507
+ else:
508
+ if issparse(naked_other):
509
+ naked_other = other.toarray()
510
+ x = self.toarray() ** naked_other
511
+ if issparse(x):
512
+ return SparseNDArray(x, shape=self.shape)
513
+ return get_array_module(x).asarray(x)
514
+
515
+ def __rpow__(self, other):
516
+ try:
517
+ naked_other = naked(other)
518
+ except TypeError:
519
+ return NotImplemented
520
+ if issparse(naked_other):
521
+ naked_other = other.toarray()
522
+ x = naked_other ** self.toarray()
523
+ return get_array_module(x).asarray(x)
524
+
525
+ def float_power(self, other):
526
+ ret = self.__pow__(other)
527
+ ret = naked(ret).astype(float)
528
+ if issparse(ret):
529
+ return SparseNDArray(ret, shape=self.shape)
530
+ return ret
531
+
532
+ def __mod__(self, other):
533
+ try:
534
+ naked_other = naked(other)
535
+ except TypeError:
536
+ return NotImplemented
537
+ if get_array_module(naked_other).isscalar(naked_other):
538
+ data = self.spmatrix.data % naked_other
539
+ x = get_sparse_module(self.spmatrix).csr_matrix(
540
+ (data, self.spmatrix.indices, self.spmatrix.indptr), self.spmatrix.shape
541
+ )
542
+ else:
543
+ if issparse(naked_other):
544
+ naked_other = other.toarray()
545
+ x = get_sparse_module(self.spmatrix).csr_matrix(
546
+ self.toarray() % naked_other
547
+ )
548
+ if issparse(x):
549
+ return SparseNDArray(x, shape=self.shape)
550
+ return get_array_module(x).asarray(x)
551
+
552
+ def __rmod__(self, other):
553
+ try:
554
+ naked_other = naked(other)
555
+ except TypeError:
556
+ return NotImplemented
557
+ is_sparse = issparse(naked_other)
558
+ if issparse(naked_other):
559
+ naked_other = other.toarray()
560
+ if get_array_module(naked_other).isscalar(naked_other):
561
+ data = naked_other % self.spmatrix.data
562
+ x = get_sparse_module(self.spmatrix).csr_matrix(
563
+ (data, self.spmatrix.indices, self.spmatrix.indptr), self.spmatrix.shape
564
+ )
565
+ else:
566
+ x = naked_other % self.toarray()
567
+ if is_sparse:
568
+ x = get_sparse_module(self.spmatrix).csr_matrix(x)
569
+ if issparse(x):
570
+ return SparseNDArray(x, shape=self.shape)
571
+ return get_array_module(x).asarray(x)
572
+
573
+ def fmod(self, other):
574
+ try:
575
+ naked_other = naked(other)
576
+ except TypeError:
577
+ return NotImplemented
578
+
579
+ xp = get_array_module(self.spmatrix)
580
+ if get_array_module(naked_other).isscalar(naked_other):
581
+ return call_sparse("fmod", self, naked_other)
582
+ else:
583
+ if issparse(naked_other):
584
+ naked_other = other.toarray()
585
+ x = get_sparse_module(self.spmatrix).csr_matrix(
586
+ xp.fmod(self.toarray(), naked_other)
587
+ )
588
+ if issparse(x):
589
+ return SparseNDArray(x, shape=self.shape)
590
+ return get_array_module(x).asarray(x)
591
+
592
+ def logaddexp(self, other):
593
+ try:
594
+ naked_other = naked(other)
595
+ except TypeError:
596
+ return NotImplemented
597
+
598
+ xp = get_array_module(self.spmatrix)
599
+ if get_array_module(naked_other).isscalar(naked_other):
600
+ return call_sparse("logaddexp", self, naked_other)
601
+ if issparse(naked_other):
602
+ naked_other = other.toarray()
603
+ return xp.logaddexp(self.toarray(), naked_other)
604
+
605
+ def logaddexp2(self, other):
606
+ try:
607
+ naked_other = naked(other)
608
+ except TypeError:
609
+ return NotImplemented
610
+
611
+ xp = get_array_module(self.spmatrix)
612
+ if get_array_module(naked_other).isscalar(naked_other):
613
+ return call_sparse("logaddexp2", self, naked_other)
614
+ if issparse(naked_other):
615
+ naked_other = other.toarray()
616
+ return xp.logaddexp2(self.toarray(), naked_other)
617
+
618
+ def __neg__(self):
619
+ return SparseNDArray(-self.spmatrix, shape=self.shape)
620
+
621
+ def __pos__(self):
622
+ return SparseNDArray(self.spmatrix.copy(), shape=self.shape)
623
+
624
+ def __abs__(self):
625
+ return SparseNDArray(abs(self.spmatrix), shape=self.shape)
626
+
627
+ def fabs(self):
628
+ xp = get_array_module(self.spmatrix)
629
+ return SparseNDArray(
630
+ get_sparse_module(self.spmatrix).csr_matrix(
631
+ xp.abs(self.spmatrix), dtype="f8"
632
+ ),
633
+ shape=self.shape,
634
+ )
635
+
636
+ def rint(self):
637
+ return SparseNDArray(self.spmatrix.rint(), shape=self.shape)
638
+
639
+ def sign(self):
640
+ return SparseNDArray(self.spmatrix.sign(), shape=self.shape)
641
+
642
+ def conj(self):
643
+ return SparseNDArray(self.spmatrix.conj(), shape=self.shape)
644
+
645
+ def exp(self):
646
+ xp = get_array_module(self.spmatrix)
647
+ return xp.exp(self.toarray())
648
+
649
+ def exp2(self):
650
+ xp = get_array_module(self.spmatrix)
651
+ return xp.exp2(self.toarray())
652
+
653
+ def log(self):
654
+ xp = get_array_module(self.spmatrix)
655
+ return xp.log(self.toarray())
656
+
657
+ def log2(self):
658
+ xp = get_array_module(self.spmatrix)
659
+ return xp.log2(self.toarray())
660
+
661
+ def log10(self):
662
+ xp = get_array_module(self.spmatrix)
663
+ return xp.log10(self.toarray())
664
+
665
+ def expm1(self):
666
+ return SparseNDArray(self.spmatrix.expm1(), shape=self.shape)
667
+
668
+ def log1p(self):
669
+ return SparseNDArray(self.spmatrix.log1p(), shape=self.shape)
670
+
671
+ def sqrt(self):
672
+ return SparseNDArray(self.spmatrix.sqrt(), shape=self.shape)
673
+
674
+ def square(self):
675
+ return call_sparse("square", self)
676
+
677
+ def cbrt(self):
678
+ return call_sparse("cbrt", self)
679
+
680
+ def reciprocal(self):
681
+ xp = get_array_module(self.spmatrix)
682
+ return xp.reciprocal(self.toarray())
683
+
684
+ def _scipy_unary(self, func_name):
685
+ spmatrix = self.spmatrix
686
+ xp = get_array_module(spmatrix)
687
+ if xp is np:
688
+ from scipy import special
689
+ else:
690
+ from cupyx.scipy import special
691
+
692
+ new_data = getattr(special, func_name)(spmatrix.data)
693
+ new_spmatrix = get_sparse_module(spmatrix).csr_matrix(
694
+ (new_data, spmatrix.indices, spmatrix.indptr), spmatrix.shape
695
+ )
696
+ return SparseNDArray(new_spmatrix, shape=self.shape)
697
+
698
+ def _scipy_binary(self, func_name, other):
699
+ try:
700
+ naked_other = naked(other)
701
+ except TypeError: # pragma: no cover
702
+ return NotImplemented
703
+
704
+ xp = get_array_module(self.spmatrix)
705
+
706
+ if xp is np:
707
+ from scipy import special
708
+ else: # pragma: no cover
709
+ from cupyx.scipy import special
710
+
711
+ func = getattr(special, func_name)
712
+
713
+ if get_array_module(naked_other).isscalar(naked_other): # pragma: no cover
714
+ return call_sparse(func, self, naked_other)
715
+ else:
716
+ if issparse(naked_other): # pragma: no cover
717
+ naked_other = other.toarray()
718
+ x = get_sparse_module(self.spmatrix).csr_matrix(
719
+ func(self.toarray(), naked_other)
720
+ )
721
+ if issparse(x):
722
+ return SparseNDArray(x, shape=self.shape)
723
+ return get_array_module(x).asarray(x)
724
+
725
+ gamma = partialmethod(_scipy_unary, "gamma")
726
+ gammaln = partialmethod(_scipy_unary, "gammaln")
727
+ loggamma = partialmethod(_scipy_unary, "loggamma")
728
+ gammasgn = partialmethod(_scipy_unary, "gammasgn")
729
+ gammainc = partialmethod(_scipy_binary, "gammainc")
730
+ gammaincinv = partialmethod(_scipy_binary, "gammaincinv")
731
+ gammaincc = partialmethod(_scipy_binary, "gammaincc")
732
+ gammainccinv = partialmethod(_scipy_binary, "gammainccinv")
733
+ beta = partialmethod(_scipy_binary, "beta")
734
+ betaln = partialmethod(_scipy_binary, "betaln")
735
+ psi = partialmethod(_scipy_unary, "psi")
736
+ rgamma = partialmethod(_scipy_unary, "rgamma")
737
+ polygamma = partialmethod(_scipy_binary, "polygamma")
738
+ multigammaln = partialmethod(_scipy_binary, "multigammaln")
739
+ digamma = partialmethod(_scipy_unary, "digamma")
740
+ poch = partialmethod(_scipy_binary, "poch")
741
+
742
+ erf = partialmethod(_scipy_unary, "erf")
743
+ erfc = partialmethod(_scipy_unary, "erfc")
744
+ erfcx = partialmethod(_scipy_unary, "erfcx")
745
+ erfi = partialmethod(_scipy_unary, "erfi")
746
+ erfinv = partialmethod(_scipy_unary, "erfinv")
747
+ erfcinv = partialmethod(_scipy_unary, "erfcinv")
748
+ wofz = partialmethod(_scipy_unary, "wofz")
749
+ dawsn = partialmethod(_scipy_unary, "dawsn")
750
+ entr = partialmethod(_scipy_unary, "entr")
751
+
752
+ ellipk = partialmethod(_scipy_unary, "ellipk")
753
+ ellipkm1 = partialmethod(_scipy_unary, "ellipkm1")
754
+ ellipkinc = partialmethod(_scipy_binary, "ellipkinc")
755
+ ellipe = partialmethod(_scipy_unary, "ellipe")
756
+ ellipeinc = partialmethod(_scipy_binary, "ellipeinc")
757
+ elliprc = partialmethod(_scipy_binary, "elliprc")
758
+
759
+ rel_entr = partialmethod(_scipy_binary, "rel_entr")
760
+ kl_div = partialmethod(_scipy_binary, "kl_div")
761
+ xlogy = partialmethod(_scipy_binary, "xlogy")
762
+
763
+ jv = partialmethod(_scipy_binary, "jv")
764
+ jve = partialmethod(_scipy_binary, "jve")
765
+ yn = partialmethod(_scipy_binary, "yn")
766
+ yv = partialmethod(_scipy_binary, "yv")
767
+ yve = partialmethod(_scipy_binary, "yve")
768
+ kn = partialmethod(_scipy_binary, "kn")
769
+ kv = partialmethod(_scipy_binary, "kv")
770
+ kve = partialmethod(_scipy_binary, "kve")
771
+ iv = partialmethod(_scipy_binary, "iv")
772
+ ive = partialmethod(_scipy_binary, "ive")
773
+ hankel1 = partialmethod(_scipy_binary, "hankel1")
774
+ hankel1e = partialmethod(_scipy_binary, "hankel1e")
775
+ hankel2 = partialmethod(_scipy_binary, "hankel2")
776
+ hankel2e = partialmethod(_scipy_binary, "hankel2e")
777
+
778
+ hyp0f1 = partialmethod(_scipy_binary, "hyp0f1")
779
+
780
+ airy = partialmethod(_scipy_unary, "airy")
781
+ airye = partialmethod(_scipy_unary, "airye")
782
+ itairy = partialmethod(_scipy_unary, "itairy")
783
+
784
+ def __eq__(self, other):
785
+ try:
786
+ naked_other = naked(other)
787
+ except TypeError:
788
+ return NotImplemented
789
+
790
+ if get_array_module(naked_other).isscalar(naked_other):
791
+ return call_sparse("equal", self, naked_other)
792
+ if is_cupy(self.spmatrix):
793
+ return NotImplemented
794
+ else:
795
+ if issparse(naked_other):
796
+ x = self.spmatrix == naked_other
797
+ else:
798
+ x = self.toarray() == other
799
+ if issparse(x):
800
+ return SparseNDArray(x, shape=self.shape)
801
+ return get_array_module(x).asarray(x)
802
+
803
+ def __ne__(self, other):
804
+ try:
805
+ naked_other = naked(other)
806
+ except TypeError:
807
+ return NotImplemented
808
+
809
+ if get_array_module(naked_other).isscalar(naked_other):
810
+ return call_sparse("not_equal", self, naked_other)
811
+ if is_cupy(self.spmatrix):
812
+ return NotImplemented
813
+ else:
814
+ if issparse(naked_other):
815
+ x = self.spmatrix != naked_other
816
+ else:
817
+ x = self.toarray() != other
818
+ if issparse(x):
819
+ return SparseNDArray(x, shape=self.shape)
820
+ return get_array_module(x).asarray(x)
821
+
822
+ def __lt__(self, other):
823
+ try:
824
+ naked_other = naked(other)
825
+ except TypeError:
826
+ return NotImplemented
827
+
828
+ if get_array_module(naked_other).isscalar(naked_other):
829
+ return call_sparse("less", self, naked_other)
830
+ if is_cupy(self.spmatrix):
831
+ return NotImplemented
832
+ else:
833
+ if issparse(naked_other):
834
+ x = self.spmatrix < naked_other
835
+ else:
836
+ x = self.toarray() < other
837
+ if issparse(x):
838
+ return SparseNDArray(x, shape=self.shape)
839
+ return get_array_module(x).asarray(x)
840
+
841
+ def __le__(self, other):
842
+ try:
843
+ naked_other = naked(other)
844
+ except TypeError:
845
+ return NotImplemented
846
+
847
+ if get_array_module(naked_other).isscalar(naked_other):
848
+ return call_sparse("less_equal", self, naked_other)
849
+ if is_cupy(self.spmatrix):
850
+ return NotImplemented
851
+ else:
852
+ if issparse(naked_other):
853
+ x = self.spmatrix <= naked_other
854
+ else:
855
+ x = self.toarray() <= other
856
+ if issparse(x):
857
+ return SparseNDArray(x, shape=self.shape)
858
+ return get_array_module(x).asarray(x)
859
+
860
+ def __gt__(self, other):
861
+ try:
862
+ naked_other = naked(other)
863
+ except TypeError:
864
+ return NotImplemented
865
+
866
+ if get_array_module(naked_other).isscalar(naked_other):
867
+ return call_sparse("greater", self, naked_other)
868
+ if is_cupy(self.spmatrix):
869
+ return NotImplemented
870
+ else:
871
+ if issparse(naked_other):
872
+ x = self.spmatrix > naked_other
873
+ else:
874
+ x = self.toarray() > other
875
+ if issparse(x):
876
+ return SparseNDArray(x, shape=self.shape)
877
+ return get_array_module(x).asarray(x)
878
+
879
+ def __ge__(self, other):
880
+ try:
881
+ naked_other = naked(other)
882
+ except TypeError:
883
+ return NotImplemented
884
+
885
+ if get_array_module(naked_other).isscalar(naked_other):
886
+ return call_sparse("greater_equal", self, naked_other)
887
+ if is_cupy(self.spmatrix):
888
+ return NotImplemented
889
+ else:
890
+ if issparse(naked_other):
891
+ x = self.spmatrix >= naked_other
892
+ else:
893
+ x = self.toarray() >= other
894
+ if issparse(x):
895
+ return SparseNDArray(x, shape=self.shape)
896
+ return get_array_module(x).asarray(x)
897
+
898
+ def logical_and(self, other):
899
+ try:
900
+ naked_other = naked(other)
901
+ except TypeError:
902
+ return NotImplemented
903
+
904
+ if is_cupy(self.spmatrix):
905
+ return NotImplemented
906
+ else:
907
+ other_xp = get_array_module(naked_other)
908
+ if other_xp.isscalar(naked_other):
909
+ naked_other = other_xp.array(naked_other).astype(bool)
910
+ else:
911
+ naked_other = naked_other.astype(bool)
912
+ x = self.spmatrix.astype(bool).multiply(naked_other)
913
+ if issparse(x):
914
+ return SparseNDArray(x, shape=self.shape)
915
+ return get_array_module(x).asarray(x)
916
+
917
+ def logical_or(self, other):
918
+ try:
919
+ naked_other = naked(other)
920
+ except TypeError:
921
+ return NotImplemented
922
+
923
+ if is_cupy(self.spmatrix):
924
+ return NotImplemented
925
+ else:
926
+ other_xp = get_array_module(naked_other)
927
+ if other_xp.isscalar(naked_other):
928
+ if naked_other != 0:
929
+ x = np.logical_and(self.toarray(), naked_other)
930
+ else:
931
+ x = self.spmatrix.astype(bool)
932
+ else:
933
+ naked_other = naked_other.astype(bool)
934
+ x = (self.spmatrix.astype(bool) + naked_other).astype(bool)
935
+ if issparse(x):
936
+ return SparseNDArray(x, shape=self.shape)
937
+ return get_array_module(x).asarray(x)
938
+
939
+ def logical_xor(self, other):
940
+ try:
941
+ naked_other = naked(other)
942
+ except TypeError:
943
+ return NotImplemented
944
+
945
+ if is_cupy(self.spmatrix):
946
+ return NotImplemented
947
+ else:
948
+ other_xp = get_array_module(naked_other)
949
+ if other_xp.isscalar(naked_other):
950
+ naked_other = other_xp.array(naked_other).astype(bool)
951
+ else:
952
+ naked_other = naked_other.astype(bool)
953
+ x = self.spmatrix.astype(bool) != naked_other
954
+ if issparse(x):
955
+ return SparseNDArray(x, shape=self.shape)
956
+ return get_array_module(x).asarray(x)
957
+
958
+ def logical_not(self):
959
+ xp = get_array_module(self.spmatrix)
960
+ return xp.logical_not(self.toarray())
961
+
962
+ @staticmethod
963
+ def _bitwise(this, other, method_name):
964
+ try:
965
+ naked_this = naked(this)
966
+ except TypeError:
967
+ return NotImplemented
968
+ try:
969
+ naked_other = naked(other)
970
+ except TypeError:
971
+ return NotImplemented
972
+
973
+ if not issparse(naked_this):
974
+ return SparseArray._bitwise(naked_other, naked_this, method_name)
975
+
976
+ if issparse(naked_other):
977
+ naked_other = other.toarray()
978
+
979
+ xp = get_array_module(naked_this)
980
+ xps = get_sparse_module(naked_this)
981
+ return SparseNDArray(
982
+ xps.csr_matrix(getattr(xp, method_name)(this.toarray(), naked_other)),
983
+ shape=naked_this.shape,
984
+ )
985
+
986
+ def __and__(self, other):
987
+ if get_array_module(other).isscalar(other):
988
+ return call_sparse("bitwise_and", self, other)
989
+ return self._bitwise(self.spmatrix, other, "bitwise_and")
990
+
991
+ def __rand__(self, other):
992
+ if get_array_module(other).isscalar(other):
993
+ return call_sparse("bitwise_and", other, self)
994
+ return self._bitwise(other, self.spmatrix, "bitwise_and")
995
+
996
+ def __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)
1000
+ return self._bitwise(self.spmatrix, other, "bitwise_or")
1001
+
1002
+ def __ror__(self, other):
1003
+ other_xp = get_array_module(other)
1004
+ if other_xp.isscalar(other):
1005
+ return other_xp.bitwise_or(other, self.toarray())
1006
+ return self._bitwise(other, self.spmatrix, "bitwise_or")
1007
+
1008
+ def __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)
1012
+ return self._bitwise(self.spmatrix, other, "bitwise_xor")
1013
+
1014
+ def __rxor__(self, other):
1015
+ other_xp = get_array_module(other)
1016
+ if other_xp.isscalar(other):
1017
+ return other_xp.bitwise_xor(other, self.toarray())
1018
+ return self._bitwise(other, self.spmatrix, "bitwise_xor")
1019
+
1020
+ def isclose(self, other, **kw):
1021
+ try:
1022
+ naked_other = naked(other)
1023
+ except TypeError:
1024
+ return NotImplemented
1025
+
1026
+ xp = get_array_module(naked_other)
1027
+ if issparse(naked_other):
1028
+ naked_other = other.toarray()
1029
+ return xp.isclose(self.toarray(), naked_other, **kw)
1030
+
1031
+ def __invert__(self):
1032
+ xp = get_array_module(self.spmatrix)
1033
+ return xp.invert(self.toarray())
1034
+
1035
+ @staticmethod
1036
+ def _shift(this, other, method_name):
1037
+ try:
1038
+ naked_this = naked(this)
1039
+ except TypeError:
1040
+ return NotImplemented
1041
+ try:
1042
+ naked_other = naked(other)
1043
+ except TypeError:
1044
+ return NotImplemented
1045
+
1046
+ xps = get_sparse_module(naked_this)
1047
+ xp = get_array_module(naked_this)
1048
+
1049
+ if xp.isscalar(naked_this):
1050
+ other_xp = get_array_module(naked_other)
1051
+ data = getattr(other_xp, method_name)(naked_this, naked_other.data)
1052
+ indices, indptr, shape = (
1053
+ naked_other.indices,
1054
+ naked_other.indptr,
1055
+ naked_other.shape,
1056
+ )
1057
+ elif isinstance(naked_this, xp.ndarray):
1058
+ # dense
1059
+ return getattr(xp, method_name)(naked_this, other.toarray())
1060
+ else:
1061
+ tp = (
1062
+ np.int32 if is_cupy(naked_this) else np.bool_
1063
+ ) # cupy.sparse does not support bool
1064
+ mask = xps.csr_matrix(
1065
+ (
1066
+ (naked_this.data > 0).astype(tp),
1067
+ naked_this.indices,
1068
+ naked_this.indptr,
1069
+ ),
1070
+ naked_this.shape,
1071
+ )
1072
+ naked_other = mask.multiply(naked_other)
1073
+ indices, indptr, shape = (
1074
+ naked_this.indices,
1075
+ naked_this.indptr,
1076
+ naked_this.shape,
1077
+ )
1078
+ data = getattr(xp, method_name)(naked_this.data, naked_other.data)
1079
+
1080
+ return SparseNDArray(
1081
+ xps.csr_matrix((data, indices, indptr), shape), shape=shape
1082
+ )
1083
+
1084
+ def __lshift__(self, other):
1085
+ return self._shift(self.spmatrix, other, "left_shift")
1086
+
1087
+ def __rlshift__(self, other):
1088
+ return self._shift(other, self.spmatrix, "left_shift")
1089
+
1090
+ def __rshift__(self, other):
1091
+ return self._shift(self.spmatrix, other, "right_shift")
1092
+
1093
+ def __rrshift__(self, other):
1094
+ return self._shift(other, self.spmatrix, "right_shift")
1095
+
1096
+ def sin(self):
1097
+ return SparseNDArray(self.spmatrix.sin(), shape=self.shape)
1098
+
1099
+ def cos(self):
1100
+ xp = get_array_module(self.spmatrix)
1101
+ return xp.cos(self.toarray())
1102
+
1103
+ def tan(self):
1104
+ return SparseNDArray(self.spmatrix.tan(), shape=self.shape)
1105
+
1106
+ def arcsin(self):
1107
+ return SparseNDArray(self.spmatrix.arcsin(), shape=self.shape)
1108
+
1109
+ def arccos(self):
1110
+ xp = get_array_module(self.spmatrix)
1111
+ return xp.arccos(self.toarray())
1112
+
1113
+ def arctan(self):
1114
+ return SparseNDArray(self.spmatrix.arctan(), shape=self.shape)
1115
+
1116
+ def arctan2(self, other):
1117
+ try:
1118
+ naked_other = naked(other)
1119
+ except TypeError:
1120
+ return NotImplemented
1121
+
1122
+ xp = get_array_module(self.spmatrix)
1123
+ other_xp = get_array_module(naked_other)
1124
+ if other_xp.isscalar(naked_other):
1125
+ return call_sparse("arctan2", self, naked_other)
1126
+ if issparse(naked_other):
1127
+ naked_other = other.toarray()
1128
+ x = xp.arctan2(self.toarray(), naked_other)
1129
+ return SparseNDArray(get_sparse_module(x).csr_matrix(x), shape=self.shape)
1130
+
1131
+ def hypot(self, other):
1132
+ try:
1133
+ naked_other = naked(other)
1134
+ except TypeError:
1135
+ return NotImplemented
1136
+
1137
+ xp = get_array_module(self.spmatrix)
1138
+ other_xp = get_array_module(naked_other)
1139
+ if other_xp.isscalar(naked_other):
1140
+ return call_sparse("hypot", self, naked_other)
1141
+ if issparse(naked_other):
1142
+ naked_other = other.toarray()
1143
+ x = xp.hypot(self.toarray(), naked_other)
1144
+ return SparseNDArray(get_sparse_module(x).csr_matrix(x), shape=self.shape)
1145
+
1146
+ def sinh(self):
1147
+ return SparseNDArray(self.spmatrix.sinh(), shape=self.shape)
1148
+
1149
+ def cosh(self):
1150
+ xp = get_array_module(self.spmatrix)
1151
+ return xp.cosh(self.toarray())
1152
+
1153
+ def tanh(self):
1154
+ return SparseNDArray(self.spmatrix.tanh(), shape=self.shape)
1155
+
1156
+ def arcsinh(self):
1157
+ return SparseNDArray(self.spmatrix.arcsinh(), shape=self.shape)
1158
+
1159
+ def arccosh(self):
1160
+ xp = get_array_module(self.spmatrix)
1161
+ return xp.arccosh(self.toarray())
1162
+
1163
+ def arctanh(self):
1164
+ return SparseNDArray(self.spmatrix.arctanh(), shape=self.shape)
1165
+
1166
+ def around(self, decimals=0):
1167
+ return call_sparse("around", self, decimals=decimals)
1168
+
1169
+ def deg2rad(self):
1170
+ return SparseNDArray(self.spmatrix.deg2rad(), shape=self.shape)
1171
+
1172
+ def rad2deg(self):
1173
+ return SparseNDArray(self.spmatrix.rad2deg(), shape=self.shape)
1174
+
1175
+ def angle(self, deg=0):
1176
+ return call_sparse("angle", self, deg=deg)
1177
+
1178
+ def dot(self, other, sparse=True):
1179
+ raise NotImplementedError
1180
+
1181
+ def concatenate(self, other, axis=0):
1182
+ raise NotImplementedError
1183
+
1184
+ def _reduction(
1185
+ self, method_name, axis=None, dtype=None, keepdims=None, todense=False, **kw
1186
+ ):
1187
+ raise NotImplementedError
1188
+
1189
+ def sum(self, axis=None, dtype=None, keepdims=None):
1190
+ return self._reduction("sum", axis=axis, dtype=dtype, keepdims=keepdims)
1191
+
1192
+ def prod(self, axis=None, dtype=None, keepdims=None):
1193
+ return self._reduction(
1194
+ "sum", axis=axis, dtype=dtype, keepdims=keepdims, todense=True
1195
+ )
1196
+
1197
+ def amax(self, axis=None, dtype=None, keepdims=None):
1198
+ return self._reduction("max", axis=axis, dtype=dtype, keepdims=keepdims)
1199
+
1200
+ def amin(self, axis=None, dtype=None, keepdims=None):
1201
+ return self._reduction("min", axis=axis, dtype=dtype, keepdims=keepdims)
1202
+
1203
+ def all(self, axis=None, dtype=None, keepdims=None):
1204
+ ret = self._reduction(
1205
+ "all", axis=axis, dtype=dtype, keepdims=keepdims, todense=True
1206
+ )
1207
+ if not issparse(ret):
1208
+ if get_array_module(ret).isscalar(ret):
1209
+ return ret
1210
+ xps = get_sparse_module(self.spmatrix)
1211
+ ret = SparseNDArray(xps.csr_matrix(ret))
1212
+ return ret
1213
+ return ret
1214
+
1215
+ def any(self, axis=None, dtype=None, keepdims=None):
1216
+ ret = self._reduction(
1217
+ "any", axis=axis, dtype=dtype, keepdims=keepdims, todense=True
1218
+ )
1219
+ if not issparse(ret):
1220
+ if get_array_module(ret).isscalar(ret):
1221
+ return ret
1222
+ xps = get_sparse_module(self.spmatrix)
1223
+ ret = SparseNDArray(xps.csr_matrix(ret))
1224
+ return ret
1225
+ return ret
1226
+
1227
+ def mean(self, axis=None, dtype=None, keepdims=None):
1228
+ return self._reduction("mean", axis=axis, dtype=dtype, keepdims=keepdims)
1229
+
1230
+ def nansum(self, axis=None, dtype=None, keepdims=None):
1231
+ return self._reduction(
1232
+ "nansum", axis=axis, dtype=dtype, keepdims=keepdims, todense=True
1233
+ )
1234
+
1235
+ def nanprod(self, axis=None, dtype=None, keepdims=None):
1236
+ return self._reduction(
1237
+ "nanprod", axis=axis, dtype=dtype, keepdims=keepdims, todense=True
1238
+ )
1239
+
1240
+ def nanmax(self, axis=None, dtype=None, keepdims=None):
1241
+ ret = self._reduction(
1242
+ "nanmax", axis=axis, dtype=dtype, keepdims=keepdims, todense=True
1243
+ )
1244
+ if not issparse(ret):
1245
+ if get_array_module(ret).isscalar(ret):
1246
+ return ret
1247
+ xps = get_sparse_module(self.spmatrix)
1248
+ ret = SparseNDArray(xps.csr_matrix(ret))
1249
+ return ret
1250
+ return ret
1251
+
1252
+ def nanmin(self, axis=None, dtype=None, keepdims=None):
1253
+ ret = self._reduction(
1254
+ "nanmin", axis=axis, dtype=dtype, keepdims=keepdims, todense=True
1255
+ )
1256
+ if not issparse(ret):
1257
+ if get_array_module(ret).isscalar(ret):
1258
+ return ret
1259
+ xps = get_sparse_module(self.spmatrix)
1260
+ ret = SparseNDArray(xps.csr_matrix(ret))
1261
+ return ret
1262
+ return ret
1263
+
1264
+ def nanmean(self, axis=None, dtype=None, keepdims=None):
1265
+ return self._reduction(
1266
+ "nanmean", axis=axis, dtype=dtype, keepdims=keepdims, todense=True
1267
+ )
1268
+
1269
+ def argmax(self, axis=None, dtype=None, keepdims=None):
1270
+ return self._reduction("argmax", axis=axis, dtype=dtype, keepdims=keepdims)
1271
+
1272
+ def nanargmax(self, axis=None, dtype=None, keepdims=None):
1273
+ return self._reduction(
1274
+ "nanargmax", axis=axis, dtype=dtype, keepdims=keepdims, todense=True
1275
+ )
1276
+
1277
+ def argmin(self, axis=None, dtype=None, keepdims=None):
1278
+ return self._reduction("argmin", axis=axis, dtype=dtype, keepdims=keepdims)
1279
+
1280
+ def nanargmin(self, axis=None, dtype=None, keepdims=None):
1281
+ return self._reduction(
1282
+ "nanargmin", axis=axis, dtype=dtype, keepdims=keepdims, todense=True
1283
+ )
1284
+
1285
+ def var(self, axis=None, dtype=None, ddof=0, keepdims=None):
1286
+ return self._reduction(
1287
+ "var", axis=axis, dtype=dtype, ddof=ddof, keepdims=keepdims, todense=True
1288
+ )
1289
+
1290
+ def cumsum(self, axis=None, dtype=None):
1291
+ return self.toarray().cumsum(axis=axis)
1292
+
1293
+ def cumprod(self, axis=None, dtype=None):
1294
+ return self.toarray().cumprod(axis=axis)
1295
+
1296
+ def nancumsum(self, axis=None, dtype=None):
1297
+ xp = get_array_module(self.spmatrix)
1298
+ return xp.nancumsum(self.toarray(), axis=axis)
1299
+
1300
+ def nancumprod(self, axis=None, dtype=None):
1301
+ xp = get_array_module(self.spmatrix)
1302
+ return xp.nancumprod(self.toarray(), axis=axis)
1303
+
1304
+ def count_nonzero(self, axis=None, dtype=None, keepdims=None):
1305
+ if axis is None:
1306
+ return get_array_module(self.spmatrix).array(
1307
+ [self.spmatrix.count_nonzero()]
1308
+ )[0]
1309
+ else:
1310
+ return get_array_module(self.spmatrix).count_nonzero(
1311
+ self.toarray(), axis=axis
1312
+ )
1313
+
1314
+ def __getitem__(self, item):
1315
+ if isinstance(item, SparseArray):
1316
+ item = item.spmatrix
1317
+ if isinstance(item, list):
1318
+ item = tuple(item)
1319
+
1320
+ x = self.spmatrix[item]
1321
+ if issparse(x):
1322
+ return SparseNDArray(x, shape=self.shape)
1323
+ return get_array_module(x).asarray(x)
1324
+
1325
+ def __setitem__(self, key, value):
1326
+ if is_cupy(self.spmatrix):
1327
+ return NotImplemented
1328
+ else:
1329
+ x = self.spmatrix.tolil()
1330
+ x[key] = value
1331
+ x = x.tocsr()
1332
+ self.spmatrix = x
1333
+
1334
+ def _maximum_minimum(self, other, method_name):
1335
+ try:
1336
+ naked_other = naked(other)
1337
+ except TypeError:
1338
+ return NotImplemented
1339
+
1340
+ if is_cupy(self.spmatrix):
1341
+ # TODO(jisheng): cupy does not implement sparse maximum and minimum
1342
+ return NotImplemented
1343
+
1344
+ xps = get_sparse_module(self.spmatrix)
1345
+ xp = get_array_module(self.spmatrix)
1346
+ has_nan = xps.csr_matrix(
1347
+ (xp.isnan(self.spmatrix.data), self.spmatrix.indices, self.spmatrix.indptr),
1348
+ self.spmatrix.shape,
1349
+ )
1350
+ if issparse(naked_other):
1351
+ has_nan += xps.csr_matrix(
1352
+ (xp.isnan(naked_other.data), naked_other.indices, naked_other.indptr),
1353
+ naked_other.shape,
1354
+ )
1355
+
1356
+ if issparse(naked_other):
1357
+ x = getattr(self.spmatrix, method_name)(naked_other)
1358
+ else:
1359
+ x = getattr(xp, method_name)(self.toarray(), naked_other)
1360
+
1361
+ if has_nan.sum() > 0:
1362
+ x = x + (has_nan * np.nan)
1363
+
1364
+ if issparse(x):
1365
+ return SparseNDArray(x, shape=self.shape)
1366
+
1367
+ return get_array_module(x).asarray(x)
1368
+
1369
+ def maximum(self, other):
1370
+ return self._maximum_minimum(other, "maximum")
1371
+
1372
+ def minimum(self, other):
1373
+ return self._maximum_minimum(other, "minimum")
1374
+
1375
+ def fmax(self, other):
1376
+ try:
1377
+ naked_other = naked(other)
1378
+ except TypeError:
1379
+ return NotImplemented
1380
+
1381
+ x = self.spmatrix.maximum(naked_other)
1382
+ if issparse(x):
1383
+ return SparseArray(x, shape=self.shape)
1384
+ return get_array_module(x).asarray(x)
1385
+
1386
+ def fmin(self, other):
1387
+ try:
1388
+ naked_other = naked(other)
1389
+ except TypeError:
1390
+ return NotImplemented
1391
+
1392
+ x = self.spmatrix.minimum(naked_other)
1393
+ if issparse(x):
1394
+ return SparseNDArray(x, shape=self.shape)
1395
+ return get_array_module(x).asarray(x)
1396
+
1397
+ def isinf(self):
1398
+ return call_sparse("isinf", self)
1399
+
1400
+ def isnan(self):
1401
+ return call_sparse("isnan", self)
1402
+
1403
+ def signbit(self):
1404
+ return call_sparse("signbit", self)
1405
+
1406
+ def floor(self):
1407
+ return SparseNDArray(self.spmatrix.floor(), shape=self.shape)
1408
+
1409
+ def ceil(self):
1410
+ return SparseNDArray(self.spmatrix.ceil(), shape=self.shape)
1411
+
1412
+ def trunc(self):
1413
+ return SparseNDArray(self.spmatrix.trunc(), shape=self.shape)
1414
+
1415
+ def degrees(self):
1416
+ return call_sparse("degrees", self)
1417
+
1418
+ def radians(self):
1419
+ return call_sparse("radians", self)
1420
+
1421
+ def clip(self, a_min, a_max):
1422
+ try:
1423
+ a_min = naked(a_min)
1424
+ except TypeError:
1425
+ return NotImplemented
1426
+
1427
+ try:
1428
+ a_max = naked(a_max)
1429
+ except TypeError:
1430
+ return NotImplemented
1431
+
1432
+ x = self.spmatrix.maximum(a_min)
1433
+ if issparse(x):
1434
+ x = x.minimum(a_max)
1435
+ elif issparse(a_max):
1436
+ x = a_max.minimum(x)
1437
+ else:
1438
+ xp = get_array_module(x)
1439
+ x = xp.minimum(x, a_max)
1440
+ if issparse(x):
1441
+ return SparseNDArray(x, shape=self.shape)
1442
+ return get_array_module(x).asarray(x)
1443
+
1444
+ def iscomplex(self):
1445
+ return call_sparse("iscomplex", self)
1446
+
1447
+ def fix(self):
1448
+ return call_sparse("fix", self)
1449
+
1450
+ def i0(self):
1451
+ xp = get_array_module(self.spmatrix)
1452
+ return xp.i0(self.toarray())
1453
+
1454
+ def nan_to_num(self):
1455
+ return call_sparse("nan_to_num", self)
1456
+
1457
+ def copysign(self, other):
1458
+ try:
1459
+ naked_other = naked(other)
1460
+ except TypeError:
1461
+ return NotImplemented
1462
+
1463
+ if get_array_module(naked_other).isscalar(naked_other):
1464
+ return call_sparse("copysign", self, naked_other)
1465
+
1466
+ if issparse(naked_other):
1467
+ naked_other = other.toarray()
1468
+
1469
+ xp = get_array_module(self.spmatrix)
1470
+ return xp.copysign(self.toarray(), naked_other)
1471
+
1472
+ def nextafter(self, other):
1473
+ try:
1474
+ naked_other = naked(other)
1475
+ except TypeError:
1476
+ return NotImplemented
1477
+
1478
+ ret_sparse = False
1479
+ if issparse(naked_other):
1480
+ ret_sparse = True
1481
+ naked_other = other.toarray()
1482
+
1483
+ xp = get_array_module(self.spmatrix)
1484
+ xps = get_sparse_module(self.spmatrix)
1485
+
1486
+ x = xp.nextafter(self.toarray(), naked_other)
1487
+ if ret_sparse:
1488
+ return SparseNDArray(xps.csr_matrix(x), shape=self.shape)
1489
+ return x
1490
+
1491
+ def spacing(self):
1492
+ if is_cupy(self.spmatrix):
1493
+ raise NotImplementedError
1494
+ return call_sparse("spacing", self)
1495
+
1496
+ def ldexp(self, other):
1497
+ try:
1498
+ naked_other = naked(other)
1499
+ except TypeError:
1500
+ return NotImplemented
1501
+
1502
+ if get_array_module(naked_other).isscalar(naked_other):
1503
+ return call_sparse("ldexp", self, naked_other)
1504
+
1505
+ if issparse(naked_other):
1506
+ naked_other = other.toarray()
1507
+
1508
+ return SparseNDArray(self.spmatrix.multiply(2**naked_other))
1509
+
1510
+ def frexp(self, **kw):
1511
+ xp = get_array_module(self.spmatrix)
1512
+ xps = get_sparse_module(self.spmatrix)
1513
+ x, y = xp.frexp(self.toarray(), **kw)
1514
+ return (
1515
+ SparseNDArray(xps.csr_matrix(x), shape=self.shape),
1516
+ SparseNDArray(xps.csr_matrix(y), shape=self.shape),
1517
+ )
1518
+
1519
+ def modf(self, **kw):
1520
+ xp = get_array_module(self.spmatrix)
1521
+ xps = get_sparse_module(self.spmatrix)
1522
+ x, y = xp.modf(self.toarray(), **kw)
1523
+ return (
1524
+ SparseNDArray(xps.csr_matrix(x), shape=self.shape),
1525
+ SparseNDArray(xps.csr_matrix(y), shape=self.shape),
1526
+ )
1527
+
1528
+ def sinc(self):
1529
+ xp = get_array_module(self.spmatrix)
1530
+ return xp.sinc(self.toarray())
1531
+
1532
+ def isfinite(self):
1533
+ xp = get_array_module(self.spmatrix)
1534
+ return xp.isfinite(self.toarray())
1535
+
1536
+ def isreal(self):
1537
+ xp = get_array_module(self.spmatrix)
1538
+ return xp.isreal(self.toarray())
1539
+
1540
+ def digitize(self, bins, right=False):
1541
+ return call_sparse("digitize", self, bins=bins, right=right)
1542
+
1543
+ def repeat(self, repeats, axis=None):
1544
+ if axis is None:
1545
+ raise NotImplementedError
1546
+
1547
+ xp = get_array_module(self.spmatrix)
1548
+ xps = get_sparse_module(self.spmatrix)
1549
+ r = xp.repeat(self.toarray(), repeats, axis=axis)
1550
+ x = xps.csr_matrix(r)
1551
+ return SparseNDArray(x, shape=r.shape)
1552
+
1553
+ @staticmethod
1554
+ def _expand_val(val, expect_val_size, xp):
1555
+ if val.size > expect_val_size:
1556
+ val = val[:expect_val_size]
1557
+ elif val.size < expect_val_size:
1558
+ n_repeat = ceildiv(expect_val_size, val.size)
1559
+ val = xp.tile(val, n_repeat)[:expect_val_size]
1560
+ return val
1561
+
1562
+ def fill_diagonal(self, val, wrap=False):
1563
+ lil_matrix = self.spmatrix.tolil()
1564
+
1565
+ xp = get_array_module(self.spmatrix)
1566
+ val = xp.asarray(val)
1567
+ if val.ndim > 1:
1568
+ val = val.ravel()
1569
+ is_tall_matrix = lil_matrix.shape[0] > lil_matrix.shape[1] + 1
1570
+ n_rows, n_cols = lil_matrix.shape
1571
+
1572
+ if not wrap or not is_tall_matrix:
1573
+ if val.ndim > 0:
1574
+ # check if val is long enough
1575
+ expect_val_size = min(n_rows, n_cols)
1576
+ val = self._expand_val(val, expect_val_size, xp)
1577
+ lil_matrix.setdiag(val)
1578
+ matrix = lil_matrix
1579
+ else:
1580
+ block_size = n_cols + 1
1581
+
1582
+ n_block = n_rows // block_size
1583
+ n_vals = n_cols * n_block
1584
+ if n_rows % block_size > 0:
1585
+ # 1 chunk left
1586
+ n_block += 1
1587
+ n_vals += min(n_rows % block_size, n_cols)
1588
+
1589
+ if val.ndim > 0:
1590
+ val = self._expand_val(val, n_vals, xp)
1591
+
1592
+ sub_matrices = []
1593
+ for i in range(n_block):
1594
+ sub_lil_matrix = lil_matrix[i * block_size : (i + 1) * block_size]
1595
+ if val.ndim > 0:
1596
+ sub_val = val[i * n_cols : (i + 1) * n_cols]
1597
+ else:
1598
+ sub_val = val
1599
+ sub_lil_matrix.setdiag(sub_val)
1600
+ sub_matrices.append(sub_lil_matrix)
1601
+
1602
+ xps = get_sparse_module(self.spmatrix)
1603
+ matrix = SparseArray(xps.vstack(sub_matrices, format="csr"))
1604
+
1605
+ self.spmatrix = matrix.tocsr()
1606
+
1607
+ def unique(
1608
+ self, return_index=False, return_inverse=False, return_counts=False, axis=None
1609
+ ):
1610
+ if return_inverse or return_index: # pragma: no cover
1611
+ raise NotImplementedError
1612
+ if self.ndim == 2 and axis is not None: # pragma: no cover
1613
+ raise NotImplementedError
1614
+
1615
+ xp = get_array_module(self.spmatrix)
1616
+ return xp.unique(self.spmatrix.data, return_counts=return_counts)