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,190 @@
|
|
|
1
|
+
# Copyright 1999-2025 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from typing import List
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
|
|
19
|
+
from ... import opcodes
|
|
20
|
+
from ...core import ExecutableTuple
|
|
21
|
+
from ...lib.sparse.core import get_array_module
|
|
22
|
+
from ...serialization.serializables import AnyField, Int32Field
|
|
23
|
+
from ...typing_ import EntityType
|
|
24
|
+
from ..core import Tensor
|
|
25
|
+
from ..datasource import tensor as astensor
|
|
26
|
+
from ..operators import TensorHasInput, TensorOperatorMixin
|
|
27
|
+
from ..utils import calc_sliced_size
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class TensorSplit(TensorHasInput, TensorOperatorMixin):
|
|
31
|
+
_op_type_ = opcodes.ARRAY_SPLIT
|
|
32
|
+
|
|
33
|
+
indices_or_sections = AnyField("indices_or_sections", default=None)
|
|
34
|
+
axis = Int32Field("axis", default=None)
|
|
35
|
+
|
|
36
|
+
@property
|
|
37
|
+
def output_limit(self):
|
|
38
|
+
return float("inf")
|
|
39
|
+
|
|
40
|
+
@classmethod
|
|
41
|
+
def _set_inputs(cls, op: "TensorSplit", inputs: List[EntityType]):
|
|
42
|
+
super()._set_inputs(op, inputs)
|
|
43
|
+
if len(inputs) > 1:
|
|
44
|
+
op.indices_or_sections = inputs[1]
|
|
45
|
+
|
|
46
|
+
def __call__(self, a, indices_or_sections, is_split=False):
|
|
47
|
+
axis = self.axis
|
|
48
|
+
size = a.shape[axis]
|
|
49
|
+
if np.isnan(size):
|
|
50
|
+
raise ValueError(
|
|
51
|
+
"cannot split array with unknown shape, "
|
|
52
|
+
"call `.execute()` on input tensor first"
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
if (
|
|
56
|
+
isinstance(indices_or_sections, Tensor)
|
|
57
|
+
and hasattr(indices_or_sections.op, "data")
|
|
58
|
+
and indices_or_sections.op.data is not None
|
|
59
|
+
):
|
|
60
|
+
indices_or_sections = indices_or_sections.op.data
|
|
61
|
+
|
|
62
|
+
try:
|
|
63
|
+
indices_or_sections = int(indices_or_sections)
|
|
64
|
+
if is_split:
|
|
65
|
+
if size % indices_or_sections:
|
|
66
|
+
raise ValueError(
|
|
67
|
+
"tensor split does not result in an equal division"
|
|
68
|
+
)
|
|
69
|
+
nparts = indices_or_sections
|
|
70
|
+
nsplit = (size // indices_or_sections,) * nparts
|
|
71
|
+
else:
|
|
72
|
+
nparts = indices_or_sections
|
|
73
|
+
if size % indices_or_sections == 0:
|
|
74
|
+
nsplit = (size // indices_or_sections,) * nparts
|
|
75
|
+
else:
|
|
76
|
+
nsplit = (size // indices_or_sections + 1,) * (
|
|
77
|
+
size % indices_or_sections
|
|
78
|
+
) + (size // indices_or_sections,) * (
|
|
79
|
+
size - size % indices_or_sections
|
|
80
|
+
)
|
|
81
|
+
except TypeError:
|
|
82
|
+
if isinstance(indices_or_sections, Tensor):
|
|
83
|
+
nparts = indices_or_sections.shape[0] + 1
|
|
84
|
+
nsplit = (np.nan,) * nparts
|
|
85
|
+
else:
|
|
86
|
+
ind = indices_or_sections = get_array_module(
|
|
87
|
+
indices_or_sections
|
|
88
|
+
).asarray(indices_or_sections)
|
|
89
|
+
if indices_or_sections.ndim != 1 or not np.issubdtype(
|
|
90
|
+
indices_or_sections.dtype, np.integer
|
|
91
|
+
):
|
|
92
|
+
raise TypeError("slice indices must be integers or None")
|
|
93
|
+
nparts = indices_or_sections.shape[0] + 1
|
|
94
|
+
get = lambda i: None if i < 0 or i >= len(ind) else ind[i]
|
|
95
|
+
nsplit = [
|
|
96
|
+
calc_sliced_size(size, slice(get(j - 1), get(j)))
|
|
97
|
+
for j in range(nparts)
|
|
98
|
+
]
|
|
99
|
+
|
|
100
|
+
inputs = [a]
|
|
101
|
+
if isinstance(indices_or_sections, Tensor):
|
|
102
|
+
inputs.append(indices_or_sections)
|
|
103
|
+
else:
|
|
104
|
+
self.indices_or_sections = indices_or_sections
|
|
105
|
+
|
|
106
|
+
kws = [
|
|
107
|
+
{
|
|
108
|
+
"i": i,
|
|
109
|
+
"shape": a.shape[:axis] + (nsplit[i],) + a.shape[axis + 1 :],
|
|
110
|
+
"order": a.order,
|
|
111
|
+
}
|
|
112
|
+
for i in range(nparts)
|
|
113
|
+
]
|
|
114
|
+
return ExecutableTuple(self.new_tensors(inputs, kws=kws, output_limit=nparts))
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def _split(a, indices_or_sections, axis=0, is_split=False):
|
|
118
|
+
op = TensorSplit(axis=axis, dtype=a.dtype)
|
|
119
|
+
return op(a, indices_or_sections, is_split=is_split)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def split(ary, indices_or_sections, axis=0):
|
|
123
|
+
"""
|
|
124
|
+
Split a tensor into multiple sub-tensors.
|
|
125
|
+
|
|
126
|
+
Parameters
|
|
127
|
+
----------
|
|
128
|
+
ary : Tensor
|
|
129
|
+
Tensor to be divided into sub-tensors.
|
|
130
|
+
indices_or_sections : int or 1-D tensor
|
|
131
|
+
If `indices_or_sections` is an integer, N, the array will be divided
|
|
132
|
+
into N equal tensors along `axis`. If such a split is not possible,
|
|
133
|
+
an error is raised.
|
|
134
|
+
|
|
135
|
+
If `indices_or_sections` is a 1-D tensor of sorted integers, the entries
|
|
136
|
+
indicate where along `axis` the array is split. For example,
|
|
137
|
+
``[2, 3]`` would, for ``axis=0``, result in
|
|
138
|
+
|
|
139
|
+
- ary[:2]
|
|
140
|
+
- ary[2:3]
|
|
141
|
+
- ary[3:]
|
|
142
|
+
|
|
143
|
+
If an index exceeds the dimension of the tensor along `axis`,
|
|
144
|
+
an empty sub-tensor is returned correspondingly.
|
|
145
|
+
axis : int, optional
|
|
146
|
+
The axis along which to split, default is 0.
|
|
147
|
+
|
|
148
|
+
Returns
|
|
149
|
+
-------
|
|
150
|
+
sub-tensors : list of Tensors
|
|
151
|
+
A list of sub-tensors.
|
|
152
|
+
|
|
153
|
+
Raises
|
|
154
|
+
------
|
|
155
|
+
ValueError
|
|
156
|
+
If `indices_or_sections` is given as an integer, but
|
|
157
|
+
a split does not result in equal division.
|
|
158
|
+
|
|
159
|
+
See Also
|
|
160
|
+
--------
|
|
161
|
+
array_split : Split a tensor into multiple sub-tensors of equal or
|
|
162
|
+
near-equal size. Does not raise an exception if
|
|
163
|
+
an equal division cannot be made.
|
|
164
|
+
hsplit : Split into multiple sub-arrays horizontally (column-wise).
|
|
165
|
+
vsplit : Split tensor into multiple sub-tensors vertically (row wise).
|
|
166
|
+
dsplit : Split tensor into multiple sub-tensors along the 3rd axis (depth).
|
|
167
|
+
concatenate : Join a sequence of tensors along an existing axis.
|
|
168
|
+
stack : Join a sequence of tensors along a new axis.
|
|
169
|
+
hstack : Stack tensors in sequence horizontally (column wise).
|
|
170
|
+
vstack : Stack tensors in sequence vertically (row wise).
|
|
171
|
+
dstack : Stack tensors in sequence depth wise (along third dimension).
|
|
172
|
+
|
|
173
|
+
Examples
|
|
174
|
+
--------
|
|
175
|
+
>>> import maxframe.tensor as mt
|
|
176
|
+
|
|
177
|
+
>>> x = mt.arange(9.0)
|
|
178
|
+
>>> mt.split(x, 3).execute()
|
|
179
|
+
[array([ 0., 1., 2.]), array([ 3., 4., 5.]), array([ 6., 7., 8.])]
|
|
180
|
+
|
|
181
|
+
>>> x = mt.arange(8.0)
|
|
182
|
+
>>> mt.split(x, [3, 5, 6, 10]).execute()
|
|
183
|
+
[array([ 0., 1., 2.]),
|
|
184
|
+
array([ 3., 4.]),
|
|
185
|
+
array([ 5.]),
|
|
186
|
+
array([ 6., 7.]),
|
|
187
|
+
array([], dtype=float64)]
|
|
188
|
+
|
|
189
|
+
"""
|
|
190
|
+
return _split(astensor(ary), indices_or_sections, axis=axis, is_split=True)
|
|
@@ -0,0 +1,109 @@
|
|
|
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
|
+
|
|
18
|
+
def tile(A, reps):
|
|
19
|
+
"""
|
|
20
|
+
Construct a tensor by repeating A the number of times given by reps.
|
|
21
|
+
|
|
22
|
+
If `reps` has length ``d``, the result will have dimension of
|
|
23
|
+
``max(d, A.ndim)``.
|
|
24
|
+
|
|
25
|
+
If ``A.ndim < d``, `A` is promoted to be d-dimensional by prepending new
|
|
26
|
+
axes. So a shape (3,) array is promoted to (1, 3) for 2-D replication,
|
|
27
|
+
or shape (1, 1, 3) for 3-D replication. If this is not the desired
|
|
28
|
+
behavior, promote `A` to d-dimensions manually before calling this
|
|
29
|
+
function.
|
|
30
|
+
|
|
31
|
+
If ``A.ndim > d``, `reps` is promoted to `A`.ndim by prepending 1's to it.
|
|
32
|
+
Thus for an `A` of shape (2, 3, 4, 5), a `reps` of (2, 2) is treated as
|
|
33
|
+
(1, 1, 2, 2).
|
|
34
|
+
|
|
35
|
+
Note : Although tile may be used for broadcasting, it is strongly
|
|
36
|
+
recommended to use MaxFrame's broadcasting operations and functions.
|
|
37
|
+
|
|
38
|
+
Parameters
|
|
39
|
+
----------
|
|
40
|
+
A : array_like
|
|
41
|
+
The input tensor.
|
|
42
|
+
reps : array_like
|
|
43
|
+
The number of repetitions of `A` along each axis.
|
|
44
|
+
|
|
45
|
+
Returns
|
|
46
|
+
-------
|
|
47
|
+
c : Tensor
|
|
48
|
+
The tiled output tensor.
|
|
49
|
+
|
|
50
|
+
See Also
|
|
51
|
+
--------
|
|
52
|
+
repeat : Repeat elements of a tensor.
|
|
53
|
+
broadcast_to : Broadcast a tensor to a new shape
|
|
54
|
+
|
|
55
|
+
Examples
|
|
56
|
+
--------
|
|
57
|
+
>>> import maxframe.tensor as mt
|
|
58
|
+
|
|
59
|
+
>>> a = mt.array([0, 1, 2])
|
|
60
|
+
>>> mt.tile(a, 2).execute()
|
|
61
|
+
array([0, 1, 2, 0, 1, 2])
|
|
62
|
+
>>> mt.tile(a, (2, 2)).execute()
|
|
63
|
+
array([[0, 1, 2, 0, 1, 2],
|
|
64
|
+
[0, 1, 2, 0, 1, 2]])
|
|
65
|
+
>>> mt.tile(a, (2, 1, 2)).execute()
|
|
66
|
+
array([[[0, 1, 2, 0, 1, 2]],
|
|
67
|
+
[[0, 1, 2, 0, 1, 2]]])
|
|
68
|
+
|
|
69
|
+
>>> b = mt.array([[1, 2], [3, 4]])
|
|
70
|
+
>>> mt.tile(b, 2).execute()
|
|
71
|
+
array([[1, 2, 1, 2],
|
|
72
|
+
[3, 4, 3, 4]])
|
|
73
|
+
>>> mt.tile(b, (2, 1)).execute()
|
|
74
|
+
array([[1, 2],
|
|
75
|
+
[3, 4],
|
|
76
|
+
[1, 2],
|
|
77
|
+
[3, 4]])
|
|
78
|
+
|
|
79
|
+
>>> c = mt.array([1,2,3,4])
|
|
80
|
+
>>> mt.tile(c,(4,1)).execute()
|
|
81
|
+
array([[1, 2, 3, 4],
|
|
82
|
+
[1, 2, 3, 4],
|
|
83
|
+
[1, 2, 3, 4],
|
|
84
|
+
[1, 2, 3, 4]])
|
|
85
|
+
"""
|
|
86
|
+
from ..merge import concatenate
|
|
87
|
+
|
|
88
|
+
try:
|
|
89
|
+
tup = tuple(reps)
|
|
90
|
+
except TypeError:
|
|
91
|
+
tup = (reps,)
|
|
92
|
+
|
|
93
|
+
d = len(tup)
|
|
94
|
+
if A.ndim < d:
|
|
95
|
+
A = A[tuple(np.newaxis for _ in range(d - A.ndim))]
|
|
96
|
+
elif A.ndim > d:
|
|
97
|
+
tup = (1,) * (A.ndim - d) + tup
|
|
98
|
+
|
|
99
|
+
a = A
|
|
100
|
+
for axis, rep in enumerate(tup):
|
|
101
|
+
if rep == 0:
|
|
102
|
+
slc = (slice(None),) * axis + (slice(0),)
|
|
103
|
+
a = a[slc]
|
|
104
|
+
elif rep < 0:
|
|
105
|
+
raise ValueError("negative dimensions are not allowed")
|
|
106
|
+
elif rep > 1:
|
|
107
|
+
a = concatenate([a] * rep, axis=axis)
|
|
108
|
+
|
|
109
|
+
return a
|
|
@@ -0,0 +1,74 @@
|
|
|
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 .split import split
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def vsplit(a, indices_or_sections):
|
|
19
|
+
"""
|
|
20
|
+
Split a tensor into multiple sub-tensors vertically (row-wise).
|
|
21
|
+
|
|
22
|
+
Please refer to the ``split`` documentation. ``vsplit`` is equivalent
|
|
23
|
+
to ``split`` with `axis=0` (default), the tensor is always split along the
|
|
24
|
+
first axis regardless of the tensor dimension.
|
|
25
|
+
|
|
26
|
+
See Also
|
|
27
|
+
--------
|
|
28
|
+
split : Split a tensor into multiple sub-tensors of equal size.
|
|
29
|
+
|
|
30
|
+
Examples
|
|
31
|
+
--------
|
|
32
|
+
>>> import maxframe.tensor as mt
|
|
33
|
+
|
|
34
|
+
>>> x = mt.arange(16.0).reshape(4, 4)
|
|
35
|
+
>>> x.execute()
|
|
36
|
+
array([[ 0., 1., 2., 3.],
|
|
37
|
+
[ 4., 5., 6., 7.],
|
|
38
|
+
[ 8., 9., 10., 11.],
|
|
39
|
+
[ 12., 13., 14., 15.]])
|
|
40
|
+
>>> mt.vsplit(x, 2).execute()
|
|
41
|
+
[array([[ 0., 1., 2., 3.],
|
|
42
|
+
[ 4., 5., 6., 7.]]),
|
|
43
|
+
array([[ 8., 9., 10., 11.],
|
|
44
|
+
[ 12., 13., 14., 15.]])]
|
|
45
|
+
>>> mt.vsplit(x, mt.array([3, 6])).execute()
|
|
46
|
+
[array([[ 0., 1., 2., 3.],
|
|
47
|
+
[ 4., 5., 6., 7.],
|
|
48
|
+
[ 8., 9., 10., 11.]]),
|
|
49
|
+
array([[ 12., 13., 14., 15.]]),
|
|
50
|
+
array([], dtype=float64)]
|
|
51
|
+
|
|
52
|
+
With a higher dimensional tensor the split is still along the first axis.
|
|
53
|
+
|
|
54
|
+
>>> x = mt.arange(8.0).reshape(2, 2, 2)
|
|
55
|
+
>>> x.execute()
|
|
56
|
+
array([[[ 0., 1.],
|
|
57
|
+
[ 2., 3.]],
|
|
58
|
+
[[ 4., 5.],
|
|
59
|
+
[ 6., 7.]]])
|
|
60
|
+
>>> mt.vsplit(x, 2).execute()
|
|
61
|
+
[array([[[ 0., 1.],
|
|
62
|
+
[ 2., 3.]]]),
|
|
63
|
+
array([[[ 4., 5.],
|
|
64
|
+
[ 6., 7.]]])]
|
|
65
|
+
|
|
66
|
+
"""
|
|
67
|
+
from ..datasource import tensor as astensor
|
|
68
|
+
|
|
69
|
+
ary = a
|
|
70
|
+
a = astensor(a)
|
|
71
|
+
|
|
72
|
+
if a.ndim < 2:
|
|
73
|
+
raise ValueError("vsplit only works on tensors of 2 or more dimensions")
|
|
74
|
+
return split(ary, indices_or_sections, 0)
|
|
@@ -48,6 +48,7 @@ def array_equal(a1, a2):
|
|
|
48
48
|
False
|
|
49
49
|
|
|
50
50
|
"""
|
|
51
|
+
from ..arithmetic import equal
|
|
51
52
|
from ..datasource import tensor as astensor
|
|
52
53
|
from ..datasource.scalar import scalar
|
|
53
54
|
from .all import all
|
|
@@ -59,4 +60,4 @@ def array_equal(a1, a2):
|
|
|
59
60
|
|
|
60
61
|
if a1.shape != a2.shape:
|
|
61
62
|
return scalar(False)
|
|
62
|
-
return all(astensor(a1
|
|
63
|
+
return all(astensor(equal(a1, a2, magic=True)))
|
maxframe/tensor/sort/__init__.py
CHANGED
|
@@ -0,0 +1,98 @@
|
|
|
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 .partition import TensorPartition, _validate_partition_arguments
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def argpartition(a, kth, axis=-1, kind="introselect", order=None, **kw):
|
|
19
|
+
"""
|
|
20
|
+
Perform an indirect partition along the given axis using the
|
|
21
|
+
algorithm specified by the `kind` keyword. It returns an array of
|
|
22
|
+
indices of the same shape as `a` that index data along the given
|
|
23
|
+
axis in partitioned order.
|
|
24
|
+
|
|
25
|
+
.. versionadded:: 1.8.0
|
|
26
|
+
|
|
27
|
+
Parameters
|
|
28
|
+
----------
|
|
29
|
+
a : array_like
|
|
30
|
+
Tensor to sort.
|
|
31
|
+
kth : int or sequence of ints
|
|
32
|
+
Element index to partition by. The k-th element will be in its
|
|
33
|
+
final sorted position and all smaller elements will be moved
|
|
34
|
+
before it and all larger elements behind it. The order all
|
|
35
|
+
elements in the partitions is undefined. If provided with a
|
|
36
|
+
sequence of k-th it will partition all of them into their sorted
|
|
37
|
+
position at once.
|
|
38
|
+
axis : int or None, optional
|
|
39
|
+
Axis along which to sort. The default is -1 (the last axis). If
|
|
40
|
+
None, the flattened tensor is used.
|
|
41
|
+
kind : {'introselect'}, optional
|
|
42
|
+
Selection algorithm. Default is 'introselect'
|
|
43
|
+
order : str or list of str, optional
|
|
44
|
+
When `a` is a tensor with fields defined, this argument
|
|
45
|
+
specifies which fields to compare first, second, etc. A single
|
|
46
|
+
field can be specified as a string, and not all fields need be
|
|
47
|
+
specified, but unspecified fields will still be used, in the
|
|
48
|
+
order in which they come up in the dtype, to break ties.
|
|
49
|
+
|
|
50
|
+
Returns
|
|
51
|
+
-------
|
|
52
|
+
index_tensor : Tensor, int
|
|
53
|
+
Tensor of indices that partition `a` along the specified axis.
|
|
54
|
+
If `a` is one-dimensional, ``a[index_tensor]`` yields a partitioned `a`.
|
|
55
|
+
More generally, ``np.take_along_axis(a, index_tensor, axis=a)`` always
|
|
56
|
+
yields the partitioned `a`, irrespective of dimensionality.
|
|
57
|
+
|
|
58
|
+
See Also
|
|
59
|
+
--------
|
|
60
|
+
partition : Describes partition algorithms used.
|
|
61
|
+
Tensor.partition : Inplace partition.
|
|
62
|
+
argsort : Full indirect sort
|
|
63
|
+
|
|
64
|
+
Notes
|
|
65
|
+
-----
|
|
66
|
+
See `partition` for notes on the different selection algorithms.
|
|
67
|
+
|
|
68
|
+
Examples
|
|
69
|
+
--------
|
|
70
|
+
One dimensional tensor:
|
|
71
|
+
|
|
72
|
+
>>> import maxframe.tensor as mt
|
|
73
|
+
>>> x = mt.array([3, 4, 2, 1])
|
|
74
|
+
>>> x[mt.argpartition(x, 3)].execute()
|
|
75
|
+
array([2, 1, 3, 4])
|
|
76
|
+
>>> x[mt.argpartition(x, (1, 3))].execute()
|
|
77
|
+
array([1, 2, 3, 4])
|
|
78
|
+
|
|
79
|
+
>>> x = [3, 4, 2, 1]
|
|
80
|
+
>>> mt.array(x)[mt.argpartition(x, 3)].execute()
|
|
81
|
+
array([2, 1, 3, 4])
|
|
82
|
+
|
|
83
|
+
"""
|
|
84
|
+
a, kth, axis, kind, order, need_align = _validate_partition_arguments(
|
|
85
|
+
a, kth, axis, kind, order, kw
|
|
86
|
+
)
|
|
87
|
+
op = TensorPartition(
|
|
88
|
+
kth=kth,
|
|
89
|
+
axis=axis,
|
|
90
|
+
kind=kind,
|
|
91
|
+
order=order,
|
|
92
|
+
need_align=need_align,
|
|
93
|
+
return_value=False,
|
|
94
|
+
return_indices=True,
|
|
95
|
+
dtype=a.dtype,
|
|
96
|
+
gpu=a.op.gpu,
|
|
97
|
+
)
|
|
98
|
+
return op(a, kth)
|