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,360 @@
|
|
|
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 json
|
|
16
|
+
from typing import Any, Dict, List, Optional
|
|
17
|
+
|
|
18
|
+
from .....protocol import JsonSerializable
|
|
19
|
+
from .....serialization.serializables import (
|
|
20
|
+
DictField,
|
|
21
|
+
FieldTypes,
|
|
22
|
+
Int32Field,
|
|
23
|
+
ListField,
|
|
24
|
+
ReferenceField,
|
|
25
|
+
StringField,
|
|
26
|
+
)
|
|
27
|
+
from .core import ResourceNameTemplate, register_model_deployments
|
|
28
|
+
|
|
29
|
+
_ALLOWED_DEVICES = {"cpu", "gpu", "ppu", "tpu", "cuda"}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class DeploymentConfigResourceRequirement(JsonSerializable):
|
|
33
|
+
cpu: int = Int32Field("cpu", default=1)
|
|
34
|
+
memory: int = Int32Field("memory", default=4)
|
|
35
|
+
gu: int = Int32Field("gu", default=0)
|
|
36
|
+
gpu_memory: int = Int32Field("gpu_memory", default=0)
|
|
37
|
+
|
|
38
|
+
def __init__(self, cpu, memory, **kw):
|
|
39
|
+
gu = kw.get("gu")
|
|
40
|
+
gpu_memory = kw.get("gpu_memory")
|
|
41
|
+
if (
|
|
42
|
+
not isinstance(cpu, int)
|
|
43
|
+
or not isinstance(memory, int)
|
|
44
|
+
or (gu and not isinstance(gu, int))
|
|
45
|
+
or (gpu_memory and not isinstance(gpu_memory, int))
|
|
46
|
+
):
|
|
47
|
+
raise TypeError("cpu, memory, gpu and gpu_memory must be int")
|
|
48
|
+
super().__init__(cpu=cpu, memory=memory, gu=gu, gpu_memory=gpu_memory)
|
|
49
|
+
|
|
50
|
+
def to_json(self) -> dict:
|
|
51
|
+
ret = {
|
|
52
|
+
"cpu": self.cpu,
|
|
53
|
+
"memory": self.memory,
|
|
54
|
+
"gu": self.gu,
|
|
55
|
+
"gpu_memory": self.gpu_memory,
|
|
56
|
+
}
|
|
57
|
+
return ret
|
|
58
|
+
|
|
59
|
+
@classmethod
|
|
60
|
+
def from_json(cls, serialized: dict) -> "DeploymentConfigResourceRequirement":
|
|
61
|
+
return cls(
|
|
62
|
+
cpu=serialized.get("cpu", 1),
|
|
63
|
+
memory=serialized.get("memory", 4),
|
|
64
|
+
gu=serialized.get("gu", 0),
|
|
65
|
+
gpu_memory=serialized.get("gpu_memory", 0),
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class DeploymentConfigBase(JsonSerializable):
|
|
70
|
+
model_file: Optional[str] = StringField("model_file", default=None)
|
|
71
|
+
model_file_resources: List[ResourceNameTemplate] = ListField(
|
|
72
|
+
"model_file_resources", field_type=FieldTypes.reference, default_factory=list
|
|
73
|
+
)
|
|
74
|
+
resource_requirements: Optional[
|
|
75
|
+
DeploymentConfigResourceRequirement
|
|
76
|
+
] = ReferenceField(
|
|
77
|
+
"resource_requirements", DeploymentConfigResourceRequirement, default=None
|
|
78
|
+
)
|
|
79
|
+
load_params: Optional[Dict[str, Any]] = DictField(
|
|
80
|
+
"load_params",
|
|
81
|
+
key_type=FieldTypes.string,
|
|
82
|
+
value_type=FieldTypes.any,
|
|
83
|
+
default_factory=dict,
|
|
84
|
+
)
|
|
85
|
+
properties: Dict[str, Any] = DictField(
|
|
86
|
+
"properties",
|
|
87
|
+
key_type=FieldTypes.string,
|
|
88
|
+
value_type=FieldTypes.any,
|
|
89
|
+
default_factory=dict,
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
def __init__(
|
|
93
|
+
self,
|
|
94
|
+
model_file=None,
|
|
95
|
+
model_file_resources=None,
|
|
96
|
+
resource_requirements=None,
|
|
97
|
+
load_params=None,
|
|
98
|
+
properties=None,
|
|
99
|
+
**kw,
|
|
100
|
+
):
|
|
101
|
+
if model_file and not isinstance(model_file, str):
|
|
102
|
+
raise TypeError("model_file must be a string")
|
|
103
|
+
if resource_requirements and not isinstance(
|
|
104
|
+
resource_requirements, DeploymentConfigResourceRequirement
|
|
105
|
+
):
|
|
106
|
+
raise TypeError(
|
|
107
|
+
"resource_requirements must be a DeploymentConfigResourceRequirement"
|
|
108
|
+
)
|
|
109
|
+
if load_params and not isinstance(load_params, dict):
|
|
110
|
+
raise TypeError("load_params must be a dict")
|
|
111
|
+
if properties and not isinstance(properties, dict):
|
|
112
|
+
raise TypeError("properties must be a dict")
|
|
113
|
+
if model_file_resources:
|
|
114
|
+
if not isinstance(model_file_resources, list):
|
|
115
|
+
raise TypeError("model_file_resources must be a list")
|
|
116
|
+
if not all(
|
|
117
|
+
isinstance(res, ResourceNameTemplate) for res in model_file_resources
|
|
118
|
+
):
|
|
119
|
+
raise TypeError(
|
|
120
|
+
"model_file_resources must be a list of ResourceNameTemplate"
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
super().__init__(
|
|
124
|
+
model_file=model_file,
|
|
125
|
+
model_file_resources=model_file_resources,
|
|
126
|
+
load_params=load_params,
|
|
127
|
+
resource_requirements=resource_requirements,
|
|
128
|
+
properties=properties,
|
|
129
|
+
**kw,
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
@classmethod
|
|
133
|
+
def from_json(cls, serialized: dict) -> "DeploymentConfigBase":
|
|
134
|
+
kw = serialized.copy()
|
|
135
|
+
resource_requirements_data = kw.get("resource_requirements")
|
|
136
|
+
return cls(
|
|
137
|
+
model_file=kw.get("model_file"),
|
|
138
|
+
model_file_resources=[
|
|
139
|
+
ResourceNameTemplate.from_json(res)
|
|
140
|
+
for res in kw.get("model_file_resources", [])
|
|
141
|
+
],
|
|
142
|
+
load_params=kw.get("load_params", {}),
|
|
143
|
+
resource_requirements=(
|
|
144
|
+
DeploymentConfigResourceRequirement.from_json(
|
|
145
|
+
resource_requirements_data
|
|
146
|
+
)
|
|
147
|
+
if resource_requirements_data
|
|
148
|
+
else None
|
|
149
|
+
),
|
|
150
|
+
properties=kw.get("properties", {}),
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
def to_json(self) -> dict:
|
|
154
|
+
return {
|
|
155
|
+
"properties": self.properties,
|
|
156
|
+
"load_params": self.load_params,
|
|
157
|
+
"model_file": self.model_file,
|
|
158
|
+
"model_file_resources": [
|
|
159
|
+
res.to_json() for res in self.model_file_resources
|
|
160
|
+
],
|
|
161
|
+
"resource_requirements": (
|
|
162
|
+
self.resource_requirements.to_json()
|
|
163
|
+
if self.resource_requirements
|
|
164
|
+
else None
|
|
165
|
+
),
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
class FrameworkDeploymentConfig(DeploymentConfigBase):
|
|
170
|
+
framework: str = StringField("framework")
|
|
171
|
+
device: str = StringField("device", default="cpu")
|
|
172
|
+
|
|
173
|
+
def __init__(
|
|
174
|
+
self,
|
|
175
|
+
**kw,
|
|
176
|
+
):
|
|
177
|
+
framework = kw.get("framework")
|
|
178
|
+
if not framework:
|
|
179
|
+
raise ValueError("framework is required")
|
|
180
|
+
|
|
181
|
+
device = kw.get("device")
|
|
182
|
+
if not device:
|
|
183
|
+
device = "cpu"
|
|
184
|
+
if device not in _ALLOWED_DEVICES:
|
|
185
|
+
raise ValueError(f"device must be one of {_ALLOWED_DEVICES}")
|
|
186
|
+
|
|
187
|
+
super().__init__(**kw)
|
|
188
|
+
|
|
189
|
+
@classmethod
|
|
190
|
+
def from_json(cls, serialized: dict) -> "FrameworkDeploymentConfig":
|
|
191
|
+
kw = serialized.copy()
|
|
192
|
+
resource_requirements_data = kw.get("resource_requirements")
|
|
193
|
+
return cls(
|
|
194
|
+
model_file=kw.get("model_file"),
|
|
195
|
+
model_file_resources=[
|
|
196
|
+
ResourceNameTemplate.from_json(res)
|
|
197
|
+
for res in kw.get("model_file_resources", [])
|
|
198
|
+
],
|
|
199
|
+
load_params=kw.get("load_params", {}),
|
|
200
|
+
resource_requirements=(
|
|
201
|
+
DeploymentConfigResourceRequirement.from_json(
|
|
202
|
+
resource_requirements_data
|
|
203
|
+
)
|
|
204
|
+
if resource_requirements_data
|
|
205
|
+
else None
|
|
206
|
+
),
|
|
207
|
+
properties=kw.get("properties", {}),
|
|
208
|
+
framework=kw["framework"],
|
|
209
|
+
device=kw.get("device", "cpu"),
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
def to_json(self):
|
|
213
|
+
ret = super().to_json()
|
|
214
|
+
ret["framework"] = self.framework
|
|
215
|
+
ret["device"] = self.device
|
|
216
|
+
return ret
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
class ModelDeploymentConfig(JsonSerializable):
|
|
220
|
+
model_name: str = StringField("model_name")
|
|
221
|
+
common_config: DeploymentConfigBase = ReferenceField(
|
|
222
|
+
"common_config", DeploymentConfigBase, default_factory=DeploymentConfigBase
|
|
223
|
+
)
|
|
224
|
+
deployments: List[FrameworkDeploymentConfig] = ListField(
|
|
225
|
+
"deployments", field_type=FieldTypes.reference, default_factory=list
|
|
226
|
+
)
|
|
227
|
+
tags: List[str] = ListField(
|
|
228
|
+
"tags", field_type=FieldTypes.string, default_factory=list
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
def __init__(self, model_name, deployments, **kwargs):
|
|
232
|
+
if not model_name:
|
|
233
|
+
raise ValueError("model_name is required")
|
|
234
|
+
if not deployments:
|
|
235
|
+
raise ValueError("deployments is required")
|
|
236
|
+
else:
|
|
237
|
+
if not isinstance(deployments, list):
|
|
238
|
+
raise TypeError("deployments must be a list")
|
|
239
|
+
if not all(
|
|
240
|
+
isinstance(deployment, FrameworkDeploymentConfig)
|
|
241
|
+
for deployment in deployments
|
|
242
|
+
):
|
|
243
|
+
raise TypeError(
|
|
244
|
+
"deployments must be a list of FrameworkDeploymentConfig"
|
|
245
|
+
)
|
|
246
|
+
super().__init__(model_name=model_name, deployments=deployments, **kwargs)
|
|
247
|
+
|
|
248
|
+
def to_json(self) -> dict:
|
|
249
|
+
ret = {
|
|
250
|
+
"model_name": self.model_name,
|
|
251
|
+
"tags": self.tags,
|
|
252
|
+
}
|
|
253
|
+
if self.common_config:
|
|
254
|
+
ret["common_config"] = self.common_config.to_json()
|
|
255
|
+
if self.deployments:
|
|
256
|
+
ret["deployments"] = [
|
|
257
|
+
deployment.to_json() for deployment in self.deployments
|
|
258
|
+
]
|
|
259
|
+
return ret
|
|
260
|
+
|
|
261
|
+
@classmethod
|
|
262
|
+
def from_json(cls, serialized: dict) -> "ModelDeploymentConfig":
|
|
263
|
+
kw = serialized.copy()
|
|
264
|
+
return cls(
|
|
265
|
+
model_name=kw["model_name"],
|
|
266
|
+
common_config=(
|
|
267
|
+
DeploymentConfigBase.from_json(kw.get("common_config", {}))
|
|
268
|
+
if kw.get("common_config")
|
|
269
|
+
else None
|
|
270
|
+
),
|
|
271
|
+
deployments=[
|
|
272
|
+
FrameworkDeploymentConfig.from_json(deployment)
|
|
273
|
+
for deployment in kw.get("deployments", [])
|
|
274
|
+
],
|
|
275
|
+
tags=kw.get("tags", []),
|
|
276
|
+
)
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
def _model_config_from_json(json_content: str) -> List[ModelDeploymentConfig]:
|
|
280
|
+
data_list = json.loads(json_content)
|
|
281
|
+
if not isinstance(data_list, list):
|
|
282
|
+
raise ValueError("JSON root must be a list of model configurations.")
|
|
283
|
+
return [ModelDeploymentConfig.from_json(item_data) for item_data in data_list]
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
def _model_config_to_json(
|
|
287
|
+
model_configs: List[ModelDeploymentConfig],
|
|
288
|
+
) -> str:
|
|
289
|
+
data_list = [config.to_json() for config in model_configs]
|
|
290
|
+
return json.dumps(data_list, ensure_ascii=False)
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
def register_models_from_json_file(config_path):
|
|
294
|
+
"""
|
|
295
|
+
Loads model configurations from a JSON file and registers them.
|
|
296
|
+
"""
|
|
297
|
+
|
|
298
|
+
with open(config_path, "r") as f:
|
|
299
|
+
model_list = _model_config_from_json(f.read())
|
|
300
|
+
|
|
301
|
+
if not model_list:
|
|
302
|
+
return
|
|
303
|
+
|
|
304
|
+
for model in model_list:
|
|
305
|
+
common_config = model.common_config or DeploymentConfigBase()
|
|
306
|
+
deployments = model.deployments
|
|
307
|
+
|
|
308
|
+
for deployment in deployments:
|
|
309
|
+
model_file = deployment.model_file or common_config.model_file
|
|
310
|
+
model_file_resources = (
|
|
311
|
+
deployment.model_file_resources
|
|
312
|
+
or common_config.model_file_resources
|
|
313
|
+
)
|
|
314
|
+
|
|
315
|
+
properties = deployment.properties or common_config.properties
|
|
316
|
+
load_params = deployment.load_params or common_config.load_params
|
|
317
|
+
calc_resources = (
|
|
318
|
+
deployment.resource_requirements
|
|
319
|
+
or common_config.resource_requirements
|
|
320
|
+
)
|
|
321
|
+
tags = list(set(model.tags or []))
|
|
322
|
+
|
|
323
|
+
register_model_deployments(
|
|
324
|
+
model_name=model.model_name,
|
|
325
|
+
model_file=model_file,
|
|
326
|
+
inference_frameworks=deployment.framework,
|
|
327
|
+
required_resources=[
|
|
328
|
+
ResourceNameTemplate(
|
|
329
|
+
project=resource_item.project,
|
|
330
|
+
schema=resource_item.schema,
|
|
331
|
+
name=resource_item.name,
|
|
332
|
+
)
|
|
333
|
+
for resource_item in model_file_resources
|
|
334
|
+
],
|
|
335
|
+
default_load_params=load_params,
|
|
336
|
+
required_cpu=calc_resources.cpu,
|
|
337
|
+
required_memory=calc_resources.memory,
|
|
338
|
+
required_gu=calc_resources.gu,
|
|
339
|
+
required_gpu_memory=calc_resources.gpu_memory,
|
|
340
|
+
device=deployment.device,
|
|
341
|
+
properties=properties,
|
|
342
|
+
tags=tags,
|
|
343
|
+
)
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
def register_models_from_dir(config_dir):
|
|
347
|
+
"""
|
|
348
|
+
Loads model configurations from a directory and registers them.
|
|
349
|
+
"""
|
|
350
|
+
from pathlib import Path
|
|
351
|
+
|
|
352
|
+
model_json_files = list(Path(config_dir).glob("*_models.json"))
|
|
353
|
+
|
|
354
|
+
for file_path in model_json_files:
|
|
355
|
+
try:
|
|
356
|
+
register_models_from_json_file(file_path)
|
|
357
|
+
except Exception as e:
|
|
358
|
+
raise ValueError(
|
|
359
|
+
f"Failed to load model config from {file_path}, error: {e}"
|
|
360
|
+
)
|
|
@@ -0,0 +1,13 @@
|
|
|
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.
|