maxframe 0.1.0b4__cp311-cp311-macosx_10_9_universal2.whl → 1.0.0rc1__cp311-cp311-macosx_10_9_universal2.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 (81) hide show
  1. maxframe/__init__.py +1 -0
  2. maxframe/_utils.cpython-311-darwin.so +0 -0
  3. maxframe/codegen.py +56 -3
  4. maxframe/config/config.py +15 -1
  5. maxframe/core/__init__.py +0 -3
  6. maxframe/core/entity/__init__.py +1 -8
  7. maxframe/core/entity/objects.py +3 -45
  8. maxframe/core/graph/core.cpython-311-darwin.so +0 -0
  9. maxframe/core/graph/core.pyx +4 -4
  10. maxframe/dataframe/__init__.py +1 -0
  11. maxframe/dataframe/core.py +30 -8
  12. maxframe/dataframe/datasource/read_odps_query.py +3 -1
  13. maxframe/dataframe/datasource/read_odps_table.py +3 -1
  14. maxframe/dataframe/datastore/tests/__init__.py +13 -0
  15. maxframe/dataframe/datastore/tests/test_to_odps.py +48 -0
  16. maxframe/dataframe/datastore/to_odps.py +21 -0
  17. maxframe/dataframe/indexing/align.py +1 -1
  18. maxframe/dataframe/misc/__init__.py +4 -0
  19. maxframe/dataframe/misc/apply.py +3 -1
  20. maxframe/dataframe/misc/case_when.py +141 -0
  21. maxframe/dataframe/misc/memory_usage.py +2 -2
  22. maxframe/dataframe/misc/pivot_table.py +262 -0
  23. maxframe/dataframe/misc/tests/test_misc.py +84 -0
  24. maxframe/dataframe/plotting/core.py +2 -2
  25. maxframe/dataframe/reduction/core.py +2 -1
  26. maxframe/dataframe/statistics/corr.py +3 -3
  27. maxframe/dataframe/utils.py +7 -0
  28. maxframe/errors.py +13 -0
  29. maxframe/extension.py +12 -0
  30. maxframe/learn/contrib/utils.py +52 -0
  31. maxframe/learn/contrib/xgboost/__init__.py +26 -0
  32. maxframe/learn/contrib/xgboost/classifier.py +86 -0
  33. maxframe/learn/contrib/xgboost/core.py +156 -0
  34. maxframe/learn/contrib/xgboost/dmatrix.py +150 -0
  35. maxframe/learn/contrib/xgboost/predict.py +138 -0
  36. maxframe/learn/contrib/xgboost/regressor.py +78 -0
  37. maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
  38. maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
  39. maxframe/learn/contrib/xgboost/train.py +121 -0
  40. maxframe/learn/utils/__init__.py +15 -0
  41. maxframe/learn/utils/core.py +29 -0
  42. maxframe/lib/mmh3.cpython-311-darwin.so +0 -0
  43. maxframe/lib/mmh3.pyi +43 -0
  44. maxframe/lib/wrapped_pickle.py +2 -1
  45. maxframe/odpsio/arrow.py +2 -3
  46. maxframe/odpsio/tableio.py +22 -0
  47. maxframe/odpsio/tests/test_schema.py +16 -11
  48. maxframe/opcodes.py +3 -0
  49. maxframe/protocol.py +108 -10
  50. maxframe/serialization/core.cpython-311-darwin.so +0 -0
  51. maxframe/serialization/core.pxd +3 -0
  52. maxframe/serialization/core.pyi +64 -0
  53. maxframe/serialization/core.pyx +54 -25
  54. maxframe/serialization/exception.py +1 -1
  55. maxframe/serialization/pandas.py +7 -2
  56. maxframe/serialization/serializables/core.py +119 -12
  57. maxframe/serialization/serializables/tests/test_serializable.py +46 -4
  58. maxframe/session.py +28 -0
  59. maxframe/tensor/__init__.py +1 -1
  60. maxframe/tensor/arithmetic/tests/test_arithmetic.py +1 -1
  61. maxframe/tensor/base/__init__.py +2 -0
  62. maxframe/tensor/base/atleast_1d.py +74 -0
  63. maxframe/tensor/base/unique.py +205 -0
  64. maxframe/tensor/datasource/array.py +4 -2
  65. maxframe/tensor/datasource/scalar.py +1 -1
  66. maxframe/tensor/reduction/count_nonzero.py +1 -1
  67. maxframe/tests/test_protocol.py +34 -0
  68. maxframe/tests/test_utils.py +0 -12
  69. maxframe/tests/utils.py +2 -2
  70. maxframe/udf.py +63 -3
  71. maxframe/utils.py +22 -13
  72. {maxframe-0.1.0b4.dist-info → maxframe-1.0.0rc1.dist-info}/METADATA +3 -3
  73. {maxframe-0.1.0b4.dist-info → maxframe-1.0.0rc1.dist-info}/RECORD +80 -61
  74. maxframe_client/__init__.py +0 -1
  75. maxframe_client/fetcher.py +65 -3
  76. maxframe_client/session/odps.py +74 -5
  77. maxframe_client/session/task.py +65 -71
  78. maxframe_client/tests/test_session.py +64 -1
  79. maxframe_client/clients/spe.py +0 -104
  80. {maxframe-0.1.0b4.dist-info → maxframe-1.0.0rc1.dist-info}/WHEEL +0 -0
  81. {maxframe-0.1.0b4.dist-info → maxframe-1.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -1,46 +1,45 @@
1
- maxframe-0.1.0b4.dist-info/RECORD,,
2
- maxframe-0.1.0b4.dist-info/WHEEL,sha256=eupBwbXGAhwNAPJSvj5BiShZwdZO8jnQ5yHfv-9aUGw,115
3
- maxframe-0.1.0b4.dist-info/top_level.txt,sha256=64x-fc2q59c_vXwNUkehyjF1vb8JWqFSdYmUqIFqoTM,31
4
- maxframe-0.1.0b4.dist-info/METADATA,sha256=M5MjCW0gBbtdN7bOgXnAyVv3__iRHgIGuqRb_qHAHi4,3043
1
+ maxframe-1.0.0rc1.dist-info/RECORD,,
2
+ maxframe-1.0.0rc1.dist-info/WHEEL,sha256=eupBwbXGAhwNAPJSvj5BiShZwdZO8jnQ5yHfv-9aUGw,115
3
+ maxframe-1.0.0rc1.dist-info/top_level.txt,sha256=64x-fc2q59c_vXwNUkehyjF1vb8JWqFSdYmUqIFqoTM,31
4
+ maxframe-1.0.0rc1.dist-info/METADATA,sha256=YbKuyerj5kotQU8UiyPs2KY_OjKcsM4bhm2R9eZJVmg,3053
5
5
  maxframe_client/conftest.py,sha256=7cwy2sFy5snEaxvtMvxfYFUnG6WtYC_9XxVrwJxOpcU,643
6
- maxframe_client/__init__.py,sha256=3b-z0oFVVwtIzVFBxOb9pw7gz4IhTSh4FiHtVgnxS4Q,724
7
- maxframe_client/fetcher.py,sha256=Ys_qu2qtniXuj9YSfeHvevdrAAEgm8k4YjyoZusdVmg,6813
6
+ maxframe_client/__init__.py,sha256=0_6MYIqksNc-B0hORLb0yqNQUhtqdFD7TGg39bQ-_NI,689
7
+ maxframe_client/fetcher.py,sha256=p2hsVE2ihvhtuVCAaJhKccCiebl5f6BBPN6KIXOO0jo,8949
8
8
  maxframe_client/clients/__init__.py,sha256=FEFOVLi3o2GpZoedTtLYvbie0eQBehJIjtCrWca2ZHw,596
9
- maxframe_client/clients/spe.py,sha256=ArZMNQ7olicI4O1JO7CyRP7-hb60DF71ZKCTO0N39uE,3593
10
9
  maxframe_client/clients/framedriver.py,sha256=Rn09529D2qBTgNGc0oCY0l7b3FgzT87TqS1nujGQaHw,4463
11
- maxframe_client/tests/test_session.py,sha256=ZaiQTsnn-qr3VzdyuSei05AeM3FYhVpXQizg50mcSRc,6902
10
+ maxframe_client/tests/test_session.py,sha256=F6cT1Lgudm2KHK6YpxpxiDveJdHGChRc4jhuEvDBP6k,9325
12
11
  maxframe_client/tests/__init__.py,sha256=FEFOVLi3o2GpZoedTtLYvbie0eQBehJIjtCrWca2ZHw,596
13
12
  maxframe_client/tests/test_fetcher.py,sha256=q7kYCznM6WSxx9TCbHrxs7Zy1L2a5zu9D-Pi1XNgQzg,3516
14
- maxframe_client/session/task.py,sha256=z5j8qtBM6cs_lZrvfy4Ji3F3sVOhPOCr5r1RsNe7rN4,11102
13
+ maxframe_client/session/task.py,sha256=v0tnS2QtkiNt7D47l_3QjXOqNqlkD7NGL8dJ_h4Fr_E,11101
15
14
  maxframe_client/session/graph.py,sha256=nwILNOIVaIf4E3xWffTAAlRsKRYU_zGW3oVO10du8Xw,4351
16
15
  maxframe_client/session/__init__.py,sha256=KPqhSlAJiuUz8TC-z5o7mHDVXzLSqWwrZ33zNni7piY,832
17
16
  maxframe_client/session/consts.py,sha256=R37BxDF3kgCy0qmDdwLaH5jB7mb7SzfYV6g9yHBKAwk,1344
18
- maxframe_client/session/odps.py,sha256=4O4lpoEICC7PwDu6koGZ1XOXuCt_zSblF6xtPARl7n8,16328
17
+ maxframe_client/session/odps.py,sha256=26UjVEIxrTpYtfHxdd-h1aF4OL9TD38UE6aqWeE_8pA,19363
19
18
  maxframe_client/session/tests/test_task.py,sha256=lDdw3gToaM3xSaRXEmHUoAo2h0id7t4v_VvpdKxQAao,3279
20
19
  maxframe_client/session/tests/__init__.py,sha256=FEFOVLi3o2GpZoedTtLYvbie0eQBehJIjtCrWca2ZHw,596
21
20
  maxframe/_utils.pyx,sha256=I4kmfhNr-xXK2ak22dr4Vwahzn-JmTaYctbL3y9_UBQ,17017
22
21
  maxframe/conftest.py,sha256=ZzwKhGp7LAVpzQYJkniwIUQqIegcaDQAhyzDyU2qld4,4264
23
- maxframe/_utils.cpython-311-darwin.so,sha256=F7VCnOwdB3pkVvjrJ_dyRQ8WyrhuSk2-IYGxtkxS3So,914505
24
- maxframe/opcodes.py,sha256=FE9MUlENCKaO2gVIaSweF5Rsti6nKfYoD-vSRkoPlgM,10145
22
+ maxframe/_utils.cpython-311-darwin.so,sha256=DTS8ksNGaFiYGcO6Z1NGEz5fSJ-Oo_cWiy35nAsYeLg,846720
23
+ maxframe/opcodes.py,sha256=1Da6d3a82mecIHmnyZve4gSH_KN-q3Snl0nSygue2Ng,10191
25
24
  maxframe/env.py,sha256=_K499f7giN7Iu9f39iI9p_naaEDoJ0rx8dInbzqFOVI,1402
26
25
  maxframe/mixin.py,sha256=HBAeWYGb7N6ZIgkA-YpkKiSY1GetcEVNTuMb0ieznBs,3524
27
- maxframe/protocol.py,sha256=LjjE6iw0ZVx82tBMbff4izkGuiJxRG0MTOaPYYpRL10,14190
28
- maxframe/session.py,sha256=y1XSn2G5PAQenuAkz2hb54CuWStbb_S8IFdMcJiNyoQ,35418
29
- maxframe/__init__.py,sha256=YGnga-nYEppPoDZoZ5s64PZ0RYLaWtcYtmYSLTjKUBE,976
30
- maxframe/utils.py,sha256=0cAfRm_M5vfSGzaLgLqEu8M75nYK9BOd_lQowejpdHY,34104
31
- maxframe/extension.py,sha256=4IzF9sPyaRoAzLud0iDLooOgcyq4QunXH0ki3q9Hn8I,2374
32
- maxframe/errors.py,sha256=nQZoLGdLJz-Uf9c2vUvQl08QMvRqtkBOhKfdPYRZA4o,690
33
- maxframe/udf.py,sha256=tWOMTkNqGWw3ZpNC9wEU0GGNSBV8sV7E-Ye80DI28eg,2241
26
+ maxframe/protocol.py,sha256=VfJNsUYPUwJ73ZpMMMranrN9F2pAJPmcZYuHcSAXQRs,17817
27
+ maxframe/session.py,sha256=o2jp5NQP1pVMkp4AujN_3DB1HffZ0rMd5EbYZiLJxls,36205
28
+ maxframe/__init__.py,sha256=SqTFS_1o2HDuVY1mhS0ELlqDuM-biwM_MN0EYGkJLf0,1004
29
+ maxframe/utils.py,sha256=E9BbGYrwW4JMCM6BweUESSnGrZGQ7JZvnnFemvKOSoQ,34372
30
+ maxframe/extension.py,sha256=F5XTYzW5hNw0AIQz3d6u6Yk7adDdiV4c-HD7bF0X1FI,2659
31
+ maxframe/errors.py,sha256=vHcpVrKRHmoZPa6IwsdDT-jOZUTlhCp8c0e8F2C-5uU,966
32
+ maxframe/udf.py,sha256=-FzQCuV0GNyo3SH1r3rPQ3QMAydhYtE7KI8ff4Mv_PU,4288
34
33
  maxframe/typing_.py,sha256=fzHETru3IOZAJwU9I7n_ib3wHuQRJ9XFVmAk7WpqkMo,1096
35
- maxframe/codegen.py,sha256=pSiGHoEo9YajFPHbFHvi7fGkiJmAQdBCe0mMXNOG6-U,15846
34
+ maxframe/codegen.py,sha256=qO5Q8XbqIVGvWphyIqR6eimboIsbVV7KEBLH7e9sIYY,17809
36
35
  maxframe/_utils.pxd,sha256=AhJ4vA_UqZqPshi5nvIZq1xgr80fhIVQ9dm5-UdkYJ8,1154
37
36
  maxframe/dataframe/arrays.py,sha256=RWzimUcrds5CsIlPausfJAkLUjcktBSSXwdXyUNKEtU,28752
38
- maxframe/dataframe/__init__.py,sha256=h4SQPQQBpVPxTNGP5Rtx5uO7RI8gO7_FpXjeh_k9PN8,2195
39
- maxframe/dataframe/core.py,sha256=aNkexKwBuaQv28R0HYTLXcD64U4nEcBsBfLfGCFSSGs,73731
37
+ maxframe/dataframe/__init__.py,sha256=T08TZjNg2yWh7RmI0hX9PiBTlD5e9L_s3KnKsSLnBFA,2237
38
+ maxframe/dataframe/core.py,sha256=b27b0XomeqISCPxltavESlueTTYEXF5wjtrTKEZtld4,74413
40
39
  maxframe/dataframe/initializer.py,sha256=4BpZJB8bbyFnABUYWBrk_qzzrogEsWgFuU21Ma9IsjY,10264
41
- maxframe/dataframe/utils.py,sha256=qWRo51rcMTlo4mvZ8ZZq1zIF9CiAgU1qRtoCAaYrR34,44111
40
+ maxframe/dataframe/utils.py,sha256=uaRpQp5Lciow-9UBDnuUacYvi4erJgyvTDnQziRDkFU,44272
42
41
  maxframe/dataframe/operators.py,sha256=T7Ik1shfoyrMZ1x0wHXG26bsod1_YjMGQgGAFNpH6k0,7871
43
- maxframe/dataframe/statistics/corr.py,sha256=r9EwD6mqvlm3loEXr3ElS4XIr2NETfmTjC9V1fh4GW8,9495
42
+ maxframe/dataframe/statistics/corr.py,sha256=3dExebs9QC8GBaZZUSKXrN2eYt-hWMayJ2MHHzTn-8s,9483
44
43
  maxframe/dataframe/statistics/quantile.py,sha256=eH-kAg-SZ5JdI8K3P6p9gNeDu4cbJaUC3Dt-zoCoTv0,11713
45
44
  maxframe/dataframe/statistics/__init__.py,sha256=Ate3HERUCrjhRoGhpR9SNZA5JHlvuIVSrHgYPEcJd6Q,1084
46
45
  maxframe/dataframe/statistics/tests/test_statistics.py,sha256=3kpFq9EoUI8PBikQGwMoMN7vwBTeoQeF3XG2h2Hzcu0,2730
@@ -49,17 +48,19 @@ maxframe/dataframe/misc/accessor.py,sha256=QXjV5Q6LW0KNs67X5h2bCBhwHV8R7riP6TmTY
49
48
  maxframe/dataframe/misc/describe.py,sha256=Qvmv_5rj-fk_ABcS5h8IxNHY-EAPB1rG446LiB1MRgU,4387
50
49
  maxframe/dataframe/misc/astype.py,sha256=OkGDO6PBZli46m0kKq0BOO2OOwJWEyatzeBFV_mnKz8,7797
51
50
  maxframe/dataframe/misc/to_numeric.py,sha256=gG5fxEtC71SkDeHaJ0Vd1JZrIM8gMHGFaiwyFtMwbWs,6262
51
+ maxframe/dataframe/misc/case_when.py,sha256=CqR8YRc7PKja3dUdPxe8nd7oAcZrvHAPJvdzlj9wZT0,4851
52
52
  maxframe/dataframe/misc/check_monotonic.py,sha256=apHehWNRUTuzux3hI4JflWiuvpaeEFwtpPTWVide7wU,2422
53
53
  maxframe/dataframe/misc/datetimes.py,sha256=fgLczaX-yDdairnNW1EsabEzoioP5gUsO0ukYANisLE,2503
54
54
  maxframe/dataframe/misc/string_.py,sha256=eG4uMA6ScB0Pfby6pBLH24Ln01Aai2aAn-hMyRM5YFo,8101
55
55
  maxframe/dataframe/misc/cut.py,sha256=aB8iuk6k2W3G2S3j0jPsryvBhOmaQJSZGIpZ5u1rWbs,13905
56
56
  maxframe/dataframe/misc/get_dummies.py,sha256=q4f-1RCw-WWz53bT2FseYyzBNV3pDJTKNBKFx0dd888,7087
57
- maxframe/dataframe/misc/__init__.py,sha256=kamgMA40Ojt_fcrCvxOoS8TjRg4vqnvLfCRXN1zb1mE,5107
57
+ maxframe/dataframe/misc/__init__.py,sha256=U1p-l0iC1dbh7WLv5kVPelXqK7tb00LJvtu_H7GdtGA,5267
58
58
  maxframe/dataframe/misc/qcut.py,sha256=De8kM1FfOWMEDvRNWRaupSHBRGLaOVrtGbLmtHAZvOg,3737
59
59
  maxframe/dataframe/misc/pct_change.py,sha256=dNvj5VDPndRqc8lPweWcTiSz4p4oSibeQ2yxCVusLpI,4586
60
60
  maxframe/dataframe/misc/duplicated.py,sha256=JPtBDLaxlVUqFBU3U3bqGnKQNaOcKwS5sdVfBFJt-Uo,8534
61
+ maxframe/dataframe/misc/pivot_table.py,sha256=YoKjjtOw2Z6KU3q3opAFag1gICz5Kc_VIcKNs3ur62A,9520
61
62
  maxframe/dataframe/misc/map.py,sha256=RbUi0xPzT0hnsKid5RA5uHYyTeBnpzXlukR48Ntooxk,8149
62
- maxframe/dataframe/misc/memory_usage.py,sha256=JN4x0ObjG7JP84ZMLRaQR8_-Eplg2_YxfJgi7XGM310,7897
63
+ maxframe/dataframe/misc/memory_usage.py,sha256=BPBSYNFvxTYG5kXdX-ogLn1_c_u__G9UeWkEIKrnfyA,7889
63
64
  maxframe/dataframe/misc/isin.py,sha256=POBR3Gvwlu2TH1AWWvKW12XOlu8HF2dJuBCBbOHgq74,6931
64
65
  maxframe/dataframe/misc/shift.py,sha256=feTqtnIRm0YGha5Ps_feQOqHLxSbicnOMbthmZc6pEM,8935
65
66
  maxframe/dataframe/misc/transpose.py,sha256=-Q7iFtafKKibpZKWYxf0bUg4zIZPTupvY4hkdAlB3Gw,3636
@@ -74,8 +75,8 @@ maxframe/dataframe/misc/eval.py,sha256=-2svFR5uraqnzKeCS2bJRx5POHRxqST2lbk6qzee7
74
75
  maxframe/dataframe/misc/value_counts.py,sha256=ds3EVCs0jL1hcTWREzPgb7-20ezcYSNvu9ZtCYqrvfk,5492
75
76
  maxframe/dataframe/misc/select_dtypes.py,sha256=xEdLNun58kvp-Vbl3u2cr8kaXFG8GsIU2BMfo7tFCM8,3144
76
77
  maxframe/dataframe/misc/drop.py,sha256=-RHIQWek2LUTK8lOILNpCWYftCY3-I3DHSP0XT4uHBc,13029
77
- maxframe/dataframe/misc/apply.py,sha256=oosZiAzYzFpsNPAPT78zT4x3UwjAjCV5yNJo_go5XP4,23360
78
- maxframe/dataframe/misc/tests/test_misc.py,sha256=cbOwyWXzNwSF79PhDXHQMTjxAfrYcr5XpQL9NvLQQzc,12965
78
+ maxframe/dataframe/misc/apply.py,sha256=UQf9LsH3d33bUaiHNGwyvz_wjoBYro9YbuzAChcU5G0,23436
79
+ maxframe/dataframe/misc/tests/test_misc.py,sha256=5yF01TfqHmNBayMGWc5_4bS8vEc2bQ-kPMSwn54ytM0,15630
79
80
  maxframe/dataframe/misc/tests/__init__.py,sha256=FEFOVLi3o2GpZoedTtLYvbie0eQBehJIjtCrWca2ZHw,596
80
81
  maxframe/dataframe/datasource/index.py,sha256=D7PcfIWS-6Hv1-8o6adNesditOAa9kb4JOQK1WlqNDQ,4401
81
82
  maxframe/dataframe/datasource/read_csv.py,sha256=cpp6kX0DVrqY0KticL1h11tckobSzz1gyK4Sf2puUjo,24140
@@ -83,10 +84,10 @@ maxframe/dataframe/datasource/from_index.py,sha256=2061zsQn-BhyHTT0X9tE0JK8vLxQU
83
84
  maxframe/dataframe/datasource/dataframe.py,sha256=LxAKF4gBIHhnJQPuaAUdIEyMAq7HTfiEeNVls5n4I4A,2023
84
85
  maxframe/dataframe/datasource/series.py,sha256=QcYiBNcR8jjH6vdO6l6H9F46KHmlBqVCTI2tv9eyZ9w,1909
85
86
  maxframe/dataframe/datasource/__init__.py,sha256=C8EKsHTJi-1jvJUKIpZtMtsK-ZID3dtxL1voXnaltTs,640
86
- maxframe/dataframe/datasource/read_odps_query.py,sha256=PkDtM1lG2odWcgjtKOdr5A95rqlkiFUKQy03v5-4pqU,9927
87
+ maxframe/dataframe/datasource/read_odps_query.py,sha256=CP7krcDLWrjReaQVIzr4FF4pI54D02aE0UXFYY89DFE,9970
87
88
  maxframe/dataframe/datasource/core.py,sha256=ozFmDgw1og7nK9_jU-u3tLEq9pNbitN-8w8XWdbKkJ0,2687
88
89
  maxframe/dataframe/datasource/date_range.py,sha256=CDGpxDyjLwnb66j-MIiiTfXGXHGh5MLhEmj6x2riIlU,17244
89
- maxframe/dataframe/datasource/read_odps_table.py,sha256=u3TNBlSMvQzKMQXFincqWKcUu8a4jeXX_RW3gctPXF4,9129
90
+ maxframe/dataframe/datasource/read_odps_table.py,sha256=UThcVjHKvt3GtNNd4zSEee3m87pKt9ngeksTvQSfH9k,9172
90
91
  maxframe/dataframe/datasource/read_parquet.py,sha256=9auOcy8snTxCOohgXZCUXfT_O39irdkBngZH5svgx0E,14531
91
92
  maxframe/dataframe/datasource/from_tensor.py,sha256=4viuN5SLLye7Xeb8kouOpm-osoQ2yEovWTDNPQuW8gE,14727
92
93
  maxframe/dataframe/datasource/from_records.py,sha256=WBYouYyg7m_8NJdN-yUWSfJlIpm6DVP3IMfLXZFugyI,3442
@@ -140,7 +141,9 @@ maxframe/dataframe/groupby/tests/test_groupby.py,sha256=VsHDG-UaZUXlZ1l498y44ecf
140
141
  maxframe/dataframe/datastore/__init__.py,sha256=Ujd4ix4UJ7Zq-sV2pXTRDvZkKUvtt8sr-FfiUoi6Kh4,784
141
142
  maxframe/dataframe/datastore/core.py,sha256=hLGhqYxX73tq9sOFxMyYBRMawTnsVQqluW5FcE3YHfE,743
142
143
  maxframe/dataframe/datastore/to_csv.py,sha256=xVfpEsicD5A5uXLSdCN08K8uGyWB4QxnRcAbgBVUzbs,7747
143
- maxframe/dataframe/datastore/to_odps.py,sha256=wZzD3yc6YQAGYVwEzYY-qxscn8Sj9I43lR70tFHe3m0,5562
144
+ maxframe/dataframe/datastore/to_odps.py,sha256=5ZS22l8QZQjOd6pGQL-rEUP5gqu8DMa1fqdL6TTx_Zg,6413
145
+ maxframe/dataframe/datastore/tests/__init__.py,sha256=FEFOVLi3o2GpZoedTtLYvbie0eQBehJIjtCrWca2ZHw,596
146
+ maxframe/dataframe/datastore/tests/test_to_odps.py,sha256=EaFprN1mErrqqy54Rzbw6PQxPbBCgxDP0E055RIIH0g,1296
144
147
  maxframe/dataframe/fetch/__init__.py,sha256=E3VjxLRKjtr-D__K-c0aRETvBG7CQRG1iEtH0Qghq0s,653
145
148
  maxframe/dataframe/fetch/core.py,sha256=z61_orBtOIrKFpFdJTNqyPhOw5ZCGe6QkXnDrGdMy6U,3338
146
149
  maxframe/dataframe/reduction/max.py,sha256=CqaueIN3cuF7vlE2rt2MAcXAD3Syd_R8W2dzcFhTmV0,1660
@@ -153,7 +156,7 @@ maxframe/dataframe/reduction/unique.py,sha256=Dhghnf9mvgS8p-ETJUlhfJajBEyVZPBp1I
153
156
  maxframe/dataframe/reduction/std.py,sha256=PYeh6-yton9vUI8D-dTlnXsWKCi-uDpop4UExmay7Ec,1355
154
157
  maxframe/dataframe/reduction/str_concat.py,sha256=wbb4Y4ZDyou_ixR6ukJ8wQw74nzI05tToNWaWSirbSA,1657
155
158
  maxframe/dataframe/reduction/__init__.py,sha256=ZadA_lXtrr1nQyb6vJrv_eb82bXiiiDHIn93F4O9-AU,4190
156
- maxframe/dataframe/reduction/core.py,sha256=FRPxxSFfLhNRiu5W3e7mUwsXBtWsOgcs5AMCbaZrybU,30329
159
+ maxframe/dataframe/reduction/core.py,sha256=ftArRDiA3mmj9AjBdR04BXmuHskZtgUqB5N8gJbHN9U,30395
157
160
  maxframe/dataframe/reduction/all.py,sha256=h3Y04RJ-mTxAggX1-BIpuiyhNofQEkBzsAxKOX--kv0,1966
158
161
  maxframe/dataframe/reduction/cummin.py,sha256=CA9wjhx_ZFfk6b3KbbDykWZiyXsfwLBUODKn36WuGug,1013
159
162
  maxframe/dataframe/reduction/min.py,sha256=8Kh07yoTRWaCWGKxZ4a64_tlIljR8GsjlbwdsjNmPTw,1660
@@ -171,7 +174,7 @@ maxframe/dataframe/reduction/reduction_size.py,sha256=5wGc5cyuUllewvKPeJargbEjuz
171
174
  maxframe/dataframe/reduction/tests/__init__.py,sha256=FEFOVLi3o2GpZoedTtLYvbie0eQBehJIjtCrWca2ZHw,596
172
175
  maxframe/dataframe/reduction/tests/test_reduction.py,sha256=IMxAoGHMtz_54UNFO-_nmsNvq0-fuVZcxmf5sOAIyWs,17227
173
176
  maxframe/dataframe/plotting/__init__.py,sha256=JShRu5lSUAfwgTFUMxQoIqiH1gg9H5cieoRyg4ybieA,1393
174
- maxframe/dataframe/plotting/core.py,sha256=-Ei1ZMQbaTSC6tk8olHmoLuxL7C7NbhKQ6gnSpBuHFw,2193
177
+ maxframe/dataframe/plotting/core.py,sha256=kvAM1ikU4SsFhvhmpOTQVTs2EX4ypAgNnjD9Jqy3xyA,2233
175
178
  maxframe/dataframe/plotting/tests/test_plotting.py,sha256=IKAOcG0LotMGZCrvDzWiHmoFXqtyrVDn87eIOdyg6Ho,4118
176
179
  maxframe/dataframe/plotting/tests/__init__.py,sha256=FEFOVLi3o2GpZoedTtLYvbie0eQBehJIjtCrWca2ZHw,596
177
180
  maxframe/dataframe/window/aggregation.py,sha256=ncdJavwZcj6LWfF_W9wWUWAIjOxu7DOEEW16y5EQCF4,3794
@@ -237,7 +240,7 @@ maxframe/dataframe/arithmetic/tests/test_arithmetic.py,sha256=Zm0hwTo_NqFAa3iDmY
237
240
  maxframe/dataframe/indexing/reset_index.py,sha256=uzGszHfkhwZgZtEaygy5UPrvHPNPXgWZaTOXdNxGBT8,13122
238
241
  maxframe/dataframe/indexing/iat.py,sha256=ANURJ8qn_UitgM01gDPeaQOlSBxbk0pmN4Yr-iPRXM8,1127
239
242
  maxframe/dataframe/indexing/loc.py,sha256=ZmiK3a2f-krkXFvNLSlzRRa6GWGiAAXk_3mWZC_MqdQ,14845
240
- maxframe/dataframe/indexing/align.py,sha256=BdrfIrf6A7v8W0GIuv1mdx87CzR15ARnqIH_aWUjWqY,12089
243
+ maxframe/dataframe/indexing/align.py,sha256=hEuoaNX4bI9LBWp_1kGG7GSs3PDF95tDXo7GX5nypGI,12085
241
244
  maxframe/dataframe/indexing/rename.py,sha256=W4CV2FK9Wt15GWukHbeWi7scXwiVL1ZRoXeAy7zIsLQ,13547
242
245
  maxframe/dataframe/indexing/setitem.py,sha256=PgVZr2A_joTHz9GUbnGfuSI28qSnwe-n84yKFJagLUc,5004
243
246
  maxframe/dataframe/indexing/where.py,sha256=3h64jI_tXmWAu1ZvfeS58h8nUfBN7K7OZ0C22_5-_uk,8567
@@ -255,28 +258,40 @@ maxframe/dataframe/indexing/reindex.py,sha256=mrDBxDZwbaqhjwy_fWGRtWI6MhJ6O1sR1A
255
258
  maxframe/dataframe/indexing/tests/__init__.py,sha256=FEFOVLi3o2GpZoedTtLYvbie0eQBehJIjtCrWca2ZHw,596
256
259
  maxframe/dataframe/indexing/tests/test_indexing.py,sha256=AcvF_exYVA6pf2giNzSAYfjAODbf207UtKSpTG68ssQ,15611
257
260
  maxframe/learn/__init__.py,sha256=ii-8fJO-ubA3wRej1S1jXsb62zrS5MaAWc2gqQAAHFw,632
261
+ maxframe/learn/utils/__init__.py,sha256=zpkZ-HBwv91vyMeBVs59J_u0uVQCXUkEzo_pW2h9q00,646
262
+ maxframe/learn/utils/core.py,sha256=_tskQMfdvr5VAV68fDzM0DSVF2S7SMDnNXA8j_gHmGI,1029
258
263
  maxframe/learn/contrib/__init__.py,sha256=WvCqsncQZKtDURfK8ma9GoPHVVK02yW2ueom_kBMl44,632
264
+ maxframe/learn/contrib/utils.py,sha256=k5jlwY8pru_PD8olOBOsMcBLeo31NMx53TjJmSvbvy8,1662
265
+ maxframe/learn/contrib/xgboost/classifier.py,sha256=IXNuAGtJMfZstcQoOyWUogZQsRvzRsBGp-gge-mqQsA,2936
266
+ maxframe/learn/contrib/xgboost/dmatrix.py,sha256=uZI3KxXZ7fa1SQ8dRs_ZTFpyNNt0ZmM4SR-WRkIvkjk,4856
267
+ maxframe/learn/contrib/xgboost/predict.py,sha256=yMV_wF3Cbx1PdZOjoy4mkVYnTQApmaC3ORK_9J8KicQ,4664
268
+ maxframe/learn/contrib/xgboost/__init__.py,sha256=kbYrokjDXjMBqRka5NTkUjU5zrNUoT_TkTyuW9G5s-0,899
269
+ maxframe/learn/contrib/xgboost/core.py,sha256=uilXCgjYuDKpxLNGkB5g-TDGijJ6EqnEvfXoEFC0JNQ,5194
270
+ maxframe/learn/contrib/xgboost/train.py,sha256=YkNTzyaxj_s9G-F2h0GX5L12PkJwOpcaTJX_R6DCQMQ,3958
271
+ maxframe/learn/contrib/xgboost/regressor.py,sha256=vAQHM2RQ3hKhQz3cqQ0twXpIDAkVOS9u4ivsQ5hX5dY,2532
272
+ maxframe/learn/contrib/xgboost/tests/test_core.py,sha256=0Q3A1EFW30vsQLl7bSTTuw-ldlLEO43ljVSJBb8j1LM,1406
273
+ maxframe/learn/contrib/xgboost/tests/__init__.py,sha256=FEFOVLi3o2GpZoedTtLYvbie0eQBehJIjtCrWca2ZHw,596
259
274
  maxframe/learn/contrib/pytorch/run_script.py,sha256=Joh0gwukGf3kqfBYRxL34hQjbULT6s3vNnmBdJ6NZP0,3111
260
275
  maxframe/learn/contrib/pytorch/__init__.py,sha256=koagbwLwH1VNLTWYx29ckatBChZ_f9wFcflB4tGYYwg,687
261
276
  maxframe/learn/contrib/pytorch/run_function.py,sha256=oMDMVqDFQJ5d8DllZrqqRmBT2lx1cTmAv0hdQlO2GrY,3244
262
277
  maxframe/learn/contrib/pytorch/tests/__init__.py,sha256=FEFOVLi3o2GpZoedTtLYvbie0eQBehJIjtCrWca2ZHw,596
263
278
  maxframe/learn/contrib/pytorch/tests/test_pytorch.py,sha256=ztAli4QwNUDfvM7M2LulJItFNWlUDFc_MByDF2KAcTI,1402
264
- maxframe/core/__init__.py,sha256=UoKY1FbSKr3ZITHR5FGb1jx92YI3MPYbvXCX5RDUuCY,1677
279
+ maxframe/core/__init__.py,sha256=BrapLnnMHHg-AM_OJcAgGyvD7Fwy4mdl1ceMmzImpeU,1616
265
280
  maxframe/core/mode.py,sha256=uRzQDTu471APFDOx12NkTgZiPB-YiCuPhmakhEtIz3M,3011
266
281
  maxframe/core/base.py,sha256=3ZNLtl0jZWY5ZIwmIJF1-khF-DYxoeHxAMMiOCwpaBA,4535
267
282
  maxframe/core/entity/tileables.py,sha256=b9jn_OQ-FQkbw7E7jMLjoJ4-VR7tBS8Mbx_j4iZ7uNc,13535
268
- maxframe/core/entity/__init__.py,sha256=Hz_p6eTkrSdkT7YCo5aeGZ33tms5wwifMp4TeYsAVlw,1292
283
+ maxframe/core/entity/__init__.py,sha256=QarGyhv2B6MFlHaI8v6lOUsMIRoiHd1Vm1U4z959U3Y,1214
269
284
  maxframe/core/entity/core.py,sha256=t7Ex9Yb7A1h_XwyRG88Fx4ZOai-NQKi2luRVS_jFPEo,4018
270
285
  maxframe/core/entity/utils.py,sha256=IuNgFmBQFRioAA1hgZe6nTEggOmDY-iooZqncQQrV28,942
271
286
  maxframe/core/entity/executable.py,sha256=HKXHXdPIyxg9i-OWmJxIY3KfXwX0x3xN9QcR5Xhc7dQ,10938
272
287
  maxframe/core/entity/output_types.py,sha256=uqApvFK8w6_aMxRets69dTwD1ndBDgVgqDCflyt9ubg,2645
273
- maxframe/core/entity/objects.py,sha256=RMHLTGbIHZNxxX59lAuQydAKcR32qKleIYUqdElGS4E,3034
288
+ maxframe/core/entity/objects.py,sha256=TikNltV350KxFxP1xNovK7CONda6K4PixmqD_ZLOR-Q,1840
274
289
  maxframe/core/entity/fuse.py,sha256=47U6MHRzA2ZvUi-kJb7b3mC_gN07x3yebBgX2Jj7VZo,2277
275
290
  maxframe/core/entity/chunks.py,sha256=yNSLCWOpA_Z6aGr6ZI32dIJf3xPdRBWbvdsl8sTM3BE,2134
276
291
  maxframe/core/graph/__init__.py,sha256=rnsXwW0ouh1f7SVtq73-PzLE-MBM6Op_0l6J7b7wGRE,821
277
- maxframe/core/graph/core.cpython-311-darwin.so,sha256=ZntaPsS-nai5T4nZjoeWaSWdsk63-kvyPd8ZtatI9Lo,731943
292
+ maxframe/core/graph/core.cpython-311-darwin.so,sha256=nPetiInc_PET_vPq5rHdA1m3IvwuC1OPC2iA8eX15ww,685824
278
293
  maxframe/core/graph/entity.py,sha256=56gjXyDXN-TTPm3AQOxuRVQbb_fguKFDL_Xm7i95XEk,5559
279
- maxframe/core/graph/core.pyx,sha256=ZJPx_MTOBMaX-6mns6tAiu-wrIBvRAKN44YAGTypJ1Y,15887
294
+ maxframe/core/graph/core.pyx,sha256=kyqE5-X9Tc82wU4N_zsf8jNthAHWHTVRNFQWNNbzgpM,15923
280
295
  maxframe/core/graph/tests/__init__.py,sha256=FEFOVLi3o2GpZoedTtLYvbie0eQBehJIjtCrWca2ZHw,596
281
296
  maxframe/core/graph/tests/test_graph.py,sha256=kZfe_SfMOoHjEfXvtVtn0RjK4lOd-tFasxSpfL4G1WE,7462
282
297
  maxframe/core/graph/builder/__init__.py,sha256=BV5tAiZ-bJE0FBGSCEnfqKNwBNHgvB9aSzEp0PY6SnA,702
@@ -295,51 +310,53 @@ maxframe/core/operator/fuse.py,sha256=0RGemF99gQCwV4aEk-K6T5KAGToO-487dFk8LyYDIZ
295
310
  maxframe/core/operator/base.py,sha256=nxuSKjbBzDrItM9PGmFo8RLwParazu525jMLWj0kXkM,15251
296
311
  maxframe/core/operator/tests/test_core.py,sha256=57aICnc5VLqdVK7icAORTWC81bSjBxeeVWIJcha9J_0,1691
297
312
  maxframe/core/operator/tests/__init__.py,sha256=FEFOVLi3o2GpZoedTtLYvbie0eQBehJIjtCrWca2ZHw,596
298
- maxframe/config/config.py,sha256=zWw0kzlkNbsKY5_oee2e5mdWqC_qrxor42SRkA-hSz0,13145
313
+ maxframe/config/config.py,sha256=acJ2WVY1JDBsty2VPTn5Twtp2jt4c9BUH7ZDELiNxVE,13734
299
314
  maxframe/config/validators.py,sha256=2m9MrkjDUFiU4PPaWIw8tjwMaOy8AYmuJFqVnnY8IMY,1615
300
315
  maxframe/config/__init__.py,sha256=g5lN3nP2HTAXa6ExGxU1NwU1M9ulYPmAcsV-gU7nIW8,656
301
316
  maxframe/config/tests/__init__.py,sha256=FEFOVLi3o2GpZoedTtLYvbie0eQBehJIjtCrWca2ZHw,596
302
317
  maxframe/config/tests/test_validators.py,sha256=U_7yKSl0FdVdDwKU1EsnCzNWaOXi8xrIC08x7hb_O4c,1240
303
318
  maxframe/config/tests/test_config.py,sha256=Cx3buKli4F77zwJaB-vnUSlE9LUbt3ObHW38cIE2dDs,2736
304
- maxframe/serialization/exception.py,sha256=TIlEDiuYwVgYkN4Se0ydXn2KzEJy4Yv8w2XwlTBqDdM,3027
305
- maxframe/serialization/core.pxd,sha256=51XCBozW9j_E0sBgyYkHf5xNfqCMJb36Fwm_Pxv_rZs,1303
306
- maxframe/serialization/pandas.py,sha256=D4_H4KjAl8DRQtODh9VBP94yB8ce1cYQUKrzXtn10KE,7147
319
+ maxframe/serialization/exception.py,sha256=2Ubi2ld5XpduqAln26q0T67XLj-OpdwW1Z-nyC_wtCI,2993
320
+ maxframe/serialization/core.pxd,sha256=eBrSXiAPlX83Kbwml5IKJvqsIT03lPCeS6is9HplLiU,1501
321
+ maxframe/serialization/pandas.py,sha256=Fj0HZsnTyZqDW4pTiz2AX_Clly6NwjAbQoaMhYwCocs,7315
322
+ maxframe/serialization/core.pyi,sha256=a3CQxlJv5aYyy__VNKEq5XsaHE-n0MPKE_9CcWu8Q34,2142
307
323
  maxframe/serialization/arrow.py,sha256=VnGxNLU9UV_cUPTze43bEFCIbYLAOZnp2pAwVJbAIzQ,3418
308
324
  maxframe/serialization/__init__.py,sha256=9eSnoDww1uw2DAXEBBTB2atJQHzd-38XVxrCkoaypxA,921
309
325
  maxframe/serialization/maxframe_objects.py,sha256=R9WEjbHL0Kr56OGkYDU9fcGi7gII6fGlXhi6IyihTsM,1365
310
326
  maxframe/serialization/numpy.py,sha256=8_GSo45l_eNoMn4NAGEb9NLXY_9i4tf9KK4EzG0mKpA,3213
311
327
  maxframe/serialization/scipy.py,sha256=hP0fAW0di9UgJrGtANB2S8hLDbFBtR8p5NDqAMt5rDI,2427
312
- maxframe/serialization/core.cpython-311-darwin.so,sha256=FDjHVTw6XJnyf2tXIeDSYXJvaYANQo_dZ1413hjQWP8,1341639
313
- maxframe/serialization/core.pyx,sha256=AATN47RdBTq2zg7--3xX2VHyAZSvoAuYRt7B7gEgKPE,33984
328
+ maxframe/serialization/core.cpython-311-darwin.so,sha256=0y6IB4tstffGlj1k31dvQyawhhirnAeLBdPlw3aNfTE,1176464
329
+ maxframe/serialization/core.pyx,sha256=ZLVh7W7LgUb4KPb7rtuezRL6sQC4GNb3hLndAeSbiyU,35198
314
330
  maxframe/serialization/tests/test_serial.py,sha256=Wj_I6CBQMaOtE8WtqdUaBoU8FhBOihht6SfeHOJV-zU,12511
315
331
  maxframe/serialization/tests/__init__.py,sha256=FEFOVLi3o2GpZoedTtLYvbie0eQBehJIjtCrWca2ZHw,596
316
332
  maxframe/serialization/serializables/field.py,sha256=atVgX-9rsVG1fTev7vjQArVwIEaCRjXoSEjpQ3mh6bA,16015
317
333
  maxframe/serialization/serializables/__init__.py,sha256=_wyFZF5QzSP32wSXlXHEPl98DN658I66WamP8XPJy0c,1351
318
- maxframe/serialization/serializables/core.py,sha256=xlqVUlBK3aLTavHLWHg4JXUTaBGzSuM7t-XHahB8et4,8965
334
+ maxframe/serialization/serializables/core.py,sha256=C8J2lxNUNQWgoKc5rF-Eb8H7JSqFDRZpvM9eEUYjxCY,13796
319
335
  maxframe/serialization/serializables/field_type.py,sha256=Feh09hu8XyaxS5MaJ4za_pcvqJVuMkOeGxwQ9OuJw6I,14865
320
336
  maxframe/serialization/serializables/tests/test_field_type.py,sha256=T3ebXbUkKveC9Pq1nIl85e4eYascFeJ52d0REHbz5jo,4381
321
337
  maxframe/serialization/serializables/tests/__init__.py,sha256=FEFOVLi3o2GpZoedTtLYvbie0eQBehJIjtCrWca2ZHw,596
322
- maxframe/serialization/serializables/tests/test_serializable.py,sha256=nwdN7B2xnI_Bh-s90TyjPvyFFVWOE9JVBqm4bdwYZ6o,8243
323
- maxframe/odpsio/tableio.py,sha256=QjjcNxb8h0OXvif3xDarsjq-52aqsWdPezpSn46__g0,9360
324
- maxframe/odpsio/arrow.py,sha256=jNbfb36TDzpMjloDyXkwCfGDiCe-8z3IGMNlF_s1fIs,3783
338
+ maxframe/serialization/serializables/tests/test_serializable.py,sha256=P6BCYvm-0HxlEHruyw-SIdVBywxQw16JUMws_lvqTk0,9867
339
+ maxframe/odpsio/tableio.py,sha256=TiXZViZMqWq_RaSCCcw8EJuj7ymsKe7chIkUthrnS7I,10148
340
+ maxframe/odpsio/arrow.py,sha256=5GyAOaQLY_UeJS1CL98zNQpLMw5OfPrcI_YHP-G5Bas,3793
325
341
  maxframe/odpsio/__init__.py,sha256=HcxZsE4hRwbhtE-ZXhDWZMmQlv-2dOTvQq2NajhGEo4,799
326
342
  maxframe/odpsio/volumeio.py,sha256=b2SQqusgrtkJJ6uMjnFv5s56XjchF8F4lLTTSHynRMc,3743
327
343
  maxframe/odpsio/schema.py,sha256=aXvK_1BSwttuUyROyIa_HNHohLZBp7LrW9VXzHPGXyY,12115
328
344
  maxframe/odpsio/tests/test_tableio.py,sha256=5nKq8I8Pzrfl89BjIIGyrvqPRiXdejTcYCtd-R2vTAo,4653
329
345
  maxframe/odpsio/tests/__init__.py,sha256=FEFOVLi3o2GpZoedTtLYvbie0eQBehJIjtCrWca2ZHw,596
330
- maxframe/odpsio/tests/test_schema.py,sha256=pfBGHdgnCOcvuvEe66WCZDt_ijG2jaoA_lCKC9-ejYo,11796
346
+ maxframe/odpsio/tests/test_schema.py,sha256=XTixGKHOWiprp5PZVOo2q9h4-HAUPL8vTUmoeXQDIiM,11958
331
347
  maxframe/odpsio/tests/test_arrow.py,sha256=SQ9EmI9_VOOC8u6Rg6nh3IPC2fPbLvJ9HwtpMNDRhL8,3106
332
348
  maxframe/odpsio/tests/test_volumeio.py,sha256=UEqFANuPKyFtlIh2JNi-LoixH52bxsgHdxu3himnEvs,3022
333
- maxframe/tests/test_utils.py,sha256=xaAoURr5NOJUTY0XVa2H8qOStcEH5UQSXItkatHFxFE,11977
334
- maxframe/tests/test_protocol.py,sha256=t11yxh4_gWxxCuk09zo3pn9Nn96DBBQTBt12ewKDwLQ,5187
349
+ maxframe/tests/test_utils.py,sha256=imfe7sN1_4EjWuT4qMYMwjOjgL0t5oewyhebBGPDBhY,11504
350
+ maxframe/tests/test_protocol.py,sha256=9DWr3z1AI2DUMnLyak91PKSfV_ILkOtwAZPCmM42kcg,6103
335
351
  maxframe/tests/__init__.py,sha256=FEFOVLi3o2GpZoedTtLYvbie0eQBehJIjtCrWca2ZHw,596
336
- maxframe/tests/utils.py,sha256=wJtSFXt3BD4i5zdO4JBQk_kNAxrtyGLro0jodCA4xuY,4568
352
+ maxframe/tests/utils.py,sha256=YfK3o5VRSowVFnertoNmog3ABzNoeoiIF6MRNf4FV-U,4576
337
353
  maxframe/tests/test_codegen.py,sha256=GMrnpSb2eyB_nmuv8-_p47Kw877ElKS3BP52SpqZNIQ,2208
338
- maxframe/lib/wrapped_pickle.py,sha256=xJa0wI-GsBZFKQpVnlh_hZBlQ2u1D8VO2aBIW7VOdP4,3810
354
+ maxframe/lib/wrapped_pickle.py,sha256=HJCb8ERK6clUVgPe529vduMmbMVqBlrQ3W8mH3tYcaE,3836
339
355
  maxframe/lib/version.py,sha256=yQ6HkDOvU9X1rpI49auh-qku2g7gIiztgEH6v1urOrk,18321
340
356
  maxframe/lib/compression.py,sha256=k9DSrl_dNBsn5azLjBdL5B4WZ6eNvmCrdMbcF1G7JSc,1442
341
357
  maxframe/lib/__init__.py,sha256=CzfbLNqqm1yR1i6fDwCd4h1ptuKVDbURFVCb0ra7QNc,642
342
- maxframe/lib/mmh3.cpython-311-darwin.so,sha256=YR_c3rMEhrE9_t42f7ShWvbbXDpwhtIogplog9406Yc,120391
358
+ maxframe/lib/mmh3.pyi,sha256=AOp_XqbA5-NwepeeBeG0OFJj5tjEAFLzcViyRNZ0eVI,1494
359
+ maxframe/lib/mmh3.cpython-311-darwin.so,sha256=6ZAoajn-so_BXk4YUYB2DmLsNajh9feeIeGSG8o3kbY,119784
343
360
  maxframe/lib/functools_compat.py,sha256=PMSkct9GIbzq-aBwTnggrOLNfLh4xQnYTIFMPblzCUA,2616
344
361
  maxframe/lib/mmh3_src/mmh3module.cpp,sha256=9J9eA42eKWTl546fvfQPNuIM3B2jpWSADpgIw3tr2jg,11604
345
362
  maxframe/lib/mmh3_src/MurmurHash3.h,sha256=lg5uXUFyMBge2BWRn0FgrqaCFCMfDWoTXD4PQtjHrMA,1263
@@ -387,7 +404,7 @@ maxframe/lib/tblib/__init__.py,sha256=c4aVldbxJdS-bFsSDcmDQy_mW0qAcMrb4pHS2tjYhY
387
404
  maxframe/lib/tblib/cpython.py,sha256=FQ0f6WTQyQHoMRhgPqrA0y0Ygxlbj5IC53guxA4h9Cw,2418
388
405
  maxframe/lib/tblib/decorators.py,sha256=bcllK3kVuPnj6SNZGmlJGxTK0ovdt7TJDXrhA4UE5sQ,1063
389
406
  maxframe/tensor/array_utils.py,sha256=259vG4SjyhiheARCZeEnfJdZjoojyrELn41oRcyAELs,4943
390
- maxframe/tensor/__init__.py,sha256=-kir8LUsXCDGcc7YdKqWgNEHSrgU_HE5uPam0jLLP6g,3511
407
+ maxframe/tensor/__init__.py,sha256=BJgqcCnG0jgPBafI4Aa01gHL4nagu6l7kmlry7u8Zm8,3519
391
408
  maxframe/tensor/core.py,sha256=Ojxaf5b8sJ6ZZGezyFHQJ5XsSpUrBOnZgFeUQgpVJpI,21914
392
409
  maxframe/tensor/utils.py,sha256=bwVN0iuVic1tpFai6Hk-1tQLqckQ2IYS7yZKMTcOU1I,22914
393
410
  maxframe/tensor/operators.py,sha256=iGkDIRz152gXrPb5JbqOvXngpq3QaCg-aNO4gHZPLN0,3461
@@ -401,13 +418,13 @@ maxframe/tensor/reshape/tests/test_reshape.py,sha256=MkXN_ibLMNn_4vc8Jsq39icqTIY
401
418
  maxframe/tensor/datasource/from_dataframe.py,sha256=X6cfwLT__VGZLoy3U3tjehPnO43CnyN4kK4edDtLFrA,2503
402
419
  maxframe/tensor/datasource/zeros.py,sha256=vMJ44GeCPOxtnj-NnKvkbb4u3U_yxcEhEJa1-ADt1fM,5672
403
420
  maxframe/tensor/datasource/from_dense.py,sha256=N2FVRhU9uh-w1W8W9zvpTQVxGgskSdHZbVh_rJjC6QA,1607
404
- maxframe/tensor/datasource/scalar.py,sha256=XG9n5CB7LhVWjnyWpg0Aev8cjQvOrduR5TW_oOWc8ic,1151
421
+ maxframe/tensor/datasource/scalar.py,sha256=GzKdbBLFdq9aeWrrtZ3BT5514fBAi9A-QJ5M-EmfUX0,1156
405
422
  maxframe/tensor/datasource/empty.py,sha256=e6XYQvFsyfnGqIrU216_Q1M7cYxwkQSOoZiEhtOT8nc,5850
406
423
  maxframe/tensor/datasource/__init__.py,sha256=qU_GFAuMa_U_zrV6HcE9fsgO16EXVsqhh9j5Fxe6HFY,1146
407
424
  maxframe/tensor/datasource/core.py,sha256=VpjxIcWp_O00smfvDsRIQ48d3HOIJ81hkn78S3H2n_U,3411
408
425
  maxframe/tensor/datasource/full.py,sha256=2oaPGJDbnIz9th74KtGYv-l4cienh679dGueJCi5T08,6276
409
426
  maxframe/tensor/datasource/arange.py,sha256=jqUF1P1Smu2Bl1j5uOe_MM1EPft8heJu8WSmDmyFiDc,5476
410
- maxframe/tensor/datasource/array.py,sha256=sHY_UfJVhiBbEDPyJM9rt5ix3h5USuuCWWEzb1H9NCU,12912
427
+ maxframe/tensor/datasource/array.py,sha256=RmSX0OZrtPPfUNxJwRef8uJlTt76QF0xAeU3U8Wu2kE,13004
411
428
  maxframe/tensor/datasource/from_sparse.py,sha256=ki_cSjqrUccChg2uqlXy1xF10c4YANA4QP_UDl_LZnA,1546
412
429
  maxframe/tensor/datasource/ones.py,sha256=ER4NJ53HuGlSsz-cRXz9YSwZkokdc2wkBKdB2G1BMX8,5009
413
430
  maxframe/tensor/datasource/tests/test_datasource.py,sha256=SEyzSKnf0J6nytli1f2Lgu-U4lp6pMvbuyNM-90x9wQ,7653
@@ -427,7 +444,7 @@ maxframe/tensor/reduction/max.py,sha256=Z6TQSwaDcOmSstjKjntqKfinvF0XWNTGYDvvV-AI
427
444
  maxframe/tensor/reduction/allclose.py,sha256=8C9E01aUZL-rGjlx_S1zN504peV_7vjjQA3DZSPElOI,2942
428
445
  maxframe/tensor/reduction/nanmin.py,sha256=hq3TE7pM9HGakNEOIE9QPHG2O8soa2uPBrVsVHYsYyw,3947
429
446
  maxframe/tensor/reduction/nanvar.py,sha256=HmF0rOtjKFC-Rb0RubU5r5eDnf1HDf6W7knz0OxTOTc,5418
430
- maxframe/tensor/reduction/count_nonzero.py,sha256=Q1Sf4LqS0WNs3sCdwzHaIpJ5ilm5Jvnm-BXcPKSm98U,2725
447
+ maxframe/tensor/reduction/count_nonzero.py,sha256=3lzihwV17qw0hPyI7k-iq7i-L3ToMMRX5MgoRvlONLI,2721
431
448
  maxframe/tensor/reduction/nanmean.py,sha256=Ar_BbvsM600v3NkJIPUNsHo5Fv2S_INwOOEyRgpnc3A,3944
432
449
  maxframe/tensor/reduction/nancumsum.py,sha256=r47LTZ65-m6u1vr-zoxKw50Q3wOg2gwWy3ewHtV1jRg,3283
433
450
  maxframe/tensor/reduction/nansum.py,sha256=2x-RMKHxN9ikE8tm455wpKtYT1i-lKtuE03mKQopzA0,4066
@@ -553,7 +570,7 @@ maxframe/tensor/arithmetic/sin.py,sha256=Ux8mQS-pb3F7PCD_35Ghl7p2e2yF2jiS_1WC9zi
553
570
  maxframe/tensor/arithmetic/reciprocal.py,sha256=q3TKbF209Kbv7HD0hM9AF7xlQ9zXHrpHaFc9dHFuplE,2375
554
571
  maxframe/tensor/arithmetic/bitxor.py,sha256=l1bRVnzHSa7N7-nd2MzDxF33guNoml8mPB9t9_0QpMc,2908
555
572
  maxframe/tensor/arithmetic/tests/__init__.py,sha256=CzfbLNqqm1yR1i6fDwCd4h1ptuKVDbURFVCb0ra7QNc,642
556
- maxframe/tensor/arithmetic/tests/test_arithmetic.py,sha256=dzFf3ijSeVKOSiP1iI_pwxJUoVuY9r6T8O87pbVrLmk,10989
573
+ maxframe/tensor/arithmetic/tests/test_arithmetic.py,sha256=_zCcx-fzGoKjzkv90bkz3zzOs3u2afvKVotCWF-xCZU,10995
557
574
  maxframe/tensor/indexing/choose.py,sha256=TNsRP_1zoMnqfJyqk_RgPtRPFCisEXq5CMh3FUmPZ-8,7584
558
575
  maxframe/tensor/indexing/nonzero.py,sha256=JN5TyPzS1LIIjIaieXsDkffCjuq-CPBUDG3qMvNsIWI,3646
559
576
  maxframe/tensor/indexing/slice.py,sha256=VbalHoaXUGulPjskcQ4PoiZQhB2q3P1R8MrGKY2MqGw,1022
@@ -619,10 +636,12 @@ maxframe/tensor/random/tests/__init__.py,sha256=CzfbLNqqm1yR1i6fDwCd4h1ptuKVDbUR
619
636
  maxframe/tensor/random/tests/test_random.py,sha256=2hGaik9A783PFuuxIrhCDZ2O-SYKwUh98LKPwf1psLs,4275
620
637
  maxframe/tensor/base/astype.py,sha256=zeLfyWkuc1LxMIiIO6ghZ_enR7IPgq0Hy4O18h8JQPk,4394
621
638
  maxframe/tensor/base/where.py,sha256=fMGBfppo4QToHX-B3rtTorstz83m8uWWhOQj6Qbu34U,4000
622
- maxframe/tensor/base/__init__.py,sha256=K9PKpd7qgDo94G8s4z9e4wzv53EEWCu5IWSgJ0-XSwo,1017
639
+ maxframe/tensor/base/unique.py,sha256=52OM0UvbxbgvpjSGcTdCRi3fJUzFA-GxZpn7RExJGEo,6738
640
+ maxframe/tensor/base/__init__.py,sha256=FMnuIAaGUObPZpXBnN-9eTSmmdq0Cdb-VI_JNHKVy3Q,1079
623
641
  maxframe/tensor/base/transpose.py,sha256=yDfr1vD6doNlsuKuU94daE0IgIwGMuyBfXhKauQ1UaM,3414
624
642
  maxframe/tensor/base/ravel.py,sha256=pJkez1NHoLqVMBPm5aA8uMNFeWURTAJV_iU98Vqr-50,3173
625
643
  maxframe/tensor/base/broadcast_to.py,sha256=p0hi128OWlj3lXmacvxMhZOjUCq8fiA3yjy9nESZXgE,2686
644
+ maxframe/tensor/base/atleast_1d.py,sha256=rCw_Ik6Y4isiMuC2Kvs0F7nDdSvx9RPahoq_v6D66Jo,1918
626
645
  maxframe/tensor/base/tests/__init__.py,sha256=FEFOVLi3o2GpZoedTtLYvbie0eQBehJIjtCrWca2ZHw,596
627
646
  maxframe/tensor/base/tests/test_base.py,sha256=syedkA0jMjevYouCL3vCMuWpJ-3hfOc28wKXqF_MMno,2843
628
647
  maxframe/remote/run_script.py,sha256=Z1j662AwDF9sr-z1xnPTlrfSTixi2RBZjccXEilfpGA,3556
@@ -13,5 +13,4 @@
13
13
  # limitations under the License.
14
14
 
15
15
  from .clients.framedriver import FrameDriverClient
16
- from .clients.spe import SPEClient
17
16
  from .session import MaxFrameRestSession
@@ -12,16 +12,21 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ import base64
16
+ import json
15
17
  from abc import ABC, abstractmethod
16
18
  from numbers import Integral
17
- from typing import Any, Dict, List, Type, Union
19
+ from typing import Any, Dict, List, Optional, Type, Union
18
20
 
21
+ import pandas as pd
19
22
  import pyarrow as pa
20
23
  from odps import ODPS
21
24
  from odps.models import ExternalVolume, PartedVolume
25
+ from odps.tunnel import TableTunnel
22
26
  from tornado import httpclient
23
27
 
24
28
  from maxframe.core import OBJECT_TYPE
29
+ from maxframe.dataframe.core import DATAFRAME_TYPE
25
30
  from maxframe.lib import wrapped_pickle as pickle
26
31
  from maxframe.odpsio import HaloTableIO, arrow_to_pandas, build_dataframe_table_meta
27
32
  from maxframe.protocol import (
@@ -31,8 +36,9 @@ from maxframe.protocol import (
31
36
  ResultInfo,
32
37
  ResultType,
33
38
  )
39
+ from maxframe.tensor.core import TENSOR_TYPE
34
40
  from maxframe.typing_ import PandasObjectTypes, TileableType
35
- from maxframe.utils import ToThreadMixin
41
+ from maxframe.utils import ToThreadMixin, deserialize_serializable
36
42
 
37
43
  _result_fetchers: Dict[ResultType, Type["ResultFetcher"]] = dict()
38
44
 
@@ -52,6 +58,14 @@ class ResultFetcher(ABC):
52
58
  def __init__(self, odps_entry: ODPS):
53
59
  self._odps_entry = odps_entry
54
60
 
61
+ @abstractmethod
62
+ async def update_tileable_meta(
63
+ self,
64
+ tileable: TileableType,
65
+ info: ResultInfo,
66
+ ) -> None:
67
+ raise NotImplementedError
68
+
55
69
  @abstractmethod
56
70
  async def fetch(
57
71
  self,
@@ -66,6 +80,13 @@ class ResultFetcher(ABC):
66
80
  class NullFetcher(ResultFetcher):
67
81
  result_type = ResultType.NULL
68
82
 
83
+ async def update_tileable_meta(
84
+ self,
85
+ tileable: TileableType,
86
+ info: ResultInfo,
87
+ ) -> None:
88
+ return
89
+
69
90
  async def fetch(
70
91
  self,
71
92
  tileable: TileableType,
@@ -79,6 +100,40 @@ class NullFetcher(ResultFetcher):
79
100
  class ODPSTableFetcher(ToThreadMixin, ResultFetcher):
80
101
  result_type = ResultType.ODPS_TABLE
81
102
 
103
+ def _get_table_comment(self, table_name: str) -> Optional[str]:
104
+ table = self._odps_entry.get_table(table_name)
105
+ return getattr(table, "comment", None)
106
+
107
+ async def update_tileable_meta(
108
+ self,
109
+ tileable: TileableType,
110
+ info: ODPSTableResultInfo,
111
+ ) -> None:
112
+ if isinstance(tileable, DATAFRAME_TYPE) and tileable.dtypes is None:
113
+ tb_comment = await self.to_thread(
114
+ self._get_table_comment, info.full_table_name
115
+ )
116
+ if tb_comment: # pragma: no branch
117
+ comment_data = json.loads(tb_comment)
118
+
119
+ table_meta: DataFrameTableMeta = deserialize_serializable(
120
+ base64.b64decode(comment_data["table_meta"])
121
+ )
122
+ tileable.refresh_from_table_meta(table_meta)
123
+
124
+ if tileable.shape and any(pd.isna(x) for x in tileable.shape):
125
+ part_specs = [None] if not info.partition_specs else info.partition_specs
126
+ tunnel = TableTunnel(self._odps_entry)
127
+ total_records = 0
128
+ for part_spec in part_specs:
129
+ session = tunnel.create_download_session(
130
+ info.full_table_name, part_spec
131
+ )
132
+ total_records += session.count
133
+ new_shape_list = list(tileable.shape)
134
+ new_shape_list[-1] = total_records
135
+ tileable.params = {"shape": tuple(new_shape_list)}
136
+
82
137
  def _read_single_source(
83
138
  self,
84
139
  table_meta: DataFrameTableMeta,
@@ -149,6 +204,13 @@ class ODPSTableFetcher(ToThreadMixin, ResultFetcher):
149
204
  class ODPSVolumeFetcher(ToThreadMixin, ResultFetcher):
150
205
  result_type = ResultType.ODPS_VOLUME
151
206
 
207
+ async def update_tileable_meta(
208
+ self,
209
+ tileable: TileableType,
210
+ info: ODPSVolumeResultInfo,
211
+ ) -> None:
212
+ return
213
+
152
214
  async def _read_parted_volume_data(
153
215
  self, volume: PartedVolume, partition: str, file_name: str
154
216
  ) -> bytes:
@@ -197,6 +259,6 @@ class ODPSVolumeFetcher(ToThreadMixin, ResultFetcher):
197
259
  info: ODPSVolumeResultInfo,
198
260
  indexes: List[Union[Integral, slice]],
199
261
  ) -> Any:
200
- if isinstance(tileable, OBJECT_TYPE):
262
+ if isinstance(tileable, (OBJECT_TYPE, TENSOR_TYPE)):
201
263
  return await self._fetch_object(info)
202
264
  raise NotImplementedError(f"Fetching {type(tileable)} not implemented")
@@ -31,6 +31,11 @@ from maxframe.dataframe import read_odps_table
31
31
  from maxframe.dataframe.core import DATAFRAME_TYPE, SERIES_TYPE
32
32
  from maxframe.dataframe.datasource import PandasDataSourceOperator
33
33
  from maxframe.dataframe.datasource.read_odps_table import DataFrameReadODPSTable
34
+ from maxframe.errors import (
35
+ MaxFrameError,
36
+ NoTaskServerResponseError,
37
+ SessionAlreadyClosedError,
38
+ )
34
39
  from maxframe.odpsio import HaloTableIO, pandas_to_arrow, pandas_to_odps_schema
35
40
  from maxframe.protocol import (
36
41
  DagInfo,
@@ -84,6 +89,9 @@ class MaxFrameServiceCaller(metaclass=abc.ABCMeta):
84
89
  def decref(self, tileable_keys: List[str]) -> None:
85
90
  raise NotImplementedError
86
91
 
92
+ def get_logview_address(self, dag_id=None, hours=None) -> Optional[str]:
93
+ return None
94
+
87
95
 
88
96
  class MaxFrameSession(ToThreadMixin, IsolatedAsyncSession):
89
97
  _odps_entry: Optional[ODPS]
@@ -129,6 +137,7 @@ class MaxFrameSession(ToThreadMixin, IsolatedAsyncSession):
129
137
  async def _init(self, _address: str):
130
138
  session_info = await self.ensure_async_call(self._caller.create_session)
131
139
  self._session_id = session_info.session_id
140
+ await self._show_logview_address()
132
141
 
133
142
  def _upload_and_get_read_tileable(self, t: TileableType) -> Optional[TileableType]:
134
143
  if (
@@ -140,9 +149,16 @@ class MaxFrameSession(ToThreadMixin, IsolatedAsyncSession):
140
149
 
141
150
  schema, table_meta = pandas_to_odps_schema(t, unknown_as_string=True)
142
151
  if self._odps_entry.exist_table(table_meta.table_name):
143
- self._odps_entry.delete_table(table_meta.table_name)
152
+ self._odps_entry.delete_table(
153
+ table_meta.table_name, hints=options.sql.settings
154
+ )
144
155
  table_name = build_temp_table_name(self.session_id, t.key)
145
- table_obj = self._odps_entry.create_table(table_name, schema)
156
+ table_obj = self._odps_entry.create_table(
157
+ table_name,
158
+ schema,
159
+ lifecycle=options.session.temp_table_lifecycle,
160
+ hints=options.sql.settings,
161
+ )
146
162
 
147
163
  data = t.op.get_data()
148
164
  batch_size = options.session.upload_batch_size
@@ -239,6 +255,8 @@ class MaxFrameSession(ToThreadMixin, IsolatedAsyncSession):
239
255
  self._caller.submit_dag, tileable_graph, replaced_infos
240
256
  )
241
257
 
258
+ await self._show_logview_address(dag_info.dag_id)
259
+
242
260
  progress = Progress()
243
261
  profiling = Profiling()
244
262
  aio_task = asyncio.create_task(
@@ -256,8 +274,10 @@ class MaxFrameSession(ToThreadMixin, IsolatedAsyncSession):
256
274
  self, dag_info: DagInfo, tileables: List, progress: Progress
257
275
  ):
258
276
  start_time = time.time()
277
+ session_id = dag_info.session_id
259
278
  dag_id = dag_info.dag_id
260
279
  wait_timeout = 10
280
+ server_no_response_time = None
261
281
  with enter_mode(build=True, kernel=True):
262
282
  key_to_tileables = {t.key: t for t in tileables}
263
283
 
@@ -272,9 +292,37 @@ class MaxFrameSession(ToThreadMixin, IsolatedAsyncSession):
272
292
  if timeout_val <= 0:
273
293
  raise TimeoutError("Running DAG timed out")
274
294
 
275
- dag_info: DagInfo = await self.ensure_async_call(
276
- self._caller.get_dag_info, dag_id
277
- )
295
+ try:
296
+ dag_info: DagInfo = await self.ensure_async_call(
297
+ self._caller.get_dag_info, dag_id
298
+ )
299
+ server_no_response_time = None
300
+ except (NoTaskServerResponseError, SessionAlreadyClosedError) as ex:
301
+ # when we receive SessionAlreadyClosedError after NoTaskServerResponseError
302
+ # is received, it is possible that task server is restarted and
303
+ # SessionAlreadyClosedError might be flaky. Otherwise, the error
304
+ # should be raised.
305
+ if (
306
+ isinstance(ex, SessionAlreadyClosedError)
307
+ and not server_no_response_time
308
+ ):
309
+ raise
310
+ server_no_response_time = server_no_response_time or time.time()
311
+ if (
312
+ time.time() - server_no_response_time
313
+ > options.client.task_restart_timeout
314
+ ):
315
+ raise MaxFrameError(
316
+ "Failed to get valid response from service. "
317
+ f"Session {self._session_id}."
318
+ ) from None
319
+ await asyncio.sleep(timeout_val)
320
+ continue
321
+
322
+ if dag_info is None:
323
+ raise SystemError(
324
+ f"Cannot find DAG with ID {dag_id} in session {session_id}"
325
+ )
278
326
  progress.value = dag_info.progress
279
327
  if dag_info.status != DagStatus.RUNNING:
280
328
  break
@@ -294,6 +342,8 @@ class MaxFrameSession(ToThreadMixin, IsolatedAsyncSession):
294
342
 
295
343
  for key, result_info in dag_info.tileable_to_result_infos.items():
296
344
  t = key_to_tileables[key]
345
+ fetcher = get_fetcher_cls(result_info.result_type)(self._odps_entry)
346
+ await fetcher.update_tileable_meta(t, result_info)
297
347
  self._tileable_to_infos[t] = result_info
298
348
 
299
349
  def _get_data_tileable_and_indexes(
@@ -388,6 +438,25 @@ class MaxFrameSession(ToThreadMixin, IsolatedAsyncSession):
388
438
  async def get_mutable_tensor(self, name: str):
389
439
  raise NotImplementedError
390
440
 
441
+ async def get_logview_address(self, hours=None) -> Optional[str]:
442
+ return await self.get_dag_logview_address(None, hours)
443
+
444
+ async def get_dag_logview_address(self, dag_id=None, hours=None) -> Optional[str]:
445
+ return await self.ensure_async_call(
446
+ self._caller.get_logview_address, dag_id, hours
447
+ )
448
+
449
+ async def _show_logview_address(self, dag_id=None, hours=None):
450
+ identity = f"Session ID: {self._session_id}"
451
+ if dag_id:
452
+ identity += f", DAG ID: {dag_id}"
453
+
454
+ logview_addr = await self.get_dag_logview_address(dag_id, hours)
455
+ if logview_addr:
456
+ logger.info("%s, Logview: %s", identity, logview_addr)
457
+ else:
458
+ logger.info("%s, Logview address does not exist", identity)
459
+
391
460
 
392
461
  class MaxFrameRestCaller(MaxFrameServiceCaller):
393
462
  _client: FrameDriverClient