maxframe 2.4.0rc1__cp312-cp312-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.
- maxframe/__init__.py +33 -0
- maxframe/_utils.cp312-win32.pyd +0 -0
- maxframe/_utils.pxd +33 -0
- maxframe/_utils.pyi +21 -0
- maxframe/_utils.pyx +561 -0
- maxframe/codegen/__init__.py +27 -0
- maxframe/codegen/core.py +597 -0
- maxframe/codegen/spe/__init__.py +16 -0
- maxframe/codegen/spe/core.py +307 -0
- maxframe/codegen/spe/dataframe/__init__.py +38 -0
- maxframe/codegen/spe/dataframe/accessors/__init__.py +15 -0
- maxframe/codegen/spe/dataframe/accessors/base.py +71 -0
- maxframe/codegen/spe/dataframe/accessors/dict_.py +89 -0
- maxframe/codegen/spe/dataframe/accessors/list_.py +44 -0
- maxframe/codegen/spe/dataframe/accessors/struct_.py +28 -0
- maxframe/codegen/spe/dataframe/arithmetic.py +89 -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 +312 -0
- maxframe/codegen/spe/dataframe/indexing.py +333 -0
- maxframe/codegen/spe/dataframe/merge.py +110 -0
- maxframe/codegen/spe/dataframe/misc.py +264 -0
- maxframe/codegen/spe/dataframe/missing.py +64 -0
- maxframe/codegen/spe/dataframe/reduction.py +183 -0
- maxframe/codegen/spe/dataframe/reshape.py +46 -0
- maxframe/codegen/spe/dataframe/sort.py +104 -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 +304 -0
- maxframe/codegen/spe/dataframe/tests/accessors/test_list.py +134 -0
- maxframe/codegen/spe/dataframe/tests/accessors/test_struct.py +75 -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 +95 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_indexing.py +39 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_loc.py +35 -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 +202 -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 +288 -0
- maxframe/codegen/spe/dataframe/tests/test_merge.py +426 -0
- maxframe/codegen/spe/dataframe/tests/test_reduction.py +117 -0
- maxframe/codegen/spe/dataframe/tests/test_reshape.py +79 -0
- maxframe/codegen/spe/dataframe/tests/test_sort.py +179 -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 +55 -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 +161 -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 +99 -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/_ranking.py +76 -0
- maxframe/codegen/spe/learn/metrics/pairwise.py +51 -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/metrics/tests/test_pairwise.py +36 -0
- maxframe/codegen/spe/learn/metrics/tests/test_ranking.py +59 -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 +31 -0
- maxframe/codegen/spe/tensor/arithmetic.py +95 -0
- maxframe/codegen/spe/tensor/core.py +41 -0
- maxframe/codegen/spe/tensor/datasource.py +166 -0
- maxframe/codegen/spe/tensor/extensions.py +35 -0
- maxframe/codegen/spe/tensor/fetch.py +26 -0
- maxframe/codegen/spe/tensor/fft.py +74 -0
- maxframe/codegen/spe/tensor/indexing.py +63 -0
- maxframe/codegen/spe/tensor/linalg.py +90 -0
- maxframe/codegen/spe/tensor/merge.py +31 -0
- maxframe/codegen/spe/tensor/misc.py +175 -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/spatial.py +45 -0
- maxframe/codegen/spe/tensor/special.py +35 -0
- maxframe/codegen/spe/tensor/statistics.py +68 -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_fft.py +64 -0
- maxframe/codegen/spe/tensor/tests/test_indexing.py +44 -0
- maxframe/codegen/spe/tensor/tests/test_linalg.py +52 -0
- maxframe/codegen/spe/tensor/tests/test_merge.py +28 -0
- maxframe/codegen/spe/tensor/tests/test_misc.py +144 -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_spatial.py +33 -0
- maxframe/codegen/spe/tensor/tests/test_special.py +28 -0
- maxframe/codegen/spe/tensor/tests/test_statistics.py +43 -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 +135 -0
- maxframe/codegen/spe/utils.py +56 -0
- maxframe/codegen/tests/__init__.py +13 -0
- maxframe/codegen/tests/test_codegen.py +67 -0
- maxframe/config/__init__.py +15 -0
- maxframe/config/config.py +630 -0
- maxframe/config/tests/__init__.py +13 -0
- maxframe/config/tests/test_config.py +114 -0
- maxframe/config/tests/test_validators.py +46 -0
- maxframe/config/validators.py +142 -0
- maxframe/conftest.py +261 -0
- maxframe/core/__init__.py +53 -0
- maxframe/core/accessor.py +45 -0
- maxframe/core/base.py +157 -0
- maxframe/core/context.py +110 -0
- maxframe/core/entity/__init__.py +34 -0
- maxframe/core/entity/core.py +150 -0
- maxframe/core/entity/executable.py +337 -0
- maxframe/core/entity/objects.py +115 -0
- maxframe/core/entity/output_types.py +101 -0
- maxframe/core/entity/tests/__init__.py +13 -0
- maxframe/core/entity/tests/test_objects.py +42 -0
- maxframe/core/entity/tileables.py +376 -0
- maxframe/core/entity/utils.py +39 -0
- maxframe/core/graph/__init__.py +22 -0
- maxframe/core/graph/builder/__init__.py +15 -0
- maxframe/core/graph/builder/base.py +90 -0
- maxframe/core/graph/builder/tileable.py +34 -0
- maxframe/core/graph/builder/utils.py +37 -0
- maxframe/core/graph/core.cp312-win32.pyd +0 -0
- maxframe/core/graph/core.pyx +478 -0
- maxframe/core/graph/entity.py +187 -0
- maxframe/core/graph/tests/__init__.py +13 -0
- maxframe/core/graph/tests/test_graph.py +205 -0
- maxframe/core/mode.py +101 -0
- maxframe/core/operator/__init__.py +32 -0
- maxframe/core/operator/base.py +481 -0
- maxframe/core/operator/core.py +307 -0
- maxframe/core/operator/fetch.py +40 -0
- maxframe/core/operator/objects.py +43 -0
- maxframe/core/operator/shuffle.py +45 -0
- maxframe/core/operator/tests/__init__.py +13 -0
- maxframe/core/operator/tests/test_core.py +64 -0
- maxframe/core/operator/utils.py +68 -0
- maxframe/core/tests/__init__.py +13 -0
- maxframe/core/tests/test_mode.py +75 -0
- maxframe/dataframe/__init__.py +90 -0
- maxframe/dataframe/accessors/__init__.py +20 -0
- maxframe/dataframe/accessors/compat.py +45 -0
- maxframe/dataframe/accessors/datetime_/__init__.py +35 -0
- maxframe/dataframe/accessors/datetime_/accessor.py +67 -0
- maxframe/dataframe/accessors/datetime_/core.py +106 -0
- maxframe/dataframe/accessors/datetime_/tests/__init__.py +13 -0
- maxframe/dataframe/accessors/datetime_/tests/test_datetime_accessor.py +41 -0
- maxframe/dataframe/accessors/dict_/__init__.py +45 -0
- maxframe/dataframe/accessors/dict_/accessor.py +39 -0
- maxframe/dataframe/accessors/dict_/contains.py +72 -0
- maxframe/dataframe/accessors/dict_/core.py +48 -0
- maxframe/dataframe/accessors/dict_/getitem.py +140 -0
- maxframe/dataframe/accessors/dict_/length.py +64 -0
- maxframe/dataframe/accessors/dict_/remove.py +75 -0
- maxframe/dataframe/accessors/dict_/setitem.py +79 -0
- maxframe/dataframe/accessors/dict_/tests/__init__.py +13 -0
- maxframe/dataframe/accessors/dict_/tests/test_dict_accessor.py +168 -0
- maxframe/dataframe/accessors/list_/__init__.py +39 -0
- maxframe/dataframe/accessors/list_/accessor.py +39 -0
- maxframe/dataframe/accessors/list_/core.py +48 -0
- maxframe/dataframe/accessors/list_/getitem.py +128 -0
- maxframe/dataframe/accessors/list_/length.py +64 -0
- maxframe/dataframe/accessors/list_/tests/__init__.py +13 -0
- maxframe/dataframe/accessors/list_/tests/test_list_accessor.py +81 -0
- maxframe/dataframe/accessors/plotting/__init__.py +40 -0
- maxframe/dataframe/accessors/plotting/core.py +78 -0
- maxframe/dataframe/accessors/plotting/tests/__init__.py +13 -0
- maxframe/dataframe/accessors/plotting/tests/test_plotting_accessor.py +136 -0
- maxframe/dataframe/accessors/string_/__init__.py +36 -0
- maxframe/dataframe/accessors/string_/accessor.py +215 -0
- maxframe/dataframe/accessors/string_/core.py +226 -0
- maxframe/dataframe/accessors/string_/tests/__init__.py +13 -0
- maxframe/dataframe/accessors/string_/tests/test_string_accessor.py +73 -0
- maxframe/dataframe/accessors/struct_/__init__.py +39 -0
- maxframe/dataframe/accessors/struct_/accessor.py +39 -0
- maxframe/dataframe/accessors/struct_/core.py +43 -0
- maxframe/dataframe/accessors/struct_/dtypes.py +53 -0
- maxframe/dataframe/accessors/struct_/field.py +123 -0
- maxframe/dataframe/accessors/struct_/tests/__init__.py +13 -0
- maxframe/dataframe/accessors/struct_/tests/test_struct_accessor.py +91 -0
- maxframe/dataframe/arithmetic/__init__.py +373 -0
- maxframe/dataframe/arithmetic/abs.py +33 -0
- maxframe/dataframe/arithmetic/add.py +60 -0
- maxframe/dataframe/arithmetic/arccos.py +28 -0
- maxframe/dataframe/arithmetic/arccosh.py +28 -0
- maxframe/dataframe/arithmetic/arcsin.py +28 -0
- maxframe/dataframe/arithmetic/arcsinh.py +28 -0
- maxframe/dataframe/arithmetic/arctan.py +28 -0
- maxframe/dataframe/arithmetic/arctanh.py +28 -0
- maxframe/dataframe/arithmetic/between.py +106 -0
- maxframe/dataframe/arithmetic/bitwise_and.py +46 -0
- maxframe/dataframe/arithmetic/bitwise_or.py +50 -0
- maxframe/dataframe/arithmetic/bitwise_xor.py +46 -0
- maxframe/dataframe/arithmetic/ceil.py +28 -0
- maxframe/dataframe/arithmetic/core.py +361 -0
- maxframe/dataframe/arithmetic/cos.py +28 -0
- maxframe/dataframe/arithmetic/cosh.py +28 -0
- maxframe/dataframe/arithmetic/degrees.py +28 -0
- maxframe/dataframe/arithmetic/docstring.py +416 -0
- maxframe/dataframe/arithmetic/dot.py +237 -0
- maxframe/dataframe/arithmetic/equal.py +58 -0
- maxframe/dataframe/arithmetic/exp.py +28 -0
- maxframe/dataframe/arithmetic/exp2.py +28 -0
- maxframe/dataframe/arithmetic/expm1.py +28 -0
- maxframe/dataframe/arithmetic/floor.py +28 -0
- maxframe/dataframe/arithmetic/floordiv.py +64 -0
- maxframe/dataframe/arithmetic/greater.py +59 -0
- maxframe/dataframe/arithmetic/greater_equal.py +59 -0
- maxframe/dataframe/arithmetic/invert.py +33 -0
- maxframe/dataframe/arithmetic/is_ufuncs.py +62 -0
- maxframe/dataframe/arithmetic/less.py +57 -0
- maxframe/dataframe/arithmetic/less_equal.py +59 -0
- maxframe/dataframe/arithmetic/log.py +28 -0
- maxframe/dataframe/arithmetic/log10.py +28 -0
- maxframe/dataframe/arithmetic/log2.py +28 -0
- maxframe/dataframe/arithmetic/maximum.py +33 -0
- maxframe/dataframe/arithmetic/minimum.py +33 -0
- maxframe/dataframe/arithmetic/mod.py +60 -0
- maxframe/dataframe/arithmetic/multiply.py +60 -0
- maxframe/dataframe/arithmetic/negative.py +33 -0
- maxframe/dataframe/arithmetic/not_equal.py +58 -0
- maxframe/dataframe/arithmetic/power.py +68 -0
- maxframe/dataframe/arithmetic/radians.py +28 -0
- maxframe/dataframe/arithmetic/round.py +144 -0
- maxframe/dataframe/arithmetic/sin.py +28 -0
- maxframe/dataframe/arithmetic/sinh.py +28 -0
- maxframe/dataframe/arithmetic/sqrt.py +28 -0
- maxframe/dataframe/arithmetic/subtract.py +64 -0
- maxframe/dataframe/arithmetic/tan.py +28 -0
- maxframe/dataframe/arithmetic/tanh.py +28 -0
- maxframe/dataframe/arithmetic/tests/__init__.py +13 -0
- maxframe/dataframe/arithmetic/tests/test_arithmetic.py +747 -0
- maxframe/dataframe/arithmetic/truediv.py +64 -0
- maxframe/dataframe/arithmetic/trunc.py +28 -0
- maxframe/dataframe/core.py +2386 -0
- maxframe/dataframe/datasource/__init__.py +33 -0
- maxframe/dataframe/datasource/core.py +112 -0
- maxframe/dataframe/datasource/dataframe.py +59 -0
- maxframe/dataframe/datasource/date_range.py +512 -0
- maxframe/dataframe/datasource/direct.py +57 -0
- maxframe/dataframe/datasource/from_dict.py +124 -0
- maxframe/dataframe/datasource/from_index.py +58 -0
- maxframe/dataframe/datasource/from_records.py +191 -0
- maxframe/dataframe/datasource/from_tensor.py +503 -0
- maxframe/dataframe/datasource/index.py +117 -0
- maxframe/dataframe/datasource/read_csv.py +534 -0
- maxframe/dataframe/datasource/read_odps_query.py +536 -0
- maxframe/dataframe/datasource/read_odps_table.py +295 -0
- maxframe/dataframe/datasource/read_parquet.py +278 -0
- maxframe/dataframe/datasource/series.py +55 -0
- maxframe/dataframe/datasource/tests/__init__.py +13 -0
- maxframe/dataframe/datasource/tests/test_datasource.py +663 -0
- maxframe/dataframe/datastore/__init__.py +41 -0
- maxframe/dataframe/datastore/core.py +28 -0
- maxframe/dataframe/datastore/direct.py +268 -0
- maxframe/dataframe/datastore/tests/__init__.py +13 -0
- maxframe/dataframe/datastore/tests/test_to_odps.py +99 -0
- maxframe/dataframe/datastore/to_csv.py +219 -0
- maxframe/dataframe/datastore/to_json.py +215 -0
- maxframe/dataframe/datastore/to_odps.py +285 -0
- maxframe/dataframe/datastore/to_parquet.py +121 -0
- maxframe/dataframe/extensions/__init__.py +70 -0
- maxframe/dataframe/extensions/accessor.py +35 -0
- maxframe/dataframe/extensions/apply_chunk.py +733 -0
- maxframe/dataframe/extensions/cartesian_chunk.py +153 -0
- maxframe/dataframe/extensions/collect_kv.py +126 -0
- maxframe/dataframe/extensions/extract_kv.py +177 -0
- maxframe/dataframe/extensions/flatjson.py +133 -0
- maxframe/dataframe/extensions/flatmap.py +329 -0
- maxframe/dataframe/extensions/map_reduce.py +263 -0
- maxframe/dataframe/extensions/rebalance.py +62 -0
- maxframe/dataframe/extensions/reshuffle.py +83 -0
- maxframe/dataframe/extensions/tests/__init__.py +13 -0
- maxframe/dataframe/extensions/tests/test_apply_chunk.py +194 -0
- maxframe/dataframe/extensions/tests/test_extensions.py +198 -0
- maxframe/dataframe/extensions/tests/test_map_reduce.py +135 -0
- maxframe/dataframe/fetch/__init__.py +15 -0
- maxframe/dataframe/fetch/core.py +97 -0
- maxframe/dataframe/groupby/__init__.py +105 -0
- maxframe/dataframe/groupby/aggregation.py +485 -0
- maxframe/dataframe/groupby/apply.py +235 -0
- maxframe/dataframe/groupby/apply_chunk.py +407 -0
- maxframe/dataframe/groupby/core.py +342 -0
- maxframe/dataframe/groupby/cum.py +102 -0
- maxframe/dataframe/groupby/expanding.py +264 -0
- maxframe/dataframe/groupby/extensions.py +26 -0
- maxframe/dataframe/groupby/fill.py +149 -0
- maxframe/dataframe/groupby/getitem.py +105 -0
- maxframe/dataframe/groupby/head.py +115 -0
- maxframe/dataframe/groupby/rank.py +136 -0
- maxframe/dataframe/groupby/rolling.py +206 -0
- maxframe/dataframe/groupby/sample.py +214 -0
- maxframe/dataframe/groupby/shift.py +114 -0
- maxframe/dataframe/groupby/tests/__init__.py +13 -0
- maxframe/dataframe/groupby/tests/test_groupby.py +373 -0
- maxframe/dataframe/groupby/transform.py +264 -0
- maxframe/dataframe/indexing/__init__.py +104 -0
- maxframe/dataframe/indexing/add_prefix_suffix.py +110 -0
- maxframe/dataframe/indexing/align.py +350 -0
- maxframe/dataframe/indexing/at.py +83 -0
- maxframe/dataframe/indexing/droplevel.py +195 -0
- maxframe/dataframe/indexing/filter.py +169 -0
- maxframe/dataframe/indexing/get_level_values.py +76 -0
- maxframe/dataframe/indexing/getitem.py +205 -0
- maxframe/dataframe/indexing/iat.py +82 -0
- maxframe/dataframe/indexing/iloc.py +711 -0
- maxframe/dataframe/indexing/insert.py +118 -0
- maxframe/dataframe/indexing/loc.py +694 -0
- maxframe/dataframe/indexing/reindex.py +541 -0
- maxframe/dataframe/indexing/rename.py +445 -0
- maxframe/dataframe/indexing/rename_axis.py +217 -0
- maxframe/dataframe/indexing/reorder_levels.py +143 -0
- maxframe/dataframe/indexing/reset_index.py +427 -0
- maxframe/dataframe/indexing/sample.py +232 -0
- maxframe/dataframe/indexing/set_axis.py +197 -0
- maxframe/dataframe/indexing/set_index.py +128 -0
- maxframe/dataframe/indexing/setitem.py +133 -0
- maxframe/dataframe/indexing/swaplevel.py +185 -0
- maxframe/dataframe/indexing/take.py +99 -0
- maxframe/dataframe/indexing/tests/__init__.py +13 -0
- maxframe/dataframe/indexing/tests/test_indexing.py +488 -0
- maxframe/dataframe/indexing/truncate.py +140 -0
- maxframe/dataframe/indexing/where.py +300 -0
- maxframe/dataframe/indexing/xs.py +148 -0
- maxframe/dataframe/initializer.py +298 -0
- maxframe/dataframe/merge/__init__.py +53 -0
- maxframe/dataframe/merge/append.py +120 -0
- maxframe/dataframe/merge/combine.py +244 -0
- maxframe/dataframe/merge/combine_first.py +120 -0
- maxframe/dataframe/merge/compare.py +387 -0
- maxframe/dataframe/merge/concat.py +500 -0
- maxframe/dataframe/merge/merge.py +806 -0
- maxframe/dataframe/merge/tests/__init__.py +13 -0
- maxframe/dataframe/merge/tests/test_merge.py +390 -0
- maxframe/dataframe/merge/update.py +271 -0
- maxframe/dataframe/misc/__init__.py +145 -0
- maxframe/dataframe/misc/_duplicate.py +56 -0
- maxframe/dataframe/misc/apply.py +730 -0
- maxframe/dataframe/misc/astype.py +237 -0
- maxframe/dataframe/misc/case_when.py +145 -0
- maxframe/dataframe/misc/check_monotonic.py +84 -0
- maxframe/dataframe/misc/check_unique.py +82 -0
- maxframe/dataframe/misc/clip.py +145 -0
- maxframe/dataframe/misc/cut.py +386 -0
- maxframe/dataframe/misc/describe.py +278 -0
- maxframe/dataframe/misc/diff.py +210 -0
- maxframe/dataframe/misc/drop.py +473 -0
- maxframe/dataframe/misc/drop_duplicates.py +251 -0
- maxframe/dataframe/misc/duplicated.py +292 -0
- maxframe/dataframe/misc/eval.py +730 -0
- maxframe/dataframe/misc/explode.py +171 -0
- maxframe/dataframe/misc/factorize.py +160 -0
- maxframe/dataframe/misc/get_dummies.py +241 -0
- maxframe/dataframe/misc/infer_dtypes.py +251 -0
- maxframe/dataframe/misc/isin.py +220 -0
- maxframe/dataframe/misc/map.py +360 -0
- maxframe/dataframe/misc/memory_usage.py +248 -0
- maxframe/dataframe/misc/pct_change.py +68 -0
- maxframe/dataframe/misc/qcut.py +104 -0
- maxframe/dataframe/misc/rechunk.py +59 -0
- maxframe/dataframe/misc/repeat.py +159 -0
- maxframe/dataframe/misc/select_dtypes.py +104 -0
- maxframe/dataframe/misc/shift.py +259 -0
- maxframe/dataframe/misc/tests/__init__.py +13 -0
- maxframe/dataframe/misc/tests/test_misc.py +649 -0
- maxframe/dataframe/misc/to_numeric.py +181 -0
- maxframe/dataframe/misc/transform.py +346 -0
- maxframe/dataframe/misc/transpose.py +148 -0
- maxframe/dataframe/misc/valid_index.py +115 -0
- maxframe/dataframe/misc/value_counts.py +206 -0
- maxframe/dataframe/missing/__init__.py +53 -0
- maxframe/dataframe/missing/checkna.py +231 -0
- maxframe/dataframe/missing/dropna.py +294 -0
- maxframe/dataframe/missing/fillna.py +283 -0
- maxframe/dataframe/missing/replace.py +446 -0
- maxframe/dataframe/missing/tests/__init__.py +13 -0
- maxframe/dataframe/missing/tests/test_missing.py +90 -0
- maxframe/dataframe/operators.py +231 -0
- maxframe/dataframe/reduction/__init__.py +129 -0
- maxframe/dataframe/reduction/aggregation.py +502 -0
- maxframe/dataframe/reduction/all.py +78 -0
- maxframe/dataframe/reduction/any.py +78 -0
- maxframe/dataframe/reduction/argmax.py +103 -0
- maxframe/dataframe/reduction/argmin.py +103 -0
- maxframe/dataframe/reduction/core.py +923 -0
- maxframe/dataframe/reduction/count.py +63 -0
- maxframe/dataframe/reduction/cov.py +166 -0
- maxframe/dataframe/reduction/cummax.py +30 -0
- maxframe/dataframe/reduction/cummin.py +30 -0
- maxframe/dataframe/reduction/cumprod.py +30 -0
- maxframe/dataframe/reduction/cumsum.py +30 -0
- maxframe/dataframe/reduction/custom_reduction.py +42 -0
- maxframe/dataframe/reduction/idxmax.py +185 -0
- maxframe/dataframe/reduction/idxmin.py +185 -0
- maxframe/dataframe/reduction/kurtosis.py +111 -0
- maxframe/dataframe/reduction/max.py +65 -0
- maxframe/dataframe/reduction/mean.py +63 -0
- maxframe/dataframe/reduction/median.py +56 -0
- maxframe/dataframe/reduction/min.py +65 -0
- maxframe/dataframe/reduction/mode.py +190 -0
- maxframe/dataframe/reduction/nunique.py +149 -0
- maxframe/dataframe/reduction/prod.py +81 -0
- maxframe/dataframe/reduction/reduction_size.py +36 -0
- maxframe/dataframe/reduction/sem.py +73 -0
- maxframe/dataframe/reduction/skew.py +93 -0
- maxframe/dataframe/reduction/std.py +53 -0
- maxframe/dataframe/reduction/str_concat.py +51 -0
- maxframe/dataframe/reduction/sum.py +81 -0
- maxframe/dataframe/reduction/tests/__init__.py +13 -0
- maxframe/dataframe/reduction/tests/test_reduction.py +598 -0
- maxframe/dataframe/reduction/unique.py +153 -0
- maxframe/dataframe/reduction/var.py +76 -0
- maxframe/dataframe/reshape/__init__.py +38 -0
- maxframe/dataframe/reshape/melt.py +169 -0
- maxframe/dataframe/reshape/pivot.py +233 -0
- maxframe/dataframe/reshape/pivot_table.py +275 -0
- maxframe/dataframe/reshape/stack.py +240 -0
- maxframe/dataframe/reshape/unstack.py +114 -0
- maxframe/dataframe/sort/__init__.py +49 -0
- maxframe/dataframe/sort/argsort.py +68 -0
- maxframe/dataframe/sort/core.py +37 -0
- maxframe/dataframe/sort/nlargest.py +238 -0
- maxframe/dataframe/sort/nsmallest.py +228 -0
- maxframe/dataframe/sort/rank.py +147 -0
- maxframe/dataframe/sort/sort_index.py +153 -0
- maxframe/dataframe/sort/sort_values.py +308 -0
- maxframe/dataframe/sort/tests/__init__.py +13 -0
- maxframe/dataframe/sort/tests/test_sort.py +85 -0
- maxframe/dataframe/statistics/__init__.py +33 -0
- maxframe/dataframe/statistics/corr.py +284 -0
- maxframe/dataframe/statistics/quantile.py +338 -0
- maxframe/dataframe/statistics/tests/__init__.py +13 -0
- maxframe/dataframe/statistics/tests/test_statistics.py +82 -0
- maxframe/dataframe/tests/__init__.py +13 -0
- maxframe/dataframe/tests/test_initializer.py +60 -0
- maxframe/dataframe/tests/test_typing.py +119 -0
- maxframe/dataframe/tests/test_utils.py +169 -0
- maxframe/dataframe/tseries/__init__.py +32 -0
- maxframe/dataframe/tseries/at_time.py +61 -0
- maxframe/dataframe/tseries/between_time.py +122 -0
- maxframe/dataframe/tseries/tests/__init__.py +13 -0
- maxframe/dataframe/tseries/tests/test_tseries.py +30 -0
- maxframe/dataframe/tseries/to_datetime.py +299 -0
- maxframe/dataframe/typing_.py +196 -0
- maxframe/dataframe/ufunc/__init__.py +27 -0
- maxframe/dataframe/ufunc/tensor.py +54 -0
- maxframe/dataframe/ufunc/ufunc.py +53 -0
- maxframe/dataframe/utils.py +1728 -0
- maxframe/dataframe/window/__init__.py +29 -0
- maxframe/dataframe/window/aggregation.py +100 -0
- maxframe/dataframe/window/core.py +82 -0
- maxframe/dataframe/window/ewm.py +247 -0
- maxframe/dataframe/window/expanding.py +151 -0
- maxframe/dataframe/window/rolling.py +389 -0
- maxframe/dataframe/window/tests/__init__.py +13 -0
- maxframe/dataframe/window/tests/test_ewm.py +70 -0
- maxframe/dataframe/window/tests/test_expanding.py +60 -0
- maxframe/dataframe/window/tests/test_rolling.py +57 -0
- maxframe/env.py +37 -0
- maxframe/errors.py +52 -0
- maxframe/extension.py +131 -0
- maxframe/io/__init__.py +13 -0
- maxframe/io/objects/__init__.py +24 -0
- maxframe/io/objects/core.py +156 -0
- maxframe/io/objects/tensor.py +133 -0
- maxframe/io/objects/tests/__init__.py +13 -0
- maxframe/io/objects/tests/test_object_io.py +85 -0
- maxframe/io/odpsio/__init__.py +24 -0
- maxframe/io/odpsio/arrow.py +161 -0
- maxframe/io/odpsio/schema.py +533 -0
- maxframe/io/odpsio/tableio.py +736 -0
- maxframe/io/odpsio/tests/__init__.py +13 -0
- maxframe/io/odpsio/tests/test_arrow.py +132 -0
- maxframe/io/odpsio/tests/test_schema.py +582 -0
- maxframe/io/odpsio/tests/test_tableio.py +205 -0
- maxframe/io/odpsio/tests/test_volumeio.py +75 -0
- maxframe/io/odpsio/volumeio.py +102 -0
- maxframe/learn/__init__.py +25 -0
- maxframe/learn/cluster/__init__.py +15 -0
- maxframe/learn/cluster/_kmeans.py +782 -0
- maxframe/learn/contrib/__init__.py +17 -0
- maxframe/learn/contrib/graph/__init__.py +15 -0
- maxframe/learn/contrib/graph/connected_components.py +216 -0
- maxframe/learn/contrib/graph/tests/__init__.py +13 -0
- maxframe/learn/contrib/graph/tests/test_connected_components.py +53 -0
- 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/__init__.py +17 -0
- maxframe/learn/contrib/llm/core.py +105 -0
- maxframe/learn/contrib/llm/deploy/__init__.py +13 -0
- maxframe/learn/contrib/llm/deploy/config.py +221 -0
- maxframe/learn/contrib/llm/deploy/core.py +247 -0
- maxframe/learn/contrib/llm/deploy/framework.py +35 -0
- maxframe/learn/contrib/llm/deploy/loader.py +360 -0
- maxframe/learn/contrib/llm/deploy/tests/__init__.py +13 -0
- maxframe/learn/contrib/llm/deploy/tests/test_register_models.py +359 -0
- maxframe/learn/contrib/llm/models/__init__.py +16 -0
- maxframe/learn/contrib/llm/models/dashscope.py +114 -0
- maxframe/learn/contrib/llm/models/managed.py +119 -0
- maxframe/learn/contrib/llm/models/openai.py +72 -0
- maxframe/learn/contrib/llm/multi_modal.py +135 -0
- maxframe/learn/contrib/llm/tests/__init__.py +13 -0
- maxframe/learn/contrib/llm/tests/test_core.py +34 -0
- maxframe/learn/contrib/llm/tests/test_openai.py +187 -0
- maxframe/learn/contrib/llm/tests/test_text_gen.py +155 -0
- maxframe/learn/contrib/llm/text.py +608 -0
- maxframe/learn/contrib/models.py +109 -0
- maxframe/learn/contrib/pytorch/__init__.py +16 -0
- maxframe/learn/contrib/pytorch/run_function.py +110 -0
- maxframe/learn/contrib/pytorch/run_script.py +102 -0
- maxframe/learn/contrib/pytorch/tests/__init__.py +13 -0
- maxframe/learn/contrib/pytorch/tests/test_pytorch.py +42 -0
- maxframe/learn/contrib/utils.py +108 -0
- maxframe/learn/contrib/xgboost/__init__.py +33 -0
- maxframe/learn/contrib/xgboost/callback.py +86 -0
- maxframe/learn/contrib/xgboost/classifier.py +119 -0
- maxframe/learn/contrib/xgboost/core.py +469 -0
- maxframe/learn/contrib/xgboost/dmatrix.py +157 -0
- maxframe/learn/contrib/xgboost/predict.py +133 -0
- maxframe/learn/contrib/xgboost/regressor.py +91 -0
- maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
- maxframe/learn/contrib/xgboost/tests/test_callback.py +41 -0
- maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
- maxframe/learn/contrib/xgboost/train.py +181 -0
- maxframe/learn/core.py +344 -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 +220 -0
- maxframe/learn/linear_model/_lin_reg.py +175 -0
- maxframe/learn/metrics/__init__.py +31 -0
- maxframe/learn/metrics/_check_targets.py +95 -0
- maxframe/learn/metrics/_classification.py +1266 -0
- maxframe/learn/metrics/_ranking.py +477 -0
- maxframe/learn/metrics/_regression.py +256 -0
- maxframe/learn/metrics/_scorer.py +60 -0
- maxframe/learn/metrics/pairwise/__init__.py +21 -0
- maxframe/learn/metrics/pairwise/core.py +77 -0
- maxframe/learn/metrics/pairwise/cosine.py +115 -0
- maxframe/learn/metrics/pairwise/euclidean.py +176 -0
- maxframe/learn/metrics/pairwise/haversine.py +96 -0
- maxframe/learn/metrics/pairwise/manhattan.py +80 -0
- maxframe/learn/metrics/pairwise/pairwise.py +127 -0
- maxframe/learn/metrics/pairwise/pairwise_distances_topk.py +121 -0
- maxframe/learn/metrics/pairwise/rbf_kernel.py +51 -0
- maxframe/learn/metrics/tests/__init__.py +13 -0
- maxframe/learn/metrics/tests/test_scorer.py +26 -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 +401 -0
- maxframe/learn/preprocessing/_data/normalize.py +127 -0
- maxframe/learn/preprocessing/_data/standard_scaler.py +512 -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 +20 -0
- maxframe/learn/utils/_encode.py +312 -0
- maxframe/learn/utils/checks.py +160 -0
- maxframe/learn/utils/core.py +121 -0
- maxframe/learn/utils/extmath.py +246 -0
- maxframe/learn/utils/multiclass.py +292 -0
- maxframe/learn/utils/odpsio.py +262 -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 +13 -0
- maxframe/lib/aio/__init__.py +27 -0
- maxframe/lib/aio/_runners.py +162 -0
- maxframe/lib/aio/_threads.py +35 -0
- maxframe/lib/aio/base.py +82 -0
- maxframe/lib/aio/file.py +85 -0
- maxframe/lib/aio/isolation.py +100 -0
- maxframe/lib/aio/lru.py +242 -0
- maxframe/lib/aio/parallelism.py +37 -0
- maxframe/lib/aio/tests/__init__.py +13 -0
- maxframe/lib/aio/tests/test_aio_file.py +55 -0
- maxframe/lib/compat.py +185 -0
- maxframe/lib/compression.py +55 -0
- maxframe/lib/cython/__init__.py +13 -0
- maxframe/lib/cython/libcpp.pxd +30 -0
- maxframe/lib/dtypes_extension/__init__.py +30 -0
- maxframe/lib/dtypes_extension/_fake_arrow_dtype.py +609 -0
- maxframe/lib/dtypes_extension/blob.py +304 -0
- maxframe/lib/dtypes_extension/dtypes.py +106 -0
- maxframe/lib/dtypes_extension/tests/__init__.py +13 -0
- maxframe/lib/dtypes_extension/tests/test_blob.py +88 -0
- maxframe/lib/dtypes_extension/tests/test_dtypes.py +63 -0
- maxframe/lib/dtypes_extension/tests/test_fake_arrow_dtype.py +75 -0
- maxframe/lib/filesystem/__init__.py +22 -0
- maxframe/lib/filesystem/_glob.py +173 -0
- maxframe/lib/filesystem/_oss_lib/__init__.py +13 -0
- maxframe/lib/filesystem/_oss_lib/common.py +274 -0
- maxframe/lib/filesystem/_oss_lib/glob.py +147 -0
- maxframe/lib/filesystem/_oss_lib/handle.py +180 -0
- maxframe/lib/filesystem/arrow.py +240 -0
- maxframe/lib/filesystem/base.py +327 -0
- maxframe/lib/filesystem/core.py +95 -0
- maxframe/lib/filesystem/fshandler.py +136 -0
- maxframe/lib/filesystem/fsmap.py +164 -0
- maxframe/lib/filesystem/hdfs.py +31 -0
- maxframe/lib/filesystem/local.py +120 -0
- maxframe/lib/filesystem/oss.py +283 -0
- maxframe/lib/filesystem/tests/__init__.py +13 -0
- maxframe/lib/filesystem/tests/test_filesystem.py +205 -0
- maxframe/lib/filesystem/tests/test_fshandler.py +281 -0
- maxframe/lib/filesystem/tests/test_oss.py +220 -0
- maxframe/lib/functools_compat.py +81 -0
- maxframe/lib/mmh3.cp312-win32.pyd +0 -0
- maxframe/lib/mmh3.pyi +43 -0
- maxframe/lib/mmh3_src/MurmurHash3.cpp +339 -0
- maxframe/lib/mmh3_src/MurmurHash3.h +43 -0
- maxframe/lib/mmh3_src/mmh3module.cpp +387 -0
- maxframe/lib/sparse/__init__.py +856 -0
- maxframe/lib/sparse/array.py +1616 -0
- maxframe/lib/sparse/core.py +90 -0
- maxframe/lib/sparse/linalg.py +31 -0
- maxframe/lib/sparse/matrix.py +244 -0
- maxframe/lib/sparse/tests/__init__.py +13 -0
- maxframe/lib/sparse/tests/test_sparse.py +476 -0
- maxframe/lib/sparse/vector.py +148 -0
- maxframe/lib/tblib/LICENSE +20 -0
- maxframe/lib/tblib/__init__.py +327 -0
- maxframe/lib/tblib/cpython.py +83 -0
- maxframe/lib/tblib/decorators.py +44 -0
- maxframe/lib/tblib/pickling_support.py +90 -0
- maxframe/lib/tests/__init__.py +13 -0
- maxframe/lib/tests/test_wrapped_pickle.py +51 -0
- maxframe/lib/version.py +620 -0
- maxframe/lib/wrapped_pickle.py +177 -0
- maxframe/mixin.py +157 -0
- maxframe/opcodes.py +654 -0
- maxframe/protocol.py +611 -0
- maxframe/remote/__init__.py +18 -0
- maxframe/remote/core.py +212 -0
- maxframe/remote/run_script.py +124 -0
- maxframe/serialization/__init__.py +39 -0
- maxframe/serialization/arrow.py +107 -0
- maxframe/serialization/blob.py +32 -0
- maxframe/serialization/core.cp312-win32.pyd +0 -0
- maxframe/serialization/core.pxd +50 -0
- maxframe/serialization/core.pyi +66 -0
- maxframe/serialization/core.pyx +1282 -0
- maxframe/serialization/exception.py +90 -0
- maxframe/serialization/maxframe_objects.py +39 -0
- maxframe/serialization/numpy.py +110 -0
- maxframe/serialization/pandas.py +278 -0
- maxframe/serialization/scipy.py +71 -0
- maxframe/serialization/serializables/__init__.py +55 -0
- maxframe/serialization/serializables/core.py +469 -0
- maxframe/serialization/serializables/field.py +624 -0
- maxframe/serialization/serializables/field_type.py +592 -0
- maxframe/serialization/serializables/tests/__init__.py +13 -0
- maxframe/serialization/serializables/tests/test_field_type.py +119 -0
- maxframe/serialization/serializables/tests/test_serializable.py +313 -0
- maxframe/serialization/tests/__init__.py +13 -0
- maxframe/serialization/tests/test_serial.py +516 -0
- maxframe/session.py +1250 -0
- maxframe/sperunner.py +165 -0
- maxframe/tensor/__init__.py +325 -0
- maxframe/tensor/arithmetic/__init__.py +322 -0
- maxframe/tensor/arithmetic/abs.py +66 -0
- maxframe/tensor/arithmetic/absolute.py +66 -0
- maxframe/tensor/arithmetic/add.py +112 -0
- maxframe/tensor/arithmetic/angle.py +70 -0
- maxframe/tensor/arithmetic/arccos.py +101 -0
- maxframe/tensor/arithmetic/arccosh.py +89 -0
- maxframe/tensor/arithmetic/arcsin.py +92 -0
- maxframe/tensor/arithmetic/arcsinh.py +84 -0
- maxframe/tensor/arithmetic/arctan.py +104 -0
- maxframe/tensor/arithmetic/arctan2.py +126 -0
- maxframe/tensor/arithmetic/arctanh.py +84 -0
- maxframe/tensor/arithmetic/around.py +112 -0
- maxframe/tensor/arithmetic/bitand.py +93 -0
- maxframe/tensor/arithmetic/bitor.py +100 -0
- maxframe/tensor/arithmetic/bitxor.py +93 -0
- maxframe/tensor/arithmetic/cbrt.py +64 -0
- maxframe/tensor/arithmetic/ceil.py +69 -0
- maxframe/tensor/arithmetic/clip.py +165 -0
- maxframe/tensor/arithmetic/conj.py +72 -0
- maxframe/tensor/arithmetic/copysign.py +76 -0
- maxframe/tensor/arithmetic/core.py +546 -0
- maxframe/tensor/arithmetic/cos.py +83 -0
- maxframe/tensor/arithmetic/cosh.py +70 -0
- maxframe/tensor/arithmetic/deg2rad.py +70 -0
- maxframe/tensor/arithmetic/degrees.py +75 -0
- maxframe/tensor/arithmetic/divide.py +112 -0
- maxframe/tensor/arithmetic/equal.py +74 -0
- maxframe/tensor/arithmetic/exp.py +104 -0
- maxframe/tensor/arithmetic/exp2.py +65 -0
- maxframe/tensor/arithmetic/expm1.py +77 -0
- maxframe/tensor/arithmetic/fabs.py +72 -0
- maxframe/tensor/arithmetic/fix.py +67 -0
- maxframe/tensor/arithmetic/float_power.py +101 -0
- maxframe/tensor/arithmetic/floor.py +75 -0
- maxframe/tensor/arithmetic/floordiv.py +92 -0
- maxframe/tensor/arithmetic/fmax.py +103 -0
- maxframe/tensor/arithmetic/fmin.py +104 -0
- maxframe/tensor/arithmetic/fmod.py +97 -0
- maxframe/tensor/arithmetic/frexp.py +96 -0
- maxframe/tensor/arithmetic/greater.py +75 -0
- maxframe/tensor/arithmetic/greater_equal.py +67 -0
- maxframe/tensor/arithmetic/hypot.py +75 -0
- maxframe/tensor/arithmetic/i0.py +87 -0
- maxframe/tensor/arithmetic/imag.py +65 -0
- maxframe/tensor/arithmetic/invert.py +108 -0
- maxframe/tensor/arithmetic/isclose.py +114 -0
- maxframe/tensor/arithmetic/iscomplex.py +62 -0
- maxframe/tensor/arithmetic/iscomplexobj.py +53 -0
- maxframe/tensor/arithmetic/isfinite.py +104 -0
- maxframe/tensor/arithmetic/isinf.py +101 -0
- maxframe/tensor/arithmetic/isnan.py +80 -0
- maxframe/tensor/arithmetic/isreal.py +61 -0
- maxframe/tensor/arithmetic/ldexp.py +97 -0
- maxframe/tensor/arithmetic/less.py +67 -0
- maxframe/tensor/arithmetic/less_equal.py +67 -0
- maxframe/tensor/arithmetic/log.py +90 -0
- maxframe/tensor/arithmetic/log10.py +83 -0
- maxframe/tensor/arithmetic/log1p.py +93 -0
- maxframe/tensor/arithmetic/log2.py +83 -0
- maxframe/tensor/arithmetic/logaddexp.py +78 -0
- maxframe/tensor/arithmetic/logaddexp2.py +76 -0
- maxframe/tensor/arithmetic/logical_and.py +79 -0
- maxframe/tensor/arithmetic/logical_not.py +72 -0
- maxframe/tensor/arithmetic/logical_or.py +80 -0
- maxframe/tensor/arithmetic/logical_xor.py +86 -0
- maxframe/tensor/arithmetic/lshift.py +80 -0
- maxframe/tensor/arithmetic/maximum.py +106 -0
- maxframe/tensor/arithmetic/minimum.py +106 -0
- maxframe/tensor/arithmetic/mod.py +102 -0
- maxframe/tensor/arithmetic/modf.py +87 -0
- maxframe/tensor/arithmetic/multiply.py +114 -0
- maxframe/tensor/arithmetic/nan_to_num.py +97 -0
- maxframe/tensor/arithmetic/negative.py +63 -0
- maxframe/tensor/arithmetic/nextafter.py +66 -0
- maxframe/tensor/arithmetic/not_equal.py +70 -0
- maxframe/tensor/arithmetic/positive.py +45 -0
- maxframe/tensor/arithmetic/power.py +104 -0
- maxframe/tensor/arithmetic/rad2deg.py +69 -0
- maxframe/tensor/arithmetic/radians.py +75 -0
- maxframe/tensor/arithmetic/real.py +68 -0
- maxframe/tensor/arithmetic/reciprocal.py +78 -0
- maxframe/tensor/arithmetic/rint.py +66 -0
- maxframe/tensor/arithmetic/rshift.py +79 -0
- maxframe/tensor/arithmetic/setimag.py +27 -0
- maxframe/tensor/arithmetic/setreal.py +27 -0
- maxframe/tensor/arithmetic/sign.py +79 -0
- maxframe/tensor/arithmetic/signbit.py +63 -0
- maxframe/tensor/arithmetic/sin.py +96 -0
- maxframe/tensor/arithmetic/sinc.py +100 -0
- maxframe/tensor/arithmetic/sinh.py +91 -0
- maxframe/tensor/arithmetic/spacing.py +70 -0
- maxframe/tensor/arithmetic/sqrt.py +79 -0
- maxframe/tensor/arithmetic/square.py +67 -0
- maxframe/tensor/arithmetic/subtract.py +83 -0
- maxframe/tensor/arithmetic/tan.py +86 -0
- maxframe/tensor/arithmetic/tanh.py +90 -0
- maxframe/tensor/arithmetic/tests/__init__.py +13 -0
- maxframe/tensor/arithmetic/tests/test_arithmetic.py +449 -0
- maxframe/tensor/arithmetic/truediv.py +102 -0
- maxframe/tensor/arithmetic/trunc.py +70 -0
- maxframe/tensor/arithmetic/utils.py +91 -0
- maxframe/tensor/array_utils.py +164 -0
- maxframe/tensor/core.py +597 -0
- maxframe/tensor/datasource/__init__.py +40 -0
- maxframe/tensor/datasource/arange.py +154 -0
- maxframe/tensor/datasource/array.py +399 -0
- maxframe/tensor/datasource/core.py +114 -0
- maxframe/tensor/datasource/diag.py +140 -0
- maxframe/tensor/datasource/diagflat.py +69 -0
- maxframe/tensor/datasource/empty.py +167 -0
- maxframe/tensor/datasource/eye.py +95 -0
- maxframe/tensor/datasource/from_dataframe.py +68 -0
- maxframe/tensor/datasource/from_dense.py +37 -0
- maxframe/tensor/datasource/from_sparse.py +45 -0
- maxframe/tensor/datasource/full.py +184 -0
- 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 +178 -0
- maxframe/tensor/datasource/scalar.py +40 -0
- maxframe/tensor/datasource/tests/__init__.py +13 -0
- maxframe/tensor/datasource/tests/test_datasource.py +310 -0
- maxframe/tensor/datasource/tri_array.py +107 -0
- maxframe/tensor/datasource/zeros.py +192 -0
- maxframe/tensor/extensions/__init__.py +33 -0
- maxframe/tensor/extensions/accessor.py +25 -0
- maxframe/tensor/extensions/apply_chunk.py +137 -0
- maxframe/tensor/extensions/rebalance.py +65 -0
- maxframe/tensor/fetch/__init__.py +15 -0
- maxframe/tensor/fetch/core.py +54 -0
- maxframe/tensor/fft/__init__.py +32 -0
- maxframe/tensor/fft/core.py +168 -0
- maxframe/tensor/fft/fft.py +112 -0
- maxframe/tensor/fft/fft2.py +118 -0
- maxframe/tensor/fft/fftfreq.py +80 -0
- maxframe/tensor/fft/fftn.py +123 -0
- maxframe/tensor/fft/fftshift.py +79 -0
- maxframe/tensor/fft/hfft.py +112 -0
- maxframe/tensor/fft/ifft.py +114 -0
- maxframe/tensor/fft/ifft2.py +115 -0
- maxframe/tensor/fft/ifftn.py +123 -0
- maxframe/tensor/fft/ifftshift.py +73 -0
- maxframe/tensor/fft/ihfft.py +93 -0
- maxframe/tensor/fft/irfft.py +118 -0
- maxframe/tensor/fft/irfft2.py +62 -0
- maxframe/tensor/fft/irfftn.py +114 -0
- maxframe/tensor/fft/rfft.py +116 -0
- maxframe/tensor/fft/rfft2.py +63 -0
- maxframe/tensor/fft/rfftfreq.py +87 -0
- maxframe/tensor/fft/rfftn.py +113 -0
- maxframe/tensor/indexing/__init__.py +47 -0
- maxframe/tensor/indexing/choose.py +198 -0
- maxframe/tensor/indexing/compress.py +122 -0
- maxframe/tensor/indexing/core.py +190 -0
- maxframe/tensor/indexing/extract.py +69 -0
- maxframe/tensor/indexing/fill_diagonal.py +180 -0
- maxframe/tensor/indexing/flatnonzero.py +58 -0
- maxframe/tensor/indexing/getitem.py +144 -0
- maxframe/tensor/indexing/nonzero.py +118 -0
- maxframe/tensor/indexing/setitem.py +142 -0
- maxframe/tensor/indexing/slice.py +32 -0
- maxframe/tensor/indexing/take.py +128 -0
- maxframe/tensor/indexing/tests/__init__.py +13 -0
- maxframe/tensor/indexing/tests/test_indexing.py +232 -0
- maxframe/tensor/indexing/unravel_index.py +103 -0
- maxframe/tensor/lib/__init__.py +16 -0
- maxframe/tensor/lib/index_tricks.py +404 -0
- maxframe/tensor/linalg/__init__.py +43 -0
- maxframe/tensor/linalg/_einsumfunc.py +1025 -0
- maxframe/tensor/linalg/cholesky.py +117 -0
- maxframe/tensor/linalg/dot.py +145 -0
- maxframe/tensor/linalg/einsum.py +339 -0
- maxframe/tensor/linalg/inner.py +36 -0
- maxframe/tensor/linalg/inv.py +83 -0
- maxframe/tensor/linalg/lstsq.py +100 -0
- maxframe/tensor/linalg/lu.py +115 -0
- maxframe/tensor/linalg/matmul.py +225 -0
- maxframe/tensor/linalg/matrix_norm.py +75 -0
- maxframe/tensor/linalg/norm.py +249 -0
- maxframe/tensor/linalg/qr.py +124 -0
- maxframe/tensor/linalg/solve.py +72 -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/linalg/vector_norm.py +113 -0
- maxframe/tensor/merge/__init__.py +21 -0
- maxframe/tensor/merge/append.py +74 -0
- maxframe/tensor/merge/column_stack.py +63 -0
- maxframe/tensor/merge/concatenate.py +103 -0
- maxframe/tensor/merge/dstack.py +71 -0
- maxframe/tensor/merge/hstack.py +70 -0
- maxframe/tensor/merge/stack.py +130 -0
- maxframe/tensor/merge/tests/__init__.py +13 -0
- maxframe/tensor/merge/tests/test_merge.py +79 -0
- maxframe/tensor/merge/vstack.py +74 -0
- maxframe/tensor/misc/__init__.py +72 -0
- maxframe/tensor/misc/argwhere.py +72 -0
- maxframe/tensor/misc/array_split.py +46 -0
- maxframe/tensor/misc/astype.py +121 -0
- maxframe/tensor/misc/atleast_1d.py +72 -0
- maxframe/tensor/misc/atleast_2d.py +70 -0
- maxframe/tensor/misc/atleast_3d.py +85 -0
- maxframe/tensor/misc/broadcast_arrays.py +57 -0
- maxframe/tensor/misc/broadcast_to.py +89 -0
- maxframe/tensor/misc/copy.py +64 -0
- maxframe/tensor/misc/copyto.py +130 -0
- maxframe/tensor/misc/delete.py +104 -0
- maxframe/tensor/misc/diff.py +115 -0
- maxframe/tensor/misc/dsplit.py +68 -0
- maxframe/tensor/misc/ediff1d.py +74 -0
- maxframe/tensor/misc/expand_dims.py +85 -0
- maxframe/tensor/misc/flatten.py +63 -0
- maxframe/tensor/misc/flip.py +90 -0
- maxframe/tensor/misc/fliplr.py +64 -0
- maxframe/tensor/misc/flipud.py +68 -0
- maxframe/tensor/misc/hsplit.py +85 -0
- maxframe/tensor/misc/in1d.py +94 -0
- maxframe/tensor/misc/insert.py +139 -0
- maxframe/tensor/misc/isin.py +130 -0
- maxframe/tensor/misc/moveaxis.py +83 -0
- maxframe/tensor/misc/ndim.py +53 -0
- maxframe/tensor/misc/ravel.py +90 -0
- maxframe/tensor/misc/repeat.py +129 -0
- maxframe/tensor/misc/result_type.py +88 -0
- maxframe/tensor/misc/roll.py +124 -0
- maxframe/tensor/misc/rollaxis.py +77 -0
- maxframe/tensor/misc/searchsorted.py +147 -0
- maxframe/tensor/misc/setdiff1d.py +58 -0
- maxframe/tensor/misc/shape.py +89 -0
- maxframe/tensor/misc/split.py +190 -0
- maxframe/tensor/misc/squeeze.py +117 -0
- maxframe/tensor/misc/swapaxes.py +113 -0
- maxframe/tensor/misc/tests/__init__.py +13 -0
- maxframe/tensor/misc/tests/test_misc.py +112 -0
- maxframe/tensor/misc/tile.py +109 -0
- maxframe/tensor/misc/transpose.py +133 -0
- maxframe/tensor/misc/trapezoid.py +123 -0
- maxframe/tensor/misc/unique.py +227 -0
- maxframe/tensor/misc/vsplit.py +74 -0
- maxframe/tensor/misc/where.py +129 -0
- maxframe/tensor/operators.py +83 -0
- maxframe/tensor/random/__init__.py +166 -0
- maxframe/tensor/random/beta.py +87 -0
- maxframe/tensor/random/binomial.py +135 -0
- maxframe/tensor/random/bytes.py +37 -0
- maxframe/tensor/random/chisquare.py +108 -0
- maxframe/tensor/random/choice.py +187 -0
- maxframe/tensor/random/core.py +249 -0
- maxframe/tensor/random/dirichlet.py +121 -0
- maxframe/tensor/random/exponential.py +92 -0
- maxframe/tensor/random/f.py +133 -0
- maxframe/tensor/random/gamma.py +126 -0
- maxframe/tensor/random/geometric.py +91 -0
- maxframe/tensor/random/gumbel.py +165 -0
- maxframe/tensor/random/hypergeometric.py +146 -0
- maxframe/tensor/random/laplace.py +131 -0
- maxframe/tensor/random/logistic.py +127 -0
- maxframe/tensor/random/lognormal.py +157 -0
- maxframe/tensor/random/logseries.py +120 -0
- maxframe/tensor/random/multinomial.py +131 -0
- maxframe/tensor/random/multivariate_normal.py +190 -0
- maxframe/tensor/random/negative_binomial.py +123 -0
- maxframe/tensor/random/noncentral_chisquare.py +130 -0
- maxframe/tensor/random/noncentral_f.py +124 -0
- maxframe/tensor/random/normal.py +141 -0
- maxframe/tensor/random/pareto.py +138 -0
- maxframe/tensor/random/permutation.py +107 -0
- maxframe/tensor/random/poisson.py +109 -0
- maxframe/tensor/random/power.py +140 -0
- maxframe/tensor/random/rand.py +80 -0
- maxframe/tensor/random/randint.py +119 -0
- maxframe/tensor/random/randn.py +94 -0
- maxframe/tensor/random/random_integers.py +121 -0
- maxframe/tensor/random/random_sample.py +84 -0
- maxframe/tensor/random/rayleigh.py +108 -0
- maxframe/tensor/random/shuffle.py +61 -0
- maxframe/tensor/random/standard_cauchy.py +103 -0
- maxframe/tensor/random/standard_exponential.py +70 -0
- maxframe/tensor/random/standard_gamma.py +118 -0
- maxframe/tensor/random/standard_normal.py +72 -0
- maxframe/tensor/random/standard_t.py +133 -0
- maxframe/tensor/random/tests/__init__.py +13 -0
- maxframe/tensor/random/tests/test_random.py +165 -0
- maxframe/tensor/random/triangular.py +117 -0
- maxframe/tensor/random/uniform.py +129 -0
- maxframe/tensor/random/vonmises.py +129 -0
- maxframe/tensor/random/wald.py +112 -0
- maxframe/tensor/random/weibull.py +138 -0
- maxframe/tensor/random/zipf.py +120 -0
- maxframe/tensor/rechunk/__init__.py +26 -0
- maxframe/tensor/rechunk/rechunk.py +43 -0
- maxframe/tensor/reduction/__init__.py +64 -0
- maxframe/tensor/reduction/all.py +101 -0
- maxframe/tensor/reduction/allclose.py +86 -0
- maxframe/tensor/reduction/any.py +103 -0
- maxframe/tensor/reduction/argmax.py +101 -0
- maxframe/tensor/reduction/argmin.py +101 -0
- maxframe/tensor/reduction/array_equal.py +63 -0
- maxframe/tensor/reduction/core.py +166 -0
- maxframe/tensor/reduction/count_nonzero.py +80 -0
- maxframe/tensor/reduction/cumprod.py +95 -0
- maxframe/tensor/reduction/cumsum.py +99 -0
- maxframe/tensor/reduction/max.py +118 -0
- maxframe/tensor/reduction/mean.py +122 -0
- maxframe/tensor/reduction/min.py +118 -0
- maxframe/tensor/reduction/nanargmax.py +80 -0
- maxframe/tensor/reduction/nanargmin.py +74 -0
- maxframe/tensor/reduction/nancumprod.py +89 -0
- maxframe/tensor/reduction/nancumsum.py +92 -0
- maxframe/tensor/reduction/nanmax.py +109 -0
- maxframe/tensor/reduction/nanmean.py +105 -0
- maxframe/tensor/reduction/nanmin.py +109 -0
- maxframe/tensor/reduction/nanprod.py +92 -0
- maxframe/tensor/reduction/nanstd.py +124 -0
- maxframe/tensor/reduction/nansum.py +113 -0
- maxframe/tensor/reduction/nanvar.py +149 -0
- maxframe/tensor/reduction/prod.py +128 -0
- maxframe/tensor/reduction/std.py +132 -0
- maxframe/tensor/reduction/sum.py +123 -0
- maxframe/tensor/reduction/tests/__init__.py +13 -0
- maxframe/tensor/reduction/tests/test_reduction.py +189 -0
- maxframe/tensor/reduction/var.py +176 -0
- maxframe/tensor/reshape/__init__.py +15 -0
- maxframe/tensor/reshape/reshape.py +192 -0
- maxframe/tensor/reshape/tests/__init__.py +13 -0
- maxframe/tensor/reshape/tests/test_reshape.py +35 -0
- maxframe/tensor/sort/__init__.py +18 -0
- maxframe/tensor/sort/argpartition.py +98 -0
- maxframe/tensor/sort/argsort.py +150 -0
- maxframe/tensor/sort/partition.py +228 -0
- maxframe/tensor/sort/sort.py +295 -0
- maxframe/tensor/spatial/__init__.py +15 -0
- maxframe/tensor/spatial/distance/__init__.py +17 -0
- maxframe/tensor/spatial/distance/cdist.py +421 -0
- maxframe/tensor/spatial/distance/pdist.py +398 -0
- maxframe/tensor/spatial/distance/squareform.py +153 -0
- maxframe/tensor/special/__init__.py +175 -0
- maxframe/tensor/special/airy.py +55 -0
- maxframe/tensor/special/bessel.py +199 -0
- maxframe/tensor/special/core.py +99 -0
- maxframe/tensor/special/ellip_func_integrals.py +155 -0
- maxframe/tensor/special/ellip_harm.py +55 -0
- maxframe/tensor/special/err_fresnel.py +223 -0
- maxframe/tensor/special/gamma_funcs.py +303 -0
- maxframe/tensor/special/hypergeometric_funcs.py +69 -0
- maxframe/tensor/special/info_theory.py +189 -0
- maxframe/tensor/special/misc.py +163 -0
- maxframe/tensor/special/statistical.py +56 -0
- maxframe/tensor/statistics/__init__.py +24 -0
- maxframe/tensor/statistics/average.py +143 -0
- maxframe/tensor/statistics/bincount.py +133 -0
- maxframe/tensor/statistics/corrcoef.py +77 -0
- maxframe/tensor/statistics/cov.py +222 -0
- maxframe/tensor/statistics/digitize.py +126 -0
- maxframe/tensor/statistics/histogram.py +520 -0
- maxframe/tensor/statistics/median.py +85 -0
- maxframe/tensor/statistics/percentile.py +175 -0
- maxframe/tensor/statistics/ptp.py +89 -0
- maxframe/tensor/statistics/quantile.py +290 -0
- maxframe/tensor/ufunc/__init__.py +24 -0
- maxframe/tensor/ufunc/ufunc.py +198 -0
- maxframe/tensor/utils.py +719 -0
- maxframe/tests/__init__.py +13 -0
- maxframe/tests/test_protocol.py +178 -0
- maxframe/tests/test_udf.py +61 -0
- maxframe/tests/test_utils.py +627 -0
- maxframe/tests/utils.py +245 -0
- maxframe/typing_.py +42 -0
- maxframe/udf.py +435 -0
- maxframe/utils.py +1774 -0
- maxframe-2.4.0rc1.dist-info/METADATA +109 -0
- maxframe-2.4.0rc1.dist-info/RECORD +1122 -0
- maxframe-2.4.0rc1.dist-info/WHEEL +5 -0
- maxframe-2.4.0rc1.dist-info/top_level.txt +3 -0
- maxframe_client/__init__.py +16 -0
- maxframe_client/clients/__init__.py +13 -0
- maxframe_client/clients/framedriver.py +137 -0
- maxframe_client/conftest.py +15 -0
- maxframe_client/fetcher.py +411 -0
- maxframe_client/session/__init__.py +22 -0
- maxframe_client/session/consts.py +39 -0
- maxframe_client/session/graph.py +125 -0
- maxframe_client/session/odps.py +813 -0
- maxframe_client/session/task.py +329 -0
- maxframe_client/session/tests/__init__.py +13 -0
- maxframe_client/session/tests/test_task.py +115 -0
- maxframe_client/tests/__init__.py +13 -0
- maxframe_client/tests/test_fetcher.py +215 -0
- maxframe_client/tests/test_session.py +409 -0
|
@@ -0,0 +1,1266 @@
|
|
|
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
|
+
import numpy as np
|
|
18
|
+
|
|
19
|
+
from ... import opcodes
|
|
20
|
+
from ... import tensor as mt
|
|
21
|
+
from ...core import ENTITY_TYPE, ExecutableTuple, OutputType
|
|
22
|
+
from ...core.operator import Operator
|
|
23
|
+
from ...serialization.serializables import (
|
|
24
|
+
AnyField,
|
|
25
|
+
BoolField,
|
|
26
|
+
FieldTypes,
|
|
27
|
+
Float64Field,
|
|
28
|
+
Int64Field,
|
|
29
|
+
KeyField,
|
|
30
|
+
ListField,
|
|
31
|
+
StringField,
|
|
32
|
+
)
|
|
33
|
+
from ...tensor.core import TensorOrder
|
|
34
|
+
from ...typing_ import EntityType
|
|
35
|
+
from ..core import LearnOperatorMixin
|
|
36
|
+
from ..utils import check_array, check_consistent_length
|
|
37
|
+
from ._check_targets import _check_targets
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _weighted_sum(sample_score, sample_weight, normalize=False):
|
|
41
|
+
if normalize:
|
|
42
|
+
return mt.average(sample_score, weights=sample_weight)
|
|
43
|
+
elif sample_weight is not None:
|
|
44
|
+
return mt.dot(sample_score, sample_weight)
|
|
45
|
+
else:
|
|
46
|
+
return sample_score.sum()
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class AccuracyScore(Operator, LearnOperatorMixin):
|
|
50
|
+
_op_type_ = opcodes.ACCURACY_SCORE
|
|
51
|
+
|
|
52
|
+
y_true = AnyField("y_true", default=None)
|
|
53
|
+
y_pred = AnyField("y_pred", default=None)
|
|
54
|
+
normalize = BoolField("normalize", default=None)
|
|
55
|
+
sample_weight = AnyField("sample_weight", default=None)
|
|
56
|
+
type_true = KeyField("type_true", default=None)
|
|
57
|
+
|
|
58
|
+
@classmethod
|
|
59
|
+
def _set_inputs(cls, op: "AccuracyScore", inputs: List[EntityType]):
|
|
60
|
+
super()._set_inputs(op, inputs)
|
|
61
|
+
inputs_iter = iter(op.inputs)
|
|
62
|
+
if op.y_true is not None:
|
|
63
|
+
op.y_true = next(inputs_iter)
|
|
64
|
+
if op.y_pred is not None:
|
|
65
|
+
op.y_pred = next(inputs_iter)
|
|
66
|
+
if op.type_true is not None:
|
|
67
|
+
op.type_true = next(inputs_iter)
|
|
68
|
+
if isinstance(op.sample_weight, ENTITY_TYPE):
|
|
69
|
+
op.sample_weight = next(inputs_iter)
|
|
70
|
+
|
|
71
|
+
def __call__(self, y_true, y_pred):
|
|
72
|
+
self._output_types = [OutputType.tensor]
|
|
73
|
+
type_true, y_true, y_pred = _check_targets(y_true, y_pred)
|
|
74
|
+
self.type_true = type_true
|
|
75
|
+
inputs = [y_true, y_pred, type_true]
|
|
76
|
+
if isinstance(self.sample_weight, ENTITY_TYPE):
|
|
77
|
+
inputs.append(self.sample_weight)
|
|
78
|
+
|
|
79
|
+
dtype = (
|
|
80
|
+
np.dtype(float)
|
|
81
|
+
if self.normalize
|
|
82
|
+
else np.result_type(y_true.dtype, y_pred.dtype)
|
|
83
|
+
)
|
|
84
|
+
return self.new_tileable(
|
|
85
|
+
inputs, dtype=dtype, shape=(), order=TensorOrder.C_ORDER
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def accuracy_score(
|
|
90
|
+
y_true,
|
|
91
|
+
y_pred,
|
|
92
|
+
normalize=True,
|
|
93
|
+
sample_weight=None,
|
|
94
|
+
execute=False,
|
|
95
|
+
session=None,
|
|
96
|
+
run_kwargs=None,
|
|
97
|
+
):
|
|
98
|
+
"""Accuracy classification score.
|
|
99
|
+
|
|
100
|
+
In multilabel classification, this function computes subset accuracy:
|
|
101
|
+
the set of labels predicted for a sample must *exactly* match the
|
|
102
|
+
corresponding set of labels in y_true.
|
|
103
|
+
|
|
104
|
+
Read more in the :ref:`User Guide <accuracy_score>`.
|
|
105
|
+
|
|
106
|
+
Parameters
|
|
107
|
+
----------
|
|
108
|
+
y_true : 1d array-like, or label indicator tensor / sparse tensor
|
|
109
|
+
Ground truth (correct) labels.
|
|
110
|
+
|
|
111
|
+
y_pred : 1d array-like, or label indicator tensor / sparse tensor
|
|
112
|
+
Predicted labels, as returned by a classifier.
|
|
113
|
+
|
|
114
|
+
normalize : bool, optional (default=True)
|
|
115
|
+
If ``False``, return the number of correctly classified samples.
|
|
116
|
+
Otherwise, return the fraction of correctly classified samples.
|
|
117
|
+
|
|
118
|
+
sample_weight : array-like of shape (n_samples,), default=None
|
|
119
|
+
Sample weights.
|
|
120
|
+
|
|
121
|
+
Returns
|
|
122
|
+
-------
|
|
123
|
+
score : float
|
|
124
|
+
If ``normalize == True``, return the fraction of correctly
|
|
125
|
+
classified samples (float), else returns the number of correctly
|
|
126
|
+
classified samples (int).
|
|
127
|
+
|
|
128
|
+
The best performance is 1 with ``normalize == True`` and the number
|
|
129
|
+
of samples with ``normalize == False``.
|
|
130
|
+
|
|
131
|
+
See also
|
|
132
|
+
--------
|
|
133
|
+
jaccard_score, hamming_loss, zero_one_loss
|
|
134
|
+
|
|
135
|
+
Notes
|
|
136
|
+
-----
|
|
137
|
+
In binary and multiclass classification, this function is equal
|
|
138
|
+
to the ``jaccard_score`` function.
|
|
139
|
+
|
|
140
|
+
Examples
|
|
141
|
+
--------
|
|
142
|
+
>>> from maxframe.learn.metrics import accuracy_score
|
|
143
|
+
>>> y_pred = [0, 2, 1, 3]
|
|
144
|
+
>>> y_true = [0, 1, 2, 3]
|
|
145
|
+
>>> accuracy_score(y_true, y_pred).execute()
|
|
146
|
+
0.5
|
|
147
|
+
>>> accuracy_score(y_true, y_pred, normalize=False).execute()
|
|
148
|
+
2
|
|
149
|
+
|
|
150
|
+
In the multilabel case with binary label indicators:
|
|
151
|
+
|
|
152
|
+
>>> import maxframe.tensor as mt
|
|
153
|
+
>>> accuracy_score(mt.array([[0, 1], [1, 1]]), mt.ones((2, 2))).execute()
|
|
154
|
+
0.5
|
|
155
|
+
"""
|
|
156
|
+
|
|
157
|
+
# Compute accuracy for each possible representation
|
|
158
|
+
op = AccuracyScore(
|
|
159
|
+
y_true=y_true, y_pred=y_pred, normalize=normalize, sample_weight=sample_weight
|
|
160
|
+
)
|
|
161
|
+
score = op(y_true, y_pred)
|
|
162
|
+
if not execute:
|
|
163
|
+
return score
|
|
164
|
+
return score.execute(session=session, **(run_kwargs or dict()))
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
class LogLoss(Operator, LearnOperatorMixin):
|
|
168
|
+
_op_type_ = opcodes.LOG_LOSS
|
|
169
|
+
|
|
170
|
+
y_true = AnyField("y_true")
|
|
171
|
+
y_pred = AnyField("y_pred")
|
|
172
|
+
eps = Float64Field("eps", default=1e-15)
|
|
173
|
+
normalize = BoolField("normalize", default=True)
|
|
174
|
+
sample_weight = AnyField("sample_weight", default=None)
|
|
175
|
+
labels = AnyField("labels", default=None)
|
|
176
|
+
|
|
177
|
+
@classmethod
|
|
178
|
+
def _set_inputs(cls, op: "LogLoss", inputs: List[EntityType]):
|
|
179
|
+
super()._set_inputs(op, inputs)
|
|
180
|
+
inputs_iter = iter(op.inputs)
|
|
181
|
+
op.y_true = next(inputs_iter)
|
|
182
|
+
op.y_pred = next(inputs_iter)
|
|
183
|
+
if isinstance(op.sample_weight, ENTITY_TYPE):
|
|
184
|
+
op.sample_weight = next(inputs_iter)
|
|
185
|
+
if isinstance(op.labels, ENTITY_TYPE):
|
|
186
|
+
op.labels = next(inputs_iter)
|
|
187
|
+
|
|
188
|
+
def __call__(self, y_true, y_pred, sample_weight=None, labels=None):
|
|
189
|
+
self._output_types = [OutputType.tensor]
|
|
190
|
+
self.sample_weight = sample_weight
|
|
191
|
+
self.labels = labels
|
|
192
|
+
inputs = [y_true, y_pred]
|
|
193
|
+
if isinstance(self.sample_weight, ENTITY_TYPE):
|
|
194
|
+
inputs.append(self.sample_weight)
|
|
195
|
+
if isinstance(self.labels, ENTITY_TYPE):
|
|
196
|
+
inputs.append(self.labels)
|
|
197
|
+
|
|
198
|
+
dtype = (
|
|
199
|
+
np.dtype(float)
|
|
200
|
+
if self.normalize
|
|
201
|
+
else np.result_type(y_true.dtype, y_pred.dtype)
|
|
202
|
+
)
|
|
203
|
+
return self.new_tileable(
|
|
204
|
+
inputs, dtype=dtype, shape=(), order=TensorOrder.C_ORDER
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def log_loss(
|
|
209
|
+
y_true,
|
|
210
|
+
y_pred,
|
|
211
|
+
*,
|
|
212
|
+
eps=1e-15,
|
|
213
|
+
normalize=True,
|
|
214
|
+
sample_weight=None,
|
|
215
|
+
labels=None,
|
|
216
|
+
execute=False,
|
|
217
|
+
session=None,
|
|
218
|
+
run_kwargs=None,
|
|
219
|
+
):
|
|
220
|
+
r"""Log loss, aka logistic loss or cross-entropy loss.
|
|
221
|
+
|
|
222
|
+
This is the loss function used in (multinomial) logistic regression
|
|
223
|
+
and extensions of it such as neural networks, defined as the negative
|
|
224
|
+
log-likelihood of a logistic model that returns ``y_pred`` probabilities
|
|
225
|
+
for its training data ``y_true``.
|
|
226
|
+
The log loss is only defined for two or more labels.
|
|
227
|
+
For a single sample with true label :math:`y \in \{0,1\}` and
|
|
228
|
+
and a probability estimate :math:`p = \operatorname{Pr}(y = 1)`, the log
|
|
229
|
+
loss is:
|
|
230
|
+
|
|
231
|
+
.. math::
|
|
232
|
+
L_{\log}(y, p) = -(y \log (p) + (1 - y) \log (1 - p))
|
|
233
|
+
|
|
234
|
+
Read more in the :ref:`User Guide <log_loss>`.
|
|
235
|
+
|
|
236
|
+
Parameters
|
|
237
|
+
----------
|
|
238
|
+
y_true : array-like or label indicator matrix
|
|
239
|
+
Ground truth (correct) labels for n_samples samples.
|
|
240
|
+
|
|
241
|
+
y_pred : array-like of float, shape = (n_samples, n_classes) or (n_samples,)
|
|
242
|
+
Predicted probabilities, as returned by a classifier's
|
|
243
|
+
predict_proba method. If ``y_pred.shape = (n_samples,)``
|
|
244
|
+
the probabilities provided are assumed to be that of the
|
|
245
|
+
positive class. The labels in ``y_pred`` are assumed to be
|
|
246
|
+
ordered alphabetically, as done by
|
|
247
|
+
:class:`preprocessing.LabelBinarizer`.
|
|
248
|
+
|
|
249
|
+
eps : float, default=1e-15
|
|
250
|
+
Log loss is undefined for p=0 or p=1, so probabilities are
|
|
251
|
+
clipped to max(eps, min(1 - eps, p)).
|
|
252
|
+
|
|
253
|
+
normalize : bool, default=True
|
|
254
|
+
If true, return the mean loss per sample.
|
|
255
|
+
Otherwise, return the sum of the per-sample losses.
|
|
256
|
+
|
|
257
|
+
sample_weight : array-like of shape (n_samples,), default=None
|
|
258
|
+
Sample weights.
|
|
259
|
+
|
|
260
|
+
labels : array-like, default=None
|
|
261
|
+
If not provided, labels will be inferred from y_true. If ``labels``
|
|
262
|
+
is ``None`` and ``y_pred`` has shape (n_samples,) the labels are
|
|
263
|
+
assumed to be binary and are inferred from ``y_true``.
|
|
264
|
+
|
|
265
|
+
Returns
|
|
266
|
+
-------
|
|
267
|
+
loss : float
|
|
268
|
+
|
|
269
|
+
Notes
|
|
270
|
+
-----
|
|
271
|
+
The logarithm used is the natural logarithm (base-e).
|
|
272
|
+
|
|
273
|
+
Examples
|
|
274
|
+
--------
|
|
275
|
+
>>> from maxframe.learn.metrics import log_loss
|
|
276
|
+
>>> log_loss(["spam", "ham", "ham", "spam"],
|
|
277
|
+
... [[.1, .9], [.9, .1], [.8, .2], [.35, .65]])
|
|
278
|
+
0.21616...
|
|
279
|
+
|
|
280
|
+
References
|
|
281
|
+
----------
|
|
282
|
+
C.M. Bishop (2006). Pattern Recognition and Machine Learning. Springer,
|
|
283
|
+
p. 209.
|
|
284
|
+
"""
|
|
285
|
+
if not isinstance(y_true, (ENTITY_TYPE, np.ndarray)):
|
|
286
|
+
y_true = mt.array(y_true)
|
|
287
|
+
if not isinstance(y_pred, (ENTITY_TYPE, np.ndarray)):
|
|
288
|
+
y_pred = mt.array(y_pred)
|
|
289
|
+
if sample_weight is not None and not isinstance(y_pred, (ENTITY_TYPE, np.ndarray)):
|
|
290
|
+
sample_weight = mt.array(sample_weight)
|
|
291
|
+
if labels is not None and not isinstance(labels, (ENTITY_TYPE, np.ndarray)):
|
|
292
|
+
labels = mt.array(labels)
|
|
293
|
+
|
|
294
|
+
y_pred = check_array(y_pred, ensure_2d=False)
|
|
295
|
+
y_pred, y_true, sample_weight = check_consistent_length(
|
|
296
|
+
y_pred, y_true, sample_weight
|
|
297
|
+
)
|
|
298
|
+
|
|
299
|
+
op = LogLoss(eps=eps, normalize=normalize)
|
|
300
|
+
res = op(
|
|
301
|
+
y_true=y_true,
|
|
302
|
+
y_pred=y_pred,
|
|
303
|
+
sample_weight=sample_weight,
|
|
304
|
+
labels=labels,
|
|
305
|
+
)
|
|
306
|
+
if execute:
|
|
307
|
+
return res.execute(session=session, **(run_kwargs or {}))
|
|
308
|
+
return res
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
class MultiLabelConfusionMatrix(Operator, LearnOperatorMixin):
|
|
312
|
+
_op_type_ = opcodes.MULTILABEL_CONFUSION_MATRIX
|
|
313
|
+
|
|
314
|
+
y_true = KeyField("y_true", default=None)
|
|
315
|
+
y_pred = KeyField("y_pred", default=None)
|
|
316
|
+
sample_weight = AnyField("sample_weight", default=None)
|
|
317
|
+
labels = AnyField("labels", default=None)
|
|
318
|
+
samplewise = BoolField("samplewise", default=False)
|
|
319
|
+
|
|
320
|
+
@classmethod
|
|
321
|
+
def _set_inputs(cls, op: "MultiLabelConfusionMatrix", inputs: List[EntityType]):
|
|
322
|
+
super()._set_inputs(op, inputs)
|
|
323
|
+
inputs_iter = iter(op.inputs)
|
|
324
|
+
if isinstance(op.y_true, ENTITY_TYPE):
|
|
325
|
+
op.y_true = next(inputs_iter)
|
|
326
|
+
if isinstance(op.y_pred, ENTITY_TYPE):
|
|
327
|
+
op.y_pred = next(inputs_iter)
|
|
328
|
+
if isinstance(op.sample_weight, ENTITY_TYPE):
|
|
329
|
+
op.sample_weight = next(inputs_iter)
|
|
330
|
+
if isinstance(op.labels, ENTITY_TYPE):
|
|
331
|
+
op.labels = next(inputs_iter)
|
|
332
|
+
|
|
333
|
+
def __call__(self, y_true, y_pred, sample_weight=None, labels=None):
|
|
334
|
+
self._output_types = [OutputType.tensor]
|
|
335
|
+
|
|
336
|
+
self.y_true = y_true
|
|
337
|
+
self.y_pred = y_pred
|
|
338
|
+
self.sample_weight = sample_weight
|
|
339
|
+
self.labels = labels
|
|
340
|
+
|
|
341
|
+
if not self.samplewise:
|
|
342
|
+
tensor_size = np.nan
|
|
343
|
+
else:
|
|
344
|
+
tensor_size = y_true.shape[0]
|
|
345
|
+
|
|
346
|
+
inputs = [y_true, y_pred, sample_weight, labels]
|
|
347
|
+
inputs = [t for t in inputs if isinstance(t, ENTITY_TYPE)]
|
|
348
|
+
return self.new_tileable(inputs, shape=(tensor_size, 2, 2), dtype=np.dtype(int))
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
def multilabel_confusion_matrix(
|
|
352
|
+
y_true,
|
|
353
|
+
y_pred,
|
|
354
|
+
*,
|
|
355
|
+
sample_weight=None,
|
|
356
|
+
labels=None,
|
|
357
|
+
samplewise=False,
|
|
358
|
+
execute=False,
|
|
359
|
+
session=None,
|
|
360
|
+
run_kwargs=None,
|
|
361
|
+
):
|
|
362
|
+
"""
|
|
363
|
+
Compute a confusion matrix for each class or sample.
|
|
364
|
+
|
|
365
|
+
Compute class-wise (default) or sample-wise (samplewise=True) multilabel
|
|
366
|
+
confusion matrix to evaluate the accuracy of a classification, and output
|
|
367
|
+
confusion matrices for each class or sample.
|
|
368
|
+
|
|
369
|
+
In multilabel confusion matrix :math:`MCM`, the count of true negatives
|
|
370
|
+
is :math:`MCM_{:,0,0}`, false negatives is :math:`MCM_{:,1,0}`,
|
|
371
|
+
true positives is :math:`MCM_{:,1,1}` and false positives is
|
|
372
|
+
:math:`MCM_{:,0,1}`.
|
|
373
|
+
|
|
374
|
+
Multiclass data will be treated as if binarized under a one-vs-rest
|
|
375
|
+
transformation. Returned confusion matrices will be in the order of
|
|
376
|
+
sorted unique labels in the union of (y_true, y_pred).
|
|
377
|
+
|
|
378
|
+
Read more in the :ref:`User Guide <multilabel_confusion_matrix>`.
|
|
379
|
+
|
|
380
|
+
Parameters
|
|
381
|
+
----------
|
|
382
|
+
y_true : {array-like, sparse matrix} of shape (n_samples, n_outputs) or \
|
|
383
|
+
(n_samples,)
|
|
384
|
+
Ground truth (correct) target values.
|
|
385
|
+
|
|
386
|
+
y_pred : {array-like, sparse matrix} of shape (n_samples, n_outputs) or \
|
|
387
|
+
(n_samples,)
|
|
388
|
+
Estimated targets as returned by a classifier.
|
|
389
|
+
|
|
390
|
+
sample_weight : array-like of shape (n_samples,), default=None
|
|
391
|
+
Sample weights.
|
|
392
|
+
|
|
393
|
+
labels : array-like of shape (n_classes,), default=None
|
|
394
|
+
A list of classes or column indices to select some (or to force
|
|
395
|
+
inclusion of classes absent from the data).
|
|
396
|
+
|
|
397
|
+
samplewise : bool, default=False
|
|
398
|
+
In the multilabel case, this calculates a confusion matrix per sample.
|
|
399
|
+
|
|
400
|
+
Returns
|
|
401
|
+
-------
|
|
402
|
+
multi_confusion : ndarray of shape (n_outputs, 2, 2)
|
|
403
|
+
A 2x2 confusion matrix corresponding to each output in the input.
|
|
404
|
+
When calculating class-wise multi_confusion (default), then
|
|
405
|
+
n_outputs = n_labels; when calculating sample-wise multi_confusion
|
|
406
|
+
(samplewise=True), n_outputs = n_samples. If ``labels`` is defined,
|
|
407
|
+
the results will be returned in the order specified in ``labels``,
|
|
408
|
+
otherwise the results will be returned in sorted order by default.
|
|
409
|
+
|
|
410
|
+
See Also
|
|
411
|
+
--------
|
|
412
|
+
confusion_matrix : Compute confusion matrix to evaluate the accuracy of a
|
|
413
|
+
classifier.
|
|
414
|
+
|
|
415
|
+
Notes
|
|
416
|
+
-----
|
|
417
|
+
The `multilabel_confusion_matrix` calculates class-wise or sample-wise
|
|
418
|
+
multilabel confusion matrices, and in multiclass tasks, labels are
|
|
419
|
+
binarized under a one-vs-rest way; while
|
|
420
|
+
:func:`~sklearn.metrics.confusion_matrix` calculates one confusion matrix
|
|
421
|
+
for confusion between every two classes.
|
|
422
|
+
|
|
423
|
+
Examples
|
|
424
|
+
--------
|
|
425
|
+
Multiclass case:
|
|
426
|
+
|
|
427
|
+
>>> import maxframe.tensor as mt
|
|
428
|
+
>>> from maxframe.learn.metrics import multilabel_confusion_matrix
|
|
429
|
+
>>> y_true = ["cat", "ant", "cat", "cat", "ant", "bird"]
|
|
430
|
+
>>> y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"]
|
|
431
|
+
>>> multilabel_confusion_matrix(y_true, y_pred,
|
|
432
|
+
... labels=["ant", "bird", "cat"]).execute()
|
|
433
|
+
array([[[3, 1],
|
|
434
|
+
[0, 2]],
|
|
435
|
+
<BLANKLINE>
|
|
436
|
+
[[5, 0],
|
|
437
|
+
[1, 0]],
|
|
438
|
+
<BLANKLINE>
|
|
439
|
+
[[2, 1],
|
|
440
|
+
[1, 2]]])
|
|
441
|
+
|
|
442
|
+
Multilabel-indicator case not implemented yet.
|
|
443
|
+
"""
|
|
444
|
+
if not isinstance(y_true, (ENTITY_TYPE, np.ndarray)):
|
|
445
|
+
y_true = mt.array(y_true)
|
|
446
|
+
if not isinstance(y_pred, (ENTITY_TYPE, np.ndarray)):
|
|
447
|
+
y_pred = mt.array(y_pred)
|
|
448
|
+
if sample_weight is not None and not isinstance(y_pred, (ENTITY_TYPE, np.ndarray)):
|
|
449
|
+
sample_weight = mt.array(sample_weight)
|
|
450
|
+
if labels is not None and not isinstance(labels, (ENTITY_TYPE, np.ndarray)):
|
|
451
|
+
labels = mt.array(labels)
|
|
452
|
+
|
|
453
|
+
op = MultiLabelConfusionMatrix(samplewise=samplewise)
|
|
454
|
+
res = op(
|
|
455
|
+
y_true=y_true,
|
|
456
|
+
y_pred=y_pred,
|
|
457
|
+
sample_weight=sample_weight,
|
|
458
|
+
labels=labels,
|
|
459
|
+
)
|
|
460
|
+
if execute:
|
|
461
|
+
return res.execute(session=session, **(run_kwargs or {}))
|
|
462
|
+
return res
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
def _check_zero_division(zero_division): # pragma: no cover
|
|
466
|
+
if isinstance(zero_division, str) and zero_division == "warn":
|
|
467
|
+
return
|
|
468
|
+
elif isinstance(zero_division, (int, float)) and zero_division in [0, 1]:
|
|
469
|
+
return
|
|
470
|
+
raise ValueError(
|
|
471
|
+
"Got zero_division={0}." ' Must be one of ["warn", 0, 1]'.format(zero_division)
|
|
472
|
+
)
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
class PrecisionRecallFScoreSupport(Operator, LearnOperatorMixin):
|
|
476
|
+
_op_type_ = opcodes.PRECISION_RECALL_F_SCORE_SUPPORT
|
|
477
|
+
|
|
478
|
+
y_true = KeyField("y_true", default=None)
|
|
479
|
+
y_pred = KeyField("y_pred", default=None)
|
|
480
|
+
beta = Float64Field("beta", default=1.0)
|
|
481
|
+
labels = AnyField("labels", default=None)
|
|
482
|
+
pos_label = Int64Field("pos_label", default=1)
|
|
483
|
+
average = StringField("average", default=None)
|
|
484
|
+
warn_for = ListField("warn_for", FieldTypes.string, default=None)
|
|
485
|
+
sample_weight = KeyField("sample_weight", default=None)
|
|
486
|
+
zero_division = AnyField("zero_division", default=None)
|
|
487
|
+
|
|
488
|
+
@property
|
|
489
|
+
def output_limit(self) -> int:
|
|
490
|
+
return 3 if self.average else 4
|
|
491
|
+
|
|
492
|
+
@classmethod
|
|
493
|
+
def _set_inputs(cls, op: "PrecisionRecallFScoreSupport", inputs: List[EntityType]):
|
|
494
|
+
super()._set_inputs(op, inputs)
|
|
495
|
+
inputs_iter = iter(op.inputs)
|
|
496
|
+
if op.y_true is not None:
|
|
497
|
+
op.y_true = next(inputs_iter)
|
|
498
|
+
if op.y_pred is not None:
|
|
499
|
+
op.y_pred = next(inputs_iter)
|
|
500
|
+
if isinstance(op.sample_weight, ENTITY_TYPE):
|
|
501
|
+
op.sample_weight = next(inputs_iter)
|
|
502
|
+
if isinstance(op.labels, ENTITY_TYPE):
|
|
503
|
+
op.labels = next(inputs_iter)
|
|
504
|
+
|
|
505
|
+
def __call__(self, y_true, y_pred, sample_weight=None, labels=None):
|
|
506
|
+
self._output_types = [OutputType.tensor] * 4
|
|
507
|
+
|
|
508
|
+
self.y_true = y_true
|
|
509
|
+
self.y_pred = y_pred
|
|
510
|
+
self.sample_weight = sample_weight
|
|
511
|
+
self.labels = labels
|
|
512
|
+
|
|
513
|
+
inputs = [y_true, y_pred, sample_weight, labels]
|
|
514
|
+
inputs = [t for t in inputs if isinstance(t, ENTITY_TYPE)]
|
|
515
|
+
|
|
516
|
+
if self.average:
|
|
517
|
+
if self.average == "samples":
|
|
518
|
+
tensor_shape = (y_true.shape[0],)
|
|
519
|
+
else:
|
|
520
|
+
tensor_shape = ()
|
|
521
|
+
else:
|
|
522
|
+
tensor_shape = (np.nan,)
|
|
523
|
+
|
|
524
|
+
kws = [{"dtype": np.dtype(float), "shape": tensor_shape}] * 3
|
|
525
|
+
if not self.average:
|
|
526
|
+
kws.append({"dtype": np.dtype(int), "shape": tensor_shape})
|
|
527
|
+
return self.new_tileables(inputs, kws=kws)
|
|
528
|
+
|
|
529
|
+
|
|
530
|
+
def precision_recall_fscore_support(
|
|
531
|
+
y_true,
|
|
532
|
+
y_pred,
|
|
533
|
+
*,
|
|
534
|
+
beta=1.0,
|
|
535
|
+
labels=None,
|
|
536
|
+
pos_label=1,
|
|
537
|
+
average=None,
|
|
538
|
+
warn_for=("precision", "recall", "f-score"),
|
|
539
|
+
sample_weight=None,
|
|
540
|
+
zero_division="warn",
|
|
541
|
+
execute=False,
|
|
542
|
+
session=None,
|
|
543
|
+
run_kwargs=None,
|
|
544
|
+
):
|
|
545
|
+
"""Compute precision, recall, F-measure and support for each class
|
|
546
|
+
|
|
547
|
+
The precision is the ratio ``tp / (tp + fp)`` where ``tp`` is the number of
|
|
548
|
+
true positives and ``fp`` the number of false positives. The precision is
|
|
549
|
+
intuitively the ability of the classifier not to label as positive a sample
|
|
550
|
+
that is negative.
|
|
551
|
+
|
|
552
|
+
The recall is the ratio ``tp / (tp + fn)`` where ``tp`` is the number of
|
|
553
|
+
true positives and ``fn`` the number of false negatives. The recall is
|
|
554
|
+
intuitively the ability of the classifier to find all the positive samples.
|
|
555
|
+
|
|
556
|
+
The F-beta score can be interpreted as a weighted harmonic mean of
|
|
557
|
+
the precision and recall, where an F-beta score reaches its best
|
|
558
|
+
value at 1 and worst score at 0.
|
|
559
|
+
|
|
560
|
+
The F-beta score weights recall more than precision by a factor of
|
|
561
|
+
``beta``. ``beta == 1.0`` means recall and precision are equally important.
|
|
562
|
+
|
|
563
|
+
The support is the number of occurrences of each class in ``y_true``.
|
|
564
|
+
|
|
565
|
+
If ``pos_label is None`` and in binary classification, this function
|
|
566
|
+
returns the average precision, recall and F-measure if ``average``
|
|
567
|
+
is one of ``'micro'``, ``'macro'``, ``'weighted'`` or ``'samples'``.
|
|
568
|
+
|
|
569
|
+
Read more in the :ref:`User Guide <precision_recall_f_measure_metrics>`.
|
|
570
|
+
|
|
571
|
+
Parameters
|
|
572
|
+
----------
|
|
573
|
+
y_true : 1d array-like, or label indicator array / sparse matrix
|
|
574
|
+
Ground truth (correct) target values.
|
|
575
|
+
|
|
576
|
+
y_pred : 1d array-like, or label indicator array / sparse matrix
|
|
577
|
+
Estimated targets as returned by a classifier.
|
|
578
|
+
|
|
579
|
+
beta : float, 1.0 by default
|
|
580
|
+
The strength of recall versus precision in the F-score.
|
|
581
|
+
|
|
582
|
+
labels : list, optional
|
|
583
|
+
The set of labels to include when ``average != 'binary'``, and their
|
|
584
|
+
order if ``average is None``. Labels present in the data can be
|
|
585
|
+
excluded, for example to calculate a multiclass average ignoring a
|
|
586
|
+
majority negative class, while labels not present in the data will
|
|
587
|
+
result in 0 components in a macro average. For multilabel targets,
|
|
588
|
+
labels are column indices. By default, all labels in ``y_true`` and
|
|
589
|
+
``y_pred`` are used in sorted order.
|
|
590
|
+
|
|
591
|
+
pos_label : str or int, 1 by default
|
|
592
|
+
The class to report if ``average='binary'`` and the data is binary.
|
|
593
|
+
If the data are multiclass or multilabel, this will be ignored;
|
|
594
|
+
setting ``labels=[pos_label]`` and ``average != 'binary'`` will report
|
|
595
|
+
scores for that label only.
|
|
596
|
+
|
|
597
|
+
average : string, [None (default), 'binary', 'micro', 'macro', 'samples', \
|
|
598
|
+
'weighted']
|
|
599
|
+
If ``None``, the scores for each class are returned. Otherwise, this
|
|
600
|
+
determines the type of averaging performed on the data:
|
|
601
|
+
|
|
602
|
+
``'binary'``:
|
|
603
|
+
Only report results for the class specified by ``pos_label``.
|
|
604
|
+
This is applicable only if targets (``y_{true,pred}``) are binary.
|
|
605
|
+
``'micro'``:
|
|
606
|
+
Calculate metrics globally by counting the total true positives,
|
|
607
|
+
false negatives and false positives.
|
|
608
|
+
``'macro'``:
|
|
609
|
+
Calculate metrics for each label, and find their unweighted
|
|
610
|
+
mean. This does not take label imbalance into account.
|
|
611
|
+
``'weighted'``:
|
|
612
|
+
Calculate metrics for each label, and find their average weighted
|
|
613
|
+
by support (the number of true instances for each label). This
|
|
614
|
+
alters 'macro' to account for label imbalance; it can result in an
|
|
615
|
+
F-score that is not between precision and recall.
|
|
616
|
+
``'samples'``:
|
|
617
|
+
Calculate metrics for each instance, and find their average (only
|
|
618
|
+
meaningful for multilabel classification where this differs from
|
|
619
|
+
:func:`accuracy_score`).
|
|
620
|
+
|
|
621
|
+
warn_for : tuple or set, for internal use
|
|
622
|
+
This determines which warnings will be made in the case that this
|
|
623
|
+
function is being used to return only one of its metrics.
|
|
624
|
+
|
|
625
|
+
sample_weight : array-like of shape (n_samples,), default=None
|
|
626
|
+
Sample weights.
|
|
627
|
+
|
|
628
|
+
zero_division : "warn", 0 or 1, default="warn"
|
|
629
|
+
Sets the value to return when there is a zero division:
|
|
630
|
+
- recall: when there are no positive labels
|
|
631
|
+
- precision: when there are no positive predictions
|
|
632
|
+
- f-score: both
|
|
633
|
+
|
|
634
|
+
If set to "warn", this acts as 0, but warnings are also raised.
|
|
635
|
+
|
|
636
|
+
Returns
|
|
637
|
+
-------
|
|
638
|
+
precision : float (if average is not None) or array of float, shape =\
|
|
639
|
+
[n_unique_labels]
|
|
640
|
+
|
|
641
|
+
recall : float (if average is not None) or array of float, , shape =\
|
|
642
|
+
[n_unique_labels]
|
|
643
|
+
|
|
644
|
+
fbeta_score : float (if average is not None) or array of float, shape =\
|
|
645
|
+
[n_unique_labels]
|
|
646
|
+
|
|
647
|
+
support : None (if average is not None) or array of int, shape =\
|
|
648
|
+
[n_unique_labels]
|
|
649
|
+
The number of occurrences of each label in ``y_true``.
|
|
650
|
+
|
|
651
|
+
References
|
|
652
|
+
----------
|
|
653
|
+
.. [1] `Wikipedia entry for the Precision and recall
|
|
654
|
+
<https://en.wikipedia.org/wiki/Precision_and_recall>`_
|
|
655
|
+
|
|
656
|
+
.. [2] `Wikipedia entry for the F1-score
|
|
657
|
+
<https://en.wikipedia.org/wiki/F1_score>`_
|
|
658
|
+
|
|
659
|
+
.. [3] `Discriminative Methods for Multi-labeled Classification Advances
|
|
660
|
+
in Knowledge Discovery and Data Mining (2004), pp. 22-30 by Shantanu
|
|
661
|
+
Godbole, Sunita Sarawagi
|
|
662
|
+
<http://www.godbole.net/shantanu/pubs/multilabelsvm-pakdd04.pdf>`_
|
|
663
|
+
|
|
664
|
+
Examples
|
|
665
|
+
--------
|
|
666
|
+
>>> import numpy as np
|
|
667
|
+
>>> from maxframe.learn.metrics import precision_recall_fscore_support
|
|
668
|
+
>>> y_true = np.array(['cat', 'dog', 'pig', 'cat', 'dog', 'pig'])
|
|
669
|
+
>>> y_pred = np.array(['cat', 'pig', 'dog', 'cat', 'cat', 'dog'])
|
|
670
|
+
>>> precision_recall_fscore_support(y_true, y_pred, average='macro')
|
|
671
|
+
(0.22..., 0.33..., 0.26..., None)
|
|
672
|
+
>>> precision_recall_fscore_support(y_true, y_pred, average='micro')
|
|
673
|
+
(0.33..., 0.33..., 0.33..., None)
|
|
674
|
+
>>> precision_recall_fscore_support(y_true, y_pred, average='weighted')
|
|
675
|
+
(0.22..., 0.33..., 0.26..., None)
|
|
676
|
+
|
|
677
|
+
It is possible to compute per-label precisions, recalls, F1-scores and
|
|
678
|
+
supports instead of averaging:
|
|
679
|
+
|
|
680
|
+
>>> precision_recall_fscore_support(y_true, y_pred, average=None,
|
|
681
|
+
... labels=['pig', 'dog', 'cat'])
|
|
682
|
+
(array([0. , 0. , 0.66...]),
|
|
683
|
+
array([0., 0., 1.]), array([0. , 0. , 0.8]),
|
|
684
|
+
array([2, 2, 2]))
|
|
685
|
+
|
|
686
|
+
Notes
|
|
687
|
+
-----
|
|
688
|
+
When ``true positive + false positive == 0``, precision is undefined;
|
|
689
|
+
When ``true positive + false negative == 0``, recall is undefined.
|
|
690
|
+
In such cases, by default the metric will be set to 0, as will f-score,
|
|
691
|
+
and ``UndefinedMetricWarning`` will be raised. This behavior can be
|
|
692
|
+
modified with ``zero_division``.
|
|
693
|
+
"""
|
|
694
|
+
_check_zero_division(zero_division)
|
|
695
|
+
if beta < 0:
|
|
696
|
+
raise ValueError("beta should be >=0 in the F-beta score")
|
|
697
|
+
|
|
698
|
+
if not isinstance(y_true, (ENTITY_TYPE, np.ndarray)):
|
|
699
|
+
y_true = mt.array(y_true)
|
|
700
|
+
if not isinstance(y_pred, (ENTITY_TYPE, np.ndarray)):
|
|
701
|
+
y_pred = mt.array(y_pred)
|
|
702
|
+
if sample_weight is not None and not isinstance(y_pred, (ENTITY_TYPE, np.ndarray)):
|
|
703
|
+
sample_weight = mt.array(sample_weight)
|
|
704
|
+
if labels is not None and not isinstance(labels, (ENTITY_TYPE, np.ndarray)):
|
|
705
|
+
labels = mt.array(labels)
|
|
706
|
+
|
|
707
|
+
op = PrecisionRecallFScoreSupport(
|
|
708
|
+
beta=beta,
|
|
709
|
+
pos_label=pos_label,
|
|
710
|
+
average=average,
|
|
711
|
+
warn_for=warn_for,
|
|
712
|
+
zero_division=zero_division,
|
|
713
|
+
)
|
|
714
|
+
res = ExecutableTuple(
|
|
715
|
+
op(y_true, y_pred, sample_weight=sample_weight, labels=labels)
|
|
716
|
+
)
|
|
717
|
+
if execute:
|
|
718
|
+
res = res.execute(session=session, **(run_kwargs or {}))
|
|
719
|
+
return res if op.output_limit == 4 else res + (None,)
|
|
720
|
+
|
|
721
|
+
|
|
722
|
+
def precision_score(
|
|
723
|
+
y_true,
|
|
724
|
+
y_pred,
|
|
725
|
+
*,
|
|
726
|
+
labels=None,
|
|
727
|
+
pos_label=1,
|
|
728
|
+
average="binary",
|
|
729
|
+
sample_weight=None,
|
|
730
|
+
zero_division="warn",
|
|
731
|
+
execute=False,
|
|
732
|
+
session=None,
|
|
733
|
+
run_kwargs=None,
|
|
734
|
+
):
|
|
735
|
+
"""Compute the precision
|
|
736
|
+
|
|
737
|
+
The precision is the ratio ``tp / (tp + fp)`` where ``tp`` is the number of
|
|
738
|
+
true positives and ``fp`` the number of false positives. The precision is
|
|
739
|
+
intuitively the ability of the classifier not to label as positive a sample
|
|
740
|
+
that is negative.
|
|
741
|
+
|
|
742
|
+
The best value is 1 and the worst value is 0.
|
|
743
|
+
|
|
744
|
+
Read more in the :ref:`User Guide <precision_recall_f_measure_metrics>`.
|
|
745
|
+
|
|
746
|
+
Parameters
|
|
747
|
+
----------
|
|
748
|
+
y_true : 1d array-like, or label indicator array / sparse matrix
|
|
749
|
+
Ground truth (correct) target values.
|
|
750
|
+
|
|
751
|
+
y_pred : 1d array-like, or label indicator array / sparse matrix
|
|
752
|
+
Estimated targets as returned by a classifier.
|
|
753
|
+
|
|
754
|
+
labels : list, optional
|
|
755
|
+
The set of labels to include when ``average != 'binary'``, and their
|
|
756
|
+
order if ``average is None``. Labels present in the data can be
|
|
757
|
+
excluded, for example to calculate a multiclass average ignoring a
|
|
758
|
+
majority negative class, while labels not present in the data will
|
|
759
|
+
result in 0 components in a macro average. For multilabel targets,
|
|
760
|
+
labels are column indices. By default, all labels in ``y_true`` and
|
|
761
|
+
``y_pred`` are used in sorted order.
|
|
762
|
+
|
|
763
|
+
pos_label : str or int, 1 by default
|
|
764
|
+
The class to report if ``average='binary'`` and the data is binary.
|
|
765
|
+
If the data are multiclass or multilabel, this will be ignored;
|
|
766
|
+
setting ``labels=[pos_label]`` and ``average != 'binary'`` will report
|
|
767
|
+
scores for that label only.
|
|
768
|
+
|
|
769
|
+
average : string, [None, 'binary' (default), 'micro', 'macro', 'samples', \
|
|
770
|
+
'weighted']
|
|
771
|
+
This parameter is required for multiclass/multilabel targets.
|
|
772
|
+
If ``None``, the scores for each class are returned. Otherwise, this
|
|
773
|
+
determines the type of averaging performed on the data:
|
|
774
|
+
|
|
775
|
+
``'binary'``:
|
|
776
|
+
Only report results for the class specified by ``pos_label``.
|
|
777
|
+
This is applicable only if targets (``y_{true,pred}``) are binary.
|
|
778
|
+
``'micro'``:
|
|
779
|
+
Calculate metrics globally by counting the total true positives,
|
|
780
|
+
false negatives and false positives.
|
|
781
|
+
``'macro'``:
|
|
782
|
+
Calculate metrics for each label, and find their unweighted
|
|
783
|
+
mean. This does not take label imbalance into account.
|
|
784
|
+
``'weighted'``:
|
|
785
|
+
Calculate metrics for each label, and find their average weighted
|
|
786
|
+
by support (the number of true instances for each label). This
|
|
787
|
+
alters 'macro' to account for label imbalance; it can result in an
|
|
788
|
+
F-score that is not between precision and recall.
|
|
789
|
+
``'samples'``:
|
|
790
|
+
Calculate metrics for each instance, and find their average (only
|
|
791
|
+
meaningful for multilabel classification where this differs from
|
|
792
|
+
:func:`accuracy_score`).
|
|
793
|
+
|
|
794
|
+
sample_weight : array-like of shape (n_samples,), default=None
|
|
795
|
+
Sample weights.
|
|
796
|
+
|
|
797
|
+
zero_division : "warn", 0 or 1, default="warn"
|
|
798
|
+
Sets the value to return when there is a zero division. If set to
|
|
799
|
+
"warn", this acts as 0, but warnings are also raised.
|
|
800
|
+
|
|
801
|
+
Returns
|
|
802
|
+
-------
|
|
803
|
+
precision : float (if average is not None) or array of float, shape =\
|
|
804
|
+
[n_unique_labels]
|
|
805
|
+
Precision of the positive class in binary classification or weighted
|
|
806
|
+
average of the precision of each class for the multiclass task.
|
|
807
|
+
|
|
808
|
+
See also
|
|
809
|
+
--------
|
|
810
|
+
precision_recall_fscore_support, multilabel_confusion_matrix
|
|
811
|
+
|
|
812
|
+
Examples
|
|
813
|
+
--------
|
|
814
|
+
>>> from maxframe.learn.metrics import precision_score
|
|
815
|
+
>>> y_true = [0, 1, 2, 0, 1, 2]
|
|
816
|
+
>>> y_pred = [0, 2, 1, 0, 0, 1]
|
|
817
|
+
>>> precision_score(y_true, y_pred, average='macro')
|
|
818
|
+
0.22...
|
|
819
|
+
>>> precision_score(y_true, y_pred, average='micro')
|
|
820
|
+
0.33...
|
|
821
|
+
>>> precision_score(y_true, y_pred, average='weighted')
|
|
822
|
+
0.22...
|
|
823
|
+
>>> precision_score(y_true, y_pred, average=None)
|
|
824
|
+
array([0.66..., 0. , 0. ])
|
|
825
|
+
>>> y_pred = [0, 0, 0, 0, 0, 0]
|
|
826
|
+
>>> precision_score(y_true, y_pred, average=None)
|
|
827
|
+
array([0.33..., 0. , 0. ])
|
|
828
|
+
>>> precision_score(y_true, y_pred, average=None, zero_division=1)
|
|
829
|
+
array([0.33..., 1. , 1. ])
|
|
830
|
+
|
|
831
|
+
Notes
|
|
832
|
+
-----
|
|
833
|
+
When ``true positive + false positive == 0``, precision returns 0 and
|
|
834
|
+
raises ``UndefinedMetricWarning``. This behavior can be
|
|
835
|
+
modified with ``zero_division``.
|
|
836
|
+
|
|
837
|
+
"""
|
|
838
|
+
p, _, _, _ = precision_recall_fscore_support(
|
|
839
|
+
y_true,
|
|
840
|
+
y_pred,
|
|
841
|
+
labels=labels,
|
|
842
|
+
pos_label=pos_label,
|
|
843
|
+
average=average,
|
|
844
|
+
warn_for=("precision",),
|
|
845
|
+
sample_weight=sample_weight,
|
|
846
|
+
zero_division=zero_division,
|
|
847
|
+
execute=execute,
|
|
848
|
+
session=session,
|
|
849
|
+
run_kwargs=run_kwargs,
|
|
850
|
+
)
|
|
851
|
+
return p
|
|
852
|
+
|
|
853
|
+
|
|
854
|
+
def recall_score(
|
|
855
|
+
y_true,
|
|
856
|
+
y_pred,
|
|
857
|
+
*,
|
|
858
|
+
labels=None,
|
|
859
|
+
pos_label=1,
|
|
860
|
+
average="binary",
|
|
861
|
+
sample_weight=None,
|
|
862
|
+
zero_division="warn",
|
|
863
|
+
execute=False,
|
|
864
|
+
session=None,
|
|
865
|
+
run_kwargs=None,
|
|
866
|
+
):
|
|
867
|
+
"""Compute the recall
|
|
868
|
+
|
|
869
|
+
The recall is the ratio ``tp / (tp + fn)`` where ``tp`` is the number of
|
|
870
|
+
true positives and ``fn`` the number of false negatives. The recall is
|
|
871
|
+
intuitively the ability of the classifier to find all the positive samples.
|
|
872
|
+
|
|
873
|
+
The best value is 1 and the worst value is 0.
|
|
874
|
+
|
|
875
|
+
Read more in the :ref:`User Guide <precision_recall_f_measure_metrics>`.
|
|
876
|
+
|
|
877
|
+
Parameters
|
|
878
|
+
----------
|
|
879
|
+
y_true : 1d array-like, or label indicator array / sparse matrix
|
|
880
|
+
Ground truth (correct) target values.
|
|
881
|
+
|
|
882
|
+
y_pred : 1d array-like, or label indicator array / sparse matrix
|
|
883
|
+
Estimated targets as returned by a classifier.
|
|
884
|
+
|
|
885
|
+
labels : list, optional
|
|
886
|
+
The set of labels to include when ``average != 'binary'``, and their
|
|
887
|
+
order if ``average is None``. Labels present in the data can be
|
|
888
|
+
excluded, for example to calculate a multiclass average ignoring a
|
|
889
|
+
majority negative class, while labels not present in the data will
|
|
890
|
+
result in 0 components in a macro average. For multilabel targets,
|
|
891
|
+
labels are column indices. By default, all labels in ``y_true`` and
|
|
892
|
+
``y_pred`` are used in sorted order.
|
|
893
|
+
|
|
894
|
+
pos_label : str or int, 1 by default
|
|
895
|
+
The class to report if ``average='binary'`` and the data is binary.
|
|
896
|
+
If the data are multiclass or multilabel, this will be ignored;
|
|
897
|
+
setting ``labels=[pos_label]`` and ``average != 'binary'`` will report
|
|
898
|
+
scores for that label only.
|
|
899
|
+
|
|
900
|
+
average : string, [None, 'binary' (default), 'micro', 'macro', 'samples', \
|
|
901
|
+
'weighted']
|
|
902
|
+
This parameter is required for multiclass/multilabel targets.
|
|
903
|
+
If ``None``, the scores for each class are returned. Otherwise, this
|
|
904
|
+
determines the type of averaging performed on the data:
|
|
905
|
+
|
|
906
|
+
``'binary'``:
|
|
907
|
+
Only report results for the class specified by ``pos_label``.
|
|
908
|
+
This is applicable only if targets (``y_{true,pred}``) are binary.
|
|
909
|
+
``'micro'``:
|
|
910
|
+
Calculate metrics globally by counting the total true positives,
|
|
911
|
+
false negatives and false positives.
|
|
912
|
+
``'macro'``:
|
|
913
|
+
Calculate metrics for each label, and find their unweighted
|
|
914
|
+
mean. This does not take label imbalance into account.
|
|
915
|
+
``'weighted'``:
|
|
916
|
+
Calculate metrics for each label, and find their average weighted
|
|
917
|
+
by support (the number of true instances for each label). This
|
|
918
|
+
alters 'macro' to account for label imbalance; it can result in an
|
|
919
|
+
F-score that is not between precision and recall.
|
|
920
|
+
``'samples'``:
|
|
921
|
+
Calculate metrics for each instance, and find their average (only
|
|
922
|
+
meaningful for multilabel classification where this differs from
|
|
923
|
+
:func:`accuracy_score`).
|
|
924
|
+
|
|
925
|
+
sample_weight : array-like of shape (n_samples,), default=None
|
|
926
|
+
Sample weights.
|
|
927
|
+
|
|
928
|
+
zero_division : "warn", 0 or 1, default="warn"
|
|
929
|
+
Sets the value to return when there is a zero division. If set to
|
|
930
|
+
"warn", this acts as 0, but warnings are also raised.
|
|
931
|
+
|
|
932
|
+
Returns
|
|
933
|
+
-------
|
|
934
|
+
recall : float (if average is not None) or array of float, shape =\
|
|
935
|
+
[n_unique_labels]
|
|
936
|
+
Recall of the positive class in binary classification or weighted
|
|
937
|
+
average of the recall of each class for the multiclass task.
|
|
938
|
+
|
|
939
|
+
See also
|
|
940
|
+
--------
|
|
941
|
+
precision_recall_fscore_support, balanced_accuracy_score,
|
|
942
|
+
multilabel_confusion_matrix
|
|
943
|
+
|
|
944
|
+
Examples
|
|
945
|
+
--------
|
|
946
|
+
>>> from maxframe.learn.metrics import recall_score
|
|
947
|
+
>>> y_true = [0, 1, 2, 0, 1, 2]
|
|
948
|
+
>>> y_pred = [0, 2, 1, 0, 0, 1]
|
|
949
|
+
>>> recall_score(y_true, y_pred, average='macro')
|
|
950
|
+
0.33...
|
|
951
|
+
>>> recall_score(y_true, y_pred, average='micro')
|
|
952
|
+
0.33...
|
|
953
|
+
>>> recall_score(y_true, y_pred, average='weighted')
|
|
954
|
+
0.33...
|
|
955
|
+
>>> recall_score(y_true, y_pred, average=None)
|
|
956
|
+
array([1., 0., 0.])
|
|
957
|
+
>>> y_true = [0, 0, 0, 0, 0, 0]
|
|
958
|
+
>>> recall_score(y_true, y_pred, average=None)
|
|
959
|
+
array([0.5, 0. , 0. ])
|
|
960
|
+
>>> recall_score(y_true, y_pred, average=None, zero_division=1)
|
|
961
|
+
array([0.5, 1. , 1. ])
|
|
962
|
+
|
|
963
|
+
Notes
|
|
964
|
+
-----
|
|
965
|
+
When ``true positive + false negative == 0``, recall returns 0 and raises
|
|
966
|
+
``UndefinedMetricWarning``. This behavior can be modified with
|
|
967
|
+
``zero_division``.
|
|
968
|
+
"""
|
|
969
|
+
_, r, _, _ = precision_recall_fscore_support(
|
|
970
|
+
y_true,
|
|
971
|
+
y_pred,
|
|
972
|
+
labels=labels,
|
|
973
|
+
pos_label=pos_label,
|
|
974
|
+
average=average,
|
|
975
|
+
warn_for=("recall",),
|
|
976
|
+
sample_weight=sample_weight,
|
|
977
|
+
zero_division=zero_division,
|
|
978
|
+
execute=execute,
|
|
979
|
+
session=session,
|
|
980
|
+
run_kwargs=run_kwargs,
|
|
981
|
+
)
|
|
982
|
+
return r
|
|
983
|
+
|
|
984
|
+
|
|
985
|
+
def f1_score(
|
|
986
|
+
y_true,
|
|
987
|
+
y_pred,
|
|
988
|
+
*,
|
|
989
|
+
labels=None,
|
|
990
|
+
pos_label=1,
|
|
991
|
+
average="binary",
|
|
992
|
+
sample_weight=None,
|
|
993
|
+
zero_division="warn",
|
|
994
|
+
execute=False,
|
|
995
|
+
session=None,
|
|
996
|
+
run_kwargs=None,
|
|
997
|
+
):
|
|
998
|
+
"""Compute the F1 score, also known as balanced F-score or F-measure
|
|
999
|
+
|
|
1000
|
+
The F1 score can be interpreted as a weighted average of the precision and
|
|
1001
|
+
recall, where an F1 score reaches its best value at 1 and worst score at 0.
|
|
1002
|
+
The relative contribution of precision and recall to the F1 score are
|
|
1003
|
+
equal. The formula for the F1 score is::
|
|
1004
|
+
|
|
1005
|
+
F1 = 2 * (precision * recall) / (precision + recall)
|
|
1006
|
+
|
|
1007
|
+
In the multi-class and multi-label case, this is the average of
|
|
1008
|
+
the F1 score of each class with weighting depending on the ``average``
|
|
1009
|
+
parameter.
|
|
1010
|
+
|
|
1011
|
+
Read more in the :ref:`User Guide <precision_recall_f_measure_metrics>`.
|
|
1012
|
+
|
|
1013
|
+
Parameters
|
|
1014
|
+
----------
|
|
1015
|
+
y_true : 1d array-like, or label indicator array / sparse matrix
|
|
1016
|
+
Ground truth (correct) target values.
|
|
1017
|
+
|
|
1018
|
+
y_pred : 1d array-like, or label indicator array / sparse matrix
|
|
1019
|
+
Estimated targets as returned by a classifier.
|
|
1020
|
+
|
|
1021
|
+
labels : list, optional
|
|
1022
|
+
The set of labels to include when ``average != 'binary'``, and their
|
|
1023
|
+
order if ``average is None``. Labels present in the data can be
|
|
1024
|
+
excluded, for example to calculate a multiclass average ignoring a
|
|
1025
|
+
majority negative class, while labels not present in the data will
|
|
1026
|
+
result in 0 components in a macro average. For multilabel targets,
|
|
1027
|
+
labels are column indices. By default, all labels in ``y_true`` and
|
|
1028
|
+
``y_pred`` are used in sorted order.
|
|
1029
|
+
|
|
1030
|
+
pos_label : str or int, 1 by default
|
|
1031
|
+
The class to report if ``average='binary'`` and the data is binary.
|
|
1032
|
+
If the data are multiclass or multilabel, this will be ignored;
|
|
1033
|
+
setting ``labels=[pos_label]`` and ``average != 'binary'`` will report
|
|
1034
|
+
scores for that label only.
|
|
1035
|
+
|
|
1036
|
+
average : string, [None, 'binary' (default), 'micro', 'macro', 'samples', \
|
|
1037
|
+
'weighted']
|
|
1038
|
+
This parameter is required for multiclass/multilabel targets.
|
|
1039
|
+
If ``None``, the scores for each class are returned. Otherwise, this
|
|
1040
|
+
determines the type of averaging performed on the data:
|
|
1041
|
+
|
|
1042
|
+
``'binary'``:
|
|
1043
|
+
Only report results for the class specified by ``pos_label``.
|
|
1044
|
+
This is applicable only if targets (``y_{true,pred}``) are binary.
|
|
1045
|
+
``'micro'``:
|
|
1046
|
+
Calculate metrics globally by counting the total true positives,
|
|
1047
|
+
false negatives and false positives.
|
|
1048
|
+
``'macro'``:
|
|
1049
|
+
Calculate metrics for each label, and find their unweighted
|
|
1050
|
+
mean. This does not take label imbalance into account.
|
|
1051
|
+
``'weighted'``:
|
|
1052
|
+
Calculate metrics for each label, and find their average weighted
|
|
1053
|
+
by support (the number of true instances for each label). This
|
|
1054
|
+
alters 'macro' to account for label imbalance; it can result in an
|
|
1055
|
+
F-score that is not between precision and recall.
|
|
1056
|
+
``'samples'``:
|
|
1057
|
+
Calculate metrics for each instance, and find their average (only
|
|
1058
|
+
meaningful for multilabel classification where this differs from
|
|
1059
|
+
:func:`accuracy_score`).
|
|
1060
|
+
|
|
1061
|
+
sample_weight : array-like of shape (n_samples,), default=None
|
|
1062
|
+
Sample weights.
|
|
1063
|
+
|
|
1064
|
+
zero_division : "warn", 0 or 1, default="warn"
|
|
1065
|
+
Sets the value to return when there is a zero division, i.e. when all
|
|
1066
|
+
predictions and labels are negative. If set to "warn", this acts as 0,
|
|
1067
|
+
but warnings are also raised.
|
|
1068
|
+
|
|
1069
|
+
Returns
|
|
1070
|
+
-------
|
|
1071
|
+
f1_score : float or array of float, shape = [n_unique_labels]
|
|
1072
|
+
F1 score of the positive class in binary classification or weighted
|
|
1073
|
+
average of the F1 scores of each class for the multiclass task.
|
|
1074
|
+
|
|
1075
|
+
See also
|
|
1076
|
+
--------
|
|
1077
|
+
fbeta_score, precision_recall_fscore_support, jaccard_score,
|
|
1078
|
+
multilabel_confusion_matrix
|
|
1079
|
+
|
|
1080
|
+
References
|
|
1081
|
+
----------
|
|
1082
|
+
.. [1] `Wikipedia entry for the F1-score
|
|
1083
|
+
<https://en.wikipedia.org/wiki/F1_score>`_
|
|
1084
|
+
|
|
1085
|
+
Examples
|
|
1086
|
+
--------
|
|
1087
|
+
>>> from maxframe.learn.metrics import f1_score
|
|
1088
|
+
>>> y_true = [0, 1, 2, 0, 1, 2]
|
|
1089
|
+
>>> y_pred = [0, 2, 1, 0, 0, 1]
|
|
1090
|
+
>>> f1_score(y_true, y_pred, average='macro')
|
|
1091
|
+
0.26...
|
|
1092
|
+
>>> f1_score(y_true, y_pred, average='micro')
|
|
1093
|
+
0.33...
|
|
1094
|
+
>>> f1_score(y_true, y_pred, average='weighted')
|
|
1095
|
+
0.26...
|
|
1096
|
+
>>> f1_score(y_true, y_pred, average=None)
|
|
1097
|
+
array([0.8, 0. , 0. ])
|
|
1098
|
+
>>> y_true = [0, 0, 0, 0, 0, 0]
|
|
1099
|
+
>>> y_pred = [0, 0, 0, 0, 0, 0]
|
|
1100
|
+
>>> f1_score(y_true, y_pred, zero_division=1)
|
|
1101
|
+
1.0...
|
|
1102
|
+
|
|
1103
|
+
Notes
|
|
1104
|
+
-----
|
|
1105
|
+
When ``true positive + false positive == 0``, precision is undefined;
|
|
1106
|
+
When ``true positive + false negative == 0``, recall is undefined.
|
|
1107
|
+
In such cases, by default the metric will be set to 0, as will f-score,
|
|
1108
|
+
and ``UndefinedMetricWarning`` will be raised. This behavior can be
|
|
1109
|
+
modified with ``zero_division``.
|
|
1110
|
+
"""
|
|
1111
|
+
return fbeta_score(
|
|
1112
|
+
y_true,
|
|
1113
|
+
y_pred,
|
|
1114
|
+
beta=1,
|
|
1115
|
+
labels=labels,
|
|
1116
|
+
pos_label=pos_label,
|
|
1117
|
+
average=average,
|
|
1118
|
+
sample_weight=sample_weight,
|
|
1119
|
+
zero_division=zero_division,
|
|
1120
|
+
execute=execute,
|
|
1121
|
+
session=session,
|
|
1122
|
+
run_kwargs=run_kwargs,
|
|
1123
|
+
)
|
|
1124
|
+
|
|
1125
|
+
|
|
1126
|
+
def fbeta_score(
|
|
1127
|
+
y_true,
|
|
1128
|
+
y_pred,
|
|
1129
|
+
*,
|
|
1130
|
+
beta,
|
|
1131
|
+
labels=None,
|
|
1132
|
+
pos_label=1,
|
|
1133
|
+
average="binary",
|
|
1134
|
+
sample_weight=None,
|
|
1135
|
+
zero_division="warn",
|
|
1136
|
+
execute=False,
|
|
1137
|
+
session=None,
|
|
1138
|
+
run_kwargs=None,
|
|
1139
|
+
):
|
|
1140
|
+
"""Compute the F-beta score
|
|
1141
|
+
|
|
1142
|
+
The F-beta score is the weighted harmonic mean of precision and recall,
|
|
1143
|
+
reaching its optimal value at 1 and its worst value at 0.
|
|
1144
|
+
|
|
1145
|
+
The `beta` parameter determines the weight of recall in the combined
|
|
1146
|
+
score. ``beta < 1`` lends more weight to precision, while ``beta > 1``
|
|
1147
|
+
favors recall (``beta -> 0`` considers only precision, ``beta -> +inf``
|
|
1148
|
+
only recall).
|
|
1149
|
+
|
|
1150
|
+
Read more in the :ref:`User Guide <precision_recall_f_measure_metrics>`.
|
|
1151
|
+
|
|
1152
|
+
Parameters
|
|
1153
|
+
----------
|
|
1154
|
+
y_true : 1d array-like, or label indicator array / sparse matrix
|
|
1155
|
+
Ground truth (correct) target values.
|
|
1156
|
+
|
|
1157
|
+
y_pred : 1d array-like, or label indicator array / sparse matrix
|
|
1158
|
+
Estimated targets as returned by a classifier.
|
|
1159
|
+
|
|
1160
|
+
beta : float
|
|
1161
|
+
Determines the weight of recall in the combined score.
|
|
1162
|
+
|
|
1163
|
+
labels : list, optional
|
|
1164
|
+
The set of labels to include when ``average != 'binary'``, and their
|
|
1165
|
+
order if ``average is None``. Labels present in the data can be
|
|
1166
|
+
excluded, for example to calculate a multiclass average ignoring a
|
|
1167
|
+
majority negative class, while labels not present in the data will
|
|
1168
|
+
result in 0 components in a macro average. For multilabel targets,
|
|
1169
|
+
labels are column indices. By default, all labels in ``y_true`` and
|
|
1170
|
+
``y_pred`` are used in sorted order.
|
|
1171
|
+
|
|
1172
|
+
pos_label : str or int, 1 by default
|
|
1173
|
+
The class to report if ``average='binary'`` and the data is binary.
|
|
1174
|
+
If the data are multiclass or multilabel, this will be ignored;
|
|
1175
|
+
setting ``labels=[pos_label]`` and ``average != 'binary'`` will report
|
|
1176
|
+
scores for that label only.
|
|
1177
|
+
|
|
1178
|
+
average : string, [None, 'binary' (default), 'micro', 'macro', 'samples', \
|
|
1179
|
+
'weighted']
|
|
1180
|
+
This parameter is required for multiclass/multilabel targets.
|
|
1181
|
+
If ``None``, the scores for each class are returned. Otherwise, this
|
|
1182
|
+
determines the type of averaging performed on the data:
|
|
1183
|
+
|
|
1184
|
+
``'binary'``:
|
|
1185
|
+
Only report results for the class specified by ``pos_label``.
|
|
1186
|
+
This is applicable only if targets (``y_{true,pred}``) are binary.
|
|
1187
|
+
``'micro'``:
|
|
1188
|
+
Calculate metrics globally by counting the total true positives,
|
|
1189
|
+
false negatives and false positives.
|
|
1190
|
+
``'macro'``:
|
|
1191
|
+
Calculate metrics for each label, and find their unweighted
|
|
1192
|
+
mean. This does not take label imbalance into account.
|
|
1193
|
+
``'weighted'``:
|
|
1194
|
+
Calculate metrics for each label, and find their average weighted
|
|
1195
|
+
by support (the number of true instances for each label). This
|
|
1196
|
+
alters 'macro' to account for label imbalance; it can result in an
|
|
1197
|
+
F-score that is not between precision and recall.
|
|
1198
|
+
``'samples'``:
|
|
1199
|
+
Calculate metrics for each instance, and find their average (only
|
|
1200
|
+
meaningful for multilabel classification where this differs from
|
|
1201
|
+
:func:`accuracy_score`).
|
|
1202
|
+
|
|
1203
|
+
sample_weight : array-like of shape (n_samples,), default=None
|
|
1204
|
+
Sample weights.
|
|
1205
|
+
|
|
1206
|
+
zero_division : "warn", 0 or 1, default="warn"
|
|
1207
|
+
Sets the value to return when there is a zero division, i.e. when all
|
|
1208
|
+
predictions and labels are negative. If set to "warn", this acts as 0,
|
|
1209
|
+
but warnings are also raised.
|
|
1210
|
+
|
|
1211
|
+
Returns
|
|
1212
|
+
-------
|
|
1213
|
+
fbeta_score : float (if average is not None) or array of float, shape =\
|
|
1214
|
+
[n_unique_labels]
|
|
1215
|
+
F-beta score of the positive class in binary classification or weighted
|
|
1216
|
+
average of the F-beta score of each class for the multiclass task.
|
|
1217
|
+
|
|
1218
|
+
See also
|
|
1219
|
+
--------
|
|
1220
|
+
precision_recall_fscore_support, multilabel_confusion_matrix
|
|
1221
|
+
|
|
1222
|
+
References
|
|
1223
|
+
----------
|
|
1224
|
+
.. [1] R. Baeza-Yates and B. Ribeiro-Neto (2011).
|
|
1225
|
+
Modern Information Retrieval. Addison Wesley, pp. 327-328.
|
|
1226
|
+
|
|
1227
|
+
.. [2] `Wikipedia entry for the F1-score
|
|
1228
|
+
<https://en.wikipedia.org/wiki/F1_score>`_
|
|
1229
|
+
|
|
1230
|
+
Examples
|
|
1231
|
+
--------
|
|
1232
|
+
>>> from maxframe.learn.metrics import fbeta_score
|
|
1233
|
+
>>> y_true = [0, 1, 2, 0, 1, 2]
|
|
1234
|
+
>>> y_pred = [0, 2, 1, 0, 0, 1]
|
|
1235
|
+
>>> fbeta_score(y_true, y_pred, average='macro', beta=0.5)
|
|
1236
|
+
0.23...
|
|
1237
|
+
>>> fbeta_score(y_true, y_pred, average='micro', beta=0.5)
|
|
1238
|
+
0.33...
|
|
1239
|
+
>>> fbeta_score(y_true, y_pred, average='weighted', beta=0.5)
|
|
1240
|
+
0.23...
|
|
1241
|
+
>>> fbeta_score(y_true, y_pred, average=None, beta=0.5)
|
|
1242
|
+
array([0.71..., 0. , 0. ])
|
|
1243
|
+
|
|
1244
|
+
Notes
|
|
1245
|
+
-----
|
|
1246
|
+
When ``true positive + false positive == 0`` or
|
|
1247
|
+
``true positive + false negative == 0``, f-score returns 0 and raises
|
|
1248
|
+
``UndefinedMetricWarning``. This behavior can be
|
|
1249
|
+
modified with ``zero_division``.
|
|
1250
|
+
"""
|
|
1251
|
+
|
|
1252
|
+
_, _, f, _ = precision_recall_fscore_support(
|
|
1253
|
+
y_true,
|
|
1254
|
+
y_pred,
|
|
1255
|
+
beta=beta,
|
|
1256
|
+
labels=labels,
|
|
1257
|
+
pos_label=pos_label,
|
|
1258
|
+
average=average,
|
|
1259
|
+
warn_for=("f-score",),
|
|
1260
|
+
sample_weight=sample_weight,
|
|
1261
|
+
zero_division=zero_division,
|
|
1262
|
+
execute=execute,
|
|
1263
|
+
session=session,
|
|
1264
|
+
run_kwargs=run_kwargs,
|
|
1265
|
+
)
|
|
1266
|
+
return f
|