maxframe 2.0.0b1__cp37-cp37m-win32.whl → 2.0.0b2__cp37-cp37m-win32.whl

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

Potentially problematic release.


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

Binary file
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
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.1
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,5 +1,5 @@
1
1
  maxframe/__init__.py,sha256=6Y3yW67GtpKOGqMC1prt4yxqUTc0twHA3yjMEH-5WTw,1036
2
- maxframe/_utils.cp37-win32.pyd,sha256=5sHaUL62HpzXbnnNZvmSaR5biar4FC4-V4qdAf4KvBM,274944
2
+ maxframe/_utils.cp37-win32.pyd,sha256=DJH0GeIcJB8cUoXqIGBEI4-hTDIctijMAemaJzbmQYo,274944
3
3
  maxframe/_utils.pxd,sha256=ckEN1J8rXAtNYW7CictnSVYamH-sQx-uIuWrQts_OT4,1187
4
4
  maxframe/_utils.pyi,sha256=qwxGcqDyM19BufUweKHcupBlW767nUz7oxQQEiHc39k,937
5
5
  maxframe/_utils.pyx,sha256=JI3Qzyj6aBsIBxUWf1Fwsk8cZDREW-WjVMg9mY-ATuA,17576
@@ -173,7 +173,7 @@ maxframe/core/entity/utils.py,sha256=9SFooWpBjBnIwiLid3XzeUymZnQjYZSG-vghULFQUQI
173
173
  maxframe/core/entity/tests/__init__.py,sha256=4LpNXO11JAdLjSut3p036oEEXlDEB-6AURW9oci5W5Y,609
174
174
  maxframe/core/entity/tests/test_objects.py,sha256=ER3qvVndy5q-tlF6Qc0Z0AF_ylvTITIDvD4Qest3y2w,1465
175
175
  maxframe/core/graph/__init__.py,sha256=AwNyGKu1kwXx0Tl8xGJ_pQkpOW6EvKMCCO0PIU_6MIg,895
176
- maxframe/core/graph/core.cp37-win32.pyd,sha256=Die7RbOamHEHPibtzm-d6Ac7k6aGP6FcMpu0_qokLNc,221696
176
+ maxframe/core/graph/core.cp37-win32.pyd,sha256=uKgDncd8xmRY8_iAH7qdSe8EJyVs8W6HzG4D0ycKHmc,221696
177
177
  maxframe/core/graph/core.pyx,sha256=yv-P9NAqwXPdq_bvWOT137pdMEdLzoNpS42rx7o6wjI,16582
178
178
  maxframe/core/graph/entity.py,sha256=RRpIRCZMKjLf2PLdBeDV10UIlIcrqakECuXqfM7SS6c,5354
179
179
  maxframe/core/graph/builder/__init__.py,sha256=NjIcWQ1ZtEbRJalz8XH1UKaQLpsvOqouRPeRBaul5cA,655
@@ -288,12 +288,12 @@ maxframe/dataframe/datasource/from_records.py,sha256=Warf6NQvlRZBSUQ_qPStRI9Srwi
288
288
  maxframe/dataframe/datasource/from_tensor.py,sha256=A9SUA-TjSxJqwIilHkIMQj12S7H5UU9mcQsjq5nh0E0,15589
289
289
  maxframe/dataframe/datasource/index.py,sha256=LUOaSY3jScY65h4TSryXMfQJGdUWWXmnoS1IP9ah5aw,4518
290
290
  maxframe/dataframe/datasource/read_csv.py,sha256=rJWM-VTk231fh8UhIUmweP1fZRJjfPNn-Iec1_PYcz8,24926
291
- maxframe/dataframe/datasource/read_odps_query.py,sha256=ydUqI6LSdfSWLmnFVNynBHVqA97cS5vx1yUnSuT9STM,16140
291
+ maxframe/dataframe/datasource/read_odps_query.py,sha256=6EA6Hni85bVw82Sk7K3PNwarGB5oOmrUhAeHeF2-4-c,18152
292
292
  maxframe/dataframe/datasource/read_odps_table.py,sha256=bwb07XfFDQTwKbXVqfPAhlpEq0pQjdJlmNCqYq2KqMo,10262
293
293
  maxframe/dataframe/datasource/read_parquet.py,sha256=JcXzF89JtUBB00G96_0wnEdu054edmZ-jn7Xc244IFU,15195
294
294
  maxframe/dataframe/datasource/series.py,sha256=9GmE-UVQ_eeFI53UuWiF6rQSqQ1mp4RkBVRWIhKNw2k,1964
