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
|
@@ -0,0 +1,91 @@
|
|
|
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 pandas as pd
|
|
16
|
+
import pyarrow as pa
|
|
17
|
+
import pytest
|
|
18
|
+
|
|
19
|
+
from ..... import dataframe as md
|
|
20
|
+
from .....utils import ARROW_DTYPE_NOT_SUPPORTED
|
|
21
|
+
from ..core import SeriesStructMethod
|
|
22
|
+
|
|
23
|
+
pytestmark = pytest.mark.skipif(
|
|
24
|
+
ARROW_DTYPE_NOT_SUPPORTED, reason="Arrow Dtype is not supported"
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@pytest.fixture
|
|
29
|
+
def series():
|
|
30
|
+
version_type = pa.struct(
|
|
31
|
+
[
|
|
32
|
+
("major", pa.int64()),
|
|
33
|
+
("minor", pa.int64()),
|
|
34
|
+
]
|
|
35
|
+
)
|
|
36
|
+
return md.Series(
|
|
37
|
+
[
|
|
38
|
+
{"version": {"major": 1, "minor": 5}, "project": "pandas"},
|
|
39
|
+
{"version": {"major": 2, "minor": 1}, "project": "pandas"},
|
|
40
|
+
{"version": {"major": 1, "minor": 26}, "project": "numpy"},
|
|
41
|
+
],
|
|
42
|
+
dtype=pd.ArrowDtype(
|
|
43
|
+
pa.struct([("version", version_type), ("project", pa.string())])
|
|
44
|
+
),
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_dtypes(series):
|
|
49
|
+
pd.testing.assert_series_equal(
|
|
50
|
+
series.struct.dtypes,
|
|
51
|
+
pd.Series(
|
|
52
|
+
[
|
|
53
|
+
pd.ArrowDtype(
|
|
54
|
+
pa.struct([("major", pa.int64()), ("minor", pa.int64())])
|
|
55
|
+
),
|
|
56
|
+
pd.ArrowDtype(pa.string()),
|
|
57
|
+
],
|
|
58
|
+
index=["version", "project"],
|
|
59
|
+
),
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def test_field(series):
|
|
64
|
+
version_type = pa.struct(
|
|
65
|
+
[
|
|
66
|
+
("major", pa.int64()),
|
|
67
|
+
("minor", pa.int64()),
|
|
68
|
+
]
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
s1 = series.struct.field("version")
|
|
72
|
+
assert isinstance(s1, md.Series)
|
|
73
|
+
assert s1.name == "version"
|
|
74
|
+
assert s1.dtype == pd.ArrowDtype(version_type)
|
|
75
|
+
assert s1.shape == (3,)
|
|
76
|
+
assert s1.index_value == series.index_value
|
|
77
|
+
op = s1.op
|
|
78
|
+
assert isinstance(op, SeriesStructMethod)
|
|
79
|
+
assert op.method == "field"
|
|
80
|
+
assert op.method_kwargs["name_or_index"] == "version"
|
|
81
|
+
|
|
82
|
+
s2 = series.struct.field(["version", "major"])
|
|
83
|
+
assert isinstance(s1, md.Series)
|
|
84
|
+
assert s2.name == "major"
|
|
85
|
+
assert s2.dtype == pd.ArrowDtype(pa.int64())
|
|
86
|
+
assert s2.shape == (3,)
|
|
87
|
+
assert s2.index_value == series.index_value
|
|
88
|
+
op = s2.op
|
|
89
|
+
assert isinstance(op, SeriesStructMethod)
|
|
90
|
+
assert op.method == "field"
|
|
91
|
+
assert op.method_kwargs["name_or_index"] == ["version", "major"]
|
|
@@ -29,14 +29,15 @@ from .arcsin import DataFrameArcsin
|
|
|
29
29
|
from .arcsinh import DataFrameArcsinh
|
|
30
30
|
from .arctan import DataFrameArctan
|
|
31
31
|
from .arctanh import DataFrameArctanh
|
|
32
|
-
from .
|
|
32
|
+
from .between import between
|
|
33
33
|
from .bitwise_and import DataFrameAnd, bitand, rbitand
|
|
34
|
-
from .bitwise_or import DataFrameOr, bitor, rbitor
|
|
34
|
+
from .bitwise_or import DataFrameOr, DataFrameTreeOr, bitor, rbitor
|
|
35
35
|
from .bitwise_xor import DataFrameXor, bitxor, rbitxor
|
|
36
36
|
from .ceil import DataFrameCeil
|
|
37
37
|
from .cos import DataFrameCos
|
|
38
38
|
from .cosh import DataFrameCosh
|
|
39
39
|
from .degrees import DataFrameDegrees
|
|
40
|
+
from .dot import DataFrameDot, dot, rdot
|
|
40
41
|
from .equal import DataFrameEqual, eq
|
|
41
42
|
from .exp import DataFrameExp
|
|
42
43
|
from .exp2 import DataFrameExp2
|
|
@@ -52,12 +53,15 @@ from .less_equal import DataFrameLessEqual, le
|
|
|
52
53
|
from .log import DataFrameLog
|
|
53
54
|
from .log2 import DataFrameLog2
|
|
54
55
|
from .log10 import DataFrameLog10
|
|
56
|
+
from .maximum import DataFrameMaximum
|
|
57
|
+
from .minimum import DataFrameMinimum
|
|
55
58
|
from .mod import DataFrameMod, mod, rmod
|
|
56
59
|
from .multiply import DataFrameMul, mul, rmul
|
|
57
60
|
from .negative import DataFrameNegative, negative
|
|
58
61
|
from .not_equal import DataFrameNotEqual, ne
|
|
59
62
|
from .power import DataFramePower, power, rpower
|
|
60
63
|
from .radians import DataFrameRadians
|
|
64
|
+
from .round import DataFrameRound, round
|
|
61
65
|
from .sin import DataFrameSin
|
|
62
66
|
from .sinh import DataFrameSinh
|
|
63
67
|
from .sqrt import DataFrameSqrt
|
|
@@ -220,7 +224,7 @@ def _install():
|
|
|
220
224
|
DataFrameDegrees,
|
|
221
225
|
DataFrameCeil,
|
|
222
226
|
DataFrameFloor,
|
|
223
|
-
|
|
227
|
+
DataFrameRound,
|
|
224
228
|
DataFrameExp,
|
|
225
229
|
DataFrameExp2,
|
|
226
230
|
DataFrameExpm1,
|
|
@@ -248,6 +252,8 @@ def _install():
|
|
|
248
252
|
DataFramePower,
|
|
249
253
|
DataFrameSubtract,
|
|
250
254
|
DataFrameTrueDiv,
|
|
255
|
+
DataFrameMaximum,
|
|
256
|
+
DataFrameMinimum,
|
|
251
257
|
]
|
|
252
258
|
for ufunc_op in ufunc_ops:
|
|
253
259
|
register_tensor_ufunc(ufunc_op)
|
|
@@ -255,7 +261,8 @@ def _install():
|
|
|
255
261
|
for entity in DATAFRAME_TYPE + SERIES_TYPE:
|
|
256
262
|
setattr(entity, "__abs__", abs_)
|
|
257
263
|
setattr(entity, "abs", abs_)
|
|
258
|
-
_register_method(entity, "
|
|
264
|
+
_register_method(entity, "around", round)
|
|
265
|
+
_register_method(entity, "round", round)
|
|
259
266
|
setattr(entity, "__invert__", invert)
|
|
260
267
|
|
|
261
268
|
setattr(entity, "__add__", wrap_notimplemented_exception(add))
|
|
@@ -310,6 +317,10 @@ def _install():
|
|
|
310
317
|
_register_bin_method(entity, "ge", ge)
|
|
311
318
|
_register_bin_method(entity, "le", le)
|
|
312
319
|
|
|
320
|
+
setattr(entity, "__matmul__", dot)
|
|
321
|
+
setattr(entity, "__rmatmul__", rdot)
|
|
322
|
+
_register_method(entity, "dot", dot)
|
|
323
|
+
|
|
313
324
|
setattr(entity, "__and__", wrap_notimplemented_exception(bitand))
|
|
314
325
|
setattr(entity, "__rand__", wrap_notimplemented_exception(rbitand))
|
|
315
326
|
|
|
@@ -321,6 +332,9 @@ def _install():
|
|
|
321
332
|
|
|
322
333
|
setattr(entity, "__neg__", wrap_notimplemented_exception(negative))
|
|
323
334
|
|
|
335
|
+
for entity in SERIES_TYPE:
|
|
336
|
+
setattr(entity, "between", between)
|
|
337
|
+
|
|
324
338
|
for entity in INDEX_TYPE:
|
|
325
339
|
setattr(entity, "__eq__", _wrap_eq())
|
|
326
340
|
|
|
@@ -0,0 +1,106 @@
|
|
|
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
|
+
|
|
16
|
+
def between(series, left, right, inclusive="both"):
|
|
17
|
+
"""
|
|
18
|
+
Return boolean Series equivalent to left <= series <= right.
|
|
19
|
+
This function returns a boolean vector containing `True` wherever the
|
|
20
|
+
corresponding Series element is between the boundary values `left` and
|
|
21
|
+
`right`. NA values are treated as `False`.
|
|
22
|
+
|
|
23
|
+
Parameters
|
|
24
|
+
----------
|
|
25
|
+
left : scalar or list-like
|
|
26
|
+
Left boundary.
|
|
27
|
+
right : scalar or list-like
|
|
28
|
+
Right boundary.
|
|
29
|
+
inclusive : {"both", "neither", "left", "right"}
|
|
30
|
+
Include boundaries. Whether to set each bound as closed or open.
|
|
31
|
+
|
|
32
|
+
Returns
|
|
33
|
+
-------
|
|
34
|
+
Series
|
|
35
|
+
Series representing whether each element is between left and
|
|
36
|
+
right (inclusive).
|
|
37
|
+
|
|
38
|
+
See Also
|
|
39
|
+
--------
|
|
40
|
+
Series.gt : Greater than of series and other.
|
|
41
|
+
Series.lt : Less than of series and other.
|
|
42
|
+
|
|
43
|
+
Notes
|
|
44
|
+
-----
|
|
45
|
+
This function is equivalent to ``(left <= ser) & (ser <= right)``
|
|
46
|
+
|
|
47
|
+
Examples
|
|
48
|
+
--------
|
|
49
|
+
>>> import maxframe.dataframe as md
|
|
50
|
+
>>> s = md.Series([2, 0, 4, 8, np.nan])
|
|
51
|
+
|
|
52
|
+
Boundary values are included by default:
|
|
53
|
+
|
|
54
|
+
>>> s.between(1, 4).execute()
|
|
55
|
+
0 True
|
|
56
|
+
1 False
|
|
57
|
+
2 True
|
|
58
|
+
3 False
|
|
59
|
+
4 False
|
|
60
|
+
dtype: bool
|
|
61
|
+
|
|
62
|
+
With `inclusive` set to ``"neither"`` boundary values are excluded:
|
|
63
|
+
|
|
64
|
+
>>> s.between(1, 4, inclusive="neither").execute()
|
|
65
|
+
0 True
|
|
66
|
+
1 False
|
|
67
|
+
2 False
|
|
68
|
+
3 False
|
|
69
|
+
4 False
|
|
70
|
+
dtype: bool
|
|
71
|
+
|
|
72
|
+
`left` and `right` can be any scalar value:
|
|
73
|
+
|
|
74
|
+
>>> s = md.Series(['Alice', 'Bob', 'Carol', 'Eve'])
|
|
75
|
+
>>> s.between('Anna', 'Daniel').execute()
|
|
76
|
+
0 False
|
|
77
|
+
1 True
|
|
78
|
+
2 True
|
|
79
|
+
3 False
|
|
80
|
+
dtype: bool
|
|
81
|
+
"""
|
|
82
|
+
if isinstance(inclusive, bool): # pragma: no cover
|
|
83
|
+
# for pandas < 1.3.0
|
|
84
|
+
if inclusive:
|
|
85
|
+
inclusive = "both"
|
|
86
|
+
else:
|
|
87
|
+
inclusive = "neither"
|
|
88
|
+
if inclusive == "both":
|
|
89
|
+
lmask = series >= left
|
|
90
|
+
rmask = series <= right
|
|
91
|
+
elif inclusive == "left":
|
|
92
|
+
lmask = series >= left
|
|
93
|
+
rmask = series < right
|
|
94
|
+
elif inclusive == "right":
|
|
95
|
+
lmask = series > left
|
|
96
|
+
rmask = series <= right
|
|
97
|
+
elif inclusive == "neither":
|
|
98
|
+
lmask = series > left
|
|
99
|
+
rmask = series < right
|
|
100
|
+
else:
|
|
101
|
+
raise ValueError(
|
|
102
|
+
"Inclusive has to be either string of 'both',"
|
|
103
|
+
"'left', 'right', or 'neither'."
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
return lmask & rmask
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# Copyright 1999-2025 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from typing import List
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
import pandas as pd
|
|
19
|
+
|
|
20
|
+
from ... import opcodes
|
|
21
|
+
from ...core import EntityData
|
|
22
|
+
from ...serialization.serializables import AnyField, KeyField
|
|
23
|
+
from ...tensor import tensor as astensor
|
|
24
|
+
from ...tensor.core import TENSOR_TYPE
|
|
25
|
+
from ..core import DATAFRAME_TYPE, SERIES_TYPE
|
|
26
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
27
|
+
from ..utils import parse_index
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class DataFrameDot(DataFrameOperator, DataFrameOperatorMixin):
|
|
31
|
+
_op_type_ = opcodes.DOT
|
|
32
|
+
|
|
33
|
+
lhs = KeyField("lhs")
|
|
34
|
+
rhs = AnyField("rhs")
|
|
35
|
+
|
|
36
|
+
def __init__(self, output_types=None, **kw):
|
|
37
|
+
super().__init__(_output_types=output_types, **kw)
|
|
38
|
+
|
|
39
|
+
@classmethod
|
|
40
|
+
def _set_inputs(cls, op: "DataFrameDot", inputs: List[EntityData]):
|
|
41
|
+
super()._set_inputs(op, inputs)
|
|
42
|
+
op.lhs, op.rhs = op._inputs[:2]
|
|
43
|
+
|
|
44
|
+
def __call__(self, lhs, rhs):
|
|
45
|
+
lhs = self._process_input(lhs)
|
|
46
|
+
rhs = self._process_input(rhs)
|
|
47
|
+
if not isinstance(rhs, (DATAFRAME_TYPE, SERIES_TYPE)):
|
|
48
|
+
rhs = astensor(rhs)
|
|
49
|
+
test_rhs = rhs
|
|
50
|
+
else:
|
|
51
|
+
test_rhs = rhs.to_tensor()
|
|
52
|
+
|
|
53
|
+
test_ret = lhs.to_tensor().dot(test_rhs)
|
|
54
|
+
if test_ret.ndim == 0:
|
|
55
|
+
if isinstance(lhs, SERIES_TYPE) and isinstance(rhs, TENSOR_TYPE):
|
|
56
|
+
# return tensor
|
|
57
|
+
return test_ret
|
|
58
|
+
return self.new_scalar([lhs, rhs], dtype=test_ret.dtype)
|
|
59
|
+
elif test_ret.ndim == 1:
|
|
60
|
+
if lhs.ndim == 1:
|
|
61
|
+
if hasattr(rhs, "columns_value"):
|
|
62
|
+
index_value = rhs.columns_value
|
|
63
|
+
else:
|
|
64
|
+
# tensor
|
|
65
|
+
length = -1 if np.isnan(rhs.shape[1]) else rhs.shape[1]
|
|
66
|
+
pd_index = pd.RangeIndex(length)
|
|
67
|
+
index_value = parse_index(pd_index, store_data=True)
|
|
68
|
+
else:
|
|
69
|
+
assert rhs.ndim == 1
|
|
70
|
+
index_value = lhs.index_value
|
|
71
|
+
return self.new_series(
|
|
72
|
+
[lhs, rhs],
|
|
73
|
+
shape=test_ret.shape,
|
|
74
|
+
dtype=test_ret.dtype,
|
|
75
|
+
index_value=index_value,
|
|
76
|
+
)
|
|
77
|
+
else:
|
|
78
|
+
if isinstance(rhs, TENSOR_TYPE):
|
|
79
|
+
dtypes = pd.Series(
|
|
80
|
+
np.repeat(test_ret.dtype, test_ret.shape[1]),
|
|
81
|
+
index=pd.RangeIndex(test_ret.shape[1]),
|
|
82
|
+
)
|
|
83
|
+
columns_value = parse_index(dtypes.index, store_data=True)
|
|
84
|
+
else:
|
|
85
|
+
dtypes = pd.Series(
|
|
86
|
+
np.repeat(test_ret.dtype, test_ret.shape[1]),
|
|
87
|
+
index=rhs.columns_value.to_pandas(),
|
|
88
|
+
)
|
|
89
|
+
columns_value = rhs.columns_value
|
|
90
|
+
return self.new_dataframe(
|
|
91
|
+
[lhs, rhs],
|
|
92
|
+
shape=test_ret.shape,
|
|
93
|
+
index_value=lhs.index_value,
|
|
94
|
+
columns_value=columns_value,
|
|
95
|
+
dtypes=dtypes,
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def dot(df_or_series, other):
|
|
100
|
+
op = DataFrameDot(lhs=df_or_series, rhs=other)
|
|
101
|
+
return op(df_or_series, other)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def rdot(df_or_series, other):
|
|
105
|
+
op = DataFrameDot(lhs=other, rhs=df_or_series)
|
|
106
|
+
return op(other, df_or_series)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
dot.__frame_doc__ = """
|
|
110
|
+
Compute the matrix multiplication between the DataFrame and other.
|
|
111
|
+
|
|
112
|
+
This method computes the matrix product between the DataFrame and the
|
|
113
|
+
values of an other Series, DataFrame or a numpy array.
|
|
114
|
+
|
|
115
|
+
It can also be called using ``self @ other`` in Python >= 3.5.
|
|
116
|
+
|
|
117
|
+
Parameters
|
|
118
|
+
----------
|
|
119
|
+
other : Series, DataFrame or array-like
|
|
120
|
+
The other object to compute the matrix product with.
|
|
121
|
+
|
|
122
|
+
Returns
|
|
123
|
+
-------
|
|
124
|
+
Series or DataFrame
|
|
125
|
+
If other is a Series, return the matrix product between self and
|
|
126
|
+
other as a Series. If other is a DataFrame or a numpy.array, return
|
|
127
|
+
the matrix product of self and other in a DataFrame of a np.array.
|
|
128
|
+
|
|
129
|
+
See Also
|
|
130
|
+
--------
|
|
131
|
+
Series.dot: Similar method for Series.
|
|
132
|
+
|
|
133
|
+
Notes
|
|
134
|
+
-----
|
|
135
|
+
The dimensions of DataFrame and other must be compatible in order to
|
|
136
|
+
compute the matrix multiplication. In addition, the column names of
|
|
137
|
+
DataFrame and the index of other must contain the same values, as they
|
|
138
|
+
will be aligned prior to the multiplication.
|
|
139
|
+
|
|
140
|
+
The dot method for Series computes the inner product, instead of the
|
|
141
|
+
matrix product here.
|
|
142
|
+
|
|
143
|
+
Examples
|
|
144
|
+
--------
|
|
145
|
+
Here we multiply a DataFrame with a Series.
|
|
146
|
+
|
|
147
|
+
>>> import maxframe.tensor as mt
|
|
148
|
+
>>> import maxframe.dataframe as md
|
|
149
|
+
>>> df = md.DataFrame([[0, 1, -2, -1], [1, 1, 1, 1]])
|
|
150
|
+
>>> s = md.Series([1, 1, 2, 1])
|
|
151
|
+
>>> df.dot(s).execute()
|
|
152
|
+
0 -4
|
|
153
|
+
1 5
|
|
154
|
+
dtype: int64
|
|
155
|
+
|
|
156
|
+
Here we multiply a DataFrame with another DataFrame.
|
|
157
|
+
|
|
158
|
+
>>> other = md.DataFrame([[0, 1], [1, 2], [-1, -1], [2, 0]])
|
|
159
|
+
>>> df.dot(other).execute()
|
|
160
|
+
0 1
|
|
161
|
+
0 1 4
|
|
162
|
+
1 2 2
|
|
163
|
+
|
|
164
|
+
Note that the dot method give the same result as @
|
|
165
|
+
|
|
166
|
+
>>> (df @ other).execute()
|
|
167
|
+
0 1
|
|
168
|
+
0 1 4
|
|
169
|
+
1 2 2
|
|
170
|
+
|
|
171
|
+
The dot method works also if other is an np.array.
|
|
172
|
+
|
|
173
|
+
>>> arr = mt.array([[0, 1], [1, 2], [-1, -1], [2, 0]])
|
|
174
|
+
>>> df.dot(arr).execute()
|
|
175
|
+
0 1
|
|
176
|
+
0 1 4
|
|
177
|
+
1 2 2
|
|
178
|
+
|
|
179
|
+
Note how shuffling of the objects does not change the result.
|
|
180
|
+
|
|
181
|
+
>>> s2 = s.reindex([1, 0, 2, 3])
|
|
182
|
+
>>> df.dot(s2).execute()
|
|
183
|
+
0 -4
|
|
184
|
+
1 5
|
|
185
|
+
dtype: int64
|
|
186
|
+
"""
|
|
187
|
+
dot.__series_doc__ = """
|
|
188
|
+
Compute the dot product between the Series and the columns of other.
|
|
189
|
+
|
|
190
|
+
This method computes the dot product between the Series and another
|
|
191
|
+
one, or the Series and each columns of a DataFrame, or the Series and
|
|
192
|
+
each columns of an array.
|
|
193
|
+
|
|
194
|
+
It can also be called using `self @ other` in Python >= 3.5.
|
|
195
|
+
|
|
196
|
+
Parameters
|
|
197
|
+
----------
|
|
198
|
+
other : Series, DataFrame or array-like
|
|
199
|
+
The other object to compute the dot product with its columns.
|
|
200
|
+
|
|
201
|
+
Returns
|
|
202
|
+
-------
|
|
203
|
+
scalar, Series or numpy.ndarray
|
|
204
|
+
Return the dot product of the Series and other if other is a
|
|
205
|
+
Series, the Series of the dot product of Series and each rows of
|
|
206
|
+
other if other is a DataFrame or a numpy.ndarray between the Series
|
|
207
|
+
and each columns of the numpy array.
|
|
208
|
+
|
|
209
|
+
See Also
|
|
210
|
+
--------
|
|
211
|
+
DataFrame.dot: Compute the matrix product with the DataFrame.
|
|
212
|
+
Series.mul: Multiplication of series and other, element-wise.
|
|
213
|
+
|
|
214
|
+
Notes
|
|
215
|
+
-----
|
|
216
|
+
The Series and other has to share the same index if other is a Series
|
|
217
|
+
or a DataFrame.
|
|
218
|
+
|
|
219
|
+
Examples
|
|
220
|
+
--------
|
|
221
|
+
>>> import maxframe.tensor as mt
|
|
222
|
+
>>> import maxframe.dataframe as md
|
|
223
|
+
>>> s = md.Series([0, 1, 2, 3])
|
|
224
|
+
>>> other = md.Series([-1, 2, -3, 4])
|
|
225
|
+
>>> s.dot(other).execute()
|
|
226
|
+
8
|
|
227
|
+
>>> (s @ other).execute()
|
|
228
|
+
8
|
|
229
|
+
>>> df = md.DataFrame([[0, 1], [-2, 3], [4, -5], [6, 7]])
|
|
230
|
+
>>> s.dot(df).execute()
|
|
231
|
+
0 24
|
|
232
|
+
1 14
|
|
233
|
+
dtype: int64
|
|
234
|
+
>>> arr = mt.array([[0, 1], [-2, 3], [4, -5], [6, 7]])
|
|
235
|
+
>>> s.dot(arr).execute()
|
|
236
|
+
array([24, 14])
|
|
237
|
+
"""
|
|
@@ -0,0 +1,33 @@
|
|
|
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 numpy as np
|
|
16
|
+
|
|
17
|
+
from ... import opcodes
|
|
18
|
+
from ...utils import classproperty
|
|
19
|
+
from .core import DataFrameBinopUfunc
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class DataFrameMaximum(DataFrameBinopUfunc):
|
|
23
|
+
_op_type_ = opcodes.MAXIMUM
|
|
24
|
+
|
|
25
|
+
@classproperty
|
|
26
|
+
def _operator(self):
|
|
27
|
+
return np.maximum
|
|
28
|
+
|
|
29
|
+
@classproperty
|
|
30
|
+
def tensor_op_type(self):
|
|
31
|
+
from ...tensor.arithmetic import TensorMaximum
|
|
32
|
+
|
|
33
|
+
return TensorMaximum
|
|
@@ -0,0 +1,33 @@
|
|
|
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 numpy as np
|
|
16
|
+
|
|
17
|
+
from ... import opcodes
|
|
18
|
+
from ...utils import classproperty
|
|
19
|
+
from .core import DataFrameBinopUfunc
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class DataFrameMinimum(DataFrameBinopUfunc):
|
|
23
|
+
_op_type_ = opcodes.MINIMUM
|
|
24
|
+
|
|
25
|
+
@classproperty
|
|
26
|
+
def _operator(self):
|
|
27
|
+
return np.minimum
|
|
28
|
+
|
|
29
|
+
@classproperty
|
|
30
|
+
def tensor_op_type(self):
|
|
31
|
+
from ...tensor.arithmetic import TensorMinimum
|
|
32
|
+
|
|
33
|
+
return TensorMinimum
|
|
@@ -18,9 +18,10 @@ from ...utils import classproperty
|
|
|
18
18
|
from .core import DataFrameUnaryUfunc
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
class
|
|
21
|
+
class DataFrameRound(DataFrameUnaryUfunc):
|
|
22
22
|
_op_type_ = opcodes.AROUND
|
|
23
|
-
_func_name = "
|
|
23
|
+
_func_name = "round"
|
|
24
|
+
_legacy_name = "DataFrameAround" # since v2.3.0
|
|
24
25
|
|
|
25
26
|
decimals = Int32Field("decimals", default=None)
|
|
26
27
|
|
|
@@ -34,17 +35,20 @@ class DataFrameAround(DataFrameUnaryUfunc):
|
|
|
34
35
|
return TensorAround
|
|
35
36
|
|
|
36
37
|
|
|
37
|
-
def
|
|
38
|
+
def round(df, decimals=0, *args, **kwargs):
|
|
38
39
|
if len(args) > 0:
|
|
39
40
|
raise TypeError(
|
|
40
41
|
f"round() takes 0 positional arguments but {len(args)} was given"
|
|
41
42
|
)
|
|
42
|
-
op =
|
|
43
|
+
op = DataFrameRound(decimals=decimals, **kwargs)
|
|
43
44
|
return op(df)
|
|
44
45
|
|
|
45
46
|
|
|
46
|
-
#
|
|
47
|
-
|
|
47
|
+
# keep for import compatibility
|
|
48
|
+
DataFrameAround = DataFrameRound
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
round.__frame_doc__ = """
|
|
48
52
|
Round a DataFrame to a variable number of decimal places.
|
|
49
53
|
|
|
50
54
|
Parameters
|
|
@@ -108,7 +112,7 @@ places as value
|
|
|
108
112
|
2 0.7 0.0
|
|
109
113
|
3 0.2 0.0
|
|
110
114
|
"""
|
|
111
|
-
|
|
115
|
+
round.__series_doc__ = """
|
|
112
116
|
Round each value in a Series to the given number of decimals.
|
|
113
117
|
|
|
114
118
|
Parameters
|