maxframe 1.3.0__cp311-cp311-win32.whl → 2.0.0__cp311-cp311-win32.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of maxframe might be problematic. Click here for more details.
- maxframe/_utils.cp311-win32.pyd +0 -0
- maxframe/_utils.pyi +21 -0
- maxframe/_utils.pyx +4 -3
- maxframe/codegen/__init__.py +27 -0
- maxframe/{codegen.py → codegen/core.py} +49 -43
- maxframe/codegen/spe/__init__.py +16 -0
- maxframe/codegen/spe/core.py +307 -0
- maxframe/codegen/spe/dataframe/__init__.py +37 -0
- maxframe/codegen/spe/dataframe/accessors/__init__.py +15 -0
- maxframe/codegen/spe/dataframe/accessors/base.py +53 -0
- maxframe/codegen/spe/dataframe/accessors/dict_.py +194 -0
- maxframe/codegen/spe/dataframe/accessors/list_.py +80 -0
- maxframe/codegen/spe/dataframe/arithmetic.py +84 -0
- maxframe/codegen/spe/dataframe/datasource.py +181 -0
- maxframe/codegen/spe/dataframe/datastore.py +204 -0
- maxframe/codegen/spe/dataframe/extensions.py +63 -0
- maxframe/codegen/spe/dataframe/fetch.py +26 -0
- maxframe/codegen/spe/dataframe/groupby.py +224 -0
- maxframe/codegen/spe/dataframe/indexing.py +238 -0
- maxframe/codegen/spe/dataframe/merge.py +73 -0
- maxframe/codegen/spe/dataframe/misc.py +286 -0
- maxframe/codegen/spe/dataframe/missing.py +64 -0
- maxframe/codegen/spe/dataframe/reduction.py +160 -0
- maxframe/codegen/spe/dataframe/sort.py +83 -0
- maxframe/codegen/spe/dataframe/statistics.py +46 -0
- maxframe/codegen/spe/dataframe/tests/__init__.py +13 -0
- maxframe/codegen/spe/dataframe/tests/accessors/__init__.py +13 -0
- maxframe/codegen/spe/dataframe/tests/accessors/test_base.py +33 -0
- maxframe/codegen/spe/dataframe/tests/accessors/test_dict.py +310 -0
- maxframe/codegen/spe/dataframe/tests/accessors/test_list.py +137 -0
- maxframe/codegen/spe/dataframe/tests/indexing/__init__.py +13 -0
- maxframe/codegen/spe/dataframe/tests/indexing/conftest.py +58 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_getitem.py +124 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_iloc.py +76 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_indexing.py +39 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_rename.py +51 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_reset_index.py +88 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_sample.py +45 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_set_axis.py +45 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_set_index.py +41 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_setitem.py +46 -0
- maxframe/codegen/spe/dataframe/tests/misc/__init__.py +13 -0
- maxframe/codegen/spe/dataframe/tests/misc/test_apply.py +133 -0
- maxframe/codegen/spe/dataframe/tests/misc/test_drop_duplicates.py +92 -0
- maxframe/codegen/spe/dataframe/tests/misc/test_misc.py +234 -0
- maxframe/codegen/spe/dataframe/tests/missing/__init__.py +13 -0
- maxframe/codegen/spe/dataframe/tests/missing/test_checkna.py +94 -0
- maxframe/codegen/spe/dataframe/tests/missing/test_dropna.py +50 -0
- maxframe/codegen/spe/dataframe/tests/missing/test_fillna.py +94 -0
- maxframe/codegen/spe/dataframe/tests/missing/test_replace.py +45 -0
- maxframe/codegen/spe/dataframe/tests/test_arithmetic.py +73 -0
- maxframe/codegen/spe/dataframe/tests/test_datasource.py +184 -0
- maxframe/codegen/spe/dataframe/tests/test_datastore.py +200 -0
- maxframe/codegen/spe/dataframe/tests/test_extensions.py +88 -0
- maxframe/codegen/spe/dataframe/tests/test_groupby.py +225 -0
- maxframe/codegen/spe/dataframe/tests/test_merge.py +400 -0
- maxframe/codegen/spe/dataframe/tests/test_reduction.py +104 -0
- maxframe/codegen/spe/dataframe/tests/test_sort.py +159 -0
- maxframe/codegen/spe/dataframe/tests/test_statistics.py +70 -0
- maxframe/codegen/spe/dataframe/tests/test_tseries.py +29 -0
- maxframe/codegen/spe/dataframe/tests/test_value_counts.py +60 -0
- maxframe/codegen/spe/dataframe/tests/test_window.py +69 -0
- maxframe/codegen/spe/dataframe/tseries.py +46 -0
- maxframe/codegen/spe/dataframe/udf.py +62 -0
- maxframe/codegen/spe/dataframe/value_counts.py +31 -0
- maxframe/codegen/spe/dataframe/window.py +65 -0
- maxframe/codegen/spe/learn/__init__.py +15 -0
- maxframe/codegen/spe/learn/contrib/__init__.py +15 -0
- maxframe/codegen/spe/learn/contrib/lightgbm.py +160 -0
- maxframe/codegen/spe/learn/contrib/models.py +41 -0
- maxframe/codegen/spe/learn/contrib/pytorch.py +49 -0
- maxframe/codegen/spe/learn/contrib/tests/__init__.py +13 -0
- maxframe/codegen/spe/learn/contrib/tests/test_lightgbm.py +123 -0
- maxframe/codegen/spe/learn/contrib/tests/test_models.py +41 -0
- maxframe/codegen/spe/learn/contrib/tests/test_pytorch.py +53 -0
- maxframe/codegen/spe/learn/contrib/tests/test_xgboost.py +98 -0
- maxframe/codegen/spe/learn/contrib/xgboost.py +152 -0
- maxframe/codegen/spe/learn/metrics/__init__.py +15 -0
- maxframe/codegen/spe/learn/metrics/_classification.py +120 -0
- maxframe/codegen/spe/learn/metrics/tests/__init__.py +13 -0
- maxframe/codegen/spe/learn/metrics/tests/test_classification.py +93 -0
- maxframe/codegen/spe/learn/model_selection/__init__.py +13 -0
- maxframe/codegen/spe/learn/model_selection/tests/__init__.py +13 -0
- maxframe/codegen/spe/learn/model_selection/tests/test_split.py +41 -0
- maxframe/codegen/spe/learn/preprocessing/__init__.py +15 -0
- maxframe/codegen/spe/learn/preprocessing/_data.py +37 -0
- maxframe/codegen/spe/learn/preprocessing/_label.py +47 -0
- maxframe/codegen/spe/learn/preprocessing/tests/__init__.py +13 -0
- maxframe/codegen/spe/learn/preprocessing/tests/test_data.py +31 -0
- maxframe/codegen/spe/learn/preprocessing/tests/test_label.py +43 -0
- maxframe/codegen/spe/learn/utils/__init__.py +15 -0
- maxframe/codegen/spe/learn/utils/checks.py +55 -0
- maxframe/codegen/spe/learn/utils/multiclass.py +60 -0
- maxframe/codegen/spe/learn/utils/shuffle.py +85 -0
- maxframe/codegen/spe/learn/utils/sparsefuncs.py +35 -0
- maxframe/codegen/spe/learn/utils/tests/__init__.py +13 -0
- maxframe/codegen/spe/learn/utils/tests/test_checks.py +48 -0
- maxframe/codegen/spe/learn/utils/tests/test_multiclass.py +52 -0
- maxframe/codegen/spe/learn/utils/tests/test_shuffle.py +50 -0
- maxframe/codegen/spe/learn/utils/tests/test_sparsefuncs.py +34 -0
- maxframe/codegen/spe/learn/utils/tests/test_validation.py +44 -0
- maxframe/codegen/spe/learn/utils/validation.py +35 -0
- maxframe/codegen/spe/objects.py +26 -0
- maxframe/codegen/spe/remote.py +29 -0
- maxframe/codegen/spe/tensor/__init__.py +28 -0
- maxframe/codegen/spe/tensor/arithmetic.py +95 -0
- maxframe/codegen/spe/tensor/core.py +41 -0
- maxframe/codegen/spe/tensor/datasource.py +165 -0
- maxframe/codegen/spe/tensor/extensions.py +35 -0
- maxframe/codegen/spe/tensor/fetch.py +26 -0
- maxframe/codegen/spe/tensor/indexing.py +63 -0
- maxframe/codegen/spe/tensor/linalg.py +63 -0
- maxframe/codegen/spe/tensor/merge.py +31 -0
- maxframe/codegen/spe/tensor/misc.py +121 -0
- maxframe/codegen/spe/tensor/random.py +29 -0
- maxframe/codegen/spe/tensor/reduction.py +39 -0
- maxframe/codegen/spe/tensor/reshape.py +26 -0
- maxframe/codegen/spe/tensor/sort.py +42 -0
- maxframe/codegen/spe/tensor/special.py +35 -0
- maxframe/codegen/spe/tensor/statistics.py +24 -0
- maxframe/codegen/spe/tensor/tests/__init__.py +13 -0
- maxframe/codegen/spe/tensor/tests/test_arithmetic.py +103 -0
- maxframe/codegen/spe/tensor/tests/test_datasource.py +99 -0
- maxframe/codegen/spe/tensor/tests/test_extensions.py +37 -0
- maxframe/codegen/spe/tensor/tests/test_indexing.py +44 -0
- maxframe/codegen/spe/tensor/tests/test_linalg.py +38 -0
- maxframe/codegen/spe/tensor/tests/test_merge.py +28 -0
- maxframe/codegen/spe/tensor/tests/test_misc.py +94 -0
- maxframe/codegen/spe/tensor/tests/test_random.py +55 -0
- maxframe/codegen/spe/tensor/tests/test_reduction.py +65 -0
- maxframe/codegen/spe/tensor/tests/test_reshape.py +39 -0
- maxframe/codegen/spe/tensor/tests/test_sort.py +49 -0
- maxframe/codegen/spe/tensor/tests/test_special.py +28 -0
- maxframe/codegen/spe/tensor/tests/test_statistics.py +29 -0
- maxframe/codegen/spe/tests/__init__.py +13 -0
- maxframe/codegen/spe/tests/test_remote.py +29 -0
- maxframe/codegen/spe/tests/test_spe_codegen.py +141 -0
- maxframe/codegen/spe/utils.py +54 -0
- maxframe/codegen/tests/__init__.py +13 -0
- maxframe/{tests → codegen/tests}/test_codegen.py +3 -5
- maxframe/config/__init__.py +1 -1
- maxframe/config/config.py +50 -23
- maxframe/config/tests/test_config.py +4 -12
- maxframe/config/validators.py +5 -0
- maxframe/conftest.py +38 -10
- maxframe/core/__init__.py +1 -0
- maxframe/core/context.py +110 -0
- maxframe/core/entity/__init__.py +1 -0
- maxframe/core/entity/core.py +0 -7
- maxframe/core/entity/objects.py +19 -5
- maxframe/core/entity/output_types.py +11 -0
- maxframe/core/entity/tests/test_objects.py +11 -12
- maxframe/core/entity/tileables.py +3 -1
- maxframe/core/entity/utils.py +15 -0
- maxframe/core/graph/__init__.py +6 -1
- maxframe/core/graph/builder/base.py +5 -1
- maxframe/core/graph/core.cp311-win32.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.cp311-win32.pyd +0 -0
- maxframe/lib/sparse/__init__.py +10 -15
- maxframe/lib/sparse/array.py +45 -33
- maxframe/lib/sparse/core.py +0 -2
- maxframe/lib/sparse/linalg.py +31 -0
- maxframe/lib/sparse/matrix.py +5 -2
- maxframe/lib/sparse/tests/__init__.py +0 -2
- maxframe/lib/sparse/tests/test_sparse.py +53 -53
- maxframe/lib/sparse/vector.py +0 -2
- maxframe/mixin.py +59 -2
- maxframe/opcodes.py +13 -5
- maxframe/protocol.py +67 -14
- maxframe/remote/core.py +16 -14
- maxframe/remote/run_script.py +6 -3
- maxframe/serialization/__init__.py +2 -0
- maxframe/serialization/core.cp311-win32.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
|
@@ -0,0 +1,372 @@
|
|
|
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 enum
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
import pandas as pd
|
|
19
|
+
|
|
20
|
+
from ....core import OutputType
|
|
21
|
+
from ....dataframe import DataFrame as MFDataFrame
|
|
22
|
+
from ....dataframe import Series as MFSeries
|
|
23
|
+
from ....errors import TileableNotExecutedError
|
|
24
|
+
from ....lib.version import parse as parse_version
|
|
25
|
+
from ....tensor import tensor as mf_tensor
|
|
26
|
+
from ..models import ModelApplyChunk, ModelWithEval, ModelWithEvalData, to_remote_model
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class LGBMModelType(enum.Enum):
|
|
30
|
+
CLASSIFIER = 0
|
|
31
|
+
REGRESSOR = 1
|
|
32
|
+
RANKER = 2
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
_model_type_to_model = dict()
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def get_model_cls_from_type(model_type: LGBMModelType):
|
|
39
|
+
import lightgbm
|
|
40
|
+
|
|
41
|
+
if not _model_type_to_model:
|
|
42
|
+
_model_type_to_model.update(
|
|
43
|
+
{
|
|
44
|
+
LGBMModelType.CLASSIFIER: lightgbm.LGBMClassifier,
|
|
45
|
+
LGBMModelType.REGRESSOR: lightgbm.LGBMRegressor,
|
|
46
|
+
LGBMModelType.RANKER: lightgbm.LGBMRanker,
|
|
47
|
+
}
|
|
48
|
+
)
|
|
49
|
+
return _model_type_to_model[model_type]
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class BoosterData(ModelWithEvalData):
|
|
53
|
+
@staticmethod
|
|
54
|
+
def _calc_feature_importance(bst, importance_type="split", iteration=None):
|
|
55
|
+
return bst.feature_importance(
|
|
56
|
+
importance_type=importance_type, iteration=iteration
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
def feature_importance(self, importance_type="split", iteration=None):
|
|
60
|
+
op = ModelApplyChunk(
|
|
61
|
+
func=self._calc_feature_importance, output_types=[OutputType.tensor]
|
|
62
|
+
)
|
|
63
|
+
params = {
|
|
64
|
+
"shape": (np.nan,),
|
|
65
|
+
"dtype": np.dtype(np.float32 if importance_type == "gain" else np.int32),
|
|
66
|
+
}
|
|
67
|
+
return op(self, [params], importance_type=importance_type, iteration=iteration)[
|
|
68
|
+
0
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
def predict(
|
|
72
|
+
self,
|
|
73
|
+
data,
|
|
74
|
+
start_iteration=0,
|
|
75
|
+
num_iteration=None,
|
|
76
|
+
raw_score=False,
|
|
77
|
+
pred_leaf=False,
|
|
78
|
+
pred_contrib=False,
|
|
79
|
+
data_has_header=False,
|
|
80
|
+
validate_features=False,
|
|
81
|
+
**kwargs,
|
|
82
|
+
):
|
|
83
|
+
from ._predict import predict
|
|
84
|
+
|
|
85
|
+
return predict(
|
|
86
|
+
self,
|
|
87
|
+
data,
|
|
88
|
+
start_iteration=start_iteration,
|
|
89
|
+
num_iteration=num_iteration,
|
|
90
|
+
raw_score=raw_score,
|
|
91
|
+
pred_leaf=pred_leaf,
|
|
92
|
+
pred_contrib=pred_contrib,
|
|
93
|
+
data_has_header=data_has_header,
|
|
94
|
+
validate_features=validate_features,
|
|
95
|
+
**kwargs,
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
class Booster(ModelWithEval):
|
|
100
|
+
pass
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
class LGBMScikitLearnBase:
|
|
104
|
+
_default_objective = None
|
|
105
|
+
|
|
106
|
+
def __init__(self, *args, **kwargs):
|
|
107
|
+
import lightgbm
|
|
108
|
+
|
|
109
|
+
if args and isinstance(args[0], (lightgbm.LGBMModel, lightgbm.Booster)):
|
|
110
|
+
if isinstance(args[0], lightgbm.LGBMModel):
|
|
111
|
+
booster = args[0].booster_
|
|
112
|
+
self._objective = args[0].objective
|
|
113
|
+
else:
|
|
114
|
+
booster = args[0]
|
|
115
|
+
self._objective = (
|
|
116
|
+
args[0].params.get("objective") or self._default_objective
|
|
117
|
+
)
|
|
118
|
+
self._Booster = to_remote_model(booster, model_cls=Booster)
|
|
119
|
+
else:
|
|
120
|
+
super().__init__(*args, **kwargs)
|
|
121
|
+
|
|
122
|
+
def __repr__(self):
|
|
123
|
+
try:
|
|
124
|
+
local_model = self.fetch()
|
|
125
|
+
return repr(local_model)
|
|
126
|
+
except TileableNotExecutedError:
|
|
127
|
+
return f"<{type(self).__name__} unexecuted>"
|
|
128
|
+
|
|
129
|
+
@classmethod
|
|
130
|
+
def _fix_verbose_args(cls, kwds, params):
|
|
131
|
+
if "verbose" not in kwds:
|
|
132
|
+
return
|
|
133
|
+
|
|
134
|
+
import lightgbm
|
|
135
|
+
|
|
136
|
+
if parse_version(lightgbm.__version__).major >= 4:
|
|
137
|
+
params["verbose"] = kwds.pop("verbose")
|
|
138
|
+
|
|
139
|
+
@classmethod
|
|
140
|
+
def _get_lgbm_class(cls):
|
|
141
|
+
try:
|
|
142
|
+
return getattr(cls, "_lgbm_class")
|
|
143
|
+
except AttributeError:
|
|
144
|
+
lgbm_class = next(
|
|
145
|
+
base for base in cls.__bases__ if base.__module__.startswith("lightgbm")
|
|
146
|
+
)
|
|
147
|
+
cls._lgbm_class = lgbm_class
|
|
148
|
+
return lgbm_class
|
|
149
|
+
|
|
150
|
+
@classmethod
|
|
151
|
+
def _get_param_names(cls):
|
|
152
|
+
return cls._get_lgbm_class()._get_param_names()
|
|
153
|
+
|
|
154
|
+
@staticmethod
|
|
155
|
+
def _copy_extra_params(source, dest):
|
|
156
|
+
params = source.get_params()
|
|
157
|
+
attributes = source.__dict__
|
|
158
|
+
extra_param_names = set(attributes.keys()).difference(params.keys())
|
|
159
|
+
for name in extra_param_names:
|
|
160
|
+
setattr(dest, name, attributes[name])
|
|
161
|
+
|
|
162
|
+
@staticmethod
|
|
163
|
+
def _convert_tileable(obj):
|
|
164
|
+
if isinstance(obj, np.ndarray):
|
|
165
|
+
return mf_tensor(obj)
|
|
166
|
+
elif isinstance(obj, pd.DataFrame):
|
|
167
|
+
return MFDataFrame(obj)
|
|
168
|
+
elif isinstance(obj, pd.Series):
|
|
169
|
+
return MFSeries(obj)
|
|
170
|
+
return obj
|
|
171
|
+
|
|
172
|
+
@classmethod
|
|
173
|
+
def _construct_dataset(
|
|
174
|
+
cls, X, y, sample_weight, init_score, group, params, categorical_feature="auto"
|
|
175
|
+
):
|
|
176
|
+
from .dataset import Dataset
|
|
177
|
+
|
|
178
|
+
return Dataset(
|
|
179
|
+
cls._convert_tileable(X),
|
|
180
|
+
label=cls._convert_tileable(y),
|
|
181
|
+
weight=cls._convert_tileable(sample_weight),
|
|
182
|
+
group=group,
|
|
183
|
+
init_score=cls._convert_tileable(init_score),
|
|
184
|
+
params=params,
|
|
185
|
+
categorical_feature=categorical_feature,
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
def fit(
|
|
189
|
+
self,
|
|
190
|
+
X,
|
|
191
|
+
y,
|
|
192
|
+
*,
|
|
193
|
+
sample_weight=None,
|
|
194
|
+
init_score=None,
|
|
195
|
+
group=None,
|
|
196
|
+
eval_set=None,
|
|
197
|
+
eval_names=None,
|
|
198
|
+
eval_sample_weight=None,
|
|
199
|
+
eval_init_score=None,
|
|
200
|
+
eval_group=None,
|
|
201
|
+
eval_metric=None,
|
|
202
|
+
early_stopping_rounds=None,
|
|
203
|
+
verbose=True,
|
|
204
|
+
feature_name="auto",
|
|
205
|
+
categorical_feature="auto",
|
|
206
|
+
callbacks=None,
|
|
207
|
+
init_model=None,
|
|
208
|
+
num_class=None,
|
|
209
|
+
**kwargs,
|
|
210
|
+
):
|
|
211
|
+
"""
|
|
212
|
+
unsupported features:
|
|
213
|
+
1. class weights
|
|
214
|
+
2. validation of dataframe inputs
|
|
215
|
+
3. eval_metric
|
|
216
|
+
4. fobj
|
|
217
|
+
5. feval
|
|
218
|
+
"""
|
|
219
|
+
from ._train import train
|
|
220
|
+
|
|
221
|
+
session = kwargs.pop("session", None)
|
|
222
|
+
run_kwargs = kwargs.pop("run_kwargs", dict())
|
|
223
|
+
|
|
224
|
+
self._n_features = X.shape[1]
|
|
225
|
+
if self._objective is None:
|
|
226
|
+
self._objective = self._default_objective
|
|
227
|
+
|
|
228
|
+
self._evals_result = {}
|
|
229
|
+
params = self.get_params()
|
|
230
|
+
self._fix_verbose_args(kwargs, params)
|
|
231
|
+
|
|
232
|
+
params.pop("silent", None)
|
|
233
|
+
params.pop("importance_type", None)
|
|
234
|
+
params.pop("n_estimators", None)
|
|
235
|
+
params.pop("class_weight", None)
|
|
236
|
+
params.pop("objective", None)
|
|
237
|
+
|
|
238
|
+
if isinstance(params["random_state"], np.random.RandomState):
|
|
239
|
+
params["random_state"] = params["random_state"].randint(
|
|
240
|
+
np.iinfo(np.int32).max
|
|
241
|
+
)
|
|
242
|
+
self._n_classes = num_class or 2
|
|
243
|
+
if self._n_classes is not None and self._n_classes > 2:
|
|
244
|
+
params.pop("num_class", None)
|
|
245
|
+
params["num_class"] = self._n_classes
|
|
246
|
+
params["objective"] = self._objective
|
|
247
|
+
|
|
248
|
+
train_set = self._construct_dataset(
|
|
249
|
+
X,
|
|
250
|
+
y,
|
|
251
|
+
sample_weight,
|
|
252
|
+
init_score,
|
|
253
|
+
group,
|
|
254
|
+
params,
|
|
255
|
+
categorical_feature=categorical_feature,
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
valid_sets = []
|
|
259
|
+
if eval_set is not None:
|
|
260
|
+
|
|
261
|
+
def _get_meta_data(collection, name, i):
|
|
262
|
+
if collection is None:
|
|
263
|
+
return None
|
|
264
|
+
elif isinstance(collection, list):
|
|
265
|
+
return collection[i] if len(collection) > i else None
|
|
266
|
+
elif isinstance(collection, dict):
|
|
267
|
+
return collection.get(i, None)
|
|
268
|
+
else:
|
|
269
|
+
raise TypeError("{} should be dict or list".format(name))
|
|
270
|
+
|
|
271
|
+
if isinstance(eval_set, tuple):
|
|
272
|
+
eval_set = [eval_set]
|
|
273
|
+
for i, valid_data in enumerate(eval_set):
|
|
274
|
+
# reduce cost for prediction training data
|
|
275
|
+
if valid_data[0] is X and valid_data[1] is y:
|
|
276
|
+
valid_set = train_set
|
|
277
|
+
else:
|
|
278
|
+
valid_weight = _get_meta_data(
|
|
279
|
+
eval_sample_weight, "eval_sample_weight", i
|
|
280
|
+
)
|
|
281
|
+
valid_init_score = _get_meta_data(
|
|
282
|
+
eval_init_score, "eval_init_score", i
|
|
283
|
+
)
|
|
284
|
+
valid_group = _get_meta_data(eval_group, "eval_group", i)
|
|
285
|
+
valid_set = self._construct_dataset(
|
|
286
|
+
valid_data[0],
|
|
287
|
+
valid_data[1],
|
|
288
|
+
valid_weight,
|
|
289
|
+
valid_init_score,
|
|
290
|
+
valid_group,
|
|
291
|
+
params,
|
|
292
|
+
)
|
|
293
|
+
valid_sets.append(valid_set)
|
|
294
|
+
|
|
295
|
+
self._Booster = train(
|
|
296
|
+
params,
|
|
297
|
+
train_set,
|
|
298
|
+
num_boost_round=self.n_estimators,
|
|
299
|
+
valid_sets=valid_sets,
|
|
300
|
+
valid_names=eval_names,
|
|
301
|
+
early_stopping_rounds=early_stopping_rounds,
|
|
302
|
+
evals_result=self._evals_result,
|
|
303
|
+
verbose_eval=verbose,
|
|
304
|
+
feature_name=feature_name,
|
|
305
|
+
categorical_feature=categorical_feature,
|
|
306
|
+
callbacks=callbacks,
|
|
307
|
+
init_model=init_model,
|
|
308
|
+
session=session,
|
|
309
|
+
run_kwargs=run_kwargs,
|
|
310
|
+
**kwargs,
|
|
311
|
+
)
|
|
312
|
+
self.fitted_ = True
|
|
313
|
+
return self
|
|
314
|
+
|
|
315
|
+
def predict(
|
|
316
|
+
self,
|
|
317
|
+
X,
|
|
318
|
+
raw_score=False,
|
|
319
|
+
start_iteration=0,
|
|
320
|
+
num_iteration=None,
|
|
321
|
+
pred_leaf=False,
|
|
322
|
+
pred_contrib=False,
|
|
323
|
+
**kwargs,
|
|
324
|
+
):
|
|
325
|
+
return self._Booster.predict(
|
|
326
|
+
X,
|
|
327
|
+
raw_score=raw_score,
|
|
328
|
+
start_iteration=start_iteration,
|
|
329
|
+
num_iteration=num_iteration,
|
|
330
|
+
pred_leaf=pred_leaf,
|
|
331
|
+
pred_contrib=pred_contrib,
|
|
332
|
+
**kwargs,
|
|
333
|
+
)
|
|
334
|
+
|
|
335
|
+
@property
|
|
336
|
+
def feature_importances_(self):
|
|
337
|
+
importances = self._Booster.feature_importance(
|
|
338
|
+
importance_type=self.importance_type
|
|
339
|
+
)
|
|
340
|
+
importances.params = {"shape": (self._n_features,)}
|
|
341
|
+
return importances
|
|
342
|
+
|
|
343
|
+
def execute(self, session=None, run_kwargs=None):
|
|
344
|
+
self._Booster.execute(session=session, run_kwargs=run_kwargs)
|
|
345
|
+
return self
|
|
346
|
+
|
|
347
|
+
def fetch(self, session=None, run_kwargs=None):
|
|
348
|
+
import lightgbm
|
|
349
|
+
|
|
350
|
+
engine_kw = {"session": session, "run_kwargs": run_kwargs or dict()}
|
|
351
|
+
booster = self._Booster.fetch(**engine_kw)
|
|
352
|
+
if not hasattr(self, "_le"):
|
|
353
|
+
le = None
|
|
354
|
+
else:
|
|
355
|
+
try:
|
|
356
|
+
le = self._le.fetch(**engine_kw)
|
|
357
|
+
except TileableNotExecutedError:
|
|
358
|
+
le = self._le.execute(**engine_kw).fetch(**engine_kw)
|
|
359
|
+
remote_bst, self._Booster = self._Booster, booster
|
|
360
|
+
try:
|
|
361
|
+
local_cls = getattr(lightgbm, type(self).__name__)
|
|
362
|
+
local_model = local_cls(**self.get_params(deep=True))
|
|
363
|
+
local_model._Booster = booster
|
|
364
|
+
local_model._n_features = booster.num_feature()
|
|
365
|
+
if le is not None:
|
|
366
|
+
# need classes and label encoder for classifiers
|
|
367
|
+
local_model._n_classes = booster.params.get("num_class", 2)
|
|
368
|
+
local_model._le = le
|
|
369
|
+
local_model.fitted_ = True
|
|
370
|
+
return local_model
|
|
371
|
+
finally:
|
|
372
|
+
self._Booster = remote_bst
|
|
@@ -0,0 +1,153 @@
|
|
|
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 typing import List
|
|
16
|
+
|
|
17
|
+
from .... import opcodes
|
|
18
|
+
from ....core import EntityData
|
|
19
|
+
from ....core.entity.output_types import get_output_types
|
|
20
|
+
from ....core.operator.base import Operator
|
|
21
|
+
from ....core.operator.core import TileableOperatorMixin
|
|
22
|
+
from ....dataframe.core import DATAFRAME_TYPE
|
|
23
|
+
from ....serialization.serializables import BoolField, KeyField, ListField
|
|
24
|
+
from ....serialization.serializables.field import AnyField
|
|
25
|
+
from ....tensor import tensor as astensor
|
|
26
|
+
from ....tensor.core import TENSOR_TYPE
|
|
27
|
+
from ....typing_ import TileableType
|
|
28
|
+
from ...utils import convert_to_tensor_or_dataframe
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class ToLGBMDataset(Operator, TileableOperatorMixin):
|
|
32
|
+
_op_type_ = opcodes.TO_LGBM_DATASET
|
|
33
|
+
|
|
34
|
+
data = KeyField("data", default=None)
|
|
35
|
+
label = KeyField("label", default=None)
|
|
36
|
+
reference = KeyField("reference", default=None)
|
|
37
|
+
weight = KeyField("weight", default=None)
|
|
38
|
+
init_score = KeyField("init_score", default=None)
|
|
39
|
+
group = AnyField("group", default=None)
|
|
40
|
+
feature_name = ListField("feature_name", default=None)
|
|
41
|
+
categorical_feature = ListField("categorical_feature", default=None)
|
|
42
|
+
params = AnyField("params", default=None)
|
|
43
|
+
free_raw_data = BoolField("free_raw_data", default=None)
|
|
44
|
+
position = AnyField("position", default=None)
|
|
45
|
+
# if to collocate the data, label and weight
|
|
46
|
+
collocate = BoolField("collocate", default=False)
|
|
47
|
+
|
|
48
|
+
@property
|
|
49
|
+
def output_limit(self):
|
|
50
|
+
if self.collocate:
|
|
51
|
+
return 1 + sum(bool(x) for x in [self.label, self.weight, self.init_score])
|
|
52
|
+
return 1
|
|
53
|
+
|
|
54
|
+
@classmethod
|
|
55
|
+
def _set_inputs(cls, op: "ToLGBMDataset", inputs: List[EntityData]):
|
|
56
|
+
super()._set_inputs(op, inputs)
|
|
57
|
+
if op.data is not None:
|
|
58
|
+
op.data = op._inputs[0]
|
|
59
|
+
has_label = op.label is not None
|
|
60
|
+
if has_label:
|
|
61
|
+
op.label = op._inputs[1]
|
|
62
|
+
if op.weight is not None:
|
|
63
|
+
i = 1 if not has_label else 2
|
|
64
|
+
op.weight = op._inputs[i]
|
|
65
|
+
if op.init_score is not None:
|
|
66
|
+
op.init_score = op._inputs[-1]
|
|
67
|
+
|
|
68
|
+
@staticmethod
|
|
69
|
+
def _get_kw(obj):
|
|
70
|
+
if isinstance(obj, TENSOR_TYPE):
|
|
71
|
+
return {"shape": obj.shape, "dtype": obj.dtype, "order": obj.order}
|
|
72
|
+
else:
|
|
73
|
+
return {
|
|
74
|
+
"shape": obj.shape,
|
|
75
|
+
"dtypes": obj.dtypes,
|
|
76
|
+
"index_value": obj.index_value,
|
|
77
|
+
"columns_value": obj.columns_value,
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
def __call__(self):
|
|
81
|
+
inputs = [self.data]
|
|
82
|
+
kw = self._get_kw(self.data)
|
|
83
|
+
if self.label is not None:
|
|
84
|
+
inputs.append(self.label)
|
|
85
|
+
if self.weight is not None:
|
|
86
|
+
inputs.append(self.weight)
|
|
87
|
+
if self.init_score is not None:
|
|
88
|
+
inputs.append(self.init_score)
|
|
89
|
+
|
|
90
|
+
return self.new_tileable(inputs, **kw)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def check_data(data):
|
|
94
|
+
data = convert_to_tensor_or_dataframe(data)
|
|
95
|
+
if data.ndim != 2:
|
|
96
|
+
raise ValueError(f"Expecting 2-d data, got: {data.ndim}-d")
|
|
97
|
+
|
|
98
|
+
return data
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def check_array_like(y: TileableType, name: str) -> TileableType:
|
|
102
|
+
if y is None:
|
|
103
|
+
return
|
|
104
|
+
y = convert_to_tensor_or_dataframe(y)
|
|
105
|
+
if isinstance(y, DATAFRAME_TYPE):
|
|
106
|
+
y = y.iloc[:, 0]
|
|
107
|
+
return astensor(y)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def to_lgbm_dataset(
|
|
111
|
+
data,
|
|
112
|
+
label=None,
|
|
113
|
+
reference=None,
|
|
114
|
+
weight=None,
|
|
115
|
+
group=None,
|
|
116
|
+
init_score=None,
|
|
117
|
+
feature_name="auto",
|
|
118
|
+
categorical_feature="auto",
|
|
119
|
+
params=None,
|
|
120
|
+
free_raw_data=True,
|
|
121
|
+
position=None,
|
|
122
|
+
):
|
|
123
|
+
data = check_data(data)
|
|
124
|
+
label = check_array_like(label, "label")
|
|
125
|
+
weight = check_array_like(weight, "weight")
|
|
126
|
+
init_score = check_array_like(init_score, "init_score")
|
|
127
|
+
|
|
128
|
+
if weight is not None and weight.ndim > 1:
|
|
129
|
+
raise ValueError("weight must be 1-dimensional")
|
|
130
|
+
|
|
131
|
+
# If not multiple outputs, try to collect the chunks on same worker into one
|
|
132
|
+
# to feed the data into LightGBM for training.
|
|
133
|
+
op = ToLGBMDataset(
|
|
134
|
+
data=data,
|
|
135
|
+
label=label,
|
|
136
|
+
reference=reference,
|
|
137
|
+
weight=weight,
|
|
138
|
+
group=group,
|
|
139
|
+
init_score=init_score,
|
|
140
|
+
feature_name=None if feature_name == "auto" else feature_name,
|
|
141
|
+
categorical_feature=None
|
|
142
|
+
if categorical_feature == "auto"
|
|
143
|
+
else categorical_feature,
|
|
144
|
+
params=params,
|
|
145
|
+
free_raw_data=free_raw_data,
|
|
146
|
+
position=position,
|
|
147
|
+
gpu=data.op.gpu,
|
|
148
|
+
_output_types=get_output_types(data),
|
|
149
|
+
)
|
|
150
|
+
return op()
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
Dataset = to_lgbm_dataset
|
|
@@ -0,0 +1,29 @@
|
|
|
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 ..utils import make_import_error_func
|
|
16
|
+
from .core import LGBMScikitLearnBase
|
|
17
|
+
|
|
18
|
+
try:
|
|
19
|
+
import lightgbm
|
|
20
|
+
except ImportError:
|
|
21
|
+
lightgbm = None
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
if not lightgbm:
|
|
25
|
+
LGBMRegressor = make_import_error_func("lightgbm")
|
|
26
|
+
else:
|
|
27
|
+
|
|
28
|
+
class LGBMRegressor(LGBMScikitLearnBase, lightgbm.LGBMRegressor):
|
|
29
|
+
_default_objective = "regression"
|
|
@@ -0,0 +1,13 @@
|
|
|
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.
|
|
@@ -0,0 +1,58 @@
|
|
|
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 inspect
|
|
16
|
+
|
|
17
|
+
import pytest
|
|
18
|
+
|
|
19
|
+
from ..callback import (
|
|
20
|
+
EarlyStoppingCallback,
|
|
21
|
+
LGBMTrainingCallback,
|
|
22
|
+
early_stopping,
|
|
23
|
+
reset_parameter,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
try:
|
|
27
|
+
from lightgbm.callback import _EarlyStoppingCallback
|
|
28
|
+
except ImportError:
|
|
29
|
+
try:
|
|
30
|
+
from lightgbm.callback import early_stopping as _EarlyStoppingCallback
|
|
31
|
+
except ImportError:
|
|
32
|
+
pytestmark = pytest.mark.skip("Need lightgbm to run the test")
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def test_lgbm_training_callbacks():
|
|
36
|
+
early_stopping_cb = early_stopping(stopping_rounds=5)
|
|
37
|
+
assert not early_stopping_cb.has_custom_code()
|
|
38
|
+
|
|
39
|
+
local_early_stopping_cb = early_stopping_cb.to_local()
|
|
40
|
+
if isinstance(_EarlyStoppingCallback, type):
|
|
41
|
+
assert isinstance(local_early_stopping_cb, _EarlyStoppingCallback)
|
|
42
|
+
assert local_early_stopping_cb.stopping_rounds == 5
|
|
43
|
+
else:
|
|
44
|
+
assert local_early_stopping_cb.__qualname__.startswith(
|
|
45
|
+
_EarlyStoppingCallback.__name__
|
|
46
|
+
)
|
|
47
|
+
cb_vars = inspect.getclosurevars(local_early_stopping_cb).nonlocals
|
|
48
|
+
assert cb_vars["stopping_rounds"] == 5
|
|
49
|
+
|
|
50
|
+
rmt_early_stopping_cb = LGBMTrainingCallback.from_local(local_early_stopping_cb)
|
|
51
|
+
assert isinstance(rmt_early_stopping_cb, EarlyStoppingCallback)
|
|
52
|
+
assert rmt_early_stopping_cb.stopping_rounds == 5
|
|
53
|
+
|
|
54
|
+
lr_sch_cb = reset_parameter(a=[0.5, 0.4, 0.1])
|
|
55
|
+
assert not lr_sch_cb.has_custom_code()
|
|
56
|
+
|
|
57
|
+
lr_sch_cb = reset_parameter(a=lambda x: x * 0.1)
|
|
58
|
+
assert lr_sch_cb.has_custom_code()
|
|
@@ -34,8 +34,25 @@ class DashScopeLLMMixin(Serializable):
|
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
class DashScopeTextLLM(TextLLM, DashScopeLLMMixin):
|
|
37
|
+
"""
|
|
38
|
+
DashScope text LLM.
|
|
39
|
+
"""
|
|
40
|
+
|
|
37
41
|
api_key_resource = StringField("api_key_resource", default=None)
|
|
38
42
|
|
|
43
|
+
def __init__(self, name: str, api_key_resource: str):
|
|
44
|
+
"""
|
|
45
|
+
Initialize a DashScope text LLM.
|
|
46
|
+
|
|
47
|
+
Parameters
|
|
48
|
+
----------
|
|
49
|
+
name : str
|
|
50
|
+
The LLM name to use, check DashScope for `available models <https://help.aliyun.com/zh/model-studio/getting-started/models>`_.
|
|
51
|
+
api_key_resource : str
|
|
52
|
+
The MaxCompute resource file name containing the DashScope API key.
|
|
53
|
+
"""
|
|
54
|
+
super().__init__(name=name, api_key_resource=api_key_resource)
|
|
55
|
+
|
|
39
56
|
def generate(
|
|
40
57
|
self,
|
|
41
58
|
data,
|
|
@@ -50,8 +67,25 @@ class DashScopeTextLLM(TextLLM, DashScopeLLMMixin):
|
|
|
50
67
|
|
|
51
68
|
|
|
52
69
|
class DashScopeMultiModalLLM(MultiModalLLM, DashScopeLLMMixin):
|
|
70
|
+
"""
|
|
71
|
+
DashScope multi-modal LLM.
|
|
72
|
+
"""
|
|
73
|
+
|
|
53
74
|
api_key_resource = StringField("api_key_resource", default=None)
|
|
54
75
|
|
|
76
|
+
def __init__(self, name: str, api_key_resource: str):
|
|
77
|
+
"""
|
|
78
|
+
Initialize a DashScope multi-modal LLM.
|
|
79
|
+
|
|
80
|
+
Parameters
|
|
81
|
+
----------
|
|
82
|
+
name : str
|
|
83
|
+
The LLM name to use, check DashScope for `available models <https://help.aliyun.com/zh/model-studio/getting-started/models>`_.
|
|
84
|
+
api_key_resource : str
|
|
85
|
+
The MaxCompute resource file name containing the DashScope API key.
|
|
86
|
+
"""
|
|
87
|
+
super().__init__(name=name, api_key_resource=api_key_resource)
|
|
88
|
+
|
|
55
89
|
def generate(
|
|
56
90
|
self,
|
|
57
91
|
data,
|
|
@@ -27,6 +27,21 @@ class ManagedLLMTextGenOperator(LLMTextGenOperator):
|
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
class ManagedTextLLM(TextLLM):
|
|
30
|
+
"""
|
|
31
|
+
Managed text LLM by MaxFrame.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
def __init__(self, name: str):
|
|
35
|
+
"""
|
|
36
|
+
Initialize a managed text LLM.
|
|
37
|
+
|
|
38
|
+
Parameters
|
|
39
|
+
----------
|
|
40
|
+
name : str
|
|
41
|
+
The managed text LLM name to use.
|
|
42
|
+
"""
|
|
43
|
+
super().__init__(name=name)
|
|
44
|
+
|
|
30
45
|
def generate(
|
|
31
46
|
self,
|
|
32
47
|
data,
|