295
295
  maxframe/dataframe/datasource/tests/__init__.py,sha256=4LpNXO11JAdLjSut3p036oEEXlDEB-6AURW9oci5W5Y,609
296
- maxframe/dataframe/datasource/tests/test_datasource.py,sha256=HKWk3leE6UPZuqRip39b6DHysY_ZvEpigmNKD54Vifg,20394
296
+ maxframe/dataframe/datasource/tests/test_datasource.py,sha256=bjNMlhdqzjqtrdpUroYqtcO1AKrN5gleGUA-CRYtSB8,22078
297
297
  maxframe/dataframe/datastore/__init__.py,sha256=KbGUgDoSvqGe_6Jm89Mh3KxU2N4mmMrn4prA4Jk933g,810
298
298
  maxframe/dataframe/datastore/core.py,sha256=uNAcFyUgjn_LxUHk7IjqRlAWNeru77Ub-dZ15M5WDjA,762
299
299
  maxframe/dataframe/datastore/to_csv.py,sha256=VVKPr3Ja3oyE5Z2T1tPoH-wNhng4QyKvxFGoTslZg1s,8090
@@ -455,17 +455,17 @@ maxframe/io/objects/__init__.py,sha256=wq8AHIuxvoIqoVOIVZ7DIPeDqmoh4yB0zsC-iVghY
455
455
  maxframe/io/objects/core.py,sha256=iadSP56p1GPZxl9udhPGfwuog6Npi7YqJ1XI5ltU4fo,5459
456
456
  maxframe/io/objects/tensor.py,sha256=_1oowrferb_fNJw5UlPySGNUF17dhNgwvrZxqJNnE-U,4786
457
457
  maxframe/io/objects/tests/__init__.py,sha256=4LpNXO11JAdLjSut3p036oEEXlDEB-6AURW9oci5W5Y,609
458
- maxframe/io/objects/tests/test_object_io.py,sha256=Hxfc1guYT-IBDaKst2P7UVSqwd4XdGACFqI82w0D8tk,2605
458
+ maxframe/io/objects/tests/test_object_io.py,sha256=87ftkGDQWE4XqDPlgpz7feIzdKLWKlFqfdjbzmbh32Y,2670
459
459
  maxframe/io/odpsio/__init__.py,sha256=mGMCS99Gsdl5_pYBQYpXekRrY_4eM2waP9OG0wTQSb4,940
460
460
  maxframe/io/odpsio/arrow.py,sha256=As_x8HrdXrJMvf1Uk4UJoEAODwA_zpRusEQaCl0-ATk,6805
461
461
  maxframe/io/odpsio/schema.py,sha256=2P7olzWL1QwqzucFqL-fUe2ANrgdxy3fOtk7LYxewqM,17307
462
462
  maxframe/io/odpsio/tableio.py,sha256=_pCW_--WaH9vNs_u1f9ijHQIJUIaSKjTDSb73WPIj_4,25553
463
- maxframe/io/odpsio/volumeio.py,sha256=aIGjSDdAIh8TM3RfqpZFSfUTjgHCBGWnqDMIpt0-ax4,3035
463
+ maxframe/io/odpsio/volumeio.py,sha256=FErxOK2oYs09mLAguE5XS9KqKbip2Ruuhp6NMRFdZFM,3483
464
464
  maxframe/io/odpsio/tests/__init__.py,sha256=4LpNXO11JAdLjSut3p036oEEXlDEB-6AURW9oci5W5Y,609
465
465
  maxframe/io/odpsio/tests/test_arrow.py,sha256=sHubxnSLpRp1WdK0LMVG_5LzYgZ7XPwK4lLl8XEpRg0,4582
466
466
  maxframe/io/odpsio/tests/test_schema.py,sha256=udqOedPalRexlUcdvIYUL0rLCKk1P5wqGKusQN6I0ds,18951
467
467
  maxframe/io/odpsio/tests/test_tableio.py,sha256=MD_NE8bVn2og8BZSb9UOngZEJQiCgc3AeG2UN1SmVpw,7323
468
- maxframe/io/odpsio/tests/test_volumeio.py,sha256=Kbl3cffUo8J_1IgCDiMty2tU4ICQwkRV5jw5aEnM0PA,2711
468
+ maxframe/io/odpsio/tests/test_volumeio.py,sha256=bxI5WOEE558jE5gGZCakzCv2BvzZq8UZDs3Q2bM_bz4,2414
469
469
  maxframe/learn/__init__.py,sha256=6461tNiEVUPehmLk5RJo_f4Z9DduUG04IePiEkp4PJY,713
