maxframe 1.3.1__cp311-cp311-win_amd64.whl → 2.0.0__cp311-cp311-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.
- maxframe/_utils.cp311-win_amd64.pyd +0 -0
- maxframe/_utils.pyi +21 -0
- maxframe/_utils.pyx +4 -3
- maxframe/codegen/__init__.py +27 -0
- maxframe/{codegen.py → codegen/core.py} +49 -43
- maxframe/codegen/spe/__init__.py +16 -0
- maxframe/codegen/spe/core.py +307 -0
- maxframe/codegen/spe/dataframe/__init__.py +37 -0
- maxframe/codegen/spe/dataframe/accessors/__init__.py +15 -0
- maxframe/codegen/spe/dataframe/accessors/base.py +53 -0
- maxframe/codegen/spe/dataframe/accessors/dict_.py +194 -0
- maxframe/codegen/spe/dataframe/accessors/list_.py +80 -0
- maxframe/codegen/spe/dataframe/arithmetic.py +84 -0
- maxframe/codegen/spe/dataframe/datasource.py +181 -0
- maxframe/codegen/spe/dataframe/datastore.py +204 -0
- maxframe/codegen/spe/dataframe/extensions.py +63 -0
- maxframe/codegen/spe/dataframe/fetch.py +26 -0
- maxframe/codegen/spe/dataframe/groupby.py +224 -0
- maxframe/codegen/spe/dataframe/indexing.py +238 -0
- maxframe/codegen/spe/dataframe/merge.py +73 -0
- maxframe/codegen/spe/dataframe/misc.py +286 -0
- maxframe/codegen/spe/dataframe/missing.py +64 -0
- maxframe/codegen/spe/dataframe/reduction.py +160 -0
- maxframe/codegen/spe/dataframe/sort.py +83 -0
- maxframe/codegen/spe/dataframe/statistics.py +46 -0
- maxframe/codegen/spe/dataframe/tests/__init__.py +13 -0
- maxframe/codegen/spe/dataframe/tests/accessors/__init__.py +13 -0
- maxframe/codegen/spe/dataframe/tests/accessors/test_base.py +33 -0
- maxframe/codegen/spe/dataframe/tests/accessors/test_dict.py +310 -0
- maxframe/codegen/spe/dataframe/tests/accessors/test_list.py +137 -0
- maxframe/codegen/spe/dataframe/tests/indexing/__init__.py +13 -0
- maxframe/codegen/spe/dataframe/tests/indexing/conftest.py +58 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_getitem.py +124 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_iloc.py +76 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_indexing.py +39 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_rename.py +51 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_reset_index.py +88 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_sample.py +45 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_set_axis.py +45 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_set_index.py +41 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_setitem.py +46 -0
- maxframe/codegen/spe/dataframe/tests/misc/__init__.py +13 -0
- maxframe/codegen/spe/dataframe/tests/misc/test_apply.py +133 -0
- maxframe/codegen/spe/dataframe/tests/misc/test_drop_duplicates.py +92 -0
- maxframe/codegen/spe/dataframe/tests/misc/test_misc.py +234 -0
- maxframe/codegen/spe/dataframe/tests/missing/__init__.py +13 -0
- maxframe/codegen/spe/dataframe/tests/missing/test_checkna.py +94 -0
- maxframe/codegen/spe/dataframe/tests/missing/test_dropna.py +50 -0
- maxframe/codegen/spe/dataframe/tests/missing/test_fillna.py +94 -0
- maxframe/codegen/spe/dataframe/tests/missing/test_replace.py +45 -0
- maxframe/codegen/spe/dataframe/tests/test_arithmetic.py +73 -0
- maxframe/codegen/spe/dataframe/tests/test_datasource.py +184 -0
- maxframe/codegen/spe/dataframe/tests/test_datastore.py +200 -0
- maxframe/codegen/spe/dataframe/tests/test_extensions.py +88 -0
- maxframe/codegen/spe/dataframe/tests/test_groupby.py +225 -0
- maxframe/codegen/spe/dataframe/tests/test_merge.py +400 -0
- maxframe/codegen/spe/dataframe/tests/test_reduction.py +104 -0
- maxframe/codegen/spe/dataframe/tests/test_sort.py +159 -0
- maxframe/codegen/spe/dataframe/tests/test_statistics.py +70 -0
- maxframe/codegen/spe/dataframe/tests/test_tseries.py +29 -0
- maxframe/codegen/spe/dataframe/tests/test_value_counts.py +60 -0
- maxframe/codegen/spe/dataframe/tests/test_window.py +69 -0
- maxframe/codegen/spe/dataframe/tseries.py +46 -0
- maxframe/codegen/spe/dataframe/udf.py +62 -0
- maxframe/codegen/spe/dataframe/value_counts.py +31 -0
- maxframe/codegen/spe/dataframe/window.py +65 -0
- maxframe/codegen/spe/learn/__init__.py +15 -0
- maxframe/codegen/spe/learn/contrib/__init__.py +15 -0
- maxframe/codegen/spe/learn/contrib/lightgbm.py +160 -0
- maxframe/codegen/spe/learn/contrib/models.py +41 -0
- maxframe/codegen/spe/learn/contrib/pytorch.py +49 -0
- maxframe/codegen/spe/learn/contrib/tests/__init__.py +13 -0
- maxframe/codegen/spe/learn/contrib/tests/test_lightgbm.py +123 -0
- maxframe/codegen/spe/learn/contrib/tests/test_models.py +41 -0
- maxframe/codegen/spe/learn/contrib/tests/test_pytorch.py +53 -0
- maxframe/codegen/spe/learn/contrib/tests/test_xgboost.py +98 -0
- maxframe/codegen/spe/learn/contrib/xgboost.py +152 -0
- maxframe/codegen/spe/learn/metrics/__init__.py +15 -0
- maxframe/codegen/spe/learn/metrics/_classification.py +120 -0
- maxframe/codegen/spe/learn/metrics/tests/__init__.py +13 -0
- maxframe/codegen/spe/learn/metrics/tests/test_classification.py +93 -0
- maxframe/codegen/spe/learn/model_selection/__init__.py +13 -0
- maxframe/codegen/spe/learn/model_selection/tests/__init__.py +13 -0
- maxframe/codegen/spe/learn/model_selection/tests/test_split.py +41 -0
- maxframe/codegen/spe/learn/preprocessing/__init__.py +15 -0
- maxframe/codegen/spe/learn/preprocessing/_data.py +37 -0
- maxframe/codegen/spe/learn/preprocessing/_label.py +47 -0
- maxframe/codegen/spe/learn/preprocessing/tests/__init__.py +13 -0
- maxframe/codegen/spe/learn/preprocessing/tests/test_data.py +31 -0
- maxframe/codegen/spe/learn/preprocessing/tests/test_label.py +43 -0
- maxframe/codegen/spe/learn/utils/__init__.py +15 -0
- maxframe/codegen/spe/learn/utils/checks.py +55 -0
- maxframe/codegen/spe/learn/utils/multiclass.py +60 -0
- maxframe/codegen/spe/learn/utils/shuffle.py +85 -0
- maxframe/codegen/spe/learn/utils/sparsefuncs.py +35 -0
- maxframe/codegen/spe/learn/utils/tests/__init__.py +13 -0
- maxframe/codegen/spe/learn/utils/tests/test_checks.py +48 -0
- maxframe/codegen/spe/learn/utils/tests/test_multiclass.py +52 -0
- maxframe/codegen/spe/learn/utils/tests/test_shuffle.py +50 -0
- maxframe/codegen/spe/learn/utils/tests/test_sparsefuncs.py +34 -0
- maxframe/codegen/spe/learn/utils/tests/test_validation.py +44 -0
- maxframe/codegen/spe/learn/utils/validation.py +35 -0
- maxframe/codegen/spe/objects.py +26 -0
- maxframe/codegen/spe/remote.py +29 -0
- maxframe/codegen/spe/tensor/__init__.py +28 -0
- maxframe/codegen/spe/tensor/arithmetic.py +95 -0
- maxframe/codegen/spe/tensor/core.py +41 -0
- maxframe/codegen/spe/tensor/datasource.py +165 -0
- maxframe/codegen/spe/tensor/extensions.py +35 -0
- maxframe/codegen/spe/tensor/fetch.py +26 -0
- maxframe/codegen/spe/tensor/indexing.py +63 -0
- maxframe/codegen/spe/tensor/linalg.py +63 -0
- maxframe/codegen/spe/tensor/merge.py +31 -0
- maxframe/codegen/spe/tensor/misc.py +121 -0
- maxframe/codegen/spe/tensor/random.py +29 -0
- maxframe/codegen/spe/tensor/reduction.py +39 -0
- maxframe/codegen/spe/tensor/reshape.py +26 -0
- maxframe/codegen/spe/tensor/sort.py +42 -0
- maxframe/codegen/spe/tensor/special.py +35 -0
- maxframe/codegen/spe/tensor/statistics.py +24 -0
- maxframe/codegen/spe/tensor/tests/__init__.py +13 -0
- maxframe/codegen/spe/tensor/tests/test_arithmetic.py +103 -0
- maxframe/codegen/spe/tensor/tests/test_datasource.py +99 -0
- maxframe/codegen/spe/tensor/tests/test_extensions.py +37 -0
- maxframe/codegen/spe/tensor/tests/test_indexing.py +44 -0
- maxframe/codegen/spe/tensor/tests/test_linalg.py +38 -0
- maxframe/codegen/spe/tensor/tests/test_merge.py +28 -0
- maxframe/codegen/spe/tensor/tests/test_misc.py +94 -0
- maxframe/codegen/spe/tensor/tests/test_random.py +55 -0
- maxframe/codegen/spe/tensor/tests/test_reduction.py +65 -0
- maxframe/codegen/spe/tensor/tests/test_reshape.py +39 -0
- maxframe/codegen/spe/tensor/tests/test_sort.py +49 -0
- maxframe/codegen/spe/tensor/tests/test_special.py +28 -0
- maxframe/codegen/spe/tensor/tests/test_statistics.py +29 -0
- maxframe/codegen/spe/tests/__init__.py +13 -0
- maxframe/codegen/spe/tests/test_remote.py +29 -0
- maxframe/codegen/spe/tests/test_spe_codegen.py +141 -0
- maxframe/codegen/spe/utils.py +54 -0
- maxframe/codegen/tests/__init__.py +13 -0
- maxframe/{tests → codegen/tests}/test_codegen.py +3 -5
- maxframe/config/__init__.py +1 -1
- maxframe/config/config.py +50 -23
- maxframe/config/tests/test_config.py +4 -12
- maxframe/config/validators.py +5 -0
- maxframe/conftest.py +38 -10
- maxframe/core/__init__.py +1 -0
- maxframe/core/context.py +110 -0
- maxframe/core/entity/__init__.py +1 -0
- maxframe/core/entity/core.py +0 -7
- maxframe/core/entity/objects.py +19 -5
- maxframe/core/entity/output_types.py +11 -0
- maxframe/core/entity/tests/test_objects.py +11 -12
- maxframe/core/entity/tileables.py +3 -1
- maxframe/core/entity/utils.py +15 -0
- maxframe/core/graph/__init__.py +6 -1
- maxframe/core/graph/builder/base.py +5 -1
- maxframe/core/graph/core.cp311-win_amd64.pyd +0 -0
- maxframe/core/graph/core.pyx +17 -6
- maxframe/core/graph/entity.py +18 -6
- maxframe/core/operator/__init__.py +8 -3
- maxframe/core/operator/base.py +35 -12
- maxframe/core/operator/core.py +37 -14
- maxframe/core/operator/fetch.py +5 -18
- maxframe/core/operator/objects.py +0 -20
- maxframe/core/operator/shuffle.py +6 -72
- maxframe/dataframe/__init__.py +1 -0
- maxframe/dataframe/accessors/datetime_/core.py +7 -4
- maxframe/dataframe/accessors/string_/core.py +9 -6
- maxframe/dataframe/arithmetic/core.py +31 -20
- maxframe/dataframe/arithmetic/tests/test_arithmetic.py +6 -0
- maxframe/dataframe/core.py +98 -91
- maxframe/dataframe/datasource/core.py +8 -1
- maxframe/dataframe/datasource/date_range.py +8 -0
- maxframe/dataframe/datasource/from_index.py +9 -5
- maxframe/dataframe/datasource/from_records.py +9 -2
- maxframe/dataframe/datasource/from_tensor.py +32 -21
- maxframe/dataframe/datasource/read_csv.py +8 -2
- maxframe/dataframe/datasource/read_odps_query.py +109 -19
- maxframe/dataframe/datasource/read_odps_table.py +20 -5
- maxframe/dataframe/datasource/read_parquet.py +8 -3
- maxframe/dataframe/datasource/tests/test_datasource.py +80 -1
- maxframe/dataframe/datastore/tests/test_to_odps.py +52 -1
- maxframe/dataframe/datastore/to_csv.py +7 -3
- maxframe/dataframe/datastore/to_odps.py +42 -6
- maxframe/dataframe/extensions/__init__.py +6 -1
- maxframe/dataframe/extensions/apply_chunk.py +96 -136
- maxframe/dataframe/extensions/flatjson.py +3 -2
- maxframe/dataframe/extensions/flatmap.py +15 -7
- maxframe/dataframe/fetch/core.py +12 -1
- maxframe/dataframe/groupby/__init__.py +7 -0
- maxframe/dataframe/groupby/aggregation.py +9 -8
- maxframe/dataframe/groupby/apply.py +50 -74
- maxframe/dataframe/groupby/apply_chunk.py +393 -0
- maxframe/dataframe/groupby/core.py +80 -17
- maxframe/dataframe/groupby/extensions.py +26 -0
- maxframe/dataframe/groupby/fill.py +9 -4
- maxframe/dataframe/groupby/sample.py +7 -7
- maxframe/dataframe/groupby/tests/test_groupby.py +3 -3
- maxframe/dataframe/groupby/transform.py +57 -54
- maxframe/dataframe/indexing/align.py +7 -6
- maxframe/dataframe/indexing/getitem.py +9 -8
- maxframe/dataframe/indexing/iloc.py +28 -23
- maxframe/dataframe/indexing/insert.py +7 -3
- maxframe/dataframe/indexing/loc.py +9 -8
- maxframe/dataframe/indexing/reindex.py +36 -30
- maxframe/dataframe/indexing/rename_axis.py +18 -10
- maxframe/dataframe/indexing/reset_index.py +0 -2
- maxframe/dataframe/indexing/sample.py +13 -9
- maxframe/dataframe/indexing/set_axis.py +9 -6
- maxframe/dataframe/indexing/setitem.py +8 -5
- maxframe/dataframe/indexing/where.py +12 -9
- maxframe/dataframe/merge/__init__.py +0 -1
- maxframe/dataframe/merge/concat.py +10 -31
- maxframe/dataframe/merge/merge.py +2 -24
- maxframe/dataframe/misc/__init__.py +6 -0
- maxframe/dataframe/misc/_duplicate.py +7 -3
- maxframe/dataframe/misc/apply.py +106 -139
- maxframe/dataframe/misc/astype.py +3 -2
- maxframe/dataframe/misc/case_when.py +11 -7
- maxframe/dataframe/misc/cut.py +11 -10
- maxframe/dataframe/misc/describe.py +7 -3
- maxframe/dataframe/misc/drop.py +13 -11
- maxframe/dataframe/misc/eval.py +0 -2
- maxframe/dataframe/misc/get_dummies.py +78 -49
- maxframe/dataframe/misc/isin.py +13 -10
- maxframe/dataframe/misc/map.py +21 -6
- maxframe/dataframe/misc/melt.py +8 -1
- maxframe/dataframe/misc/pivot.py +232 -0
- maxframe/dataframe/misc/pivot_table.py +52 -40
- maxframe/dataframe/misc/rechunk.py +59 -0
- maxframe/dataframe/misc/shift.py +7 -4
- maxframe/dataframe/misc/stack.py +5 -3
- maxframe/dataframe/misc/tests/test_misc.py +167 -1
- maxframe/dataframe/misc/transform.py +63 -65
- maxframe/dataframe/misc/value_counts.py +7 -4
- maxframe/dataframe/missing/dropna.py +16 -7
- maxframe/dataframe/missing/fillna.py +18 -10
- maxframe/dataframe/missing/replace.py +10 -6
- maxframe/dataframe/missing/tests/test_missing.py +2 -2
- maxframe/dataframe/operators.py +1 -27
- maxframe/dataframe/reduction/aggregation.py +65 -3
- maxframe/dataframe/reduction/core.py +3 -1
- maxframe/dataframe/reduction/median.py +1 -1
- maxframe/dataframe/reduction/tests/test_reduction.py +33 -0
- maxframe/dataframe/reduction/unique.py +53 -7
- maxframe/dataframe/statistics/corr.py +9 -6
- maxframe/dataframe/statistics/quantile.py +9 -6
- maxframe/dataframe/tseries/to_datetime.py +6 -4
- maxframe/dataframe/utils.py +219 -31
- maxframe/dataframe/window/rolling.py +7 -4
- maxframe/env.py +1 -0
- maxframe/errors.py +9 -0
- maxframe/extension.py +13 -2
- maxframe/io/objects/core.py +67 -51
- maxframe/io/objects/tensor.py +73 -17
- maxframe/io/objects/tests/test_object_io.py +10 -55
- maxframe/io/odpsio/arrow.py +15 -2
- maxframe/io/odpsio/schema.py +43 -13
- maxframe/io/odpsio/tableio.py +63 -11
- maxframe/io/odpsio/tests/test_arrow.py +1 -2
- maxframe/io/odpsio/tests/test_schema.py +114 -1
- maxframe/io/odpsio/tests/test_tableio.py +42 -0
- maxframe/io/odpsio/tests/test_volumeio.py +21 -58
- maxframe/io/odpsio/volumeio.py +23 -8
- maxframe/learn/__init__.py +2 -2
- maxframe/learn/contrib/__init__.py +2 -2
- maxframe/learn/contrib/graph/connected_components.py +2 -1
- maxframe/learn/contrib/lightgbm/__init__.py +33 -0
- maxframe/learn/contrib/lightgbm/_predict.py +138 -0
- maxframe/learn/contrib/lightgbm/_train.py +163 -0
- maxframe/learn/contrib/lightgbm/callback.py +114 -0
- maxframe/learn/contrib/lightgbm/classifier.py +199 -0
- maxframe/learn/contrib/lightgbm/core.py +372 -0
- maxframe/learn/contrib/lightgbm/dataset.py +153 -0
- maxframe/learn/contrib/lightgbm/regressor.py +29 -0
- maxframe/learn/contrib/lightgbm/tests/__init__.py +13 -0
- maxframe/learn/contrib/lightgbm/tests/test_callback.py +58 -0
- maxframe/learn/contrib/models.py +38 -9
- maxframe/learn/contrib/utils.py +55 -0
- maxframe/learn/contrib/xgboost/callback.py +86 -0
- maxframe/learn/contrib/xgboost/classifier.py +26 -30
- maxframe/learn/contrib/xgboost/core.py +54 -42
- maxframe/learn/contrib/xgboost/dmatrix.py +19 -12
- maxframe/learn/contrib/xgboost/predict.py +16 -9
- maxframe/learn/contrib/xgboost/regressor.py +28 -27
- maxframe/learn/contrib/xgboost/tests/test_callback.py +41 -0
- maxframe/learn/contrib/xgboost/train.py +59 -16
- maxframe/learn/core.py +252 -0
- maxframe/learn/datasets/__init__.py +20 -0
- maxframe/learn/datasets/samples_generator.py +628 -0
- maxframe/learn/linear_model/__init__.py +15 -0
- maxframe/learn/linear_model/_base.py +163 -0
- maxframe/learn/linear_model/_lin_reg.py +175 -0
- maxframe/learn/metrics/__init__.py +25 -0
- maxframe/learn/metrics/_check_targets.py +95 -0
- maxframe/learn/metrics/_classification.py +1121 -0
- maxframe/learn/metrics/_regression.py +256 -0
- maxframe/learn/model_selection/__init__.py +15 -0
- maxframe/learn/model_selection/_split.py +451 -0
- maxframe/learn/model_selection/tests/__init__.py +13 -0
- maxframe/learn/model_selection/tests/test_split.py +156 -0
- maxframe/learn/preprocessing/__init__.py +16 -0
- maxframe/learn/preprocessing/_data/__init__.py +17 -0
- maxframe/learn/preprocessing/_data/min_max_scaler.py +390 -0
- maxframe/learn/preprocessing/_data/normalize.py +127 -0
- maxframe/learn/preprocessing/_data/standard_scaler.py +503 -0
- maxframe/learn/preprocessing/_data/utils.py +79 -0
- maxframe/learn/preprocessing/_label/__init__.py +16 -0
- maxframe/learn/preprocessing/_label/_label_binarizer.py +599 -0
- maxframe/learn/preprocessing/_label/_label_encoder.py +174 -0
- maxframe/learn/utils/__init__.py +4 -0
- maxframe/learn/utils/_encode.py +314 -0
- maxframe/learn/utils/checks.py +161 -0
- maxframe/learn/utils/core.py +33 -0
- maxframe/learn/utils/extmath.py +176 -0
- maxframe/learn/utils/multiclass.py +292 -0
- maxframe/learn/utils/shuffle.py +114 -0
- maxframe/learn/utils/sparsefuncs.py +87 -0
- maxframe/learn/utils/validation.py +775 -0
- maxframe/lib/__init__.py +0 -2
- maxframe/lib/compat.py +145 -0
- maxframe/lib/filesystem/_oss_lib/glob.py +1 -1
- maxframe/lib/mmh3.cp311-win_amd64.pyd +0 -0
- maxframe/lib/sparse/__init__.py +10 -15
- maxframe/lib/sparse/array.py +45 -33
- maxframe/lib/sparse/core.py +0 -2
- maxframe/lib/sparse/linalg.py +31 -0
- maxframe/lib/sparse/matrix.py +5 -2
- maxframe/lib/sparse/tests/__init__.py +0 -2
- maxframe/lib/sparse/tests/test_sparse.py +53 -53
- maxframe/lib/sparse/vector.py +0 -2
- maxframe/mixin.py +59 -2
- maxframe/opcodes.py +13 -5
- maxframe/protocol.py +67 -14
- maxframe/remote/core.py +16 -14
- maxframe/remote/run_script.py +6 -3
- maxframe/serialization/__init__.py +2 -0
- maxframe/serialization/core.cp311-win_amd64.pyd +0 -0
- maxframe/serialization/core.pxd +3 -0
- maxframe/serialization/core.pyi +3 -1
- maxframe/serialization/core.pyx +82 -4
- maxframe/serialization/pandas.py +5 -1
- maxframe/serialization/serializables/core.py +6 -5
- maxframe/serialization/serializables/field.py +2 -2
- maxframe/serialization/serializables/tests/test_field_type.py +3 -5
- maxframe/serialization/tests/test_serial.py +27 -0
- maxframe/session.py +4 -71
- maxframe/sperunner.py +165 -0
- maxframe/tensor/__init__.py +35 -2
- maxframe/tensor/arithmetic/__init__.py +2 -4
- maxframe/tensor/arithmetic/abs.py +0 -2
- maxframe/tensor/arithmetic/absolute.py +0 -2
- maxframe/tensor/arithmetic/add.py +34 -4
- maxframe/tensor/arithmetic/angle.py +0 -2
- maxframe/tensor/arithmetic/arccos.py +1 -4
- maxframe/tensor/arithmetic/arccosh.py +1 -3
- maxframe/tensor/arithmetic/arcsin.py +0 -2
- maxframe/tensor/arithmetic/arcsinh.py +0 -2
- maxframe/tensor/arithmetic/arctan.py +0 -2
- maxframe/tensor/arithmetic/arctan2.py +0 -2
- maxframe/tensor/arithmetic/arctanh.py +0 -2
- maxframe/tensor/arithmetic/around.py +0 -2
- maxframe/tensor/arithmetic/bitand.py +0 -2
- maxframe/tensor/arithmetic/bitor.py +1 -3
- maxframe/tensor/arithmetic/bitxor.py +1 -3
- maxframe/tensor/arithmetic/cbrt.py +0 -2
- maxframe/tensor/arithmetic/ceil.py +0 -2
- maxframe/tensor/arithmetic/clip.py +13 -13
- maxframe/tensor/arithmetic/conj.py +0 -2
- maxframe/tensor/arithmetic/copysign.py +0 -2
- maxframe/tensor/arithmetic/core.py +47 -39
- maxframe/tensor/arithmetic/cos.py +1 -3
- maxframe/tensor/arithmetic/cosh.py +0 -2
- maxframe/tensor/arithmetic/deg2rad.py +0 -2
- maxframe/tensor/arithmetic/degrees.py +0 -2
- maxframe/tensor/arithmetic/divide.py +0 -2
- maxframe/tensor/arithmetic/equal.py +0 -2
- maxframe/tensor/arithmetic/exp.py +1 -3
- maxframe/tensor/arithmetic/exp2.py +0 -2
- maxframe/tensor/arithmetic/expm1.py +0 -2
- maxframe/tensor/arithmetic/fabs.py +0 -2
- maxframe/tensor/arithmetic/fix.py +0 -2
- maxframe/tensor/arithmetic/float_power.py +0 -2
- maxframe/tensor/arithmetic/floor.py +0 -2
- maxframe/tensor/arithmetic/floordiv.py +0 -2
- maxframe/tensor/arithmetic/fmax.py +0 -2
- maxframe/tensor/arithmetic/fmin.py +0 -2
- maxframe/tensor/arithmetic/fmod.py +0 -2
- maxframe/tensor/arithmetic/frexp.py +6 -2
- maxframe/tensor/arithmetic/greater.py +0 -2
- maxframe/tensor/arithmetic/greater_equal.py +0 -2
- maxframe/tensor/arithmetic/hypot.py +0 -2
- maxframe/tensor/arithmetic/i0.py +1 -3
- maxframe/tensor/arithmetic/imag.py +0 -2
- maxframe/tensor/arithmetic/invert.py +1 -3
- maxframe/tensor/arithmetic/isclose.py +0 -2
- maxframe/tensor/arithmetic/iscomplex.py +0 -2
- maxframe/tensor/arithmetic/isfinite.py +1 -3
- maxframe/tensor/arithmetic/isinf.py +0 -2
- maxframe/tensor/arithmetic/isnan.py +0 -2
- maxframe/tensor/arithmetic/isreal.py +0 -2
- maxframe/tensor/arithmetic/ldexp.py +0 -2
- maxframe/tensor/arithmetic/less.py +0 -2
- maxframe/tensor/arithmetic/less_equal.py +0 -2
- maxframe/tensor/arithmetic/log.py +1 -3
- maxframe/tensor/arithmetic/log10.py +1 -3
- maxframe/tensor/arithmetic/log1p.py +1 -3
- maxframe/tensor/arithmetic/log2.py +1 -3
- maxframe/tensor/arithmetic/logaddexp.py +0 -2
- maxframe/tensor/arithmetic/logaddexp2.py +0 -2
- maxframe/tensor/arithmetic/logical_and.py +0 -2
- maxframe/tensor/arithmetic/logical_not.py +1 -3
- maxframe/tensor/arithmetic/logical_or.py +0 -2
- maxframe/tensor/arithmetic/logical_xor.py +0 -2
- maxframe/tensor/arithmetic/lshift.py +0 -2
- maxframe/tensor/arithmetic/maximum.py +0 -2
- maxframe/tensor/arithmetic/minimum.py +0 -2
- maxframe/tensor/arithmetic/mod.py +0 -2
- maxframe/tensor/arithmetic/modf.py +6 -2
- maxframe/tensor/arithmetic/multiply.py +37 -4
- maxframe/tensor/arithmetic/nan_to_num.py +0 -2
- maxframe/tensor/arithmetic/negative.py +0 -2
- maxframe/tensor/arithmetic/nextafter.py +0 -2
- maxframe/tensor/arithmetic/not_equal.py +0 -2
- maxframe/tensor/arithmetic/positive.py +0 -2
- maxframe/tensor/arithmetic/power.py +0 -2
- maxframe/tensor/arithmetic/rad2deg.py +0 -2
- maxframe/tensor/arithmetic/radians.py +0 -2
- maxframe/tensor/arithmetic/real.py +0 -2
- maxframe/tensor/arithmetic/reciprocal.py +5 -3
- maxframe/tensor/arithmetic/rint.py +1 -3
- maxframe/tensor/arithmetic/rshift.py +0 -2
- maxframe/tensor/arithmetic/setimag.py +0 -2
- maxframe/tensor/arithmetic/setreal.py +0 -2
- maxframe/tensor/arithmetic/sign.py +0 -2
- maxframe/tensor/arithmetic/signbit.py +0 -2
- maxframe/tensor/arithmetic/sin.py +0 -2
- maxframe/tensor/arithmetic/sinc.py +1 -3
- maxframe/tensor/arithmetic/sinh.py +0 -2
- maxframe/tensor/arithmetic/spacing.py +0 -2
- maxframe/tensor/arithmetic/sqrt.py +0 -2
- maxframe/tensor/arithmetic/square.py +0 -2
- maxframe/tensor/arithmetic/subtract.py +4 -2
- maxframe/tensor/arithmetic/tan.py +0 -2
- maxframe/tensor/arithmetic/tanh.py +0 -2
- maxframe/tensor/arithmetic/tests/__init__.py +0 -2
- maxframe/tensor/arithmetic/tests/test_arithmetic.py +43 -9
- maxframe/tensor/arithmetic/truediv.py +0 -2
- maxframe/tensor/arithmetic/trunc.py +0 -2
- maxframe/tensor/arithmetic/utils.py +32 -6
- maxframe/tensor/array_utils.py +3 -25
- maxframe/tensor/core.py +6 -6
- maxframe/tensor/datasource/__init__.py +10 -2
- maxframe/tensor/datasource/arange.py +0 -2
- maxframe/tensor/datasource/array.py +3 -22
- maxframe/tensor/datasource/core.py +15 -10
- maxframe/tensor/datasource/diag.py +140 -0
- maxframe/tensor/datasource/diagflat.py +69 -0
- maxframe/tensor/datasource/empty.py +0 -2
- maxframe/tensor/datasource/eye.py +95 -0
- maxframe/tensor/datasource/from_dataframe.py +0 -2
- maxframe/tensor/datasource/from_dense.py +0 -17
- maxframe/tensor/datasource/from_sparse.py +0 -2
- maxframe/tensor/datasource/full.py +0 -2
- maxframe/tensor/datasource/identity.py +54 -0
- maxframe/tensor/datasource/indices.py +115 -0
- maxframe/tensor/datasource/linspace.py +140 -0
- maxframe/tensor/datasource/meshgrid.py +135 -0
- maxframe/tensor/datasource/ones.py +8 -3
- maxframe/tensor/datasource/tests/test_datasource.py +32 -1
- maxframe/tensor/datasource/tri_array.py +107 -0
- maxframe/tensor/datasource/zeros.py +7 -3
- maxframe/tensor/extensions/__init__.py +31 -0
- maxframe/tensor/extensions/accessor.py +25 -0
- maxframe/tensor/extensions/apply_chunk.py +137 -0
- maxframe/tensor/indexing/__init__.py +1 -1
- maxframe/tensor/indexing/choose.py +8 -6
- maxframe/tensor/indexing/compress.py +0 -2
- maxframe/tensor/indexing/extract.py +0 -2
- maxframe/tensor/indexing/fill_diagonal.py +9 -6
- maxframe/tensor/indexing/flatnonzero.py +1 -3
- maxframe/tensor/indexing/getitem.py +10 -43
- maxframe/tensor/indexing/nonzero.py +2 -4
- maxframe/tensor/indexing/setitem.py +19 -9
- maxframe/tensor/indexing/slice.py +6 -3
- maxframe/tensor/indexing/take.py +0 -2
- maxframe/tensor/indexing/tests/__init__.py +0 -2
- maxframe/tensor/indexing/tests/test_indexing.py +0 -2
- maxframe/tensor/indexing/unravel_index.py +6 -6
- maxframe/tensor/lib/__init__.py +16 -0
- maxframe/tensor/lib/index_tricks.py +404 -0
- maxframe/tensor/linalg/__init__.py +36 -0
- maxframe/tensor/linalg/dot.py +145 -0
- maxframe/tensor/linalg/inner.py +36 -0
- maxframe/tensor/linalg/inv.py +83 -0
- maxframe/tensor/linalg/lu.py +115 -0
- maxframe/tensor/linalg/matmul.py +225 -0
- maxframe/tensor/linalg/qr.py +124 -0
- maxframe/tensor/linalg/solve_triangular.py +103 -0
- maxframe/tensor/linalg/svd.py +167 -0
- maxframe/tensor/linalg/tensordot.py +213 -0
- maxframe/tensor/linalg/vdot.py +73 -0
- maxframe/tensor/merge/__init__.py +4 -0
- maxframe/tensor/merge/append.py +74 -0
- maxframe/tensor/merge/column_stack.py +63 -0
- maxframe/tensor/merge/concatenate.py +3 -2
- maxframe/tensor/merge/dstack.py +71 -0
- maxframe/tensor/merge/hstack.py +70 -0
- maxframe/tensor/merge/stack.py +0 -2
- maxframe/tensor/merge/tests/test_merge.py +0 -2
- maxframe/tensor/misc/__init__.py +18 -5
- maxframe/tensor/misc/astype.py +10 -8
- maxframe/tensor/misc/broadcast_to.py +1 -1
- maxframe/tensor/misc/copy.py +64 -0
- maxframe/tensor/misc/diff.py +115 -0
- maxframe/tensor/misc/flatten.py +63 -0
- maxframe/tensor/misc/in1d.py +94 -0
- maxframe/tensor/misc/isin.py +130 -0
- maxframe/tensor/misc/ndim.py +53 -0
- maxframe/tensor/misc/ravel.py +0 -2
- maxframe/tensor/misc/repeat.py +129 -0
- maxframe/tensor/misc/searchsorted.py +147 -0
- maxframe/tensor/misc/setdiff1d.py +58 -0
- maxframe/tensor/misc/squeeze.py +117 -0
- maxframe/tensor/misc/swapaxes.py +113 -0
- maxframe/tensor/misc/tests/test_misc.py +0 -2
- maxframe/tensor/misc/transpose.py +8 -4
- maxframe/tensor/misc/trapezoid.py +123 -0
- maxframe/tensor/misc/unique.py +0 -1
- maxframe/tensor/misc/where.py +10 -8
- maxframe/tensor/operators.py +0 -34
- maxframe/tensor/random/__init__.py +3 -5
- maxframe/tensor/random/binomial.py +0 -2
- maxframe/tensor/random/bytes.py +0 -2
- maxframe/tensor/random/chisquare.py +0 -2
- maxframe/tensor/random/choice.py +9 -8
- maxframe/tensor/random/core.py +20 -5
- maxframe/tensor/random/dirichlet.py +0 -2
- maxframe/tensor/random/exponential.py +0 -2
- maxframe/tensor/random/f.py +2 -4
- maxframe/tensor/random/gamma.py +0 -2
- maxframe/tensor/random/geometric.py +0 -2
- maxframe/tensor/random/gumbel.py +0 -2
- maxframe/tensor/random/hypergeometric.py +0 -2
- maxframe/tensor/random/laplace.py +2 -4
- maxframe/tensor/random/logistic.py +0 -2
- maxframe/tensor/random/lognormal.py +0 -2
- maxframe/tensor/random/logseries.py +0 -2
- maxframe/tensor/random/multinomial.py +0 -2
- maxframe/tensor/random/multivariate_normal.py +0 -2
- maxframe/tensor/random/negative_binomial.py +0 -2
- maxframe/tensor/random/noncentral_chisquare.py +0 -2
- maxframe/tensor/random/noncentral_f.py +1 -3
- maxframe/tensor/random/normal.py +0 -2
- maxframe/tensor/random/pareto.py +0 -2
- maxframe/tensor/random/permutation.py +6 -3
- maxframe/tensor/random/poisson.py +0 -2
- maxframe/tensor/random/power.py +0 -2
- maxframe/tensor/random/rand.py +0 -2
- maxframe/tensor/random/randint.py +0 -2
- maxframe/tensor/random/randn.py +0 -2
- maxframe/tensor/random/random_integers.py +0 -2
- maxframe/tensor/random/random_sample.py +0 -2
- maxframe/tensor/random/rayleigh.py +0 -2
- maxframe/tensor/random/standard_cauchy.py +0 -2
- maxframe/tensor/random/standard_exponential.py +0 -2
- maxframe/tensor/random/standard_gamma.py +0 -2
- maxframe/tensor/random/standard_normal.py +0 -2
- maxframe/tensor/random/standard_t.py +0 -2
- maxframe/tensor/random/tests/__init__.py +0 -2
- maxframe/tensor/random/tests/test_random.py +0 -2
- maxframe/tensor/random/triangular.py +0 -2
- maxframe/tensor/random/uniform.py +0 -2
- maxframe/tensor/random/vonmises.py +0 -2
- maxframe/tensor/random/wald.py +0 -2
- maxframe/tensor/random/weibull.py +0 -2
- maxframe/tensor/random/zipf.py +0 -2
- maxframe/tensor/reduction/__init__.py +0 -2
- maxframe/tensor/reduction/all.py +0 -2
- maxframe/tensor/reduction/allclose.py +0 -2
- maxframe/tensor/reduction/any.py +0 -2
- maxframe/tensor/reduction/argmax.py +1 -3
- maxframe/tensor/reduction/argmin.py +1 -3
- maxframe/tensor/reduction/array_equal.py +0 -2
- maxframe/tensor/reduction/core.py +0 -2
- maxframe/tensor/reduction/count_nonzero.py +0 -2
- maxframe/tensor/reduction/cumprod.py +0 -2
- maxframe/tensor/reduction/cumsum.py +0 -2
- maxframe/tensor/reduction/max.py +0 -2
- maxframe/tensor/reduction/mean.py +0 -2
- maxframe/tensor/reduction/min.py +0 -2
- maxframe/tensor/reduction/nanargmax.py +0 -2
- maxframe/tensor/reduction/nanargmin.py +0 -2
- maxframe/tensor/reduction/nancumprod.py +0 -2
- maxframe/tensor/reduction/nancumsum.py +0 -2
- maxframe/tensor/reduction/nanmax.py +0 -2
- maxframe/tensor/reduction/nanmean.py +0 -2
- maxframe/tensor/reduction/nanmin.py +0 -2
- maxframe/tensor/reduction/nanprod.py +0 -2
- maxframe/tensor/reduction/nanstd.py +0 -2
- maxframe/tensor/reduction/nansum.py +0 -2
- maxframe/tensor/reduction/nanvar.py +0 -2
- maxframe/tensor/reduction/prod.py +0 -2
- maxframe/tensor/reduction/std.py +0 -2
- maxframe/tensor/reduction/sum.py +0 -2
- maxframe/tensor/reduction/tests/test_reduction.py +1 -4
- maxframe/tensor/reduction/var.py +0 -2
- maxframe/tensor/reshape/__init__.py +0 -2
- maxframe/tensor/reshape/reshape.py +6 -5
- maxframe/tensor/reshape/tests/__init__.py +0 -2
- maxframe/tensor/reshape/tests/test_reshape.py +0 -2
- maxframe/tensor/sort/__init__.py +16 -0
- maxframe/tensor/sort/argsort.py +150 -0
- maxframe/tensor/sort/sort.py +295 -0
- maxframe/tensor/special/__init__.py +37 -0
- maxframe/tensor/special/core.py +38 -0
- maxframe/tensor/special/misc.py +142 -0
- maxframe/tensor/special/statistical.py +56 -0
- maxframe/tensor/statistics/__init__.py +5 -0
- maxframe/tensor/statistics/average.py +143 -0
- maxframe/tensor/statistics/bincount.py +133 -0
- maxframe/tensor/statistics/quantile.py +10 -8
- maxframe/tensor/ufunc/__init__.py +0 -2
- maxframe/tensor/ufunc/ufunc.py +0 -2
- maxframe/tensor/utils.py +21 -3
- maxframe/tests/test_protocol.py +3 -3
- maxframe/tests/test_utils.py +210 -1
- maxframe/tests/utils.py +59 -1
- maxframe/udf.py +76 -6
- maxframe/utils.py +418 -17
- {maxframe-1.3.1.dist-info → maxframe-2.0.0.dist-info}/METADATA +4 -1
- maxframe-2.0.0.dist-info/RECORD +939 -0
- {maxframe-1.3.1.dist-info → maxframe-2.0.0.dist-info}/WHEEL +1 -1
- maxframe_client/clients/framedriver.py +19 -3
- maxframe_client/fetcher.py +113 -6
- maxframe_client/session/odps.py +173 -38
- maxframe_client/session/task.py +3 -1
- maxframe_client/tests/test_session.py +41 -5
- maxframe-1.3.1.dist-info/RECORD +0 -705
- {maxframe-1.3.1.dist-info → maxframe-2.0.0.dist-info}/top_level.txt +0 -0
maxframe/dataframe/utils.py
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
+
import dataclasses
|
|
15
16
|
import functools
|
|
16
17
|
import inspect
|
|
17
18
|
import itertools
|
|
@@ -20,26 +21,30 @@ import operator
|
|
|
20
21
|
import sys
|
|
21
22
|
from contextlib import contextmanager
|
|
22
23
|
from numbers import Integral
|
|
23
|
-
from typing import TYPE_CHECKING, Any, Callable, List
|
|
24
|
+
from typing import TYPE_CHECKING, Any, Callable, List, Optional
|
|
24
25
|
|
|
25
26
|
import numpy as np
|
|
26
27
|
import pandas as pd
|
|
27
|
-
from pandas.api.extensions import ExtensionDtype
|
|
28
28
|
from pandas.api.types import is_string_dtype
|
|
29
29
|
from pandas.core.dtypes.inference import is_dict_like, is_list_like
|
|
30
30
|
|
|
31
|
-
from ..core import Entity, ExecutableTuple
|
|
31
|
+
from ..core import Entity, ExecutableTuple, OutputType, get_output_types
|
|
32
32
|
from ..lib.mmh3 import hash as mmh_hash
|
|
33
33
|
from ..udf import MarkedFunction
|
|
34
34
|
from ..utils import (
|
|
35
35
|
ModulePlaceholder,
|
|
36
36
|
is_full_slice,
|
|
37
37
|
lazy_import,
|
|
38
|
-
|
|
38
|
+
make_dtype,
|
|
39
|
+
make_dtypes,
|
|
40
|
+
quiet_stdio,
|
|
39
41
|
sbytes,
|
|
40
42
|
tokenize,
|
|
41
43
|
)
|
|
42
44
|
|
|
45
|
+
if TYPE_CHECKING:
|
|
46
|
+
from .core import IndexValue
|
|
47
|
+
|
|
43
48
|
try:
|
|
44
49
|
import pyarrow as pa
|
|
45
50
|
except ImportError: # pragma: no cover
|
|
@@ -49,15 +54,6 @@ if TYPE_CHECKING:
|
|
|
49
54
|
from .operators import DataFrameOperator
|
|
50
55
|
|
|
51
56
|
cudf = lazy_import("cudf", rename="cudf")
|
|
52
|
-
vineyard = lazy_import("vineyard")
|
|
53
|
-
try:
|
|
54
|
-
import ray
|
|
55
|
-
|
|
56
|
-
ray_release_version = parse_version(ray.__version__).release
|
|
57
|
-
ray_deprecate_ml_dataset = ray_release_version[:2] >= (2, 0)
|
|
58
|
-
except ImportError:
|
|
59
|
-
ray_release_version = None
|
|
60
|
-
ray_deprecate_ml_dataset = None
|
|
61
57
|
logger = logging.getLogger(__name__)
|
|
62
58
|
|
|
63
59
|
try:
|
|
@@ -603,6 +599,7 @@ def build_series(
|
|
|
603
599
|
else:
|
|
604
600
|
series_index = index[:0] if index is not None else None
|
|
605
601
|
|
|
602
|
+
name = name or getattr(series_obj, "name", None)
|
|
606
603
|
for size, fill_value in zip(sizes, fill_values):
|
|
607
604
|
empty_series = build_empty_series(dtype, name=name, index=series_index)
|
|
608
605
|
record = _generate_value(dtype, fill_value)
|
|
@@ -1039,20 +1036,6 @@ def to_arrow_dtypes(dtypes, test_df=None):
|
|
|
1039
1036
|
return new_dtypes
|
|
1040
1037
|
|
|
1041
1038
|
|
|
1042
|
-
def make_dtype(dtype):
|
|
1043
|
-
if isinstance(dtype, (np.dtype, ExtensionDtype)):
|
|
1044
|
-
return dtype
|
|
1045
|
-
return np.dtype(dtype) if dtype is not None else None
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
def make_dtypes(dtypes):
|
|
1049
|
-
if dtypes is None:
|
|
1050
|
-
return None
|
|
1051
|
-
if not isinstance(dtypes, pd.Series):
|
|
1052
|
-
dtypes = pd.Series(dtypes)
|
|
1053
|
-
return dtypes.apply(make_dtype)
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
1039
|
def is_dataframe(x):
|
|
1057
1040
|
if cudf is not None: # pragma: no cover
|
|
1058
1041
|
if isinstance(x, cudf.DataFrame):
|
|
@@ -1314,6 +1297,8 @@ def pack_func_args(df, funcs, *args, args_bind_position=1, **kwargs) -> Any:
|
|
|
1314
1297
|
AttributeError :
|
|
1315
1298
|
If there's a string but no corresponding function is found.
|
|
1316
1299
|
"""
|
|
1300
|
+
from ..udf import MarkedFunction
|
|
1301
|
+
|
|
1317
1302
|
if not args and not kwargs:
|
|
1318
1303
|
return funcs
|
|
1319
1304
|
|
|
@@ -1325,8 +1310,6 @@ def pack_func_args(df, funcs, *args, args_bind_position=1, **kwargs) -> Any:
|
|
|
1325
1310
|
|
|
1326
1311
|
f = get_callable_by_name(df, funcs) if isinstance(funcs, str) else funcs
|
|
1327
1312
|
|
|
1328
|
-
from ..udf import MarkedFunction
|
|
1329
|
-
|
|
1330
1313
|
if isinstance(f, MarkedFunction):
|
|
1331
1314
|
# for marked function, pack the inner function, and reset as mark function
|
|
1332
1315
|
packed_func = f.copy()
|
|
@@ -1351,7 +1334,7 @@ def get_callable_by_name(df: Any, func_name: str) -> Callable:
|
|
|
1351
1334
|
|
|
1352
1335
|
Parameters
|
|
1353
1336
|
----------
|
|
1354
|
-
df:
|
|
1337
|
+
df: pandas.Series or pandas.Dataframe
|
|
1355
1338
|
The receiver of the func name.
|
|
1356
1339
|
func_name : str
|
|
1357
1340
|
The func name.
|
|
@@ -1381,10 +1364,215 @@ def get_callable_by_name(df: Any, func_name: str) -> Callable:
|
|
|
1381
1364
|
)
|
|
1382
1365
|
|
|
1383
1366
|
|
|
1367
|
+
@dataclasses.dataclass
|
|
1368
|
+
class InferredDataFrameMeta:
|
|
1369
|
+
output_type: OutputType
|
|
1370
|
+
dtypes: Optional[pd.Series] = None
|
|
1371
|
+
dtype: Optional[Any] = None
|
|
1372
|
+
name: Optional[str] = None
|
|
1373
|
+
index_value: Optional["IndexValue"] = None
|
|
1374
|
+
maybe_agg: bool = False
|
|
1375
|
+
elementwise: bool = False
|
|
1376
|
+
|
|
1377
|
+
def check_absence(self, *args: str) -> None:
|
|
1378
|
+
args_set = set(args)
|
|
1379
|
+
if self.output_type == OutputType.dataframe:
|
|
1380
|
+
args_set.difference_update(["dtype", "name"])
|
|
1381
|
+
else:
|
|
1382
|
+
args_set.difference_update(["dtypes"])
|
|
1383
|
+
absent_args = [arg for arg in sorted(args_set) if getattr(self, arg) is None]
|
|
1384
|
+
if absent_args:
|
|
1385
|
+
raise TypeError(
|
|
1386
|
+
f"Cannot determine {', '.join(absent_args)} by calculating "
|
|
1387
|
+
"with mock data, please specify it as arguments"
|
|
1388
|
+
)
|
|
1389
|
+
|
|
1390
|
+
|
|
1391
|
+
def _get_groupby_input_df(groupby):
|
|
1392
|
+
in_df = groupby
|
|
1393
|
+
while in_df.op.output_types[0] not in (OutputType.dataframe, OutputType.series):
|
|
1394
|
+
in_df = in_df.inputs[0]
|
|
1395
|
+
return in_df
|
|
1396
|
+
|
|
1397
|
+
|
|
1398
|
+
def infer_dataframe_return_value(
|
|
1399
|
+
df_obj,
|
|
1400
|
+
func,
|
|
1401
|
+
output_type=None,
|
|
1402
|
+
dtypes=None,
|
|
1403
|
+
dtype=None,
|
|
1404
|
+
name=None,
|
|
1405
|
+
index=None,
|
|
1406
|
+
inherit_index=False,
|
|
1407
|
+
build_kw=None,
|
|
1408
|
+
elementwise=None,
|
|
1409
|
+
) -> InferredDataFrameMeta:
|
|
1410
|
+
from .core import GROUPBY_TYPE
|
|
1411
|
+
|
|
1412
|
+
if elementwise is None:
|
|
1413
|
+
unwrapped_func = func
|
|
1414
|
+
if isinstance(unwrapped_func, MarkedFunction):
|
|
1415
|
+
unwrapped_func = unwrapped_func.func
|
|
1416
|
+
while True:
|
|
1417
|
+
if isinstance(unwrapped_func, functools.partial):
|
|
1418
|
+
unwrapped_func = unwrapped_func.func
|
|
1419
|
+
elif hasattr(unwrapped_func, "__wrapped__"):
|
|
1420
|
+
unwrapped_func = unwrapped_func.__wrapped__
|
|
1421
|
+
else:
|
|
1422
|
+
break
|
|
1423
|
+
elementwise = isinstance(unwrapped_func, np.ufunc)
|
|
1424
|
+
|
|
1425
|
+
ret_index_value = None
|
|
1426
|
+
if output_type is not None and (dtypes is not None or dtype is not None):
|
|
1427
|
+
if inherit_index:
|
|
1428
|
+
ret_index_value = df_obj.index_value
|
|
1429
|
+
elif index is not None:
|
|
1430
|
+
ret_index_value = parse_index(index)
|
|
1431
|
+
|
|
1432
|
+
if ret_index_value is not None:
|
|
1433
|
+
return InferredDataFrameMeta(
|
|
1434
|
+
output_type,
|
|
1435
|
+
dtypes,
|
|
1436
|
+
dtype,
|
|
1437
|
+
name,
|
|
1438
|
+
ret_index_value,
|
|
1439
|
+
elementwise=elementwise or False,
|
|
1440
|
+
)
|
|
1441
|
+
|
|
1442
|
+
ret_output_type = ret_dtypes = None
|
|
1443
|
+
maybe_agg = False
|
|
1444
|
+
build_kw = build_kw or {}
|
|
1445
|
+
obj_key = df_obj.key
|
|
1446
|
+
|
|
1447
|
+
if elementwise:
|
|
1448
|
+
inherit_index = True
|
|
1449
|
+
(ret_output_type,) = get_output_types(df_obj)
|
|
1450
|
+
if index is not None:
|
|
1451
|
+
ret_index_value = parse_index(index)
|
|
1452
|
+
|
|
1453
|
+
if isinstance(df_obj, GROUPBY_TYPE):
|
|
1454
|
+
is_groupby = True
|
|
1455
|
+
empty_df_obj = df_obj.op.build_mock_groupby(**build_kw)
|
|
1456
|
+
else:
|
|
1457
|
+
is_groupby = False
|
|
1458
|
+
empty_df_obj = (
|
|
1459
|
+
build_df(df_obj, **build_kw)
|
|
1460
|
+
if df_obj.ndim == 2
|
|
1461
|
+
else build_series(df_obj, **build_kw)
|
|
1462
|
+
)
|
|
1463
|
+
try:
|
|
1464
|
+
with np.errstate(all="ignore"), quiet_stdio():
|
|
1465
|
+
infer_df_obj = func(empty_df_obj)
|
|
1466
|
+
|
|
1467
|
+
if ret_index_value is None:
|
|
1468
|
+
if (
|
|
1469
|
+
infer_df_obj is None
|
|
1470
|
+
or not hasattr(infer_df_obj, "index")
|
|
1471
|
+
or infer_df_obj.index is None
|
|
1472
|
+
):
|
|
1473
|
+
ret_index_value = parse_index(pd.RangeIndex(-1))
|
|
1474
|
+
elif (
|
|
1475
|
+
infer_df_obj.index is getattr(empty_df_obj, "index", None)
|
|
1476
|
+
or inherit_index
|
|
1477
|
+
):
|
|
1478
|
+
ret_index_value = df_obj.index_value
|
|
1479
|
+
else:
|
|
1480
|
+
ret_index_value = parse_index(infer_df_obj.index, obj_key, func)
|
|
1481
|
+
|
|
1482
|
+
if isinstance(infer_df_obj, pd.DataFrame):
|
|
1483
|
+
if output_type is not None and output_type != OutputType.dataframe:
|
|
1484
|
+
raise TypeError(
|
|
1485
|
+
f'Cannot infer output_type as "series", '
|
|
1486
|
+
f'please specify `output_type` as "dataframe"'
|
|
1487
|
+
)
|
|
1488
|
+
ret_output_type = ret_output_type or OutputType.dataframe
|
|
1489
|
+
ret_dtypes = ret_dtypes or infer_df_obj.dtypes
|
|
1490
|
+
else:
|
|
1491
|
+
if output_type is not None and output_type == OutputType.dataframe:
|
|
1492
|
+
raise TypeError(
|
|
1493
|
+
f'Cannot infer output_type as "dataframe", '
|
|
1494
|
+
f'please specify `output_type` as "series"'
|
|
1495
|
+
)
|
|
1496
|
+
ret_output_type = ret_output_type or OutputType.series
|
|
1497
|
+
name = name or getattr(infer_df_obj, "name", None)
|
|
1498
|
+
dtype = dtype or infer_df_obj.dtype
|
|
1499
|
+
|
|
1500
|
+
if is_groupby and len(infer_df_obj) <= 2:
|
|
1501
|
+
# we create mock df with 4 rows, 2 groups
|
|
1502
|
+
# if return df has 2 rows, we assume that
|
|
1503
|
+
# it's an aggregation operation
|
|
1504
|
+
maybe_agg = True
|
|
1505
|
+
|
|
1506
|
+
return InferredDataFrameMeta(
|
|
1507
|
+
ret_output_type,
|
|
1508
|
+
make_dtypes(ret_dtypes),
|
|
1509
|
+
make_dtype(dtype),
|
|
1510
|
+
name,
|
|
1511
|
+
ret_index_value,
|
|
1512
|
+
maybe_agg,
|
|
1513
|
+
elementwise=elementwise,
|
|
1514
|
+
)
|
|
1515
|
+
except: # noqa: E722 # nosec
|
|
1516
|
+
logger.info(
|
|
1517
|
+
"Exception raised while inferring meta of function result", exc_info=True
|
|
1518
|
+
)
|
|
1519
|
+
return InferredDataFrameMeta(
|
|
1520
|
+
output_type,
|
|
1521
|
+
make_dtypes(dtypes),
|
|
1522
|
+
make_dtype(dtype),
|
|
1523
|
+
name,
|
|
1524
|
+
ret_index_value,
|
|
1525
|
+
maybe_agg,
|
|
1526
|
+
elementwise=elementwise,
|
|
1527
|
+
)
|
|
1528
|
+
|
|
1529
|
+
|
|
1384
1530
|
def copy_func_scheduling_hints(func, op: "DataFrameOperator") -> None:
|
|
1531
|
+
from ..config import options
|
|
1532
|
+
|
|
1385
1533
|
if not isinstance(func, MarkedFunction):
|
|
1386
1534
|
return
|
|
1387
1535
|
if func.expect_engine:
|
|
1388
1536
|
op.expect_engine = func.expect_engine
|
|
1537
|
+
|
|
1538
|
+
expect_resources = func.expect_resources or {}
|
|
1539
|
+
default_function_running_options = options.function.default_running_options or {}
|
|
1540
|
+
|
|
1541
|
+
for key, value in default_function_running_options.items():
|
|
1542
|
+
if key not in expect_resources or expect_resources.get(key) is None:
|
|
1543
|
+
expect_resources[key] = value
|
|
1544
|
+
|
|
1389
1545
|
if func.expect_resources:
|
|
1390
|
-
op.expect_resources =
|
|
1546
|
+
op.expect_resources = expect_resources
|
|
1547
|
+
|
|
1548
|
+
|
|
1549
|
+
def make_column_list(col, dtypes_or_columns, level=None):
|
|
1550
|
+
"""Returns [col] if col is a column in dtypes"""
|
|
1551
|
+
try:
|
|
1552
|
+
if isinstance(dtypes_or_columns, pd.Series):
|
|
1553
|
+
idx = dtypes_or_columns.index
|
|
1554
|
+
else:
|
|
1555
|
+
idx = dtypes_or_columns
|
|
1556
|
+
|
|
1557
|
+
if level is None:
|
|
1558
|
+
if col in idx:
|
|
1559
|
+
return [col]
|
|
1560
|
+
elif isinstance(col, int):
|
|
1561
|
+
col = [col]
|
|
1562
|
+
if all(c in idx for c in col):
|
|
1563
|
+
return col
|
|
1564
|
+
if all(isinstance(c, int) for c in col):
|
|
1565
|
+
return [idx[c] for c in col]
|
|
1566
|
+
return col
|
|
1567
|
+
else:
|
|
1568
|
+
level_idx = idx.get_level_values(level)
|
|
1569
|
+
if isinstance(col, list):
|
|
1570
|
+
cols = col
|
|
1571
|
+
else:
|
|
1572
|
+
cols = [col]
|
|
1573
|
+
mask = level_idx.isin(cols)
|
|
1574
|
+
if not mask.any():
|
|
1575
|
+
mask = col
|
|
1576
|
+
return idx[mask]
|
|
1577
|
+
except (IndexError, TypeError, ValueError):
|
|
1578
|
+
return col
|
|
@@ -13,10 +13,12 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
from collections import OrderedDict
|
|
16
|
+
from typing import List
|
|
16
17
|
|
|
17
18
|
import pandas as pd
|
|
18
19
|
|
|
19
20
|
from ... import opcodes
|
|
21
|
+
from ...core import EntityData
|
|
20
22
|
from ...serialization.serializables import (
|
|
21
23
|
AnyField,
|
|
22
24
|
BoolField,
|
|
@@ -55,10 +57,11 @@ class DataFrameRollingAgg(DataFrameOperator, DataFrameOperatorMixin):
|
|
|
55
57
|
def __init__(self, output_types=None, **kw):
|
|
56
58
|
super().__init__(_output_types=output_types, **kw)
|
|
57
59
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
@classmethod
|
|
61
|
+
def _set_inputs(cls, op: "DataFrameRollingAgg", inputs: List[EntityData]):
|
|
62
|
+
super()._set_inputs(op, inputs)
|
|
63
|
+
input_iter = iter(op._inputs)
|
|
64
|
+
op.input = next(input_iter)
|
|
62
65
|
|
|
63
66
|
def __call__(self, rolling):
|
|
64
67
|
inp = rolling.input
|
maxframe/env.py
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
MAXFRAME_NAMESPACE = "MAXFRAME_NAMESPACE"
|
|
17
17
|
|
|
18
18
|
# Maxframe Service common envs
|
|
19
|
+
MAXFRAME_HTTP_PORT_FILE = "MAXFRAME_PROXY_PORT_FILE"
|
|
19
20
|
MAXFRAME_SERVICE_PORT = "MAXFRAME_SERVICE_PORT"
|
|
20
21
|
MAXFRAME_SERVICE_PORT_RETRIES = "MAXFRAME_SERVICE_PORT_RETRIES"
|
|
21
22
|
MAXFRAME_SERVICE_LISTEN_ADDRESS = "MAXFRAME_SERVICE_LISTEN_ADDRESS"
|
maxframe/errors.py
CHANGED
|
@@ -29,6 +29,10 @@ class MaxFrameDeprecationError(MaxFrameUserError):
|
|
|
29
29
|
pass
|
|
30
30
|
|
|
31
31
|
|
|
32
|
+
class TileableNotExecutedError(MaxFrameError):
|
|
33
|
+
pass
|
|
34
|
+
|
|
35
|
+
|
|
32
36
|
class NoTaskServerResponseError(MaxFrameError):
|
|
33
37
|
pass
|
|
34
38
|
|
|
@@ -36,3 +40,8 @@ class NoTaskServerResponseError(MaxFrameError):
|
|
|
36
40
|
class SessionAlreadyClosedError(MaxFrameError):
|
|
37
41
|
def __init__(self, session_id: str):
|
|
38
42
|
super().__init__(f"Session {session_id} is already closed")
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class EngineUnavailableError(MaxFrameIntentionalError):
|
|
46
|
+
def __init__(self, engine_type: str):
|
|
47
|
+
super().__init__(f"Engine {engine_type} is not ready")
|
maxframe/extension.py
CHANGED
|
@@ -17,7 +17,7 @@ import itertools
|
|
|
17
17
|
from typing import TYPE_CHECKING, Iterable, Tuple, Type
|
|
18
18
|
|
|
19
19
|
if TYPE_CHECKING:
|
|
20
|
-
from
|
|
20
|
+
from .codegen import DAGCodeGenerator
|
|
21
21
|
|
|
22
22
|
try:
|
|
23
23
|
import maxframe_framedriver.runners
|
|
@@ -28,7 +28,7 @@ if TYPE_CHECKING:
|
|
|
28
28
|
class MaxFrameExtension(metaclass=abc.ABCMeta):
|
|
29
29
|
@classmethod
|
|
30
30
|
@abc.abstractmethod
|
|
31
|
-
def get_codegen(cls) -> Type["
|
|
31
|
+
def get_codegen(cls) -> Type["DAGCodeGenerator"]:
|
|
32
32
|
raise NotImplementedError
|
|
33
33
|
|
|
34
34
|
@classmethod
|
|
@@ -48,6 +48,17 @@ class MaxFrameExtension(metaclass=abc.ABCMeta):
|
|
|
48
48
|
"""
|
|
49
49
|
pass
|
|
50
50
|
|
|
51
|
+
@classmethod
|
|
52
|
+
async def create_session(cls, session_id: str) -> None:
|
|
53
|
+
"""
|
|
54
|
+
create the session
|
|
55
|
+
Parameters
|
|
56
|
+
----------
|
|
57
|
+
session_id : str
|
|
58
|
+
The session id.
|
|
59
|
+
"""
|
|
60
|
+
pass
|
|
61
|
+
|
|
51
62
|
@classmethod
|
|
52
63
|
async def reload_session(cls, session_id: str) -> None:
|
|
53
64
|
"""
|
maxframe/io/objects/core.py
CHANGED
|
@@ -16,74 +16,68 @@ from abc import ABCMeta, abstractmethod
|
|
|
16
16
|
from typing import Any, Dict, Type, Union
|
|
17
17
|
|
|
18
18
|
import msgpack
|
|
19
|
+
import numpy as np
|
|
19
20
|
|
|
20
|
-
from ...core import Entity, EntityData
|
|
21
|
-
from ...core.entity import ObjectData, TileableData
|
|
21
|
+
from ...core import Entity, EntityData, OutputType, get_output_types
|
|
22
22
|
from ...lib import wrapped_pickle as pickle
|
|
23
23
|
from ...typing_ import SlicesType, TileableType
|
|
24
|
-
from ...utils import
|
|
24
|
+
from ...utils import deserialize_serializable, serialize_serializable
|
|
25
25
|
from ..odpsio.volumeio import ODPSVolumeReader, ODPSVolumeWriter
|
|
26
26
|
|
|
27
27
|
_MetaType = Dict[str, Any]
|
|
28
28
|
|
|
29
29
|
_META_FILE_NAME = ".meta"
|
|
30
30
|
_META_PICKLED_KEYS_KEY = ".pickled_keys"
|
|
31
|
+
_META_SERIALIZED_VALUE_KEY = ".serialized_values"
|
|
31
32
|
|
|
32
33
|
|
|
33
|
-
_io_handler_dispatcher =
|
|
34
|
+
_io_handler_dispatcher = dict()
|
|
34
35
|
|
|
35
36
|
|
|
36
|
-
def register_object_io_handler(
|
|
37
|
+
def register_object_io_handler(out_type: OutputType):
|
|
37
38
|
def wrapper(handler_cls):
|
|
38
|
-
_io_handler_dispatcher
|
|
39
|
+
_io_handler_dispatcher[out_type] = handler_cls
|
|
39
40
|
return handler_cls
|
|
40
41
|
|
|
41
42
|
return wrapper
|
|
42
43
|
|
|
43
44
|
|
|
44
45
|
def get_object_io_handler(
|
|
45
|
-
tileable_data_type: Union[Entity, EntityData, Type[EntityData]]
|
|
46
|
+
tileable_data_type: Union[Entity, EntityData, Type[EntityData], OutputType]
|
|
46
47
|
) -> Type["AbstractObjectIOHandler"]:
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
output_type = tileable_data_type
|
|
49
|
+
if not isinstance(tileable_data_type, OutputType):
|
|
50
|
+
if hasattr(tileable_data_type, "output_type"):
|
|
51
|
+
output_type = tileable_data_type.output_type
|
|
52
|
+
else:
|
|
53
|
+
[output_type] = get_output_types(tileable_data_type)
|
|
54
|
+
return _io_handler_dispatcher[output_type]
|
|
52
55
|
|
|
53
56
|
|
|
54
57
|
class AbstractObjectIOHandler(metaclass=ABCMeta):
|
|
55
|
-
def _prepare_meta_for_serial(
|
|
56
|
-
|
|
57
|
-
) -> Dict[str, Any]:
|
|
58
|
-
to_pack = meta.copy()
|
|
59
|
-
pickled_keys = []
|
|
60
|
-
for k, v in meta.items():
|
|
61
|
-
if not isinstance(v, (str, bytes, int, float, bool)):
|
|
62
|
-
to_pack[k] = pickle.dumps(v)
|
|
63
|
-
pickled_keys.append(k)
|
|
64
|
-
to_pack[".pickled_keys"] = pickled_keys
|
|
65
|
-
return to_pack
|
|
66
|
-
|
|
67
|
-
def _prepare_meta_for_deserial(
|
|
68
|
-
self, tileable: TileableType, meta: Dict[str, Any]
|
|
69
|
-
) -> Dict[str, Any]:
|
|
70
|
-
pickled_keys = meta.pop(".pickled_keys", None) or []
|
|
71
|
-
for k in pickled_keys:
|
|
72
|
-
meta[k] = pickle.loads(meta[k])
|
|
73
|
-
return meta
|
|
58
|
+
def _prepare_meta_for_serial(self, tileable: TileableType) -> Dict[str, Any]:
|
|
59
|
+
return tileable.params.copy()
|
|
74
60
|
|
|
75
61
|
def read_object_meta(
|
|
76
62
|
self, reader: ODPSVolumeReader, tileable: TileableType
|
|
77
63
|
) -> Dict[str, Any]:
|
|
78
|
-
|
|
79
|
-
|
|
64
|
+
file_bin = reader.read_file(_META_FILE_NAME)
|
|
65
|
+
meta_obj = msgpack.loads(file_bin)
|
|
66
|
+
pickled_keys = meta_obj.pop(_META_PICKLED_KEYS_KEY, None) or []
|
|
67
|
+
serialized_values = meta_obj.pop(_META_SERIALIZED_VALUE_KEY, None) or {}
|
|
68
|
+
for k in pickled_keys:
|
|
69
|
+
try:
|
|
70
|
+
meta_obj[k] = deserialize_serializable(serialized_values[k])
|
|
71
|
+
except:
|
|
72
|
+
meta_obj[k] = pickle.loads(meta_obj[k])
|
|
73
|
+
return meta_obj
|
|
80
74
|
|
|
81
75
|
@abstractmethod
|
|
82
|
-
def
|
|
76
|
+
def read_object_body(
|
|
83
77
|
self,
|
|
84
78
|
reader: ODPSVolumeReader,
|
|
85
|
-
|
|
86
|
-
|
|
79
|
+
params: Dict[str, Any],
|
|
80
|
+
extra_params: Dict[str, Any] = None,
|
|
87
81
|
slices: SlicesType = None,
|
|
88
82
|
) -> Any:
|
|
89
83
|
raise NotImplementedError
|
|
@@ -92,49 +86,71 @@ class AbstractObjectIOHandler(metaclass=ABCMeta):
|
|
|
92
86
|
self,
|
|
93
87
|
reader: ODPSVolumeReader,
|
|
94
88
|
tileable: TileableType,
|
|
89
|
+
extra_params: Dict[str, Any] = None,
|
|
95
90
|
slices: SlicesType = None,
|
|
96
91
|
) -> Any:
|
|
97
|
-
|
|
98
|
-
return self.
|
|
92
|
+
obj_meta = self.read_object_meta(reader, tileable)
|
|
93
|
+
return self.read_object_body(reader, obj_meta, extra_params, slices)
|
|
99
94
|
|
|
100
95
|
@abstractmethod
|
|
101
|
-
def
|
|
102
|
-
self, writer: ODPSVolumeWriter,
|
|
96
|
+
def write_object_body(
|
|
97
|
+
self, writer: ODPSVolumeWriter, params: Dict[str, Any], value: Any
|
|
103
98
|
):
|
|
104
99
|
raise NotImplementedError
|
|
105
100
|
|
|
101
|
+
@classmethod
|
|
102
|
+
def _transform_serializable_meta(cls, meta: Dict[str, Any]) -> Dict[str, Any]:
|
|
103
|
+
to_pack = meta.copy()
|
|
104
|
+
pickled_keys = []
|
|
105
|
+
serialized_values = {}
|
|
106
|
+
for k, v in meta.items():
|
|
107
|
+
if not isinstance(v, (str, bytes, int, float, bool, type(None))):
|
|
108
|
+
to_pack[k] = pickle.dumps(v)
|
|
109
|
+
serialized_values[k] = serialize_serializable(v)
|
|
110
|
+
pickled_keys.append(k)
|
|
111
|
+
to_pack[_META_PICKLED_KEYS_KEY] = pickled_keys
|
|
112
|
+
to_pack[_META_SERIALIZED_VALUE_KEY] = serialized_values
|
|
113
|
+
return to_pack
|
|
114
|
+
|
|
106
115
|
def write_object_meta(
|
|
107
116
|
self,
|
|
108
117
|
writer: ODPSVolumeWriter,
|
|
109
118
|
tileable: TileableType,
|
|
110
119
|
extra_meta: Dict[str, Any] = None,
|
|
111
120
|
):
|
|
112
|
-
meta_obj =
|
|
121
|
+
meta_obj = self._prepare_meta_for_serial(tileable)
|
|
113
122
|
if extra_meta:
|
|
114
123
|
meta_obj.update(extra_meta)
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
124
|
+
|
|
125
|
+
def encode_np_num(obj):
|
|
126
|
+
if isinstance(obj, np.generic) and obj.shape == ():
|
|
127
|
+
return obj.item()
|
|
128
|
+
return obj
|
|
129
|
+
|
|
130
|
+
meta_obj = self._transform_serializable_meta(meta_obj)
|
|
131
|
+
writer.write_file(
|
|
132
|
+
_META_FILE_NAME, msgpack.dumps(meta_obj, default=encode_np_num)
|
|
133
|
+
)
|
|
118
134
|
|
|
119
135
|
def write_object(
|
|
120
136
|
self, writer: ODPSVolumeWriter, tileable: TileableType, value: Any
|
|
121
137
|
):
|
|
122
138
|
self.write_object_meta(writer, tileable)
|
|
123
|
-
self.
|
|
139
|
+
self.write_object_body(writer, tileable.params, value)
|
|
124
140
|
|
|
125
141
|
|
|
126
|
-
@register_object_io_handler(
|
|
142
|
+
@register_object_io_handler(OutputType.object)
|
|
127
143
|
class ObjectIOHandler(AbstractObjectIOHandler):
|
|
128
|
-
def
|
|
144
|
+
def read_object_body(
|
|
129
145
|
self,
|
|
130
146
|
reader: ODPSVolumeReader,
|
|
131
|
-
|
|
132
|
-
|
|
147
|
+
params: Dict[str, Any],
|
|
148
|
+
extra_params: Dict[str, Any] = None,
|
|
133
149
|
slices: SlicesType = None,
|
|
134
150
|
) -> Any:
|
|
135
151
|
return pickle.loads(reader.read_file("data"))
|
|
136
152
|
|
|
137
|
-
def
|
|
138
|
-
self, writer: ODPSVolumeWriter,
|
|
153
|
+
def write_object_body(
|
|
154
|
+
self, writer: ODPSVolumeWriter, params: Dict[str, Any], value: Any
|
|
139
155
|
):
|
|
140
156
|
writer.write_file("data", pickle.dumps(value))
|