maxframe 0.1.0b4__cp38-cp38-win32.whl → 0.1.0b5__cp38-cp38-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.

Files changed (53) hide show
  1. maxframe/__init__.py +1 -0
  2. maxframe/_utils.cp38-win32.pyd +0 -0
  3. maxframe/codegen.py +46 -1
  4. maxframe/config/config.py +11 -1
  5. maxframe/core/graph/core.cp38-win32.pyd +0 -0
  6. maxframe/dataframe/__init__.py +1 -0
  7. maxframe/dataframe/core.py +30 -8
  8. maxframe/dataframe/datasource/read_odps_query.py +3 -1
  9. maxframe/dataframe/datasource/read_odps_table.py +3 -1
  10. maxframe/dataframe/misc/__init__.py +4 -0
  11. maxframe/dataframe/misc/apply.py +1 -1
  12. maxframe/dataframe/misc/case_when.py +141 -0
  13. maxframe/dataframe/misc/pivot_table.py +262 -0
  14. maxframe/dataframe/misc/tests/test_misc.py +61 -0
  15. maxframe/dataframe/plotting/core.py +2 -2
  16. maxframe/dataframe/reduction/core.py +2 -1
  17. maxframe/dataframe/utils.py +7 -0
  18. maxframe/learn/contrib/utils.py +52 -0
  19. maxframe/learn/contrib/xgboost/__init__.py +26 -0
  20. maxframe/learn/contrib/xgboost/classifier.py +86 -0
  21. maxframe/learn/contrib/xgboost/core.py +156 -0
  22. maxframe/learn/contrib/xgboost/dmatrix.py +150 -0
  23. maxframe/learn/contrib/xgboost/predict.py +138 -0
  24. maxframe/learn/contrib/xgboost/regressor.py +78 -0
  25. maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
  26. maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
  27. maxframe/learn/contrib/xgboost/train.py +121 -0
  28. maxframe/learn/utils/__init__.py +15 -0
  29. maxframe/learn/utils/core.py +29 -0
  30. maxframe/lib/mmh3.cp38-win32.pyd +0 -0
  31. maxframe/odpsio/arrow.py +2 -3
  32. maxframe/odpsio/tableio.py +22 -0
  33. maxframe/odpsio/tests/test_schema.py +16 -11
  34. maxframe/opcodes.py +3 -0
  35. maxframe/serialization/core.cp38-win32.pyd +0 -0
  36. maxframe/serialization/core.pyi +61 -0
  37. maxframe/session.py +28 -0
  38. maxframe/tensor/__init__.py +1 -1
  39. maxframe/tensor/base/__init__.py +2 -0
  40. maxframe/tensor/base/atleast_1d.py +74 -0
  41. maxframe/tensor/base/unique.py +205 -0
  42. maxframe/tensor/datasource/array.py +4 -2
  43. maxframe/tensor/datasource/scalar.py +1 -1
  44. maxframe/udf.py +63 -3
  45. maxframe/utils.py +6 -0
  46. {maxframe-0.1.0b4.dist-info → maxframe-0.1.0b5.dist-info}/METADATA +2 -2
  47. {maxframe-0.1.0b4.dist-info → maxframe-0.1.0b5.dist-info}/RECORD +53 -36
  48. maxframe_client/fetcher.py +65 -3
  49. maxframe_client/session/odps.py +30 -1
  50. maxframe_client/session/task.py +26 -53
  51. maxframe_client/tests/test_session.py +28 -1
  52. {maxframe-0.1.0b4.dist-info → maxframe-0.1.0b5.dist-info}/WHEEL +0 -0
  53. {maxframe-0.1.0b4.dist-info → maxframe-0.1.0b5.dist-info}/top_level.txt +0 -0
maxframe/udf.py CHANGED
@@ -12,21 +12,51 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ import shlex
15
16
  from typing import Callable, List, Optional, Union
16
17
 
17
18
  from odps.models import Resource
18
19
 
19
20
  from .serialization.serializables import (
21
+ BoolField,
20
22
  FieldTypes,
21
23
  FunctionField,
22
24
  ListField,
23
25
  Serializable,
26
+ StringField,
24
27
  )
28
+ from .utils import tokenize
29
+
30
+
31
+ class PythonPackOptions(Serializable):
32
+ key = StringField("key")
33
+ requirements = ListField("requirements", FieldTypes.string, default_factory=list)
34
+ force_rebuild = BoolField("force_rebuild", default=False)
35
+ prefer_binary = BoolField("prefer_binary", default=False)
36
+ pre_release = BoolField("pre_release", default=False)
37
+ pack_instance_id = StringField("pack_instance_id", default=None)
38
+
39
+ def __init__(self, key: str = None, **kw):
40
+ super().__init__(key=key, **kw)
41
+ if self.key is None:
42
+ args = {
43
+ "force_rebuild": self.force_rebuild,
44
+ "prefer_binary": self.prefer_binary,
45
+ "pre_release": self.pre_release,
46
+ }
47
+ self.key = tokenize(set(self.requirements), args)
48
+
49
+ def __repr__(self):
50
+ return (
51
+ f"<PythonPackOptions {self.requirements} force_rebuild={self.force_rebuild} "
52
+ f"prefer_binary={self.prefer_binary} pre_release={self.pre_release}>"
53
+ )
25
54
 
26
55
 
27
56
  class MarkedFunction(Serializable):
28
57
  func = FunctionField("func")
29
58
  resources = ListField("resources", FieldTypes.string, default_factory=list)
59
+ pythonpacks = ListField("pythonpacks", FieldTypes.reference, default_factory=list)
30
60
 
31
61
  def __init__(self, func: Optional[Callable] = None, **kw):
32
62
  super().__init__(func=func, **kw)