470
470
  maxframe/learn/core.py,sha256=cwm5EdVNSvbL0EPCzR318HjHG8TYeXKG9wgJh0Ig1z8,10429
471
471
  maxframe/learn/contrib/__init__.py,sha256=zMShuxOubDzh94IvRLSwULLHJQGKBWZGyXGqRq2frww,693
@@ -500,7 +500,7 @@ maxframe/learn/contrib/pytorch/tests/test_pytorch.py,sha256=WgA-VI-XlpwaSdD-zpMV
500
500
  maxframe/learn/contrib/xgboost/__init__.py,sha256=ChqbAiGx91jbI4H0MQloiXx2hWGmSte_IO34t2YRLT8,1084
501
501
  maxframe/learn/contrib/xgboost/callback.py,sha256=MtPt83a_WoJLW6obhBrLAPzv-5uJGOFZ4_rS-klCqBQ,2776
502
502
  maxframe/learn/contrib/xgboost/classifier.py,sha256=9ipyolx8DX4gYOXeqo_EFcqRyGxZmNBfBa_ZtroSz5Q,4128
503
- maxframe/learn/contrib/xgboost/core.py,sha256=Wn8mic4oRr-Er2neQ7odPwkcPu0kK2mQDld5ns5i44g,12545
503
+ maxframe/learn/contrib/xgboost/core.py,sha256=-QEtSRdx4vmYr6mG4zBh-bUYKb1YFGcwe5BHfIVr8zU,12578
504
504
  maxframe/learn/contrib/xgboost/dmatrix.py,sha256=aa4_PUm-ogKQEZxx1vLxFvYGZcey9zgr7704eSBVUfE,5363
505
505
  maxframe/learn/contrib/xgboost/predict.py,sha256=Duo9fIAjAEkD3-PliVBTesqJbFL9nws65YWe9Q_baDk,4317
506
506
  maxframe/learn/contrib/xgboost/regressor.py,sha256=qIJmZJPhhegc3h2wjsCfNj9pGUPNGpzJlWFzowMouT8,2972
@@ -543,7 +543,7 @@ maxframe/lib/__init__.py,sha256=4LpNXO11JAdLjSut3p036oEEXlDEB-6AURW9oci5W5Y,609
543
543
  maxframe/lib/compat.py,sha256=vqM6avpMK_UpbxYwslJWq_-7jdnvJ-SplxeOauG9Nzk,4881
544
544
  maxframe/lib/compression.py,sha256=8F0QEOlrgrFz8Yzeyap4ud3PYe1I5LUWUHWvQg1YKq0,1497
545
545
  maxframe/lib/functools_compat.py,sha256=1a-R_fcKQo7gUZnyk6L-qt_Ozhm3Gb0y86Fd3ROeTcw,2697
546
- maxframe/lib/mmh3.cp37-win32.pyd,sha256=kMM722q6_Gk69vuhA_LZa3lwLI2yCRTik2I9pRD1Bvk,15360
546
+ maxframe/lib/mmh3.cp37-win32.pyd,sha256=0U4nBOXZqqCA0kHI2sRx-3VGv1tIZvbLkw7kwwx68Fo,15360
547
547
  maxframe/lib/mmh3.pyi,sha256=ad6KZrDA7dznE5Qv0lnGB32rw1Zl2DBwNIH0BI_bFQU,1537
548
548
  maxframe/lib/version.py,sha256=NqxzCX2pLHIMTj-7HTA6xU3iyd_DVeqyyW1n-Rk8MCQ,18941
549
549
  maxframe/lib/wrapped_pickle.py,sha256=Yazeydh6vOAd4ibsv_tn_8LgAC7kVkoResQYFW8RXNw,3976
@@ -602,7 +602,7 @@ maxframe/remote/core.py,sha256=RRG8Eh5wYi5epjxG2zsK6vw2XSqWIQbEG0QqNwGZFPc,6759
602
602
  maxframe/remote/run_script.py,sha256=lG1tfysaPu8CX5CHM-jwjs7FOJPj7FQfHrp7hOO64sQ,3775
603
603
  maxframe/serialization/__init__.py,sha256=nluqAwXyGrWuYtZ0QksoqZ98A3sRRM_XiYHf2cUb9pU,1028
604
604
  maxframe/serialization/arrow.py,sha256=DUq7e9V8kJrpj_Z67F767jo_wxgkkXygSPByzMqfB4M,3513
