maxframe 0.1.0b5__cp38-cp38-win_amd64.whl → 1.0.0rc1__cp38-cp38-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 (47) hide show
  1. maxframe/_utils.cp38-win_amd64.pyd +0 -0
  2. maxframe/codegen.py +10 -2
  3. maxframe/config/config.py +4 -0
  4. maxframe/core/__init__.py +0 -3
  5. maxframe/core/entity/__init__.py +1 -8
  6. maxframe/core/entity/objects.py +3 -45
  7. maxframe/core/graph/core.cp38-win_amd64.pyd +0 -0
  8. maxframe/core/graph/core.pyx +4 -4
  9. maxframe/dataframe/datastore/tests/__init__.py +13 -0
  10. maxframe/dataframe/datastore/tests/test_to_odps.py +48 -0
  11. maxframe/dataframe/datastore/to_odps.py +21 -0
  12. maxframe/dataframe/indexing/align.py +1 -1
  13. maxframe/dataframe/misc/apply.py +2 -0
  14. maxframe/dataframe/misc/memory_usage.py +2 -2
  15. maxframe/dataframe/misc/tests/test_misc.py +23 -0
  16. maxframe/dataframe/statistics/corr.py +3 -3
  17. maxframe/errors.py +13 -0
  18. maxframe/extension.py +12 -0
  19. maxframe/lib/mmh3.cp38-win_amd64.pyd +0 -0
  20. maxframe/lib/mmh3.pyi +43 -0
  21. maxframe/lib/wrapped_pickle.py +2 -1
  22. maxframe/protocol.py +108 -10
  23. maxframe/serialization/core.cp38-win_amd64.pyd +0 -0
  24. maxframe/serialization/core.pxd +3 -0
  25. maxframe/serialization/core.pyi +3 -0
  26. maxframe/serialization/core.pyx +54 -25
  27. maxframe/serialization/exception.py +1 -1
  28. maxframe/serialization/pandas.py +7 -2
  29. maxframe/serialization/serializables/core.py +119 -12
  30. maxframe/serialization/serializables/tests/test_serializable.py +46 -4
  31. maxframe/tensor/arithmetic/tests/test_arithmetic.py +1 -1
  32. maxframe/tensor/base/atleast_1d.py +1 -1
  33. maxframe/tensor/base/unique.py +1 -1
  34. maxframe/tensor/reduction/count_nonzero.py +1 -1
  35. maxframe/tests/test_protocol.py +34 -0
  36. maxframe/tests/test_utils.py +0 -12
  37. maxframe/tests/utils.py +2 -2
  38. maxframe/utils.py +16 -13
  39. {maxframe-0.1.0b5.dist-info → maxframe-1.0.0rc1.dist-info}/METADATA +2 -2
  40. {maxframe-0.1.0b5.dist-info → maxframe-1.0.0rc1.dist-info}/RECORD +46 -44
  41. maxframe_client/__init__.py +0 -1
  42. maxframe_client/session/odps.py +45 -5
  43. maxframe_client/session/task.py +41 -20
  44. maxframe_client/tests/test_session.py +36 -0
  45. maxframe_client/clients/spe.py +0 -104
  46. {maxframe-0.1.0b5.dist-info → maxframe-1.0.0rc1.dist-info}/WHEEL +0 -0
  47. {maxframe-0.1.0b5.dist-info → maxframe-1.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -94,6 +94,11 @@ class MySimpleSerializable(Serializable):
94
94
  _ref_val = ReferenceField("ref_val", "MySimpleSerializable")
95
95
 
96
96
 
97
+ class MySubSerializable(MySimpleSerializable):
98
+ _m_int_val = Int64Field("m_int_val", default=250)
99
+ _m_str_val = StringField("m_str_val", default="SUB_STR")
100
+
101
+
97
102
  class MySerializable(Serializable):
98
103
  _id = IdentityField("id")
99
104
  _any_val = AnyField("any_val")
@@ -141,7 +146,7 @@ class MySerializable(Serializable):
141
146
 
142
147
 
143
148
  @pytest.mark.parametrize("set_is_ci", [False, True], indirect=True)
144
- @switch_unpickle
149
+ @switch_unpickle(forbidden=False)
145
150
  def test_serializable(set_is_ci):
146
151
  my_serializable = MySerializable(
147
152
  _id="1",
@@ -165,7 +170,9 @@ def test_serializable(set_is_ci):
165
170
  _key_val=MyHasKey("aaa"),
166
171
  _ndarray_val=np.random.rand(4, 3),
167
172
  _datetime64_val=pd.Timestamp(123),
168
- _timedelta64_val=pd.Timedelta(days=1),
173
+ _timedelta64_val=pd.Timedelta(
174
+ days=1, seconds=123, microseconds=345, nanoseconds=132
175
+ ),
169
176
  _datatype_val=np.dtype(np.int32),
170
177
  _index_val=pd.Index([1, 2]),
171
178
  _series_val=pd.Series(["a", "b"]),
@@ -187,9 +194,44 @@ def test_serializable(set_is_ci):
187
194
  _assert_serializable_eq(my_serializable, my_serializable2)
188
195
 
189
196
 
197
+ @pytest.mark.parametrize("set_is_ci", [False, True], indirect=True)
198
+ @switch_unpickle
199
+ def test_compatible_serializable(set_is_ci):
200
+ global MySimpleSerializable, MySubSerializable
201
+
202
+ old_base, old_sub = MySimpleSerializable, MySubSerializable
203
+
204
+ try:
205
+ my_sub_serializable = MySubSerializable(
206
+ _id="id_val",
207
+ _list_val=["abcd", "wxyz"],
208
+ _ref_val=MyHasKey(),
209
+ _m_int_val=3412,
210
+ _m_str_val="dfgghj",
211
+ )
212
+ header, buffers = serialize(my_sub_serializable)
213
+
214
+ class MySimpleSerializable(Serializable):
215
+ _id = IdentityField("id")
216
+ _int_val = Int64Field("int_val", default=1000)
217
+ _list_val = ListField("list_val", default_factory=list)
218
+ _ref_val = ReferenceField("ref_val", "MySimpleSerializable")
219
+ _dict_val = DictField("dict_val")
220
+
221
+ class MySubSerializable(MySimpleSerializable):
222
+ _m_int_val = Int64Field("m_int_val", default=250)
223
+ _m_str_val = StringField("m_str_val", default="SUB_STR")
224
+
225
+ my_sub_serializable2 = deserialize(header, buffers)
226
+ assert type(my_sub_serializable) is not type(my_sub_serializable2)
227
+ _assert_serializable_eq(my_sub_serializable, my_sub_serializable2)
228
+ finally:
229
+ MySimpleSerializable, MySubSerializable = old_base, old_sub
230
+
231
+
190
232
  def _assert_serializable_eq(my_serializable, my_serializable2):
191
233
  for field_name, field in my_serializable._FIELDS.items():
192
- if not hasattr(my_serializable, field.tag):
234
+ if not hasattr(my_serializable, field.name):
193
235
  continue
194
236
  expect_value = getattr(my_serializable, field_name)
195
237
  actual_value = getattr(my_serializable2, field_name)
@@ -208,7 +250,7 @@ def _assert_serializable_eq(my_serializable, my_serializable2):
208
250
  elif callable(expect_value):
209
251
  assert expect_value(1) == actual_value(1)
210
252
  else:
211
- assert expect_value == actual_value
253
+ assert expect_value == actual_value, f"Field {field_name}"
212
254
 
213
255
 
214
256
  @pytest.mark.parametrize("set_is_ci", [True], indirect=True)
@@ -252,7 +252,7 @@ def test_compare():
252
252
 
253
253
  def test_frexp():
254
254
  t1 = ones((3, 4, 5), chunk_size=2)
255
- t2 = empty((3, 4, 5), dtype=np.float_, chunk_size=2)
255
+ t2 = empty((3, 4, 5), dtype=np.dtype(float), chunk_size=2)
256
256
  op_type = type(t1.op)
257
257
 
258
258
  o1, o2 = frexp(t1)
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
- # Copyright 1999-2021 Alibaba Group Holding Ltd.
3
+ # Copyright 1999-2024 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.
@@ -75,7 +75,7 @@ class TensorUnique(TensorHasInput, TensorOperatorMixin):
75
75
  if self.return_counts:
76
76
  kw = {
77
77
  "shape": (np.nan,),
78
- "dtype": np.dtype(np.int_),
78
+ "dtype": np.dtype(int),
79
79
  "gpu": input_obj.op.gpu,
80
80
  "type": "counts",
81
81
  }
@@ -77,5 +77,5 @@ def count_nonzero(a, axis=None):
77
77
  array([2, 3])
78
78
 
79
79
  """
80
- op = TensorCountNonzero(axis=axis, dtype=np.dtype(np.int_), keepdims=None)
80
+ op = TensorCountNonzero(axis=axis, dtype=np.dtype(int), keepdims=None)
81
81
  return op(a)
@@ -85,6 +85,40 @@ def test_error_info_json_serialize():
85
85
  deserial_err_info.reraise()
86
86
 
87
87
 
88
+ class CannotPickleException(Exception):
89
+ def __reduce__(self):
90
+ raise ValueError
91
+
92
+
93
+ class CannotUnpickleException(Exception):
94
+ @classmethod
95
+ def load_from_pk(cls, _):
96
+ raise ValueError
97
+
98
+ def __reduce__(self):
99
+ return type(self).load_from_pk, (0,)
100
+
101
+
102
+ def test_error_info_fallback_json_serialize():
103
+ try:
104
+ raise CannotPickleException
105
+ except CannotPickleException as ex:
106
+ err_info1 = ErrorInfo.from_exception(ex)
107
+
108
+ try:
109
+ raise CannotUnpickleException
110
+ except CannotUnpickleException as ex:
111
+ err_info2 = ErrorInfo.from_exception(ex)
112
+
113
+ for err_info in (err_info1, err_info2):
114
+ deserial_err_info = ErrorInfo.from_json(err_info.to_json())
115
+ assert deserial_err_info.raw_error_source is None
116
+ assert deserial_err_info.raw_error_data is None
117
+
118
+ with pytest.raises(RemoteException):
119
+ deserial_err_info.reraise()
120
+
121
+
88
122
  def test_dag_info_json_serialize():
89
123
  try:
90
124
  raise ValueError("ERR_DATA")
@@ -288,15 +288,6 @@ def test_estimate_pandas_size():
288
288
  df2 = pd.DataFrame(np.random.rand(1000, 10))
289
289
  assert utils.estimate_pandas_size(df2) == sys.getsizeof(df2)
290
290
 
291
- df3 = pd.DataFrame(
292
- {
293
- "A": np.random.choice(["abcd", "def", "gh"], size=(1000,)),
294
- "B": np.random.rand(1000),
295
- "C": np.random.rand(1000),
296
- }
297
- )
298
- assert utils.estimate_pandas_size(df3) != sys.getsizeof(df3)
299
-
300
291
  s1 = pd.Series(np.random.rand(1000))
301
292
  assert utils.estimate_pandas_size(s1) == sys.getsizeof(s1)
302
293
 
@@ -307,7 +298,6 @@ def test_estimate_pandas_size():
307
298
  assert utils.estimate_pandas_size(s2) == sys.getsizeof(s2)
308
299
 
309
300
  s3 = pd.Series(np.random.choice(["abcd", "def", "gh"], size=(1000,)))
310
- assert utils.estimate_pandas_size(s3) != sys.getsizeof(s3)
311
301
  assert (
312
302
  pytest.approx(utils.estimate_pandas_size(s3) / sys.getsizeof(s3), abs=0.5) == 1
313
303
  )
@@ -318,7 +308,6 @@ def test_estimate_pandas_size():
318
308
  assert utils.estimate_pandas_size(idx1) == sys.getsizeof(idx1)
319
309
 
320
310
  string_idx = pd.Index(np.random.choice(["a", "bb", "cc"], size=(1000,)))
321
- assert utils.estimate_pandas_size(string_idx) != sys.getsizeof(string_idx)
322
311
  assert (
323
312
  pytest.approx(
324
313
  utils.estimate_pandas_size(string_idx) / sys.getsizeof(string_idx), abs=0.5
@@ -338,7 +327,6 @@ def test_estimate_pandas_size():
338
327
  },
339
328
  index=idx2,
340
329
  )
341
- assert utils.estimate_pandas_size(df4) != sys.getsizeof(df4)
342
330
  assert (
343
331
  pytest.approx(utils.estimate_pandas_size(df4) / sys.getsizeof(df4), abs=0.5)
344
332
  == 1
maxframe/tests/utils.py CHANGED
@@ -25,7 +25,7 @@ import pytest
25
25
  from tornado import netutil
26
26
 
27
27
  from ..core import Tileable, TileableGraph
28
- from ..utils import lazy_import
28
+ from ..utils import create_event, lazy_import
29
29
 
30
30
  try:
31
31
  from flaky import flaky
@@ -102,7 +102,7 @@ def run_app_in_thread(app_func):
102
102
  def fixture_func(*args, **kwargs):
103
103
  app_loop = asyncio.new_event_loop()
104
104
  q = queue.Queue()
105
- exit_event = asyncio.Event(loop=app_loop)
105
+ exit_event = create_event(app_loop)
106
106
  app_thread = Thread(
107
107
  name="TestAppThread",
108
108
  target=app_thread_func,
maxframe/utils.py CHANGED
@@ -33,7 +33,6 @@ import sys
33
33
  import threading
34
34
  import time
35
35
  import tokenize as pytokenize
36
- import traceback
37
36
  import types
38
37
  import weakref
39
38
  import zlib
@@ -396,18 +395,6 @@ def build_tileable_dir_name(tileable_key: str) -> str:
396
395
  return m.hexdigest()
397
396
 
398
397
 
399
- def extract_messages_and_stacks(exc: Exception) -> Tuple[List[str], List[str]]:
400
- cur_exc = exc
401
- messages, stacks = [], []
402
- while True:
403
- messages.append(str(cur_exc))
404
- stacks.append("".join(traceback.format_tb(cur_exc.__traceback__)))
405
- if exc.__cause__ is None:
406
- break
407
- cur_exc = exc.__cause__
408
- return messages, stacks
409
-
410
-
411
398
  async def wait_http_response(
412
399
  url: str, *, request_timeout: TimeoutType = None, **kwargs
413
400
  ) -> httpclient.HTTPResponse:
@@ -449,6 +436,21 @@ async def to_thread_pool(func, *args, pool=None, **kwargs):
449
436
  return await loop.run_in_executor(pool, func_call)
450
437
 
451
438
 
439
+ def create_event(loop: asyncio.AbstractEventLoop) -> asyncio.Event:
440
+ """
441
+ Create an asyncio.Event in a certain event loop.
442
+ """
443
+ if sys.version_info[1] < 10 or loop is None:
444
+ return asyncio.Event(loop=loop)
445
+
446
+ # From Python3.10 the loop parameter has been removed. We should work around here.
447
+ old_loop = asyncio.get_running_loop()
448
+ asyncio.set_event_loop(loop)
449
+ event = asyncio.Event()
450
+ asyncio.set_event_loop(old_loop)
451
+ return event
452
+
453
+
452
454
  class ToThreadCancelledError(asyncio.CancelledError):
453
455
  def __init__(self, *args, result=None):
454
456
  super().__init__(*args)
@@ -519,6 +521,7 @@ def config_odps_default_options():
519
521
  "metaservice.client.cache.enable": "false",
520
522
  "odps.sql.session.result.cache.enable": "false",
521
523
  "odps.sql.submit.mode": "script",
524
+ "odps.sql.job.max.time.hours": 72,
522
525
  }
523
526
 
524
527
 
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: maxframe
3
- Version: 0.1.0b5
3
+ Version: 1.0.0rc1
4
4
  Summary: MaxFrame operator-based data analyze framework
5
- Requires-Dist: numpy >=1.19.0
5
+ Requires-Dist: numpy <2.0.0,>=1.19.0
6
6
  Requires-Dist: pandas >=1.0.0
7
7
  Requires-Dist: pyodps >=0.11.6.1
8
8
  Requires-Dist: scipy >=1.0
@@ -1,40 +1,40 @@
1
1
  maxframe/__init__.py,sha256=RujkARDvD6mhFpR330UQ0UfogvIdae5EjR1euFpTiYA,1036
2
- maxframe/_utils.cp38-win_amd64.pyd,sha256=YAYj2lmyJ07uTXwKcKraQwYpmeufMzpHv6gOs3b9xdE,308736
2
+ maxframe/_utils.cp38-win_amd64.pyd,sha256=jRppoqgYbwDIBRpE6A_q7ELBbg5B9M4Sak2ho9h-F2Q,309248
3
3
  maxframe/_utils.pxd,sha256=_qHN-lCY1FQgDFIrrqA79Ys0SBdonp9kXRMS93xKSYk,1187
4
4
  maxframe/_utils.pyx,sha256=_3p6aJEJ6WZYLcNZ6o4DxoxsxqadTlJXFlgDeFPxqUQ,17564
5
- maxframe/codegen.py,sha256=bkOqyLYo_8sJ_zPZK-T9JMvBeKkntqb1Oona9l2aNio,18044
5
+ maxframe/codegen.py,sha256=t56uoJpfbyLvrctodXn-q3VoLzbwPgNSaXUsL4Ig4Ao,18345
6
6
  maxframe/conftest.py,sha256=JE9I-5mP4u-vgUqYL22mNY3tqpGofM8VMe8c8VUYkzk,4403
7
7
  maxframe/env.py,sha256=xY4wjMWIJ4qLsFAQ5F-X5CrVR7dDSWiryPXni0YSK5c,1435
8
- maxframe/errors.py,sha256=xBnvoJjjNcHVLhwj77Dux9ut8isGVmmJXFqefmmx8Ak,711
9
- maxframe/extension.py,sha256=o7yiS99LWTtLF7ZX6F78UUJAqUyd-LllOXA2l69np50,2455
8
+ maxframe/errors.py,sha256=nhQVjRbH5EsyLZhyAufvHpMhfDN6eR8vcrv4sjaI7p8,1000
9
+ maxframe/extension.py,sha256=XKgK2b42i-jfnLc0lBPiBMsGA6HMQ4a12mJc09tMAFc,2752
10
10
  maxframe/mixin.py,sha256=QfX0KqVIWDlVDSFs0lwdzLexw7lS7W_IUuK7aY1Ib8c,3624
11
11
  maxframe/opcodes.py,sha256=4Gj2svgrNNxylfUbQYs8WbDqTpoCoLtlNCtAYdHr-BU,10781
12
- maxframe/protocol.py,sha256=N4i0ggLY131gwnxOrCgKeZwzhLKSRB171cx1lWRvUcw,14605
12
+ maxframe/protocol.py,sha256=3SvkrIxd-NoDpUdJnYPUhzIkX5G53krG_DkynO96ivQ,18330
13
13
  maxframe/session.py,sha256=CfDT2iwjl5NAisPrZ6LF0xG_hr75Wr0cfHd6rvtHajw,37515
14
14
  maxframe/typing_.py,sha256=pAgOhHHSM376N7PJLtNXvS5LHNYywz5dIjnA_hHRWSM,1133
15
15
  maxframe/udf.py,sha256=GJre7snHQxkoyUWX0rpDkrGGU8-qA-SmSe2H9nSMEfo,4422
16
- maxframe/utils.py,sha256=T_2JIUKG4sWNbrZ_2hf4RWBSRlTQMxW1XnbdudEQPrI,35358
16
+ maxframe/utils.py,sha256=ame3LYmU3ByXNk9YLDi5aEru0SpIdMcEb7XCXh08qts,35489
17
17
  maxframe/config/__init__.py,sha256=AHo3deaCm1JnbbRX_udboJEDYrYytdvivp9RFxJcumI,671
18
- maxframe/config/config.py,sha256=ChDD61-POFvc_wTmfrQaK-8leKV2huiGgnQvi9IsUAk,14019
18
+ maxframe/config/config.py,sha256=Z5a2FIBAXD_r9qWv_V6i_ei9zk4h4qOAUsZJxlVtWCM,14181
19
19
  maxframe/config/validators.py,sha256=pKnloh2kEOBRSsT8ks-zL8XVSaMMVIEvHvwNJlideeo,1672
20
20
  maxframe/config/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
21
21
  maxframe/config/tests/test_config.py,sha256=FWQZ6KBUG_jY1-KaR-GKXl7khhlTbuLlk3uaEV8koM8,2839
22
22
  maxframe/config/tests/test_validators.py,sha256=kz9Yxiqvl_BJq2CT61JTzfpRyrjm6lFrjqIfqeld_yo,1274
23
- maxframe/core/__init__.py,sha256=GS0eia2Rh0sJOCODq59_yk1m8EGkFBHnuuU7PiZ1_ec,1742
23
+ maxframe/core/__init__.py,sha256=KxXGWHijQZqmI4yIpQO7N6kQ0ok1UiUnae7Jh0jSgBA,1678
24
24
  maxframe/core/base.py,sha256=43qZ_sJFgW857qhT1jqgsjdAsBy9tzCeqeX62CPm4vM,4691
25
25
  maxframe/core/mode.py,sha256=a-2AjLrIaqemN3pZPFhdfrPYXR7ryCLcsT1KJwWKPb0,3107
26
- maxframe/core/entity/__init__.py,sha256=tD4zo3KXpzLrQraHnIXeO1Q961lSsIqpbAGRK2WijVE,1336
26
+ maxframe/core/entity/__init__.py,sha256=pUaRpxYxgP1pQuAjGEl9DxAJEvz5Tp_Tpzh4dnxmII0,1251
27
27
  maxframe/core/entity/chunks.py,sha256=zKk8Iyc3IkakIDW1bMYq_zZNLrR4ZMdXH-mBuOiFerM,2202
28
28
  maxframe/core/entity/core.py,sha256=aFwjNMhTJ4ybr1WzmMVSTG211fzutzaATs14QoNh-JM,4170
29
29
  maxframe/core/entity/executable.py,sha256=CKxFGvFPfY_8JBprhpyndhTSLgVLtUG4G5n7Dw0dHnw,11275
30
30
  maxframe/core/entity/fuse.py,sha256=X1lI0WXj5t0flgGI5-qlVl5LoYkAdLJHk2Vv767C9G4,2350
31
- maxframe/core/entity/objects.py,sha256=Ys_l6cBp0HwgRmXuqYo4HsnjdbfUW4mgvek5W0IMmXY,3134
31
+ maxframe/core/entity/objects.py,sha256=-cnPtk7LBIcFk4d7CY6MwDhlkoW42Xv3qdI2CD03puA,1898
32
32
  maxframe/core/entity/output_types.py,sha256=NnNeDBVAEhD8dtPBWzpM7n6s8neVFrahjd0zMGWroCc,2735
33
33
  maxframe/core/entity/tileables.py,sha256=6jJyFscvb8sH5K_k2VaNGeUm8YrpevCtou3WSUl4Dw8,13973
34
34
  maxframe/core/entity/utils.py,sha256=454RYVbTMVW_8KnfDqUPec4kz1p98izVTC2OrzhOkao,966
35
35
  maxframe/core/graph/__init__.py,sha256=n1WiszgVu0VdXsk12oiAyggduNwu-1-9YKnfZqvmmXk,838
36
- maxframe/core/graph/core.cp38-win_amd64.pyd,sha256=1D1hVZ0-74U8j7kl6B0zYeWL-XiTV_4zbw2tLr0oZcY,250368
37
- maxframe/core/graph/core.pyx,sha256=WYlYtXXSs72vfhf2ttJO-4u85exYzy2J9mlALHOMqoA,16354
36
+ maxframe/core/graph/core.cp38-win_amd64.pyd,sha256=G7B_-jJWfD7ZJE1S2eSfKOkYZvxard1R5MVARmpPSug,253440
37
+ maxframe/core/graph/core.pyx,sha256=J619C6xfVCF8NQ8oeinhICYSg-w5ecX-dnBI7NB-6n0,16390
38
38
  maxframe/core/graph/entity.py,sha256=RT_xbP5niUN5D6gqZ5Pg1vUegHn8bqPk8G8A30quOVA,5730
39
39
  maxframe/core/graph/builder/__init__.py,sha256=vTRY5xRPOMHUsK0jAtNIb1BjSPGqi_6lv86AroiiiL4,718
40
40
  maxframe/core/graph/builder/base.py,sha256=IzNYD4A2alnYaOvZnipDzC-ZIfNsYR80wLnFcx7bJzc,2635
@@ -128,7 +128,9 @@ maxframe/dataframe/datasource/tests/test_datasource.py,sha256=UumRBjE-bIuCi7Z4_3
128
128
  maxframe/dataframe/datastore/__init__.py,sha256=MmlHYvFacMReOHDQMXF-z2bCsLyrSHYBVwIlCsZGOK4,810
129
129
  maxframe/dataframe/datastore/core.py,sha256=HCqrZN47RP-IC6zDqLX_RErDUAWkcTB58FHNU70V2b4,762
130
130
  maxframe/dataframe/datastore/to_csv.py,sha256=sns4bBgNpq7Ihb-goNqaBRdiEtrG-V6jqhNkWGZ1YaE,7974
131
- maxframe/dataframe/datastore/to_odps.py,sha256=NVHLccpNYbF6YPk3PKziStonkKlR0JaOFF0AxWlMhBw,5724
131
+ maxframe/dataframe/datastore/to_odps.py,sha256=joTDca3-fF27ASoksjnuz6JT4ozn3x8t7nDpAG_OSaw,6596
132
+ maxframe/dataframe/datastore/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
133
+ maxframe/dataframe/datastore/tests/test_to_odps.py,sha256=385SCJK_XkddV9dJrRqSOuaXurpGjWd_QwRSeGTOTNU,1344
132
134
  maxframe/dataframe/extensions/__init__.py,sha256=x6QCVQIfpa8JP2Vu-nZwHJ1CzATnyPoKCBMqxjXwpO0,1439
133
135
  maxframe/dataframe/extensions/accessor.py,sha256=0OA8YPL3rofSvdU0z_1kMLImahrvow_vhxdQDYODki0,1497
134
136
  maxframe/dataframe/extensions/reshuffle.py,sha256=yOlJ-3R4v9CoiEKFA1zgCOvbocy00MxpFBbQuTn-uDw,2720
@@ -150,7 +152,7 @@ maxframe/dataframe/groupby/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym
150
152
  maxframe/dataframe/groupby/tests/test_groupby.py,sha256=GiFRklxfp9RAD7jwuvNRbhg9mROpKPFxfXGtNhFWFCI,12516
151
153
  maxframe/dataframe/indexing/__init__.py,sha256=AkjowbPJu6kM4fJF5baU6g6FA7n2ux5__f4_2budLSs,3297
152
154
  maxframe/dataframe/indexing/add_prefix_suffix.py,sha256=YMHFXnVcFsRJfVIOHlTWkOGCqzxWAJam3SXmIRjKGKk,3076
153
- maxframe/dataframe/indexing/align.py,sha256=DLNY2Tc3o_GyeK7g9bTxd0KnEojcaQVprYNx2PhqZ98,12438
155
+ maxframe/dataframe/indexing/align.py,sha256=-kV91o_-pq7rFsv0zgnGZuEyn8HqyUK_Ejv4VWF5fps,12434
154
156
  maxframe/dataframe/indexing/at.py,sha256=7Igb4I9_9drZSCZITFRNL3Q-7EI_mtfklUrnNP0apHo,2300
155
157
  maxframe/dataframe/indexing/getitem.py,sha256=eS8dnlMEP2zaYvzYZFlBNfwjD89UqT0MRIlNuDcAJQc,7958
156
158
  maxframe/dataframe/indexing/iat.py,sha256=gc9V2Ps8fvBFIgJbYTY3ZJmH54rv-dunZzJsY3Lns1s,1164
@@ -177,7 +179,7 @@ maxframe/dataframe/merge/tests/test_merge.py,sha256=Mkk2f_NnxPqtG_2AyeG_Bt-CdY-J
177
179
  maxframe/dataframe/misc/__init__.py,sha256=Lq82VMR4qWhYD1lYTbj8Wr7ndOh0CNATdOtlOikuZRQ,5401
178
180
  maxframe/dataframe/misc/_duplicate.py,sha256=EYNv1_sKm14d91Gm4_Buxo7b5Tuy93MOvaq1TTAUkis,1516
179
181
  maxframe/dataframe/misc/accessor.py,sha256=XtbMV6QrYb2m9oAd8swkFoKAq5mxj_QO0LVLVw5uJB4,10303
180
- maxframe/dataframe/misc/apply.py,sha256=HnKJP8EtN8LxALiMaLUp7qrI9dcdj6b7TwXmGe_jV8Y,24058
182
+ maxframe/dataframe/misc/apply.py,sha256=hAuN5P9DrWVfHwXi1MZBQrAe0nRiTDHUc4nJvKC2XMk,24130
181
183
  maxframe/dataframe/misc/astype.py,sha256=9CO4BEW98Flqk7HHWScjxRK8EdeTRgQDYcyRwEnyIB0,8033
182
184
  maxframe/dataframe/misc/case_when.py,sha256=txasRkyfwn2QCEVZ7W0lrI3_ia0PKwBRFBy6TLrQh1I,4992
183
185
  maxframe/dataframe/misc/check_monotonic.py,sha256=LDltdmPq90fZn8A0ucqpNy0uswKo2hJx59Y4EHSN9l4,2506
@@ -194,7 +196,7 @@ maxframe/dataframe/misc/get_dummies.py,sha256=fkoGya2HUVMlJviEfCy1toedfa_gOro_E0
194
196
  maxframe/dataframe/misc/isin.py,sha256=mqce_GgIkT390glXJ4jq4JEcRYhpbJNkN6tqP-8x078,7148
195
197
  maxframe/dataframe/misc/map.py,sha256=NSsQvOFrRvULVHPOfJk3B_tIh2IRU4IE0oOF2qkL4mE,8385
196
198
  maxframe/dataframe/misc/melt.py,sha256=LoqZ45-J8WvXixtFEbEF1UCtZy4-E6loFtVdFghgt0A,5282
197
- maxframe/dataframe/misc/memory_usage.py,sha256=B_UnQKJW62KQMv2VHlZSjlREFdD6t6qT24x4XTcTTMU,8145
199
+ maxframe/dataframe/misc/memory_usage.py,sha256=3d6g2lAW7R4BV_vpUpn2-BFs9cwbEW03UH-6AEhmue0,8137
198
200
  maxframe/dataframe/misc/pct_change.py,sha256=V4D2MH7b2EmtCHVKwYxX4wcGsuj1EBruwIXlJ5mAZ_c,4736
199
201
  maxframe/dataframe/misc/pivot_table.py,sha256=5HmAdczDMJbznFq2omuBKjjib0WvTrohXGwCtHAMwOY,9782
200
202
  maxframe/dataframe/misc/qcut.py,sha256=kcYhSf6m47u5zIEPgG98nE3hv57e6uuCuJs_dxpcszE,3841
@@ -207,7 +209,7 @@ maxframe/dataframe/misc/transform.py,sha256=JotPUQzKGhCLRi53sk7USU9HscNjUKCzzus9
207
209
  maxframe/dataframe/misc/transpose.py,sha256=SsKRuN9Pj36D6kntnsLfzBsFHjSCiV1cZuPJuKHgbGU,3772
208
210
  maxframe/dataframe/misc/value_counts.py,sha256=7Yd3ZSrCRDMRX093IlzdsrTJ5UUx0n_lbD5AmXLUr_U,5674
209
211
  maxframe/dataframe/misc/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
210
- maxframe/dataframe/misc/tests/test_misc.py,sha256=ur4XDSGnwDcS4Kjf8KIiml5MMpBa12jvgjA0f8-bpdY,15610
212
+ maxframe/dataframe/misc/tests/test_misc.py,sha256=7P3-dJwsMVhD6ft5HNXorUp-SnO8o9eTTAoFGXzhiNg,16121
211
213
  maxframe/dataframe/missing/__init__.py,sha256=DQDpYqjvXN6o6TF76wJIpf1fZICOEJskljzwDNjN80k,1866
212
214
  maxframe/dataframe/missing/checkna.py,sha256=_Rd-HRX7lTzMV3myu745tzoTB8WIqDIJu2TcT1SfdB0,7113
213
215
  maxframe/dataframe/missing/dropna.py,sha256=fJ7xUmhWnViyPnW6nKTF3u2dktqsuwGimSyO71mh0kk,8518
@@ -253,7 +255,7 @@ maxframe/dataframe/sort/sort_values.py,sha256=kPTaKVZzqSkMKTPLXANoK_NKK4IwShqXev
253
255
  maxframe/dataframe/sort/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
254
256
  maxframe/dataframe/sort/tests/test_sort.py,sha256=2KwQP4eyAL7rflYrbei9ocU5oum3NjiGurWirR2GzHg,2685
255
257
  maxframe/dataframe/statistics/__init__.py,sha256=gC4z9SHj8mG1EECYiMNeGPNF3aie1AOw8UATmiLG-bo,1117
256
- maxframe/dataframe/statistics/corr.py,sha256=LzFsEf-lrRTGSuPV8f_QWGzKvFq_tWd70SgMr9nFyGA,9775
258
+ maxframe/dataframe/statistics/corr.py,sha256=ufSCKpITCR8HnKc7osxnxDwg8hvptrcKOjIeKsF4eB4,9763
257
259
  maxframe/dataframe/statistics/quantile.py,sha256=fISgDO8cMFKn1yjCV07BpowBYsS5HYwvBZkOCdglUJU,12054
258
260
  maxframe/dataframe/statistics/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
259
261
  maxframe/dataframe/statistics/tests/test_statistics.py,sha256=tvk_kTcOuzRLFspidSPVoZrBVtVsbHhGb16LU-Vr3lU,2812
@@ -298,9 +300,10 @@ maxframe/learn/utils/core.py,sha256=WNDISxPFsWmjkwHwEvjVGCkAOkIftqzEQFPA_KWr7FY,
298
300
  maxframe/lib/__init__.py,sha256=_PB28W40qku6YiT8fJYqdmEdRMQfelOwGeksCOZJfCc,657
299
301
  maxframe/lib/compression.py,sha256=QQpNK79iUC9zck74I0HKMhapSRnLBXtTRyS91taEVIc,1497
300
302
  maxframe/lib/functools_compat.py,sha256=2LTrkSw5i-z5E9XCtZzfg9-0vPrYxicKvDjnnNrAL1Q,2697
301
- maxframe/lib/mmh3.cp38-win_amd64.pyd,sha256=u5pPoC6TolUkDbkej0ociNhQxP8HV4Kf_x8RFkHGydU,17408
303
+ maxframe/lib/mmh3.cp38-win_amd64.pyd,sha256=5PIfzZha6LvkyjkScRvzYnrQw3SXMczA0OH70G_4Ess,17920
304
+ maxframe/lib/mmh3.pyi,sha256=pkzO6SUUukCty3X-WFsuokWBtIPWyxEa06ypF9liruI,1537
302
305
  maxframe/lib/version.py,sha256=VOVZu3KHS53YUsb_vQsT7AyHwcCWAgc-3bBqV5ANcbQ,18941
303
- maxframe/lib/wrapped_pickle.py,sha256=bzEaokhAZlkjXqw1xfeKO1KX2awhKIz_1RT81yPPoag,3949
306
+ maxframe/lib/wrapped_pickle.py,sha256=Akx-qhMMJJ6VVzQYrcVO_umFjx0IR-Yzb1XqyOS1Mio,3976
304
307
  maxframe/lib/aio/__init__.py,sha256=xzIYnV42_7CYuDTTv8svscIXQeJMF0nn8AXMbpv173M,963
305
308
  maxframe/lib/aio/_runners.py,sha256=zhDC92KxrYxLEufo5Hk8QU-mTVOxNL7IM9pZXas_nDg,5367
306
309
  maxframe/lib/aio/_threads.py,sha256=cDaEKg5STncq9QTPUUwehJ722vgueqBoB1C-NeoHN8E,1363
@@ -361,22 +364,22 @@ maxframe/remote/core.py,sha256=w_eTDEs0O7iIzLn1YrMGh2gcNAzzbqV0mx2bRT7su_U,7001
361
364
  maxframe/remote/run_script.py,sha256=k93-vaFLUanWoBRai4-78DX_SLeZ8_rbbxcCtOIXZO8,3677
362
365
  maxframe/serialization/__init__.py,sha256=nxxU7CI6MRcL3sjA1KmLkpTGKA3KG30FKl-MJJ0MCdI,947
363
366
  maxframe/serialization/arrow.py,sha256=OMeDjLcPgagqzokG7g3Vhwm6Xw1j-Kph1V2QsIwi6dw,3513
364
- maxframe/serialization/core.cp38-win_amd64.pyd,sha256=BVG2UV-67SZuV-KIiKK-xpr5K4L-laPRShAARK9bLTI,397824
365
- maxframe/serialization/core.pxd,sha256=Fymih3Wo-CrOY27_o_DRINdbRGR7mgiT-XCaXCXafxM,1347
366
- maxframe/serialization/core.pyi,sha256=uaz1R6oGDZhwqmuUotsySL3T8NlUnnNcGQ6hweAtC20,1983
367
- maxframe/serialization/core.pyx,sha256=Qmipu3LiJGIBVy_7d4tSJqcYWnG5xj2I7IaPv2PSq5E,35078
368
- maxframe/serialization/exception.py,sha256=e7bZyPlZ8XhSCdeOwlYreq0HazPXKOgOA6r9Q4Ecn2Y,3113
367
+ maxframe/serialization/core.cp38-win_amd64.pyd,sha256=Xb9b2V-mr-uU7FvdVzLvZQbKrsFpXndvmJ3hbV-Qe74,407552
368
+ maxframe/serialization/core.pxd,sha256=KioRiFhr5DTuqXnS2imJ3djWfSv2IAmhnz-kAFPgU6A,1548
369
+ maxframe/serialization/core.pyi,sha256=ELDG44v8O7A7RfURExMfVEJENuaEYHTwgJ-vzlH2Vh4,2206
370
+ maxframe/serialization/core.pyx,sha256=4iyUotIVV8CkVhHo3RyotDP1E7M2C1KMb0_40Ex_h1c,36321
371
+ maxframe/serialization/exception.py,sha256=noFTo9iwQje8Q0XnJV21J6bkbYahyoFLQSdl-OXNRIs,3079
369
372
  maxframe/serialization/maxframe_objects.py,sha256=ZHyvxIALoPuB_y3CRc70hZXyfdj4IhaKMXUEYLXHQag,1404
370
373
  maxframe/serialization/numpy.py,sha256=ENrFKl24mtYyO1vZRLwHvMD0r4z_UI7J2-yNlmfWSdk,3304
371
- maxframe/serialization/pandas.py,sha256=3aPzDOg9UYSI9GFpWm2aJc8EAi-d-timM8vQ8kTL3Cg,7349
374
+ maxframe/serialization/pandas.py,sha256=wqRcZhUd5tMi__7kmvhW1_-DdhBLnW00kz0hDrUvmEY,7522
372
375
  maxframe/serialization/scipy.py,sha256=fGwQ5ZreymrMT8g7TneATfFdKFF7YPNZQqgWgMa3J8M,2498
373
376
  maxframe/serialization/serializables/__init__.py,sha256=rlQhIaSAVzz4KYkc5shEHFZDPd6WDMPkxalU76yjJ3M,1406
374
- maxframe/serialization/serializables/core.py,sha256=QUjHQPG_Qd5yh_bW-mCdapY5uKUl-s1axrM2N3eomyQ,9227
377
+ maxframe/serialization/serializables/core.py,sha256=9XPxeVY33xrT77JVpO5uBc-olKn3bu8mdj58U1L4R0k,14165
375
378
  maxframe/serialization/serializables/field.py,sha256=DVott3HAbne4UvN-heSFS9gSl0wCxV5RssS738FCjzk,16639
376
379
  maxframe/serialization/serializables/field_type.py,sha256=hkxrXT2SL_tATuobtJDfL4DzzVP2hJjDlC3PrJg6ZKo,15454
377
380
  maxframe/serialization/serializables/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
378
381
  maxframe/serialization/serializables/tests/test_field_type.py,sha256=uG87-bdG8xGmjrubEHCww1ZKmRupSvnNKnZoV2SnwYM,4502
379
- maxframe/serialization/serializables/tests/test_serializable.py,sha256=jnXDfBSNomsEKUKPGd9rCQe8dbOJo7bcFZWvSbEpVsk,8493
382
+ maxframe/serialization/serializables/tests/test_serializable.py,sha256=w5r-WC-8Zi1xAO1AfxdkjGcbGHZ8G5B-z_-d47Fje-A,10159
380
383
  maxframe/serialization/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
381
384
  maxframe/serialization/tests/test_serial.py,sha256=9G2CbPBHINwcZ038pRwZON_OtH-JVXZ8w66BLYWP578,12923
382
385
  maxframe/tensor/__init__.py,sha256=lY_GZBClz2MIGwaMerP2DvbsUbC5crCel_kwkeuiyX4,3702
@@ -484,14 +487,14 @@ maxframe/tensor/arithmetic/truediv.py,sha256=xrsN8Z-q6msst9S8-469XQFgrs7T4RTkaym
484
487
  maxframe/tensor/arithmetic/trunc.py,sha256=3z8jme9ZpPU8TqNo2ioViqJa7ThNK9KOVX1wl-R0a7M,2375
485
488
  maxframe/tensor/arithmetic/utils.py,sha256=Kc3xqbIK9uRhHhDKFwAj-mW7SRljajfK9UOMyXyCHCY,2304
486
489
  maxframe/tensor/arithmetic/tests/__init__.py,sha256=_PB28W40qku6YiT8fJYqdmEdRMQfelOwGeksCOZJfCc,657
487
- maxframe/tensor/arithmetic/tests/test_arithmetic.py,sha256=e8sc6uYI09to_vzci5Vl8BuTM_oDBi4rQ5sQnQkjer4,11403
490
+ maxframe/tensor/arithmetic/tests/test_arithmetic.py,sha256=fAkVgixF-WfRZHGujGmB_s5llwiL1DDdvxcAsWPYfEY,11409
488
491
  maxframe/tensor/base/__init__.py,sha256=qVf97u2J74RSjCmkF-7N-ylxWUc6mbiPPWpDe45vRmQ,1113
489
492
  maxframe/tensor/base/astype.py,sha256=fzj0o3pJMVaSEEKMR-JBsd2FktlSa9ABtpt-fcWKio0,4513
490
- maxframe/tensor/base/atleast_1d.py,sha256=AgFdj7P3nBy6WibI54IPIwfowLHsk2BHfH3bXKVn5rg,1992
493
+ maxframe/tensor/base/atleast_1d.py,sha256=_d7xamputAAHFY8v0Ayc8ILMdqS6fLZYhWQLOh_LFmc,1992
491
494
  maxframe/tensor/base/broadcast_to.py,sha256=V-OB8YSbMfkMP2JpbiIQ0A9PrC-OHfaWzrntf5AOEwo,2775
492
495
  maxframe/tensor/base/ravel.py,sha256=P9SCDU-UUHzd1HqZbodBSgKjtjiOFkyfLV_G9LFnz_U,3265
493
496
  maxframe/tensor/base/transpose.py,sha256=yMK1KzxguKZOWxT3oMo5GchjB-1Yakilp2rEX3QlxFM,3539
494
- maxframe/tensor/base/unique.py,sha256=zzE3w6VAZslTgYx4FDUPQ3bMsBsj-61z0BPY5hPaM6Q,6947
497
+ maxframe/tensor/base/unique.py,sha256=GYLorbwtjCKCTzkbFWk-zaUORU2mQJ2nbXDi2Wr-IP8,6943
495
498
  maxframe/tensor/base/where.py,sha256=cSg1mDhiOBB4F0Soh_uVw3yeSve9pfEhPSIDadc-wto,4127
496
499
  maxframe/tensor/base/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
497
500
  maxframe/tensor/base/tests/test_base.py,sha256=i9TneozyHCHDhO438U285KS6tdh0Zks8mgkRm3fsHxk,2957
@@ -588,7 +591,7 @@ maxframe/tensor/reduction/argmax.py,sha256=UqPBCgnyLFpIjaNPWxcyLGynpOzYnaVj23PQy
588
591
  maxframe/tensor/reduction/argmin.py,sha256=Gy_O7kEcJosGQImqkR5S7N5ygs-bXnYcpljj3TSe5Ho,3202
589
592
  maxframe/tensor/reduction/array_equal.py,sha256=1otUnsacNdSgkdP1hHs3NcAdqtJNyY3F1oOVItrmv70,1859
590
593
  maxframe/tensor/reduction/core.py,sha256=NwASayI1P1uCCFCyNltH-cVezefW3Th2qS6viSuSKMQ,5257
591
- maxframe/tensor/reduction/count_nonzero.py,sha256=eFqYCXGbzl7DG_crwcN64MgYXgR1CTNO5XSgPiy1ses,2806
594
+ maxframe/tensor/reduction/count_nonzero.py,sha256=82Q6vm4_2eFcdFsPSUw6PD1eUV_4geKVckvs7GnRsfE,2802
592
595
  maxframe/tensor/reduction/cumprod.py,sha256=zitvIvh2Sb4iL7yL2Spenoe7NQndV9LJ4qrejd_ul48,3369
593
596
  maxframe/tensor/reduction/cumsum.py,sha256=IUOvbrVEgjDOdd3nsxnDy3Fx0eJC0EfOGt0PIfik_PM,3592
594
597
  maxframe/tensor/reduction/max.py,sha256=8B5k9n89orftEYLI_Lwl10O0zbN6vq5SxUpX0W9L7Bo,4099
@@ -622,26 +625,25 @@ maxframe/tensor/ufunc/__init__.py,sha256=8QUi-cPvvbsD7i7LOeZ9sc0v1XXd7lt-XV5pQKb
622
625
  maxframe/tensor/ufunc/ufunc.py,sha256=XRtGlhdrW7H--mrc8fTBOlUP0mzKpd9tdRtCuLDymtc,7383
623
626
  maxframe/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
624
627
  maxframe/tests/test_codegen.py,sha256=h3TKqP4zghxTn1twH7gR9jOe6NKXdCC1B4u0chlUrpY,2277
625
- maxframe/tests/test_protocol.py,sha256=IgZT2CBH1dv6V1DwSq-PjvrUhvtOf8Mab6dnWhAT3No,5331
626
- maxframe/tests/test_utils.py,sha256=0Iey3O6zrGI1yQU2OSpWavJNvhUjrmdkct4-27tkGUM,12353
627
- maxframe/tests/utils.py,sha256=gCre-8BApU4-AEun9WShm4Ff5a9a_oKxvLNneESXBjU,4732
628
- maxframe_client/__init__.py,sha256=xqlN69LjvAp2bNCaT9d82U9AF5WKi_c4UOheEW1wV9E,741
628
+ maxframe/tests/test_protocol.py,sha256=JkvsgGnbVSLu3VsUd_XT_qstcHPnKLzmoDBEXetaWT8,6281
629
+ maxframe/tests/test_utils.py,sha256=5Z2cym1tlpnF73f4I3WC1eBocsbNEDGzDErJL_fKWx8,11868
630
+ maxframe/tests/utils.py,sha256=nZeSDh0jLWo1hKPkuq8Y2uwQhLwjaKok4wcnq9vhyn8,4740
631
+ maxframe_client/__init__.py,sha256=hIVOnxj6AoN2zIMxQCzRb10k0LSoYS_DrQevXO9KPBg,705
629
632
  maxframe_client/conftest.py,sha256=UWWMYjmohHL13hLl4adb0gZPLRdBVOYVvsFo6VZruI0,658
630
633
  maxframe_client/fetcher.py,sha256=yFP6Hgz01-qPqBwmTX5-5ECU-G6q-TX5SUktplcJgcU,9213
631
634
  maxframe_client/clients/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
632
635
  maxframe_client/clients/framedriver.py,sha256=upN6C1eZrCpLTsS6fihWOMy392psWfo0bw2XgSLI_Yg,4581
633
- maxframe_client/clients/spe.py,sha256=uizNBejhU_FrMhsgsFgDnq7gL7Cxk803LeLYmr3nmxs,3697
634
636
  maxframe_client/session/__init__.py,sha256=9zFCd3zkSADESAFc4SPoQ2nkvRwsIhhpNNO2TtSaWbU,854
635
637
  maxframe_client/session/consts.py,sha256=nD-D0zHXumbQI8w3aUyltJS59K5ftipf3xCtHNLmtc8,1380
636
638
  maxframe_client/session/graph.py,sha256=GSZaJ-PV4DK8bTcNtoSoY5kDTyyIRAKleh4tOCSUbsI,4470
637
- maxframe_client/session/odps.py,sha256=6OySk4Fo5N5OG_HiuuTxSU5n-UUVYZ0AjTrMzcE-jGY,18008
638
- maxframe_client/session/task.py,sha256=rY7pXNd_5ixaE3-wSwKTUr2bMPIYwuVAEeia3qY24fk,10445
639
+ maxframe_client/session/odps.py,sha256=rOQJokPpA_hczjWsXyvYnl9m9o1DlZLMnoDIsQtmbnc,19885
640
+ maxframe_client/session/task.py,sha256=8_ZN2xbMdkRy2XdgJpEmB35vhGxfL0Qluzd0NVTjPwE,11402
639
641
  maxframe_client/session/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
640
642
  maxframe_client/session/tests/test_task.py,sha256=861usEURVXeTUzfJYZmBfwsHfZFexG23mMtT5IJOOm4,3364
641
643
  maxframe_client/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
642
644
  maxframe_client/tests/test_fetcher.py,sha256=7iYXLMIoCJLfgUkjB2HBkV-sqQ-xGlhtzfp9hRJz_kM,3605
643
- maxframe_client/tests/test_session.py,sha256=M41_lHLjgCSCWTxnDci4UnLeGty-Mi8Vi2SfB32EPcI,8139
644
- maxframe-0.1.0b5.dist-info/METADATA,sha256=SaNZ5DLD6aoMtuSJ_f-mN1Lfj9zFsB6U9RfZ_1b03uY,3149
645
- maxframe-0.1.0b5.dist-info/WHEEL,sha256=Wb4yjwIXVKEpht4JWFUZNCzpG7JLBNZnqtK2YNdqLkI,100
646
- maxframe-0.1.0b5.dist-info/top_level.txt,sha256=64x-fc2q59c_vXwNUkehyjF1vb8JWqFSdYmUqIFqoTM,31
647
- maxframe-0.1.0b5.dist-info/RECORD,,
645
+ maxframe_client/tests/test_session.py,sha256=ZrZCYVbqtCOJZigGoyGube-EtLYE8SQxTSckbMQmgds,9616
646
+ maxframe-1.0.0rc1.dist-info/METADATA,sha256=lbj0kDpDDcdf43LuG_y2tgyKSs38tbOE0YeufvQWk84,3157
647
+ maxframe-1.0.0rc1.dist-info/WHEEL,sha256=Wb4yjwIXVKEpht4JWFUZNCzpG7JLBNZnqtK2YNdqLkI,100
648
+ maxframe-1.0.0rc1.dist-info/top_level.txt,sha256=64x-fc2q59c_vXwNUkehyjF1vb8JWqFSdYmUqIFqoTM,31
649
+ maxframe-1.0.0rc1.dist-info/RECORD,,
@@ -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
@@ -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,
@@ -144,10 +149,15 @@ class MaxFrameSession(ToThreadMixin, IsolatedAsyncSession):
144
149
 
145
150
  schema, table_meta = pandas_to_odps_schema(t, unknown_as_string=True)
146
151
  if self._odps_entry.exist_table(table_meta.table_name):
147
- 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
+ )
148
155
  table_name = build_temp_table_name(self.session_id, t.key)
149
156
  table_obj = self._odps_entry.create_table(
150
- table_name, schema, lifecycle=options.session.temp_table_lifecycle
157
+ table_name,
158
+ schema,
159
+ lifecycle=options.session.temp_table_lifecycle,
160
+ hints=options.sql.settings,
151
161
  )
152
162
 
153
163
  data = t.op.get_data()
@@ -264,8 +274,10 @@ class MaxFrameSession(ToThreadMixin, IsolatedAsyncSession):
264
274
  self, dag_info: DagInfo, tileables: List, progress: Progress
265
275
  ):
266
276
  start_time = time.time()
277
+ session_id = dag_info.session_id
267
278
  dag_id = dag_info.dag_id
268
279
  wait_timeout = 10
280
+ server_no_response_time = None
269
281
  with enter_mode(build=True, kernel=True):
270
282
  key_to_tileables = {t.key: t for t in tileables}
271
283
 
@@ -280,9 +292,37 @@ class MaxFrameSession(ToThreadMixin, IsolatedAsyncSession):
280
292
  if timeout_val <= 0:
281
293
  raise TimeoutError("Running DAG timed out")
282
294
 
283
- dag_info: DagInfo = await self.ensure_async_call(
284
- self._caller.get_dag_info, dag_id
285
- )
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
+ )
286
326
  progress.value = dag_info.progress
287
327
  if dag_info.status != DagStatus.RUNNING:
288
328
  break