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
|
@@ -12,26 +12,164 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
TensorExpit,
|
|
18
|
-
TensorLogExpit,
|
|
19
|
-
TensorLogit,
|
|
20
|
-
expit,
|
|
21
|
-
log_expit,
|
|
22
|
-
logit,
|
|
23
|
-
)
|
|
15
|
+
try:
|
|
16
|
+
import scipy
|
|
24
17
|
|
|
18
|
+
from .airy import TensorAiry, TensorAirye, TensorItairy, airy, airye, itairy
|
|
19
|
+
from .bessel import (
|
|
20
|
+
TensorHankel1,
|
|
21
|
+
TensorHankel1e,
|
|
22
|
+
TensorHankel2,
|
|
23
|
+
TensorHankel2e,
|
|
24
|
+
TensorIV,
|
|
25
|
+
TensorIVE,
|
|
26
|
+
TensorJV,
|
|
27
|
+
TensorJVE,
|
|
28
|
+
TensorKN,
|
|
29
|
+
TensorKV,
|
|
30
|
+
TensorKVE,
|
|
31
|
+
TensorYN,
|
|
32
|
+
TensorYV,
|
|
33
|
+
TensorYVE,
|
|
34
|
+
hankel1,
|
|
35
|
+
hankel1e,
|
|
36
|
+
hankel2,
|
|
37
|
+
hankel2e,
|
|
38
|
+
iv,
|
|
39
|
+
ive,
|
|
40
|
+
jv,
|
|
41
|
+
jve,
|
|
42
|
+
kn,
|
|
43
|
+
kv,
|
|
44
|
+
kve,
|
|
45
|
+
yn,
|
|
46
|
+
yv,
|
|
47
|
+
yve,
|
|
48
|
+
)
|
|
49
|
+
from .ellip_func_integrals import (
|
|
50
|
+
TensorEllipe,
|
|
51
|
+
TensorEllipeinc,
|
|
52
|
+
TensorEllipk,
|
|
53
|
+
TensorEllipkinc,
|
|
54
|
+
TensorEllipkm1,
|
|
55
|
+
TensorElliprc,
|
|
56
|
+
TensorElliprd,
|
|
57
|
+
TensorElliprf,
|
|
58
|
+
TensorElliprg,
|
|
59
|
+
TensorElliprj,
|
|
60
|
+
ellipe,
|
|
61
|
+
ellipeinc,
|
|
62
|
+
ellipk,
|
|
63
|
+
ellipkinc,
|
|
64
|
+
ellipkm1,
|
|
65
|
+
elliprc,
|
|
66
|
+
elliprd,
|
|
67
|
+
elliprf,
|
|
68
|
+
elliprg,
|
|
69
|
+
elliprj,
|
|
70
|
+
)
|
|
71
|
+
from .ellip_harm import (
|
|
72
|
+
TensorEllipHarm,
|
|
73
|
+
TensorEllipHarm2,
|
|
74
|
+
TensorEllipNormal,
|
|
75
|
+
ellip_harm,
|
|
76
|
+
ellip_harm_2,
|
|
77
|
+
ellip_normal,
|
|
78
|
+
)
|
|
79
|
+
from .err_fresnel import (
|
|
80
|
+
TensorDawsn,
|
|
81
|
+
TensorErf,
|
|
82
|
+
TensorErfc,
|
|
83
|
+
TensorErfcinv,
|
|
84
|
+
TensorErfcx,
|
|
85
|
+
TensorErfi,
|
|
86
|
+
TensorErfinv,
|
|
87
|
+
TensorFresnel,
|
|
88
|
+
TensorModFresnelM,
|
|
89
|
+
TensorModFresnelP,
|
|
90
|
+
TensorVoigtProfile,
|
|
91
|
+
TensorWofz,
|
|
92
|
+
dawsn,
|
|
93
|
+
erf,
|
|
94
|
+
erfc,
|
|
95
|
+
erfcinv,
|
|
96
|
+
erfcx,
|
|
97
|
+
erfi,
|
|
98
|
+
erfinv,
|
|
99
|
+
fresnel,
|
|
100
|
+
modfresnelm,
|
|
101
|
+
modfresnelp,
|
|
102
|
+
voigt_profile,
|
|
103
|
+
wofz,
|
|
104
|
+
)
|
|
105
|
+
from .gamma_funcs import (
|
|
106
|
+
TensorBeta,
|
|
107
|
+
TensorBetaInc,
|
|
108
|
+
TensorBetaIncInv,
|
|
109
|
+
TensorBetaLn,
|
|
110
|
+
TensorDiGamma,
|
|
111
|
+
TensorGamma,
|
|
112
|
+
TensorGammaInc,
|
|
113
|
+
TensorGammaIncc,
|
|
114
|
+
TensorGammaInccInv,
|
|
115
|
+
TensorGammaIncInv,
|
|
116
|
+
TensorGammaln,
|
|
117
|
+
TensorGammaSgn,
|
|
118
|
+
TensorLogGamma,
|
|
119
|
+
TensorMultiGammaLn,
|
|
120
|
+
TensorPoch,
|
|
121
|
+
TensorPolyGamma,
|
|
122
|
+
TensorPsi,
|
|
123
|
+
TensorRGamma,
|
|
124
|
+
beta,
|
|
125
|
+
betainc,
|
|
126
|
+
betaincinv,
|
|
127
|
+
betaln,
|
|
128
|
+
digamma,
|
|
129
|
+
gamma,
|
|
130
|
+
gammainc,
|
|
131
|
+
gammaincc,
|
|
132
|
+
gammainccinv,
|
|
133
|
+
gammaincinv,
|
|
134
|
+
gammaln,
|
|
135
|
+
gammasgn,
|
|
136
|
+
loggamma,
|
|
137
|
+
multigammaln,
|
|
138
|
+
poch,
|
|
139
|
+
polygamma,
|
|
140
|
+
psi,
|
|
141
|
+
rgamma,
|
|
142
|
+
)
|
|
143
|
+
from .hypergeometric_funcs import (
|
|
144
|
+
TensorHYP0F1,
|
|
145
|
+
TensorHYP1F1,
|
|
146
|
+
TensorHYP2F1,
|
|
147
|
+
TensorHYPERU,
|
|
148
|
+
hyp0f1,
|
|
149
|
+
hyp1f1,
|
|
150
|
+
hyp2f1,
|
|
151
|
+
hyperu,
|
|
152
|
+
)
|
|
153
|
+
from .info_theory import (
|
|
154
|
+
TensorEntr,
|
|
155
|
+
TensorKlDiv,
|
|
156
|
+
TensorRelEntr,
|
|
157
|
+
entr,
|
|
158
|
+
kl_div,
|
|
159
|
+
rel_entr,
|
|
160
|
+
)
|
|
161
|
+
from .misc import TensorXLogY, softmax, softplus, xlogy
|
|
162
|
+
from .statistical import (
|
|
163
|
+
TensorExpit,
|
|
164
|
+
TensorLogExpit,
|
|
165
|
+
TensorLogit,
|
|
166
|
+
expit,
|
|
167
|
+
log_expit,
|
|
168
|
+
logit,
|
|
169
|
+
)
|
|
170
|
+
except ImportError: # pragma: no cover
|
|
171
|
+
pass
|
|
25
172
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
for member, val in globals().items():
|
|
30
|
-
if val is None:
|
|
31
|
-
erase_key.append(member)
|
|
32
|
-
for key in erase_key:
|
|
33
|
-
globals().pop(key, None)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
_clear_nones()
|
|
37
|
-
del _clear_nones
|
|
173
|
+
_names_to_del = [_name for _name, _val in globals().items() if _val is None]
|
|
174
|
+
[globals().pop(_name) for _name in _names_to_del]
|
|
175
|
+
del _names_to_del
|
|
@@ -0,0 +1,55 @@
|
|
|
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 ..utils import implement_scipy, infer_scipy_dtype
|
|
16
|
+
from .core import TensorSpecialUnaryTupleOp, _register_special_op
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@_register_special_op
|
|
20
|
+
class TensorAiry(TensorSpecialUnaryTupleOp):
|
|
21
|
+
_func_name = "airy"
|
|
22
|
+
_n_outputs = 4
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@implement_scipy("scipy.special.airy")
|
|
26
|
+
@infer_scipy_dtype("scipy.special.airy", multi_outputs=True)
|
|
27
|
+
def airy(z, out=None, **kwargs):
|
|
28
|
+
op = TensorAiry(**kwargs)
|
|
29
|
+
return op(z, out=out)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@_register_special_op
|
|
33
|
+
class TensorAirye(TensorSpecialUnaryTupleOp):
|
|
34
|
+
_func_name = "airye"
|
|
35
|
+
_n_outputs = 4
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@implement_scipy("scipy.special.airye")
|
|
39
|
+
@infer_scipy_dtype("scipy.special.airye", multi_outputs=True)
|
|
40
|
+
def airye(z, out=None, **kwargs):
|
|
41
|
+
op = TensorAirye(**kwargs)
|
|
42
|
+
return op(z, out=out)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@_register_special_op
|
|
46
|
+
class TensorItairy(TensorSpecialUnaryTupleOp):
|
|
47
|
+
_func_name = "itairy"
|
|
48
|
+
_n_outputs = 4
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@implement_scipy("scipy.special.itairy")
|
|
52
|
+
@infer_scipy_dtype("scipy.special.itairy", multi_outputs=True)
|
|
53
|
+
def itairy(x, out=None, **kwargs):
|
|
54
|
+
op = TensorItairy(**kwargs)
|
|
55
|
+
return op(x, out=out)
|
|
@@ -0,0 +1,199 @@
|
|
|
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 ..arithmetic.utils import arithmetic_operator
|
|
16
|
+
from ..utils import implement_scipy, infer_scipy_dtype
|
|
17
|
+
from .core import TensorSpecialBinOp, _register_special_op
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@_register_special_op
|
|
21
|
+
@arithmetic_operator(sparse_mode="binary_and")
|
|
22
|
+
class TensorJV(TensorSpecialBinOp):
|
|
23
|
+
_func_name = "jv"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@implement_scipy("scipy.special.jv")
|
|
27
|
+
@infer_scipy_dtype("scipy.special.jv")
|
|
28
|
+
def jv(v, z, **kwargs):
|
|
29
|
+
op = TensorJV(**kwargs)
|
|
30
|
+
return op(v, z)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@_register_special_op
|
|
34
|
+
@arithmetic_operator(sparse_mode="binary_and")
|
|
35
|
+
class TensorJVE(TensorSpecialBinOp):
|
|
36
|
+
_func_name = "jve"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@implement_scipy("scipy.special.jve")
|
|
40
|
+
@infer_scipy_dtype("scipy.special.jve")
|
|
41
|
+
def jve(v, z, **kwargs):
|
|
42
|
+
op = TensorJVE(**kwargs)
|
|
43
|
+
return op(v, z)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@_register_special_op
|
|
47
|
+
@arithmetic_operator(sparse_mode="binary_and")
|
|
48
|
+
class TensorYN(TensorSpecialBinOp):
|
|
49
|
+
_func_name = "yn"
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
@implement_scipy("scipy.special.yn")
|
|
53
|
+
@infer_scipy_dtype("scipy.special.yn")
|
|
54
|
+
def yn(n, x, **kwargs):
|
|
55
|
+
op = TensorYN(**kwargs)
|
|
56
|
+
return op(n, x)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@_register_special_op
|
|
60
|
+
@arithmetic_operator(sparse_mode="binary_and")
|
|
61
|
+
class TensorYV(TensorSpecialBinOp):
|
|
62
|
+
_func_name = "yv"
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@implement_scipy("scipy.special.yv")
|
|
66
|
+
@infer_scipy_dtype("scipy.special.yv")
|
|
67
|
+
def yv(v, z, **kwargs):
|
|
68
|
+
op = TensorYV(**kwargs)
|
|
69
|
+
return op(v, z)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
@_register_special_op
|
|
73
|
+
@arithmetic_operator(sparse_mode="binary_and")
|
|
74
|
+
class TensorYVE(TensorSpecialBinOp):
|
|
75
|
+
_func_name = "yve"
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
@implement_scipy("scipy.special.yve")
|
|
79
|
+
@infer_scipy_dtype("scipy.special.yve")
|
|
80
|
+
def yve(v, z, **kwargs):
|
|
81
|
+
op = TensorYVE(**kwargs)
|
|
82
|
+
return op(v, z)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
@_register_special_op
|
|
86
|
+
@arithmetic_operator(sparse_mode="binary_and")
|
|
87
|
+
class TensorKN(TensorSpecialBinOp):
|
|
88
|
+
_func_name = "kn"
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
@implement_scipy("scipy.special.kn")
|
|
92
|
+
@infer_scipy_dtype("scipy.special.kn")
|
|
93
|
+
def kn(n, x, **kwargs):
|
|
94
|
+
op = TensorKN(**kwargs)
|
|
95
|
+
return op(n, x)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
@_register_special_op
|
|
99
|
+
@arithmetic_operator(sparse_mode="binary_and")
|
|
100
|
+
class TensorKV(TensorSpecialBinOp):
|
|
101
|
+
_func_name = "kv"
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
@implement_scipy("scipy.special.kv")
|
|
105
|
+
@infer_scipy_dtype("scipy.special.kv")
|
|
106
|
+
def kv(v, z, **kwargs):
|
|
107
|
+
op = TensorKV(**kwargs)
|
|
108
|
+
return op(v, z)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
@_register_special_op
|
|
112
|
+
@arithmetic_operator(sparse_mode="binary_and")
|
|
113
|
+
class TensorKVE(TensorSpecialBinOp):
|
|
114
|
+
_func_name = "kve"
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
@implement_scipy("scipy.special.kve")
|
|
118
|
+
@infer_scipy_dtype("scipy.special.kve")
|
|
119
|
+
def kve(v, z, **kwargs):
|
|
120
|
+
op = TensorKVE(**kwargs)
|
|
121
|
+
return op(v, z)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
@_register_special_op
|
|
125
|
+
@arithmetic_operator(sparse_mode="binary_and")
|
|
126
|
+
class TensorIV(TensorSpecialBinOp):
|
|
127
|
+
_func_name = "iv"
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
@implement_scipy("scipy.special.iv")
|
|
131
|
+
@infer_scipy_dtype("scipy.special.iv")
|
|
132
|
+
def iv(v, z, **kwargs):
|
|
133
|
+
op = TensorIV(**kwargs)
|
|
134
|
+
return op(v, z)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
@_register_special_op
|
|
138
|
+
@arithmetic_operator(sparse_mode="binary_and")
|
|
139
|
+
class TensorIVE(TensorSpecialBinOp):
|
|
140
|
+
_func_name = "ive"
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
@implement_scipy("scipy.special.ive")
|
|
144
|
+
@infer_scipy_dtype("scipy.special.ive")
|
|
145
|
+
def ive(v, z, **kwargs):
|
|
146
|
+
op = TensorIVE(**kwargs)
|
|
147
|
+
return op(v, z)
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
@_register_special_op
|
|
151
|
+
@arithmetic_operator(sparse_mode="binary_and")
|
|
152
|
+
class TensorHankel1(TensorSpecialBinOp):
|
|
153
|
+
_func_name = "hankel1"
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
@implement_scipy("scipy.special.hankel1")
|
|
157
|
+
@infer_scipy_dtype("scipy.special.hankel1")
|
|
158
|
+
def hankel1(v, z, **kwargs):
|
|
159
|
+
op = TensorHankel1(**kwargs)
|
|
160
|
+
return op(v, z)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
@_register_special_op
|
|
164
|
+
@arithmetic_operator(sparse_mode="binary_and")
|
|
165
|
+
class TensorHankel1e(TensorSpecialBinOp):
|
|
166
|
+
_func_name = "hankel1e"
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
@implement_scipy("scipy.special.hankel1e")
|
|
170
|
+
@infer_scipy_dtype("scipy.special.hankel1e")
|
|
171
|
+
def hankel1e(v, z, **kwargs):
|
|
172
|
+
op = TensorHankel1e(**kwargs)
|
|
173
|
+
return op(v, z)
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
@_register_special_op
|
|
177
|
+
@arithmetic_operator(sparse_mode="binary_and")
|
|
178
|
+
class TensorHankel2(TensorSpecialBinOp):
|
|
179
|
+
_func_name = "hankel2"
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
@implement_scipy("scipy.special.hankel2")
|
|
183
|
+
@infer_scipy_dtype("scipy.special.hankel2")
|
|
184
|
+
def hankel2(v, z, **kwargs):
|
|
185
|
+
op = TensorHankel2(**kwargs)
|
|
186
|
+
return op(v, z)
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
@_register_special_op
|
|
190
|
+
@arithmetic_operator(sparse_mode="binary_and")
|
|
191
|
+
class TensorHankel2e(TensorSpecialBinOp):
|
|
192
|
+
_func_name = "hankel2e"
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
@implement_scipy("scipy.special.hankel2e")
|
|
196
|
+
@infer_scipy_dtype("scipy.special.hankel2e")
|
|
197
|
+
def hankel2e(v, z, **kwargs):
|
|
198
|
+
op = TensorHankel2e(**kwargs)
|
|
199
|
+
return op(v, z)
|
maxframe/tensor/special/core.py
CHANGED
|
@@ -12,8 +12,18 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
+
import numpy as np
|
|
16
|
+
|
|
17
|
+
try:
|
|
18
|
+
import scipy.special as spspecial
|
|
19
|
+
except ImportError:
|
|
20
|
+
spspecial = None
|
|
21
|
+
|
|
15
22
|
from ... import opcodes
|
|
16
|
-
from
|
|
23
|
+
from ...core import ExecutableTuple
|
|
24
|
+
from ...serialization.serializables import StringField
|
|
25
|
+
from ..arithmetic.core import TensorBinOp, TensorMultiOp, TensorUnaryOp
|
|
26
|
+
from ..datasource import tensor as astensor
|
|
17
27
|
|
|
18
28
|
_func_name_to_special_cls = {}
|
|
19
29
|
|
|
@@ -29,10 +39,61 @@ class TensorSpecialOperatorMixin:
|
|
|
29
39
|
_func_name = None
|
|
30
40
|
|
|
31
41
|
def __new__(cls, *args, **kwargs):
|
|
32
|
-
|
|
33
|
-
|
|
42
|
+
func_name = kwargs.get("func_name", cls._func_name)
|
|
43
|
+
kwargs["func_name"] = func_name
|
|
44
|
+
if func_name is not None:
|
|
45
|
+
return object.__new__(_func_name_to_special_cls[func_name])
|
|
34
46
|
return super().__new__(cls, *args, **kwargs)
|
|
35
47
|
|
|
36
48
|
|
|
37
49
|
class TensorSpecialUnaryOp(TensorSpecialOperatorMixin, TensorUnaryOp):
|
|
38
|
-
|
|
50
|
+
func_name = StringField("func_name")
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class TensorSpecialBinOp(TensorSpecialOperatorMixin, TensorBinOp):
|
|
54
|
+
func_name = StringField("func_name")
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class TensorSpecialMultiOp(TensorSpecialOperatorMixin, TensorMultiOp):
|
|
58
|
+
func_name = StringField("func_name")
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class TensorSpecialUnaryTupleOp(TensorSpecialUnaryOp):
|
|
62
|
+
@property
|
|
63
|
+
def output_limit(self):
|
|
64
|
+
return self._n_outputs
|
|
65
|
+
|
|
66
|
+
def __call__(self, x, out=None):
|
|
67
|
+
x = astensor(x)
|
|
68
|
+
|
|
69
|
+
if out is not None:
|
|
70
|
+
if not isinstance(out, ExecutableTuple):
|
|
71
|
+
raise TypeError(
|
|
72
|
+
f"out should be ExecutableTuple object, got {type(out)} instead"
|
|
73
|
+
)
|
|
74
|
+
if len(out) != self._n_outputs:
|
|
75
|
+
raise TypeError(
|
|
76
|
+
"out should be an ExecutableTuple object with "
|
|
77
|
+
f"{self._n_outputs} elements, got {len(out)} instead"
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
func = getattr(spspecial, self._func_name)
|
|
81
|
+
res = func(np.ones(x.shape, dtype=x.dtype))
|
|
82
|
+
res_tensors = self.new_tensors(
|
|
83
|
+
[x],
|
|
84
|
+
kws=[
|
|
85
|
+
{
|
|
86
|
+
"side": f"{self._func_name}[{i}]",
|
|
87
|
+
"dtype": output.dtype,
|
|
88
|
+
"shape": output.shape,
|
|
89
|
+
}
|
|
90
|
+
for i, output in enumerate(res)
|
|
91
|
+
],
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
if out is None:
|
|
95
|
+
return ExecutableTuple(res_tensors)
|
|
96
|
+
|
|
97
|
+
for res_tensor, out_tensor in zip(res_tensors, out):
|
|
98
|
+
out_tensor.data = res_tensor.data
|
|
99
|
+
return out
|
|
@@ -0,0 +1,155 @@
|
|
|
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 ..arithmetic.utils import arithmetic_operator
|
|
16
|
+
from ..utils import implement_scipy, infer_scipy_dtype
|
|
17
|
+
from .core import (
|
|
18
|
+
TensorSpecialBinOp,
|
|
19
|
+
TensorSpecialMultiOp,
|
|
20
|
+
TensorSpecialUnaryOp,
|
|
21
|
+
_register_special_op,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@_register_special_op
|
|
26
|
+
@arithmetic_operator(sparse_mode="unary")
|
|
27
|
+
class TensorEllipk(TensorSpecialUnaryOp):
|
|
28
|
+
_func_name = "ellipk"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@_register_special_op
|
|
32
|
+
@arithmetic_operator(sparse_mode="unary")
|
|
33
|
+
class TensorEllipkm1(TensorSpecialUnaryOp):
|
|
34
|
+
_func_name = "ellipkm1"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@_register_special_op
|
|
38
|
+
@arithmetic_operator(sparse_mode="binary_and")
|
|
39
|
+
class TensorEllipkinc(TensorSpecialBinOp):
|
|
40
|
+
_func_name = "ellipkinc"
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@_register_special_op
|
|
44
|
+
@arithmetic_operator(sparse_mode="unary")
|
|
45
|
+
class TensorEllipe(TensorSpecialUnaryOp):
|
|
46
|
+
_func_name = "ellipe"
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@_register_special_op
|
|
50
|
+
@arithmetic_operator(sparse_mode="binary_and")
|
|
51
|
+
class TensorEllipeinc(TensorSpecialBinOp):
|
|
52
|
+
_func_name = "ellipeinc"
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@_register_special_op
|
|
56
|
+
@arithmetic_operator(sparse_mode="binary_and")
|
|
57
|
+
class TensorElliprc(TensorSpecialBinOp):
|
|
58
|
+
_func_name = "elliprc"
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
@_register_special_op
|
|
62
|
+
class TensorElliprd(TensorSpecialMultiOp):
|
|
63
|
+
_ARG_COUNT = 3
|
|
64
|
+
_func_name = "elliprd"
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
@_register_special_op
|
|
68
|
+
class TensorElliprf(TensorSpecialMultiOp):
|
|
69
|
+
_ARG_COUNT = 3
|
|
70
|
+
_func_name = "elliprf"
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
@_register_special_op
|
|
74
|
+
class TensorElliprg(TensorSpecialMultiOp):
|
|
75
|
+
_ARG_COUNT = 3
|
|
76
|
+
_func_name = "elliprg"
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
@_register_special_op
|
|
80
|
+
class TensorElliprj(TensorSpecialMultiOp):
|
|
81
|
+
_ARG_COUNT = 4
|
|
82
|
+
_func_name = "elliprj"
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
@implement_scipy("scipy.special.ellipk")
|
|
86
|
+
@infer_scipy_dtype("scipy.special.ellipk")
|
|
87
|
+
def ellipk(x, **kwargs):
|
|
88
|
+
op = TensorEllipk(**kwargs)
|
|
89
|
+
return op(x)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
@implement_scipy("scipy.special.ellipkm1")
|
|
93
|
+
@infer_scipy_dtype("scipy.special.ellipkm1")
|
|
94
|
+
def ellipkm1(x, **kwargs):
|
|
95
|
+
op = TensorEllipkm1(**kwargs)
|
|
96
|
+
return op(x)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
@implement_scipy("scipy.special.ellipkinc")
|
|
100
|
+
@infer_scipy_dtype("scipy.special.ellipkinc")
|
|
101
|
+
def ellipkinc(phi, m, **kwargs):
|
|
102
|
+
op = TensorEllipkinc(**kwargs)
|
|
103
|
+
return op(phi, m)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
@implement_scipy("scipy.special.ellipe")
|
|
107
|
+
@infer_scipy_dtype("scipy.special.ellipe")
|
|
108
|
+
def ellipe(x, **kwargs):
|
|
109
|
+
op = TensorEllipe(**kwargs)
|
|
110
|
+
return op(x)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
@implement_scipy("scipy.special.ellipeinc")
|
|
114
|
+
@infer_scipy_dtype("scipy.special.ellipeinc")
|
|
115
|
+
def ellipeinc(phi, m, **kwargs):
|
|
116
|
+
op = TensorEllipeinc(**kwargs)
|
|
117
|
+
return op(phi, m)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
try:
|
|
121
|
+
|
|
122
|
+
@implement_scipy("scipy.special.elliprc")
|
|
123
|
+
@infer_scipy_dtype("scipy.special.elliprc")
|
|
124
|
+
def elliprc(x, y, **kwargs):
|
|
125
|
+
op = TensorElliprc(**kwargs)
|
|
126
|
+
return op(x, y)
|
|
127
|
+
|
|
128
|
+
@implement_scipy("scipy.special.elliprd")
|
|
129
|
+
@infer_scipy_dtype("scipy.special.elliprd")
|
|
130
|
+
def elliprd(x, y, z, **kwargs):
|
|
131
|
+
op = TensorElliprd(**kwargs)
|
|
132
|
+
return op(x, y, z)
|
|
133
|
+
|
|
134
|
+
@implement_scipy("scipy.special.elliprf")
|
|
135
|
+
@infer_scipy_dtype("scipy.special.elliprf")
|
|
136
|
+
def elliprf(x, y, z, **kwargs):
|
|
137
|
+
op = TensorElliprf(**kwargs)
|
|
138
|
+
return op(x, y, z)
|
|
139
|
+
|
|
140
|
+
@implement_scipy("scipy.special.elliprg")
|
|
141
|
+
@infer_scipy_dtype("scipy.special.elliprg")
|
|
142
|
+
def elliprg(x, y, z, **kwargs):
|
|
143
|
+
op = TensorElliprg(**kwargs)
|
|
144
|
+
return op(x, y, z)
|
|
145
|
+
|
|
146
|
+
@implement_scipy("scipy.special.elliprj")
|
|
147
|
+
@infer_scipy_dtype("scipy.special.elliprj")
|
|
148
|
+
def elliprj(x, y, z, p, **kwargs):
|
|
149
|
+
op = TensorElliprj(**kwargs)
|
|
150
|
+
return op(x, y, z, p)
|
|
151
|
+
|
|
152
|
+
except AttributeError:
|
|
153
|
+
# These functions are not implemented before scipy v1.8 so
|
|
154
|
+
# spsecial.func may cause AttributeError
|
|
155
|
+
elliprc = elliprd = elliprf = elliprg = elliprj = None
|