maxframe 2.0.0b2__cp37-cp37m-win32.whl → 2.3.0rc1__cp37-cp37m-win32.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of maxframe might be problematic. Click here for more details.

Files changed (443) hide show
  1. maxframe/__init__.py +1 -0
  2. maxframe/_utils.cp37-win32.pyd +0 -0
  3. maxframe/_utils.pyx +14 -1
  4. maxframe/codegen/core.py +9 -8
  5. maxframe/codegen/spe/core.py +1 -1
  6. maxframe/codegen/spe/dataframe/__init__.py +1 -0
  7. maxframe/codegen/spe/dataframe/accessors/base.py +18 -0
  8. maxframe/codegen/spe/dataframe/accessors/dict_.py +25 -130
  9. maxframe/codegen/spe/dataframe/accessors/list_.py +12 -48
  10. maxframe/codegen/spe/dataframe/accessors/struct_.py +28 -0
  11. maxframe/codegen/spe/dataframe/arithmetic.py +7 -2
  12. maxframe/codegen/spe/dataframe/groupby.py +88 -0
  13. maxframe/codegen/spe/dataframe/indexing.py +99 -4
  14. maxframe/codegen/spe/dataframe/merge.py +38 -1
  15. maxframe/codegen/spe/dataframe/misc.py +11 -33
  16. maxframe/codegen/spe/dataframe/reduction.py +32 -9
  17. maxframe/codegen/spe/dataframe/reshape.py +46 -0
  18. maxframe/codegen/spe/dataframe/sort.py +39 -18
  19. maxframe/codegen/spe/dataframe/tests/accessors/test_dict.py +9 -15
  20. maxframe/codegen/spe/dataframe/tests/accessors/test_list.py +4 -7
  21. maxframe/codegen/spe/dataframe/tests/accessors/test_struct.py +75 -0
  22. maxframe/codegen/spe/dataframe/tests/indexing/test_iloc.py +20 -1
  23. maxframe/codegen/spe/dataframe/tests/indexing/test_loc.py +35 -0
  24. maxframe/codegen/spe/dataframe/tests/misc/test_misc.py +0 -32
  25. maxframe/codegen/spe/dataframe/tests/test_groupby.py +81 -18
  26. maxframe/codegen/spe/dataframe/tests/test_merge.py +27 -1
  27. maxframe/codegen/spe/dataframe/tests/test_reduction.py +13 -0
  28. maxframe/codegen/spe/dataframe/tests/test_reshape.py +79 -0
  29. maxframe/codegen/spe/dataframe/tests/test_sort.py +20 -0
  30. maxframe/codegen/spe/dataframe/tseries.py +9 -0
  31. maxframe/codegen/spe/learn/contrib/lightgbm.py +4 -3
  32. maxframe/codegen/spe/learn/contrib/tests/test_xgboost.py +2 -1
  33. maxframe/codegen/spe/learn/metrics/__init__.py +1 -1
  34. maxframe/codegen/spe/learn/metrics/_ranking.py +76 -0
  35. maxframe/codegen/spe/learn/metrics/pairwise.py +51 -0
  36. maxframe/codegen/spe/learn/metrics/tests/test_pairwise.py +36 -0
  37. maxframe/codegen/spe/learn/metrics/tests/test_ranking.py +59 -0
  38. maxframe/codegen/spe/tensor/__init__.py +3 -0
  39. maxframe/codegen/spe/tensor/datasource.py +1 -0
  40. maxframe/codegen/spe/tensor/fft.py +74 -0
  41. maxframe/codegen/spe/tensor/linalg.py +29 -2
  42. maxframe/codegen/spe/tensor/misc.py +79 -25
  43. maxframe/codegen/spe/tensor/spatial.py +45 -0
  44. maxframe/codegen/spe/tensor/statistics.py +44 -0
  45. maxframe/codegen/spe/tensor/tests/test_fft.py +64 -0
  46. maxframe/codegen/spe/tensor/tests/test_linalg.py +15 -1
  47. maxframe/codegen/spe/tensor/tests/test_misc.py +52 -2
  48. maxframe/codegen/spe/tensor/tests/test_spatial.py +33 -0
  49. maxframe/codegen/spe/tensor/tests/test_statistics.py +15 -1
  50. maxframe/codegen/spe/tests/test_spe_codegen.py +6 -12
  51. maxframe/codegen/spe/utils.py +2 -0
  52. maxframe/config/config.py +73 -9
  53. maxframe/config/tests/test_validators.py +13 -1
  54. maxframe/config/validators.py +49 -0
  55. maxframe/conftest.py +54 -17
  56. maxframe/core/accessor.py +2 -2
  57. maxframe/core/base.py +2 -1
  58. maxframe/core/entity/core.py +5 -0
  59. maxframe/core/entity/tileables.py +3 -1
  60. maxframe/core/graph/core.cp37-win32.pyd +0 -0
  61. maxframe/core/graph/entity.py +8 -3
  62. maxframe/core/mode.py +6 -1
  63. maxframe/core/operator/base.py +9 -2
  64. maxframe/core/operator/core.py +10 -2
  65. maxframe/core/operator/utils.py +13 -0
  66. maxframe/dataframe/__init__.py +12 -5
  67. maxframe/dataframe/accessors/__init__.py +1 -1
  68. maxframe/dataframe/accessors/compat.py +45 -0
  69. maxframe/dataframe/accessors/datetime_/__init__.py +4 -1
  70. maxframe/dataframe/accessors/dict_/contains.py +7 -16
  71. maxframe/dataframe/accessors/dict_/core.py +48 -0
  72. maxframe/dataframe/accessors/dict_/getitem.py +17 -21
  73. maxframe/dataframe/accessors/dict_/length.py +7 -16
  74. maxframe/dataframe/accessors/dict_/remove.py +6 -18
  75. maxframe/dataframe/accessors/dict_/setitem.py +8 -18
  76. maxframe/dataframe/accessors/dict_/tests/test_dict_accessor.py +62 -22
  77. maxframe/dataframe/accessors/list_/__init__.py +2 -2
  78. maxframe/dataframe/accessors/list_/core.py +48 -0
  79. maxframe/dataframe/accessors/list_/getitem.py +12 -19
  80. maxframe/dataframe/accessors/list_/length.py +7 -16
  81. maxframe/dataframe/accessors/list_/tests/test_list_accessor.py +11 -9
  82. maxframe/dataframe/accessors/string_/__init__.py +4 -1
  83. maxframe/dataframe/accessors/struct_/__init__.py +37 -0
  84. maxframe/dataframe/accessors/struct_/accessor.py +39 -0
  85. maxframe/dataframe/accessors/struct_/core.py +43 -0
  86. maxframe/dataframe/accessors/struct_/dtypes.py +53 -0
  87. maxframe/dataframe/accessors/struct_/field.py +123 -0
  88. maxframe/dataframe/accessors/struct_/tests/__init__.py +13 -0
  89. maxframe/dataframe/accessors/struct_/tests/test_struct_accessor.py +91 -0
  90. maxframe/dataframe/arithmetic/__init__.py +18 -4
  91. maxframe/dataframe/arithmetic/between.py +106 -0
  92. maxframe/dataframe/arithmetic/dot.py +237 -0
  93. maxframe/dataframe/arithmetic/maximum.py +33 -0
  94. maxframe/dataframe/arithmetic/minimum.py +33 -0
  95. maxframe/dataframe/arithmetic/{around.py → round.py} +11 -7
  96. maxframe/dataframe/core.py +161 -224
  97. maxframe/dataframe/datasource/__init__.py +18 -0
  98. maxframe/dataframe/datasource/core.py +6 -0
  99. maxframe/dataframe/datasource/direct.py +57 -0
  100. maxframe/dataframe/datasource/from_dict.py +124 -0
  101. maxframe/dataframe/datasource/from_index.py +1 -1
  102. maxframe/dataframe/datasource/from_records.py +77 -0
  103. maxframe/dataframe/datasource/from_tensor.py +109 -41
  104. maxframe/dataframe/datasource/read_csv.py +21 -14
  105. maxframe/dataframe/datasource/read_odps_query.py +29 -6
  106. maxframe/dataframe/datasource/read_odps_table.py +32 -10
  107. maxframe/dataframe/datasource/read_parquet.py +38 -39
  108. maxframe/dataframe/datasource/tests/test_datasource.py +37 -0
  109. maxframe/dataframe/datastore/__init__.py +11 -1
  110. maxframe/dataframe/datastore/direct.py +268 -0
  111. maxframe/dataframe/datastore/to_csv.py +29 -41
  112. maxframe/dataframe/datastore/to_odps.py +36 -4
  113. maxframe/dataframe/extensions/__init__.py +20 -4
  114. maxframe/dataframe/extensions/apply_chunk.py +32 -6
  115. maxframe/dataframe/extensions/cartesian_chunk.py +153 -0
  116. maxframe/dataframe/extensions/collect_kv.py +126 -0
  117. maxframe/dataframe/extensions/extract_kv.py +177 -0
  118. maxframe/dataframe/extensions/flatjson.py +2 -1
  119. maxframe/dataframe/extensions/map_reduce.py +263 -0
  120. maxframe/dataframe/extensions/rebalance.py +62 -0
  121. maxframe/dataframe/extensions/tests/test_apply_chunk.py +9 -2
  122. maxframe/dataframe/extensions/tests/test_extensions.py +54 -0
  123. maxframe/dataframe/extensions/tests/test_map_reduce.py +135 -0
  124. maxframe/dataframe/groupby/__init__.py +17 -2
  125. maxframe/dataframe/groupby/aggregation.py +86 -49
  126. maxframe/dataframe/groupby/apply.py +1 -1
  127. maxframe/dataframe/groupby/apply_chunk.py +19 -5
  128. maxframe/dataframe/groupby/core.py +116 -16
  129. maxframe/dataframe/groupby/cum.py +4 -25
  130. maxframe/dataframe/groupby/expanding.py +264 -0
  131. maxframe/dataframe/groupby/fill.py +1 -1
  132. maxframe/dataframe/groupby/getitem.py +12 -5
  133. maxframe/dataframe/groupby/head.py +11 -1
  134. maxframe/dataframe/groupby/rank.py +136 -0
  135. maxframe/dataframe/groupby/rolling.py +206 -0
  136. maxframe/dataframe/groupby/shift.py +114 -0
  137. maxframe/dataframe/groupby/tests/test_groupby.py +0 -5
  138. maxframe/dataframe/indexing/__init__.py +22 -2
  139. maxframe/dataframe/indexing/droplevel.py +195 -0
  140. maxframe/dataframe/indexing/filter.py +169 -0
  141. maxframe/dataframe/indexing/get_level_values.py +76 -0
  142. maxframe/dataframe/indexing/iat.py +45 -0
  143. maxframe/dataframe/indexing/iloc.py +152 -12
  144. maxframe/dataframe/indexing/insert.py +46 -18
  145. maxframe/dataframe/indexing/loc.py +287 -7
  146. maxframe/dataframe/indexing/reindex.py +14 -5
  147. maxframe/dataframe/indexing/rename.py +6 -0
  148. maxframe/dataframe/indexing/rename_axis.py +2 -2
  149. maxframe/dataframe/indexing/reorder_levels.py +143 -0
  150. maxframe/dataframe/indexing/reset_index.py +33 -6
  151. maxframe/dataframe/indexing/sample.py +8 -0
  152. maxframe/dataframe/indexing/setitem.py +3 -3
  153. maxframe/dataframe/indexing/swaplevel.py +185 -0
  154. maxframe/dataframe/indexing/take.py +99 -0
  155. maxframe/dataframe/indexing/truncate.py +140 -0
  156. maxframe/dataframe/indexing/where.py +0 -11
  157. maxframe/dataframe/indexing/xs.py +148 -0
  158. maxframe/dataframe/merge/__init__.py +15 -1
  159. maxframe/dataframe/merge/append.py +97 -98
  160. maxframe/dataframe/merge/combine.py +244 -0
  161. maxframe/dataframe/merge/combine_first.py +120 -0
  162. maxframe/dataframe/merge/compare.py +387 -0
  163. maxframe/dataframe/merge/concat.py +183 -0
  164. maxframe/dataframe/merge/update.py +271 -0
  165. maxframe/dataframe/misc/__init__.py +28 -11
  166. maxframe/dataframe/misc/_duplicate.py +10 -4
  167. maxframe/dataframe/misc/apply.py +1 -1
  168. maxframe/dataframe/misc/check_unique.py +82 -0
  169. maxframe/dataframe/misc/clip.py +145 -0
  170. maxframe/dataframe/misc/describe.py +175 -9
  171. maxframe/dataframe/misc/drop.py +31 -0
  172. maxframe/dataframe/misc/drop_duplicates.py +2 -2
  173. maxframe/dataframe/misc/duplicated.py +2 -2
  174. maxframe/dataframe/misc/get_dummies.py +5 -1
  175. maxframe/dataframe/misc/infer_dtypes.py +251 -0
  176. maxframe/dataframe/misc/isin.py +2 -2
  177. maxframe/dataframe/misc/map.py +125 -18
  178. maxframe/dataframe/misc/repeat.py +159 -0
  179. maxframe/dataframe/misc/tests/test_misc.py +48 -3
  180. maxframe/dataframe/misc/to_numeric.py +3 -0
  181. maxframe/dataframe/misc/transform.py +12 -5
  182. maxframe/dataframe/misc/transpose.py +13 -1
  183. maxframe/dataframe/misc/valid_index.py +115 -0
  184. maxframe/dataframe/misc/value_counts.py +38 -4
  185. maxframe/dataframe/missing/checkna.py +14 -6
  186. maxframe/dataframe/missing/dropna.py +5 -0
  187. maxframe/dataframe/missing/fillna.py +1 -1
  188. maxframe/dataframe/missing/replace.py +7 -4
  189. maxframe/dataframe/reduction/__init__.py +35 -16
  190. maxframe/dataframe/reduction/aggregation.py +43 -14
  191. maxframe/dataframe/reduction/all.py +2 -2
  192. maxframe/dataframe/reduction/any.py +2 -2
  193. maxframe/dataframe/reduction/argmax.py +103 -0
  194. maxframe/dataframe/reduction/argmin.py +103 -0
  195. maxframe/dataframe/reduction/core.py +80 -24
  196. maxframe/dataframe/reduction/count.py +13 -9
  197. maxframe/dataframe/reduction/cov.py +166 -0
  198. maxframe/dataframe/reduction/cummax.py +2 -2
  199. maxframe/dataframe/reduction/cummin.py +2 -2
  200. maxframe/dataframe/reduction/cumprod.py +2 -2
  201. maxframe/dataframe/reduction/cumsum.py +2 -2
  202. maxframe/dataframe/reduction/custom_reduction.py +2 -2
  203. maxframe/dataframe/reduction/idxmax.py +185 -0
  204. maxframe/dataframe/reduction/idxmin.py +185 -0
  205. maxframe/dataframe/reduction/kurtosis.py +37 -30
  206. maxframe/dataframe/reduction/max.py +2 -2
  207. maxframe/dataframe/reduction/mean.py +9 -7
  208. maxframe/dataframe/reduction/median.py +2 -2
  209. maxframe/dataframe/reduction/min.py +2 -2
  210. maxframe/dataframe/reduction/mode.py +144 -0
  211. maxframe/dataframe/reduction/nunique.py +19 -11
  212. maxframe/dataframe/reduction/prod.py +18 -13
  213. maxframe/dataframe/reduction/reduction_size.py +2 -2
  214. maxframe/dataframe/reduction/sem.py +13 -9
  215. maxframe/dataframe/reduction/skew.py +31 -27
  216. maxframe/dataframe/reduction/str_concat.py +10 -7
  217. maxframe/dataframe/reduction/sum.py +18 -14
  218. maxframe/dataframe/reduction/tests/test_reduction.py +12 -0
  219. maxframe/dataframe/reduction/unique.py +20 -3
  220. maxframe/dataframe/reduction/var.py +16 -12
  221. maxframe/dataframe/reshape/__init__.py +38 -0
  222. maxframe/dataframe/{misc → reshape}/pivot.py +1 -0
  223. maxframe/dataframe/{misc → reshape}/pivot_table.py +1 -0
  224. maxframe/dataframe/reshape/unstack.py +114 -0
  225. maxframe/dataframe/sort/__init__.py +16 -1
  226. maxframe/dataframe/sort/argsort.py +68 -0
  227. maxframe/dataframe/sort/core.py +2 -1
  228. maxframe/dataframe/sort/nlargest.py +238 -0
  229. maxframe/dataframe/sort/nsmallest.py +228 -0
  230. maxframe/dataframe/sort/rank.py +147 -0
  231. maxframe/dataframe/statistics/__init__.py +3 -3
  232. maxframe/dataframe/statistics/corr.py +1 -0
  233. maxframe/dataframe/statistics/quantile.py +2 -2
  234. maxframe/dataframe/tests/test_typing.py +104 -0
  235. maxframe/dataframe/tests/test_utils.py +66 -2
  236. maxframe/dataframe/tseries/__init__.py +19 -0
  237. maxframe/dataframe/tseries/at_time.py +61 -0
  238. maxframe/dataframe/tseries/between_time.py +122 -0
  239. maxframe/dataframe/typing_.py +185 -0
  240. maxframe/dataframe/utils.py +125 -52
  241. maxframe/dataframe/window/aggregation.py +8 -4
  242. maxframe/dataframe/window/core.py +14 -1
  243. maxframe/dataframe/window/ewm.py +1 -3
  244. maxframe/dataframe/window/expanding.py +37 -35
  245. maxframe/dataframe/window/rolling.py +49 -39
  246. maxframe/dataframe/window/tests/test_expanding.py +1 -7
  247. maxframe/dataframe/window/tests/test_rolling.py +1 -1
  248. maxframe/env.py +7 -4
  249. maxframe/errors.py +2 -2
  250. maxframe/io/odpsio/schema.py +9 -3
  251. maxframe/io/odpsio/tableio.py +7 -2
  252. maxframe/io/odpsio/tests/test_schema.py +198 -83
  253. maxframe/learn/__init__.py +10 -2
  254. maxframe/learn/cluster/__init__.py +15 -0
  255. maxframe/learn/cluster/_kmeans.py +782 -0
  256. maxframe/learn/contrib/llm/core.py +18 -7
  257. maxframe/learn/contrib/llm/deploy/__init__.py +13 -0
  258. maxframe/learn/contrib/llm/deploy/config.py +221 -0
  259. maxframe/learn/contrib/llm/deploy/core.py +247 -0
  260. maxframe/learn/contrib/llm/deploy/framework.py +35 -0
  261. maxframe/learn/contrib/llm/deploy/loader.py +360 -0
  262. maxframe/learn/contrib/llm/deploy/tests/__init__.py +13 -0
  263. maxframe/learn/contrib/llm/deploy/tests/test_register_models.py +359 -0
  264. maxframe/learn/contrib/llm/models/__init__.py +1 -0
  265. maxframe/learn/contrib/llm/models/dashscope.py +12 -6
  266. maxframe/learn/contrib/llm/models/managed.py +76 -11
  267. maxframe/learn/contrib/llm/models/openai.py +72 -0
  268. maxframe/learn/contrib/llm/tests/__init__.py +13 -0
  269. maxframe/learn/contrib/llm/tests/test_core.py +34 -0
  270. maxframe/learn/contrib/llm/tests/test_openai.py +187 -0
  271. maxframe/learn/contrib/llm/tests/test_text_gen.py +155 -0
  272. maxframe/learn/contrib/llm/text.py +348 -42
  273. maxframe/learn/contrib/models.py +4 -1
  274. maxframe/learn/contrib/xgboost/classifier.py +2 -0
  275. maxframe/learn/contrib/xgboost/core.py +113 -4
  276. maxframe/learn/contrib/xgboost/predict.py +4 -2
  277. maxframe/learn/contrib/xgboost/regressor.py +5 -0
  278. maxframe/learn/contrib/xgboost/train.py +7 -2
  279. maxframe/learn/core.py +66 -0
  280. maxframe/learn/linear_model/_base.py +58 -1
  281. maxframe/learn/linear_model/_lin_reg.py +1 -1
  282. maxframe/learn/metrics/__init__.py +6 -0
  283. maxframe/learn/metrics/_classification.py +145 -0
  284. maxframe/learn/metrics/_ranking.py +477 -0
  285. maxframe/learn/metrics/_scorer.py +60 -0
  286. maxframe/learn/metrics/pairwise/__init__.py +21 -0
  287. maxframe/learn/metrics/pairwise/core.py +77 -0
  288. maxframe/learn/metrics/pairwise/cosine.py +115 -0
  289. maxframe/learn/metrics/pairwise/euclidean.py +176 -0
  290. maxframe/learn/metrics/pairwise/haversine.py +96 -0
  291. maxframe/learn/metrics/pairwise/manhattan.py +80 -0
  292. maxframe/learn/metrics/pairwise/pairwise.py +127 -0
  293. maxframe/learn/metrics/pairwise/pairwise_distances_topk.py +121 -0
  294. maxframe/learn/metrics/pairwise/rbf_kernel.py +51 -0
  295. maxframe/learn/metrics/tests/__init__.py +13 -0
  296. maxframe/learn/metrics/tests/test_scorer.py +26 -0
  297. maxframe/learn/preprocessing/_data/min_max_scaler.py +34 -23
  298. maxframe/learn/preprocessing/_data/standard_scaler.py +34 -25
  299. maxframe/learn/utils/__init__.py +2 -1
  300. maxframe/learn/utils/checks.py +1 -2
  301. maxframe/learn/utils/core.py +59 -0
  302. maxframe/learn/utils/extmath.py +79 -9
  303. maxframe/learn/utils/odpsio.py +262 -0
  304. maxframe/learn/utils/validation.py +2 -2
  305. maxframe/lib/compat.py +40 -0
  306. maxframe/lib/dtypes_extension/__init__.py +16 -1
  307. maxframe/lib/dtypes_extension/_fake_arrow_dtype.py +604 -0
  308. maxframe/lib/dtypes_extension/blob.py +304 -0
  309. maxframe/lib/dtypes_extension/dtypes.py +40 -0
  310. maxframe/lib/dtypes_extension/tests/test_blob.py +88 -0
  311. maxframe/lib/dtypes_extension/tests/test_dtypes.py +16 -1
  312. maxframe/lib/dtypes_extension/tests/test_fake_arrow_dtype.py +75 -0
  313. maxframe/lib/filesystem/_oss_lib/common.py +124 -50
  314. maxframe/lib/filesystem/_oss_lib/glob.py +1 -1
  315. maxframe/lib/filesystem/_oss_lib/handle.py +21 -25
  316. maxframe/lib/filesystem/base.py +1 -1
  317. maxframe/lib/filesystem/core.py +1 -1
  318. maxframe/lib/filesystem/oss.py +115 -46
  319. maxframe/lib/filesystem/tests/test_oss.py +74 -36
  320. maxframe/lib/mmh3.cp37-win32.pyd +0 -0
  321. maxframe/lib/wrapped_pickle.py +10 -0
  322. maxframe/opcodes.py +41 -15
  323. maxframe/protocol.py +12 -0
  324. maxframe/remote/core.py +4 -0
  325. maxframe/serialization/__init__.py +11 -2
  326. maxframe/serialization/arrow.py +38 -13
  327. maxframe/serialization/blob.py +32 -0
  328. maxframe/serialization/core.cp37-win32.pyd +0 -0
  329. maxframe/serialization/core.pyx +39 -1
  330. maxframe/serialization/exception.py +2 -4
  331. maxframe/serialization/numpy.py +11 -0
  332. maxframe/serialization/pandas.py +46 -9
  333. maxframe/serialization/serializables/core.py +2 -2
  334. maxframe/serialization/tests/test_serial.py +31 -4
  335. maxframe/tensor/__init__.py +38 -8
  336. maxframe/tensor/arithmetic/__init__.py +19 -10
  337. maxframe/tensor/arithmetic/core.py +2 -2
  338. maxframe/tensor/arithmetic/iscomplexobj.py +53 -0
  339. maxframe/tensor/arithmetic/tests/test_arithmetic.py +6 -9
  340. maxframe/tensor/core.py +6 -2
  341. maxframe/tensor/datasource/tests/test_datasource.py +2 -1
  342. maxframe/tensor/extensions/__init__.py +2 -0
  343. maxframe/tensor/extensions/apply_chunk.py +3 -3
  344. maxframe/tensor/extensions/rebalance.py +65 -0
  345. maxframe/tensor/fft/__init__.py +32 -0
  346. maxframe/tensor/fft/core.py +168 -0
  347. maxframe/tensor/fft/fft.py +112 -0
  348. maxframe/tensor/fft/fft2.py +118 -0
  349. maxframe/tensor/fft/fftfreq.py +80 -0
  350. maxframe/tensor/fft/fftn.py +123 -0
  351. maxframe/tensor/fft/fftshift.py +79 -0
  352. maxframe/tensor/fft/hfft.py +112 -0
  353. maxframe/tensor/fft/ifft.py +114 -0
  354. maxframe/tensor/fft/ifft2.py +115 -0
  355. maxframe/tensor/fft/ifftn.py +123 -0
  356. maxframe/tensor/fft/ifftshift.py +73 -0
  357. maxframe/tensor/fft/ihfft.py +93 -0
  358. maxframe/tensor/fft/irfft.py +118 -0
  359. maxframe/tensor/fft/irfft2.py +62 -0
  360. maxframe/tensor/fft/irfftn.py +114 -0
  361. maxframe/tensor/fft/rfft.py +116 -0
  362. maxframe/tensor/fft/rfft2.py +63 -0
  363. maxframe/tensor/fft/rfftfreq.py +87 -0
  364. maxframe/tensor/fft/rfftn.py +113 -0
  365. maxframe/tensor/indexing/fill_diagonal.py +1 -7
  366. maxframe/tensor/linalg/__init__.py +7 -0
  367. maxframe/tensor/linalg/_einsumfunc.py +1025 -0
  368. maxframe/tensor/linalg/cholesky.py +117 -0
  369. maxframe/tensor/linalg/einsum.py +339 -0
  370. maxframe/tensor/linalg/lstsq.py +100 -0
  371. maxframe/tensor/linalg/matrix_norm.py +75 -0
  372. maxframe/tensor/linalg/norm.py +249 -0
  373. maxframe/tensor/linalg/solve.py +72 -0
  374. maxframe/tensor/linalg/solve_triangular.py +2 -2
  375. maxframe/tensor/linalg/vector_norm.py +113 -0
  376. maxframe/tensor/misc/__init__.py +24 -1
  377. maxframe/tensor/misc/argwhere.py +72 -0
  378. maxframe/tensor/misc/array_split.py +46 -0
  379. maxframe/tensor/misc/broadcast_arrays.py +57 -0
  380. maxframe/tensor/misc/copyto.py +130 -0
  381. maxframe/tensor/misc/delete.py +104 -0
  382. maxframe/tensor/misc/dsplit.py +68 -0
  383. maxframe/tensor/misc/ediff1d.py +74 -0
  384. maxframe/tensor/misc/expand_dims.py +85 -0
  385. maxframe/tensor/misc/flip.py +90 -0
  386. maxframe/tensor/misc/fliplr.py +64 -0
  387. maxframe/tensor/misc/flipud.py +68 -0
  388. maxframe/tensor/misc/hsplit.py +85 -0
  389. maxframe/tensor/misc/insert.py +139 -0
  390. maxframe/tensor/misc/moveaxis.py +83 -0
  391. maxframe/tensor/misc/result_type.py +88 -0
  392. maxframe/tensor/misc/roll.py +124 -0
  393. maxframe/tensor/misc/rollaxis.py +77 -0
  394. maxframe/tensor/misc/shape.py +89 -0
  395. maxframe/tensor/misc/split.py +190 -0
  396. maxframe/tensor/misc/tile.py +109 -0
  397. maxframe/tensor/misc/vsplit.py +74 -0
  398. maxframe/tensor/reduction/array_equal.py +2 -1
  399. maxframe/tensor/sort/__init__.py +2 -0
  400. maxframe/tensor/sort/argpartition.py +98 -0
  401. maxframe/tensor/sort/partition.py +228 -0
  402. maxframe/tensor/spatial/__init__.py +15 -0
  403. maxframe/tensor/spatial/distance/__init__.py +17 -0
  404. maxframe/tensor/spatial/distance/cdist.py +421 -0
  405. maxframe/tensor/spatial/distance/pdist.py +398 -0
  406. maxframe/tensor/spatial/distance/squareform.py +153 -0
  407. maxframe/tensor/special/__init__.py +159 -21
  408. maxframe/tensor/special/airy.py +55 -0
  409. maxframe/tensor/special/bessel.py +199 -0
  410. maxframe/tensor/special/core.py +65 -4
  411. maxframe/tensor/special/ellip_func_integrals.py +155 -0
  412. maxframe/tensor/special/ellip_harm.py +55 -0
  413. maxframe/tensor/special/err_fresnel.py +223 -0
  414. maxframe/tensor/special/gamma_funcs.py +303 -0
  415. maxframe/tensor/special/hypergeometric_funcs.py +69 -0
  416. maxframe/tensor/special/info_theory.py +189 -0
  417. maxframe/tensor/special/misc.py +21 -0
  418. maxframe/tensor/statistics/__init__.py +6 -0
  419. maxframe/tensor/statistics/corrcoef.py +77 -0
  420. maxframe/tensor/statistics/cov.py +222 -0
  421. maxframe/tensor/statistics/digitize.py +126 -0
  422. maxframe/tensor/statistics/histogram.py +520 -0
  423. maxframe/tensor/statistics/median.py +85 -0
  424. maxframe/tensor/statistics/ptp.py +89 -0
  425. maxframe/tensor/utils.py +3 -3
  426. maxframe/tests/test_udf.py +61 -0
  427. maxframe/tests/test_utils.py +51 -6
  428. maxframe/tests/utils.py +0 -2
  429. maxframe/typing_.py +2 -0
  430. maxframe/udf.py +130 -9
  431. maxframe/utils.py +254 -27
  432. {maxframe-2.0.0b2.dist-info → maxframe-2.3.0rc1.dist-info}/METADATA +3 -3
  433. {maxframe-2.0.0b2.dist-info → maxframe-2.3.0rc1.dist-info}/RECORD +442 -264
  434. maxframe_client/fetcher.py +35 -4
  435. maxframe_client/session/odps.py +7 -2
  436. maxframe_client/session/task.py +8 -1
  437. maxframe_client/tests/test_fetcher.py +76 -3
  438. maxframe_client/tests/test_session.py +28 -1
  439. maxframe/dataframe/arrays.py +0 -864
  440. /maxframe/dataframe/{misc → reshape}/melt.py +0 -0
  441. /maxframe/dataframe/{misc → reshape}/stack.py +0 -0
  442. {maxframe-2.0.0b2.dist-info → maxframe-2.3.0rc1.dist-info}/WHEEL +0 -0
  443. {maxframe-2.0.0b2.dist-info → maxframe-2.3.0rc1.dist-info}/top_level.txt +0 -0
