maxframe 2.0.0b2__cp37-cp37m-win32.whl → 2.3.0rc1__cp37-cp37m-win32.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of maxframe might be problematic. Click here for more details.
- maxframe/__init__.py +1 -0
- maxframe/_utils.cp37-win32.pyd +0 -0
- maxframe/_utils.pyx +14 -1
- maxframe/codegen/core.py +9 -8
- maxframe/codegen/spe/core.py +1 -1
- maxframe/codegen/spe/dataframe/__init__.py +1 -0
- maxframe/codegen/spe/dataframe/accessors/base.py +18 -0
- maxframe/codegen/spe/dataframe/accessors/dict_.py +25 -130
- maxframe/codegen/spe/dataframe/accessors/list_.py +12 -48
- maxframe/codegen/spe/dataframe/accessors/struct_.py +28 -0
- maxframe/codegen/spe/dataframe/arithmetic.py +7 -2
- maxframe/codegen/spe/dataframe/groupby.py +88 -0
- maxframe/codegen/spe/dataframe/indexing.py +99 -4
- maxframe/codegen/spe/dataframe/merge.py +38 -1
- maxframe/codegen/spe/dataframe/misc.py +11 -33
- maxframe/codegen/spe/dataframe/reduction.py +32 -9
- maxframe/codegen/spe/dataframe/reshape.py +46 -0
- maxframe/codegen/spe/dataframe/sort.py +39 -18
- maxframe/codegen/spe/dataframe/tests/accessors/test_dict.py +9 -15
- maxframe/codegen/spe/dataframe/tests/accessors/test_list.py +4 -7
- maxframe/codegen/spe/dataframe/tests/accessors/test_struct.py +75 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_iloc.py +20 -1
- maxframe/codegen/spe/dataframe/tests/indexing/test_loc.py +35 -0
- maxframe/codegen/spe/dataframe/tests/misc/test_misc.py +0 -32
- maxframe/codegen/spe/dataframe/tests/test_groupby.py +81 -18
- maxframe/codegen/spe/dataframe/tests/test_merge.py +27 -1
- maxframe/codegen/spe/dataframe/tests/test_reduction.py +13 -0
- maxframe/codegen/spe/dataframe/tests/test_reshape.py +79 -0
- maxframe/codegen/spe/dataframe/tests/test_sort.py +20 -0
- maxframe/codegen/spe/dataframe/tseries.py +9 -0
- maxframe/codegen/spe/learn/contrib/lightgbm.py +4 -3
- maxframe/codegen/spe/learn/contrib/tests/test_xgboost.py +2 -1
- maxframe/codegen/spe/learn/metrics/__init__.py +1 -1
- maxframe/codegen/spe/learn/metrics/_ranking.py +76 -0
- maxframe/codegen/spe/learn/metrics/pairwise.py +51 -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/tensor/__init__.py +3 -0
- maxframe/codegen/spe/tensor/datasource.py +1 -0
- maxframe/codegen/spe/tensor/fft.py +74 -0
- maxframe/codegen/spe/tensor/linalg.py +29 -2
- maxframe/codegen/spe/tensor/misc.py +79 -25
- maxframe/codegen/spe/tensor/spatial.py +45 -0
- maxframe/codegen/spe/tensor/statistics.py +44 -0
- maxframe/codegen/spe/tensor/tests/test_fft.py +64 -0
- maxframe/codegen/spe/tensor/tests/test_linalg.py +15 -1
- maxframe/codegen/spe/tensor/tests/test_misc.py +52 -2
- maxframe/codegen/spe/tensor/tests/test_spatial.py +33 -0
- maxframe/codegen/spe/tensor/tests/test_statistics.py +15 -1
- maxframe/codegen/spe/tests/test_spe_codegen.py +6 -12
- maxframe/codegen/spe/utils.py +2 -0
- maxframe/config/config.py +73 -9
- maxframe/config/tests/test_validators.py +13 -1
- maxframe/config/validators.py +49 -0
- maxframe/conftest.py +54 -17
- maxframe/core/accessor.py +2 -2
- maxframe/core/base.py +2 -1
- maxframe/core/entity/core.py +5 -0
- maxframe/core/entity/tileables.py +3 -1
- maxframe/core/graph/core.cp37-win32.pyd +0 -0
- maxframe/core/graph/entity.py +8 -3
- maxframe/core/mode.py +6 -1
- maxframe/core/operator/base.py +9 -2
- maxframe/core/operator/core.py +10 -2
- maxframe/core/operator/utils.py +13 -0
- maxframe/dataframe/__init__.py +12 -5
- maxframe/dataframe/accessors/__init__.py +1 -1
- maxframe/dataframe/accessors/compat.py +45 -0
- maxframe/dataframe/accessors/datetime_/__init__.py +4 -1
- maxframe/dataframe/accessors/dict_/contains.py +7 -16
- maxframe/dataframe/accessors/dict_/core.py +48 -0
- maxframe/dataframe/accessors/dict_/getitem.py +17 -21
- maxframe/dataframe/accessors/dict_/length.py +7 -16
- maxframe/dataframe/accessors/dict_/remove.py +6 -18
- maxframe/dataframe/accessors/dict_/setitem.py +8 -18
- maxframe/dataframe/accessors/dict_/tests/test_dict_accessor.py +62 -22
- maxframe/dataframe/accessors/list_/__init__.py +2 -2
- maxframe/dataframe/accessors/list_/core.py +48 -0
- maxframe/dataframe/accessors/list_/getitem.py +12 -19
- maxframe/dataframe/accessors/list_/length.py +7 -16
- maxframe/dataframe/accessors/list_/tests/test_list_accessor.py +11 -9
- maxframe/dataframe/accessors/string_/__init__.py +4 -1
- 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 +18 -4
- maxframe/dataframe/arithmetic/between.py +106 -0
- maxframe/dataframe/arithmetic/dot.py +237 -0
- maxframe/dataframe/arithmetic/maximum.py +33 -0
- maxframe/dataframe/arithmetic/minimum.py +33 -0
- maxframe/dataframe/arithmetic/{around.py → round.py} +11 -7
- maxframe/dataframe/core.py +161 -224
- maxframe/dataframe/datasource/__init__.py +18 -0
- maxframe/dataframe/datasource/core.py +6 -0
- maxframe/dataframe/datasource/direct.py +57 -0
- maxframe/dataframe/datasource/from_dict.py +124 -0
- maxframe/dataframe/datasource/from_index.py +1 -1
- maxframe/dataframe/datasource/from_records.py +77 -0
- maxframe/dataframe/datasource/from_tensor.py +109 -41
- maxframe/dataframe/datasource/read_csv.py +21 -14
- maxframe/dataframe/datasource/read_odps_query.py +29 -6
- maxframe/dataframe/datasource/read_odps_table.py +32 -10
- maxframe/dataframe/datasource/read_parquet.py +38 -39
- maxframe/dataframe/datasource/tests/test_datasource.py +37 -0
- maxframe/dataframe/datastore/__init__.py +11 -1
- maxframe/dataframe/datastore/direct.py +268 -0
- maxframe/dataframe/datastore/to_csv.py +29 -41
- maxframe/dataframe/datastore/to_odps.py +36 -4
- maxframe/dataframe/extensions/__init__.py +20 -4
- maxframe/dataframe/extensions/apply_chunk.py +32 -6
- 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 +2 -1
- maxframe/dataframe/extensions/map_reduce.py +263 -0
- maxframe/dataframe/extensions/rebalance.py +62 -0
- maxframe/dataframe/extensions/tests/test_apply_chunk.py +9 -2
- maxframe/dataframe/extensions/tests/test_extensions.py +54 -0
- maxframe/dataframe/extensions/tests/test_map_reduce.py +135 -0
- maxframe/dataframe/groupby/__init__.py +17 -2
- maxframe/dataframe/groupby/aggregation.py +86 -49
- maxframe/dataframe/groupby/apply.py +1 -1
- maxframe/dataframe/groupby/apply_chunk.py +19 -5
- maxframe/dataframe/groupby/core.py +116 -16
- maxframe/dataframe/groupby/cum.py +4 -25
- maxframe/dataframe/groupby/expanding.py +264 -0
- maxframe/dataframe/groupby/fill.py +1 -1
- maxframe/dataframe/groupby/getitem.py +12 -5
- maxframe/dataframe/groupby/head.py +11 -1
- maxframe/dataframe/groupby/rank.py +136 -0
- maxframe/dataframe/groupby/rolling.py +206 -0
- maxframe/dataframe/groupby/shift.py +114 -0
- maxframe/dataframe/groupby/tests/test_groupby.py +0 -5
- maxframe/dataframe/indexing/__init__.py +22 -2
- 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/iat.py +45 -0
- maxframe/dataframe/indexing/iloc.py +152 -12
- maxframe/dataframe/indexing/insert.py +46 -18
- maxframe/dataframe/indexing/loc.py +287 -7
- maxframe/dataframe/indexing/reindex.py +14 -5
- maxframe/dataframe/indexing/rename.py +6 -0
- maxframe/dataframe/indexing/rename_axis.py +2 -2
- maxframe/dataframe/indexing/reorder_levels.py +143 -0
- maxframe/dataframe/indexing/reset_index.py +33 -6
- maxframe/dataframe/indexing/sample.py +8 -0
- maxframe/dataframe/indexing/setitem.py +3 -3
- maxframe/dataframe/indexing/swaplevel.py +185 -0
- maxframe/dataframe/indexing/take.py +99 -0
- maxframe/dataframe/indexing/truncate.py +140 -0
- maxframe/dataframe/indexing/where.py +0 -11
- maxframe/dataframe/indexing/xs.py +148 -0
- maxframe/dataframe/merge/__init__.py +15 -1
- maxframe/dataframe/merge/append.py +97 -98
- 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 +183 -0
- maxframe/dataframe/merge/update.py +271 -0
- maxframe/dataframe/misc/__init__.py +28 -11
- maxframe/dataframe/misc/_duplicate.py +10 -4
- maxframe/dataframe/misc/apply.py +1 -1
- maxframe/dataframe/misc/check_unique.py +82 -0
- maxframe/dataframe/misc/clip.py +145 -0
- maxframe/dataframe/misc/describe.py +175 -9
- maxframe/dataframe/misc/drop.py +31 -0
- maxframe/dataframe/misc/drop_duplicates.py +2 -2
- maxframe/dataframe/misc/duplicated.py +2 -2
- maxframe/dataframe/misc/get_dummies.py +5 -1
- maxframe/dataframe/misc/infer_dtypes.py +251 -0
- maxframe/dataframe/misc/isin.py +2 -2
- maxframe/dataframe/misc/map.py +125 -18
- maxframe/dataframe/misc/repeat.py +159 -0
- maxframe/dataframe/misc/tests/test_misc.py +48 -3
- maxframe/dataframe/misc/to_numeric.py +3 -0
- maxframe/dataframe/misc/transform.py +12 -5
- maxframe/dataframe/misc/transpose.py +13 -1
- maxframe/dataframe/misc/valid_index.py +115 -0
- maxframe/dataframe/misc/value_counts.py +38 -4
- maxframe/dataframe/missing/checkna.py +14 -6
- maxframe/dataframe/missing/dropna.py +5 -0
- maxframe/dataframe/missing/fillna.py +1 -1
- maxframe/dataframe/missing/replace.py +7 -4
- maxframe/dataframe/reduction/__init__.py +35 -16
- maxframe/dataframe/reduction/aggregation.py +43 -14
- maxframe/dataframe/reduction/all.py +2 -2
- maxframe/dataframe/reduction/any.py +2 -2
- maxframe/dataframe/reduction/argmax.py +103 -0
- maxframe/dataframe/reduction/argmin.py +103 -0
- maxframe/dataframe/reduction/core.py +80 -24
- maxframe/dataframe/reduction/count.py +13 -9
- maxframe/dataframe/reduction/cov.py +166 -0
- maxframe/dataframe/reduction/cummax.py +2 -2
- maxframe/dataframe/reduction/cummin.py +2 -2
- maxframe/dataframe/reduction/cumprod.py +2 -2
- maxframe/dataframe/reduction/cumsum.py +2 -2
- maxframe/dataframe/reduction/custom_reduction.py +2 -2
- maxframe/dataframe/reduction/idxmax.py +185 -0
- maxframe/dataframe/reduction/idxmin.py +185 -0
- maxframe/dataframe/reduction/kurtosis.py +37 -30
- maxframe/dataframe/reduction/max.py +2 -2
- maxframe/dataframe/reduction/mean.py +9 -7
- maxframe/dataframe/reduction/median.py +2 -2
- maxframe/dataframe/reduction/min.py +2 -2
- maxframe/dataframe/reduction/mode.py +144 -0
- maxframe/dataframe/reduction/nunique.py +19 -11
- maxframe/dataframe/reduction/prod.py +18 -13
- maxframe/dataframe/reduction/reduction_size.py +2 -2
- maxframe/dataframe/reduction/sem.py +13 -9
- maxframe/dataframe/reduction/skew.py +31 -27
- maxframe/dataframe/reduction/str_concat.py +10 -7
- maxframe/dataframe/reduction/sum.py +18 -14
- maxframe/dataframe/reduction/tests/test_reduction.py +12 -0
- maxframe/dataframe/reduction/unique.py +20 -3
- maxframe/dataframe/reduction/var.py +16 -12
- maxframe/dataframe/reshape/__init__.py +38 -0
- maxframe/dataframe/{misc → reshape}/pivot.py +1 -0
- maxframe/dataframe/{misc → reshape}/pivot_table.py +1 -0
- maxframe/dataframe/reshape/unstack.py +114 -0
- maxframe/dataframe/sort/__init__.py +16 -1
- maxframe/dataframe/sort/argsort.py +68 -0
- maxframe/dataframe/sort/core.py +2 -1
- maxframe/dataframe/sort/nlargest.py +238 -0
- maxframe/dataframe/sort/nsmallest.py +228 -0
- maxframe/dataframe/sort/rank.py +147 -0
- maxframe/dataframe/statistics/__init__.py +3 -3
- maxframe/dataframe/statistics/corr.py +1 -0
- maxframe/dataframe/statistics/quantile.py +2 -2
- maxframe/dataframe/tests/test_typing.py +104 -0
- maxframe/dataframe/tests/test_utils.py +66 -2
- maxframe/dataframe/tseries/__init__.py +19 -0
- maxframe/dataframe/tseries/at_time.py +61 -0
- maxframe/dataframe/tseries/between_time.py +122 -0
- maxframe/dataframe/typing_.py +185 -0
- maxframe/dataframe/utils.py +125 -52
- maxframe/dataframe/window/aggregation.py +8 -4
- maxframe/dataframe/window/core.py +14 -1
- maxframe/dataframe/window/ewm.py +1 -3
- maxframe/dataframe/window/expanding.py +37 -35
- maxframe/dataframe/window/rolling.py +49 -39
- maxframe/dataframe/window/tests/test_expanding.py +1 -7
- maxframe/dataframe/window/tests/test_rolling.py +1 -1
- maxframe/env.py +7 -4
- maxframe/errors.py +2 -2
- maxframe/io/odpsio/schema.py +9 -3
- maxframe/io/odpsio/tableio.py +7 -2
- maxframe/io/odpsio/tests/test_schema.py +198 -83
- maxframe/learn/__init__.py +10 -2
- maxframe/learn/cluster/__init__.py +15 -0
- maxframe/learn/cluster/_kmeans.py +782 -0
- maxframe/learn/contrib/llm/core.py +18 -7
- 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 +1 -0
- maxframe/learn/contrib/llm/models/dashscope.py +12 -6
- maxframe/learn/contrib/llm/models/managed.py +76 -11
- maxframe/learn/contrib/llm/models/openai.py +72 -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 +348 -42
- maxframe/learn/contrib/models.py +4 -1
- maxframe/learn/contrib/xgboost/classifier.py +2 -0
- maxframe/learn/contrib/xgboost/core.py +113 -4
- maxframe/learn/contrib/xgboost/predict.py +4 -2
- maxframe/learn/contrib/xgboost/regressor.py +5 -0
- maxframe/learn/contrib/xgboost/train.py +7 -2
- maxframe/learn/core.py +66 -0
- maxframe/learn/linear_model/_base.py +58 -1
- maxframe/learn/linear_model/_lin_reg.py +1 -1
- maxframe/learn/metrics/__init__.py +6 -0
- maxframe/learn/metrics/_classification.py +145 -0
- maxframe/learn/metrics/_ranking.py +477 -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/preprocessing/_data/min_max_scaler.py +34 -23
- maxframe/learn/preprocessing/_data/standard_scaler.py +34 -25
- maxframe/learn/utils/__init__.py +2 -1
- maxframe/learn/utils/checks.py +1 -2
- maxframe/learn/utils/core.py +59 -0
- maxframe/learn/utils/extmath.py +79 -9
- maxframe/learn/utils/odpsio.py +262 -0
- maxframe/learn/utils/validation.py +2 -2
- maxframe/lib/compat.py +40 -0
- maxframe/lib/dtypes_extension/__init__.py +16 -1
- maxframe/lib/dtypes_extension/_fake_arrow_dtype.py +604 -0
- maxframe/lib/dtypes_extension/blob.py +304 -0
- maxframe/lib/dtypes_extension/dtypes.py +40 -0
- maxframe/lib/dtypes_extension/tests/test_blob.py +88 -0
- maxframe/lib/dtypes_extension/tests/test_dtypes.py +16 -1
- maxframe/lib/dtypes_extension/tests/test_fake_arrow_dtype.py +75 -0
- maxframe/lib/filesystem/_oss_lib/common.py +124 -50
- maxframe/lib/filesystem/_oss_lib/glob.py +1 -1
- maxframe/lib/filesystem/_oss_lib/handle.py +21 -25
- maxframe/lib/filesystem/base.py +1 -1
- maxframe/lib/filesystem/core.py +1 -1
- maxframe/lib/filesystem/oss.py +115 -46
- maxframe/lib/filesystem/tests/test_oss.py +74 -36
- maxframe/lib/mmh3.cp37-win32.pyd +0 -0
- maxframe/lib/wrapped_pickle.py +10 -0
- maxframe/opcodes.py +41 -15
- maxframe/protocol.py +12 -0
- maxframe/remote/core.py +4 -0
- maxframe/serialization/__init__.py +11 -2
- maxframe/serialization/arrow.py +38 -13
- maxframe/serialization/blob.py +32 -0
- maxframe/serialization/core.cp37-win32.pyd +0 -0
- maxframe/serialization/core.pyx +39 -1
- maxframe/serialization/exception.py +2 -4
- maxframe/serialization/numpy.py +11 -0
- maxframe/serialization/pandas.py +46 -9
- maxframe/serialization/serializables/core.py +2 -2
- maxframe/serialization/tests/test_serial.py +31 -4
- maxframe/tensor/__init__.py +38 -8
- maxframe/tensor/arithmetic/__init__.py +19 -10
- maxframe/tensor/arithmetic/core.py +2 -2
- maxframe/tensor/arithmetic/iscomplexobj.py +53 -0
- maxframe/tensor/arithmetic/tests/test_arithmetic.py +6 -9
- maxframe/tensor/core.py +6 -2
- maxframe/tensor/datasource/tests/test_datasource.py +2 -1
- maxframe/tensor/extensions/__init__.py +2 -0
- maxframe/tensor/extensions/apply_chunk.py +3 -3
- maxframe/tensor/extensions/rebalance.py +65 -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/fill_diagonal.py +1 -7
- maxframe/tensor/linalg/__init__.py +7 -0
- maxframe/tensor/linalg/_einsumfunc.py +1025 -0
- maxframe/tensor/linalg/cholesky.py +117 -0
- maxframe/tensor/linalg/einsum.py +339 -0
- maxframe/tensor/linalg/lstsq.py +100 -0
- maxframe/tensor/linalg/matrix_norm.py +75 -0
- maxframe/tensor/linalg/norm.py +249 -0
- maxframe/tensor/linalg/solve.py +72 -0
- maxframe/tensor/linalg/solve_triangular.py +2 -2
- maxframe/tensor/linalg/vector_norm.py +113 -0
- maxframe/tensor/misc/__init__.py +24 -1
- maxframe/tensor/misc/argwhere.py +72 -0
- maxframe/tensor/misc/array_split.py +46 -0
- maxframe/tensor/misc/broadcast_arrays.py +57 -0
- maxframe/tensor/misc/copyto.py +130 -0
- maxframe/tensor/misc/delete.py +104 -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/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/insert.py +139 -0
- maxframe/tensor/misc/moveaxis.py +83 -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/shape.py +89 -0
- maxframe/tensor/misc/split.py +190 -0
- maxframe/tensor/misc/tile.py +109 -0
- maxframe/tensor/misc/vsplit.py +74 -0
- maxframe/tensor/reduction/array_equal.py +2 -1
- maxframe/tensor/sort/__init__.py +2 -0
- maxframe/tensor/sort/argpartition.py +98 -0
- maxframe/tensor/sort/partition.py +228 -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 +159 -21
- maxframe/tensor/special/airy.py +55 -0
- maxframe/tensor/special/bessel.py +199 -0
- maxframe/tensor/special/core.py +65 -4
- 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 +21 -0
- maxframe/tensor/statistics/__init__.py +6 -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/ptp.py +89 -0
- maxframe/tensor/utils.py +3 -3
- maxframe/tests/test_udf.py +61 -0
- maxframe/tests/test_utils.py +51 -6
- maxframe/tests/utils.py +0 -2
- maxframe/typing_.py +2 -0
- maxframe/udf.py +130 -9
- maxframe/utils.py +254 -27
- {maxframe-2.0.0b2.dist-info → maxframe-2.3.0rc1.dist-info}/METADATA +3 -3
- {maxframe-2.0.0b2.dist-info → maxframe-2.3.0rc1.dist-info}/RECORD +442 -264
- maxframe_client/fetcher.py +35 -4
- maxframe_client/session/odps.py +7 -2
- maxframe_client/session/task.py +8 -1
- maxframe_client/tests/test_fetcher.py +76 -3
- maxframe_client/tests/test_session.py +28 -1
- maxframe/dataframe/arrays.py +0 -864
- /maxframe/dataframe/{misc → reshape}/melt.py +0 -0
- /maxframe/dataframe/{misc → reshape}/stack.py +0 -0
- {maxframe-2.0.0b2.dist-info → maxframe-2.3.0rc1.dist-info}/WHEEL +0 -0
- {maxframe-2.0.0b2.dist-info → maxframe-2.3.0rc1.dist-info}/top_level.txt +0 -0
maxframe/core/graph/entity.py
CHANGED
|
@@ -26,7 +26,6 @@ from ...serialization.serializables import (
|
|
|
26
26
|
)
|
|
27
27
|
from ...serialization.serializables.core import SerializableSerializer
|
|
28
28
|
from ...utils import extract_class_name, tokenize
|
|
29
|
-
from ..operator import Fetch
|
|
30
29
|
from .core import DAG
|
|
31
30
|
|
|
32
31
|
|
|
@@ -118,18 +117,22 @@ class SerializableGraph(Serializable):
|
|
|
118
117
|
_successors = DictField("successors")
|
|
119
118
|
_results = ListField("results")
|
|
120
119
|
_graph_cls = StringField("graph_cls")
|
|
120
|
+
_extra_params = DictField("extra_params", default=None)
|
|
121
121
|
|
|
122
122
|
@classmethod
|
|
123
123
|
def from_graph(cls, graph: EntityGraph) -> "SerializableGraph":
|
|
124
|
-
|
|
124
|
+
kw = dict(
|
|
125
125
|
_is_chunk=False,
|
|
126
|
-
_fetch_nodes=[chunk for chunk in graph if
|
|
126
|
+
_fetch_nodes=[chunk for chunk in graph if chunk.is_fetch()],
|
|
127
127
|
_nodes=graph._nodes,
|
|
128
128
|
_predecessors=graph._predecessors,
|
|
129
129
|
_successors=graph._successors,
|
|
130
130
|
_results=graph.results,
|
|
131
131
|
_graph_cls=extract_class_name(type(graph)),
|
|
132
132
|
)
|
|
133
|
+
if hasattr(graph, "extra_params"):
|
|
134
|
+
kw["_extra_params"] = graph.extra_params
|
|
135
|
+
return SerializableGraph(**kw)
|
|
133
136
|
|
|
134
137
|
def to_graph(self) -> EntityGraph:
|
|
135
138
|
graph_cls = (
|
|
@@ -141,6 +144,8 @@ class SerializableGraph(Serializable):
|
|
|
141
144
|
graph._nodes.update(self._nodes)
|
|
142
145
|
graph._predecessors.update(self._predecessors)
|
|
143
146
|
graph._successors.update(self._successors)
|
|
147
|
+
if self._extra_params:
|
|
148
|
+
graph.extra_params = self._extra_params
|
|
144
149
|
return graph
|
|
145
150
|
|
|
146
151
|
|
maxframe/core/mode.py
CHANGED
|
@@ -42,6 +42,10 @@ def is_build_mode():
|
|
|
42
42
|
return bool(getattr(_internal_mode, "build", False))
|
|
43
43
|
|
|
44
44
|
|
|
45
|
+
def is_mock_mode():
|
|
46
|
+
return bool(getattr(_internal_mode, "mock", False))
|
|
47
|
+
|
|
48
|
+
|
|
45
49
|
class _EnterModeFuncWrapper:
|
|
46
50
|
def __init__(self, mode_name_to_value):
|
|
47
51
|
self.mode_name_to_value = mode_name_to_value
|
|
@@ -86,10 +90,11 @@ class _EnterModeFuncWrapper:
|
|
|
86
90
|
return _inner
|
|
87
91
|
|
|
88
92
|
|
|
89
|
-
def enter_mode(kernel=None, build=None):
|
|
93
|
+
def enter_mode(kernel=None, build=None, mock=None):
|
|
90
94
|
mode_name_to_value = {
|
|
91
95
|
"kernel": kernel,
|
|
92
96
|
"build": build,
|
|
97
|
+
"mock": mock,
|
|
93
98
|
}
|
|
94
99
|
mode_name_to_value = {k: v for k, v in mode_name_to_value.items() if v is not None}
|
|
95
100
|
|
maxframe/core/operator/base.py
CHANGED
|
@@ -40,6 +40,7 @@ from ..entity.core import ENTITY_TYPE, Entity, EntityData
|
|
|
40
40
|
from ..entity.output_types import OutputType
|
|
41
41
|
from ..entity.tileables import Tileable
|
|
42
42
|
from ..mode import enter_mode
|
|
43
|
+
from .utils import rewrite_stop_iteration
|
|
43
44
|
|
|
44
45
|
|
|
45
46
|
class OperatorMetaclass(SerializableMeta):
|
|
@@ -91,6 +92,10 @@ class SchedulingHint(Serializable):
|
|
|
91
92
|
# id of gang scheduling for machine learning trainings
|
|
92
93
|
gang_scheduling_id = StringField("gang_scheduling_id", default=None)
|
|
93
94
|
|
|
95
|
+
def __init__(self, *, pure_depends=None, **kwargs):
|
|
96
|
+
kwargs["_pure_depends"] = pure_depends or kwargs.get("_pure_depends") or []
|
|
97
|
+
super().__init__(**kwargs)
|
|
98
|
+
|
|
94
99
|
@classproperty
|
|
95
100
|
@lru_cache(1)
|
|
96
101
|
def all_hint_names(cls):
|
|
@@ -306,7 +311,8 @@ class Operator(Base, OperatorLogicKeyGeneratorMixin, metaclass=OperatorMetaclass
|
|
|
306
311
|
The replaced input object.
|
|
307
312
|
"""
|
|
308
313
|
self.inputs[index] = replaced_input
|
|
309
|
-
|
|
314
|
+
with rewrite_stop_iteration():
|
|
315
|
+
self._set_inputs(self, self.inputs)
|
|
310
316
|
|
|
311
317
|
@property
|
|
312
318
|
def inputs(self) -> List[Union[ENTITY_TYPE]]:
|
|
@@ -317,7 +323,8 @@ class Operator(Base, OperatorLogicKeyGeneratorMixin, metaclass=OperatorMetaclass
|
|
|
317
323
|
|
|
318
324
|
@inputs.setter
|
|
319
325
|
def inputs(self, vals):
|
|
320
|
-
|
|
326
|
+
with rewrite_stop_iteration():
|
|
327
|
+
self._set_inputs(self, vals)
|
|
321
328
|
|
|
322
329
|
@property
|
|
323
330
|
def output_limit(self) -> int:
|
maxframe/core/operator/core.py
CHANGED
|
@@ -18,6 +18,9 @@ from collections import defaultdict
|
|
|
18
18
|
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Type, Union
|
|
19
19
|
|
|
20
20
|
import numpy as np
|
|
21
|
+
import pandas as pd
|
|
22
|
+
|
|
23
|
+
from .utils import rewrite_stop_iteration
|
|
21
24
|
|
|
22
25
|
if TYPE_CHECKING:
|
|
23
26
|
from .. import TileableGraph
|
|
@@ -82,7 +85,7 @@ class TileableOperatorMixin:
|
|
|
82
85
|
nsplits = tuple(nsplits)
|
|
83
86
|
shape = list(shape)
|
|
84
87
|
for idx, (s, sp) in enumerate(zip(shape, nsplits)):
|
|
85
|
-
if not
|
|
88
|
+
if not pd.isna(s):
|
|
86
89
|
continue
|
|
87
90
|
s = sum(sp)
|
|
88
91
|
if not np.isnan(s):
|
|
@@ -118,11 +121,16 @@ class TileableOperatorMixin:
|
|
|
118
121
|
def _new_tileables(
|
|
119
122
|
self, inputs: List[TileableType], kws: List[dict] = None, **kw
|
|
120
123
|
) -> List[TileableType]:
|
|
124
|
+
assert (
|
|
125
|
+
isinstance(inputs, (list, tuple)) or inputs is None
|
|
126
|
+
), f"{inputs} is not a list"
|
|
127
|
+
|
|
121
128
|
output_limit = kw.pop("output_limit", None)
|
|
122
129
|
if output_limit is None:
|
|
123
130
|
output_limit = getattr(self, "output_limit")
|
|
124
131
|
|
|
125
|
-
|
|
132
|
+
with rewrite_stop_iteration():
|
|
133
|
+
self._set_inputs(self, inputs)
|
|
126
134
|
if self.gpu is None:
|
|
127
135
|
self.gpu = self._check_if_gpu(self._inputs)
|
|
128
136
|
if getattr(self, "_key", None) is None:
|
maxframe/core/operator/utils.py
CHANGED
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
+
import contextlib
|
|
16
|
+
import sys
|
|
17
|
+
|
|
15
18
|
from ...typing_ import EntityType, TileableType
|
|
16
19
|
from ..entity import TILEABLE_TYPE
|
|
17
20
|
|
|
@@ -53,3 +56,13 @@ def build_fetch(entity: EntityType, **kw) -> EntityType:
|
|
|
53
56
|
|
|
54
57
|
def add_fetch_builder(entity_type, builder_func):
|
|
55
58
|
_type_to_builder.append((entity_type, builder_func))
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
@contextlib.contextmanager
|
|
62
|
+
def rewrite_stop_iteration():
|
|
63
|
+
try:
|
|
64
|
+
yield
|
|
65
|
+
except StopIteration:
|
|
66
|
+
raise RuntimeError("Unexpected StopIteration happened.").with_traceback(
|
|
67
|
+
sys.exc_info()[2]
|
|
68
|
+
) from None
|
maxframe/dataframe/__init__.py
CHANGED
|
@@ -21,6 +21,7 @@ from . import (
|
|
|
21
21
|
fetch,
|
|
22
22
|
groupby,
|
|
23
23
|
indexing,
|
|
24
|
+
merge,
|
|
24
25
|
misc,
|
|
25
26
|
missing,
|
|
26
27
|
reduction,
|
|
@@ -31,6 +32,7 @@ from . import (
|
|
|
31
32
|
window,
|
|
32
33
|
)
|
|
33
34
|
from .datasource.date_range import date_range
|
|
35
|
+
from .datasource.direct import read_clipboard
|
|
34
36
|
from .datasource.from_index import series_from_index
|
|
35
37
|
from .datasource.from_records import from_records
|
|
36
38
|
from .datasource.from_tensor import dataframe_from_tensor, series_from_tensor
|
|
@@ -39,19 +41,18 @@ from .datasource.read_odps_query import read_odps_query
|
|
|
39
41
|
from .datasource.read_odps_table import read_odps_table
|
|
40
42
|
from .datasource.read_parquet import read_parquet
|
|
41
43
|
from .datastore.to_odps import to_odps_table
|
|
42
|
-
from .groupby import NamedAgg
|
|
43
44
|
from .initializer import DataFrame, Index, Series, read_pandas
|
|
44
45
|
from .merge import concat, merge
|
|
45
46
|
from .misc.cut import cut
|
|
46
47
|
from .misc.eval import maxframe_eval as eval # pylint: disable=redefined-builtin
|
|
47
48
|
from .misc.get_dummies import get_dummies
|
|
48
|
-
from .misc.melt import melt
|
|
49
|
-
from .misc.pivot import pivot
|
|
50
|
-
from .misc.pivot_table import pivot_table
|
|
51
49
|
from .misc.qcut import qcut
|
|
52
50
|
from .misc.to_numeric import to_numeric
|
|
53
51
|
from .missing import isna, isnull, notna, notnull
|
|
54
|
-
from .reduction import CustomReduction, unique
|
|
52
|
+
from .reduction import CustomReduction, NamedAgg, unique
|
|
53
|
+
from .reshape.melt import melt
|
|
54
|
+
from .reshape.pivot import pivot
|
|
55
|
+
from .reshape.pivot_table import pivot_table
|
|
55
56
|
from .tseries.to_datetime import to_datetime
|
|
56
57
|
|
|
57
58
|
try:
|
|
@@ -80,3 +81,9 @@ del (
|
|
|
80
81
|
)
|
|
81
82
|
|
|
82
83
|
from_pandas = read_pandas
|
|
84
|
+
|
|
85
|
+
# isort: off
|
|
86
|
+
from .typing_ import register_pandas_typing_funcs
|
|
87
|
+
|
|
88
|
+
register_pandas_typing_funcs()
|
|
89
|
+
del register_pandas_typing_funcs
|
|
@@ -0,0 +1,45 @@
|
|
|
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 logging
|
|
16
|
+
|
|
17
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class LegacySeriesMethodOperator(DataFrameOperator, DataFrameOperatorMixin):
|
|
23
|
+
_method_name = None
|
|
24
|
+
_method_cls = None
|
|
25
|
+
|
|
26
|
+
def __on_deserialize__(self):
|
|
27
|
+
cls = type(self)
|
|
28
|
+
local_fields = {
|
|
29
|
+
f
|
|
30
|
+
for f, name_hash in cls._FIELD_TO_NAME_HASH.items()
|
|
31
|
+
if name_hash == cls._NAME_HASH
|
|
32
|
+
}
|
|
33
|
+
kw = {
|
|
34
|
+
f: getattr(self, f)
|
|
35
|
+
for f in cls._FIELD_TO_NAME_HASH
|
|
36
|
+
if f not in local_fields and hasattr(self, f)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
kw["method"] = self._method_name
|
|
40
|
+
kw["method_kwargs"] = {
|
|
41
|
+
f: getattr(self, f) for f in local_fields if hasattr(self, f)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
logger.warning(f"Using deprecated operator class {cls.__name__}")
|
|
45
|
+
return self._method_cls(**kw)
|
|
@@ -12,7 +12,10 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
from .core import SeriesDatetimeMethod
|
|
15
|
+
from .core import SeriesDatetimeMethod, datetime_method_to_handlers
|
|
16
|
+
|
|
17
|
+
methods = set(datetime_method_to_handlers.keys())
|
|
18
|
+
del datetime_method_to_handlers
|
|
16
19
|
|
|
17
20
|
|
|
18
21
|
def _install():
|
|
@@ -16,27 +16,16 @@ import pandas as pd
|
|
|
16
16
|
import pyarrow as pa
|
|
17
17
|
|
|
18
18
|
from .... import opcodes
|
|
19
|
-
from ....core.entity.output_types import OutputType
|
|
20
19
|
from ....serialization.serializables.field import AnyField
|
|
21
|
-
from
|
|
20
|
+
from .core import LegacySeriesDictOperator, SeriesDictMethod
|
|
22
21
|
|
|
23
22
|
|
|
24
|
-
class SeriesDictContainsOperator(
|
|
23
|
+
class SeriesDictContainsOperator(LegacySeriesDictOperator):
|
|
24
|
+
# operator class deprecated since v2.3.0
|
|
25
25
|
_op_type_ = opcodes.SERIES_DICT_CONTAINS
|
|
26
|
+
_method_name = "contains"
|
|
26
27
|
query_key = AnyField("query_key", default=None)
|
|
27
28
|
|
|
28
|
-
def __init__(self, **kw):
|
|
29
|
-
super().__init__(_output_types=[OutputType.series], **kw)
|
|
30
|
-
|
|
31
|
-
def __call__(self, series):
|
|
32
|
-
return self.new_series(
|
|
33
|
-
[series],
|
|
34
|
-
shape=series.shape,
|
|
35
|
-
dtype=pd.ArrowDtype(pa.bool_()),
|
|
36
|
-
index_value=series.index_value,
|
|
37
|
-
name=None,
|
|
38
|
-
)
|
|
39
|
-
|
|
40
29
|
|
|
41
30
|
def series_dict_contains(series, query_key):
|
|
42
31
|
"""
|
|
@@ -78,4 +67,6 @@ def series_dict_contains(series, query_key):
|
|
|
78
67
|
3 <NA>
|
|
79
68
|
dtype: bool[pyarrow]
|
|
80
69
|
"""
|
|
81
|
-
return
|
|
70
|
+
return SeriesDictMethod(method="contains", method_kwargs=dict(query_key=query_key))(
|
|
71
|
+
series, dtype=pd.ArrowDtype(pa.bool_()), name=None
|
|
72
|
+
)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Copyright 1999-2025 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from .... import opcodes
|
|
16
|
+
from ....core import OutputType
|
|
17
|
+
from ....serialization.serializables import DictField, StringField, TupleField
|
|
18
|
+
from ....utils import no_default
|
|
19
|
+
from ...operators import DataFrameOperator, DataFrameOperatorMixin
|
|
20
|
+
from ..compat import LegacySeriesMethodOperator
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class SeriesDictMethod(DataFrameOperator, DataFrameOperatorMixin):
|
|
24
|
+
_op_type_ = opcodes.SERIES_DICT_METHOD
|
|
25
|
+
|
|
26
|
+
method = StringField("method", default=None)
|
|
27
|
+
method_args = TupleField("method_args", default_factory=list)
|
|
28
|
+
method_kwargs = DictField("method_kwargs", default_factory=dict)
|
|
29
|
+
|
|
30
|
+
def __init__(self, output_types=None, **kw):
|
|
31
|
+
output_types = output_types or [OutputType.series]
|
|
32
|
+
kw["_output_types"] = kw.get("_output_types") or output_types
|
|
33
|
+
super().__init__(**kw)
|
|
34
|
+
|
|
35
|
+
def __call__(self, inp, dtype=None, name=no_default):
|
|
36
|
+
dtype = dtype or inp.dtype
|
|
37
|
+
name = inp.name if name is no_default else name
|
|
38
|
+
return self.new_series(
|
|
39
|
+
[inp],
|
|
40
|
+
shape=inp.shape,
|
|
41
|
+
dtype=dtype,
|
|
42
|
+
index_value=inp.index_value,
|
|
43
|
+
name=name,
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class LegacySeriesDictOperator(LegacySeriesMethodOperator):
|
|
48
|
+
_method_cls = SeriesDictMethod
|
|
@@ -15,30 +15,18 @@
|
|
|
15
15
|
import pandas as pd
|
|
16
16
|
|
|
17
17
|
from .... import opcodes
|
|
18
|
-
from ....core.entity.output_types import OutputType
|
|
19
18
|
from ....serialization.serializables.field import AnyField, BoolField
|
|
20
|
-
from
|
|
19
|
+
from .core import LegacySeriesDictOperator, SeriesDictMethod
|
|
21
20
|
|
|
22
21
|
|
|
23
|
-
class SeriesDictGetItemOperator(
|
|
22
|
+
class SeriesDictGetItemOperator(LegacySeriesDictOperator):
|
|
23
|
+
# operator class deprecated since v2.3.0
|
|
24
24
|
_op_type_ = opcodes.SERIES_DICT_GETITEM
|
|
25
|
+
_method_name = "getitem"
|
|
25
26
|
query_key = AnyField("query_key", default=None)
|
|
26
27
|
default_value = AnyField("default_value", default=None)
|
|
27
28
|
ignore_key_error = BoolField("ignore_key_error", default=False)
|
|
28
29
|
|
|
29
|
-
def __init__(self, **kw):
|
|
30
|
-
super().__init__(_output_types=[OutputType.series], **kw)
|
|
31
|
-
|
|
32
|
-
def __call__(self, series):
|
|
33
|
-
arrow_map_type = series.dtype.pyarrow_dtype
|
|
34
|
-
return self.new_series(
|
|
35
|
-
[series],
|
|
36
|
-
shape=series.shape,
|
|
37
|
-
dtype=pd.ArrowDtype(arrow_map_type.item_type),
|
|
38
|
-
index_value=series.index_value,
|
|
39
|
-
name=str(self.query_key),
|
|
40
|
-
)
|
|
41
|
-
|
|
42
30
|
|
|
43
31
|
def series_dict_getitem(series, query_key, default_value=None):
|
|
44
32
|
"""
|
|
@@ -85,9 +73,14 @@ def series_dict_getitem(series, query_key, default_value=None):
|
|
|
85
73
|
3 <NA>
|
|
86
74
|
Name: k2, dtype: int64[pyarrow]
|
|
87
75
|
"""
|
|
88
|
-
|
|
76
|
+
method_kw = dict(
|
|
89
77
|
query_key=query_key, default_value=default_value, ignore_key_error=True
|
|
90
|
-
)
|
|
78
|
+
)
|
|
79
|
+
arrow_map_type = series.dtype.pyarrow_dtype
|
|
80
|
+
dtype = pd.ArrowDtype(arrow_map_type.item_type)
|
|
81
|
+
return SeriesDictMethod(method="getitem", method_kwargs=method_kw)(
|
|
82
|
+
series, name=str(query_key), dtype=dtype
|
|
83
|
+
)
|
|
91
84
|
|
|
92
85
|
|
|
93
86
|
def series_dict_getitem_with_key_error(series, query_key):
|
|
@@ -139,6 +132,9 @@ def series_dict_getitem_with_key_error(series, query_key):
|
|
|
139
132
|
3 <NA>
|
|
140
133
|
Name: k1, dtype: int64[pyarrow]
|
|
141
134
|
"""
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
135
|
+
method_kw = dict(query_key=query_key, default_value=None, ignore_key_error=False)
|
|
136
|
+
arrow_map_type = series.dtype.pyarrow_dtype
|
|
137
|
+
dtype = pd.ArrowDtype(arrow_map_type.item_type)
|
|
138
|
+
return SeriesDictMethod(method="getitem", method_kwargs=method_kw)(
|
|
139
|
+
series, name=str(query_key), dtype=dtype
|
|
140
|
+
)
|
|
@@ -16,24 +16,13 @@ import pandas as pd
|
|
|
16
16
|
import pyarrow as pa
|
|
17
17
|
|
|
18
18
|
from .... import opcodes
|
|
19
|
-
from
|
|
20
|
-
from ...operators import DataFrameOperator, DataFrameOperatorMixin
|
|
19
|
+
from .core import LegacySeriesDictOperator, SeriesDictMethod
|
|
21
20
|
|
|
22
21
|
|
|
23
|
-
class SeriesDictLengthOperator(
|
|
22
|
+
class SeriesDictLengthOperator(LegacySeriesDictOperator):
|
|
23
|
+
# operator class deprecated since v2.3.0
|
|
24
24
|
_op_type_ = opcodes.SERIES_DICT_LENGTH
|
|
25
|
-
|
|
26
|
-
def __init__(self, **kw):
|
|
27
|
-
super().__init__(_output_types=[OutputType.series], **kw)
|
|
28
|
-
|
|
29
|
-
def __call__(self, series):
|
|
30
|
-
return self.new_series(
|
|
31
|
-
[series],
|
|
32
|
-
shape=series.shape,
|
|
33
|
-
index_value=series.index_value,
|
|
34
|
-
dtype=pd.ArrowDtype(pa.int64()),
|
|
35
|
-
name=None,
|
|
36
|
-
)
|
|
25
|
+
_method_name = "len"
|
|
37
26
|
|
|
38
27
|
|
|
39
28
|
def series_dict_length(series):
|
|
@@ -70,4 +59,6 @@ def series_dict_length(series):
|
|
|
70
59
|
3 <NA>
|
|
71
60
|
dtype: int64[pyarrow]
|
|
72
61
|
"""
|
|
73
|
-
return
|
|
62
|
+
return SeriesDictMethod(method="len")(
|
|
63
|
+
series, name=None, dtype=pd.ArrowDtype(pa.int64())
|
|
64
|
+
)
|
|
@@ -13,28 +13,17 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
from .... import opcodes
|
|
16
|
-
from ....core.entity.output_types import OutputType
|
|
17
16
|
from ....serialization.serializables.field import AnyField, BoolField
|
|
18
|
-
from
|
|
17
|
+
from .core import LegacySeriesDictOperator, SeriesDictMethod
|
|
19
18
|
|
|
20
19
|
|
|
21
|
-
class SeriesDictRemoveOperator(
|
|
20
|
+
class SeriesDictRemoveOperator(LegacySeriesDictOperator):
|
|
21
|
+
# operator class deprecated since v2.3.0
|
|
22
22
|
_op_type_ = opcodes.SERIES_DICT_REMOVE
|
|
23
|
+
_method_name = "remove"
|
|
23
24
|
query_key = AnyField("query_key", default=None)
|
|
24
25
|
ignore_key_error = BoolField("ignore_key_error", default=False)
|
|
25
26
|
|
|
26
|
-
def __init__(self, **kw):
|
|
27
|
-
super().__init__(_output_types=[OutputType.series], **kw)
|
|
28
|
-
|
|
29
|
-
def __call__(self, series):
|
|
30
|
-
return self.new_series(
|
|
31
|
-
[series],
|
|
32
|
-
shape=series.shape,
|
|
33
|
-
index_value=series.index_value,
|
|
34
|
-
dtype=series.dtype,
|
|
35
|
-
name=series.name,
|
|
36
|
-
)
|
|
37
|
-
|
|
38
27
|
|
|
39
28
|
def series_dict_remove(series, query_key, ignore_key_error: bool = False):
|
|
40
29
|
"""
|
|
@@ -82,6 +71,5 @@ def series_dict_remove(series, query_key, ignore_key_error: bool = False):
|
|
|
82
71
|
3 <NA>
|
|
83
72
|
dtype: map<string, int64>[pyarrow]
|
|
84
73
|
"""
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
)(series)
|
|
74
|
+
method_kwargs = dict(query_key=query_key, ignore_key_error=ignore_key_error)
|
|
75
|
+
return SeriesDictMethod(method="remove", method_kwargs=method_kwargs)(series)
|
|
@@ -13,30 +13,18 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
from .... import opcodes
|
|
16
|
-
from ....core.entity.output_types import OutputType
|
|
17
16
|
from ....serialization.serializables.field import AnyField
|
|
18
17
|
from ...core import TILEABLE_TYPE
|
|
19
|
-
from
|
|
18
|
+
from .core import LegacySeriesDictOperator, SeriesDictMethod
|
|
20
19
|
|
|
21
20
|
|
|
22
|
-
class SeriesDictSetItemOperator(
|
|
21
|
+
class SeriesDictSetItemOperator(LegacySeriesDictOperator):
|
|
22
|
+
# operator class deprecated since v2.3.0
|
|
23
23
|
_op_type_ = opcodes.SERIES_DICT_SETITEM
|
|
24
|
+
_method_name = "setitem"
|
|
24
25
|
query_key = AnyField("query_key", default=None)
|
|
25
26
|
value = AnyField("default_value", default=None)
|
|
26
27
|
|
|
27
|
-
def __init__(self, **kw):
|
|
28
|
-
super().__init__(_output_types=[OutputType.series], **kw)
|
|
29
|
-
|
|
30
|
-
def __call__(self, series):
|
|
31
|
-
new_series = self.new_series(
|
|
32
|
-
[series],
|
|
33
|
-
shape=series.shape,
|
|
34
|
-
index_value=series.index_value,
|
|
35
|
-
dtype=series.dtype,
|
|
36
|
-
name=series.name,
|
|
37
|
-
)
|
|
38
|
-
series.data = new_series.data
|
|
39
|
-
|
|
40
28
|
|
|
41
29
|
def series_dict_setitem(series, query_key, value):
|
|
42
30
|
"""
|
|
@@ -67,7 +55,7 @@ def series_dict_setitem(series, query_key, value):
|
|
|
67
55
|
>>> s = md.Series(
|
|
68
56
|
... data=[[("k1", 1), ("k2", 2)], [("k1", 3)], None],
|
|
69
57
|
... index=[1, 2, 3],
|
|
70
|
-
... dtype=
|
|
58
|
+
... dtype=dict_(pa.string(), pa.int64()),
|
|
71
59
|
... )
|
|
72
60
|
>>> s.execute()
|
|
73
61
|
1 [('k1', 1), ('k2', 2)]
|
|
@@ -86,4 +74,6 @@ def series_dict_setitem(series, query_key, value):
|
|
|
86
74
|
raise NotImplementedError(
|
|
87
75
|
"Set the value with a dataframe/series is not allowed yet"
|
|
88
76
|
)
|
|
89
|
-
|
|
77
|
+
method_kwargs = dict(query_key=query_key, value=value)
|
|
78
|
+
new_series = SeriesDictMethod(method="setitem", method_kwargs=method_kwargs)(series)
|
|
79
|
+
series.data = new_series.data
|