@@ -54,13 +84,39 @@ def with_resources(*resources: Union[str, Resource], use_wrapper_class: bool = T
54
84
  def func_wrapper(func):
55
85
  str_resources = [res_to_str(r) for r in resources]
56
86
  if not use_wrapper_class:
57
- func.resources = str_resources
87
+ existing = getattr(func, "resources") or []
88
+ func.resources = existing + str_resources
89
+ return func
90
+
91
+ if isinstance(func, MarkedFunction):
92
+ func.resources = func.resources + str_resources
58
93
  return func
94
+ return MarkedFunction(func, resources=str_resources)
95
+
96
+ return func_wrapper
97
+
98
+
99
+ def with_python_requirements(
100
+ *requirements: str,
101
+ force_rebuild: bool = False,
102
+ prefer_binary: bool = False,
103
+ pre_release: bool = False,
104
+ ):
105
+ result_req = []
106
+ for req in requirements:
107
+ result_req.extend(shlex.split(req))
59
108
 
109
+ def func_wrapper(func):
110
+ pack_item = PythonPackOptions(
111
+ requirements=requirements,
112
+ force_rebuild=force_rebuild,
113
+ prefer_binary=prefer_binary,
114
+ pre_release=pre_release,
115
+ )
60
116
  if isinstance(func, MarkedFunction):
61
- func.resources = str_resources
117
+ func.pythonpacks.append(pack_item)
62
118
  return func
63
- return MarkedFunction(func, resources=list(str_resources))
119
+ return MarkedFunction(func, pythonpacks=[pack_item])
64
120
 
65
121
  return func_wrapper
66
122
 
@@ -72,3 +128,7 @@ def get_udf_resources(
72
128
  func: Callable,
73
129
  ) -> List[Union[Resource, str]]:
74
130
  return getattr(func, "resources", None) or []
131
+
132
+
133
+ def get_udf_pythonpacks(func: Callable) -> List[PythonPackOptions]:
134
+ return getattr(func, "pythonpacks", None) or []
maxframe/utils.py CHANGED
@@ -1106,3 +1106,9 @@ def get_python_tag():
1106
1106
  # todo add implementation suffix for non-GIL tags when PEP703 is ready
1107
1107
  version_info = sys.version_info
1108
1108
  return f"cp{version_info[0]}{version_info[1]}"
1109
+
1110
+
1111
+ def get_item_if_scalar(val: Any) -> Any:
1112
+ if isinstance(val, np.ndarray) and val.shape == ():
1113
+ return val.item()
1114
+ return val
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: maxframe
3
- Version: 0.1.0b4
3
+ Version: 0.1.0b5
4
4
  Summary: MaxFrame operator-based data analyze framework
5
5
  Requires-Dist: numpy >=1.19.0
6
6
  Requires-Dist: pandas >=1.0.0
7
- Requires-Dist: pyodps >=0.11.5
7
+ Requires-Dist: pyodps >=0.11.6.1
8
8
  Requires-Dist: scipy >=1.0
9
9
  Requires-Dist: pyarrow >=1.0.0
10
10
  Requires-Dist: msgpack >=1.0.0
@@ -1,21 +1,21 @@
1
- maxframe/__init__.py,sha256=MgltwhBvnUQDKKmHDg9Y69TJkRGmQQ9m8-D9FC2pcLU,1007
2
- maxframe/_utils.cp38-win32.pyd,sha256=DWWTa5zkbT6iJXisAzwbojWFHup4DqNuGfOL-aRS80g,272384
1
+ maxframe/__init__.py,sha256=RujkARDvD6mhFpR330UQ0UfogvIdae5EjR1euFpTiYA,1036
2
+ maxframe/_utils.cp38-win32.pyd,sha256=fXTg4UHFbq7RR1ku_XDfQOh_ahPgq_pWpg6MqN6iDqs,272896
3
3
  maxframe/_utils.pxd,sha256=_qHN-lCY1FQgDFIrrqA79Ys0SBdonp9kXRMS93xKSYk,1187
4
4
  maxframe/_utils.pyx,sha256=_3p6aJEJ6WZYLcNZ6o4DxoxsxqadTlJXFlgDeFPxqUQ,17564
5
- maxframe/codegen.py,sha256=S23hTTu2fIJTv5PMIItE_NPUnadUyoiMmb-1YAqbaWw,16329
5
+ maxframe/codegen.py,sha256=bkOqyLYo_8sJ_zPZK-T9JMvBeKkntqb1Oona9l2aNio,18044
6
6
  maxframe/conftest.py,sha256=JE9I-5mP4u-vgUqYL22mNY3tqpGofM8VMe8c8VUYkzk,4403
7
7
  maxframe/env.py,sha256=xY4wjMWIJ4qLsFAQ5F-X5CrVR7dDSWiryPXni0YSK5c,1435
8
8
  maxframe/errors.py,sha256=xBnvoJjjNcHVLhwj77Dux9ut8isGVmmJXFqefmmx8Ak,711
9
9
  maxframe/extension.py,sha256=o7yiS99LWTtLF7ZX6F78UUJAqUyd-LllOXA2l69np50,2455
10
10
  maxframe/mixin.py,sha256=QfX0KqVIWDlVDSFs0lwdzLexw7lS7W_IUuK7aY1Ib8c,3624
11
- maxframe/opcodes.py,sha256=Gcqv1DIMPOXLHOt9yYSRisu2ihP1ez6QX0d5c_L06TA,10732
11
+ maxframe/opcodes.py,sha256=4Gj2svgrNNxylfUbQYs8WbDqTpoCoLtlNCtAYdHr-BU,10781
12
12
  maxframe/protocol.py,sha256=N4i0ggLY131gwnxOrCgKeZwzhLKSRB171cx1lWRvUcw,14605
13
- maxframe/session.py,sha256=ETR-n-DDyCYVh7I1juJfNBxcOrESJSjxW7JOHaSt9To,36700
13
+ maxframe/session.py,sha256=CfDT2iwjl5NAisPrZ6LF0xG_hr75Wr0cfHd6rvtHajw,37515
14
14
  maxframe/typing_.py,sha256=pAgOhHHSM376N7PJLtNXvS5LHNYywz5dIjnA_hHRWSM,1133
15
- maxframe/udf.py,sha256=EFAAV2c8SpWKcF9_8Pocpjc4bXsEASf57Qy_Q30YH4Q,2315
16
- maxframe/utils.py,sha256=fzlh5MTJcX9ZBEnIZ4tVMzf846X9YsUmVGTKG5GtZr4,35212
15
+ maxframe/udf.py,sha256=GJre7snHQxkoyUWX0rpDkrGGU8-qA-SmSe2H9nSMEfo,4422
16
+ maxframe/utils.py,sha256=T_2JIUKG4sWNbrZ_2hf4RWBSRlTQMxW1XnbdudEQPrI,35358
17
17
  maxframe/config/__init__.py,sha256=AHo3deaCm1JnbbRX_udboJEDYrYytdvivp9RFxJcumI,671
18
- maxframe/config/config.py,sha256=Za9cgJfSJ4noNEcOaQ8tI1lhjT0Lvd3uCURqR7vlmbg,13578
18
+ maxframe/config/config.py,sha256=ChDD61-POFvc_wTmfrQaK-8leKV2huiGgnQvi9IsUAk,14019
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
@@ -33,7 +33,7 @@ maxframe/core/entity/output_types.py,sha256=NnNeDBVAEhD8dtPBWzpM7n6s8neVFrahjd0z
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-win32.pyd,sha256=iLYBYn9BL-6YUxKgL2pCk-YCZC_5azZ6nShdYEp9zSc,218112
36
+ maxframe/core/graph/core.cp38-win32.pyd,sha256=6fgdjIkXivc7JOSSTJ5ZQC22JFhYtuE8mG6jpoCXY90,218112
37
37
  maxframe/core/graph/core.pyx,sha256=WYlYtXXSs72vfhf2ttJO-4u85exYzy2J9mlALHOMqoA,16354
38
38
  maxframe/core/graph/entity.py,sha256=RT_xbP5niUN5D6gqZ5Pg1vUegHn8bqPk8G8A30quOVA,5730
39
39
  maxframe/core/graph/builder/__init__.py,sha256=vTRY5xRPOMHUsK0jAtNIb1BjSPGqi_6lv86AroiiiL4,718
@@ -54,12 +54,12 @@ maxframe/core/operator/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH
54
54
  maxframe/core/operator/tests/test_core.py,sha256=iqZk4AWubFLO24V_VeV6SEy5xrzBFLP9qKK6tKO0SGs,1755
55
55
  maxframe/core/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
56
56
  maxframe/core/tests/test_mode.py,sha256=fyRH-ksa6MogEs6kNhtXhCZyvhYqflgaXJYI3nSo-ps,2507
57
- maxframe/dataframe/__init__.py,sha256=BdHZ903J7SkZDOxHDxNZvDxxXjSW8Gj-fJiHG26p-kM,2275
57
+ maxframe/dataframe/__init__.py,sha256=6wzq6JcohLtvR9kkE2Pc476ExNGslCFRijKFE_R6PB8,2318
58
58
  maxframe/dataframe/arrays.py,sha256=rOvhxMQars9E3SOYSu0ygBuuRVY0QV6xzengnMqKs4s,29616
59
- maxframe/dataframe/core.py,sha256=mGlHzJqs9EZa0qLxxe-Qp0Kd5SnsVI3r6itDhLxVdGM,76126
59
+ maxframe/dataframe/core.py,sha256=fOrn9ehPmZnymO-r586jpWW9DTMGt7HWvFMwv-JOrjM,76830
60
60
  maxframe/dataframe/initializer.py,sha256=WW96yQjquofNFt6RPZvgWW4SBmH0OEDj8-BxpuyKThY,10552
61
61
  maxframe/dataframe/operators.py,sha256=jl611oPN5TGpf6UDuIwcLUsjmTcbVBNLLd6cvq8TvKo,8144
62
- maxframe/dataframe/utils.py,sha256=5bk441fXa9dpeT98g8OY8TtMypuoB3XSc3rLA0gjPL4,45371
62
+ maxframe/dataframe/utils.py,sha256=nYpTY5TmpJGs2_1VQBNxR_6miPTcdpIbqgw0aqh1Axo,45539
63
63
  maxframe/dataframe/arithmetic/__init__.py,sha256=MPnITPuO7DDjAMTBawpennv6D0V9AnT6oF0nz2KUIqc,12837
64
64
  maxframe/dataframe/arithmetic/abs.py,sha256=EgyzciSwjE_I3ZBuzeVJFVzBHsxn9MWzCtvHgyEl6ek,1016
65
65
  maxframe/dataframe/arithmetic/add.py,sha256=wbmfAZgxjuP02ZUV4-VEsNhJlyo9tytXwkEx65ahuxI,1766
@@ -119,8 +119,8 @@ maxframe/dataframe/datasource/from_records.py,sha256=ygpKOMXZnDdWzGxMxQ4KdGv-tJF
119
119
  maxframe/dataframe/datasource/from_tensor.py,sha256=mShHYi0fZcG7ZShFVgIezaphh8tSFqR9-nQMm5YKIhw,15146
120
120
  maxframe/dataframe/datasource/index.py,sha256=X_NShW67nYJGxaWp3qOrvyInNkz9L-XHjbApU4fHoes,4518
121
121
  maxframe/dataframe/datasource/read_csv.py,sha256=IvQihmpcZIdzSD7ziX92aTAHNyP5WnTgd2cZz_h43sQ,24668
122
- maxframe/dataframe/datasource/read_odps_query.py,sha256=rvlFp35g0vYIRZszhMSjHt5tAR668ir1GVBb-T80TQk,10224
123
- maxframe/dataframe/datasource/read_odps_table.py,sha256=r_VbiWWgBpJArBBB-NJCMRUbCTfUrGEOMJmq9a2TIC8,9380
122
+ maxframe/dataframe/datasource/read_odps_query.py,sha256=6Z8yCSIG96PJFq8B3wk2D29xGedj7y3vV24vGbpoSUA,10269
123
+ maxframe/dataframe/datasource/read_odps_table.py,sha256=d_8jeOMuxyo69l2BYR_kSMI6Ixv25BtqF95YtY9r1Pk,9425
124
124
  maxframe/dataframe/datasource/read_parquet.py,sha256=SZPrWoax2mwMBNvRk_3lkS72pZLe-_X_GwQ1JROBMs4,14952
125
125
  maxframe/dataframe/datasource/series.py,sha256=elQVupKETh-hUHI2fTu8TRxBE729Vyrmpjx17XlRV-8,1964
126
126
  maxframe/dataframe/datasource/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
@@ -174,11 +174,12 @@ maxframe/dataframe/merge/concat.py,sha256=cIlwVguZTWFx6GX5fTZ3YctKNkn9wP72TpbxKR
174
174
  maxframe/dataframe/merge/merge.py,sha256=2bqjWlpW_EAbeyYhzQo1nKJ3l7DZJoSuxFmTfHej1X4,22231
175
175
  maxframe/dataframe/merge/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
176
176
  maxframe/dataframe/merge/tests/test_merge.py,sha256=Mkk2f_NnxPqtG_2AyeG_Bt-CdY-JOcNuJ9ADCDA30H4,7480
177
- maxframe/dataframe/misc/__init__.py,sha256=h5O4v3tHqiXZVWaWUMSk1WhfrZWTlXhrslIWV5zpYQc,5237
177
+ maxframe/dataframe/misc/__init__.py,sha256=Lq82VMR4qWhYD1lYTbj8Wr7ndOh0CNATdOtlOikuZRQ,5401
178
178
  maxframe/dataframe/misc/_duplicate.py,sha256=EYNv1_sKm14d91Gm4_Buxo7b5Tuy93MOvaq1TTAUkis,1516
179
179
  maxframe/dataframe/misc/accessor.py,sha256=XtbMV6QrYb2m9oAd8swkFoKAq5mxj_QO0LVLVw5uJB4,10303
180
- maxframe/dataframe/misc/apply.py,sha256=8ZMj1HRCwqV12ixwegESbRlsQGUrha-N4mBR-bT1cdM,24052
180
+ maxframe/dataframe/misc/apply.py,sha256=HnKJP8EtN8LxALiMaLUp7qrI9dcdj6b7TwXmGe_jV8Y,24058
181
181
  maxframe/dataframe/misc/astype.py,sha256=9CO4BEW98Flqk7HHWScjxRK8EdeTRgQDYcyRwEnyIB0,8033
182
+ maxframe/dataframe/misc/case_when.py,sha256=txasRkyfwn2QCEVZ7W0lrI3_ia0PKwBRFBy6TLrQh1I,4992
182
183
  maxframe/dataframe/misc/check_monotonic.py,sha256=LDltdmPq90fZn8A0ucqpNy0uswKo2hJx59Y4EHSN9l4,2506
183
184
  maxframe/dataframe/misc/cut.py,sha256=dOKWwd1D2CYU9LVQvfonMrD8E2eGeBONZvWN1ArCfMM,14288
184
185
  maxframe/dataframe/misc/datetimes.py,sha256=zR99O-8EKKWt4UtNdPI22K8N9mP9XSs9lDQLBPEmFlo,2582
@@ -195,6 +196,7 @@ maxframe/dataframe/misc/map.py,sha256=NSsQvOFrRvULVHPOfJk3B_tIh2IRU4IE0oOF2qkL4m
195
196
  maxframe/dataframe/misc/melt.py,sha256=LoqZ45-J8WvXixtFEbEF1UCtZy4-E6loFtVdFghgt0A,5282
196
197
  maxframe/dataframe/misc/memory_usage.py,sha256=B_UnQKJW62KQMv2VHlZSjlREFdD6t6qT24x4XTcTTMU,8145
197
198
  maxframe/dataframe/misc/pct_change.py,sha256=V4D2MH7b2EmtCHVKwYxX4wcGsuj1EBruwIXlJ5mAZ_c,4736
199
+ maxframe/dataframe/misc/pivot_table.py,sha256=5HmAdczDMJbznFq2omuBKjjib0WvTrohXGwCtHAMwOY,9782
198
200
  maxframe/dataframe/misc/qcut.py,sha256=kcYhSf6m47u5zIEPgG98nE3hv57e6uuCuJs_dxpcszE,3841
199
201
  maxframe/dataframe/misc/select_dtypes.py,sha256=qsrWW8BNBd-hAT1yIlrnbvBjfbzZyttzch7bxKgRkCg,3248
200
202
  maxframe/dataframe/misc/shift.py,sha256=HCGKBuToksgu5LZR_k5eaQrdyrXCeqRZYbZs0J5-N6s,9191
@@ -205,7 +207,7 @@ maxframe/dataframe/misc/transform.py,sha256=JotPUQzKGhCLRi53sk7USU9HscNjUKCzzus9
205
207
  maxframe/dataframe/misc/transpose.py,sha256=SsKRuN9Pj36D6kntnsLfzBsFHjSCiV1cZuPJuKHgbGU,3772
206
208
  maxframe/dataframe/misc/value_counts.py,sha256=7Yd3ZSrCRDMRX093IlzdsrTJ5UUx0n_lbD5AmXLUr_U,5674
207
209
  maxframe/dataframe/misc/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
208
- maxframe/dataframe/misc/tests/test_misc.py,sha256=PCPbsKahbggM62_b-nKctbDXFNI-gxiuep6Z46Rpe2c,13372
210
+ maxframe/dataframe/misc/tests/test_misc.py,sha256=ur4XDSGnwDcS4Kjf8KIiml5MMpBa12jvgjA0f8-bpdY,15610
209
211
  maxframe/dataframe/missing/__init__.py,sha256=DQDpYqjvXN6o6TF76wJIpf1fZICOEJskljzwDNjN80k,1866
210
212
  maxframe/dataframe/missing/checkna.py,sha256=_Rd-HRX7lTzMV3myu745tzoTB8WIqDIJu2TcT1SfdB0,7113
211
213
  maxframe/dataframe/missing/dropna.py,sha256=fJ7xUmhWnViyPnW6nKTF3u2dktqsuwGimSyO71mh0kk,8518
@@ -214,14 +216,14 @@ maxframe/dataframe/missing/replace.py,sha256=g9KqENIuuaFW33KIFXTClngWcVu2ttrGa28
214
216
  maxframe/dataframe/missing/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
215
217
  maxframe/dataframe/missing/tests/test_missing.py,sha256=zhsgn-yonyXYhlFZtH2OpXtvN0NLxFOZpU_vCumTCqA,3223
216
218
  maxframe/dataframe/plotting/__init__.py,sha256=FlSQds0Rdv7CXo_PJFWErMO5KccKrxdLJO58h1IL6uk,1433
217
- maxframe/dataframe/plotting/core.py,sha256=qrGSA_T2RchjqUiVcxawW1WNQBfOXaCzyHiAd5_GgKo,2271
219
+ maxframe/dataframe/plotting/core.py,sha256=fgMSAJldKXGjRzj_qfN9QK1kaThqnv8wybJHSu8Y4qg,2311
218
220
  maxframe/dataframe/plotting/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
219
221
  maxframe/dataframe/plotting/tests/test_plotting.py,sha256=AZ4-C_ASyt3mD29ytsYa0Ut6gA2028ugCKfP9aLK448,4254
220
222
  maxframe/dataframe/reduction/__init__.py,sha256=ejIK5G6ylU0q37XVs_2DkmsnHTtYbE44ffhExNl5Usk,4297
221
223
  maxframe/dataframe/reduction/aggregation.py,sha256=-v_jzKAiLGHOmv3MTDgqovfEYLgeJobU3CqaMWKqkRo,12948
222
224
  maxframe/dataframe/reduction/all.py,sha256=enpOWffBNXAEgFSaiZm0KPwU3izMvWd7M8smLwZjaeE,2044
223
225
  maxframe/dataframe/reduction/any.py,sha256=PensVOfgCcxu7u7-1OuMcD6gov2c2kN01B57O3eoHw8,2048
224
- maxframe/dataframe/reduction/core.py,sha256=1s_qb1XAsX2vRp7kgqoa4hyFP_OVbSR24UXoODYvNqg,31165
226
+ maxframe/dataframe/reduction/core.py,sha256=QrZ4R9Q96wk7oaIzRZ2-KrFZcFbsbamZ8uUuQKAWdio,31232
225
227
  maxframe/dataframe/reduction/count.py,sha256=YLx9bFb2IdnBIkTyApRad0x1yub6TmqncP6TzGcOL_Q,1800
226
228
  maxframe/dataframe/reduction/cummax.py,sha256=S2iUhfBL2lKwFKhFIYMQxlE26pYroEYKG3cqmG0gIAs,1043
227
229
  maxframe/dataframe/reduction/cummin.py,sha256=EWz1CUCQoTwxluvvQPtcNxWdIISr3bBaZPttB104Pdc,1043
@@ -276,15 +278,27 @@ maxframe/dataframe/window/tests/test_expanding.py,sha256=PsFYI6YXxNHYlsyaesy9yIA
276
278
  maxframe/dataframe/window/tests/test_rolling.py,sha256=eJYHh4MhKm_e9h4bCnK_d_aAYlKGQtFAbZTTEILe6gU,1771
277
279
  maxframe/learn/__init__.py,sha256=1QzrFCJmdZFy0Nh1Ng3V6yY_NVvoSUdTIqcU-HIa1wk,649
278
280
  maxframe/learn/contrib/__init__.py,sha256=2_AumQELt_0MMsSDS7nwk4Fy0TE807lasVuFvGEv1Lc,649
281
+ maxframe/learn/contrib/utils.py,sha256=e4E-QLr7SAhCBTUX246SBpi9DtRNQAE-xOUxvNnFzZY,1714
279
282
  maxframe/learn/contrib/pytorch/__init__.py,sha256=a60NZy-COXEFgyC0uXJRBZGi-Vd9HZcqX62bKAMPKaM,703
280
283
  maxframe/learn/contrib/pytorch/run_function.py,sha256=aQQhy2Bc6EEe-NVZb17hK4I9_TqIM1uI3fIMihY3TSQ,3354
281
284
  maxframe/learn/contrib/pytorch/run_script.py,sha256=FOBXdJ9Q5QOirGGXq8_XwpwrTpDEmWt45-9n4VR_ixI,3213
282
285
  maxframe/learn/contrib/pytorch/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
283
286
  maxframe/learn/contrib/pytorch/tests/test_pytorch.py,sha256=GHP-oD5uMU8LD90Jt2cHbYRDdM5efjzsjpeBkc3t_qE,1444
287
+ maxframe/learn/contrib/xgboost/__init__.py,sha256=vk9xZO_FUwyVCrcLP1dbEz6JCZQBEHsmhGr1uQ45FAI,925
288
+ maxframe/learn/contrib/xgboost/classifier.py,sha256=DWvQ9_GLg-ZeSFQp6NN5-7_BA9NxkpxEv5WtuodU31o,3022
289
+ maxframe/learn/contrib/xgboost/core.py,sha256=RzGTONv1WgDb0ZXUxzDDkbqepvznAPRyjSgD2N4MdPc,5350
290
+ maxframe/learn/contrib/xgboost/dmatrix.py,sha256=8bCcfJGG84s7sKBNcw4urvwPWqX6mMvEN_KyaL52JxM,5006
291
+ maxframe/learn/contrib/xgboost/predict.py,sha256=FOrLkzjoYjxJZdrisy_bXoRBA8itdGuaP3QDV1hzDl0,4802
292
+ maxframe/learn/contrib/xgboost/regressor.py,sha256=osuNG4N1SILgjL-CodYnM9ODwewaVi4-8tHdfWZWJpg,2610
293
+ maxframe/learn/contrib/xgboost/train.py,sha256=yn2_45hDvuAi4VKkFPR11i38o0mrFaNJ668qBnj2wDI,4079
294
+ maxframe/learn/contrib/xgboost/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
295
+ maxframe/learn/contrib/xgboost/tests/test_core.py,sha256=qNSXaB1t1vpoCD6RfpnFjJZHS8ShW9O_uz0ucXXlfpE,1449
296
+ maxframe/learn/utils/__init__.py,sha256=w2_QpDZ9J5BcSgbqu8P2RlkVRWC2gLowfgsaDPtz_Pg,661
297
+ maxframe/learn/utils/core.py,sha256=WNDISxPFsWmjkwHwEvjVGCkAOkIftqzEQFPA_KWr7FY,1058
284
298
  maxframe/lib/__init__.py,sha256=_PB28W40qku6YiT8fJYqdmEdRMQfelOwGeksCOZJfCc,657
285
299
  maxframe/lib/compression.py,sha256=QQpNK79iUC9zck74I0HKMhapSRnLBXtTRyS91taEVIc,1497
286
300
  maxframe/lib/functools_compat.py,sha256=2LTrkSw5i-z5E9XCtZzfg9-0vPrYxicKvDjnnNrAL1Q,2697
287
- maxframe/lib/mmh3.cp38-win32.pyd,sha256=hXvvayKkaUsh4-VtqP8G4JSzrzqRHcFO_xGJuXpNibE,14848
301
+ maxframe/lib/mmh3.cp38-win32.pyd,sha256=utjwzUDOeasgKCwSRUC9VywFD0omqHkWAuXTK6NLkHo,14848
288
302
  maxframe/lib/version.py,sha256=VOVZu3KHS53YUsb_vQsT7AyHwcCWAgc-3bBqV5ANcbQ,18941
289
303
  maxframe/lib/wrapped_pickle.py,sha256=bzEaokhAZlkjXqw1xfeKO1KX2awhKIz_1RT81yPPoag,3949
290
304
  maxframe/lib/aio/__init__.py,sha256=xzIYnV42_7CYuDTTv8svscIXQeJMF0nn8AXMbpv173M,963
@@ -333,13 +347,13 @@ maxframe/lib/tblib/pickling_support.py,sha256=D9A0eX7gJeyqhXWxJJZ1GRwwcc5lj86wBR
333
347
  maxframe/lib/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
334
348
  maxframe/lib/tests/test_wrapped_pickle.py,sha256=WV0EJQ1hTSp8xjuosWWtEO7PeiBqdDUYgStxp72_c94,1575
335
349
  maxframe/odpsio/__init__.py,sha256=0SesD04XxFli4Gp23ipMkefFQ2ZTB0PItwZoSHpDC-k,820
336
- maxframe/odpsio/arrow.py,sha256=vvi9g5IZ8Wn224obv3vOO8U1X6UlNNTxSOfDA4Dvx0M,3875
350
+ maxframe/odpsio/arrow.py,sha256=pFw7aP7u8maEnXXF63VpMbI2qrOvWl78dYWGqHkXuJA,3884
337
351
  maxframe/odpsio/schema.py,sha256=Hba-eCXnBUS6NxHRsshaohzO1eThm4HeVzzvAF7E3Vg,12479
338
- maxframe/odpsio/tableio.py,sha256=r_Y47V5NhvLHsK7kypdswSDmOWag1Zoh9-FEjKe5MG0,9660
352
+ maxframe/odpsio/tableio.py,sha256=ugLy15g2JoCD3GHhCRrH9PT9g9hyKfwrC71qXEVqvB0,10470
339
353
  maxframe/odpsio/volumeio.py,sha256=IT_OO-RG2rJZOEx8C8xRr0oNR358RSAJQAp6WGxeXzI,3838
340
354
  maxframe/odpsio/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
341
355
  maxframe/odpsio/tests/test_arrow.py,sha256=yeDWFzsm2IMS-k6jimlQ7uim5T6WW1Anuy8didaf4cs,3194
342
- maxframe/odpsio/tests/test_schema.py,sha256=BI2Eq_DkyCimJEjSylAm_z3SLVNdEzKto7nqu7uyiW0,12088
356
+ maxframe/odpsio/tests/test_schema.py,sha256=QekMLBWu98IUN6mCloOxEQU0-7RL5OKzV8EE3A17wfU,12255
343
357
  maxframe/odpsio/tests/test_tableio.py,sha256=ZyQxBAVA5GG3j_NOPTTFs5vCQqQywhRKC9OAJx9LJxM,4789
344
358
  maxframe/odpsio/tests/test_volumeio.py,sha256=xvnrPZueZ76OAWK2zW_tHHI_cDxo7gJXTHiEe0lkmjk,3112
345
359
  maxframe/remote/__init__.py,sha256=Yu1ZDLICbehNfd1ur7_2bnIn2VFIsTxH_cILCbHAeZY,747
@@ -347,8 +361,9 @@ maxframe/remote/core.py,sha256=w_eTDEs0O7iIzLn1YrMGh2gcNAzzbqV0mx2bRT7su_U,7001
347
361
  maxframe/remote/run_script.py,sha256=k93-vaFLUanWoBRai4-78DX_SLeZ8_rbbxcCtOIXZO8,3677
348
362
  maxframe/serialization/__init__.py,sha256=nxxU7CI6MRcL3sjA1KmLkpTGKA3KG30FKl-MJJ0MCdI,947
349
363
  maxframe/serialization/arrow.py,sha256=OMeDjLcPgagqzokG7g3Vhwm6Xw1j-Kph1V2QsIwi6dw,3513
350
- maxframe/serialization/core.cp38-win32.pyd,sha256=pFmDzLiVjokpDE8ebNO8tSV1h0TIum7vAE9ubLF4X0E,352768
364
+ maxframe/serialization/core.cp38-win32.pyd,sha256=lnFyE3_2PNNaC3UgdlaQCFK68GS6BmsFfHt7p6Im_K0,352768
351
365
  maxframe/serialization/core.pxd,sha256=Fymih3Wo-CrOY27_o_DRINdbRGR7mgiT-XCaXCXafxM,1347
366
+ maxframe/serialization/core.pyi,sha256=uaz1R6oGDZhwqmuUotsySL3T8NlUnnNcGQ6hweAtC20,1983
352
367
  maxframe/serialization/core.pyx,sha256=Qmipu3LiJGIBVy_7d4tSJqcYWnG5xj2I7IaPv2PSq5E,35078
353
368
  maxframe/serialization/exception.py,sha256=e7bZyPlZ8XhSCdeOwlYreq0HazPXKOgOA6r9Q4Ecn2Y,3113
354
369
  maxframe/serialization/maxframe_objects.py,sha256=ZHyvxIALoPuB_y3CRc70hZXyfdj4IhaKMXUEYLXHQag,1404
@@ -364,7 +379,7 @@ maxframe/serialization/serializables/tests/test_field_type.py,sha256=uG87-bdG8xG
364
379
  maxframe/serialization/serializables/tests/test_serializable.py,sha256=jnXDfBSNomsEKUKPGd9rCQe8dbOJo7bcFZWvSbEpVsk,8493
365
380
  maxframe/serialization/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
366
381
  maxframe/serialization/tests/test_serial.py,sha256=9G2CbPBHINwcZ038pRwZON_OtH-JVXZ8w66BLYWP578,12923
367
- maxframe/tensor/__init__.py,sha256=aomZCK-bt5OYyRLGcbACxtFLrWIp14F4R3P79zwbN5E,3694
382
+ maxframe/tensor/__init__.py,sha256=lY_GZBClz2MIGwaMerP2DvbsUbC5crCel_kwkeuiyX4,3702
368
383
  maxframe/tensor/array_utils.py,sha256=xr_Ng-4dETJFjsMfWi5gbTPM9mRmPvRWj8QY2WKjmCg,5129
369
384
  maxframe/tensor/core.py,sha256=-G-UzY81GTKj2SD9FQLqBg-UDod5LjjrEA-uF16ofms,22638
370
385
  maxframe/tensor/operators.py,sha256=8VsSZ8OcImGkSRQvrYlV05KMHGsroAYmW1o9RM2yV1U,3584
@@ -470,17 +485,19 @@ maxframe/tensor/arithmetic/trunc.py,sha256=3z8jme9ZpPU8TqNo2ioViqJa7ThNK9KOVX1wl
470
485
  maxframe/tensor/arithmetic/utils.py,sha256=Kc3xqbIK9uRhHhDKFwAj-mW7SRljajfK9UOMyXyCHCY,2304
471
486
  maxframe/tensor/arithmetic/tests/__init__.py,sha256=_PB28W40qku6YiT8fJYqdmEdRMQfelOwGeksCOZJfCc,657
472
487
  maxframe/tensor/arithmetic/tests/test_arithmetic.py,sha256=e8sc6uYI09to_vzci5Vl8BuTM_oDBi4rQ5sQnQkjer4,11403
473
- maxframe/tensor/base/__init__.py,sha256=XaM7fzYdPu1CLzGuWlXhp39EpNTD0PQXR1xotcFLZgA,1049
488
+ maxframe/tensor/base/__init__.py,sha256=qVf97u2J74RSjCmkF-7N-ylxWUc6mbiPPWpDe45vRmQ,1113
474
489
  maxframe/tensor/base/astype.py,sha256=fzj0o3pJMVaSEEKMR-JBsd2FktlSa9ABtpt-fcWKio0,4513
490
+ maxframe/tensor/base/atleast_1d.py,sha256=AgFdj7P3nBy6WibI54IPIwfowLHsk2BHfH3bXKVn5rg,1992
475
491
  maxframe/tensor/base/broadcast_to.py,sha256=V-OB8YSbMfkMP2JpbiIQ0A9PrC-OHfaWzrntf5AOEwo,2775
476
492
  maxframe/tensor/base/ravel.py,sha256=P9SCDU-UUHzd1HqZbodBSgKjtjiOFkyfLV_G9LFnz_U,3265
477
493
  maxframe/tensor/base/transpose.py,sha256=yMK1KzxguKZOWxT3oMo5GchjB-1Yakilp2rEX3QlxFM,3539
494
+ maxframe/tensor/base/unique.py,sha256=zzE3w6VAZslTgYx4FDUPQ3bMsBsj-61z0BPY5hPaM6Q,6947
478
495
  maxframe/tensor/base/where.py,sha256=cSg1mDhiOBB4F0Soh_uVw3yeSve9pfEhPSIDadc-wto,4127
479
496
  maxframe/tensor/base/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
480
497
  maxframe/tensor/base/tests/test_base.py,sha256=i9TneozyHCHDhO438U285KS6tdh0Zks8mgkRm3fsHxk,2957
481
498
  maxframe/tensor/datasource/__init__.py,sha256=xtrdcuP6yTc_T19ITPsJTknoqTT-XudlhSlffrScjsY,1178
482
499
  maxframe/tensor/datasource/arange.py,sha256=tjNF_huiWTtqtN6YBBtn0tvP9Pnebf6LNXRmAsYqRQk,5632
483
- maxframe/tensor/datasource/array.py,sha256=UdTF-mEDzHQWiiRh8c5GFVYujA06OlKvKmCVMYFOHdE,13325
500
+ maxframe/tensor/datasource/array.py,sha256=pC1eeo4C1EkdHklStr6aOCBfRx1SqyeHHwRglKI2W1A,13419
484
501
  maxframe/tensor/datasource/core.py,sha256=LzuHtRWCNny1y-IzGylelWZ6rejS31LdT4E7qs_uIQs,3520
485
502
  maxframe/tensor/datasource/empty.py,sha256=GpK-DHUfJp9M46wUrGt5lf-YbDDveubwntDjTVYnmMw,6019
486
503
  maxframe/tensor/datasource/from_dataframe.py,sha256=iJY2cw2yA6YKnqRLyB0XdvpdemHHzpU7q2SA1sYo6mo,2573
@@ -488,7 +505,7 @@ maxframe/tensor/datasource/from_dense.py,sha256=txyxNBD0oXr3Ama9me2ay1_ASuDu1QK3
488
505
  maxframe/tensor/datasource/from_sparse.py,sha256=le-Wfno7Z8XY71TLwEOhO80fkvKXwKXbDgsrOfmDM8s,1593
489
506
  maxframe/tensor/datasource/full.py,sha256=-54C2YwqIEP3rPGsY0rnbgMBp15_NqgDJ7lxOJJuXGU,6462
490
507
  maxframe/tensor/datasource/ones.py,sha256=0UuYAwMLGfjF-O_90vkwsMqQlAAfJ98TdxbfgC1y6Fk,5182
491
- maxframe/tensor/datasource/scalar.py,sha256=vxEo-QQCkKj0mP2qvs8LE1LXGsTe3BYtITitASTgGAI,1191
508
+ maxframe/tensor/datasource/scalar.py,sha256=g2dsnmOEzV30I0UK3ytMtkiosdfH3NJ6wacZuxBpmbk,1196
492
509
  maxframe/tensor/datasource/zeros.py,sha256=DJZK_kraSn820O17GSHLFHV43x1JL3Gt_HdlN0p5o7k,5860
493
510
  maxframe/tensor/datasource/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
494
511
  maxframe/tensor/datasource/tests/test_datasource.py,sha256=C9sOu8rpDNpu3yMhgln4UzkqW5SklL63IJXRwrwOCYc,7931
@@ -610,21 +627,21 @@ maxframe/tests/test_utils.py,sha256=0Iey3O6zrGI1yQU2OSpWavJNvhUjrmdkct4-27tkGUM,
610
627
  maxframe/tests/utils.py,sha256=gCre-8BApU4-AEun9WShm4Ff5a9a_oKxvLNneESXBjU,4732
611
628
  maxframe_client/__init__.py,sha256=xqlN69LjvAp2bNCaT9d82U9AF5WKi_c4UOheEW1wV9E,741
612
629
  maxframe_client/conftest.py,sha256=UWWMYjmohHL13hLl4adb0gZPLRdBVOYVvsFo6VZruI0,658
613
- maxframe_client/fetcher.py,sha256=ajt14PYVEXKShXSx-qTL_8adMCXBEsZoOhHr3yx95-M,7015
630
+ maxframe_client/fetcher.py,sha256=yFP6Hgz01-qPqBwmTX5-5ECU-G6q-TX5SUktplcJgcU,9213
614
631
  maxframe_client/clients/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
615
632
  maxframe_client/clients/framedriver.py,sha256=upN6C1eZrCpLTsS6fihWOMy392psWfo0bw2XgSLI_Yg,4581
616
633
  maxframe_client/clients/spe.py,sha256=uizNBejhU_FrMhsgsFgDnq7gL7Cxk803LeLYmr3nmxs,3697
617
634
  maxframe_client/session/__init__.py,sha256=9zFCd3zkSADESAFc4SPoQ2nkvRwsIhhpNNO2TtSaWbU,854
618
635
  maxframe_client/session/consts.py,sha256=nD-D0zHXumbQI8w3aUyltJS59K5ftipf3xCtHNLmtc8,1380
619
636
  maxframe_client/session/graph.py,sha256=GSZaJ-PV4DK8bTcNtoSoY5kDTyyIRAKleh4tOCSUbsI,4470
620
- maxframe_client/session/odps.py,sha256=AZKFz1_Pl8-zJ_RwxBoN00uUDKf4MbzhvVZ5cTywURM,16781
621
- maxframe_client/session/task.py,sha256=R8x8OERIb673vTq-o0ig6Zy2NT4_jvi8AbLhyMaljo8,11409
637
+ maxframe_client/session/odps.py,sha256=6OySk4Fo5N5OG_HiuuTxSU5n-UUVYZ0AjTrMzcE-jGY,18008
638
+ maxframe_client/session/task.py,sha256=rY7pXNd_5ixaE3-wSwKTUr2bMPIYwuVAEeia3qY24fk,10445
622
639
  maxframe_client/session/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
623
640
  maxframe_client/session/tests/test_task.py,sha256=861usEURVXeTUzfJYZmBfwsHfZFexG23mMtT5IJOOm4,3364
624
641
  maxframe_client/tests/__init__.py,sha256=29eM5D4knhYwe3TF42naTuC5b4Ym3VeH4rK8KpdLWNY,609
625
642
  maxframe_client/tests/test_fetcher.py,sha256=7iYXLMIoCJLfgUkjB2HBkV-sqQ-xGlhtzfp9hRJz_kM,3605
626
- maxframe_client/tests/test_session.py,sha256=_i6ICUTg6LMs-KD3w3pYNSt5_k9gCOkMx4gTfE20CF8,7130
627
- maxframe-0.1.0b4.dist-info/METADATA,sha256=uH-sH39DV-QlQoIEKtD3W7Os0Z99jZgTs7uyKf-t30Q,3147
628
- maxframe-0.1.0b4.dist-info/WHEEL,sha256=57hb2VMKfzdcZEFKIri3BxIFhvran9ahu4uVnDJqFIU,96
629
- maxframe-0.1.0b4.dist-info/top_level.txt,sha256=64x-fc2q59c_vXwNUkehyjF1vb8JWqFSdYmUqIFqoTM,31
630
- maxframe-0.1.0b4.dist-info/RECORD,,
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=57hb2VMKfzdcZEFKIri3BxIFhvran9ahu4uVnDJqFIU,96
646
+ maxframe-0.1.0b5.dist-info/top_level.txt,sha256=64x-fc2q59c_vXwNUkehyjF1vb8JWqFSdYmUqIFqoTM,31
647
+ maxframe-0.1.0b5.dist-info/RECORD,,
@@ -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")
@@ -84,6 +84,9 @@ class MaxFrameServiceCaller(metaclass=abc.ABCMeta):
84
84
  def decref(self, tileable_keys: List[str]) -> None:
85
85
  raise NotImplementedError
86
86
 
87
+ def get_logview_address(self, dag_id=None, hours=None) -> Optional[str]:
88
+ return None
89
+
87
90
 
88
91
  class MaxFrameSession(ToThreadMixin, IsolatedAsyncSession):
89
92
  _odps_entry: Optional[ODPS]
@@ -129,6 +132,7 @@ class MaxFrameSession(ToThreadMixin, IsolatedAsyncSession):
129
132
  async def _init(self, _address: str):
130
133
  session_info = await self.ensure_async_call(self._caller.create_session)
131
134
  self._session_id = session_info.session_id
135
+ await self._show_logview_address()
132
136
 
133
137
  def _upload_and_get_read_tileable(self, t: TileableType) -> Optional[TileableType]:
134
138
  if (
@@ -142,7 +146,9 @@ class MaxFrameSession(ToThreadMixin, IsolatedAsyncSession):
142
146
  if self._odps_entry.exist_table(table_meta.table_name):
143
147
  self._odps_entry.delete_table(table_meta.table_name)
144
148
  table_name = build_temp_table_name(self.session_id, t.key)
145
- table_obj = self._odps_entry.create_table(table_name, schema)
149
+ table_obj = self._odps_entry.create_table(
150
+ table_name, schema, lifecycle=options.session.temp_table_lifecycle
151
+ )
146
152
 
147
153
  data = t.op.get_data()
148
154
  batch_size = options.session.upload_batch_size
@@ -239,6 +245,8 @@ class MaxFrameSession(ToThreadMixin, IsolatedAsyncSession):
239
245
  self._caller.submit_dag, tileable_graph, replaced_infos
240
246
  )
241
247
 
248
+ await self._show_logview_address(dag_info.dag_id)
249
+
242
250
  progress = Progress()
243
251
  profiling = Profiling()
244
252
  aio_task = asyncio.create_task(
@@ -294,6 +302,8 @@ class MaxFrameSession(ToThreadMixin, IsolatedAsyncSession):
294
302
 
295
303
  for key, result_info in dag_info.tileable_to_result_infos.items():
296
304
  t = key_to_tileables[key]
305
+ fetcher = get_fetcher_cls(result_info.result_type)(self._odps_entry)
306
+ await fetcher.update_tileable_meta(t, result_info)
297
307
  self._tileable_to_infos[t] = result_info
298
308
 
299
309
  def _get_data_tileable_and_indexes(
@@ -388,6 +398,25 @@ class MaxFrameSession(ToThreadMixin, IsolatedAsyncSession):
388
398
  async def get_mutable_tensor(self, name: str):
389
399
  raise NotImplementedError
390
400
 
401
+ async def get_logview_address(self, hours=None) -> Optional[str]:
402
+ return await self.get_dag_logview_address(None, hours)
403
+
404
+ async def get_dag_logview_address(self, dag_id=None, hours=None) -> Optional[str]:
405
+ return await self.ensure_async_call(
406
+ self._caller.get_logview_address, dag_id, hours
407
+ )
408
+
409
+ async def _show_logview_address(self, dag_id=None, hours=None):
410
+ identity = f"Session ID: {self._session_id}"
411
+ if dag_id:
412
+ identity += f", DAG ID: {dag_id}"
413
+
414
+ logview_addr = await self.get_dag_logview_address(dag_id, hours)
415
+ if logview_addr:
416
+ logger.info("%s, Logview: %s", identity, logview_addr)
417
+ else:
418
+ logger.info("%s, Logview address does not exist", identity)
419
+
391
420
 
392
421
  class MaxFrameRestCaller(MaxFrameServiceCaller):
393
422
  _client: FrameDriverClient