@@ -26,7 +26,6 @@ from ...serialization.serializables import (
26
26
  )
27
27
  from ...serialization.serializables.core import SerializableSerializer
28
28
  from ...utils import extract_class_name, tokenize
29
- from ..operator import Fetch
30
29
  from .core import DAG
31
30
 
32
31
 
@@ -118,18 +117,22 @@ class SerializableGraph(Serializable):
118
117
  _successors = DictField("successors")
119
118
  _results = ListField("results")
120
119
  _graph_cls = StringField("graph_cls")
120
+ _extra_params = DictField("extra_params", default=None)
121
121
 
122
122
  @classmethod
123
123
  def from_graph(cls, graph: EntityGraph) -> "SerializableGraph":
124
- return SerializableGraph(
124
+ kw = dict(
125
125
  _is_chunk=False,
126
- _fetch_nodes=[chunk for chunk in graph if isinstance(chunk.op, Fetch)],
126
+ _fetch_nodes=[chunk for chunk in graph if chunk.is_fetch()],
127
127
  _nodes=graph._nodes,
128
128
  _predecessors=graph._predecessors,
129
129
  _successors=graph._successors,
130
130
  _results=graph.results,
131
131
  _graph_cls=extract_class_name(type(graph)),
132
132
  )
133
+ if hasattr(graph, "extra_params"):
134
+ kw["_extra_params"] = graph.extra_params
135
+ return SerializableGraph(**kw)
133
136
 
134
137
  def to_graph(self) -> EntityGraph:
135
138
  graph_cls = (
@@ -141,6 +144,8 @@ class SerializableGraph(Serializable):
141
144
  graph._nodes.update(self._nodes)
142
145
  graph._predecessors.update(self._predecessors)
143
146
  graph._successors.update(self._successors)
147
+ if self._extra_params:
148
+ graph.extra_params = self._extra_params
144
149
  return graph
145
150
 
146
151
 
maxframe/core/mode.py CHANGED
@@ -42,6 +42,10 @@ def is_build_mode():
42
42
  return bool(getattr(_internal_mode, "build", False))
43
43
 
44
44
 
45
+ def is_mock_mode():
46
+ return bool(getattr(_internal_mode, "mock", False))
47
+
48
+
45
49
  class _EnterModeFuncWrapper:
46
50
  def __init__(self, mode_name_to_value):
47
51
  self.mode_name_to_value = mode_name_to_value
@@ -86,10 +90,11 @@ class _EnterModeFuncWrapper:
86
90
  return _inner
87
91
 
88
92
 
89
- def enter_mode(kernel=None, build=None):
93
+ def enter_mode(kernel=None, build=None, mock=None):
90
94
  mode_name_to_value = {
91
95
  "kernel": kernel,
92
96
  "build": build,
97
+ "mock": mock,
93
98
  }
94
99
  mode_name_to_value = {k: v for k, v in mode_name_to_value.items() if v is not None}
95
100
 
@@ -40,6 +40,7 @@ from ..entity.core import ENTITY_TYPE, Entity, EntityData
40
40
  from ..entity.output_types import OutputType
41
41
  from ..entity.tileables import Tileable
42
42
  from ..mode import enter_mode
43
+ from .utils import rewrite_stop_iteration
43
44
 
44
45
 
45
46
  class OperatorMetaclass(SerializableMeta):
@@ -91,6 +92,10 @@ class SchedulingHint(Serializable):
91
92
  # id of gang scheduling for machine learning trainings
92
93
  gang_scheduling_id = StringField("gang_scheduling_id", default=None)
93
94
 
95
+ def __init__(self, *, pure_depends=None, **kwargs):
96
+ kwargs["_pure_depends"] = pure_depends or kwargs.get("_pure_depends") or []
97
+ super().__init__(**kwargs)
98
+
94
99
  @classproperty
95
100
  @lru_cache(1)
96
101
  def all_hint_names(cls):
@@ -306,7 +311,8 @@ class Operator(Base, OperatorLogicKeyGeneratorMixin, metaclass=OperatorMetaclass
306
311
  The replaced input object.
307
312
  """
308
313
  self.inputs[index] = replaced_input
309
- self._set_inputs(self, self.inputs)
314
+ with rewrite_stop_iteration():
315
+ self._set_inputs(self, self.inputs)
310
316
 
311
317
  @property
312
318
  def inputs(self) -> List[Union[ENTITY_TYPE]]:
@@ -317,7 +323,8 @@ class Operator(Base, OperatorLogicKeyGeneratorMixin, metaclass=OperatorMetaclass
317
323
 
318
324
  @inputs.setter
319
325
  def inputs(self, vals):
320
- self._set_inputs(self, vals)
326
+ with rewrite_stop_iteration():
327
+ self._set_inputs(self, vals)
321
328
 
322
329
  @property
323
330
  def output_limit(self) -> int:
@@ -18,6 +18,9 @@ from collections import defaultdict
18
18
  from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Type, Union
19
19
 
20
20
  import numpy as np
21
+ import pandas as pd
22
+
23
+ from .utils import rewrite_stop_iteration
21
24
 
22
25
  if TYPE_CHECKING:
23
26
  from .. import TileableGraph
@@ -82,7 +85,7 @@ class TileableOperatorMixin:
82
85
  nsplits = tuple(nsplits)
83
86
  shape = list(shape)
84
87
  for idx, (s, sp) in enumerate(zip(shape, nsplits)):
85
- if not np.isnan(s):
88
+ if not pd.isna(s):
86
89
  continue
87
90
  s = sum(sp)
88
91
  if not np.isnan(s):
@@ -118,11 +121,16 @@ class TileableOperatorMixin:
118
121
  def _new_tileables(
119
122
  self, inputs: List[TileableType], kws: List[dict] = None, **kw
120
123
  ) -> List[TileableType]:
124
+ assert (
125
+ isinstance(inputs, (list, tuple)) or inputs is None
126
+ ), f"{inputs} is not a list"
127
+
121
128
  output_limit = kw.pop("output_limit", None)
122
129
  if output_limit is None:
123
130
  output_limit = getattr(self, "output_limit")
124
131
 
125
- self._set_inputs(self, inputs)
132
+ with rewrite_stop_iteration():
133
+ self._set_inputs(self, inputs)
126
134
  if self.gpu is None:
127
135
  self.gpu = self._check_if_gpu(self._inputs)
128
136
  if getattr(self, "_key", None) is None:
@@ -12,6 +12,9 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ import contextlib
16
+ import sys
17
+
15
18
  from ...typing_ import EntityType, TileableType
16
19
  from ..entity import TILEABLE_TYPE
17
20
 
@@ -53,3 +56,13 @@ def build_fetch(entity: EntityType, **kw) -> EntityType:
53
56
 
54
57
  def add_fetch_builder(entity_type, builder_func):
55
58
  _type_to_builder.append((entity_type, builder_func))
59
+
60
+
61
+ @contextlib.contextmanager
62
+ def rewrite_stop_iteration():
63
+ try:
64
+ yield
65
+ except StopIteration:
66
+ raise RuntimeError("Unexpected StopIteration happened.").with_traceback(
67
+ sys.exc_info()[2]
68
+ ) from None
@@ -21,6 +21,7 @@ from . import (
21
21
  fetch,
22
22
  groupby,
23
23
  indexing,
24
+ merge,
24
25
  misc,
25
26
  missing,
26
27
  reduction,
@@ -31,6 +32,7 @@ from . import (
31
32
  window,
32
33
  )
33
34
  from .datasource.date_range import date_range
35
+ from .datasource.direct import read_clipboard
34
36
  from .datasource.from_index import series_from_index
35
37
  from .datasource.from_records import from_records
36
38
  from .datasource.from_tensor import dataframe_from_tensor, series_from_tensor
@@ -39,19 +41,18 @@ from .datasource.read_odps_query import read_odps_query
39
41
  from .datasource.read_odps_table import read_odps_table
40
42
  from .datasource.read_parquet import read_parquet
41
43
  from .datastore.to_odps import to_odps_table
42
- from .groupby import NamedAgg
43
44
  from .initializer import DataFrame, Index, Series, read_pandas
44
45
  from .merge import concat, merge
45
46
  from .misc.cut import cut
46
47
  from .misc.eval import maxframe_eval as eval # pylint: disable=redefined-builtin
47
48
  from .misc.get_dummies import get_dummies
48
- from .misc.melt import melt
49
- from .misc.pivot import pivot
50
- from .misc.pivot_table import pivot_table
51
49
  from .misc.qcut import qcut
52
50
  from .misc.to_numeric import to_numeric
53
51
  from .missing import isna, isnull, notna, notnull
54
- from .reduction import CustomReduction, unique
52
+ from .reduction import CustomReduction, NamedAgg, unique
53
+ from .reshape.melt import melt
54
+ from .reshape.pivot import pivot
55
+ from .reshape.pivot_table import pivot_table
55
56
  from .tseries.to_datetime import to_datetime
56
57
 
57
58
  try:
@@ -80,3 +81,9 @@ del (
80
81
  )
81
82
 
82
83
  from_pandas = read_pandas
84
+
85
+ # isort: off
86
+ from .typing_ import register_pandas_typing_funcs
87
+
88
+ register_pandas_typing_funcs()
89
+ del register_pandas_typing_funcs
@@ -12,4 +12,4 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- from . import datetime_, dict_, list_, plotting, string_
15
+ from . import datetime_, dict_, list_, plotting, string_, struct_
@@ -0,0 +1,45 @@
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ import logging
16
+
17
+ from ..operators import DataFrameOperator, DataFrameOperatorMixin
18
+
19
+ logger = logging.getLogger(__name__)
20
+
21
+
22
+ class LegacySeriesMethodOperator(DataFrameOperator, DataFrameOperatorMixin):
23
+ _method_name = None
24
+ _method_cls = None
25
+
26
+ def __on_deserialize__(self):
27
+ cls = type(self)
28
+ local_fields = {
29
+ f
30
+ for f, name_hash in cls._FIELD_TO_NAME_HASH.items()
31
+ if name_hash == cls._NAME_HASH
32
+ }
33
+ kw = {
34
+ f: getattr(self, f)
35
+ for f in cls._FIELD_TO_NAME_HASH
36
+ if f not in local_fields and hasattr(self, f)
37
+ }
38
+
39
+ kw["method"] = self._method_name
40
+ kw["method_kwargs"] = {
41
+ f: getattr(self, f) for f in local_fields if hasattr(self, f)
42
+ }
43
+
44
+ logger.warning(f"Using deprecated operator class {cls.__name__}")
45
+ return self._method_cls(**kw)
@@ -12,7 +12,10 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- from .core import SeriesDatetimeMethod
15
+ from .core import SeriesDatetimeMethod, datetime_method_to_handlers
16
+
17
+ methods = set(datetime_method_to_handlers.keys())
18
+ del datetime_method_to_handlers
16
19
 
17
20
 
18
21
  def _install():
@@ -16,27 +16,16 @@ import pandas as pd
16
16
  import pyarrow as pa
17
17
 
18
18
  from .... import opcodes
19
- from ....core.entity.output_types import OutputType
20
19
  from ....serialization.serializables.field import AnyField
21
- from ...operators import DataFrameOperator, DataFrameOperatorMixin
20
+ from .core import LegacySeriesDictOperator, SeriesDictMethod
22
21
 
23
22
 
24
- class SeriesDictContainsOperator(DataFrameOperator, DataFrameOperatorMixin):
23
+ class SeriesDictContainsOperator(LegacySeriesDictOperator):
24
+ # operator class deprecated since v2.3.0
25
25
  _op_type_ = opcodes.SERIES_DICT_CONTAINS
26
+ _method_name = "contains"
26
27
  query_key = AnyField("query_key", default=None)
27
28
 
28
- def __init__(self, **kw):
29
- super().__init__(_output_types=[OutputType.series], **kw)
30
-
31
- def __call__(self, series):
32
- return self.new_series(
33
- [series],
34
- shape=series.shape,
35
- dtype=pd.ArrowDtype(pa.bool_()),
36
- index_value=series.index_value,
37
- name=None,
38
- )
39
-
40
29
 
41
30
  def series_dict_contains(series, query_key):
42
31
  """
@@ -78,4 +67,6 @@ def series_dict_contains(series, query_key):
78
67
  3 <NA>
79
68
  dtype: bool[pyarrow]
80
69
  """
81
- return SeriesDictContainsOperator(query_key=query_key)(series)
70
+ return SeriesDictMethod(method="contains", method_kwargs=dict(query_key=query_key))(
71
+ series, dtype=pd.ArrowDtype(pa.bool_()), name=None
72
+ )
@@ -0,0 +1,48 @@
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from .... import opcodes
16
+ from ....core import OutputType
17
+ from ....serialization.serializables import DictField, StringField, TupleField
18
+ from ....utils import no_default
19
+ from ...operators import DataFrameOperator, DataFrameOperatorMixin
20
+ from ..compat import LegacySeriesMethodOperator
21
+
22
+
23
+ class SeriesDictMethod(DataFrameOperator, DataFrameOperatorMixin):
24
+ _op_type_ = opcodes.SERIES_DICT_METHOD
25
+
26
+ method = StringField("method", default=None)
27
+ method_args = TupleField("method_args", default_factory=list)
28
+ method_kwargs = DictField("method_kwargs", default_factory=dict)
29
+
30
+ def __init__(self, output_types=None, **kw):
31
+ output_types = output_types or [OutputType.series]
32
+ kw["_output_types"] = kw.get("_output_types") or output_types
33
+ super().__init__(**kw)
34
+
35
+ def __call__(self, inp, dtype=None, name=no_default):
36
+ dtype = dtype or inp.dtype
37
+ name = inp.name if name is no_default else name
38
+ return self.new_series(
39
+ [inp],
40
+ shape=inp.shape,
41
+ dtype=dtype,
42
+ index_value=inp.index_value,
43
+ name=name,
44
+ )
45
+
46
+
47
+ class LegacySeriesDictOperator(LegacySeriesMethodOperator):
48
+ _method_cls = SeriesDictMethod
@@ -15,30 +15,18 @@
15
15
  import pandas as pd
16
16
 
17
17
  from .... import opcodes
18
- from ....core.entity.output_types import OutputType
19
18
  from ....serialization.serializables.field import AnyField, BoolField
20
- from ...operators import DataFrameOperator, DataFrameOperatorMixin
19
+ from .core import LegacySeriesDictOperator, SeriesDictMethod
21
20
 
22
21
 
23
- class SeriesDictGetItemOperator(DataFrameOperator, DataFrameOperatorMixin):
22
+ class SeriesDictGetItemOperator(LegacySeriesDictOperator):
23
+ # operator class deprecated since v2.3.0
24
24
  _op_type_ = opcodes.SERIES_DICT_GETITEM
25
+ _method_name = "getitem"
25
26
  query_key = AnyField("query_key", default=None)
26
27
  default_value = AnyField("default_value", default=None)
27
28
  ignore_key_error = BoolField("ignore_key_error", default=False)
28
29
 
29
- def __init__(self, **kw):
30
- super().__init__(_output_types=[OutputType.series], **kw)
31
-
32
- def __call__(self, series):
33
- arrow_map_type = series.dtype.pyarrow_dtype
34
- return self.new_series(
35
- [series],
36
- shape=series.shape,
37
- dtype=pd.ArrowDtype(arrow_map_type.item_type),
38
- index_value=series.index_value,
39
- name=str(self.query_key),
40
- )
41
-
42
30
 
43
31
  def series_dict_getitem(series, query_key, default_value=None):
44
32
  """
@@ -85,9 +73,14 @@ def series_dict_getitem(series, query_key, default_value=None):
85
73
  3 <NA>
86
74
  Name: k2, dtype: int64[pyarrow]
87
75
  """
88
- return SeriesDictGetItemOperator(
76
+ method_kw = dict(
89
77
  query_key=query_key, default_value=default_value, ignore_key_error=True
90
- )(series)
78
+ )
79
+ arrow_map_type = series.dtype.pyarrow_dtype
80
+ dtype = pd.ArrowDtype(arrow_map_type.item_type)
81
+ return SeriesDictMethod(method="getitem", method_kwargs=method_kw)(
82
+ series, name=str(query_key), dtype=dtype
83
+ )
91
84
 
92
85
 
93
86
  def series_dict_getitem_with_key_error(series, query_key):
@@ -139,6 +132,9 @@ def series_dict_getitem_with_key_error(series, query_key):
139
132
  3 <NA>
140
133
  Name: k1, dtype: int64[pyarrow]
141
134
  """
142
- return SeriesDictGetItemOperator(
143
- query_key=query_key, default_value=None, ignore_key_error=False
144
- )(series)
135
+ method_kw = dict(query_key=query_key, default_value=None, ignore_key_error=False)
136
+ arrow_map_type = series.dtype.pyarrow_dtype
137
+ dtype = pd.ArrowDtype(arrow_map_type.item_type)
138
+ return SeriesDictMethod(method="getitem", method_kwargs=method_kw)(
139
+ series, name=str(query_key), dtype=dtype
140
+ )
@@ -16,24 +16,13 @@ import pandas as pd
16
16
  import pyarrow as pa
17
17
 
18
18
  from .... import opcodes
19
- from ....core.entity.output_types import OutputType
20
- from ...operators import DataFrameOperator, DataFrameOperatorMixin
19
+ from .core import LegacySeriesDictOperator, SeriesDictMethod
21
20
 
22
21
 
23
- class SeriesDictLengthOperator(DataFrameOperator, DataFrameOperatorMixin):
22
+ class SeriesDictLengthOperator(LegacySeriesDictOperator):
23
+ # operator class deprecated since v2.3.0
24
24
  _op_type_ = opcodes.SERIES_DICT_LENGTH
25
-
26
- def __init__(self, **kw):
27
- super().__init__(_output_types=[OutputType.series], **kw)
28
-
29
- def __call__(self, series):
30
- return self.new_series(
31
- [series],
32
- shape=series.shape,
33
- index_value=series.index_value,
34
- dtype=pd.ArrowDtype(pa.int64()),
35
- name=None,
36
- )
25
+ _method_name = "len"
37
26
 
38
27
 
39
28
  def series_dict_length(series):
@@ -70,4 +59,6 @@ def series_dict_length(series):
70
59
  3 <NA>
71
60
  dtype: int64[pyarrow]
72
61
  """
73
- return SeriesDictLengthOperator()(series)
62
+ return SeriesDictMethod(method="len")(
63
+ series, name=None, dtype=pd.ArrowDtype(pa.int64())
64
+ )
@@ -13,28 +13,17 @@
13
13
  # limitations under the License.
14
14
 
15
15
  from .... import opcodes
16
- from ....core.entity.output_types import OutputType
17
16
  from ....serialization.serializables.field import AnyField, BoolField
18
- from ...operators import DataFrameOperator, DataFrameOperatorMixin
17
+ from .core import LegacySeriesDictOperator, SeriesDictMethod
19
18
 
20
19
 
21
- class SeriesDictRemoveOperator(DataFrameOperator, DataFrameOperatorMixin):
20
+ class SeriesDictRemoveOperator(LegacySeriesDictOperator):
21
+ # operator class deprecated since v2.3.0
22
22
  _op_type_ = opcodes.SERIES_DICT_REMOVE
23
+ _method_name = "remove"
23
24
  query_key = AnyField("query_key", default=None)
24
25
  ignore_key_error = BoolField("ignore_key_error", default=False)
25
26
 
26
- def __init__(self, **kw):
27
- super().__init__(_output_types=[OutputType.series], **kw)
28
-
29
- def __call__(self, series):
30
- return self.new_series(
31
- [series],
32
- shape=series.shape,
33
- index_value=series.index_value,
34
- dtype=series.dtype,
35
- name=series.name,
36
- )
37
-
38
27
 
39
28
  def series_dict_remove(series, query_key, ignore_key_error: bool = False):
40
29
  """
@@ -82,6 +71,5 @@ def series_dict_remove(series, query_key, ignore_key_error: bool = False):
82
71
  3 <NA>
83
72
  dtype: map<string, int64>[pyarrow]
84
73
  """
85
- return SeriesDictRemoveOperator(
86
- query_key=query_key, ignore_key_error=ignore_key_error
87
- )(series)
74
+ method_kwargs = dict(query_key=query_key, ignore_key_error=ignore_key_error)
75
+ return SeriesDictMethod(method="remove", method_kwargs=method_kwargs)(series)
@@ -13,30 +13,18 @@
13
13
  # limitations under the License.
14
14
 
15
15
  from .... import opcodes
16
- from ....core.entity.output_types import OutputType
17
16
  from ....serialization.serializables.field import AnyField
18
17
  from ...core import TILEABLE_TYPE
19
- from ...operators import DataFrameOperator, DataFrameOperatorMixin
18
+ from .core import LegacySeriesDictOperator, SeriesDictMethod
20
19
 
21
20
 
22
- class SeriesDictSetItemOperator(DataFrameOperator, DataFrameOperatorMixin):
21
+ class SeriesDictSetItemOperator(LegacySeriesDictOperator):
22
+ # operator class deprecated since v2.3.0
23
23
  _op_type_ = opcodes.SERIES_DICT_SETITEM
24
+ _method_name = "setitem"
24
25
  query_key = AnyField("query_key", default=None)
25
26
  value = AnyField("default_value", default=None)
26
27
 
27
- def __init__(self, **kw):
28
- super().__init__(_output_types=[OutputType.series], **kw)
29
-
30
- def __call__(self, series):
31
- new_series = self.new_series(
32
- [series],
33
- shape=series.shape,
34
- index_value=series.index_value,
35
- dtype=series.dtype,
36
- name=series.name,
37
- )
38
- series.data = new_series.data
39
-
40
28
 
41
29
  def series_dict_setitem(series, query_key, value):
42
30
  """
@@ -67,7 +55,7 @@ def series_dict_setitem(series, query_key, value):
67
55
  >>> s = md.Series(
68
56
  ... data=[[("k1", 1), ("k2", 2)], [("k1", 3)], None],
69
57
  ... index=[1, 2, 3],
70
- ... dtype=map_(pa.string(), pa.int64()),
58
+ ... dtype=dict_(pa.string(), pa.int64()),
71
59
  ... )
72
60
  >>> s.execute()
73
61
  1 [('k1', 1), ('k2', 2)]
@@ -86,4 +74,6 @@ def series_dict_setitem(series, query_key, value):
86
74
  raise NotImplementedError(
87
75
  "Set the value with a dataframe/series is not allowed yet"
88
76
  )
89
- return SeriesDictSetItemOperator(query_key=query_key, value=value)(series)
77
+ method_kwargs = dict(query_key=query_key, value=value)
78
+ new_series = SeriesDictMethod(method="setitem", method_kwargs=method_kwargs)(series)
79
+ series.data = new_series.data