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,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 ast
|
|
16
|
+
import binascii
|
|
17
|
+
import operator
|
|
18
|
+
import sys
|
|
19
|
+
import textwrap
|
|
20
|
+
import tokenize
|
|
21
|
+
from collections import OrderedDict
|
|
22
|
+
from functools import reduce
|
|
23
|
+
from io import StringIO
|
|
24
|
+
|
|
25
|
+
import numpy as np
|
|
26
|
+
import pandas as pd
|
|
27
|
+
|
|
28
|
+
from ... import opcodes
|
|
29
|
+
from ...core import ENTITY_TYPE, OutputType, get_output_types
|
|
30
|
+
from ...serialization.serializables import BoolField, DictField, StringField
|
|
31
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
32
|
+
from ..utils import parse_index
|
|
33
|
+
|
|
34
|
+
LOCAL_TAG = "_local_var_"
|
|
35
|
+
BACKTICK_TAG = "_backtick_var_"
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _tokenize_str(reader):
|
|
39
|
+
token_generator = tokenize.generate_tokens(reader)
|
|
40
|
+
|
|
41
|
+
def _iter_backtick_string(gen, line, back_start):
|
|
42
|
+
for _, tokval, start, _, _ in gen:
|
|
43
|
+
if tokval == "`":
|
|
44
|
+
return (
|
|
45
|
+
BACKTICK_TAG
|
|
46
|
+
+ binascii.b2a_hex(
|
|
47
|
+
line[back_start[1] + 1 : start[1]].encode()
|
|
48
|
+
).decode()
|
|
49
|
+
)
|
|
50
|
+
else:
|
|
51
|
+
raise SyntaxError(f"backtick quote at {back_start} does not match")
|
|
52
|
+
|
|
53
|
+
for toknum, tokval, start, _, line in token_generator:
|
|
54
|
+
if toknum == tokenize.OP:
|
|
55
|
+
if tokval == "@":
|
|
56
|
+
tokval = LOCAL_TAG
|
|
57
|
+
if tokval == "&":
|
|
58
|
+
toknum = tokenize.NAME
|
|
59
|
+
tokval = "and"
|
|
60
|
+
elif tokval == "|":
|
|
61
|
+
toknum = tokenize.NAME
|
|
62
|
+
tokval = "or"
|
|
63
|
+
elif tokval == "`":
|
|
64
|
+
yield tokenize.NAME, _iter_backtick_string(token_generator, line, start)
|
|
65
|
+
continue
|
|
66
|
+
yield toknum, tokval
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class CollectionVisitor(ast.NodeVisitor):
|
|
70
|
+
_op_handlers = {
|
|
71
|
+
ast.Add: operator.add,
|
|
72
|
+
ast.Sub: operator.sub,
|
|
73
|
+
ast.Mult: operator.mul,
|
|
74
|
+
ast.Div: operator.truediv,
|
|
75
|
+
ast.FloorDiv: operator.floordiv,
|
|
76
|
+
ast.mod: operator.mod,
|
|
77
|
+
ast.Pow: operator.pow,
|
|
78
|
+
ast.Eq: operator.eq,
|
|
79
|
+
ast.NotEq: operator.ne,
|
|
80
|
+
ast.Lt: operator.lt,
|
|
81
|
+
ast.LtE: operator.le,
|
|
82
|
+
ast.Gt: operator.gt,
|
|
83
|
+
ast.GtE: operator.ge,
|
|
84
|
+
ast.In: lambda x, y: y.isin(x),
|
|
85
|
+
ast.NotIn: lambda x, y: ~y.isin(x),
|
|
86
|
+
ast.UAdd: operator.pos,
|
|
87
|
+
ast.USub: operator.neg,
|
|
88
|
+
ast.Invert: operator.invert,
|
|
89
|
+
ast.And: operator.and_,
|
|
90
|
+
ast.Or: operator.or_,
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
def __init__(self, resolvers, target, env):
|
|
94
|
+
self.env = env
|
|
95
|
+
self.target = target
|
|
96
|
+
self.resolvers = resolvers
|
|
97
|
+
|
|
98
|
+
self.referenced_vars = set()
|
|
99
|
+
self.assigned = False
|
|
100
|
+
self.entity_subscribe = False
|
|
101
|
+
|
|
102
|
+
def _preparse(self, expr):
|
|
103
|
+
reader = StringIO(expr).readline
|
|
104
|
+
return tokenize.untokenize(list(_tokenize_str(reader)))
|
|
105
|
+
|
|
106
|
+
def eval(self, expr, rewrite=True):
|
|
107
|
+
if rewrite:
|
|
108
|
+
expr = self._preparse(expr)
|
|
109
|
+
node = ast.fix_missing_locations(ast.parse(expr))
|
|
110
|
+
return self.visit(node)
|
|
111
|
+
|
|
112
|
+
def get_named_object(self, obj_name):
|
|
113
|
+
for resolver in self.resolvers:
|
|
114
|
+
try:
|
|
115
|
+
return resolver[obj_name]
|
|
116
|
+
except (IndexError, KeyError):
|
|
117
|
+
continue
|
|
118
|
+
if obj_name in self.env:
|
|
119
|
+
self.referenced_vars.add(obj_name)
|
|
120
|
+
return self.env[obj_name]
|
|
121
|
+
try:
|
|
122
|
+
return self.target[obj_name]
|
|
123
|
+
except KeyError:
|
|
124
|
+
pass
|
|
125
|
+
raise KeyError(f"name {obj_name} is not defined")
|
|
126
|
+
|
|
127
|
+
def visit(self, node):
|
|
128
|
+
if isinstance(node, ENTITY_TYPE):
|
|
129
|
+
return node
|
|
130
|
+
node_name = node.__class__.__name__
|
|
131
|
+
method = "visit_" + node_name
|
|
132
|
+
try:
|
|
133
|
+
visitor = getattr(self, method)
|
|
134
|
+
except AttributeError:
|
|
135
|
+
raise SyntaxError(
|
|
136
|
+
"Query string contains unsupported syntax: {}".format(node_name)
|
|
137
|
+
)
|
|
138
|
+
return visitor(node)
|
|
139
|
+
|
|
140
|
+
def visit_Module(self, node):
|
|
141
|
+
if self.target is None and len(node.body) != 1:
|
|
142
|
+
raise SyntaxError("Only a single expression is allowed")
|
|
143
|
+
result = None
|
|
144
|
+
for expr in node.body:
|
|
145
|
+
result = self.visit(expr)
|
|
146
|
+
return result
|
|
147
|
+
|
|
148
|
+
def visit_Expr(self, node):
|
|
149
|
+
return self.visit(node.value)
|
|
150
|
+
|
|
151
|
+
def visit_BinOp(self, node):
|
|
152
|
+
left = self.visit(node.left)
|
|
153
|
+
right = self.visit(node.right)
|
|
154
|
+
return self._op_handlers[type(node.op)](left, right)
|
|
155
|
+
|
|
156
|
+
def visit_Call(self, node):
|
|
157
|
+
func = self.visit(node.func)
|
|
158
|
+
args = [self.visit(n) for n in node.args]
|
|
159
|
+
kwargs = OrderedDict([(kw.arg, self.visit(kw.value)) for kw in node.keywords])
|
|
160
|
+
return func(*args, **kwargs)
|
|
161
|
+
|
|
162
|
+
def visit_Compare(self, node):
|
|
163
|
+
ops = node.ops
|
|
164
|
+
comps = node.comparators
|
|
165
|
+
|
|
166
|
+
if len(comps) == 1:
|
|
167
|
+
binop = ast.BinOp(op=ops[0], left=node.left, right=comps[0])
|
|
168
|
+
return self.visit(binop)
|
|
169
|
+
|
|
170
|
+
left = node.left
|
|
171
|
+
values = []
|
|
172
|
+
for op, comp in zip(ops, comps):
|
|
173
|
+
new_node = ast.Compare(comparators=[comp], left=left, ops=[op])
|
|
174
|
+
left = comp
|
|
175
|
+
values.append(new_node)
|
|
176
|
+
return self.visit(ast.BoolOp(op=ast.And(), values=values))
|
|
177
|
+
|
|
178
|
+
def visit_BoolOp(self, node):
|
|
179
|
+
def func(lhs, rhs):
|
|
180
|
+
binop = ast.BinOp(op=node.op, left=lhs, right=rhs)
|
|
181
|
+
return self.visit(binop)
|
|
182
|
+
|
|
183
|
+
return reduce(func, node.values)
|
|
184
|
+
|
|
185
|
+
def visit_UnaryOp(self, node):
|
|
186
|
+
op = self.visit(node.operand)
|
|
187
|
+
return self._op_handlers[type(node.op)](op)
|
|
188
|
+
|
|
189
|
+
def visit_Name(self, node):
|
|
190
|
+
if node.id.startswith(LOCAL_TAG):
|
|
191
|
+
local_name = node.id.replace(LOCAL_TAG, "")
|
|
192
|
+
self.referenced_vars.add(local_name)
|
|
193
|
+
return self.env[local_name]
|
|
194
|
+
if node.id.startswith(BACKTICK_TAG):
|
|
195
|
+
local_name = binascii.a2b_hex(
|
|
196
|
+
node.id.replace(BACKTICK_TAG, "").encode()
|
|
197
|
+
).decode()
|
|
198
|
+
return self.get_named_object(local_name)
|
|
199
|
+
return self.get_named_object(node.id)
|
|
200
|
+
|
|
201
|
+
def visit_NameConstant(self, node): # pragma: no cover
|
|
202
|
+
return node.value
|
|
203
|
+
|
|
204
|
+
def visit_Num(self, node): # pragma: no cover
|
|
205
|
+
return node.n
|
|
206
|
+
|
|
207
|
+
def visit_Str(self, node): # pragma: no cover
|
|
208
|
+
return node.s
|
|
209
|
+
|
|
210
|
+
def visit_Constant(self, node):
|
|
211
|
+
return node.value
|
|
212
|
+
|
|
213
|
+
def visit_List(self, node):
|
|
214
|
+
return [self.visit(e) for e in node.elts]
|
|
215
|
+
|
|
216
|
+
def visit_Assign(self, node):
|
|
217
|
+
if self.target is None:
|
|
218
|
+
raise ValueError("Target not specified for assignment")
|
|
219
|
+
if isinstance(node.targets[0], ast.Tuple):
|
|
220
|
+
raise ValueError("Does not support assigning to multiple objects")
|
|
221
|
+
|
|
222
|
+
target = node.targets[0].id
|
|
223
|
+
value = self.visit(node.value)
|
|
224
|
+
self.target[target] = value
|
|
225
|
+
self.assigned = True
|
|
226
|
+
|
|
227
|
+
visit_Tuple = visit_List
|
|
228
|
+
|
|
229
|
+
def visit_Attribute(self, node):
|
|
230
|
+
attr = node.attr
|
|
231
|
+
value = node.value
|
|
232
|
+
|
|
233
|
+
ctx = node.ctx
|
|
234
|
+
if isinstance(ctx, ast.Load):
|
|
235
|
+
resolved = self.visit(value)
|
|
236
|
+
return getattr(resolved, attr)
|
|
237
|
+
|
|
238
|
+
raise ValueError("Invalid Attribute context {0}".format(ctx.__name__))
|
|
239
|
+
|
|
240
|
+
def visit_Subscript(self, node):
|
|
241
|
+
value = self.visit(node.value)
|
|
242
|
+
sub = self.visit(node.slice)
|
|
243
|
+
if isinstance(value, ENTITY_TYPE):
|
|
244
|
+
self.entity_subscribe = True
|
|
245
|
+
return value[sub]
|
|
246
|
+
|
|
247
|
+
def visit_Index(self, node):
|
|
248
|
+
return self.visit(node.value)
|
|
249
|
+
|
|
250
|
+
def visit_Slice(self, node):
|
|
251
|
+
lower = node.lower
|
|
252
|
+
if lower is not None:
|
|
253
|
+
lower = self.visit(lower)
|
|
254
|
+
upper = node.upper
|
|
255
|
+
if upper is not None:
|
|
256
|
+
upper = self.visit(upper)
|
|
257
|
+
step = node.step
|
|
258
|
+
if step is not None:
|
|
259
|
+
step = self.visit(step)
|
|
260
|
+
|
|
261
|
+
return slice(lower, upper, step)
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
class DataFrameEval(DataFrameOperator, DataFrameOperatorMixin):
|
|
265
|
+
_op_type_ = opcodes.DATAFRAME_EVAL
|
|
266
|
+
|
|
267
|
+
expr = StringField("expr", default=None)
|
|
268
|
+
parser = StringField("parser", default=None)
|
|
269
|
+
engine = StringField("engine", default=None)
|
|
270
|
+
variables = DictField("variables", default=None)
|
|
271
|
+
self_target = BoolField("self_target", default=None)
|
|
272
|
+
is_query = BoolField("is_query", default=None)
|
|
273
|
+
|
|
274
|
+
def __call__(self, df, output_type, shape, dtypes):
|
|
275
|
+
self._output_types = [output_type]
|
|
276
|
+
params = df.params
|
|
277
|
+
new_index_value = (
|
|
278
|
+
df.index_value if not np.isnan(shape[0]) else parse_index(pd.RangeIndex(-1))
|
|
279
|
+
)
|
|
280
|
+
if output_type == OutputType.dataframe:
|
|
281
|
+
params.update(
|
|
282
|
+
dict(
|
|
283
|
+
dtypes=dtypes,
|
|
284
|
+
shape=shape,
|
|
285
|
+
columns_value=parse_index(dtypes.index, store_data=True),
|
|
286
|
+
index_value=new_index_value,
|
|
287
|
+
)
|
|
288
|
+
)
|
|
289
|
+
else:
|
|
290
|
+
name, dtype = dtypes
|
|
291
|
+
params = dict(
|
|
292
|
+
name=name,
|
|
293
|
+
dtype=dtype,
|
|
294
|
+
shape=shape,
|
|
295
|
+
index_value=new_index_value,
|
|
296
|
+
)
|
|
297
|
+
return self.new_tileable([df], **params)
|
|
298
|
+
|
|
299
|
+
def convert_to_query(self, df, output_type, shape, dtypes):
|
|
300
|
+
new_op = self.copy().reset_key()
|
|
301
|
+
new_op.is_query = True
|
|
302
|
+
new_op.self_target = False
|
|
303
|
+
return new_op(df, output_type, shape, dtypes)
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
def maxframe_eval(
|
|
307
|
+
expr,
|
|
308
|
+
parser="maxframe",
|
|
309
|
+
engine=None,
|
|
310
|
+
local_dict=None,
|
|
311
|
+
global_dict=None,
|
|
312
|
+
resolvers=(),
|
|
313
|
+
level=0,
|
|
314
|
+
target=None,
|
|
315
|
+
inplace=False,
|
|
316
|
+
):
|
|
317
|
+
"""
|
|
318
|
+
|
|
319
|
+
Evaluate a Python expression as a string using various backends.
|
|
320
|
+
|
|
321
|
+
The following arithmetic operations are supported: ``+``, ``-``, ``*``,
|
|
322
|
+
``/``, ``**``, ``%``, ``//`` (python engine only) along with the following
|
|
323
|
+
boolean operations: ``|`` (or), ``&`` (and), and ``~`` (not).
|
|
324
|
+
Additionally, the ``'pandas'`` parser allows the use of :keyword:`and`,
|
|
325
|
+
:keyword:`or`, and :keyword:`not` with the same semantics as the
|
|
326
|
+
corresponding bitwise operators. :class:`~pandas.Series` and
|
|
327
|
+
:class:`~pandas.DataFrame` objects are supported and behave as they would
|
|
328
|
+
with plain ol' Python evaluation.
|
|
329
|
+
|
|
330
|
+
Parameters
|
|
331
|
+
----------
|
|
332
|
+
expr : str
|
|
333
|
+
The expression to evaluate. This string cannot contain any Python
|
|
334
|
+
`statements
|
|
335
|
+
<https://docs.python.org/3/reference/simple_stmts.html#simple-statements>`__,
|
|
336
|
+
only Python `expressions
|
|
337
|
+
<https://docs.python.org/3/reference/simple_stmts.html#expression-statements>`__.
|
|
338
|
+
local_dict : dict or None, optional
|
|
339
|
+
A dictionary of local variables, taken from locals() by default.
|
|
340
|
+
global_dict : dict or None, optional
|
|
341
|
+
A dictionary of global variables, taken from globals() by default.
|
|
342
|
+
resolvers : list of dict-like or None, optional
|
|
343
|
+
A list of objects implementing the ``__getitem__`` special method that
|
|
344
|
+
you can use to inject an additional collection of namespaces to use for
|
|
345
|
+
variable lookup. For example, this is used in the
|
|
346
|
+
:meth:`~DataFrame.query` method to inject the
|
|
347
|
+
``DataFrame.index`` and ``DataFrame.columns``
|
|
348
|
+
variables that refer to their respective :class:`~pandas.DataFrame`
|
|
349
|
+
instance attributes.
|
|
350
|
+
level : int, optional
|
|
351
|
+
The number of prior stack frames to traverse and add to the current
|
|
352
|
+
scope. Most users will **not** need to change this parameter.
|
|
353
|
+
target : object, optional, default None
|
|
354
|
+
This is the target object for assignment. It is used when there is
|
|
355
|
+
variable assignment in the expression. If so, then `target` must
|
|
356
|
+
support item assignment with string keys, and if a copy is being
|
|
357
|
+
returned, it must also support `.copy()`.
|
|
358
|
+
inplace : bool, default False
|
|
359
|
+
If `target` is provided, and the expression mutates `target`, whether
|
|
360
|
+
to modify `target` inplace. Otherwise, return a copy of `target` with
|
|
361
|
+
the mutation.
|
|
362
|
+
|
|
363
|
+
Returns
|
|
364
|
+
-------
|
|
365
|
+
ndarray, numeric scalar, DataFrame, Series
|
|
366
|
+
|
|
367
|
+
Raises
|
|
368
|
+
------
|
|
369
|
+
ValueError
|
|
370
|
+
There are many instances where such an error can be raised:
|
|
371
|
+
|
|
372
|
+
- `target=None`, but the expression is multiline.
|
|
373
|
+
- The expression is multiline, but not all them have item assignment.
|
|
374
|
+
An example of such an arrangement is this:
|
|
375
|
+
|
|
376
|
+
a = b + 1
|
|
377
|
+
a + 2
|
|
378
|
+
|
|
379
|
+
Here, there are expressions on different lines, making it multiline,
|
|
380
|
+
but the last line has no variable assigned to the output of `a + 2`.
|
|
381
|
+
- `inplace=True`, but the expression is missing item assignment.
|
|
382
|
+
- Item assignment is provided, but the `target` does not support
|
|
383
|
+
string item assignment.
|
|
384
|
+
- Item assignment is provided and `inplace=False`, but the `target`
|
|
385
|
+
does not support the `.copy()` method
|
|
386
|
+
|
|
387
|
+
See Also
|
|
388
|
+
--------
|
|
389
|
+
DataFrame.query : Evaluates a boolean expression to query the columns
|
|
390
|
+
of a frame.
|
|
391
|
+
DataFrame.eval : Evaluate a string describing operations on
|
|
392
|
+
DataFrame columns.
|
|
393
|
+
|
|
394
|
+
Notes
|
|
395
|
+
-----
|
|
396
|
+
The ``dtype`` of any objects involved in an arithmetic ``%`` operation are
|
|
397
|
+
recursively cast to ``float64``.
|
|
398
|
+
|
|
399
|
+
See the :ref:`enhancing performance <enhancingperf.eval>` documentation for
|
|
400
|
+
more details.
|
|
401
|
+
|
|
402
|
+
Examples
|
|
403
|
+
--------
|
|
404
|
+
>>> import maxframe.dataframe as md
|
|
405
|
+
>>> df = md.DataFrame({"animal": ["dog", "pig"], "age": [10, 20]})
|
|
406
|
+
>>> df.execute()
|
|
407
|
+
animal age
|
|
408
|
+
0 dog 10
|
|
409
|
+
1 pig 20
|
|
410
|
+
|
|
411
|
+
We can add a new column using ``pd.eval``:
|
|
412
|
+
|
|
413
|
+
>>> md.eval("double_age = df.age * 2", target=df).execute()
|
|
414
|
+
animal age double_age
|
|
415
|
+
0 dog 10 20
|
|
416
|
+
1 pig 20 40
|
|
417
|
+
"""
|
|
418
|
+
if not isinstance(expr, str):
|
|
419
|
+
raise TypeError("expr must be a string")
|
|
420
|
+
|
|
421
|
+
expr = textwrap.dedent(expr)
|
|
422
|
+
|
|
423
|
+
try:
|
|
424
|
+
frame = sys._getframe(level + 1)
|
|
425
|
+
local_dict = local_dict or dict()
|
|
426
|
+
local_dict.update(frame.f_locals)
|
|
427
|
+
global_dict = global_dict or dict()
|
|
428
|
+
global_dict.update(frame.f_globals)
|
|
429
|
+
finally:
|
|
430
|
+
del frame
|
|
431
|
+
|
|
432
|
+
env = dict()
|
|
433
|
+
env.update(global_dict)
|
|
434
|
+
env.update(local_dict)
|
|
435
|
+
|
|
436
|
+
ref_frames = set(resolvers) | set([target] if target is not None else [])
|
|
437
|
+
self_target = len(resolvers) > 0 and resolvers[0] is target
|
|
438
|
+
|
|
439
|
+
if target is not None and not inplace:
|
|
440
|
+
target = target.copy()
|
|
441
|
+
|
|
442
|
+
visitor = CollectionVisitor(resolvers, target, env)
|
|
443
|
+
result = visitor.eval(expr)
|
|
444
|
+
result = result if result is not None else target
|
|
445
|
+
has_var_frame = any(
|
|
446
|
+
isinstance(env[k], ENTITY_TYPE) for k in visitor.referenced_vars
|
|
447
|
+
)
|
|
448
|
+
if len(ref_frames) != 1 or visitor.entity_subscribe or has_var_frame:
|
|
449
|
+
if parser != "maxframe":
|
|
450
|
+
raise NotImplementedError(
|
|
451
|
+
"Does not support parser names other than maxframe"
|
|
452
|
+
)
|
|
453
|
+
if engine is not None:
|
|
454
|
+
raise NotImplementedError("Does not support specifying engine names")
|
|
455
|
+
return result
|
|
456
|
+
else:
|
|
457
|
+
parser = "pandas" if parser == "maxframe" else parser
|
|
458
|
+
referenced_env = {k: env[k] for k in visitor.referenced_vars}
|
|
459
|
+
op = DataFrameEval(
|
|
460
|
+
expr=expr,
|
|
461
|
+
parser=parser,
|
|
462
|
+
engine=engine,
|
|
463
|
+
variables=referenced_env,
|
|
464
|
+
self_target=visitor.assigned and self_target,
|
|
465
|
+
is_query=False,
|
|
466
|
+
)
|
|
467
|
+
output_type = get_output_types(result)[0]
|
|
468
|
+
dtypes = result.dtypes if result.ndim == 2 else (result.name, result.dtype)
|
|
469
|
+
return op(resolvers[0], output_type, result.shape, dtypes)
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
def df_eval(df, expr, inplace=False, **kwargs):
|
|
473
|
+
"""
|
|
474
|
+
Evaluate a string describing operations on DataFrame columns.
|
|
475
|
+
|
|
476
|
+
Operates on columns only, not specific rows or elements. This allows
|
|
477
|
+
`eval` to run arbitrary code, which can make you vulnerable to code
|
|
478
|
+
injection if you pass user input to this function.
|
|
479
|
+
|
|
480
|
+
Parameters
|
|
481
|
+
----------
|
|
482
|
+
expr : str
|
|
483
|
+
The expression string to evaluate.
|
|
484
|
+
inplace : bool, default False
|
|
485
|
+
If the expression contains an assignment, whether to perform the
|
|
486
|
+
operation inplace and mutate the existing DataFrame. Otherwise,
|
|
487
|
+
a new DataFrame is returned.
|
|
488
|
+
**kwargs
|
|
489
|
+
See the documentation for :func:`eval` for complete details
|
|
490
|
+
on the keyword arguments accepted by
|
|
491
|
+
:meth:`~pandas.DataFrame.query`.
|
|
492
|
+
|
|
493
|
+
Returns
|
|
494
|
+
-------
|
|
495
|
+
ndarray, scalar, or pandas object
|
|
496
|
+
The result of the evaluation.
|
|
497
|
+
|
|
498
|
+
See Also
|
|
499
|
+
--------
|
|
500
|
+
DataFrame.query : Evaluates a boolean expression to query the columns
|
|
501
|
+
of a frame.
|
|
502
|
+
DataFrame.assign : Can evaluate an expression or function to create new
|
|
503
|
+
values for a column.
|
|
504
|
+
eval : Evaluate a Python expression as a string using various
|
|
505
|
+
backends.
|
|
506
|
+
|
|
507
|
+
Notes
|
|
508
|
+
-----
|
|
509
|
+
For more details see the API documentation for :func:`~eval`.
|
|
510
|
+
For detailed examples see :ref:`enhancing performance with eval
|
|
511
|
+
<enhancingperf.eval>`.
|
|
512
|
+
|
|
513
|
+
Examples
|
|
514
|
+
--------
|
|
515
|
+
>>> import maxframe.dataframe as md
|
|
516
|
+
>>> df = md.DataFrame({'A': range(1, 6), 'B': range(10, 0, -2)})
|
|
517
|
+
>>> df.execute()
|
|
518
|
+
A B
|
|
519
|
+
0 1 10
|
|
520
|
+
1 2 8
|
|
521
|
+
2 3 6
|
|
522
|
+
3 4 4
|
|
523
|
+
4 5 2
|
|
524
|
+
>>> df.eval('A + B').execute()
|
|
525
|
+
0 11
|
|
526
|
+
1 10
|
|
527
|
+
2 9
|
|
528
|
+
3 8
|
|
529
|
+
4 7
|
|
530
|
+
dtype: int64
|
|
531
|
+
|
|
532
|
+
Assignment is allowed though by default the original DataFrame is not
|
|
533
|
+
modified.
|
|
534
|
+
|
|
535
|
+
>>> df.eval('C = A + B').execute()
|
|
536
|
+
A B C
|
|
537
|
+
0 1 10 11
|
|
538
|
+
1 2 8 10
|
|
539
|
+
2 3 6 9
|
|
540
|
+
3 4 4 8
|
|
541
|
+
4 5 2 7
|
|
542
|
+
>>> df.execute()
|
|
543
|
+
A B
|
|
544
|
+
0 1 10
|
|
545
|
+
1 2 8
|
|
546
|
+
2 3 6
|
|
547
|
+
3 4 4
|
|
548
|
+
4 5 2
|
|
549
|
+
|
|
550
|
+
Use ``inplace=True`` to modify the original DataFrame.
|
|
551
|
+
|
|
552
|
+
>>> df.eval('C = A + B', inplace=True)
|
|
553
|
+
>>> df.execute()
|
|
554
|
+
A B C
|
|
555
|
+
0 1 10 11
|
|
556
|
+
1 2 8 10
|
|
557
|
+
2 3 6 9
|
|
558
|
+
3 4 4 8
|
|
559
|
+
4 5 2 7
|
|
560
|
+
|
|
561
|
+
Multiple columns can be assigned to using multi-line expressions:
|
|
562
|
+
|
|
563
|
+
>>> df.eval('''
|
|
564
|
+
... C = A + B
|
|
565
|
+
... D = A - B
|
|
566
|
+
... ''').execute()
|
|
567
|
+
A B C D
|
|
568
|
+
0 1 10 11 -9
|
|
569
|
+
1 2 8 10 -6
|
|
570
|
+
2 3 6 9 -3
|
|
571
|
+
3 4 4 8 0
|
|
572
|
+
4 5 2 7 3
|
|
573
|
+
"""
|
|
574
|
+
level = kwargs.pop("level", None) or 0
|
|
575
|
+
kwargs["inplace"] = inplace
|
|
576
|
+
val = maxframe_eval(expr, resolvers=(df,), target=df, level=level + 1, **kwargs)
|
|
577
|
+
if not inplace:
|
|
578
|
+
return val
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
def df_query(df, expr, inplace=False, **kwargs):
|
|
582
|
+
"""
|
|
583
|
+
Query the columns of a DataFrame with a boolean expression.
|
|
584
|
+
|
|
585
|
+
Parameters
|
|
586
|
+
----------
|
|
587
|
+
expr : str
|
|
588
|
+
The query string to evaluate.
|
|
589
|
+
|
|
590
|
+
You can refer to variables
|
|
591
|
+
in the environment by prefixing them with an '@' character like
|
|
592
|
+
``@a + b``.
|
|
593
|
+
|
|
594
|
+
You can refer to column names that contain spaces or operators by
|
|
595
|
+
surrounding them in backticks. This way you can also escape
|
|
596
|
+
names that start with a digit, or those that are a Python keyword.
|
|
597
|
+
Basically when it is not valid Python identifier. See notes down
|
|
598
|
+
for more details.
|
|
599
|
+
|
|
600
|
+
For example, if one of your columns is called ``a a`` and you want
|
|
601
|
+
to sum it with ``b``, your query should be ```a a` + b``.
|
|
602
|
+
|
|
603
|
+
inplace : bool
|
|
604
|
+
Whether the query should modify the data in place or return
|
|
605
|
+
a modified copy.
|
|
606
|
+
**kwargs
|
|
607
|
+
See the documentation for :func:`eval` for complete details
|
|
608
|
+
on the keyword arguments accepted by :meth:`DataFrame.query`.
|
|
609
|
+
|
|
610
|
+
Returns
|
|
611
|
+
-------
|
|
612
|
+
DataFrame
|
|
613
|
+
DataFrame resulting from the provided query expression.
|
|
614
|
+
|
|
615
|
+
See Also
|
|
616
|
+
--------
|
|
617
|
+
eval : Evaluate a string describing operations on
|
|
618
|
+
DataFrame columns.
|
|
619
|
+
DataFrame.eval : Evaluate a string describing operations on
|
|
620
|
+
DataFrame columns.
|
|
621
|
+
|
|
622
|
+
Notes
|
|
623
|
+
-----
|
|
624
|
+
The result of the evaluation of this expression is first passed to
|
|
625
|
+
:attr:`DataFrame.loc` and if that fails because of a
|
|
626
|
+
multidimensional key (e.g., a DataFrame) then the result will be passed
|
|
627
|
+
to :meth:`DataFrame.__getitem__`.
|
|
628
|
+
|
|
629
|
+
This method uses the top-level :func:`eval` function to
|
|
630
|
+
evaluate the passed query.
|
|
631
|
+
|
|
632
|
+
The :meth:`~pandas.DataFrame.query` method uses a slightly
|
|
633
|
+
modified Python syntax by default. For example, the ``&`` and ``|``
|
|
634
|
+
(bitwise) operators have the precedence of their boolean cousins,
|
|
635
|
+
:keyword:`and` and :keyword:`or`. This *is* syntactically valid Python,
|
|
636
|
+
however the semantics are different.
|
|
637
|
+
|
|
638
|
+
You can change the semantics of the expression by passing the keyword
|
|
639
|
+
argument ``parser='python'``. This enforces the same semantics as
|
|
640
|
+
evaluation in Python space. Likewise, you can pass ``engine='python'``
|
|
641
|
+
to evaluate an expression using Python itself as a backend. This is not
|
|
642
|
+
recommended as it is inefficient compared to using ``numexpr`` as the
|
|
643
|
+
engine.
|
|
644
|
+
|
|
645
|
+
The :attr:`DataFrame.index` and
|
|
646
|
+
:attr:`DataFrame.columns` attributes of the
|
|
647
|
+
:class:`~pandas.DataFrame` instance are placed in the query namespace
|
|
648
|
+
by default, which allows you to treat both the index and columns of the
|
|
649
|
+
frame as a column in the frame.
|
|
650
|
+
The identifier ``index`` is used for the frame index; you can also
|
|
651
|
+
use the name of the index to identify it in a query. Please note that
|
|
652
|
+
Python keywords may not be used as identifiers.
|
|
653
|
+
|
|
654
|
+
For further details and examples see the ``query`` documentation in
|
|
655
|
+
:ref:`indexing <indexing.query>`.
|
|
656
|
+
|
|
657
|
+
*Backtick quoted variables*
|
|
658
|
+
|
|
659
|
+
Backtick quoted variables are parsed as literal Python code and
|
|
660
|
+
are converted internally to a Python valid identifier.
|
|
661
|
+
This can lead to the following problems.
|
|
662
|
+
|
|
663
|
+
During parsing a number of disallowed characters inside the backtick
|
|
664
|
+
quoted string are replaced by strings that are allowed as a Python identifier.
|
|
665
|
+
These characters include all operators in Python, the space character, the
|
|
666
|
+
question mark, the exclamation mark, the dollar sign, and the euro sign.
|
|
667
|
+
For other characters that fall outside the ASCII range (U+0001..U+007F)
|
|
668
|
+
and those that are not further specified in PEP 3131,
|
|
669
|
+
the query parser will raise an error.
|
|
670
|
+
This excludes whitespace different than the space character,
|
|
671
|
+
but also the hashtag (as it is used for comments) and the backtick
|
|
672
|
+
itself (backtick can also not be escaped).
|
|
673
|
+
|
|
674
|
+
In a special case, quotes that make a pair around a backtick can
|
|
675
|
+
confuse the parser.
|
|
676
|
+
For example, ```it's` > `that's``` will raise an error,
|
|
677
|
+
as it forms a quoted string (``'s > `that'``) with a backtick inside.
|
|
678
|
+
|
|
679
|
+
See also the Python documentation about lexical analysis
|
|
680
|
+
(https://docs.python.org/3/reference/lexical_analysis.html)
|
|
681
|
+
in combination with the source code in :mod:`pandas.core.computation.parsing`.
|
|
682
|
+
|
|
683
|
+
Examples
|
|
684
|
+
--------
|
|
685
|
+
>>> import maxframe.dataframe as md
|
|
686
|
+
>>> df = md.DataFrame({'A': range(1, 6),
|
|
687
|
+
... 'B': range(10, 0, -2),
|
|
688
|
+
... 'C C': range(10, 5, -1)})
|
|
689
|
+
>>> df.execute()
|
|
690
|
+
A B C C
|
|
691
|
+
0 1 10 10
|
|
692
|
+
1 2 8 9
|
|
693
|
+
2 3 6 8
|
|
694
|
+
3 4 4 7
|
|
695
|
+
4 5 2 6
|
|
696
|
+
>>> df.query('A > B').execute()
|
|
697
|
+
A B C C
|
|
698
|
+
4 5 2 6
|
|
699
|
+
|
|
700
|
+
The previous expression is equivalent to
|
|
701
|
+
|
|
702
|
+
>>> df[df.A > df.B].execute()
|
|
703
|
+
A B C C
|
|
704
|
+
4 5 2 6
|
|
705
|
+
|
|
706
|
+
For columns with spaces in their name, you can use backtick quoting.
|
|
707
|
+
|
|
708
|
+
>>> df.query('B == `C C`').execute()
|
|
709
|
+
A B C C
|
|
710
|
+
0 1 10 10
|
|
711
|
+
|
|
712
|
+
The previous expression is equivalent to
|
|
713
|
+
|
|
714
|
+
>>> df[df.B == df['C C']].execute()
|
|
715
|
+
A B C C
|
|
716
|
+
0 1 10 10
|
|
717
|
+
"""
|
|
718
|
+
level = kwargs.pop("level", None) or 0
|
|
719
|
+
predicate = maxframe_eval(expr, resolvers=(df,), level=level + 1, **kwargs)
|
|
720
|
+
result = df[predicate]
|
|
721
|
+
|
|
722
|
+
if isinstance(predicate.op, DataFrameEval):
|
|
723
|
+
output_type = get_output_types(result)[0]
|
|
724
|
+
dtypes = result.dtypes if result.ndim == 2 else (result.name, result.dtype)
|
|
725
|
+
result = predicate.op.convert_to_query(df, output_type, result.shape, dtypes)
|
|
726
|
+
|
|
727
|
+
if inplace:
|
|
728
|
+
df.data = result.data
|
|
729
|
+
else:
|
|
730
|
+
return result
|