maxframe 1.3.1__cp39-cp39-win_amd64.whl → 2.0.0b1__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 +33 -3
- maxframe/dataframe/datasource/read_odps_table.py +20 -5
- maxframe/dataframe/datasource/read_parquet.py +8 -3
- maxframe/dataframe/datasource/tests/test_datasource.py +33 -0
- 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 +8 -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 +22 -48
- 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 +53 -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.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 +67 -1
- maxframe/udf.py +76 -6
- maxframe/utils.py +418 -17
- {maxframe-1.3.1.dist-info → maxframe-2.0.0b1.dist-info}/METADATA +4 -1
- maxframe-2.0.0b1.dist-info/RECORD +939 -0
- {maxframe-1.3.1.dist-info → maxframe-2.0.0b1.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.0b1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
# Copyright 1999-2025 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from .... import tensor as mt
|
|
16
|
+
from ....dataframe.core import DATAFRAME_TYPE, INDEX_TYPE, SERIES_TYPE
|
|
17
|
+
from ....learn.core import BaseEstimator, TransformerMixin
|
|
18
|
+
from ...utils.validation import FLOAT_DTYPES, check_array, check_is_fitted
|
|
19
|
+
from .utils import _get_real_sample_size, _handle_zeros_in_scale
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class MinMaxScaler(TransformerMixin, BaseEstimator):
|
|
23
|
+
"""Transform features by scaling each feature to a given range.
|
|
24
|
+
|
|
25
|
+
This estimator scales and translates each feature individually such
|
|
26
|
+
that it is in the given range on the training set, e.g. between
|
|
27
|
+
zero and one.
|
|
28
|
+
|
|
29
|
+
The transformation is given by::
|
|
30
|
+
|
|
31
|
+
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
|
|
32
|
+
X_scaled = X_std * (max - min) + min
|
|
33
|
+
|
|
34
|
+
where min, max = feature_range.
|
|
35
|
+
|
|
36
|
+
This transformation is often used as an alternative to zero mean,
|
|
37
|
+
unit variance scaling.
|
|
38
|
+
|
|
39
|
+
Read more in the :ref:`User Guide <preprocessing_scaler>`.
|
|
40
|
+
|
|
41
|
+
Parameters
|
|
42
|
+
----------
|
|
43
|
+
feature_range : tuple (min, max), default=(0, 1)
|
|
44
|
+
Desired range of transformed data.
|
|
45
|
+
|
|
46
|
+
copy : bool, default=True
|
|
47
|
+
Set to False to perform inplace row normalization and avoid a
|
|
48
|
+
copy (if the input is already a numpy array).
|
|
49
|
+
|
|
50
|
+
clip: bool, default=False
|
|
51
|
+
Set to True to clip transformed values of held-out data to
|
|
52
|
+
provided `feature range`.
|
|
53
|
+
|
|
54
|
+
Attributes
|
|
55
|
+
----------
|
|
56
|
+
min_ : Tensor of shape (n_features,)
|
|
57
|
+
Per feature adjustment for minimum. Equivalent to
|
|
58
|
+
``min - X.min(axis=0) * self.scale_``
|
|
59
|
+
|
|
60
|
+
scale_ : Tensor of shape (n_features,)
|
|
61
|
+
Per feature relative scaling of the data. Equivalent to
|
|
62
|
+
``(max - min) / (X.max(axis=0) - X.min(axis=0))``
|
|
63
|
+
|
|
64
|
+
data_min_ : ndarray of shape (n_features,)
|
|
65
|
+
Per feature minimum seen in the data
|
|
66
|
+
|
|
67
|
+
data_max_ : ndarray of shape (n_features,)
|
|
68
|
+
Per feature maximum seen in the data
|
|
69
|
+
|
|
70
|
+
data_range_ : ndarray of shape (n_features,)
|
|
71
|
+
Per feature range ``(data_max_ - data_min_)`` seen in the data
|
|
72
|
+
|
|
73
|
+
n_samples_seen_ : int
|
|
74
|
+
The number of samples processed by the estimator.
|
|
75
|
+
It will be reset on new calls to fit, but increments across
|
|
76
|
+
``partial_fit`` calls.
|
|
77
|
+
|
|
78
|
+
Examples
|
|
79
|
+
--------
|
|
80
|
+
>>> from maxframe.learn.preprocessing import MinMaxScaler
|
|
81
|
+
>>> data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
|
|
82
|
+
>>> scaler = MinMaxScaler()
|
|
83
|
+
>>> print(scaler.fit(data))
|
|
84
|
+
MinMaxScaler()
|
|
85
|
+
>>> print(scaler.data_max_)
|
|
86
|
+
[ 1. 18.]
|
|
87
|
+
>>> print(scaler.transform(data))
|
|
88
|
+
[[0. 0. ]
|
|
89
|
+
[0.25 0.25]
|
|
90
|
+
[0.5 0.5 ]
|
|
91
|
+
[1. 1. ]]
|
|
92
|
+
>>> print(scaler.transform([[2, 2]]))
|
|
93
|
+
[[1.5 0. ]]
|
|
94
|
+
|
|
95
|
+
See Also
|
|
96
|
+
--------
|
|
97
|
+
minmax_scale : Equivalent function without the estimator API.
|
|
98
|
+
|
|
99
|
+
Notes
|
|
100
|
+
-----
|
|
101
|
+
NaNs are treated as missing values: disregarded in fit, and maintained in
|
|
102
|
+
transform.
|
|
103
|
+
|
|
104
|
+
For a comparison of the different scalers, transformers, and normalizers,
|
|
105
|
+
see :ref:`examples/preprocessing/plot_all_scaling.py
|
|
106
|
+
<sphx_glr_auto_examples_preprocessing_plot_all_scaling.py>`.
|
|
107
|
+
"""
|
|
108
|
+
|
|
109
|
+
def __init__(self, feature_range=(0, 1), copy=True, clip=False):
|
|
110
|
+
self.feature_range = feature_range
|
|
111
|
+
self.copy = copy
|
|
112
|
+
self.clip = clip
|
|
113
|
+
|
|
114
|
+
def _reset(self): # pragma: no cover
|
|
115
|
+
"""Reset internal data-dependent state of the scaler, if necessary.
|
|
116
|
+
|
|
117
|
+
__init__ parameters are not touched.
|
|
118
|
+
"""
|
|
119
|
+
|
|
120
|
+
# Checking one attribute is enough, because they are all set together
|
|
121
|
+
# in partial_fit
|
|
122
|
+
if hasattr(self, "scale_"):
|
|
123
|
+
del self.scale_
|
|
124
|
+
del self.min_
|
|
125
|
+
del self.n_samples_seen_
|
|
126
|
+
del self.data_min_
|
|
127
|
+
del self.data_max_
|
|
128
|
+
del self.data_range_
|
|
129
|
+
|
|
130
|
+
def fit(self, X, y=None, execute=False, session=None, run_kwargs=None):
|
|
131
|
+
"""Compute the minimum and maximum to be used for later scaling.
|
|
132
|
+
|
|
133
|
+
Parameters
|
|
134
|
+
----------
|
|
135
|
+
X : array-like of shape (n_samples, n_features)
|
|
136
|
+
The data used to compute the per-feature minimum and maximum
|
|
137
|
+
used for later scaling along the features axis.
|
|
138
|
+
|
|
139
|
+
y : None
|
|
140
|
+
Ignored.
|
|
141
|
+
|
|
142
|
+
Returns
|
|
143
|
+
-------
|
|
144
|
+
self : object
|
|
145
|
+
Fitted scaler.
|
|
146
|
+
"""
|
|
147
|
+
|
|
148
|
+
# Reset internal state before fitting
|
|
149
|
+
self._reset()
|
|
150
|
+
return self.partial_fit(
|
|
151
|
+
X, y, execute=execute, session=session, run_kwargs=run_kwargs
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
def partial_fit(self, X, y=None, execute=False, session=None, run_kwargs=None):
|
|
155
|
+
"""Online computation of min and max on X for later scaling.
|
|
156
|
+
|
|
157
|
+
All of X is processed as a single batch. This is intended for cases
|
|
158
|
+
when :meth:`fit` is not feasible due to very large number of
|
|
159
|
+
`n_samples` or because X is read from a continuous stream.
|
|
160
|
+
|
|
161
|
+
Parameters
|
|
162
|
+
----------
|
|
163
|
+
X : array-like of shape (n_samples, n_features)
|
|
164
|
+
The data used to compute the mean and standard deviation
|
|
165
|
+
used for later scaling along the features axis.
|
|
166
|
+
|
|
167
|
+
y : None
|
|
168
|
+
Ignored.
|
|
169
|
+
|
|
170
|
+
Returns
|
|
171
|
+
-------
|
|
172
|
+
self : object
|
|
173
|
+
Fitted scaler.
|
|
174
|
+
"""
|
|
175
|
+
feature_range = self.feature_range
|
|
176
|
+
if feature_range[0] >= feature_range[1]:
|
|
177
|
+
raise ValueError(
|
|
178
|
+
"Minimum of desired feature range must be smaller"
|
|
179
|
+
" than maximum. Got %s." % str(feature_range)
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
if mt.tensor(X).issparse(): # pragma: no cover
|
|
183
|
+
raise TypeError(
|
|
184
|
+
"MinMaxScaler does not support sparse input. "
|
|
185
|
+
"Consider using MaxAbsScaler instead."
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
first_pass = not hasattr(self, "n_samples_seen_")
|
|
189
|
+
X = self._validate_data(
|
|
190
|
+
X,
|
|
191
|
+
reset=first_pass,
|
|
192
|
+
estimator=self,
|
|
193
|
+
dtype=FLOAT_DTYPES,
|
|
194
|
+
force_all_finite="allow-nan",
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
if isinstance(X, (DATAFRAME_TYPE, SERIES_TYPE, INDEX_TYPE)):
|
|
198
|
+
data_min = X.min(axis=0)
|
|
199
|
+
data_max = X.max(axis=0)
|
|
200
|
+
else:
|
|
201
|
+
data_min = mt.nanmin(X, axis=0)
|
|
202
|
+
data_max = mt.nanmax(X, axis=0)
|
|
203
|
+
|
|
204
|
+
if first_pass:
|
|
205
|
+
self.n_samples_seen_ = _get_real_sample_size(X)
|
|
206
|
+
else:
|
|
207
|
+
data_min = mt.minimum(
|
|
208
|
+
self.data_min_, data_min
|
|
209
|
+
) # pylint: disable=access-member-before-definition
|
|
210
|
+
data_max = mt.maximum(
|
|
211
|
+
self.data_max_, data_max
|
|
212
|
+
) # pylint: disable=access-member-before-definition
|
|
213
|
+
self.n_samples_seen_ += _get_real_sample_size(X)
|
|
214
|
+
|
|
215
|
+
data_range = data_max - data_min
|
|
216
|
+
self.scale_ = (feature_range[1] - feature_range[0]) / _handle_zeros_in_scale(
|
|
217
|
+
data_range
|
|
218
|
+
)
|
|
219
|
+
self.min_ = feature_range[0] - data_min * self.scale_
|
|
220
|
+
self.data_min_ = data_min
|
|
221
|
+
self.data_max_ = data_max
|
|
222
|
+
self.data_range_ = data_range
|
|
223
|
+
if execute:
|
|
224
|
+
self.execute(session=session, **(run_kwargs or dict()))
|
|
225
|
+
return self
|
|
226
|
+
|
|
227
|
+
def transform(self, X, execute=False, session=None, run_kwargs=None):
|
|
228
|
+
"""Scale features of X according to feature_range.
|
|
229
|
+
|
|
230
|
+
Parameters
|
|
231
|
+
----------
|
|
232
|
+
X : array-like of shape (n_samples, n_features)
|
|
233
|
+
Input data that will be transformed.
|
|
234
|
+
|
|
235
|
+
Returns
|
|
236
|
+
-------
|
|
237
|
+
Xt : ndarray of shape (n_samples, n_features)
|
|
238
|
+
Transformed data.
|
|
239
|
+
"""
|
|
240
|
+
check_is_fitted(self)
|
|
241
|
+
|
|
242
|
+
X = self._validate_data(
|
|
243
|
+
X,
|
|
244
|
+
copy=self.copy,
|
|
245
|
+
dtype=FLOAT_DTYPES,
|
|
246
|
+
force_all_finite="allow-nan",
|
|
247
|
+
reset=False,
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
X *= self.scale_
|
|
251
|
+
X += self.min_
|
|
252
|
+
if self.clip:
|
|
253
|
+
X = mt.clip(X, self.feature_range[0], self.feature_range[1])
|
|
254
|
+
if execute:
|
|
255
|
+
X.execute(session=session, **(run_kwargs or dict()))
|
|
256
|
+
return X
|
|
257
|
+
|
|
258
|
+
def inverse_transform(self, X, execute=False, session=None, run_kwargs=None):
|
|
259
|
+
"""Undo the scaling of X according to feature_range.
|
|
260
|
+
|
|
261
|
+
Parameters
|
|
262
|
+
----------
|
|
263
|
+
X : array-like of shape (n_samples, n_features)
|
|
264
|
+
Input data that will be transformed. It cannot be sparse.
|
|
265
|
+
|
|
266
|
+
Returns
|
|
267
|
+
-------
|
|
268
|
+
Xt : ndarray of shape (n_samples, n_features)
|
|
269
|
+
Transformed data.
|
|
270
|
+
"""
|
|
271
|
+
check_is_fitted(self)
|
|
272
|
+
|
|
273
|
+
X = check_array(
|
|
274
|
+
X, copy=self.copy, dtype=FLOAT_DTYPES, force_all_finite="allow-nan"
|
|
275
|
+
)
|
|
276
|
+
|
|
277
|
+
X -= self.min_
|
|
278
|
+
X /= self.scale_
|
|
279
|
+
if execute:
|
|
280
|
+
X.execute(session=session, **(run_kwargs or dict()))
|
|
281
|
+
return X
|
|
282
|
+
|
|
283
|
+
def _more_tags(self): # pylint: disable=no-self-use
|
|
284
|
+
return {"allow_nan": True}
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def minmax_scale(
|
|
288
|
+
X,
|
|
289
|
+
feature_range=(0, 1),
|
|
290
|
+
*,
|
|
291
|
+
axis=0,
|
|
292
|
+
copy=True,
|
|
293
|
+
execute=False,
|
|
294
|
+
session=None,
|
|
295
|
+
run_kwargs=None
|
|
296
|
+
):
|
|
297
|
+
"""Transform features by scaling each feature to a given range.
|
|
298
|
+
|
|
299
|
+
This estimator scales and translates each feature individually such
|
|
300
|
+
that it is in the given range on the training set, i.e. between
|
|
301
|
+
zero and one.
|
|
302
|
+
|
|
303
|
+
The transformation is given by (when ``axis=0``)::
|
|
304
|
+
|
|
305
|
+
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
|
|
306
|
+
X_scaled = X_std * (max - min) + min
|
|
307
|
+
|
|
308
|
+
where min, max = feature_range.
|
|
309
|
+
|
|
310
|
+
The transformation is calculated as (when ``axis=0``)::
|
|
311
|
+
|
|
312
|
+
X_scaled = scale * X + min - X.min(axis=0) * scale
|
|
313
|
+
where scale = (max - min) / (X.max(axis=0) - X.min(axis=0))
|
|
314
|
+
|
|
315
|
+
This transformation is often used as an alternative to zero mean,
|
|
316
|
+
unit variance scaling.
|
|
317
|
+
|
|
318
|
+
Read more in the :ref:`User Guide <preprocessing_scaler>`.
|
|
319
|
+
|
|
320
|
+
.. versionadded:: 0.17
|
|
321
|
+
*minmax_scale* function interface
|
|
322
|
+
to :class:`~sklearn.preprocessing.MinMaxScaler`.
|
|
323
|
+
|
|
324
|
+
Parameters
|
|
325
|
+
----------
|
|
326
|
+
X : array-like of shape (n_samples, n_features)
|
|
327
|
+
The data.
|
|
328
|
+
|
|
329
|
+
feature_range : tuple (min, max), default=(0, 1)
|
|
330
|
+
Desired range of transformed data.
|
|
331
|
+
|
|
332
|
+
axis : int, default=0
|
|
333
|
+
Axis used to scale along. If 0, independently scale each feature,
|
|
334
|
+
otherwise (if 1) scale each sample.
|
|
335
|
+
|
|
336
|
+
copy : bool, default=True
|
|
337
|
+
Set to False to perform inplace scaling and avoid a copy (if the input
|
|
338
|
+
is already a numpy array).
|
|
339
|
+
|
|
340
|
+
Returns
|
|
341
|
+
-------
|
|
342
|
+
X_tr : ndarray of shape (n_samples, n_features)
|
|
343
|
+
The transformed data.
|
|
344
|
+
|
|
345
|
+
.. warning:: Risk of data leak
|
|
346
|
+
|
|
347
|
+
Do not use :func:`~sklearn.preprocessing.minmax_scale` unless you know
|
|
348
|
+
what you are doing. A common mistake is to apply it to the entire data
|
|
349
|
+
*before* splitting into training and test sets. This will bias the
|
|
350
|
+
model evaluation because information would have leaked from the test
|
|
351
|
+
set to the training set.
|
|
352
|
+
In general, we recommend using
|
|
353
|
+
:class:`~sklearn.preprocessing.MinMaxScaler` within a
|
|
354
|
+
:ref:`Pipeline <pipeline>` in order to prevent most risks of data
|
|
355
|
+
leaking: `pipe = make_pipeline(MinMaxScaler(), LogisticRegression())`.
|
|
356
|
+
|
|
357
|
+
See Also
|
|
358
|
+
--------
|
|
359
|
+
MinMaxScaler : Performs scaling to a given range using the Transformer
|
|
360
|
+
API (e.g. as part of a preprocessing
|
|
361
|
+
:class:`~sklearn.pipeline.Pipeline`).
|
|
362
|
+
|
|
363
|
+
Notes
|
|
364
|
+
-----
|
|
365
|
+
For a comparison of the different scalers, transformers, and normalizers,
|
|
366
|
+
see :ref:`examples/preprocessing/plot_all_scaling.py
|
|
367
|
+
<sphx_glr_auto_examples_preprocessing_plot_all_scaling.py>`.
|
|
368
|
+
""" # noqa
|
|
369
|
+
# Unlike the scaler object, this function allows 1d input.
|
|
370
|
+
# If copy is required, it will be done inside the scaler object.
|
|
371
|
+
X = check_array(
|
|
372
|
+
X, copy=False, ensure_2d=False, dtype=FLOAT_DTYPES, force_all_finite="allow-nan"
|
|
373
|
+
)
|
|
374
|
+
original_ndim = X.ndim
|
|
375
|
+
|
|
376
|
+
if original_ndim == 1:
|
|
377
|
+
X = X.reshape(X.shape[0], 1)
|
|
378
|
+
|
|
379
|
+
s = MinMaxScaler(feature_range=feature_range, copy=copy)
|
|
380
|
+
if axis == 0:
|
|
381
|
+
X = s.fit_transform(X)
|
|
382
|
+
else:
|
|
383
|
+
X = s.fit_transform(X.T).T
|
|
384
|
+
|
|
385
|
+
if original_ndim == 1:
|
|
386
|
+
X = X.ravel()
|
|
387
|
+
|
|
388
|
+
if not execute:
|
|
389
|
+
return X
|
|
390
|
+
return X.execute(session=session, **(run_kwargs or dict()))
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Copyright 1999-2025 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import numpy as np
|
|
16
|
+
|
|
17
|
+
from .... import opcodes
|
|
18
|
+
from ....core import ExecutableTuple
|
|
19
|
+
from ....serialization.serializables import BoolField, Int32Field, KeyField, StringField
|
|
20
|
+
from ....tensor.core import TensorOrder
|
|
21
|
+
from ....tensor.operators import TensorOperator, TensorOperatorMixin
|
|
22
|
+
from ...utils.validation import check_array
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class TensorNormalize(TensorOperator, TensorOperatorMixin):
|
|
26
|
+
_op_module_ = "learn"
|
|
27
|
+
_op_type_ = opcodes.NORMALIZE
|
|
28
|
+
|
|
29
|
+
input = KeyField("input")
|
|
30
|
+
norm = StringField("norm", default=None)
|
|
31
|
+
axis = Int32Field("axis", default=None)
|
|
32
|
+
return_norm = BoolField("return_norm", default=None)
|
|
33
|
+
# for test purpose
|
|
34
|
+
use_sklearn = BoolField("use_sklearn", default=None)
|
|
35
|
+
|
|
36
|
+
def __init__(self, **kw):
|
|
37
|
+
super().__init__(**kw)
|
|
38
|
+
if self.use_sklearn is None:
|
|
39
|
+
# force to use sklearn if not specified
|
|
40
|
+
self.use_sklearn = True
|
|
41
|
+
|
|
42
|
+
@classmethod
|
|
43
|
+
def _set_inputs(cls, op, inputs):
|
|
44
|
+
super()._set_inputs(op, inputs)
|
|
45
|
+
op.input = op.inputs[0]
|
|
46
|
+
|
|
47
|
+
@property
|
|
48
|
+
def output_limit(self):
|
|
49
|
+
return 2 if self.return_norm else 1
|
|
50
|
+
|
|
51
|
+
def __call__(self, x, copy=True):
|
|
52
|
+
x = check_array(
|
|
53
|
+
x,
|
|
54
|
+
accept_sparse=True,
|
|
55
|
+
estimator="the normalize function",
|
|
56
|
+
dtype=(np.float64, np.float32, np.float16),
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
normed = None
|
|
60
|
+
if not self.return_norm:
|
|
61
|
+
res = self.new_tensor([x], shape=x.shape, order=x.order)
|
|
62
|
+
else:
|
|
63
|
+
kws = [
|
|
64
|
+
{"shape": x.shape, "order": x.order},
|
|
65
|
+
{
|
|
66
|
+
"shape": (x.shape[0] if self.axis == 1 else x.shape[1],),
|
|
67
|
+
"order": TensorOrder.C_ORDER,
|
|
68
|
+
},
|
|
69
|
+
]
|
|
70
|
+
res, normed = self.new_tensors([x], kws=kws, output_limit=2)
|
|
71
|
+
|
|
72
|
+
if not copy and self.axis == 1:
|
|
73
|
+
# follow the behaviour of sklearn
|
|
74
|
+
x.data = res.data
|
|
75
|
+
|
|
76
|
+
if normed is None:
|
|
77
|
+
return res
|
|
78
|
+
return ExecutableTuple([res, normed])
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def normalize(X, norm="l2", axis=1, copy=True, return_norm=False):
|
|
82
|
+
"""
|
|
83
|
+
Scale input vectors individually to unit norm (vector length).
|
|
84
|
+
|
|
85
|
+
Parameters
|
|
86
|
+
----------
|
|
87
|
+
X : {array-like, sparse matrix}, shape [n_samples, n_features]
|
|
88
|
+
The data to normalize, element by element.
|
|
89
|
+
scipy.sparse matrices should be in CSR format to avoid an
|
|
90
|
+
un-necessary copy.
|
|
91
|
+
|
|
92
|
+
norm : 'l1', 'l2', or 'max', optional ('l2' by default)
|
|
93
|
+
The norm to use to normalize each non zero sample (or each non-zero
|
|
94
|
+
feature if axis is 0).
|
|
95
|
+
|
|
96
|
+
axis : 0 or 1, optional (1 by default)
|
|
97
|
+
axis used to normalize the data along. If 1, independently normalize
|
|
98
|
+
each sample, otherwise (if 0) normalize each feature.
|
|
99
|
+
|
|
100
|
+
copy : boolean, optional, default True
|
|
101
|
+
set to False to perform inplace row normalization and avoid a
|
|
102
|
+
copy (if the input is already a tensor and if axis is 1).
|
|
103
|
+
|
|
104
|
+
return_norm : boolean, default False
|
|
105
|
+
whether to return the computed norms
|
|
106
|
+
|
|
107
|
+
Returns
|
|
108
|
+
-------
|
|
109
|
+
X : {array-like, sparse matrix}, shape [n_samples, n_features]
|
|
110
|
+
Normalized input X.
|
|
111
|
+
|
|
112
|
+
norms : Tensor, shape [n_samples] if axis=1 else [n_features]
|
|
113
|
+
A tensor of norms along given axis for X.
|
|
114
|
+
When X is sparse, a NotImplementedError will be raised
|
|
115
|
+
for norm 'l1' or 'l2'.
|
|
116
|
+
|
|
117
|
+
See also
|
|
118
|
+
--------
|
|
119
|
+
Normalizer: Performs normalization using the ``Transformer`` API
|
|
120
|
+
(e.g. as part of a preprocessing :class:`maxframe.learn.pipeline.Pipeline`).
|
|
121
|
+
"""
|
|
122
|
+
if norm not in ("l1", "l2", "max"):
|
|
123
|
+
raise ValueError(f"'{norm}' is not a supported norm")
|
|
124
|
+
if axis not in (0, 1):
|
|
125
|
+
raise ValueError(f"'{axis}' is not a supported axis")
|
|
126
|
+
op = TensorNormalize(norm=norm, axis=axis, return_norm=return_norm, dtype=X.dtype)
|
|
127
|
+
return op(X, copy=copy)
|