605
- maxframe/serialization/core.cp37-win32.pyd,sha256=IycLGda0G5i-nVfaH0rrPU2pjtITtaj5xAErFuf8vvY,395264
605
+ maxframe/serialization/core.cp37-win32.pyd,sha256=gGae_k2CWdXK88i3aWNjpJ5CiivYUazYh4w6DC3HTQk,395264
606
606
  maxframe/serialization/core.pxd,sha256=x8_6jYkU0BnV-0KUEjnqvXXn1c9HPvyt660mi7u9fE0,1580
607
607
  maxframe/serialization/core.pyi,sha256=jOgVcThRuPekxQVyxWWnF-8Udgzo6kDpZThYVQsYeog,2327
608
608
  maxframe/serialization/core.pyx,sha256=PdmooZnLD-srKzc0sPiqIT51U4wgMzFtN2G121YDOUM,39812
@@ -917,7 +917,7 @@ maxframe/tensor/ufunc/ufunc.py,sha256=OHHRgqfNr5oHXwbC1QJTZtBJwjLc-FxfrX6Gb7TLCp
917
917
  maxframe/tests/__init__.py,sha256=4LpNXO11JAdLjSut3p036oEEXlDEB-6AURW9oci5W5Y,609
918
918
  maxframe/tests/test_protocol.py,sha256=tEClIngXq1fSXcAN56hTDSPuK5Y-Tez8G7KTxYVoEBg,6299
919
919
  maxframe/tests/test_utils.py,sha256=LvHJphFSMj5oq64DOcWP9HjSOLOWHKPDxCI3KNDxq2Y,19112
920
- maxframe/tests/utils.py,sha256=By1NLM7U8fcTZek4DRSBRHkOXes5210vcmYi5trkWbY,7387
920
+ maxframe/tests/utils.py,sha256=EEdNLezV_GgSxNGGc18nz3hEMDDSinJI_istcmiLFeA,7250
921
921
  maxframe_client/__init__.py,sha256=lMXPcrevOU4QUF8NIK1K-piVGPllfmuQ11TQivyuuYo,705
922
922
  maxframe_client/conftest.py,sha256=gw1eaUzIa4sSlYmeV8yGqCz-R-8sLt46iQ5yzxkbJ2Q,658
923
923
  maxframe_client/fetcher.py,sha256=giZOhWCs3pMZQzVYL5HHeP46d87Pa_fzQ-ZG00Xswtc,12626
@@ -933,7 +933,7 @@ maxframe_client/session/tests/test_task.py,sha256=qtKtseHpc13xQCe4SsDaM7UToVOTkP
933
933
  maxframe_client/tests/__init__.py,sha256=4LpNXO11JAdLjSut3p036oEEXlDEB-6AURW9oci5W5Y,609
934
934
  maxframe_client/tests/test_fetcher.py,sha256=-KG_OshShJEa66Hg_RKuT745AxadH2LMWasHo5hhIow,4265
935
935
  maxframe_client/tests/test_session.py,sha256=BsWX-sGtSI9AaL1wzVpqp-fMPXmDd0QUCv_gWVkUeRI,12845
936
- maxframe-2.0.0b1.dist-info/METADATA,sha256=g2MQXspgJQLa0uaPoRO5wigtkhOyWHCSK3p5N7hSLTs,3331
937
- maxframe-2.0.0b1.dist-info/WHEEL,sha256=-4e2_5zQjKFRyJsP6SfWXi5m1fmK3VBANPdPzrOxl7c,97
938
- maxframe-2.0.0b1.dist-info/top_level.txt,sha256=O_LOO6KS5Y1ZKdmCjA9mzfg0-b1sB_P6Oy-hD8aSDfM,25
939
- maxframe-2.0.0b1.dist-info/RECORD,,
936
+ maxframe-2.0.0b2.dist-info/METADATA,sha256=qhr4NFxEubEZtRXeMf3E_QlpRn6pHh76-t4MxYfqDHc,3331
937
+ maxframe-2.0.0b2.dist-info/WHEEL,sha256=-4e2_5zQjKFRyJsP6SfWXi5m1fmK3VBANPdPzrOxl7c,97
938
+ maxframe-2.0.0b2.dist-info/top_level.txt,sha256=O_LOO6KS5Y1ZKdmCjA9mzfg0-b1sB_P6Oy-hD8aSDfM,25
939
+ maxframe-2.0.0b2.dist-info/RECORD,,