maxframe 2.2.0__cp312-cp312-macosx_10_9_universal2.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of maxframe might be problematic. Click here for more details.
- maxframe/__init__.py +33 -0
- maxframe/_utils.cpython-312-darwin.so +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 +596 -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 +106 -0
- maxframe/codegen/spe/dataframe/misc.py +262 -0
- maxframe/codegen/spe/dataframe/missing.py +64 -0
- maxframe/codegen/spe/dataframe/reduction.py +165 -0
- maxframe/codegen/spe/dataframe/reshape.py +46 -0
- maxframe/codegen/spe/dataframe/sort.py +96 -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 +104 -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 +46 -0
- maxframe/codegen/spe/dataframe/udf.py +62 -0
- maxframe/codegen/spe/dataframe/value_counts.py +31 -0
- maxframe/codegen/spe/dataframe/window.py +65 -0
- maxframe/codegen/spe/learn/__init__.py +15 -0
- maxframe/codegen/spe/learn/contrib/__init__.py +15 -0
- maxframe/codegen/spe/learn/contrib/lightgbm.py +160 -0
- maxframe/codegen/spe/learn/contrib/models.py +41 -0
- maxframe/codegen/spe/learn/contrib/pytorch.py +49 -0
- maxframe/codegen/spe/learn/contrib/tests/__init__.py +13 -0
- maxframe/codegen/spe/learn/contrib/tests/test_lightgbm.py +123 -0
- maxframe/codegen/spe/learn/contrib/tests/test_models.py +41 -0
- maxframe/codegen/spe/learn/contrib/tests/test_pytorch.py +53 -0
- maxframe/codegen/spe/learn/contrib/tests/test_xgboost.py +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 +165 -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 +627 -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 +251 -0
- maxframe/core/__init__.py +53 -0
- maxframe/core/accessor.py +45 -0
- maxframe/core/base.py +156 -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 +98 -0
- maxframe/core/entity/tests/__init__.py +13 -0
- maxframe/core/entity/tests/test_objects.py +42 -0
- maxframe/core/entity/tileables.py +367 -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 +91 -0
- maxframe/core/graph/builder/tileable.py +34 -0
- maxframe/core/graph/builder/utils.py +37 -0
- maxframe/core/graph/core.cpython-312-darwin.so +0 -0
- maxframe/core/graph/core.pyx +478 -0
- maxframe/core/graph/entity.py +158 -0
- maxframe/core/graph/tests/__init__.py +13 -0
- maxframe/core/graph/tests/test_graph.py +205 -0
- maxframe/core/mode.py +96 -0
- maxframe/core/operator/__init__.py +32 -0
- maxframe/core/operator/base.py +480 -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 +89 -0
- maxframe/dataframe/accessors/__init__.py +15 -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 +82 -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 +43 -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 +37 -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 +224 -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 +37 -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 +369 -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/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 +724 -0
- maxframe/dataframe/arithmetic/truediv.py +64 -0
- maxframe/dataframe/arithmetic/trunc.py +28 -0
- maxframe/dataframe/arrays.py +864 -0
- maxframe/dataframe/core.py +2393 -0
- maxframe/dataframe/datasource/__init__.py +33 -0
- maxframe/dataframe/datasource/core.py +88 -0
- maxframe/dataframe/datasource/dataframe.py +59 -0
- maxframe/dataframe/datasource/date_range.py +512 -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 +498 -0
- maxframe/dataframe/datasource/index.py +117 -0
- maxframe/dataframe/datasource/read_csv.py +533 -0
- maxframe/dataframe/datasource/read_odps_query.py +513 -0
- maxframe/dataframe/datasource/read_odps_table.py +273 -0
- maxframe/dataframe/datasource/read_parquet.py +426 -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 +30 -0
- maxframe/dataframe/datastore/core.py +19 -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_odps.py +258 -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 +132 -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 +101 -0
- maxframe/dataframe/groupby/aggregation.py +437 -0
- maxframe/dataframe/groupby/apply.py +235 -0
- maxframe/dataframe/groupby/apply_chunk.py +409 -0
- maxframe/dataframe/groupby/core.py +326 -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 +103 -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 +90 -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 +50 -0
- maxframe/dataframe/merge/append.py +120 -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 +131 -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 +51 -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 +442 -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/get_dummies.py +241 -0
- maxframe/dataframe/misc/isin.py +220 -0
- maxframe/dataframe/misc/map.py +347 -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/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 +615 -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 +230 -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 +124 -0
- maxframe/dataframe/reduction/aggregation.py +499 -0
- maxframe/dataframe/reduction/all.py +78 -0
- maxframe/dataframe/reduction/any.py +78 -0
- maxframe/dataframe/reduction/argmax.py +100 -0
- maxframe/dataframe/reduction/argmin.py +100 -0
- maxframe/dataframe/reduction/core.py +898 -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/nunique.py +142 -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 +529 -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 +42 -0
- maxframe/dataframe/sort/argsort.py +62 -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/sort_index.py +153 -0
- maxframe/dataframe/sort/sort_values.py +301 -0
- maxframe/dataframe/sort/tests/__init__.py +13 -0
- maxframe/dataframe/sort/tests/test_sort.py +81 -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 +104 -0
- maxframe/dataframe/tests/test_utils.py +165 -0
- maxframe/dataframe/tseries/__init__.py +13 -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 +185 -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 +1647 -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 +47 -0
- maxframe/extension.py +107 -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 +132 -0
- maxframe/io/objects/tests/__init__.py +13 -0
- maxframe/io/objects/tests/test_object_io.py +79 -0
- maxframe/io/odpsio/__init__.py +23 -0
- maxframe/io/odpsio/arrow.py +161 -0
- maxframe/io/odpsio/schema.py +496 -0
- maxframe/io/odpsio/tableio.py +727 -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 +580 -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 +77 -0
- maxframe/learn/contrib/llm/models/__init__.py +15 -0
- maxframe/learn/contrib/llm/models/dashscope.py +108 -0
- maxframe/learn/contrib/llm/models/managed.py +54 -0
- maxframe/learn/contrib/llm/multi_modal.py +135 -0
- maxframe/learn/contrib/llm/text.py +302 -0
- maxframe/learn/contrib/models.py +106 -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 +117 -0
- maxframe/learn/contrib/xgboost/core.py +445 -0
- maxframe/learn/contrib/xgboost/dmatrix.py +157 -0
- maxframe/learn/contrib/xgboost/predict.py +131 -0
- maxframe/learn/contrib/xgboost/regressor.py +86 -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 +179 -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 +390 -0
- maxframe/learn/preprocessing/_data/normalize.py +127 -0
- maxframe/learn/preprocessing/_data/standard_scaler.py +503 -0
- maxframe/learn/preprocessing/_data/utils.py +79 -0
- maxframe/learn/preprocessing/_label/__init__.py +16 -0
- maxframe/learn/preprocessing/_label/_label_binarizer.py +599 -0
- maxframe/learn/preprocessing/_label/_label_encoder.py +174 -0
- maxframe/learn/utils/__init__.py +19 -0
- maxframe/learn/utils/_encode.py +314 -0
- maxframe/learn/utils/checks.py +160 -0
- maxframe/learn/utils/core.py +121 -0
- maxframe/learn/utils/extmath.py +213 -0
- maxframe/learn/utils/multiclass.py +292 -0
- maxframe/learn/utils/odpsio.py +193 -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 +604 -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 +21 -0
- maxframe/lib/filesystem/_glob.py +173 -0
- maxframe/lib/filesystem/_oss_lib/__init__.py +13 -0
- maxframe/lib/filesystem/_oss_lib/common.py +270 -0
- maxframe/lib/filesystem/_oss_lib/glob.py +147 -0
- maxframe/lib/filesystem/_oss_lib/handle.py +152 -0
- maxframe/lib/filesystem/arrow.py +236 -0
- maxframe/lib/filesystem/base.py +263 -0
- maxframe/lib/filesystem/core.py +95 -0
- maxframe/lib/filesystem/fsmap.py +164 -0
- maxframe/lib/filesystem/hdfs.py +31 -0
- maxframe/lib/filesystem/local.py +112 -0
- maxframe/lib/filesystem/oss.py +226 -0
- maxframe/lib/filesystem/tests/__init__.py +13 -0
- maxframe/lib/filesystem/tests/test_filesystem.py +225 -0
- maxframe/lib/filesystem/tests/test_oss.py +220 -0
- maxframe/lib/functools_compat.py +81 -0
- maxframe/lib/mmh3.cpython-312-darwin.so +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 +150 -0
- maxframe/mixin.py +157 -0
- maxframe/opcodes.py +649 -0
- maxframe/protocol.py +607 -0
- maxframe/remote/__init__.py +18 -0
- maxframe/remote/core.py +208 -0
- maxframe/remote/run_script.py +124 -0
- maxframe/serialization/__init__.py +39 -0
- maxframe/serialization/arrow.py +120 -0
- maxframe/serialization/blob.py +32 -0
- maxframe/serialization/core.cpython-312-darwin.so +0 -0
- maxframe/serialization/core.pxd +50 -0
- maxframe/serialization/core.pyi +66 -0
- maxframe/serialization/core.pyx +1265 -0
- maxframe/serialization/exception.py +84 -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 +487 -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 +552 -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 +458 -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 +594 -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 +205 -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 +716 -0
- maxframe/tests/__init__.py +13 -0
- maxframe/tests/test_protocol.py +178 -0
- maxframe/tests/test_utils.py +615 -0
- maxframe/tests/utils.py +245 -0
- maxframe/typing_.py +42 -0
- maxframe/udf.py +260 -0
- maxframe/utils.py +1721 -0
- maxframe-2.2.0.dist-info/METADATA +110 -0
- maxframe-2.2.0.dist-info/RECORD +1094 -0
- maxframe-2.2.0.dist-info/WHEEL +5 -0
- maxframe-2.2.0.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 +802 -0
- maxframe_client/session/task.py +322 -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 +180 -0
- maxframe_client/tests/test_session.py +385 -0
|
@@ -0,0 +1,730 @@
|
|
|
1
|
+
# Copyright 1999-2025 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import inspect
|
|
16
|
+
from typing import Any, MutableMapping, Union
|
|
17
|
+
|
|
18
|
+
import numpy as np
|
|
19
|
+
from pandas import DataFrame, Series
|
|
20
|
+
|
|
21
|
+
from ... import opcodes
|
|
22
|
+
from ...core import OutputType
|
|
23
|
+
from ...core.operator import OperatorLogicKeyGeneratorMixin
|
|
24
|
+
from ...serialization.serializables import (
|
|
25
|
+
AnyField,
|
|
26
|
+
BoolField,
|
|
27
|
+
DictField,
|
|
28
|
+
FunctionField,
|
|
29
|
+
StringField,
|
|
30
|
+
TupleField,
|
|
31
|
+
)
|
|
32
|
+
from ...udf import BuiltinFunction, MarkedFunction
|
|
33
|
+
from ...utils import copy_if_possible, get_func_token, make_dtype, make_dtypes, tokenize
|
|
34
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
35
|
+
from ..utils import (
|
|
36
|
+
InferredDataFrameMeta,
|
|
37
|
+
build_df,
|
|
38
|
+
build_series,
|
|
39
|
+
copy_func_scheduling_hints,
|
|
40
|
+
infer_dataframe_return_value,
|
|
41
|
+
pack_func_args,
|
|
42
|
+
parse_index,
|
|
43
|
+
validate_axis,
|
|
44
|
+
validate_output_types,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class ApplyOperandLogicKeyGeneratorMixin(OperatorLogicKeyGeneratorMixin):
|
|
49
|
+
def _get_logic_key_token_values(self):
|
|
50
|
+
token_values = super()._get_logic_key_token_values() + [
|
|
51
|
+
self.axis,
|
|
52
|
+
self.convert_dtype,
|
|
53
|
+
self.raw,
|
|
54
|
+
self.result_type,
|
|
55
|
+
self.elementwise,
|
|
56
|
+
]
|
|
57
|
+
if self.func:
|
|
58
|
+
return token_values + [get_func_token(self.func)]
|
|
59
|
+
else: # pragma: no cover
|
|
60
|
+
return token_values
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class DataFrameApply(
|
|
64
|
+
DataFrameOperator, DataFrameOperatorMixin, ApplyOperandLogicKeyGeneratorMixin
|
|
65
|
+
):
|
|
66
|
+
_op_type_ = opcodes.APPLY
|
|
67
|
+
_legacy_name = "ApplyOperator" # since v2.0.0
|
|
68
|
+
|
|
69
|
+
func = FunctionField("func")
|
|
70
|
+
axis = AnyField("axis", default=0)
|
|
71
|
+
convert_dtype = BoolField("convert_dtype", default=True)
|
|
72
|
+
raw = BoolField("raw", default=False)
|
|
73
|
+
result_type = StringField("result_type", default=None)
|
|
74
|
+
elementwise = BoolField("elementwise")
|
|
75
|
+
logic_key = StringField("logic_key")
|
|
76
|
+
need_clean_up_func = BoolField("need_clean_up_func")
|
|
77
|
+
args = TupleField("args", default=())
|
|
78
|
+
kwds = DictField("kwds", default={})
|
|
79
|
+
|
|
80
|
+
def __init__(self, output_type=None, **kw):
|
|
81
|
+
if output_type:
|
|
82
|
+
kw["_output_types"] = [output_type]
|
|
83
|
+
super().__init__(**kw)
|
|
84
|
+
if hasattr(self, "func"):
|
|
85
|
+
copy_func_scheduling_hints(self.func, self)
|
|
86
|
+
|
|
87
|
+
def has_custom_code(self) -> bool:
|
|
88
|
+
return not isinstance(self.func, BuiltinFunction)
|
|
89
|
+
|
|
90
|
+
def _update_key(self):
|
|
91
|
+
values = [v for v in self._values_ if v is not self.func] + [
|
|
92
|
+
get_func_token(self.func)
|
|
93
|
+
]
|
|
94
|
+
self._obj_set("_key", tokenize(type(self).__name__, *values))
|
|
95
|
+
return self
|
|
96
|
+
|
|
97
|
+
def _infer_df_func_returns(
|
|
98
|
+
self, df, dtypes, dtype=None, name=None, index=None
|
|
99
|
+
) -> InferredDataFrameMeta:
|
|
100
|
+
if isinstance(self.func, np.ufunc):
|
|
101
|
+
output_type = OutputType.dataframe
|
|
102
|
+
new_elementwise = True
|
|
103
|
+
else:
|
|
104
|
+
output_type = self.output_types[0] if self.output_types else None
|
|
105
|
+
new_elementwise = False
|
|
106
|
+
|
|
107
|
+
def infer_func(in_df):
|
|
108
|
+
return in_df.apply(
|
|
109
|
+
self.func,
|
|
110
|
+
axis=self.axis,
|
|
111
|
+
raw=self.raw,
|
|
112
|
+
result_type=self.result_type,
|
|
113
|
+
args=self.args,
|
|
114
|
+
**self.kwds,
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
inferred_meta = infer_dataframe_return_value(
|
|
118
|
+
df,
|
|
119
|
+
infer_func,
|
|
120
|
+
output_type=output_type,
|
|
121
|
+
dtypes=dtypes,
|
|
122
|
+
dtype=dtype,
|
|
123
|
+
name=name,
|
|
124
|
+
index=index,
|
|
125
|
+
inherit_index=True,
|
|
126
|
+
build_kw={"size": 2},
|
|
127
|
+
)
|
|
128
|
+
inferred_meta.check_absence("output_type", "dtypes")
|
|
129
|
+
|
|
130
|
+
self.output_types = (
|
|
131
|
+
[inferred_meta.output_type]
|
|
132
|
+
if not self.output_types and inferred_meta.output_type
|
|
133
|
+
else self.output_types
|
|
134
|
+
)
|
|
135
|
+
self.elementwise = (
|
|
136
|
+
new_elementwise if self.elementwise is None else self.elementwise
|
|
137
|
+
)
|
|
138
|
+
return inferred_meta
|
|
139
|
+
|
|
140
|
+
def _call_df_or_series(self, df):
|
|
141
|
+
return self.new_df_or_series([df])
|
|
142
|
+
|
|
143
|
+
def _call_dataframe(self, df, dtypes=None, dtype=None, name=None, index=None):
|
|
144
|
+
# for backward compatibility
|
|
145
|
+
dtype = dtype if dtype is not None else dtypes
|
|
146
|
+
inferred_meta = self._infer_df_func_returns(
|
|
147
|
+
df, dtypes, dtype=dtype, name=name, index=index
|
|
148
|
+
)
|
|
149
|
+
index_value = inferred_meta.index_value
|
|
150
|
+
if index_value is None:
|
|
151
|
+
index_value = parse_index(None, (df.key, df.index_value.key))
|
|
152
|
+
|
|
153
|
+
if self.elementwise:
|
|
154
|
+
shape = df.shape
|
|
155
|
+
elif self.output_types[0] == OutputType.dataframe:
|
|
156
|
+
shape = [np.nan, np.nan]
|
|
157
|
+
shape[1 - self.axis] = df.shape[1 - self.axis]
|
|
158
|
+
if self.axis == 1:
|
|
159
|
+
shape[1] = len(inferred_meta.dtypes)
|
|
160
|
+
shape = tuple(shape)
|
|
161
|
+
else:
|
|
162
|
+
shape = (df.shape[1 - self.axis],)
|
|
163
|
+
|
|
164
|
+
if self.output_types[0] == OutputType.dataframe:
|
|
165
|
+
kw = dict(
|
|
166
|
+
shape=shape,
|
|
167
|
+
dtypes=inferred_meta.dtypes,
|
|
168
|
+
index_value=index_value if self.axis == 0 else df.index_value,
|
|
169
|
+
columns_value=parse_index(inferred_meta.dtypes.index, store_data=True),
|
|
170
|
+
)
|
|
171
|
+
return self.new_dataframe([df], **kw)
|
|
172
|
+
else:
|
|
173
|
+
name, dtype = inferred_meta.name, inferred_meta.dtype
|
|
174
|
+
return self.new_series(
|
|
175
|
+
[df], shape=shape, name=name, dtype=dtype, index_value=index_value
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
def _call_series(self, series, dtypes=None, dtype=None, name=None, index=None):
|
|
179
|
+
# for backward compatibility
|
|
180
|
+
dtype = dtype if dtype is not None else dtypes
|
|
181
|
+
if not self.convert_dtype:
|
|
182
|
+
dtype = dtype if dtype is not None else np.dtype("object")
|
|
183
|
+
return self.new_series(
|
|
184
|
+
[series],
|
|
185
|
+
dtype=dtype,
|
|
186
|
+
shape=series.shape,
|
|
187
|
+
index_value=series.index_value,
|
|
188
|
+
name=name,
|
|
189
|
+
)
|
|
190
|
+
else:
|
|
191
|
+
|
|
192
|
+
def infer_func(obj):
|
|
193
|
+
return obj.apply(self.func, args=self.args, **self.kwds)
|
|
194
|
+
|
|
195
|
+
output_type = self.output_types[0] if self.output_types else None
|
|
196
|
+
inferred_meta = infer_dataframe_return_value(
|
|
197
|
+
series,
|
|
198
|
+
infer_func,
|
|
199
|
+
output_type=output_type,
|
|
200
|
+
dtypes=dtypes,
|
|
201
|
+
dtype=dtype,
|
|
202
|
+
name=name,
|
|
203
|
+
index=index,
|
|
204
|
+
inherit_index=True,
|
|
205
|
+
build_kw={"size": 2},
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
output_type = inferred_meta.output_type or output_type
|
|
209
|
+
if output_type == OutputType.dataframe:
|
|
210
|
+
dtypes = inferred_meta.dtypes
|
|
211
|
+
if dtypes is None:
|
|
212
|
+
raise TypeError(
|
|
213
|
+
"Cannot determine dtypes, please specify `dtypes` as argument"
|
|
214
|
+
)
|
|
215
|
+
return self.new_dataframe(
|
|
216
|
+
[series],
|
|
217
|
+
shape=(series.shape[0], len(dtypes)),
|
|
218
|
+
index_value=inferred_meta.index_value,
|
|
219
|
+
columns_value=parse_index(
|
|
220
|
+
inferred_meta.dtypes.index, store_data=True
|
|
221
|
+
),
|
|
222
|
+
dtypes=inferred_meta.dtypes,
|
|
223
|
+
)
|
|
224
|
+
else:
|
|
225
|
+
dtype = inferred_meta.dtype or np.dtype("O")
|
|
226
|
+
return self.new_series(
|
|
227
|
+
[series],
|
|
228
|
+
dtype=dtype,
|
|
229
|
+
shape=series.shape,
|
|
230
|
+
index_value=inferred_meta.index_value,
|
|
231
|
+
name=inferred_meta.name,
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
def __call__(self, df_or_series, dtypes=None, dtype=None, name=None, index=None):
|
|
235
|
+
axis = getattr(self, "axis", None) or 0
|
|
236
|
+
dtypes = make_dtypes(dtypes)
|
|
237
|
+
dtype = make_dtype(dtype)
|
|
238
|
+
self.axis = validate_axis(axis, df_or_series)
|
|
239
|
+
|
|
240
|
+
if self.output_types and self.output_types[0] == OutputType.df_or_series:
|
|
241
|
+
return self._call_df_or_series(df_or_series)
|
|
242
|
+
|
|
243
|
+
if df_or_series.op.output_types[0] == OutputType.dataframe:
|
|
244
|
+
return self._call_dataframe(
|
|
245
|
+
df_or_series, dtypes=dtypes, dtype=dtype, name=name, index=index
|
|
246
|
+
)
|
|
247
|
+
else:
|
|
248
|
+
return self._call_series(
|
|
249
|
+
df_or_series, dtypes=dtypes, dtype=dtype, name=name, index=index
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
def _build_stub_pandas_obj(self, df_or_series) -> Union[DataFrame, Series]:
|
|
253
|
+
if self.output_types[0] == OutputType.dataframe:
|
|
254
|
+
return build_df(df_or_series, size=2)
|
|
255
|
+
return build_series(df_or_series, size=2, name=df_or_series.name)
|
|
256
|
+
|
|
257
|
+
def get_packed_funcs(self, df=None) -> Any:
|
|
258
|
+
stub_df = self._build_stub_pandas_obj(df or self.inputs[0])
|
|
259
|
+
args = copy_if_possible(self.args)
|
|
260
|
+
kwargs = copy_if_possible(self.kwds)
|
|
261
|
+
return pack_func_args(stub_df, self.func, *args, **kwargs)
|
|
262
|
+
|
|
263
|
+
@classmethod
|
|
264
|
+
def estimate_size(
|
|
265
|
+
cls, ctx: MutableMapping[str, Union[int, float]], op: "DataFrameApply"
|
|
266
|
+
) -> None:
|
|
267
|
+
if isinstance(op.func, MarkedFunction):
|
|
268
|
+
ctx[op.outputs[0].key] = float("inf")
|
|
269
|
+
super().estimate_size(ctx, op)
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
# keep for import compatibility
|
|
273
|
+
ApplyOperator = DataFrameApply
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
def df_apply(
|
|
277
|
+
df,
|
|
278
|
+
func,
|
|
279
|
+
axis=0,
|
|
280
|
+
raw=False,
|
|
281
|
+
result_type=None,
|
|
282
|
+
args=(),
|
|
283
|
+
dtypes=None,
|
|
284
|
+
dtype=None,
|
|
285
|
+
name=None,
|
|
286
|
+
output_type=None,
|
|
287
|
+
index=None,
|
|
288
|
+
elementwise=None,
|
|
289
|
+
skip_infer=False,
|
|
290
|
+
**kwds,
|
|
291
|
+
):
|
|
292
|
+
# FIXME: https://github.com/aliyun/alibabacloud-odps-maxframe-client/issues/50
|
|
293
|
+
"""
|
|
294
|
+
Apply a function along an axis of the DataFrame.
|
|
295
|
+
|
|
296
|
+
Objects passed to the function are Series objects whose index is
|
|
297
|
+
either the DataFrame's index (``axis=0``) or the DataFrame's columns
|
|
298
|
+
(``axis=1``). By default (``result_type=None``), the final return type
|
|
299
|
+
is inferred from the return type of the applied function. Otherwise,
|
|
300
|
+
it depends on the `result_type` argument.
|
|
301
|
+
|
|
302
|
+
Parameters
|
|
303
|
+
----------
|
|
304
|
+
func : function
|
|
305
|
+
Function to apply to each column or row.
|
|
306
|
+
axis : {0 or 'index', 1 or 'columns'}, default 0
|
|
307
|
+
Axis along which the function is applied:
|
|
308
|
+
|
|
309
|
+
* 0 or 'index': apply function to each column.
|
|
310
|
+
* 1 or 'columns': apply function to each row.
|
|
311
|
+
|
|
312
|
+
raw : bool, default False
|
|
313
|
+
Determines if row or column is passed as a Series or ndarray object:
|
|
314
|
+
|
|
315
|
+
* ``False`` : passes each row or column as a Series to the
|
|
316
|
+
function.
|
|
317
|
+
* ``True`` : the passed function will receive ndarray objects
|
|
318
|
+
instead.
|
|
319
|
+
If you are just applying a NumPy reduction function this will
|
|
320
|
+
achieve much better performance.
|
|
321
|
+
|
|
322
|
+
result_type : {'expand', 'reduce', 'broadcast', None}, default None
|
|
323
|
+
These only act when ``axis=1`` (columns):
|
|
324
|
+
|
|
325
|
+
* 'expand' : list-like results will be turned into columns.
|
|
326
|
+
* 'reduce' : returns a Series if possible rather than expanding
|
|
327
|
+
list-like results. This is the opposite of 'expand'.
|
|
328
|
+
* 'broadcast' : results will be broadcast to the original shape
|
|
329
|
+
of the DataFrame, the original index and columns will be
|
|
330
|
+
retained.
|
|
331
|
+
|
|
332
|
+
The default behaviour (None) depends on the return value of the
|
|
333
|
+
applied function: list-like results will be returned as a Series
|
|
334
|
+
of those. However if the apply function returns a Series these
|
|
335
|
+
are expanded to columns.
|
|
336
|
+
|
|
337
|
+
output_type : {'dataframe', 'series'}, default None
|
|
338
|
+
Specify type of returned object. See `Notes` for more details.
|
|
339
|
+
|
|
340
|
+
dtypes : Series, default None
|
|
341
|
+
Specify dtypes of returned DataFrames. See `Notes` for more details.
|
|
342
|
+
|
|
343
|
+
dtype : numpy.dtype, default None
|
|
344
|
+
Specify dtype of returned Series. See `Notes` for more details.
|
|
345
|
+
|
|
346
|
+
name : str, default None
|
|
347
|
+
Specify name of returned Series. See `Notes` for more details.
|
|
348
|
+
|
|
349
|
+
index : Index, default None
|
|
350
|
+
Specify index of returned object. See `Notes` for more details.
|
|
351
|
+
|
|
352
|
+
elementwise : bool, default False
|
|
353
|
+
Specify whether ``func`` is an elementwise function:
|
|
354
|
+
|
|
355
|
+
* ``False`` : The function is not elementwise. MaxFrame will try
|
|
356
|
+
concatenating chunks in rows (when ``axis=0``) or in columns
|
|
357
|
+
(when ``axis=1``) and then apply ``func`` onto the concatenated
|
|
358
|
+
chunk. The concatenation step can cause extra latency.
|
|
359
|
+
* ``True`` : The function is elementwise. MaxFrame will apply
|
|
360
|
+
``func`` to original chunks. This will not introduce extra
|
|
361
|
+
concatenation step and reduce overhead.
|
|
362
|
+
|
|
363
|
+
skip_infer: bool, default False
|
|
364
|
+
Whether infer dtypes when dtypes or output_type is not specified.
|
|
365
|
+
|
|
366
|
+
args : tuple
|
|
367
|
+
Positional arguments to pass to `func` in addition to the
|
|
368
|
+
array/series.
|
|
369
|
+
|
|
370
|
+
**kwds
|
|
371
|
+
Additional keyword arguments to pass as keywords arguments to
|
|
372
|
+
`func`.
|
|
373
|
+
|
|
374
|
+
Returns
|
|
375
|
+
-------
|
|
376
|
+
Series or DataFrame
|
|
377
|
+
Result of applying ``func`` along the given axis of the
|
|
378
|
+
DataFrame.
|
|
379
|
+
|
|
380
|
+
See Also
|
|
381
|
+
--------
|
|
382
|
+
DataFrame.applymap: For elementwise operations.
|
|
383
|
+
DataFrame.aggregate: Only perform aggregating type operations.
|
|
384
|
+
DataFrame.transform: Only perform transforming type operations.
|
|
385
|
+
|
|
386
|
+
Notes
|
|
387
|
+
-----
|
|
388
|
+
When deciding output dtypes and shape of the return value, MaxFrame will
|
|
389
|
+
try applying ``func`` onto a mock DataFrame, and the apply call may
|
|
390
|
+
fail. When this happens, you need to specify the type of apply call
|
|
391
|
+
(DataFrame or Series) in output_type.
|
|
392
|
+
|
|
393
|
+
* For DataFrame output, you need to specify a list or a pandas Series
|
|
394
|
+
as ``dtypes`` of output DataFrame. ``index`` of output can also be
|
|
395
|
+
specified.
|
|
396
|
+
* For Series output, you need to specify ``dtype`` and ``name`` of
|
|
397
|
+
output Series.
|
|
398
|
+
* For any input with data type ``pandas.ArrowDtype(pyarrow.MapType)``, it will always
|
|
399
|
+
be converted to a Python dict. And for any output with this data type, it must be
|
|
400
|
+
returned as a Python dict as well.
|
|
401
|
+
|
|
402
|
+
Examples
|
|
403
|
+
--------
|
|
404
|
+
>>> import numpy as np
|
|
405
|
+
>>> import maxframe.tensor as mt
|
|
406
|
+
>>> import maxframe.dataframe as md
|
|
407
|
+
>>> df = md.DataFrame([[4, 9]] * 3, columns=['A', 'B'])
|
|
408
|
+
>>> df.execute()
|
|
409
|
+
A B
|
|
410
|
+
0 4 9
|
|
411
|
+
1 4 9
|
|
412
|
+
2 4 9
|
|
413
|
+
|
|
414
|
+
Using a reducing function on either axis
|
|
415
|
+
|
|
416
|
+
>>> df.apply(np.sum, axis=0).execute()
|
|
417
|
+
A 12
|
|
418
|
+
B 27
|
|
419
|
+
dtype: int64
|
|
420
|
+
|
|
421
|
+
>>> df.apply(lambda row: int(np.sum(row)), axis=1).execute()
|
|
422
|
+
0 13
|
|
423
|
+
1 13
|
|
424
|
+
2 13
|
|
425
|
+
dtype: int64
|
|
426
|
+
|
|
427
|
+
Passing ``result_type='expand'`` will expand list-like results
|
|
428
|
+
to columns of a Dataframe
|
|
429
|
+
|
|
430
|
+
>>> df.apply(lambda x: [1, 2], axis=1, result_type='expand').execute()
|
|
431
|
+
0 1
|
|
432
|
+
0 1 2
|
|
433
|
+
1 1 2
|
|
434
|
+
2 1 2
|
|
435
|
+
|
|
436
|
+
Returning a Series inside the function is similar to passing
|
|
437
|
+
``result_type='expand'``. The resulting column names
|
|
438
|
+
will be the Series index.
|
|
439
|
+
|
|
440
|
+
>>> df.apply(lambda x: pd.Series([1, 2], index=['foo', 'bar']), axis=1).execute()
|
|
441
|
+
foo bar
|
|
442
|
+
0 1 2
|
|
443
|
+
1 1 2
|
|
444
|
+
2 1 2
|
|
445
|
+
|
|
446
|
+
Passing ``result_type='broadcast'`` will ensure the same shape
|
|
447
|
+
result, whether list-like or scalar is returned by the function,
|
|
448
|
+
and broadcast it along the axis. The resulting column names will
|
|
449
|
+
be the originals.
|
|
450
|
+
|
|
451
|
+
>>> df.apply(lambda x: [1, 2], axis=1, result_type='broadcast').execute()
|
|
452
|
+
A B
|
|
453
|
+
0 1 2
|
|
454
|
+
1 1 2
|
|
455
|
+
2 1 2
|
|
456
|
+
|
|
457
|
+
Create a dataframe with a map type.
|
|
458
|
+
|
|
459
|
+
>>> import pyarrow as pa
|
|
460
|
+
>>> import pandas as pd
|
|
461
|
+
>>> from maxframe.lib.dtypes_extension import dict_
|
|
462
|
+
>>> col_a = pd.Series(
|
|
463
|
+
... data=[[("k1", 1), ("k2", 2)], [("k1", 3)], None],
|
|
464
|
+
... index=[1, 2, 3],
|
|
465
|
+
... dtype=dict_(pa.string(), pa.int64()),
|
|
466
|
+
... )
|
|
467
|
+
>>> col_b = pd.Series(
|
|
468
|
+
... data=["A", "B", "C"],
|
|
469
|
+
... index=[1, 2, 3],
|
|
470
|
+
... )
|
|
471
|
+
>>> df = md.DataFrame({"A": col_a, "B": col_b})
|
|
472
|
+
>>> df.execute()
|
|
473
|
+
A B
|
|
474
|
+
1 [('k1', 1), ('k2', 2)] A
|
|
475
|
+
2 [('k1', 3)] B
|
|
476
|
+
3 <NA> C
|
|
477
|
+
|
|
478
|
+
Define a function that updates the map type with a new key-value pair.
|
|
479
|
+
|
|
480
|
+
>>> def custom_set_item(x):
|
|
481
|
+
... if x["A"] is not None:
|
|
482
|
+
... x["A"]["k2"] = 10
|
|
483
|
+
... return x
|
|
484
|
+
|
|
485
|
+
>>> df.apply(
|
|
486
|
+
... custom_set_item,
|
|
487
|
+
... axis=1,
|
|
488
|
+
... output_type="dataframe",
|
|
489
|
+
... dtypes=df.dtypes.copy(),
|
|
490
|
+
... ).execute()
|
|
491
|
+
A B
|
|
492
|
+
1 [('k1', 1), ('k2', 10)] A
|
|
493
|
+
2 [('k1', 3), ('k2', 10)] B
|
|
494
|
+
3 <NA> C
|
|
495
|
+
"""
|
|
496
|
+
if isinstance(func, (list, dict)):
|
|
497
|
+
return df.aggregate(func, axis)
|
|
498
|
+
|
|
499
|
+
output_types = kwds.pop("output_types", None)
|
|
500
|
+
object_type = kwds.pop("object_type", None)
|
|
501
|
+
output_types = validate_output_types(
|
|
502
|
+
output_type=output_type, output_types=output_types, object_type=object_type
|
|
503
|
+
)
|
|
504
|
+
output_type = output_types[0] if output_types else None
|
|
505
|
+
if skip_infer and output_type is None:
|
|
506
|
+
output_type = OutputType.df_or_series
|
|
507
|
+
|
|
508
|
+
# calling member function
|
|
509
|
+
if isinstance(func, str):
|
|
510
|
+
func = getattr(df, func)
|
|
511
|
+
sig = inspect.getfullargspec(func)
|
|
512
|
+
if "axis" in sig.args:
|
|
513
|
+
kwds["axis"] = axis
|
|
514
|
+
return func(*args, **kwds)
|
|
515
|
+
|
|
516
|
+
op = DataFrameApply(
|
|
517
|
+
func=func,
|
|
518
|
+
axis=axis,
|
|
519
|
+
raw=raw,
|
|
520
|
+
result_type=result_type,
|
|
521
|
+
args=args,
|
|
522
|
+
kwds=kwds,
|
|
523
|
+
output_type=output_type,
|
|
524
|
+
elementwise=elementwise,
|
|
525
|
+
)
|
|
526
|
+
return op(df, dtypes=dtypes, dtype=dtype, name=name, index=index)
|
|
527
|
+
|
|
528
|
+
|
|
529
|
+
def series_apply(
|
|
530
|
+
series,
|
|
531
|
+
func,
|
|
532
|
+
convert_dtype=True,
|
|
533
|
+
output_type=None,
|
|
534
|
+
args=(),
|
|
535
|
+
dtypes=None,
|
|
536
|
+
dtype=None,
|
|
537
|
+
name=None,
|
|
538
|
+
index=None,
|
|
539
|
+
skip_infer=False,
|
|
540
|
+
**kwds,
|
|
541
|
+
):
|
|
542
|
+
"""
|
|
543
|
+
Invoke function on values of Series.
|
|
544
|
+
|
|
545
|
+
Can be ufunc (a NumPy function that applies to the entire Series)
|
|
546
|
+
or a Python function that only works on single values.
|
|
547
|
+
|
|
548
|
+
Parameters
|
|
549
|
+
----------
|
|
550
|
+
func : function
|
|
551
|
+
Python function or NumPy ufunc to apply.
|
|
552
|
+
|
|
553
|
+
convert_dtype : bool, default True
|
|
554
|
+
Try to find better dtype for elementwise function results. If
|
|
555
|
+
False, leave as dtype=object.
|
|
556
|
+
|
|
557
|
+
output_type : {'dataframe', 'series'}, default None
|
|
558
|
+
Specify type of returned object. See `Notes` for more details.
|
|
559
|
+
|
|
560
|
+
dtypes : Series, default None
|
|
561
|
+
Specify dtypes of returned DataFrames. See `Notes` for more details.
|
|
562
|
+
|
|
563
|
+
dtype : numpy.dtype, default None
|
|
564
|
+
Specify dtype of returned Series. See `Notes` for more details.
|
|
565
|
+
|
|
566
|
+
name : str, default None
|
|
567
|
+
Specify name of returned Series. See `Notes` for more details.
|
|
568
|
+
|
|
569
|
+
index : Index, default None
|
|
570
|
+
Specify index of returned object. See `Notes` for more details.
|
|
571
|
+
|
|
572
|
+
args : tuple
|
|
573
|
+
Positional arguments passed to func after the series value.
|
|
574
|
+
|
|
575
|
+
skip_infer: bool, default False
|
|
576
|
+
Whether infer dtypes when dtypes or output_type is not specified.
|
|
577
|
+
|
|
578
|
+
**kwds
|
|
579
|
+
Additional keyword arguments passed to func.
|
|
580
|
+
|
|
581
|
+
Returns
|
|
582
|
+
-------
|
|
583
|
+
Series or DataFrame
|
|
584
|
+
If func returns a Series object the result will be a DataFrame.
|
|
585
|
+
|
|
586
|
+
See Also
|
|
587
|
+
--------
|
|
588
|
+
Series.map: For element-wise operations.
|
|
589
|
+
Series.agg: Only perform aggregating type operations.
|
|
590
|
+
Series.transform: Only perform transforming type operations.
|
|
591
|
+
|
|
592
|
+
Notes
|
|
593
|
+
-----
|
|
594
|
+
When deciding output dtypes and shape of the return value, MaxFrame will
|
|
595
|
+
try applying ``func`` onto a mock Series, and the apply call may fail.
|
|
596
|
+
When this happens, you need to specify the type of apply call
|
|
597
|
+
(DataFrame or Series) in output_type.
|
|
598
|
+
|
|
599
|
+
* For DataFrame output, you need to specify a list or a pandas Series
|
|
600
|
+
as ``dtypes`` of output DataFrame. ``index`` of output can also be
|
|
601
|
+
specified.
|
|
602
|
+
* For Series output, you need to specify ``dtype`` and ``name`` of
|
|
603
|
+
output Series.
|
|
604
|
+
* For any input with data type ``pandas.ArrowDtype(pyarrow.MapType)``, it will always
|
|
605
|
+
be converted to a Python dict. And for any output with this data type, it must be
|
|
606
|
+
returned as a Python dict as well.
|
|
607
|
+
|
|
608
|
+
Examples
|
|
609
|
+
--------
|
|
610
|
+
Create a series with typical summer temperatures for each city.
|
|
611
|
+
|
|
612
|
+
>>> import maxframe.tensor as mt
|
|
613
|
+
>>> import maxframe.dataframe as md
|
|
614
|
+
>>> s = md.Series([20, 21, 12],
|
|
615
|
+
... index=['London', 'New York', 'Helsinki'])
|
|
616
|
+
>>> s.execute()
|
|
617
|
+
London 20
|
|
618
|
+
New York 21
|
|
619
|
+
Helsinki 12
|
|
620
|
+
dtype: int64
|
|
621
|
+
|
|
622
|
+
Square the values by defining a function and passing it as an
|
|
623
|
+
argument to ``apply()``.
|
|
624
|
+
|
|
625
|
+
>>> def square(x):
|
|
626
|
+
... return x ** 2
|
|
627
|
+
>>> s.apply(square).execute()
|
|
628
|
+
London 400
|
|
629
|
+
New York 441
|
|
630
|
+
Helsinki 144
|
|
631
|
+
dtype: int64
|
|
632
|
+
|
|
633
|
+
Square the values by passing an anonymous function as an
|
|
634
|
+
argument to ``apply()``.
|
|
635
|
+
|
|
636
|
+
>>> s.apply(lambda x: x ** 2).execute()
|
|
637
|
+
London 400
|
|
638
|
+
New York 441
|
|
639
|
+
Helsinki 144
|
|
640
|
+
dtype: int64
|
|
641
|
+
|
|
642
|
+
Define a custom function that needs additional positional
|
|
643
|
+
arguments and pass these additional arguments using the
|
|
644
|
+
``args`` keyword.
|
|
645
|
+
|
|
646
|
+
>>> def subtract_custom_value(x, custom_value):
|
|
647
|
+
... return x - custom_value
|
|
648
|
+
|
|
649
|
+
>>> s.apply(subtract_custom_value, args=(5,)).execute()
|
|
650
|
+
London 15
|
|
651
|
+
New York 16
|
|
652
|
+
Helsinki 7
|
|
653
|
+
dtype: int64
|
|
654
|
+
|
|
655
|
+
Define a custom function that takes keyword arguments
|
|
656
|
+
and pass these arguments to ``apply``.
|
|
657
|
+
|
|
658
|
+
>>> def add_custom_values(x, **kwargs):
|
|
659
|
+
... for month in kwargs:
|
|
660
|
+
... x += kwargs[month]
|
|
661
|
+
... return x
|
|
662
|
+
|
|
663
|
+
>>> s.apply(add_custom_values, june=30, july=20, august=25).execute()
|
|
664
|
+
London 95
|
|
665
|
+
New York 96
|
|
666
|
+
Helsinki 87
|
|
667
|
+
dtype: int64
|
|
668
|
+
|
|
669
|
+
Create a series with a map type.
|
|
670
|
+
|
|
671
|
+
>>> import pyarrow as pa
|
|
672
|
+
>>> from maxframe.lib.dtypes_extension import dict_
|
|
673
|
+
>>> s = md.Series(
|
|
674
|
+
... data=[[("k1", 1), ("k2", 2)], [("k1", 3)], None],
|
|
675
|
+
... index=[1, 2, 3],
|
|
676
|
+
... dtype=dict_(pa.string(), pa.int64()),
|
|
677
|
+
... )
|
|
678
|
+
>>> s.execute()
|
|
679
|
+
1 [('k1', 1), ('k2', 2)]
|
|
680
|
+
2 [('k1', 3)]
|
|
681
|
+
3 <NA>
|
|
682
|
+
dtype: map<string, int64>[pyarrow]
|
|
683
|
+
|
|
684
|
+
Define a function that updates the map type with a new key-value pair.
|
|
685
|
+
|
|
686
|
+
>>> def custom_set_item(x):
|
|
687
|
+
... if x is not None:
|
|
688
|
+
... x["k2"] = 10
|
|
689
|
+
... return x
|
|
690
|
+
|
|
691
|
+
>>> s.apply(custom_set_item, output_type="series", dtype=dict_(pa.string(), pa.int64())).execute()
|
|
692
|
+
1 [('k1', 1), ('k2', 10)]
|
|
693
|
+
2 [('k1', 3), ('k2', 10)]
|
|
694
|
+
3 <NA>
|
|
695
|
+
dtype: map<string, int64>[pyarrow]
|
|
696
|
+
"""
|
|
697
|
+
if isinstance(func, (list, dict)):
|
|
698
|
+
return series.aggregate(func)
|
|
699
|
+
|
|
700
|
+
# calling member function
|
|
701
|
+
if isinstance(func, str):
|
|
702
|
+
func_body = getattr(series, func, None)
|
|
703
|
+
if func_body is not None:
|
|
704
|
+
return func_body(*args, **kwds)
|
|
705
|
+
func_str = func
|
|
706
|
+
func = getattr(np, func_str, None)
|
|
707
|
+
if func is None:
|
|
708
|
+
raise AttributeError(
|
|
709
|
+
f"'{func_str!r}' is not a valid function "
|
|
710
|
+
f"for '{type(series).__name__}' object"
|
|
711
|
+
)
|
|
712
|
+
|
|
713
|
+
if skip_infer and output_type is None:
|
|
714
|
+
output_type = OutputType.df_or_series
|
|
715
|
+
|
|
716
|
+
output_types = kwds.pop("output_types", None)
|
|
717
|
+
object_type = kwds.pop("object_type", None)
|
|
718
|
+
output_types = validate_output_types(
|
|
719
|
+
output_type=output_type, output_types=output_types, object_type=object_type
|
|
720
|
+
)
|
|
721
|
+
output_type = output_types[0] if output_types else OutputType.series
|
|
722
|
+
|
|
723
|
+
op = DataFrameApply(
|
|
724
|
+
func=func,
|
|
725
|
+
convert_dtype=convert_dtype,
|
|
726
|
+
args=args,
|
|
727
|
+
kwds=kwds,
|
|
728
|
+
output_type=output_type,
|
|
729
|
+
)
|
|
730
|
+
return op(series, dtypes=dtypes, dtype=dtype, name=name, index=index)
|