maxframe 1.3.0__cp39-cp39-win_amd64.whl → 2.0.0__cp39-cp39-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.cp39-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.cp39-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 +62 -9
- 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 +128 -3
- maxframe/dataframe/reduction/core.py +20 -6
- 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/llm/models/dashscope.py +34 -0
- maxframe/learn/contrib/llm/models/managed.py +15 -0
- maxframe/learn/contrib/llm/multi_modal.py +92 -0
- maxframe/learn/contrib/llm/text.py +21 -5
- 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 +13 -8
- 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.cp39-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.cp39-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.0.dist-info → maxframe-2.0.0.dist-info}/METADATA +5 -1
- maxframe-2.0.0.dist-info/RECORD +939 -0
- {maxframe-1.3.0.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.0.dist-info/RECORD +0 -705
- {maxframe-1.3.0.dist-info → maxframe-2.0.0.dist-info}/top_level.txt +0 -0
maxframe/dataframe/misc/apply.py
CHANGED
|
@@ -13,10 +13,9 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
import inspect
|
|
16
|
-
from typing import Any, Union
|
|
16
|
+
from typing import Any, MutableMapping, Union
|
|
17
17
|
|
|
18
18
|
import numpy as np
|
|
19
|
-
import pandas as pd
|
|
20
19
|
from pandas import DataFrame, Series
|
|
21
20
|
|
|
22
21
|
from ... import opcodes
|
|
@@ -30,14 +29,15 @@ from ...serialization.serializables import (
|
|
|
30
29
|
StringField,
|
|
31
30
|
TupleField,
|
|
32
31
|
)
|
|
33
|
-
from ...
|
|
32
|
+
from ...udf import BuiltinFunction, MarkedFunction
|
|
33
|
+
from ...utils import copy_if_possible, get_func_token, make_dtype, make_dtypes, tokenize
|
|
34
34
|
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
35
35
|
from ..utils import (
|
|
36
|
+
InferredDataFrameMeta,
|
|
36
37
|
build_df,
|
|
37
38
|
build_series,
|
|
38
39
|
copy_func_scheduling_hints,
|
|
39
|
-
|
|
40
|
-
make_dtypes,
|
|
40
|
+
infer_dataframe_return_value,
|
|
41
41
|
pack_func_args,
|
|
42
42
|
parse_index,
|
|
43
43
|
validate_axis,
|
|
@@ -60,10 +60,11 @@ class ApplyOperandLogicKeyGeneratorMixin(OperatorLogicKeyGeneratorMixin):
|
|
|
60
60
|
return token_values
|
|
61
61
|
|
|
62
62
|
|
|
63
|
-
class
|
|
63
|
+
class DataFrameApply(
|
|
64
64
|
DataFrameOperator, DataFrameOperatorMixin, ApplyOperandLogicKeyGeneratorMixin
|
|
65
65
|
):
|
|
66
66
|
_op_type_ = opcodes.APPLY
|
|
67
|
+
_legacy_name = "ApplyOperator"
|
|
67
68
|
|
|
68
69
|
func = FunctionField("func")
|
|
69
70
|
axis = AnyField("axis", default=0)
|
|
@@ -83,6 +84,9 @@ class ApplyOperator(
|
|
|
83
84
|
if hasattr(self, "func"):
|
|
84
85
|
copy_func_scheduling_hints(self.func, self)
|
|
85
86
|
|
|
87
|
+
def has_custom_code(self) -> bool:
|
|
88
|
+
return not isinstance(self.func, BuiltinFunction)
|
|
89
|
+
|
|
86
90
|
def _update_key(self):
|
|
87
91
|
values = [v for v in self._values_ if v is not self.func] + [
|
|
88
92
|
get_func_token(self.func)
|
|
@@ -90,62 +94,48 @@ class ApplyOperator(
|
|
|
90
94
|
self._obj_set("_key", tokenize(type(self).__name__, *values))
|
|
91
95
|
return self
|
|
92
96
|
|
|
93
|
-
def _infer_df_func_returns(
|
|
97
|
+
def _infer_df_func_returns(
|
|
98
|
+
self, df, dtypes, dtype=None, name=None, index=None
|
|
99
|
+
) -> InferredDataFrameMeta:
|
|
94
100
|
if isinstance(self.func, np.ufunc):
|
|
95
101
|
output_type = OutputType.dataframe
|
|
96
|
-
new_dtypes = None
|
|
97
|
-
index_value = "inherit"
|
|
98
102
|
new_elementwise = True
|
|
99
103
|
else:
|
|
100
|
-
if self.output_types
|
|
101
|
-
dtypes is not None or dtype is not None
|
|
102
|
-
):
|
|
103
|
-
ret_dtypes = dtypes if dtypes is not None else (name, dtype)
|
|
104
|
-
ret_index_value = parse_index(index) if index is not None else None
|
|
105
|
-
self.elementwise = False
|
|
106
|
-
return ret_dtypes, ret_index_value
|
|
107
|
-
|
|
108
|
-
output_type = new_dtypes = index_value = None
|
|
104
|
+
output_type = self.output_types[0] if self.output_types else None
|
|
109
105
|
new_elementwise = False
|
|
110
106
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
new_dtypes = (name or infer_df.name, dtype or infer_df.dtype)
|
|
134
|
-
new_elementwise = False if new_elementwise is None else new_elementwise
|
|
135
|
-
except: # noqa: E722 # nosec
|
|
136
|
-
pass
|
|
107
|
+
def infer_func(in_df):
|
|
108
|
+
return in_df.apply(
|
|
109
|
+
self.func,
|
|
110
|
+
axis=self.axis,
|
|
111
|
+
raw=self.raw,
|
|
112
|
+
result_type=self.result_type,
|
|
113
|
+
args=self.args,
|
|
114
|
+
**self.kwds,
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
inferred_meta = infer_dataframe_return_value(
|
|
118
|
+
df,
|
|
119
|
+
infer_func,
|
|
120
|
+
output_type=output_type,
|
|
121
|
+
dtypes=dtypes,
|
|
122
|
+
dtype=dtype,
|
|
123
|
+
name=name,
|
|
124
|
+
index=index,
|
|
125
|
+
inherit_index=True,
|
|
126
|
+
build_kw={"size": 2},
|
|
127
|
+
)
|
|
128
|
+
inferred_meta.check_absence("output_type", "dtypes")
|
|
137
129
|
|
|
138
130
|
self.output_types = (
|
|
139
|
-
[output_type]
|
|
140
|
-
if not self.output_types and output_type
|
|
131
|
+
[inferred_meta.output_type]
|
|
132
|
+
if not self.output_types and inferred_meta.output_type
|
|
141
133
|
else self.output_types
|
|
142
134
|
)
|
|
143
|
-
dtypes = new_dtypes if dtypes is None else dtypes
|
|
144
|
-
index_value = index_value if index is None else parse_index(index)
|
|
145
135
|
self.elementwise = (
|
|
146
136
|
new_elementwise if self.elementwise is None else self.elementwise
|
|
147
137
|
)
|
|
148
|
-
return
|
|
138
|
+
return inferred_meta
|
|
149
139
|
|
|
150
140
|
def _call_df_or_series(self, df):
|
|
151
141
|
return self.new_df_or_series([df])
|
|
@@ -153,20 +143,12 @@ class ApplyOperator(
|
|
|
153
143
|
def _call_dataframe(self, df, dtypes=None, dtype=None, name=None, index=None):
|
|
154
144
|
# for backward compatibility
|
|
155
145
|
dtype = dtype if dtype is not None else dtypes
|
|
156
|
-
|
|
146
|
+
inferred_meta = self._infer_df_func_returns(
|
|
157
147
|
df, dtypes, dtype=dtype, name=name, index=index
|
|
158
148
|
)
|
|
149
|
+
index_value = inferred_meta.index_value
|
|
159
150
|
if index_value is None:
|
|
160
151
|
index_value = parse_index(None, (df.key, df.index_value.key))
|
|
161
|
-
for arg, desc in zip((self.output_types, dtypes), ("output_types", "dtypes")):
|
|
162
|
-
if arg is None:
|
|
163
|
-
raise TypeError(
|
|
164
|
-
f"Cannot determine {desc} by calculating with enumerate data, "
|
|
165
|
-
"please specify it as arguments"
|
|
166
|
-
)
|
|
167
|
-
|
|
168
|
-
if index_value == "inherit":
|
|
169
|
-
index_value = df.index_value
|
|
170
152
|
|
|
171
153
|
if self.elementwise:
|
|
172
154
|
shape = df.shape
|
|
@@ -174,30 +156,21 @@ class ApplyOperator(
|
|
|
174
156
|
shape = [np.nan, np.nan]
|
|
175
157
|
shape[1 - self.axis] = df.shape[1 - self.axis]
|
|
176
158
|
if self.axis == 1:
|
|
177
|
-
shape[1] = len(dtypes)
|
|
159
|
+
shape[1] = len(inferred_meta.dtypes)
|
|
178
160
|
shape = tuple(shape)
|
|
179
161
|
else:
|
|
180
162
|
shape = (df.shape[1 - self.axis],)
|
|
181
163
|
|
|
182
164
|
if self.output_types[0] == OutputType.dataframe:
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
)
|
|
191
|
-
else:
|
|
192
|
-
return self.new_dataframe(
|
|
193
|
-
[df],
|
|
194
|
-
shape=shape,
|
|
195
|
-
dtypes=dtypes,
|
|
196
|
-
index_value=df.index_value,
|
|
197
|
-
columns_value=parse_index(dtypes.index, store_data=True),
|
|
198
|
-
)
|
|
165
|
+
kw = dict(
|
|
166
|
+
shape=shape,
|
|
167
|
+
dtypes=inferred_meta.dtypes,
|
|
168
|
+
index_value=index_value if self.axis == 0 else df.index_value,
|
|
169
|
+
columns_value=parse_index(inferred_meta.dtypes.index, store_data=True),
|
|
170
|
+
)
|
|
171
|
+
return self.new_dataframe([df], **kw)
|
|
199
172
|
else:
|
|
200
|
-
name, dtype =
|
|
173
|
+
name, dtype = inferred_meta.name, inferred_meta.dtype
|
|
201
174
|
return self.new_series(
|
|
202
175
|
[df], shape=shape, name=name, dtype=dtype, index_value=index_value
|
|
203
176
|
)
|
|
@@ -205,78 +178,58 @@ class ApplyOperator(
|
|
|
205
178
|
def _call_series(self, series, dtypes=None, dtype=None, name=None, index=None):
|
|
206
179
|
# for backward compatibility
|
|
207
180
|
dtype = dtype if dtype is not None else dtypes
|
|
208
|
-
if self.convert_dtype:
|
|
209
|
-
if
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
self.func, args=self.args, **self.kwds
|
|
219
|
-
)
|
|
220
|
-
except: # noqa: E722 # nosec # pylint: disable=bare-except
|
|
221
|
-
infer_series = None
|
|
222
|
-
|
|
223
|
-
output_type = self._output_types[0]
|
|
224
|
-
|
|
225
|
-
if index is not None:
|
|
226
|
-
index_value = parse_index(index)
|
|
227
|
-
elif infer_series is not None:
|
|
228
|
-
if infer_series.index is test_series.index:
|
|
229
|
-
index_value = series.index_value
|
|
230
|
-
else: # pragma: no cover
|
|
231
|
-
index_value = parse_index(infer_series.index)
|
|
232
|
-
else:
|
|
233
|
-
index_value = parse_index(series.index_value)
|
|
181
|
+
if not self.convert_dtype:
|
|
182
|
+
dtype = dtype if dtype is not None else np.dtype("object")
|
|
183
|
+
return self.new_series(
|
|
184
|
+
[series],
|
|
185
|
+
dtype=dtype,
|
|
186
|
+
shape=series.shape,
|
|
187
|
+
index_value=series.index_value,
|
|
188
|
+
name=name,
|
|
189
|
+
)
|
|
190
|
+
else:
|
|
234
191
|
|
|
192
|
+
def infer_func(obj):
|
|
193
|
+
return obj.apply(self.func, args=self.args, **self.kwds)
|
|
194
|
+
|
|
195
|
+
output_type = self.output_types[0] if self.output_types else None
|
|
196
|
+
inferred_meta = infer_dataframe_return_value(
|
|
197
|
+
series,
|
|
198
|
+
infer_func,
|
|
199
|
+
output_type=output_type,
|
|
200
|
+
dtypes=dtypes,
|
|
201
|
+
dtype=dtype,
|
|
202
|
+
name=name,
|
|
203
|
+
index=index,
|
|
204
|
+
inherit_index=True,
|
|
205
|
+
build_kw={"size": 2},
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
output_type = inferred_meta.output_type or output_type
|
|
235
209
|
if output_type == OutputType.dataframe:
|
|
210
|
+
dtypes = inferred_meta.dtypes
|
|
236
211
|
if dtypes is None:
|
|
237
|
-
|
|
238
|
-
dtypes
|
|
239
|
-
|
|
240
|
-
raise TypeError(
|
|
241
|
-
"Cannot determine dtypes, "
|
|
242
|
-
"please specify `dtypes` as argument"
|
|
243
|
-
)
|
|
244
|
-
columns_value = parse_index(dtypes.index, store_data=True)
|
|
245
|
-
|
|
212
|
+
raise TypeError(
|
|
213
|
+
"Cannot determine dtypes, please specify `dtypes` as argument"
|
|
214
|
+
)
|
|
246
215
|
return self.new_dataframe(
|
|
247
216
|
[series],
|
|
248
217
|
shape=(series.shape[0], len(dtypes)),
|
|
249
|
-
index_value=index_value,
|
|
250
|
-
columns_value=
|
|
251
|
-
|
|
218
|
+
index_value=inferred_meta.index_value,
|
|
219
|
+
columns_value=parse_index(
|
|
220
|
+
inferred_meta.dtypes.index, store_data=True
|
|
221
|
+
),
|
|
222
|
+
dtypes=inferred_meta.dtypes,
|
|
252
223
|
)
|
|
253
224
|
else:
|
|
254
|
-
|
|
255
|
-
dtype is None
|
|
256
|
-
and infer_series is not None
|
|
257
|
-
and infer_series.ndim == 1
|
|
258
|
-
):
|
|
259
|
-
dtype = infer_series.dtype
|
|
260
|
-
else:
|
|
261
|
-
dtype = dtype if dtype is not None else np.dtype(object)
|
|
262
|
-
if infer_series is not None and infer_series.ndim == 1:
|
|
263
|
-
name = name or infer_series.name
|
|
225
|
+
dtype = inferred_meta.dtype or np.dtype("O")
|
|
264
226
|
return self.new_series(
|
|
265
227
|
[series],
|
|
266
228
|
dtype=dtype,
|
|
267
229
|
shape=series.shape,
|
|
268
|
-
index_value=index_value,
|
|
269
|
-
name=name,
|
|
230
|
+
index_value=inferred_meta.index_value,
|
|
231
|
+
name=inferred_meta.name,
|
|
270
232
|
)
|
|
271
|
-
else:
|
|
272
|
-
dtype = dtype if dtype is not None else np.dtype("object")
|
|
273
|
-
return self.new_series(
|
|
274
|
-
[series],
|
|
275
|
-
dtype=dtype,
|
|
276
|
-
shape=series.shape,
|
|
277
|
-
index_value=series.index_value,
|
|
278
|
-
name=name,
|
|
279
|
-
)
|
|
280
233
|
|
|
281
234
|
def __call__(self, df_or_series, dtypes=None, dtype=None, name=None, index=None):
|
|
282
235
|
axis = getattr(self, "axis", None) or 0
|
|
@@ -303,7 +256,21 @@ class ApplyOperator(
|
|
|
303
256
|
|
|
304
257
|
def get_packed_funcs(self, df=None) -> Any:
|
|
305
258
|
stub_df = self._build_stub_pandas_obj(df or self.inputs[0])
|
|
306
|
-
|
|
259
|
+
args = copy_if_possible(self.args)
|
|
260
|
+
kwargs = copy_if_possible(self.kwds)
|
|
261
|
+
return pack_func_args(stub_df, self.func, *args, **kwargs)
|
|
262
|
+
|
|
263
|
+
@classmethod
|
|
264
|
+
def estimate_size(
|
|
265
|
+
cls, ctx: MutableMapping[str, Union[int, float]], op: "DataFrameApply"
|
|
266
|
+
) -> None:
|
|
267
|
+
if isinstance(op.func, MarkedFunction):
|
|
268
|
+
ctx[op.outputs[0].key] = float("inf")
|
|
269
|
+
super().estimate_size(ctx, op)
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
# keep for import compatibility
|
|
273
|
+
ApplyOperator = DataFrameApply
|
|
307
274
|
|
|
308
275
|
|
|
309
276
|
def df_apply(
|
|
@@ -546,7 +513,7 @@ def df_apply(
|
|
|
546
513
|
kwds["axis"] = axis
|
|
547
514
|
return func(*args, **kwds)
|
|
548
515
|
|
|
549
|
-
op =
|
|
516
|
+
op = DataFrameApply(
|
|
550
517
|
func=func,
|
|
551
518
|
axis=axis,
|
|
552
519
|
raw=raw,
|
|
@@ -753,7 +720,7 @@ def series_apply(
|
|
|
753
720
|
)
|
|
754
721
|
output_type = output_types[0] if output_types else OutputType.series
|
|
755
722
|
|
|
756
|
-
op =
|
|
723
|
+
op = DataFrameApply(
|
|
757
724
|
func=func,
|
|
758
725
|
convert_dtype=convert_dtype,
|
|
759
726
|
args=args,
|
|
@@ -17,7 +17,7 @@ from pandas.api.types import CategoricalDtype
|
|
|
17
17
|
|
|
18
18
|
from ... import opcodes
|
|
19
19
|
from ...serialization.serializables import AnyField, ListField, StringField
|
|
20
|
-
from ...utils import pd_release_version
|
|
20
|
+
from ...utils import make_dtypes, pd_release_version
|
|
21
21
|
from ..core import DATAFRAME_TYPE, SERIES_TYPE
|
|
22
22
|
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
23
23
|
from ..utils import build_empty_df, build_empty_series, parse_index
|
|
@@ -184,6 +184,7 @@ def astype(df, dtype, copy=True, errors="raise"):
|
|
|
184
184
|
1 2
|
|
185
185
|
dtype: int64
|
|
186
186
|
"""
|
|
187
|
+
dtype = make_dtypes(dtype, make_series=False)
|
|
187
188
|
if isinstance(dtype, dict):
|
|
188
189
|
keys = list(dtype.keys())
|
|
189
190
|
if isinstance(df, SERIES_TYPE):
|
|
@@ -233,4 +234,4 @@ def index_astype(ix, dtype, copy=True):
|
|
|
233
234
|
Index
|
|
234
235
|
Index with values cast to specified dtype.
|
|
235
236
|
"""
|
|
236
|
-
return astype(ix, dtype, copy=copy)
|
|
237
|
+
return astype(ix, make_dtypes(dtype), copy=copy)
|
|
@@ -12,11 +12,13 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
+
from typing import List
|
|
16
|
+
|
|
15
17
|
import numpy as np
|
|
16
18
|
from pandas.core.dtypes.cast import find_common_type
|
|
17
19
|
|
|
18
20
|
from ... import opcodes
|
|
19
|
-
from ...core import TILEABLE_TYPE
|
|
21
|
+
from ...core import TILEABLE_TYPE, EntityData
|
|
20
22
|
from ...serialization.serializables import FieldTypes, ListField
|
|
21
23
|
from ..core import SERIES_TYPE
|
|
22
24
|
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
@@ -32,21 +34,23 @@ class DataFrameCaseWhen(DataFrameOperator, DataFrameOperatorMixin):
|
|
|
32
34
|
def __init__(self, output_types=None, **kw):
|
|
33
35
|
super().__init__(_output_types=output_types, **kw)
|
|
34
36
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
+
@classmethod
|
|
38
|
+
def _set_inputs(cls, op: "DataFrameCaseWhen", inputs: List[EntityData]):
|
|
39
|
+
super()._set_inputs(op, inputs)
|
|
37
40
|
it = iter(inputs)
|
|
38
41
|
next(it)
|
|
39
|
-
|
|
40
|
-
next(it) if isinstance(t, TILEABLE_TYPE) else t for t in
|
|
42
|
+
op.conditions = [
|
|
43
|
+
next(it) if isinstance(t, TILEABLE_TYPE) else t for t in op.conditions
|
|
41
44
|
]
|
|
42
|
-
|
|
43
|
-
next(it) if isinstance(t, TILEABLE_TYPE) else t for t in
|
|
45
|
+
op.replacements = [
|
|
46
|
+
next(it) if isinstance(t, TILEABLE_TYPE) else t for t in op.replacements
|
|
44
47
|
]
|
|
45
48
|
|
|
46
49
|
def __call__(self, series):
|
|
47
50
|
replacement_dtypes = [
|
|
48
51
|
it.dtype if isinstance(it, SERIES_TYPE) else np.array(it).dtype
|
|
49
52
|
for it in self.replacements
|
|
53
|
+
if it is not None
|
|
50
54
|
]
|
|
51
55
|
dtype = find_common_type([series.dtype] + replacement_dtypes)
|
|
52
56
|
|
maxframe/dataframe/misc/cut.py
CHANGED
|
@@ -13,12 +13,13 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
from numbers import Integral
|
|
16
|
+
from typing import List
|
|
16
17
|
|
|
17
18
|
import numpy as np
|
|
18
19
|
import pandas as pd
|
|
19
20
|
|
|
20
21
|
from ... import opcodes
|
|
21
|
-
from ...core import ENTITY_TYPE, ExecutableTuple, OutputType
|
|
22
|
+
from ...core import ENTITY_TYPE, EntityData, ExecutableTuple, OutputType
|
|
22
23
|
from ...serialization.serializables import (
|
|
23
24
|
AnyField,
|
|
24
25
|
BoolField,
|
|
@@ -55,14 +56,15 @@ class DataFrameCut(DataFrameOperator, DataFrameOperatorMixin):
|
|
|
55
56
|
def output_limit(self):
|
|
56
57
|
return 1 if not self.retbins else 2
|
|
57
58
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
59
|
+
@classmethod
|
|
60
|
+
def _set_inputs(cls, op: "DataFrameCut", inputs: List[EntityData]):
|
|
61
|
+
super()._set_inputs(op, inputs)
|
|
62
|
+
inputs_iter = iter(op._inputs)
|
|
63
|
+
op._input = next(inputs_iter)
|
|
64
|
+
if isinstance(op.bins, ENTITY_TYPE):
|
|
65
|
+
op.bins = next(inputs_iter)
|
|
66
|
+
if isinstance(op.labels, ENTITY_TYPE):
|
|
67
|
+
op.labels = next(inputs_iter)
|
|
66
68
|
|
|
67
69
|
def __call__(self, x):
|
|
68
70
|
if isinstance(x, pd.Series):
|
|
@@ -77,7 +79,6 @@ class DataFrameCut(DataFrameOperator, DataFrameOperatorMixin):
|
|
|
77
79
|
inputs = [x]
|
|
78
80
|
if self.labels is not None and not isinstance(self.labels, (bool, ENTITY_TYPE)):
|
|
79
81
|
self.labels = np.asarray(self.labels)
|
|
80
|
-
|
|
81
82
|
# infer dtype
|
|
82
83
|
x_empty = (
|
|
83
84
|
pd.Series([1], dtype=x.dtype)
|
|
@@ -12,10 +12,13 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
+
from typing import List
|
|
16
|
+
|
|
15
17
|
import numpy as np
|
|
16
18
|
import pandas as pd
|
|
17
19
|
|
|
18
20
|
from ... import opcodes
|
|
21
|
+
from ...core import EntityData
|
|
19
22
|
from ...serialization.serializables import AnyField, FieldTypes, KeyField, ListField
|
|
20
23
|
from ..core import SERIES_TYPE
|
|
21
24
|
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
@@ -33,9 +36,10 @@ class DataFrameDescribe(DataFrameOperator, DataFrameOperatorMixin):
|
|
|
33
36
|
def __init__(self, output_types=None, **kw):
|
|
34
37
|
super().__init__(_output_types=output_types, **kw)
|
|
35
38
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
+
@classmethod
|
|
40
|
+
def _set_inputs(cls, op: "DataFrameDescribe", inputs: List[EntityData]):
|
|
41
|
+
super()._set_inputs(op, inputs)
|
|
42
|
+
op.input = op._inputs[0]
|
|
39
43
|
|
|
40
44
|
def __call__(self, df_or_series):
|
|
41
45
|
if isinstance(df_or_series, SERIES_TYPE):
|
maxframe/dataframe/misc/drop.py
CHANGED
|
@@ -13,15 +13,16 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
import warnings
|
|
16
|
+
from typing import List
|
|
16
17
|
|
|
17
18
|
import numpy as np
|
|
18
19
|
|
|
19
|
-
from
|
|
20
|
-
from
|
|
21
|
-
from
|
|
22
|
-
from
|
|
23
|
-
from
|
|
24
|
-
from
|
|
20
|
+
from ... import opcodes
|
|
21
|
+
from ...core import Entity, EntityData, OutputType
|
|
22
|
+
from ...serialization.serializables import AnyField, StringField
|
|
23
|
+
from ..core import DATAFRAME_TYPE, SERIES_TYPE, IndexValue
|
|
24
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
25
|
+
from ..utils import parse_index, validate_axis
|
|
25
26
|
|
|
26
27
|
|
|
27
28
|
class DataFrameDrop(DataFrameOperatorMixin, DataFrameOperator):
|
|
@@ -42,11 +43,12 @@ class DataFrameDrop(DataFrameOperatorMixin, DataFrameOperator):
|
|
|
42
43
|
else:
|
|
43
44
|
return dtypes
|
|
44
45
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
@classmethod
|
|
47
|
+
def _set_inputs(cls, op: "DataFrameDrop", inputs: List[EntityData]):
|
|
48
|
+
super()._set_inputs(op, inputs)
|
|
49
|
+
inputs_iter = iter(op._inputs[1:])
|
|
50
|
+
if len(op._inputs) > 1:
|
|
51
|
+
op.index = next(inputs_iter)
|
|
50
52
|
|
|
51
53
|
def __call__(self, df_or_series):
|
|
52
54
|
params = df_or_series.params.copy()
|