maxframe 1.1.1__cp39-cp39-win_amd64.whl → 1.2.1__cp39-cp39-win_amd64.whl

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

Potentially problematic release.


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

Files changed (690) hide show
  1. maxframe/__init__.py +1 -1
  2. maxframe/_utils.cp39-win_amd64.pyd +0 -0
  3. maxframe/_utils.pxd +1 -1
  4. maxframe/_utils.pyx +1 -1
  5. maxframe/codegen.py +14 -7
  6. maxframe/config/__init__.py +1 -1
  7. maxframe/config/config.py +10 -1
  8. maxframe/config/tests/__init__.py +1 -1
  9. maxframe/config/tests/test_config.py +1 -1
  10. maxframe/config/tests/test_validators.py +1 -1
  11. maxframe/config/validators.py +1 -1
  12. maxframe/conftest.py +1 -1
  13. maxframe/core/__init__.py +2 -1
  14. maxframe/core/accessor.py +44 -0
  15. maxframe/core/base.py +1 -1
  16. maxframe/core/entity/__init__.py +1 -1
  17. maxframe/core/entity/core.py +1 -1
  18. maxframe/core/entity/executable.py +1 -1
  19. maxframe/core/entity/objects.py +1 -1
  20. maxframe/core/entity/output_types.py +1 -1
  21. maxframe/core/entity/tests/__init__.py +1 -1
  22. maxframe/core/entity/tests/test_objects.py +1 -1
  23. maxframe/core/entity/tileables.py +1 -1
  24. maxframe/core/entity/utils.py +1 -1
  25. maxframe/core/graph/__init__.py +1 -1
  26. maxframe/core/graph/builder/__init__.py +1 -1
  27. maxframe/core/graph/builder/base.py +1 -1
  28. maxframe/core/graph/builder/tileable.py +1 -1
  29. maxframe/core/graph/builder/utils.py +1 -1
  30. maxframe/core/graph/core.cp39-win_amd64.pyd +0 -0
  31. maxframe/core/graph/core.pyx +1 -1
  32. maxframe/core/graph/entity.py +1 -1
  33. maxframe/core/graph/tests/__init__.py +1 -1
  34. maxframe/core/graph/tests/test_graph.py +1 -1
  35. maxframe/core/mode.py +1 -1
  36. maxframe/core/operator/__init__.py +1 -1
  37. maxframe/core/operator/base.py +1 -1
  38. maxframe/core/operator/core.py +1 -1
  39. maxframe/core/operator/fetch.py +1 -1
  40. maxframe/core/operator/objects.py +1 -1
  41. maxframe/core/operator/shuffle.py +1 -1
  42. maxframe/core/operator/tests/__init__.py +1 -1
  43. maxframe/core/operator/tests/test_core.py +1 -1
  44. maxframe/core/operator/utils.py +1 -1
  45. maxframe/core/tests/__init__.py +1 -1
  46. maxframe/core/tests/test_mode.py +1 -1
  47. maxframe/dataframe/__init__.py +3 -3
  48. maxframe/dataframe/accessors/__init__.py +15 -0
  49. maxframe/dataframe/accessors/datetime_/__init__.py +32 -0
  50. maxframe/dataframe/accessors/datetime_/accessor.py +67 -0
  51. maxframe/dataframe/{misc/datetimes.py → accessors/datetime_/core.py} +9 -9
  52. maxframe/dataframe/{plotting → accessors/datetime_}/tests/__init__.py +1 -1
  53. maxframe/dataframe/accessors/datetime_/tests/test_datetime_accessor.py +41 -0
  54. maxframe/dataframe/accessors/dict_/__init__.py +43 -0
  55. maxframe/dataframe/accessors/dict_/accessor.py +38 -0
  56. maxframe/dataframe/accessors/dict_/contains.py +81 -0
  57. maxframe/dataframe/accessors/dict_/getitem.py +144 -0
  58. maxframe/dataframe/accessors/dict_/length.py +72 -0
  59. maxframe/dataframe/accessors/dict_/remove.py +87 -0
  60. maxframe/dataframe/accessors/dict_/setitem.py +88 -0
  61. maxframe/dataframe/accessors/dict_/tests/__init__.py +13 -0
  62. maxframe/dataframe/accessors/dict_/tests/test_dict_accessor.py +130 -0
  63. maxframe/dataframe/{plotting → accessors/plotting}/__init__.py +4 -6
  64. maxframe/dataframe/{plotting → accessors/plotting}/core.py +3 -3
  65. maxframe/dataframe/accessors/plotting/tests/__init__.py +13 -0
  66. maxframe/dataframe/{plotting/tests/test_plotting.py → accessors/plotting/tests/test_plotting_accessor.py} +6 -6
  67. maxframe/dataframe/accessors/string_/__init__.py +32 -0
  68. maxframe/dataframe/{misc → accessors/string_}/accessor.py +4 -65
  69. maxframe/dataframe/{misc/string_.py → accessors/string_/core.py} +20 -20
  70. maxframe/dataframe/accessors/string_/tests/__init__.py +13 -0
  71. maxframe/dataframe/accessors/string_/tests/test_string_accessor.py +73 -0
  72. maxframe/dataframe/arithmetic/__init__.py +1 -1
  73. maxframe/dataframe/arithmetic/abs.py +1 -1
  74. maxframe/dataframe/arithmetic/add.py +1 -1
  75. maxframe/dataframe/arithmetic/arccos.py +1 -1
  76. maxframe/dataframe/arithmetic/arccosh.py +1 -1
  77. maxframe/dataframe/arithmetic/arcsin.py +1 -1
  78. maxframe/dataframe/arithmetic/arcsinh.py +1 -1
  79. maxframe/dataframe/arithmetic/arctan.py +1 -1
  80. maxframe/dataframe/arithmetic/arctanh.py +1 -1
  81. maxframe/dataframe/arithmetic/around.py +1 -1
  82. maxframe/dataframe/arithmetic/bitwise_and.py +1 -1
  83. maxframe/dataframe/arithmetic/bitwise_or.py +1 -1
  84. maxframe/dataframe/arithmetic/bitwise_xor.py +1 -1
  85. maxframe/dataframe/arithmetic/ceil.py +1 -1
  86. maxframe/dataframe/arithmetic/core.py +1 -1
  87. maxframe/dataframe/arithmetic/cos.py +1 -1
  88. maxframe/dataframe/arithmetic/cosh.py +1 -1
  89. maxframe/dataframe/arithmetic/degrees.py +1 -1
  90. maxframe/dataframe/arithmetic/docstring.py +1 -1
  91. maxframe/dataframe/arithmetic/equal.py +1 -1
  92. maxframe/dataframe/arithmetic/exp.py +1 -1
  93. maxframe/dataframe/arithmetic/exp2.py +1 -1
  94. maxframe/dataframe/arithmetic/expm1.py +1 -1
  95. maxframe/dataframe/arithmetic/floor.py +1 -1
  96. maxframe/dataframe/arithmetic/floordiv.py +1 -1
  97. maxframe/dataframe/arithmetic/greater.py +1 -1
  98. maxframe/dataframe/arithmetic/greater_equal.py +1 -1
  99. maxframe/dataframe/arithmetic/invert.py +1 -1
  100. maxframe/dataframe/arithmetic/is_ufuncs.py +1 -1
  101. maxframe/dataframe/arithmetic/less.py +1 -1
  102. maxframe/dataframe/arithmetic/less_equal.py +1 -1
  103. maxframe/dataframe/arithmetic/log.py +1 -1
  104. maxframe/dataframe/arithmetic/log10.py +1 -1
  105. maxframe/dataframe/arithmetic/log2.py +1 -1
  106. maxframe/dataframe/arithmetic/mod.py +1 -1
  107. maxframe/dataframe/arithmetic/multiply.py +1 -1
  108. maxframe/dataframe/arithmetic/negative.py +1 -1
  109. maxframe/dataframe/arithmetic/not_equal.py +1 -1
  110. maxframe/dataframe/arithmetic/power.py +1 -1
  111. maxframe/dataframe/arithmetic/radians.py +1 -1
  112. maxframe/dataframe/arithmetic/sin.py +1 -1
  113. maxframe/dataframe/arithmetic/sinh.py +1 -1
  114. maxframe/dataframe/arithmetic/sqrt.py +1 -1
  115. maxframe/dataframe/arithmetic/subtract.py +1 -1
  116. maxframe/dataframe/arithmetic/tan.py +1 -1
  117. maxframe/dataframe/arithmetic/tanh.py +1 -1
  118. maxframe/dataframe/arithmetic/tests/__init__.py +1 -1
  119. maxframe/dataframe/arithmetic/tests/test_arithmetic.py +1 -1
  120. maxframe/dataframe/arithmetic/truediv.py +1 -1
  121. maxframe/dataframe/arithmetic/trunc.py +1 -1
  122. maxframe/dataframe/arrays.py +1 -1
  123. maxframe/dataframe/core.py +1 -1
  124. maxframe/dataframe/datasource/__init__.py +1 -1
  125. maxframe/dataframe/datasource/core.py +1 -1
  126. maxframe/dataframe/datasource/dataframe.py +1 -1
  127. maxframe/dataframe/datasource/date_range.py +1 -1
  128. maxframe/dataframe/datasource/from_index.py +1 -1
  129. maxframe/dataframe/datasource/from_records.py +1 -1
  130. maxframe/dataframe/datasource/from_tensor.py +1 -1
  131. maxframe/dataframe/datasource/index.py +1 -1
  132. maxframe/dataframe/datasource/read_csv.py +1 -1
  133. maxframe/dataframe/datasource/read_odps_query.py +46 -17
  134. maxframe/dataframe/datasource/read_odps_table.py +1 -1
  135. maxframe/dataframe/datasource/read_parquet.py +1 -1
  136. maxframe/dataframe/datasource/series.py +1 -1
  137. maxframe/dataframe/datasource/tests/__init__.py +1 -1
  138. maxframe/dataframe/datasource/tests/test_datasource.py +59 -8
  139. maxframe/dataframe/datastore/__init__.py +1 -1
  140. maxframe/dataframe/datastore/core.py +1 -1
  141. maxframe/dataframe/datastore/tests/__init__.py +1 -1
  142. maxframe/dataframe/datastore/tests/test_to_odps.py +1 -1
  143. maxframe/dataframe/datastore/to_csv.py +1 -1
  144. maxframe/dataframe/datastore/to_odps.py +1 -1
  145. maxframe/dataframe/extensions/__init__.py +2 -2
  146. maxframe/dataframe/extensions/accessor.py +6 -22
  147. maxframe/dataframe/extensions/apply_chunk.py +86 -1
  148. maxframe/dataframe/extensions/flatjson.py +1 -1
  149. maxframe/dataframe/extensions/flatmap.py +1 -1
  150. maxframe/dataframe/extensions/reshuffle.py +1 -1
  151. maxframe/dataframe/extensions/tests/__init__.py +1 -1
  152. maxframe/dataframe/extensions/tests/test_apply_chunk.py +1 -1
  153. maxframe/dataframe/extensions/tests/test_extensions.py +1 -1
  154. maxframe/dataframe/fetch/__init__.py +1 -1
  155. maxframe/dataframe/fetch/core.py +1 -1
  156. maxframe/dataframe/groupby/__init__.py +1 -1
  157. maxframe/dataframe/groupby/aggregation.py +1 -1
  158. maxframe/dataframe/groupby/apply.py +1 -1
  159. maxframe/dataframe/groupby/core.py +1 -1
  160. maxframe/dataframe/groupby/cum.py +1 -1
  161. maxframe/dataframe/groupby/fill.py +1 -1
  162. maxframe/dataframe/groupby/getitem.py +1 -1
  163. maxframe/dataframe/groupby/head.py +1 -1
  164. maxframe/dataframe/groupby/sample.py +1 -1
  165. maxframe/dataframe/groupby/tests/__init__.py +1 -1
  166. maxframe/dataframe/groupby/tests/test_groupby.py +1 -1
  167. maxframe/dataframe/groupby/transform.py +1 -1
  168. maxframe/dataframe/indexing/__init__.py +1 -1
  169. maxframe/dataframe/indexing/add_prefix_suffix.py +1 -1
  170. maxframe/dataframe/indexing/align.py +1 -1
  171. maxframe/dataframe/indexing/at.py +1 -1
  172. maxframe/dataframe/indexing/getitem.py +1 -1
  173. maxframe/dataframe/indexing/iat.py +1 -1
  174. maxframe/dataframe/indexing/iloc.py +1 -1
  175. maxframe/dataframe/indexing/insert.py +1 -1
  176. maxframe/dataframe/indexing/loc.py +1 -1
  177. maxframe/dataframe/indexing/reindex.py +1 -1
  178. maxframe/dataframe/indexing/rename.py +1 -1
  179. maxframe/dataframe/indexing/rename_axis.py +1 -1
  180. maxframe/dataframe/indexing/reset_index.py +1 -1
  181. maxframe/dataframe/indexing/sample.py +1 -1
  182. maxframe/dataframe/indexing/set_axis.py +1 -1
  183. maxframe/dataframe/indexing/set_index.py +1 -1
  184. maxframe/dataframe/indexing/setitem.py +1 -1
  185. maxframe/dataframe/indexing/tests/__init__.py +1 -1
  186. maxframe/dataframe/indexing/tests/test_indexing.py +1 -1
  187. maxframe/dataframe/indexing/where.py +1 -1
  188. maxframe/dataframe/initializer.py +1 -1
  189. maxframe/dataframe/merge/__init__.py +1 -1
  190. maxframe/dataframe/merge/append.py +1 -1
  191. maxframe/dataframe/merge/concat.py +1 -1
  192. maxframe/dataframe/merge/merge.py +1 -1
  193. maxframe/dataframe/merge/tests/__init__.py +1 -1
  194. maxframe/dataframe/merge/tests/test_merge.py +1 -1
  195. maxframe/dataframe/misc/__init__.py +1 -16
  196. maxframe/dataframe/misc/_duplicate.py +1 -1
  197. maxframe/dataframe/misc/apply.py +74 -1
  198. maxframe/dataframe/misc/astype.py +1 -1
  199. maxframe/dataframe/misc/case_when.py +1 -1
  200. maxframe/dataframe/misc/check_monotonic.py +1 -1
  201. maxframe/dataframe/misc/cut.py +6 -4
  202. maxframe/dataframe/misc/describe.py +1 -1
  203. maxframe/dataframe/misc/diff.py +1 -1
  204. maxframe/dataframe/misc/drop.py +1 -1
  205. maxframe/dataframe/misc/drop_duplicates.py +7 -4
  206. maxframe/dataframe/misc/duplicated.py +1 -1
  207. maxframe/dataframe/misc/eval.py +1 -1
  208. maxframe/dataframe/misc/explode.py +1 -1
  209. maxframe/dataframe/misc/get_dummies.py +1 -1
  210. maxframe/dataframe/misc/isin.py +1 -1
  211. maxframe/dataframe/misc/map.py +1 -1
  212. maxframe/dataframe/misc/melt.py +1 -1
  213. maxframe/dataframe/misc/memory_usage.py +1 -1
  214. maxframe/dataframe/misc/pct_change.py +1 -1
  215. maxframe/dataframe/misc/pivot_table.py +1 -1
  216. maxframe/dataframe/misc/qcut.py +1 -1
  217. maxframe/dataframe/misc/select_dtypes.py +1 -1
  218. maxframe/dataframe/misc/shift.py +1 -1
  219. maxframe/dataframe/misc/stack.py +1 -1
  220. maxframe/dataframe/misc/tests/__init__.py +1 -1
  221. maxframe/dataframe/misc/tests/test_misc.py +1 -76
  222. maxframe/dataframe/misc/to_numeric.py +1 -1
  223. maxframe/dataframe/misc/transform.py +1 -1
  224. maxframe/dataframe/misc/transpose.py +1 -1
  225. maxframe/dataframe/misc/value_counts.py +1 -1
  226. maxframe/dataframe/missing/__init__.py +1 -1
  227. maxframe/dataframe/missing/checkna.py +1 -1
  228. maxframe/dataframe/missing/dropna.py +1 -1
  229. maxframe/dataframe/missing/fillna.py +1 -1
  230. maxframe/dataframe/missing/replace.py +1 -1
  231. maxframe/dataframe/missing/tests/__init__.py +1 -1
  232. maxframe/dataframe/missing/tests/test_missing.py +1 -1
  233. maxframe/dataframe/operators.py +1 -1
  234. maxframe/dataframe/reduction/__init__.py +1 -1
  235. maxframe/dataframe/reduction/aggregation.py +1 -1
  236. maxframe/dataframe/reduction/all.py +1 -1
  237. maxframe/dataframe/reduction/any.py +1 -1
  238. maxframe/dataframe/reduction/core.py +1 -1
  239. maxframe/dataframe/reduction/count.py +1 -1
  240. maxframe/dataframe/reduction/cummax.py +1 -1
  241. maxframe/dataframe/reduction/cummin.py +1 -1
  242. maxframe/dataframe/reduction/cumprod.py +1 -1
  243. maxframe/dataframe/reduction/cumsum.py +1 -1
  244. maxframe/dataframe/reduction/custom_reduction.py +1 -1
  245. maxframe/dataframe/reduction/kurtosis.py +1 -1
  246. maxframe/dataframe/reduction/max.py +1 -1
  247. maxframe/dataframe/reduction/mean.py +1 -1
  248. maxframe/dataframe/reduction/median.py +1 -1
  249. maxframe/dataframe/reduction/min.py +1 -1
  250. maxframe/dataframe/reduction/nunique.py +1 -1
  251. maxframe/dataframe/reduction/prod.py +1 -1
  252. maxframe/dataframe/reduction/reduction_size.py +1 -1
  253. maxframe/dataframe/reduction/sem.py +1 -1
  254. maxframe/dataframe/reduction/skew.py +1 -1
  255. maxframe/dataframe/reduction/std.py +1 -1
  256. maxframe/dataframe/reduction/str_concat.py +1 -1
  257. maxframe/dataframe/reduction/sum.py +1 -1
  258. maxframe/dataframe/reduction/tests/__init__.py +1 -1
  259. maxframe/dataframe/reduction/tests/test_reduction.py +1 -1
  260. maxframe/dataframe/reduction/unique.py +1 -1
  261. maxframe/dataframe/reduction/var.py +1 -1
  262. maxframe/dataframe/sort/__init__.py +1 -1
  263. maxframe/dataframe/sort/core.py +1 -1
  264. maxframe/dataframe/sort/sort_index.py +1 -1
  265. maxframe/dataframe/sort/sort_values.py +1 -1
  266. maxframe/dataframe/sort/tests/__init__.py +1 -1
  267. maxframe/dataframe/sort/tests/test_sort.py +1 -1
  268. maxframe/dataframe/statistics/__init__.py +1 -1
  269. maxframe/dataframe/statistics/corr.py +1 -1
  270. maxframe/dataframe/statistics/quantile.py +1 -1
  271. maxframe/dataframe/statistics/tests/__init__.py +1 -1
  272. maxframe/dataframe/statistics/tests/test_statistics.py +1 -1
  273. maxframe/dataframe/tests/__init__.py +1 -1
  274. maxframe/dataframe/tests/test_initializer.py +1 -1
  275. maxframe/dataframe/tests/test_utils.py +36 -2
  276. maxframe/dataframe/tseries/__init__.py +1 -1
  277. maxframe/dataframe/tseries/tests/__init__.py +1 -1
  278. maxframe/dataframe/tseries/tests/test_tseries.py +1 -1
  279. maxframe/dataframe/tseries/to_datetime.py +1 -1
  280. maxframe/dataframe/ufunc/__init__.py +1 -1
  281. maxframe/dataframe/ufunc/tensor.py +1 -1
  282. maxframe/dataframe/ufunc/ufunc.py +1 -1
  283. maxframe/dataframe/utils.py +22 -2
  284. maxframe/dataframe/window/__init__.py +1 -1
  285. maxframe/dataframe/window/aggregation.py +1 -1
  286. maxframe/dataframe/window/core.py +1 -1
  287. maxframe/dataframe/window/ewm.py +1 -1
  288. maxframe/dataframe/window/expanding.py +1 -1
  289. maxframe/dataframe/window/rolling.py +1 -1
  290. maxframe/dataframe/window/tests/__init__.py +1 -1
  291. maxframe/dataframe/window/tests/test_ewm.py +1 -1
  292. maxframe/dataframe/window/tests/test_expanding.py +1 -1
  293. maxframe/dataframe/window/tests/test_rolling.py +1 -1
  294. maxframe/env.py +1 -1
  295. maxframe/errors.py +5 -1
  296. maxframe/extension.py +5 -2
  297. maxframe/io/__init__.py +1 -1
  298. maxframe/io/objects/__init__.py +1 -1
  299. maxframe/io/objects/core.py +1 -1
  300. maxframe/io/objects/tensor.py +1 -1
  301. maxframe/io/objects/tests/__init__.py +1 -1
  302. maxframe/io/objects/tests/test_object_io.py +1 -1
  303. maxframe/io/odpsio/__init__.py +1 -1
  304. maxframe/io/odpsio/arrow.py +8 -4
  305. maxframe/io/odpsio/schema.py +75 -3
  306. maxframe/io/odpsio/tableio.py +10 -4
  307. maxframe/io/odpsio/tests/__init__.py +1 -1
  308. maxframe/io/odpsio/tests/test_arrow.py +46 -1
  309. maxframe/io/odpsio/tests/test_schema.py +19 -1
  310. maxframe/io/odpsio/tests/test_tableio.py +1 -1
  311. maxframe/io/odpsio/tests/test_volumeio.py +1 -1
  312. maxframe/io/odpsio/volumeio.py +1 -1
  313. maxframe/learn/__init__.py +1 -1
  314. maxframe/learn/contrib/__init__.py +1 -1
  315. maxframe/learn/contrib/graph/__init__.py +1 -1
  316. maxframe/learn/contrib/graph/connected_components.py +1 -1
  317. maxframe/learn/contrib/graph/tests/__init__.py +1 -1
  318. maxframe/learn/contrib/graph/tests/test_connected_components.py +1 -1
  319. maxframe/learn/contrib/llm/__init__.py +1 -1
  320. maxframe/learn/contrib/llm/core.py +1 -1
  321. maxframe/learn/contrib/llm/models/__init__.py +1 -1
  322. maxframe/learn/contrib/llm/models/dashscope.py +1 -1
  323. maxframe/learn/contrib/llm/multi_modal.py +1 -1
  324. maxframe/learn/contrib/llm/text.py +1 -1
  325. maxframe/learn/contrib/pytorch/__init__.py +1 -1
  326. maxframe/learn/contrib/pytorch/run_function.py +1 -1
  327. maxframe/learn/contrib/pytorch/run_script.py +1 -1
  328. maxframe/learn/contrib/pytorch/tests/__init__.py +1 -1
  329. maxframe/learn/contrib/pytorch/tests/test_pytorch.py +1 -1
  330. maxframe/learn/contrib/utils.py +1 -1
  331. maxframe/learn/contrib/xgboost/__init__.py +1 -1
  332. maxframe/learn/contrib/xgboost/classifier.py +1 -1
  333. maxframe/learn/contrib/xgboost/core.py +1 -1
  334. maxframe/learn/contrib/xgboost/dmatrix.py +5 -2
  335. maxframe/learn/contrib/xgboost/predict.py +1 -1
  336. maxframe/learn/contrib/xgboost/regressor.py +1 -1
  337. maxframe/learn/contrib/xgboost/tests/__init__.py +1 -1
  338. maxframe/learn/contrib/xgboost/tests/test_core.py +1 -1
  339. maxframe/learn/contrib/xgboost/train.py +1 -1
  340. maxframe/learn/core.py +1 -1
  341. maxframe/learn/utils/__init__.py +1 -1
  342. maxframe/learn/utils/core.py +1 -1
  343. maxframe/lib/__init__.py +1 -1
  344. maxframe/lib/aio/__init__.py +1 -1
  345. maxframe/lib/aio/_runners.py +1 -1
  346. maxframe/lib/aio/_threads.py +1 -1
  347. maxframe/lib/aio/base.py +1 -1
  348. maxframe/lib/aio/file.py +1 -1
  349. maxframe/lib/aio/isolation.py +1 -1
  350. maxframe/lib/aio/lru.py +1 -1
  351. maxframe/lib/aio/parallelism.py +1 -1
  352. maxframe/lib/aio/tests/__init__.py +1 -1
  353. maxframe/lib/aio/tests/test_aio_file.py +1 -1
  354. maxframe/lib/compression.py +1 -1
  355. maxframe/lib/cython/__init__.py +1 -1
  356. maxframe/lib/cython/libcpp.pxd +1 -1
  357. maxframe/lib/dtypes_extension/__init__.py +14 -0
  358. maxframe/lib/dtypes_extension/dtypes.py +45 -0
  359. maxframe/lib/dtypes_extension/tests/__init__.py +13 -0
  360. maxframe/lib/dtypes_extension/tests/test_dtypes.py +38 -0
  361. maxframe/lib/filesystem/__init__.py +1 -1
  362. maxframe/lib/filesystem/_glob.py +1 -1
  363. maxframe/lib/filesystem/_oss_lib/__init__.py +1 -1
  364. maxframe/lib/filesystem/_oss_lib/common.py +1 -1
  365. maxframe/lib/filesystem/_oss_lib/glob.py +1 -1
  366. maxframe/lib/filesystem/_oss_lib/handle.py +1 -1
  367. maxframe/lib/filesystem/arrow.py +1 -1
  368. maxframe/lib/filesystem/base.py +1 -1
  369. maxframe/lib/filesystem/core.py +1 -1
  370. maxframe/lib/filesystem/fsmap.py +1 -1
  371. maxframe/lib/filesystem/hdfs.py +1 -1
  372. maxframe/lib/filesystem/local.py +1 -1
  373. maxframe/lib/filesystem/oss.py +1 -1
  374. maxframe/lib/filesystem/tests/__init__.py +1 -1
  375. maxframe/lib/filesystem/tests/test_filesystem.py +6 -4
  376. maxframe/lib/filesystem/tests/test_oss.py +1 -1
  377. maxframe/lib/functools_compat.py +1 -1
  378. maxframe/lib/mmh3.cp39-win_amd64.pyd +0 -0
  379. maxframe/lib/mmh3.pyi +1 -1
  380. maxframe/lib/sparse/__init__.py +1 -1
  381. maxframe/lib/sparse/array.py +1 -1
  382. maxframe/lib/sparse/core.py +1 -1
  383. maxframe/lib/sparse/matrix.py +1 -1
  384. maxframe/lib/sparse/tests/__init__.py +1 -1
  385. maxframe/lib/sparse/tests/test_sparse.py +1 -1
  386. maxframe/lib/sparse/vector.py +1 -1
  387. maxframe/lib/tests/__init__.py +1 -1
  388. maxframe/lib/tests/test_wrapped_pickle.py +1 -1
  389. maxframe/lib/version.py +1 -1
  390. maxframe/lib/wrapped_pickle.py +1 -1
  391. maxframe/mixin.py +1 -1
  392. maxframe/opcodes.py +6 -1
  393. maxframe/protocol.py +1 -1
  394. maxframe/remote/__init__.py +1 -1
  395. maxframe/remote/core.py +1 -1
  396. maxframe/remote/run_script.py +1 -1
  397. maxframe/serialization/__init__.py +1 -1
  398. maxframe/serialization/arrow.py +1 -1
  399. maxframe/serialization/core.cp39-win_amd64.pyd +0 -0
  400. maxframe/serialization/core.pxd +1 -1
  401. maxframe/serialization/core.pyi +1 -1
  402. maxframe/serialization/core.pyx +9 -6
  403. maxframe/serialization/exception.py +1 -1
  404. maxframe/serialization/maxframe_objects.py +1 -1
  405. maxframe/serialization/numpy.py +1 -1
  406. maxframe/serialization/pandas.py +1 -1
  407. maxframe/serialization/scipy.py +1 -1
  408. maxframe/serialization/serializables/__init__.py +1 -1
  409. maxframe/serialization/serializables/core.py +95 -90
  410. maxframe/serialization/serializables/field.py +1 -1
  411. maxframe/serialization/serializables/field_type.py +1 -1
  412. maxframe/serialization/serializables/tests/__init__.py +1 -1
  413. maxframe/serialization/serializables/tests/test_field_type.py +1 -1
  414. maxframe/serialization/serializables/tests/test_serializable.py +1 -1
  415. maxframe/serialization/tests/__init__.py +1 -1
  416. maxframe/serialization/tests/test_serial.py +21 -3
  417. maxframe/session.py +1 -1
  418. maxframe/tensor/__init__.py +1 -1
  419. maxframe/tensor/arithmetic/__init__.py +1 -1
  420. maxframe/tensor/arithmetic/abs.py +1 -1
  421. maxframe/tensor/arithmetic/absolute.py +1 -1
  422. maxframe/tensor/arithmetic/add.py +1 -1
  423. maxframe/tensor/arithmetic/angle.py +1 -1
  424. maxframe/tensor/arithmetic/arccos.py +1 -1
  425. maxframe/tensor/arithmetic/arccosh.py +1 -1
  426. maxframe/tensor/arithmetic/arcsin.py +1 -1
  427. maxframe/tensor/arithmetic/arcsinh.py +1 -1
  428. maxframe/tensor/arithmetic/arctan.py +1 -1
  429. maxframe/tensor/arithmetic/arctan2.py +1 -1
  430. maxframe/tensor/arithmetic/arctanh.py +1 -1
  431. maxframe/tensor/arithmetic/around.py +1 -1
  432. maxframe/tensor/arithmetic/bitand.py +1 -1
  433. maxframe/tensor/arithmetic/bitor.py +1 -1
  434. maxframe/tensor/arithmetic/bitxor.py +1 -1
  435. maxframe/tensor/arithmetic/cbrt.py +1 -1
  436. maxframe/tensor/arithmetic/ceil.py +1 -1
  437. maxframe/tensor/arithmetic/clip.py +1 -1
  438. maxframe/tensor/arithmetic/conj.py +1 -1
  439. maxframe/tensor/arithmetic/copysign.py +1 -1
  440. maxframe/tensor/arithmetic/core.py +1 -1
  441. maxframe/tensor/arithmetic/cos.py +1 -1
  442. maxframe/tensor/arithmetic/cosh.py +1 -1
  443. maxframe/tensor/arithmetic/deg2rad.py +1 -1
  444. maxframe/tensor/arithmetic/degrees.py +1 -1
  445. maxframe/tensor/arithmetic/divide.py +1 -1
  446. maxframe/tensor/arithmetic/equal.py +1 -1
  447. maxframe/tensor/arithmetic/exp.py +1 -1
  448. maxframe/tensor/arithmetic/exp2.py +1 -1
  449. maxframe/tensor/arithmetic/expm1.py +1 -1
  450. maxframe/tensor/arithmetic/fabs.py +1 -1
  451. maxframe/tensor/arithmetic/fix.py +1 -1
  452. maxframe/tensor/arithmetic/float_power.py +1 -1
  453. maxframe/tensor/arithmetic/floor.py +1 -1
  454. maxframe/tensor/arithmetic/floordiv.py +1 -1
  455. maxframe/tensor/arithmetic/fmax.py +1 -1
  456. maxframe/tensor/arithmetic/fmin.py +1 -1
  457. maxframe/tensor/arithmetic/fmod.py +1 -1
  458. maxframe/tensor/arithmetic/frexp.py +1 -1
  459. maxframe/tensor/arithmetic/greater.py +1 -1
  460. maxframe/tensor/arithmetic/greater_equal.py +1 -1
  461. maxframe/tensor/arithmetic/hypot.py +1 -1
  462. maxframe/tensor/arithmetic/i0.py +1 -1
  463. maxframe/tensor/arithmetic/imag.py +1 -1
  464. maxframe/tensor/arithmetic/invert.py +1 -1
  465. maxframe/tensor/arithmetic/isclose.py +1 -1
  466. maxframe/tensor/arithmetic/iscomplex.py +1 -1
  467. maxframe/tensor/arithmetic/isfinite.py +1 -1
  468. maxframe/tensor/arithmetic/isinf.py +1 -1
  469. maxframe/tensor/arithmetic/isnan.py +1 -1
  470. maxframe/tensor/arithmetic/isreal.py +1 -1
  471. maxframe/tensor/arithmetic/ldexp.py +1 -1
  472. maxframe/tensor/arithmetic/less.py +1 -1
  473. maxframe/tensor/arithmetic/less_equal.py +1 -1
  474. maxframe/tensor/arithmetic/log.py +1 -1
  475. maxframe/tensor/arithmetic/log10.py +1 -1
  476. maxframe/tensor/arithmetic/log1p.py +1 -1
  477. maxframe/tensor/arithmetic/log2.py +1 -1
  478. maxframe/tensor/arithmetic/logaddexp.py +1 -1
  479. maxframe/tensor/arithmetic/logaddexp2.py +1 -1
  480. maxframe/tensor/arithmetic/logical_and.py +1 -1
  481. maxframe/tensor/arithmetic/logical_not.py +1 -1
  482. maxframe/tensor/arithmetic/logical_or.py +1 -1
  483. maxframe/tensor/arithmetic/logical_xor.py +1 -1
  484. maxframe/tensor/arithmetic/lshift.py +1 -1
  485. maxframe/tensor/arithmetic/maximum.py +1 -1
  486. maxframe/tensor/arithmetic/minimum.py +1 -1
  487. maxframe/tensor/arithmetic/mod.py +1 -1
  488. maxframe/tensor/arithmetic/modf.py +1 -1
  489. maxframe/tensor/arithmetic/multiply.py +1 -1
  490. maxframe/tensor/arithmetic/nan_to_num.py +1 -1
  491. maxframe/tensor/arithmetic/negative.py +1 -1
  492. maxframe/tensor/arithmetic/nextafter.py +1 -1
  493. maxframe/tensor/arithmetic/not_equal.py +1 -1
  494. maxframe/tensor/arithmetic/positive.py +1 -1
  495. maxframe/tensor/arithmetic/power.py +1 -1
  496. maxframe/tensor/arithmetic/rad2deg.py +1 -1
  497. maxframe/tensor/arithmetic/radians.py +1 -1
  498. maxframe/tensor/arithmetic/real.py +1 -1
  499. maxframe/tensor/arithmetic/reciprocal.py +1 -1
  500. maxframe/tensor/arithmetic/rint.py +1 -1
  501. maxframe/tensor/arithmetic/rshift.py +1 -1
  502. maxframe/tensor/arithmetic/setimag.py +1 -1
  503. maxframe/tensor/arithmetic/setreal.py +1 -1
  504. maxframe/tensor/arithmetic/sign.py +1 -1
  505. maxframe/tensor/arithmetic/signbit.py +1 -1
  506. maxframe/tensor/arithmetic/sin.py +1 -1
  507. maxframe/tensor/arithmetic/sinc.py +1 -1
  508. maxframe/tensor/arithmetic/sinh.py +1 -1
  509. maxframe/tensor/arithmetic/spacing.py +1 -1
  510. maxframe/tensor/arithmetic/sqrt.py +1 -1
  511. maxframe/tensor/arithmetic/square.py +1 -1
  512. maxframe/tensor/arithmetic/subtract.py +1 -1
  513. maxframe/tensor/arithmetic/tan.py +1 -1
  514. maxframe/tensor/arithmetic/tanh.py +1 -1
  515. maxframe/tensor/arithmetic/tests/__init__.py +1 -1
  516. maxframe/tensor/arithmetic/tests/test_arithmetic.py +1 -1
  517. maxframe/tensor/arithmetic/truediv.py +1 -1
  518. maxframe/tensor/arithmetic/trunc.py +1 -1
  519. maxframe/tensor/arithmetic/utils.py +1 -1
  520. maxframe/tensor/array_utils.py +1 -1
  521. maxframe/tensor/core.py +1 -1
  522. maxframe/tensor/datasource/__init__.py +1 -1
  523. maxframe/tensor/datasource/arange.py +1 -1
  524. maxframe/tensor/datasource/array.py +1 -1
  525. maxframe/tensor/datasource/core.py +1 -1
  526. maxframe/tensor/datasource/empty.py +1 -1
  527. maxframe/tensor/datasource/from_dataframe.py +1 -1
  528. maxframe/tensor/datasource/from_dense.py +1 -1
  529. maxframe/tensor/datasource/from_sparse.py +1 -1
  530. maxframe/tensor/datasource/full.py +1 -1
  531. maxframe/tensor/datasource/ones.py +1 -1
  532. maxframe/tensor/datasource/scalar.py +1 -1
  533. maxframe/tensor/datasource/tests/__init__.py +1 -1
  534. maxframe/tensor/datasource/tests/test_datasource.py +1 -1
  535. maxframe/tensor/datasource/zeros.py +1 -1
  536. maxframe/tensor/fetch/__init__.py +1 -1
  537. maxframe/tensor/fetch/core.py +1 -1
  538. maxframe/tensor/indexing/__init__.py +1 -1
  539. maxframe/tensor/indexing/choose.py +1 -1
  540. maxframe/tensor/indexing/compress.py +1 -1
  541. maxframe/tensor/indexing/core.py +1 -1
  542. maxframe/tensor/indexing/extract.py +1 -1
  543. maxframe/tensor/indexing/fill_diagonal.py +1 -1
  544. maxframe/tensor/indexing/flatnonzero.py +1 -1
  545. maxframe/tensor/indexing/getitem.py +1 -1
  546. maxframe/tensor/indexing/nonzero.py +1 -1
  547. maxframe/tensor/indexing/setitem.py +1 -1
  548. maxframe/tensor/indexing/slice.py +1 -1
  549. maxframe/tensor/indexing/take.py +1 -1
  550. maxframe/tensor/indexing/tests/__init__.py +1 -1
  551. maxframe/tensor/indexing/tests/test_indexing.py +1 -1
  552. maxframe/tensor/indexing/unravel_index.py +1 -1
  553. maxframe/tensor/merge/__init__.py +1 -1
  554. maxframe/tensor/merge/concatenate.py +1 -1
  555. maxframe/tensor/merge/stack.py +1 -1
  556. maxframe/tensor/merge/tests/__init__.py +1 -1
  557. maxframe/tensor/merge/tests/test_merge.py +1 -1
  558. maxframe/tensor/merge/vstack.py +1 -1
  559. maxframe/tensor/misc/__init__.py +1 -1
  560. maxframe/tensor/misc/astype.py +1 -1
  561. maxframe/tensor/misc/atleast_1d.py +1 -1
  562. maxframe/tensor/misc/atleast_2d.py +1 -1
  563. maxframe/tensor/misc/atleast_3d.py +1 -1
  564. maxframe/tensor/misc/broadcast_to.py +1 -1
  565. maxframe/tensor/misc/ravel.py +1 -1
  566. maxframe/tensor/misc/tests/__init__.py +1 -1
  567. maxframe/tensor/misc/tests/test_misc.py +1 -1
  568. maxframe/tensor/misc/transpose.py +1 -1
  569. maxframe/tensor/misc/unique.py +1 -1
  570. maxframe/tensor/misc/where.py +1 -1
  571. maxframe/tensor/operators.py +1 -1
  572. maxframe/tensor/random/__init__.py +1 -1
  573. maxframe/tensor/random/beta.py +1 -1
  574. maxframe/tensor/random/binomial.py +1 -1
  575. maxframe/tensor/random/bytes.py +1 -1
  576. maxframe/tensor/random/chisquare.py +1 -1
  577. maxframe/tensor/random/choice.py +1 -1
  578. maxframe/tensor/random/core.py +1 -1
  579. maxframe/tensor/random/dirichlet.py +1 -1
  580. maxframe/tensor/random/exponential.py +1 -1
  581. maxframe/tensor/random/f.py +1 -1
  582. maxframe/tensor/random/gamma.py +1 -1
  583. maxframe/tensor/random/geometric.py +1 -1
  584. maxframe/tensor/random/gumbel.py +1 -1
  585. maxframe/tensor/random/hypergeometric.py +1 -1
  586. maxframe/tensor/random/laplace.py +1 -1
  587. maxframe/tensor/random/logistic.py +1 -1
  588. maxframe/tensor/random/lognormal.py +1 -1
  589. maxframe/tensor/random/logseries.py +1 -1
  590. maxframe/tensor/random/multinomial.py +1 -1
  591. maxframe/tensor/random/multivariate_normal.py +1 -1
  592. maxframe/tensor/random/negative_binomial.py +1 -1
  593. maxframe/tensor/random/noncentral_chisquare.py +1 -1
  594. maxframe/tensor/random/noncentral_f.py +1 -1
  595. maxframe/tensor/random/normal.py +1 -1
  596. maxframe/tensor/random/pareto.py +1 -1
  597. maxframe/tensor/random/permutation.py +1 -1
  598. maxframe/tensor/random/poisson.py +1 -1
  599. maxframe/tensor/random/power.py +1 -1
  600. maxframe/tensor/random/rand.py +1 -1
  601. maxframe/tensor/random/randint.py +1 -1
  602. maxframe/tensor/random/randn.py +1 -1
  603. maxframe/tensor/random/random_integers.py +1 -1
  604. maxframe/tensor/random/random_sample.py +1 -1
  605. maxframe/tensor/random/rayleigh.py +1 -1
  606. maxframe/tensor/random/shuffle.py +1 -1
  607. maxframe/tensor/random/standard_cauchy.py +1 -1
  608. maxframe/tensor/random/standard_exponential.py +1 -1
  609. maxframe/tensor/random/standard_gamma.py +1 -1
  610. maxframe/tensor/random/standard_normal.py +1 -1
  611. maxframe/tensor/random/standard_t.py +1 -1
  612. maxframe/tensor/random/tests/__init__.py +1 -1
  613. maxframe/tensor/random/tests/test_random.py +1 -1
  614. maxframe/tensor/random/triangular.py +1 -1
  615. maxframe/tensor/random/uniform.py +1 -1
  616. maxframe/tensor/random/vonmises.py +1 -1
  617. maxframe/tensor/random/wald.py +1 -1
  618. maxframe/tensor/random/weibull.py +1 -1
  619. maxframe/tensor/random/zipf.py +1 -1
  620. maxframe/tensor/rechunk/__init__.py +1 -1
  621. maxframe/tensor/rechunk/rechunk.py +1 -1
  622. maxframe/tensor/reduction/__init__.py +1 -1
  623. maxframe/tensor/reduction/all.py +1 -1
  624. maxframe/tensor/reduction/allclose.py +1 -1
  625. maxframe/tensor/reduction/any.py +1 -1
  626. maxframe/tensor/reduction/argmax.py +1 -1
  627. maxframe/tensor/reduction/argmin.py +1 -1
  628. maxframe/tensor/reduction/array_equal.py +1 -1
  629. maxframe/tensor/reduction/core.py +1 -1
  630. maxframe/tensor/reduction/count_nonzero.py +1 -1
  631. maxframe/tensor/reduction/cumprod.py +1 -1
  632. maxframe/tensor/reduction/cumsum.py +1 -1
  633. maxframe/tensor/reduction/max.py +1 -1
  634. maxframe/tensor/reduction/mean.py +1 -1
  635. maxframe/tensor/reduction/min.py +1 -1
  636. maxframe/tensor/reduction/nanargmax.py +1 -1
  637. maxframe/tensor/reduction/nanargmin.py +1 -1
  638. maxframe/tensor/reduction/nancumprod.py +1 -1
  639. maxframe/tensor/reduction/nancumsum.py +1 -1
  640. maxframe/tensor/reduction/nanmax.py +1 -1
  641. maxframe/tensor/reduction/nanmean.py +1 -1
  642. maxframe/tensor/reduction/nanmin.py +1 -1
  643. maxframe/tensor/reduction/nanprod.py +1 -1
  644. maxframe/tensor/reduction/nanstd.py +1 -1
  645. maxframe/tensor/reduction/nansum.py +1 -1
  646. maxframe/tensor/reduction/nanvar.py +1 -1
  647. maxframe/tensor/reduction/prod.py +1 -1
  648. maxframe/tensor/reduction/std.py +1 -1
  649. maxframe/tensor/reduction/sum.py +1 -1
  650. maxframe/tensor/reduction/tests/__init__.py +1 -1
  651. maxframe/tensor/reduction/tests/test_reduction.py +1 -1
  652. maxframe/tensor/reduction/var.py +1 -1
  653. maxframe/tensor/reshape/__init__.py +1 -1
  654. maxframe/tensor/reshape/reshape.py +1 -1
  655. maxframe/tensor/reshape/tests/__init__.py +1 -1
  656. maxframe/tensor/reshape/tests/test_reshape.py +1 -1
  657. maxframe/tensor/statistics/__init__.py +1 -1
  658. maxframe/tensor/statistics/percentile.py +1 -1
  659. maxframe/tensor/statistics/quantile.py +1 -1
  660. maxframe/tensor/ufunc/__init__.py +1 -1
  661. maxframe/tensor/ufunc/ufunc.py +1 -1
  662. maxframe/tensor/utils.py +1 -1
  663. maxframe/tests/__init__.py +1 -1
  664. maxframe/tests/test_codegen.py +1 -1
  665. maxframe/tests/test_protocol.py +1 -1
  666. maxframe/tests/test_utils.py +1 -1
  667. maxframe/tests/utils.py +1 -1
  668. maxframe/typing_.py +1 -1
  669. maxframe/udf.py +6 -1
  670. maxframe/utils.py +8 -1
  671. {maxframe-1.1.1.dist-info → maxframe-1.2.1.dist-info}/METADATA +3 -2
  672. maxframe-1.2.1.dist-info/RECORD +697 -0
  673. {maxframe-1.1.1.dist-info → maxframe-1.2.1.dist-info}/WHEEL +1 -1
  674. maxframe_client/__init__.py +1 -1
  675. maxframe_client/clients/__init__.py +1 -1
  676. maxframe_client/clients/framedriver.py +1 -1
  677. maxframe_client/conftest.py +1 -1
  678. maxframe_client/fetcher.py +1 -1
  679. maxframe_client/session/__init__.py +1 -1
  680. maxframe_client/session/consts.py +1 -1
  681. maxframe_client/session/graph.py +1 -1
  682. maxframe_client/session/odps.py +2 -1
  683. maxframe_client/session/task.py +1 -1
  684. maxframe_client/session/tests/__init__.py +1 -1
  685. maxframe_client/session/tests/test_task.py +1 -1
  686. maxframe_client/tests/__init__.py +1 -1
  687. maxframe_client/tests/test_fetcher.py +1 -1
  688. maxframe_client/tests/test_session.py +1 -1
  689. maxframe-1.1.1.dist-info/RECORD +0 -675
  690. {maxframe-1.1.1.dist-info → maxframe-1.2.1.dist-info}/top_level.txt +0 -0
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
3
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
6
6
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
3
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
6
6
  # you may not use this file except in compliance with the License.
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
3
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
6
6
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
3
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
6
6
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -21,6 +21,7 @@ import numpy as np
21
21
  import pandas as pd
