maxframe 2.0.0b1__cp39-cp39-macosx_10_9_universal2.whl → 2.0.0b2__cp39-cp39-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.

Binary file
@@ -13,6 +13,7 @@
13
13
  # limitations under the License.
14
14
 
15
15
  import dataclasses
16
+ import functools
16
17
  import io
17
18
  import logging
18
19
  import re
@@ -22,6 +23,8 @@ from typing import Dict, List, MutableMapping, Optional, Tuple, Union
22
23
  import numpy as np
23
24
  import pandas as pd
24
25
  from odps import ODPS
26
+ from odps.errors import ODPSError
27
+ from odps.models import TableSchema
25
28
  from odps.types import Column, OdpsSchema, validate_data_type
26
29
  from odps.utils import split_sql_by_semicolon
27
30
 
@@ -245,13 +248,18 @@ def _parse_explained_schema(explain_string: str) -> OdpsSchema:
245
248
  return _parse_full_explain(explain_string)
246
249
 
247
250
 
248
- def _build_explain_sql(sql_stmt: str, no_split: bool = False) -> str:
251
+ def _build_explain_sql(
252
+ sql_stmt: str, no_split: bool = False, use_output: bool = False
253
+ ) -> str:
254
+ clause = "EXPLAIN "
255
+ if use_output:
256
+ clause += "OUTPUT "
249
257
  if no_split:
250
- return "EXPLAIN " + sql_stmt
258
+ return clause + sql_stmt
251
259
  sql_parts = split_sql_by_semicolon(sql_stmt)
252
260
  if not sql_parts:
253
261
  raise ValueError(f"Cannot explain SQL statement {sql_stmt}")
254
- sql_parts[-1] = "EXPLAIN " + sql_parts[-1]
262
+ sql_parts[-1] = clause + sql_parts[-1]
255
263
  return "\n".join(sql_parts)
256
264
 
257
265
 
@@ -332,6 +340,62 @@ def _check_token_in_sql(token: str, sql: str) -> bool:
332
340
  return False
333
341
 
334
342
 
343
+ def _resolve_schema_by_explain(
344
+ odps_entry: ODPS,
345
+ query: str,
346
+ no_split_sql: bool = False,
347
+ hints: Dict[str, str] = None,
348
+ use_explain_output: bool = True,
349
+ ) -> OdpsSchema:
350
+ hints = (hints or dict()).copy()
351
+ hints["odps.sql.select.output.format"] = "json"
352
+ explain_stmt = _build_explain_sql(
353
+ query, no_split=no_split_sql, use_output=use_explain_output
354
+ )
355
+ inst = odps_entry.execute_sql(explain_stmt, hints=hints)
356
+ logger.debug("Explain output instance ID: %s", inst.id)
357
+ explain_str = list(inst.get_task_results().values())[0]
358
+ if use_explain_output:
359
+ if not explain_str or "nothing to explain" in explain_str:
360
+ raise ValueError("The SQL statement should be an instant query")
361
+ return TableSchema.parse(None, explain_str)
362
+ else:
363
+ return _parse_explained_schema(explain_str)
364
+
365
+
366
+ def _resolve_query_schema(
367
+ odps_entry: ODPS,
368
+ query: str,
369
+ no_split_sql: bool = False,
370
+ hints: Dict[str, str] = None,
371
+ use_explain_output: Optional[bool] = None,
372
+ ) -> OdpsSchema:
373
+ methods = []
374
+ if use_explain_output is not False:
375
+ # None or True
376
+ methods.append(_resolve_schema_by_explain)
377
+ if use_explain_output is not True:
378
+ # None or False
379
+ methods.append(
380
+ functools.partial(_resolve_schema_by_explain, use_explain_output=False)
381
+ )
382
+ for idx, resolve_method in enumerate(methods):
383
+ try:
384
+ return resolve_method(
385
+ odps_entry, query, no_split_sql=no_split_sql, hints=hints
386
+ )
387
+ except ODPSError as ex:
388
+ msg = (
389
+ f"Failed to obtain schema from SQL explain: {ex!r}\n"
390
+ f"Explain instance ID: {ex.instance_id}"
391
+ )
392
+ if idx + 1 == len(methods) or "ODPS-0130161" not in str(ex):
393
+ exc = ValueError(msg)
394
+ raise exc.with_traceback(ex.__traceback__) from None
395
+ # will this happen?
396
+ raise ValueError("Failed to obtain schema from SQL explain") # pragma: no cover
397
+
398
+
335
399
  def read_odps_query(
336
400
  query: str,
337
401
  odps_entry: ODPS = None,
@@ -371,6 +435,8 @@ def read_odps_query(
371
435
  DataFrame read from MaxCompute (ODPS) table
372
436
  """
373
437
  no_split_sql = kw.pop("no_split_sql", False)
438
+ # if use_explain_output is None, will try two methods.
439
+ use_explain_output = kw.pop("use_explain_output", None)
374
440
 
375
441
  hints = options.sql.settings.copy() or {}
376
442
  if sql_hints:
@@ -395,19 +461,13 @@ def read_odps_query(
395
461
 
396
462
  col_renames = {}
397
463
  if not skip_schema:
398
- explain_stmt = _build_explain_sql(query, no_split=no_split_sql)
399
- inst = odps_entry.execute_sql(explain_stmt, hints=hints)
400
- logger.debug("Explain instance ID: %s", inst.id)
401
- explain_str = list(inst.get_task_results().values())[0]
402
-
403
- try:
404
- odps_schema = _parse_explained_schema(explain_str)
405
- except BaseException as ex:
406
- exc = ValueError(
407
- f"Failed to obtain schema from SQL explain: {ex!r}"
408
- f"\nExplain instance ID: {inst.id}"
409
- )
410
- raise exc.with_traceback(ex.__traceback__) from None
464
+ odps_schema = _resolve_query_schema(
465
+ odps_entry,
466
+ query,
467
+ no_split_sql=no_split_sql,
468
+ hints=hints,
469
+ use_explain_output=use_explain_output,
470
+ )
411
471
 
412
472
  new_columns = []
413
473
  for col in odps_schema.columns:
@@ -17,11 +17,13 @@ import uuid
17
17
  from collections import OrderedDict
18
18
  from math import isinf
19
19
 
20
+ import mock
20
21
  import numpy as np
21
22
  import pandas as pd
22
23
  import pytest
23
24
  from odps import ODPS
24
25
  from odps import types as odps_types
26
+ from odps.errors import ODPSError
25
27
 
26
28
  from .... import tensor as mt
27
29
  from ....core import OutputType
@@ -50,6 +52,7 @@ from ..read_odps_query import (
50
52
  ColumnSchema,
51
53
  _parse_full_explain,
52
54
  _parse_simple_explain,
55
+ _resolve_query_schema,
53
56
  _resolve_task_sector,
54
57
  )
55
58
  from ..series import from_pandas as from_pandas_series
@@ -360,7 +363,7 @@ def test_from_odps_query():
360
363
 
361
364
  with pytest.raises(ValueError) as err_info:
362
365
  read_odps_query(
363
- f"CREATE TABLE dummy_table_{uuid.uuid4().hex} "
366
+ f"CREATE TABLE dummy_table_{uuid.uuid4().hex} LIFECYCLE 1 "
364
367
  f"AS SELECT * FROM {table1_name}"
365
368
  )
366
369
  assert "instant query" in err_info.value.args[0]
@@ -578,3 +581,46 @@ def test_resolve_break_lines():
578
581
  for col, (exp_nm, exp_tp) in zip(schema.columns, expected_col_types.items()):
579
582
  assert col.name == exp_nm
580
583
  assert col.type == odps_types.validate_data_type(exp_tp)
584
+
585
+
586
+ @pytest.mark.parametrize("use_explain_output", [None, False, True])
587
+ def test_explain_use_explain_output(use_explain_output):
588
+ class MockInstance:
589
+ @property
590
+ def id(self):
591
+ return "mock_id"
592
+
593
+ def get_task_results(self):
594
+ return {"pot": """{"columns":[{"name":"a_bigint","type":"BIGINT"}]}"""}
595
+
596
+ old_execute_sql = ODPS.execute_sql
597
+ exec_count = 0
598
+
599
+ def new_execute_sql(self, sql, *args, **kw):
600
+ nonlocal exec_count
601
+ exec_count += 1
602
+
603
+ if use_explain_output and sql.lower().startswith("explain output select"):
604
+ return MockInstance()
605
+ elif use_explain_output is None and sql.lower().startswith("explain output"):
606
+ raise ODPSError("ODPS-0130161: mock error")
607
+ return old_execute_sql(self, sql, *args, **kw)
608
+
609
+ odps_entry = ODPS.from_environments()
610
+
611
+ with mock.patch("odps.core.ODPS.execute_sql", new=new_execute_sql):
612
+ with pytest.raises(ValueError):
613
+ _resolve_query_schema(
614
+ odps_entry, "not_a_sql", use_explain_output=use_explain_output
615
+ )
616
+ assert exec_count == (2 if use_explain_output is None else 1)
617
+
618
+ exec_count = 0
619
+ schema = _resolve_query_schema(
620
+ odps_entry,
621
+ "select cast(1 as bigint) as a_bigint",
622
+ use_explain_output=use_explain_output,
623
+ )
624
+ assert schema.columns[0].name == "a_bigint"
625
+ assert schema.columns[0].type == odps_types.bigint
626
+ assert exec_count == (2 if use_explain_output is None else 1)
@@ -19,7 +19,7 @@ from odps import ODPS
19
19
  from ....core import OutputType
20
20
  from ....core.operator import ObjectOperatorMixin, Operator
21
21
  from ....tensor.datasource import ArrayDataSource
22
- from ....tests.utils import create_test_volume, tn
22
+ from ....tests.utils import create_test_volume, get_test_unique_name, tn
23
23
  from ...odpsio import ODPSVolumeReader, ODPSVolumeWriter
24
24
  from ..core import get_object_io_handler
25
25
 
@@ -32,7 +32,9 @@ class TestObjectOp(Operator, ObjectOperatorMixin):
32
32
 
33
33
  @pytest.fixture(scope="module")
34
34
  def create_volume(oss_config):
35
- with create_test_volume(tn("test_object_io_vol"), oss_config) as test_vol_name:
35
+ with create_test_volume(
36
+ tn("test_object_io_vol_" + get_test_unique_name(5)), oss_config
37
+ ) as test_vol_name:
36
38
  yield test_vol_name
37
39
 
38
40
 
@@ -17,13 +17,13 @@ import contextlib
17
17
  import pytest
18
18
  from odps import ODPS
19
19
 
20
- from ....tests.utils import create_test_volume, tn
20
+ from ....tests.utils import create_test_volume, get_test_unique_name, tn
21
21
  from ..volumeio import ODPSVolumeReader, ODPSVolumeWriter
22
22
 
23
23
 
24
24
  @pytest.fixture
25
25
  def create_volume(request, oss_config):
26
- test_vol_name = tn("test_vol_name_" + request.param)
26
+ test_vol_name = tn(f"test_vol_name_{get_test_unique_name(5)}_" + request.param)
27
27
  odps_entry = ODPS.from_environments()
28
28
 
29
29
  @contextlib.contextmanager
@@ -41,24 +41,13 @@ def create_volume(request, oss_config):
41
41
  except BaseException:
42
42
  pass
43
43
 
44
- oss_test_dir_name = None
45
44
  if request.param == "parted":
46
45
  ctx = create_parted_volume()
47
46
  else:
48
47
  ctx = create_test_volume(test_vol_name, oss_config)
49
48
 
50
- try:
51
- with ctx:
52
- yield test_vol_name
53
- finally:
54
- if oss_test_dir_name is not None:
55
- import oss2
56
-
57
- keys = [
58
- obj.key
59
- for obj in oss2.ObjectIterator(oss_config.oss_bucket, oss_test_dir_name)
60
- ]
61
- oss_config.oss_bucket.batch_delete_objects(keys)
49
+ with ctx:
50
+ yield test_vol_name
62
51
 
63
52
 
64
53
  @pytest.mark.parametrize("create_volume", ["external"], indirect=True)
@@ -14,7 +14,9 @@
14
14
 
15
15
  import inspect
16
16
  from typing import Iterator, List, Optional, Union
17
+ from urllib.parse import urlparse
17
18
 
19
+ import requests
18
20
  from odps import ODPS
19
21
  from odps import __version__ as pyodps_version
20
22
 
@@ -74,14 +76,27 @@ class ODPSVolumeWriter:
74
76
  self._replace_internal_host = replace_internal_host
75
77
 
76
78
  def write_file(self, file_name: str, data: Union[bytes, Iterator[bytes]]):
77
- kw = {}
78
- if _has_replace_internal_host and self._replace_internal_host:
79
- kw = {"replace_internal_host": self._replace_internal_host}
80
- with self._volume.open_writer(
81
- self._volume_dir + "/" + file_name, **kw
82
- ) as writer:
79
+ sign_url = self._volume.get_sign_url(
80
+ self._volume_dir + "/" + file_name,
81
+ method="PUT",
82
+ seconds=3600,
83
+ )
84
+ if self._replace_internal_host:
85
+ parsed_url = urlparse(sign_url)
86
+ if "-internal." in parsed_url.netloc:
87
+ new_netloc = parsed_url.netloc.replace("-internal.", ".")
88
+ sign_url = sign_url.replace(parsed_url.netloc, new_netloc)
89
+
90
+ def _to_bytes(d):
91
+ if not isinstance(d, (bytes, bytearray)):
92
+ return bytes(d)
93
+ return d
94
+
95
+ def data_func():
83
96
  if not inspect.isgenerator(data):
84
- writer.write(data)
97
+ yield _to_bytes(data)
85
98
  else:
86
99
  for chunk in data:
87
- writer.write(chunk)
100
+ yield _to_bytes(chunk)
101
+
102
+ requests.put(sign_url, data=data_func())
@@ -163,6 +163,7 @@ else:
163
163
  params["objective"] = "reg:squarederror"
164
164
  self.evals_result_ = dict()
165
165
  train_kw = {}
166
+ train_kw.update(kw)
166
167
 
167
168
  if getattr(self, "n_classes_", None):
168
169
  train_kw["num_class"] = self.n_classes_
Binary file
maxframe/tests/utils.py CHANGED
@@ -16,6 +16,7 @@ import asyncio
16
16
  import contextlib
17
17
  import functools
18
18
  import hashlib
19
+ import logging
19
20
  import os
20
21
  import queue
21
22
  import socket
@@ -191,14 +192,8 @@ def assert_mf_index_dtype(idx_obj, dtype):
191
192
 
192
193
  @contextlib.contextmanager
193
194
  def create_test_volume(vol_name, oss_config):
194
- test_vol_name = vol_name
195
195
  odps_entry = ODPS.from_environments()
196
196
 
197
- try:
198
- odps_entry.delete_volume(test_vol_name, auto_remove_dir=True, recursive=True)
199
- except:
200
- pass
201
-
202
197
  oss_test_dir_name = "test_dir_" + vol_name
203
198
  if oss_config is None:
204
199
  pytest.skip("Need oss and its config to run this test")
@@ -232,17 +227,14 @@ def create_test_volume(vol_name, oss_config):
232
227
  rolearn = oss_config.oss_rolearn
233
228
 
234
229
  oss_config.oss_bucket.put_object(oss_test_dir_name + "/", b"")
235
- odps_entry.create_external_volume(
236
- test_vol_name, location=test_location, rolearn=rolearn
237
- )
230
+ odps_entry.create_external_volume(vol_name, location=test_location, rolearn=rolearn)
238
231
 
239
232
  try:
240
- yield test_vol_name
233
+ yield vol_name
241
234
  finally:
242
235
  try:
243
- odps_entry.delete_volume(
244
- test_vol_name, auto_remove_dir=True, recursive=True
245
- )
236
+ logging.warning("Deleting test volume %s", vol_name)
237
+ odps_entry.delete_volume(vol_name, auto_remove_dir=True, recursive=True)
246
238
  except:
247
239
  pass
248
240
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: maxframe
3
- Version: 2.0.0b1
3
+ Version: 2.0.0b2
4
4
  Summary: MaxFrame operator-based data analyze framework
5
5
  Requires-Dist: numpy<2.0.0,>=1.19.0
6
6
  Requires-Dist: pandas>=1.0.0
@@ -1,7 +1,7 @@
1
- maxframe-2.0.0b1.dist-info/RECORD,,
2
- maxframe-2.0.0b1.dist-info/WHEEL,sha256=Q9x5RaJ3mFaLYQ0AssqccH-ZQbedr2DD19gIJkZDXGM,112
3
- maxframe-2.0.0b1.dist-info/top_level.txt,sha256=64x-fc2q59c_vXwNUkehyjF1vb8JWqFSdYmUqIFqoTM,31
4
- maxframe-2.0.0b1.dist-info/METADATA,sha256=mbf-qLHPMPI3gN766Zi8BeYGP9a3fr1Tn1K_vJLUPDo,3205
1
+ maxframe-2.0.0b2.dist-info/RECORD,,
2
+ maxframe-2.0.0b2.dist-info/WHEEL,sha256=Q9x5RaJ3mFaLYQ0AssqccH-ZQbedr2DD19gIJkZDXGM,112
3
+ maxframe-2.0.0b2.dist-info/top_level.txt,sha256=64x-fc2q59c_vXwNUkehyjF1vb8JWqFSdYmUqIFqoTM,31
4
+ maxframe-2.0.0b2.dist-info/METADATA,sha256=UcyH8dqs-fuyebvhkkEDEHczid0znqjQDYcDQi1Xewk,3205
5
5
  maxframe_client/conftest.py,sha256=JkQKlLZqd9uJekiO8HvMvEegidF-6KlCVFcg-KmQLLY,643
6
6
  maxframe_client/__init__.py,sha256=z4QT02esANpxtSVZPO_96693bqSvhG82e4suaD6Ll1E,689
7
7
  maxframe_client/fetcher.py,sha256=HPzpm2FM6KkY0HH2Rg-HVYCBdkudsxxGVWaT9jOhiUU,12246
@@ -31,7 +31,7 @@ maxframe/extension.py,sha256=4u9K2lerFnwziWv2Aibm7S7nD_2nSPR4MKuegYpK8fM,2939
31
31
  maxframe/sperunner.py,sha256=H-cHHPt-SBbqonKRfInSseGdOCi67xbR6jUoD25ML00,5572
32
32
  maxframe/errors.py,sha256=aWFrndbs5Kf3CX9ZWG8n0cORrVpS6OA7UtUTJUwKs1M,1249
33
33
  maxframe/udf.py,sha256=11WDJwhvohtNs7XfGReE96wsChedCf4ARK4MtMYotjw,7515
34
- maxframe/_utils.cpython-39-darwin.so,sha256=ZxGEaRGYBdwNYlkwj7HpQ4fYqa2e4bF1DqxmGro_-ec,846448
34
+ maxframe/_utils.cpython-39-darwin.so,sha256=tDMC050_SjWtB3XAO49Ha20dnfTY4c1ZIHiIvMZbe1U,846448
35
35
  maxframe/typing_.py,sha256=V-xuayMMepLmG2Kg0V3bi8qRosRd2FV9mJ-kAWdhOjQ,1180
36
36
  maxframe/_utils.pxd,sha256=ShrQD7uWMFVLT7j-zAMV6yWjQIlCbty_e7MHO6dzKv8,1154
37
37
  maxframe/dataframe/arrays.py,sha256=e-swkQgnUYymt8WONknNf-pMFAxwRhriYoh93m3G1k8,28752
@@ -84,14 +84,14 @@ maxframe/dataframe/datasource/from_index.py,sha256=WeHlwR2C4RRuKYtkt9uJdD9dkdJlW
84
84
  maxframe/dataframe/datasource/dataframe.py,sha256=-V8qjEhRwaFeOYeFzjf8h5A1gqpgH_-GbNCf4Au7VRM,2023
85
85
  maxframe/dataframe/datasource/series.py,sha256=Sou6J9hg3JJdSxuTcJjsD5EWPmvVB1J5I_ys24IkBe4,1909
86
86
  maxframe/dataframe/datasource/__init__.py,sha256=LaVpAg_oMJ2OofTlyjw-v9YLRQNfPQYHNVkWnCXPRCc,640
87
- maxframe/dataframe/datasource/read_odps_query.py,sha256=1z0o0ym_9_4fQ0xj-CVLnEITSloc4UxrIsNkDBgJgck,15687
87
+ maxframe/dataframe/datasource/read_odps_query.py,sha256=EG-H5EP0YZE_04jjYcz6OC_b0JMcScNZ5Zf-dhKo-Tw,17639
88
88
  maxframe/dataframe/datasource/core.py,sha256=UfV0vLzh96fnWkwPwK1PiwHZkSydf8DR2aBNrlSXU7c,2958
89
89
  maxframe/dataframe/datasource/date_range.py,sha256=tYKZPn8eAU_gxpEDNgNX-SCQneYwXCOPuGk5b19HkLM,17527
90
90
  maxframe/dataframe/datasource/read_odps_table.py,sha256=l5Nq5VLsBFhwDp7YZtkWGTpupLDe5RiNm04ReYK-QC8,9989
91
91
  maxframe/dataframe/datasource/read_parquet.py,sha256=zxP2DXen443dP83wUItw_5Yi6X_wZn731-pAqycwmOw,14769
92
92
  maxframe/dataframe/datasource/from_tensor.py,sha256=NVgD9l9kTfW9VcVCLQw0Jr2tefWWVPLFy46rShisvbo,15159
93
93
  maxframe/dataframe/datasource/from_records.py,sha256=84pnH79qJOgD3tp-8aJxZN7tfNC-HPOWBGSpTp5OmkM,3699
94
- maxframe/dataframe/datasource/tests/test_datasource.py,sha256=O8KURMdYg2EwUpMAWq1RuRLnRVLvWU0Rh3Gzx6j7JPc,19814
94
+ maxframe/dataframe/datasource/tests/test_datasource.py,sha256=gYev6k8NLokjn7_2iNJwFybJjW6BbPVjOzA-ig1EoxA,21452
95
95
  maxframe/dataframe/datasource/tests/__init__.py,sha256=YsJxv7HbG4YYJmqAJZPYb8iHFRQX5JGpGn2PInDXvY8,596
96
96
  maxframe/dataframe/sort/sort_index.py,sha256=gmv55CmKkAsWrA9bWf45JfX8IvMc0FuFloqb6D3cziI,5412
97
97
  maxframe/dataframe/sort/__init__.py,sha256=E76aFGW1nejyX-_YV4AXlbl3vj0gSANgif5kbrmMWL4,1160
@@ -326,7 +326,7 @@ maxframe/learn/contrib/xgboost/classifier.py,sha256=qUyC8E_HrARlRiq-2hp3G1GLkxIg
326
326
  maxframe/learn/contrib/xgboost/dmatrix.py,sha256=SYrcXqpr91PG1ZNMFvCBE5Y_NO8sztS0-O3CBWhVEhY,5206
327
327
  maxframe/learn/contrib/xgboost/predict.py,sha256=_KjOzqKL-mkH1g_1QDAq0CgrKzKlyJ9YwFMp3XitZnI,4186
328
328
  maxframe/learn/contrib/xgboost/__init__.py,sha256=HsVMBBNXBQs2GaHMjuJrMdJRhpTDxQ37Amjc1GH7ESw,1051
329
- maxframe/learn/contrib/xgboost/core.py,sha256=OkmRC2-z5R5koGu4krxPxCdnFi9iuCQNyY8viBCfBeY,12186
329
+ maxframe/learn/contrib/xgboost/core.py,sha256=eW_jrZtj4u1D6H1hZIgUdNOma7zCzbwuyzICbN3kG0s,12218
330
330
  maxframe/learn/contrib/xgboost/train.py,sha256=9Gs6aHqpLoIVAgpVvxActabHEv2Mc563_scw6IQ8Zg4,5749
331
331
  maxframe/learn/contrib/xgboost/regressor.py,sha256=cVMd44FP_x8bvRKcUOBUGd-gMnyPvK-guBhVUH2Y1Vo,2886
332
332
  maxframe/learn/contrib/xgboost/tests/test_callback.py,sha256=W4NZDAIrTZ6aJliPWXlsYgoAMOFpHafPERDGz-hPtfY,1542
@@ -379,7 +379,7 @@ maxframe/core/entity/objects.py,sha256=7oBbZ3mYeEgn3TJFCAdQffPChRk8DK47Yj-wvqyYY
379
379
  maxframe/core/entity/tests/__init__.py,sha256=YsJxv7HbG4YYJmqAJZPYb8iHFRQX5JGpGn2PInDXvY8,596
380
380
  maxframe/core/entity/tests/test_objects.py,sha256=KiUM7EKwN48OvC8jaizpFJ3TVLZWIolQZIgzunpIuMA,1423
381
381
  maxframe/core/graph/__init__.py,sha256=1jzaIyQZosmCj7Hw70fNOLcmuaLq6DbKSqi1YSF3aEA,873
382
- maxframe/core/graph/core.cpython-39-darwin.so,sha256=UVPhelSh29DQsSxzUcI_c10bE3buesjEmr1R9YstBWI,685616
382
+ maxframe/core/graph/core.cpython-39-darwin.so,sha256=vWhWJkjf_1f-_ffXsDdB5oux5NeXREHATEMcRp9P90M,685616
383
383
  maxframe/core/graph/entity.py,sha256=OKMyU4awrjxGpw6RreXrSpsNXyY1l0A4k7Vpvco63WQ,5195
384
384
  maxframe/core/graph/core.pyx,sha256=2P9KckxokoUwSOWIeyxB6VJOjdcBdi__KorxLG5YUQU,16104
385
385
  maxframe/core/graph/tests/__init__.py,sha256=YsJxv7HbG4YYJmqAJZPYb8iHFRQX5JGpGn2PInDXvY8,596
@@ -413,7 +413,7 @@ maxframe/serialization/arrow.py,sha256=A1gDQ7BmsLk_57qPd34e5SIMSqbuMZrfKsixLtHrp
413
413
  maxframe/serialization/__init__.py,sha256=HLNqwNIamJgsiCv8yuDNrtJLY2_SZPyW3xCWrci_rJ0,998
414
414
  maxframe/serialization/maxframe_objects.py,sha256=Ha2pFpBivutH_YES1EQN-zpWu3TbKtotJHiuc8Cs8S8,1365
415
415
  maxframe/serialization/numpy.py,sha256=IbNaCDceyG7Bl3d_rT2NRnB0OaaWo82h1tycjiF2YZ8,3540
416
- maxframe/serialization/core.cpython-39-darwin.so,sha256=9JaIhi2AaZBMErfMLCLm9yHDq6zM__ti6HsRu7fyx9k,1249344
416
+ maxframe/serialization/core.cpython-39-darwin.so,sha256=TVVBRrzP4XBNtb_6wFvJZgI8pgGR7muiAXYq3Ind7V8,1249344
417
417
  maxframe/serialization/scipy.py,sha256=W4P_r-4tAGGfVAFhwqcaHBxdW-dpZ6rIMLuppQzMXjo,2427
418
418
  maxframe/serialization/core.pyx,sha256=dMVZPqMYvAGMklImTIxQBZfG9pwkmJxzAo4G140RmrY,38585
419
419
  maxframe/serialization/tests/test_serial.py,sha256=UBdBo41pAGSmApOYbMue5DZ-dliZ8FkmUctT8jy0QWo,14031
@@ -429,22 +429,22 @@ maxframe/io/__init__.py,sha256=YsJxv7HbG4YYJmqAJZPYb8iHFRQX5JGpGn2PInDXvY8,596
429
429
  maxframe/io/odpsio/tableio.py,sha256=2agl5Sbq-WCq7LPIaV17srZYSGUaQppjTq8FOuTBdhM,24831
430
430
  maxframe/io/odpsio/arrow.py,sha256=Wf4XReyY50O-jxnFBpdta1zS-ABGh7JFoP78A1zS_h4,6644
431
431
  maxframe/io/odpsio/__init__.py,sha256=P4CtAyeOmu5u1J8_tNPrSSY5jB3hBciC5c8N8PUmKsk,917
432
- maxframe/io/odpsio/volumeio.py,sha256=3Vf7PqT7LZ7enbmzjJfk5Pc15Y5DShO5nBYhI1ZrBM8,2948
432
+ maxframe/io/odpsio/volumeio.py,sha256=9HcDvl87qkVM0cd_mSINBGGkLifp7NALK_M_M0RIxkc,3381
433
433
  maxframe/io/odpsio/schema.py,sha256=20PjFh6D3D84dLNKkMSqSXO_oHfvdPhPPnGUTBAUh0o,16817
434
434
  maxframe/io/odpsio/tests/test_tableio.py,sha256=m9ACNirwoPbxZP3pLtIYyXYCkUEyldCQ51hrGzkZXLc,7118
435
435
  maxframe/io/odpsio/tests/__init__.py,sha256=YsJxv7HbG4YYJmqAJZPYb8iHFRQX5JGpGn2PInDXvY8,596
436
436
  maxframe/io/odpsio/tests/test_schema.py,sha256=Y-Qc4N0z1dic1FT_sppxyQAnGXkVWzzikmlZ3c7judc,18486
437
437
  maxframe/io/odpsio/tests/test_arrow.py,sha256=OTlIobm_TprI-LCdq-z9OT65H1L9Zt8bfImcHYg-MzE,4450
438
- maxframe/io/odpsio/tests/test_volumeio.py,sha256=rmdnB6uPd3VpIOP77YkMo8c12zrwGi1X-wDwJzGDogM,2625
438
+ maxframe/io/odpsio/tests/test_volumeio.py,sha256=amai2vlGvtFOCOVou8ZQ87wfoZuQfIBCSepw_9w4qXc,2339
439
439
  maxframe/io/objects/__init__.py,sha256=MPpsLluYCLU7chOY9pauznYk_PHJqVbKns6sjdGFLFk,754
440
440
  maxframe/io/objects/core.py,sha256=bWlnncGLSa9f3_YIDhEA-7XTMjpSBX0oXeAhvsqTgUw,5303
441
441
  maxframe/io/objects/tensor.py,sha256=GC19xpremk8awz530OcAplGpyrnWf5HoyapGfZdR0hw,4654
442
- maxframe/io/objects/tests/test_object_io.py,sha256=JMvTE1PcsoT6R1tvnAzgtcE3yIh10Hj2dwFYTA59ihk,2528
442
+ maxframe/io/objects/tests/test_object_io.py,sha256=a5kFyYMveAoMaPn-QbfUzgIJgMgW2gZR_DEEFsT1fAk,2591
443
443
  maxframe/io/objects/tests/__init__.py,sha256=YsJxv7HbG4YYJmqAJZPYb8iHFRQX5JGpGn2PInDXvY8,596
444
444
  maxframe/tests/test_utils.py,sha256=NovUVZmLnh9AaZLC9M9MQ1z8r9KXkajCK1E8dITrFUE,18539
445
445
  maxframe/tests/test_protocol.py,sha256=bKfuDfN0B0DatPpDs2na6t9CNoh0N6UdhZpchjnln4o,6121
446
446
  maxframe/tests/__init__.py,sha256=YsJxv7HbG4YYJmqAJZPYb8iHFRQX5JGpGn2PInDXvY8,596
447
- maxframe/tests/utils.py,sha256=nZi5T7uzHO5Q95dRJmjCOOwIl6zeHgb1z6yx0gokA5E,7132
447
+ maxframe/tests/utils.py,sha256=fpgi5Kui-TaHVzLgppXCR4IMvEMjl131Uyf3ShThe2Q,7003
448
448
  maxframe/codegen/__init__.py,sha256=xHY0SUB8nLeqnwaw42RBw08AWrp86R_ubsQzkwlG8-I,865
449
449
  maxframe/codegen/core.py,sha256=fenVW3Ft0WCG3rjGaBqtF9IW4PqNHxWA1IbgVy-swLY,20215
450
450
  maxframe/codegen/spe/remote.py,sha256=W3EwT5uwsbf6nRtCdanAD4RTDdbI8Of-POCC9UD23eQ,1254
@@ -585,7 +585,7 @@ maxframe/codegen/tests/test_codegen.py,sha256=TM6teK4idJIhEnnXuzUqjs745e01HtFNFl
585
585
  maxframe/lib/wrapped_pickle.py,sha256=4qWVAbDcTJm4WAvs631fFXrV3NEyzGSnG1jSKHSzdv4,3836
586
586
  maxframe/lib/version.py,sha256=krhgFvMhLdoNCJk3d9U-yyIAHixCR4S9-NggKdqrnHQ,18321
587
587
  maxframe/lib/compat.py,sha256=olFW2HW9-_ber1UbdH_RfpyGHpD5nwnp81VcX1ETwMo,4736
588
- maxframe/lib/mmh3.cpython-39-darwin.so,sha256=25M6ZVSKGXBFZjZS7k5ueiDSS9xWlFQ8PxcvU-7mI2w,119784
588
+ maxframe/lib/mmh3.cpython-39-darwin.so,sha256=Hg1DaAPm01fUZhAu9XLnlwPuO8TZfZOkwUNPhW2NSf4,119784
589
589
  maxframe/lib/compression.py,sha256=QPxWRp0Q2q33EQzY-Jfx_iz7SELax6fu3GTmyIVyjGY,1442
590
590
  maxframe/lib/__init__.py,sha256=YsJxv7HbG4YYJmqAJZPYb8iHFRQX5JGpGn2PInDXvY8,596
591
591
  maxframe/lib/mmh3.pyi,sha256=R_MzTIyUSTn8TF4Gs2hRP7NSWfWi0SeuUauh4eZJc-g,1494