22
22
  from odps import ODPS
23
23
  from odps.types import Column, OdpsSchema, validate_data_type
24
+ from odps.utils import split_sql_by_semicolon
24
25
 
25
26
  from ... import opcodes
26
27
  from ...config import options
@@ -163,6 +164,12 @@ def _resolve_task_sector(job_name: str, sector: str) -> TaskSector:
163
164
  return TaskSector(job_name, task_name, out_target, schemas)
164
165
 
165
166
 
167
+ def _select_task_prefix(sector: TasksSector, prefix: str) -> List[TaskSector]:
168
+ if prefix in sector.tasks:
169
+ return [sector.tasks[prefix]]
170
+ return [v for k, v in sector.tasks.items() if k.startswith(prefix + "_")]
171
+
172
+
166
173
  def _parse_full_explain(explain_string: str) -> OdpsSchema:
167
174
  sectors = _split_explain_string(explain_string)
168
175
  jobs_sector = tasks_sector = None
@@ -187,18 +194,18 @@ def _parse_full_explain(explain_string: str) -> OdpsSchema:
187
194
  task_dag = tasks_sector.build_dag()
188
195
  indep_task_names = list(task_dag.iter_indep(reverse=True))
189
196
  for task_name in indep_task_names:
190
- task_sector = tasks_sector.tasks[task_name]
191
- if not task_sector.schema: # pragma: no cover
192
- raise ValueError("Cannot detect output schema")
193
- if task_sector.output_target != "Screen":
194
- raise ValueError("The SQL statement should be an instant query")
195
- sig_tuples = sorted(
196
- [
197
- (c.column_alias or c.column_name, c.column_type)
198
- for c in task_sector.schema
199
- ]
200
- )
201
- schema_signatures[hash(tuple(sig_tuples))] = task_sector.schema
197
+ for task_sector in _select_task_prefix(tasks_sector, task_name):
198
+ if not task_sector.schema: # pragma: no cover
199
+ raise ValueError("Cannot detect output schema")
200
+ if task_sector.output_target != "Screen":
201
+ raise ValueError("The SQL statement should be an instant query")
202
+ sig_tuples = sorted(
203
+ [
204
+ (c.column_alias or c.column_name, c.column_type)
205
+ for c in task_sector.schema
206
+ ]
207
+ )
208
+ schema_signatures[hash(tuple(sig_tuples))] = task_sector.schema
202
209
  if len(schema_signatures) != 1:
203
210
  raise ValueError("Only one final task is allowed in SQL statement")
204
211
  schema = list(schema_signatures.values())[0]
@@ -228,6 +235,16 @@ def _parse_explained_schema(explain_string: str) -> OdpsSchema:
228
235
  return _parse_full_explain(explain_string)
229
236
 
230
237
 
238
+ def _build_explain_sql(sql_stmt: str, no_split: bool = False) -> str:
239
+ if no_split:
240
+ return "EXPLAIN " + sql_stmt
241
+ sql_parts = split_sql_by_semicolon(sql_stmt)
242
+ if not sql_parts:
243
+ raise ValueError(f"Cannot explain SQL statement {sql_stmt}")
244
+ sql_parts[-1] = "EXPLAIN " + sql_parts[-1]
245
+ return "\n".join(sql_parts)
246
+
247
+
231
248
  class DataFrameReadODPSQuery(
232
249
  IncrementalIndexDatasource,
233
250
  ColumnPruneSupportedDataSourceMixin,
@@ -245,7 +262,7 @@ class DataFrameReadODPSQuery(
245
262
  column_renames = DictField("column_renames", default=None)
246
263
 
247
264
  def get_columns(self):
248
- return self.columns
265
+ return self.columns or list(self.dtypes.index)
249
266
 
250
267
  def set_pruned_columns(self, columns, *, keep_order=None): # pragma: no cover
251
268
  self.columns = columns
@@ -323,16 +340,23 @@ def read_odps_query(
323
340
  result: DataFrame
324
341
  DataFrame read from MaxCompute (ODPS) table
325
342
  """
343
+ no_split_sql = kw.pop("no_split_sql", False)
344
+
326
345
  hints = options.sql.settings.copy() or {}
327
346
  if sql_hints:
328
347
  hints.update(sql_hints)
329
348
 
330
349
  odps_entry = odps_entry or ODPS.from_global() or ODPS.from_environments()
350
+ if odps_entry is None:
351
+ raise ValueError(
352
+ "Need to provide an odps_entry argument or hold a default ODPS entry."
353
+ )
331
354
 
332
355
  if options.session.enable_schema or odps_entry.is_schema_namespace_enabled():
333
356
  hints["odps.namespace.schema"] = "true"
334
357
  hints["odps.sql.allow.namespace.schema"] = "true"
335
358
 
359
+ hints["odps.sql.submit.mode"] = "script"
336
360
  # fixme workaround for multi-stage split process
337
361
  hints["odps.sql.object.table.split.by.object.size.enabled"] = "false"
338
362
 
@@ -341,14 +365,18 @@ def read_odps_query(
341
365
 
342
366
  col_renames = {}
343
367
  if not skip_schema:
344
- inst = odps_entry.execute_sql(f"EXPLAIN {query}", hints=hints)
368
+ explain_stmt = _build_explain_sql(query, no_split=no_split_sql)
369
+ inst = odps_entry.execute_sql(explain_stmt, hints=hints)
345
370
  logger.debug("Explain instance ID: %s", inst.id)
346
371
  explain_str = list(inst.get_task_results().values())[0]
347
372
 
348
373
  try:
349
374
  odps_schema = _parse_explained_schema(explain_str)
350
- except ValueError as ex:
351
- exc = ValueError(str(ex) + "\nExplain instance ID: " + inst.id)
375
+ except BaseException as ex:
376
+ exc = ValueError(
377
+ f"Failed to obtain schema from SQL explain: {ex!r}"
378
+ f"\nExplain instance ID: {inst.id}"
379
+ )
352
380
  raise exc.with_traceback(ex.__traceback__) from None
353
381
 
354
382
  new_columns = []
@@ -390,5 +418,6 @@ def read_odps_query(
390
418
  index_columns=index_col,
391
419
  index_dtypes=index_dtypes,
392
420
  column_renames=col_renames,
421
+ no_split_sql=no_split_sql,
393
422
  )
394
423
  return op(chunk_bytes=chunk_bytes, chunk_size=chunk_size)
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
3
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
6
6
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -350,9 +350,11 @@ def test_from_odps_query():
350
350
  )
351
351
  assert "instant query" in err_info.value.args[0]
352
352
 
353
+ # test simple select query
353
354
  query1 = f"SELECT * FROM {table1_name} WHERE col1 > 10"
354
- df = read_odps_query(query1)
355
+ df = read_odps_query(query1, no_split_sql=True)
355
356
  assert df.op.query == query1
357
+ assert df.op.extra_params.no_split_sql is True
356
358
  assert df.index_value.name is None
357
359
  assert isinstance(df.index_value.value, IndexValue.RangeIndex)
358
360
  pd.testing.assert_series_equal(
@@ -362,35 +364,56 @@ def test_from_odps_query():
362
364
  index=["col1", "col2", "col3"],
363
365
  ),
364
366
  )
367
+ assert df.op.get_columns() == ["col1", "col2", "col3"]
365
368
 
366
369
  df = read_odps_query(query1, skip_schema=True)
367
370
  assert df.dtypes is None
368
371
  assert df.columns_value is None
372
+ assert df.op.extra_params.no_split_sql is False
369
373
 
370
374
  df = read_odps_query(query1, index_col="col1")
371
375
  assert df.op.query == query1
372
376
  assert df.index_value.name == "col1"
377
+ assert df.op.get_columns() == ["col2", "col3"]
373
378
  assert isinstance(df.index_value.value, IndexValue.Index)
374
379
  pd.testing.assert_series_equal(
375
380
  df.dtypes,
376
381
  pd.Series([np.dtype("int64"), np.dtype("float64")], index=["col2", "col3"]),
377
382
  )
378
383
 
379
- query2 = (
380
- f"SELECT t1.col1, t1.col2, t1.col3 as c31, t2.col3 as c32 "
381
- f"FROM {table1_name} t1 "
382
- f"INNER JOIN {table2_name} t2 "
383
- f"ON t1.col1 = t2.col1 AND t1.col2 = t2.col2"
384
- )
384
+ # test query with join
385
+ query2 = f"""
386
+ SELECT t1.col1, t1.col2, t1.col3 as c31, t2.col3 as c32
387
+ FROM {table1_name} t1
388
+ INNER JOIN {table2_name} t2
389
+ ON t1.col1 = t2.col1 AND t1.col2 = t2.col2
390
+ """
385
391
  df = read_odps_query(query2, index_col=["col1", "col2"])
386
392
  assert df.op.query == query2
387
393
  assert df.index_value.names == ["col1", "col2"]
394
+ assert df.op.get_columns() == ["c31", "c32"]
388
395
  assert isinstance(df.index_value.value, IndexValue.MultiIndex)
389
396
  pd.testing.assert_series_equal(
390
397
  df.dtypes,
391
398
  pd.Series([np.dtype("float64"), np.dtype("float64")], index=["c31", "c32"]),
392
399
  )
393
400
 
401
+ # test query with multiple statements
402
+ query3 = f"""
403
+ @val := SELECT t1.col1, t1.col2 as c1, t1.col3 as c31, t1.col3 as c32
404
+ FROM {table1_name} t1;
405
+ SELECT c1, c32 FROM @val;
406
+ """
407
+ df = read_odps_query(query3, index_col=["c1"])
408
+ assert df.op.query == query3
409
+ assert df.op.extra_params.no_split_sql is False
410
+ assert df.index_value.names == ["c1"]
411
+ assert df.op.get_columns() == ["c32"]
412
+ pd.testing.assert_series_equal(
413
+ df.dtypes,
414
+ pd.Series([np.dtype("float64")], index=["c32"]),
415
+ )
416
+
394
417
  test_table.drop()
395
418
  test_table2.drop()
396
419
 
@@ -494,3 +517,31 @@ def test_resolve_conditional():
494
517
  for col, (exp_nm, exp_tp) in zip(schema.columns, expected_col_types.items()):
495
518
  assert col.name == exp_nm
496
519
  assert col.type == odps_types.validate_data_type(exp_tp)
520
+
521
+
522
+ def test_resolve_multi_join():
523
+ input_path = os.path.join(
524
+ os.path.dirname(__file__), "test-data", "task-input-multi-join.txt"
525
+ )
526
+ with open(input_path, "r") as f:
527
+ sector = f.read()
528
+
529
+ expected_col_types = {
530
+ "cs1": "string",
531
+ "cs2": "string",
532
+ "ci1": "bigint",
533
+ "cs3": "string",
534
+ "cs4": "string",
535
+ "cs5": "string",
536
+ "cs6": "string",
537
+ "cs7": "string",
538
+ "cs8": "string",
539
+ "ci2": "int",
540
+ "ci3": "bigint",
541
+ "cs9": "string",
542
+ }
543
+
544
+ schema = _parse_full_explain(sector)
545
+ for col, (exp_nm, exp_tp) in zip(schema.columns, expected_col_types.items()):
546
+ assert col.name == exp_nm
547
+ assert col.type == odps_types.validate_data_type(exp_tp)
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
3
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
6
6
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 1999-2024 Alibaba Group Holding Ltd.
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- from ..misc.accessor import CachedAccessor
15
+ from ...core import CachedAccessor
16
16
  from .accessor import (
17
17
  DataFrameMaxFrameAccessor,
18
18
  IndexMaxFrameAccessor,