maxframe 1.3.1__cp39-cp39-win_amd64.whl → 2.0.0__cp39-cp39-win_amd64.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/_utils.cp39-win_amd64.pyd +0 -0
- maxframe/_utils.pyi +21 -0
- maxframe/_utils.pyx +4 -3
- maxframe/codegen/__init__.py +27 -0
- maxframe/{codegen.py → codegen/core.py} +49 -43
- maxframe/codegen/spe/__init__.py +16 -0
- maxframe/codegen/spe/core.py +307 -0
- maxframe/codegen/spe/dataframe/__init__.py +37 -0
- maxframe/codegen/spe/dataframe/accessors/__init__.py +15 -0
- maxframe/codegen/spe/dataframe/accessors/base.py +53 -0
- maxframe/codegen/spe/dataframe/accessors/dict_.py +194 -0
- maxframe/codegen/spe/dataframe/accessors/list_.py +80 -0
- maxframe/codegen/spe/dataframe/arithmetic.py +84 -0
- maxframe/codegen/spe/dataframe/datasource.py +181 -0
- maxframe/codegen/spe/dataframe/datastore.py +204 -0
- maxframe/codegen/spe/dataframe/extensions.py +63 -0
- maxframe/codegen/spe/dataframe/fetch.py +26 -0
- maxframe/codegen/spe/dataframe/groupby.py +224 -0
- maxframe/codegen/spe/dataframe/indexing.py +238 -0
- maxframe/codegen/spe/dataframe/merge.py +73 -0
- maxframe/codegen/spe/dataframe/misc.py +286 -0
- maxframe/codegen/spe/dataframe/missing.py +64 -0
- maxframe/codegen/spe/dataframe/reduction.py +160 -0
- maxframe/codegen/spe/dataframe/sort.py +83 -0
- maxframe/codegen/spe/dataframe/statistics.py +46 -0
- maxframe/codegen/spe/dataframe/tests/__init__.py +13 -0
- maxframe/codegen/spe/dataframe/tests/accessors/__init__.py +13 -0
- maxframe/codegen/spe/dataframe/tests/accessors/test_base.py +33 -0
- maxframe/codegen/spe/dataframe/tests/accessors/test_dict.py +310 -0
- maxframe/codegen/spe/dataframe/tests/accessors/test_list.py +137 -0
- maxframe/codegen/spe/dataframe/tests/indexing/__init__.py +13 -0
- maxframe/codegen/spe/dataframe/tests/indexing/conftest.py +58 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_getitem.py +124 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_iloc.py +76 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_indexing.py +39 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_rename.py +51 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_reset_index.py +88 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_sample.py +45 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_set_axis.py +45 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_set_index.py +41 -0
- maxframe/codegen/spe/dataframe/tests/indexing/test_setitem.py +46 -0
- maxframe/codegen/spe/dataframe/tests/misc/__init__.py +13 -0
- maxframe/codegen/spe/dataframe/tests/misc/test_apply.py +133 -0
- maxframe/codegen/spe/dataframe/tests/misc/test_drop_duplicates.py +92 -0
- maxframe/codegen/spe/dataframe/tests/misc/test_misc.py +234 -0
- maxframe/codegen/spe/dataframe/tests/missing/__init__.py +13 -0
- maxframe/codegen/spe/dataframe/tests/missing/test_checkna.py +94 -0
- maxframe/codegen/spe/dataframe/tests/missing/test_dropna.py +50 -0
- maxframe/codegen/spe/dataframe/tests/missing/test_fillna.py +94 -0
- maxframe/codegen/spe/dataframe/tests/missing/test_replace.py +45 -0
- maxframe/codegen/spe/dataframe/tests/test_arithmetic.py +73 -0
- maxframe/codegen/spe/dataframe/tests/test_datasource.py +184 -0
- maxframe/codegen/spe/dataframe/tests/test_datastore.py +200 -0
- maxframe/codegen/spe/dataframe/tests/test_extensions.py +88 -0
- maxframe/codegen/spe/dataframe/tests/test_groupby.py +225 -0
- maxframe/codegen/spe/dataframe/tests/test_merge.py +400 -0
- maxframe/codegen/spe/dataframe/tests/test_reduction.py +104 -0
- maxframe/codegen/spe/dataframe/tests/test_sort.py +159 -0
- maxframe/codegen/spe/dataframe/tests/test_statistics.py +70 -0
- maxframe/codegen/spe/dataframe/tests/test_tseries.py +29 -0
- maxframe/codegen/spe/dataframe/tests/test_value_counts.py +60 -0
- maxframe/codegen/spe/dataframe/tests/test_window.py +69 -0
- maxframe/codegen/spe/dataframe/tseries.py +46 -0
- maxframe/codegen/spe/dataframe/udf.py +62 -0
- maxframe/codegen/spe/dataframe/value_counts.py +31 -0
- maxframe/codegen/spe/dataframe/window.py +65 -0
- maxframe/codegen/spe/learn/__init__.py +15 -0
- maxframe/codegen/spe/learn/contrib/__init__.py +15 -0
- maxframe/codegen/spe/learn/contrib/lightgbm.py +160 -0
- maxframe/codegen/spe/learn/contrib/models.py +41 -0
- maxframe/codegen/spe/learn/contrib/pytorch.py +49 -0
- maxframe/codegen/spe/learn/contrib/tests/__init__.py +13 -0
- maxframe/codegen/spe/learn/contrib/tests/test_lightgbm.py +123 -0
- maxframe/codegen/spe/learn/contrib/tests/test_models.py +41 -0
- maxframe/codegen/spe/learn/contrib/tests/test_pytorch.py +53 -0
- maxframe/codegen/spe/learn/contrib/tests/test_xgboost.py +98 -0
- maxframe/codegen/spe/learn/contrib/xgboost.py +152 -0
- maxframe/codegen/spe/learn/metrics/__init__.py +15 -0
- maxframe/codegen/spe/learn/metrics/_classification.py +120 -0
- maxframe/codegen/spe/learn/metrics/tests/__init__.py +13 -0
- maxframe/codegen/spe/learn/metrics/tests/test_classification.py +93 -0
- maxframe/codegen/spe/learn/model_selection/__init__.py +13 -0
- maxframe/codegen/spe/learn/model_selection/tests/__init__.py +13 -0
- maxframe/codegen/spe/learn/model_selection/tests/test_split.py +41 -0
- maxframe/codegen/spe/learn/preprocessing/__init__.py +15 -0
- maxframe/codegen/spe/learn/preprocessing/_data.py +37 -0
- maxframe/codegen/spe/learn/preprocessing/_label.py +47 -0
- maxframe/codegen/spe/learn/preprocessing/tests/__init__.py +13 -0
- maxframe/codegen/spe/learn/preprocessing/tests/test_data.py +31 -0
- maxframe/codegen/spe/learn/preprocessing/tests/test_label.py +43 -0
- maxframe/codegen/spe/learn/utils/__init__.py +15 -0
- maxframe/codegen/spe/learn/utils/checks.py +55 -0
- maxframe/codegen/spe/learn/utils/multiclass.py +60 -0
- maxframe/codegen/spe/learn/utils/shuffle.py +85 -0
- maxframe/codegen/spe/learn/utils/sparsefuncs.py +35 -0
- maxframe/codegen/spe/learn/utils/tests/__init__.py +13 -0
- maxframe/codegen/spe/learn/utils/tests/test_checks.py +48 -0
- maxframe/codegen/spe/learn/utils/tests/test_multiclass.py +52 -0
- maxframe/codegen/spe/learn/utils/tests/test_shuffle.py +50 -0
- maxframe/codegen/spe/learn/utils/tests/test_sparsefuncs.py +34 -0
- maxframe/codegen/spe/learn/utils/tests/test_validation.py +44 -0
- maxframe/codegen/spe/learn/utils/validation.py +35 -0
- maxframe/codegen/spe/objects.py +26 -0
- maxframe/codegen/spe/remote.py +29 -0
- maxframe/codegen/spe/tensor/__init__.py +28 -0
- maxframe/codegen/spe/tensor/arithmetic.py +95 -0
- maxframe/codegen/spe/tensor/core.py +41 -0
- maxframe/codegen/spe/tensor/datasource.py +165 -0
- maxframe/codegen/spe/tensor/extensions.py +35 -0
- maxframe/codegen/spe/tensor/fetch.py +26 -0
- maxframe/codegen/spe/tensor/indexing.py +63 -0
- maxframe/codegen/spe/tensor/linalg.py +63 -0
- maxframe/codegen/spe/tensor/merge.py +31 -0
- maxframe/codegen/spe/tensor/misc.py +121 -0
- maxframe/codegen/spe/tensor/random.py +29 -0
- maxframe/codegen/spe/tensor/reduction.py +39 -0
- maxframe/codegen/spe/tensor/reshape.py +26 -0
- maxframe/codegen/spe/tensor/sort.py +42 -0
- maxframe/codegen/spe/tensor/special.py +35 -0
- maxframe/codegen/spe/tensor/statistics.py +24 -0
- maxframe/codegen/spe/tensor/tests/__init__.py +13 -0
- maxframe/codegen/spe/tensor/tests/test_arithmetic.py +103 -0
- maxframe/codegen/spe/tensor/tests/test_datasource.py +99 -0
- maxframe/codegen/spe/tensor/tests/test_extensions.py +37 -0
- maxframe/codegen/spe/tensor/tests/test_indexing.py +44 -0
- maxframe/codegen/spe/tensor/tests/test_linalg.py +38 -0
- maxframe/codegen/spe/tensor/tests/test_merge.py +28 -0
- maxframe/codegen/spe/tensor/tests/test_misc.py +94 -0
- maxframe/codegen/spe/tensor/tests/test_random.py +55 -0
- maxframe/codegen/spe/tensor/tests/test_reduction.py +65 -0
- maxframe/codegen/spe/tensor/tests/test_reshape.py +39 -0
- maxframe/codegen/spe/tensor/tests/test_sort.py +49 -0
- maxframe/codegen/spe/tensor/tests/test_special.py +28 -0
- maxframe/codegen/spe/tensor/tests/test_statistics.py +29 -0
- maxframe/codegen/spe/tests/__init__.py +13 -0
- maxframe/codegen/spe/tests/test_remote.py +29 -0
- maxframe/codegen/spe/tests/test_spe_codegen.py +141 -0
- maxframe/codegen/spe/utils.py +54 -0
- maxframe/codegen/tests/__init__.py +13 -0
- maxframe/{tests → codegen/tests}/test_codegen.py +3 -5
- maxframe/config/__init__.py +1 -1
- maxframe/config/config.py +50 -23
- maxframe/config/tests/test_config.py +4 -12
- maxframe/config/validators.py +5 -0
- maxframe/conftest.py +38 -10
- maxframe/core/__init__.py +1 -0
- maxframe/core/context.py +110 -0
- maxframe/core/entity/__init__.py +1 -0
- maxframe/core/entity/core.py +0 -7
- maxframe/core/entity/objects.py +19 -5
- maxframe/core/entity/output_types.py +11 -0
- maxframe/core/entity/tests/test_objects.py +11 -12
- maxframe/core/entity/tileables.py +3 -1
- maxframe/core/entity/utils.py +15 -0
- maxframe/core/graph/__init__.py +6 -1
- maxframe/core/graph/builder/base.py +5 -1
- maxframe/core/graph/core.cp39-win_amd64.pyd +0 -0
- maxframe/core/graph/core.pyx +17 -6
- maxframe/core/graph/entity.py +18 -6
- maxframe/core/operator/__init__.py +8 -3
- maxframe/core/operator/base.py +35 -12
- maxframe/core/operator/core.py +37 -14
- maxframe/core/operator/fetch.py +5 -18
- maxframe/core/operator/objects.py +0 -20
- maxframe/core/operator/shuffle.py +6 -72
- maxframe/dataframe/__init__.py +1 -0
- maxframe/dataframe/accessors/datetime_/core.py +7 -4
- maxframe/dataframe/accessors/string_/core.py +9 -6
- maxframe/dataframe/arithmetic/core.py +31 -20
- maxframe/dataframe/arithmetic/tests/test_arithmetic.py +6 -0
- maxframe/dataframe/core.py +98 -91
- maxframe/dataframe/datasource/core.py +8 -1
- maxframe/dataframe/datasource/date_range.py +8 -0
- maxframe/dataframe/datasource/from_index.py +9 -5
- maxframe/dataframe/datasource/from_records.py +9 -2
- maxframe/dataframe/datasource/from_tensor.py +32 -21
- maxframe/dataframe/datasource/read_csv.py +8 -2
- maxframe/dataframe/datasource/read_odps_query.py +109 -19
- maxframe/dataframe/datasource/read_odps_table.py +20 -5
- maxframe/dataframe/datasource/read_parquet.py +8 -3
- maxframe/dataframe/datasource/tests/test_datasource.py +80 -1
- maxframe/dataframe/datastore/tests/test_to_odps.py +52 -1
- maxframe/dataframe/datastore/to_csv.py +7 -3
- maxframe/dataframe/datastore/to_odps.py +42 -6
- maxframe/dataframe/extensions/__init__.py +6 -1
- maxframe/dataframe/extensions/apply_chunk.py +96 -136
- maxframe/dataframe/extensions/flatjson.py +3 -2
- maxframe/dataframe/extensions/flatmap.py +15 -7
- maxframe/dataframe/fetch/core.py +12 -1
- maxframe/dataframe/groupby/__init__.py +7 -0
- maxframe/dataframe/groupby/aggregation.py +9 -8
- maxframe/dataframe/groupby/apply.py +50 -74
- maxframe/dataframe/groupby/apply_chunk.py +393 -0
- maxframe/dataframe/groupby/core.py +80 -17
- maxframe/dataframe/groupby/extensions.py +26 -0
- maxframe/dataframe/groupby/fill.py +9 -4
- maxframe/dataframe/groupby/sample.py +7 -7
- maxframe/dataframe/groupby/tests/test_groupby.py +3 -3
- maxframe/dataframe/groupby/transform.py +57 -54
- maxframe/dataframe/indexing/align.py +7 -6
- maxframe/dataframe/indexing/getitem.py +9 -8
- maxframe/dataframe/indexing/iloc.py +28 -23
- maxframe/dataframe/indexing/insert.py +7 -3
- maxframe/dataframe/indexing/loc.py +9 -8
- maxframe/dataframe/indexing/reindex.py +36 -30
- maxframe/dataframe/indexing/rename_axis.py +18 -10
- maxframe/dataframe/indexing/reset_index.py +0 -2
- maxframe/dataframe/indexing/sample.py +13 -9
- maxframe/dataframe/indexing/set_axis.py +9 -6
- maxframe/dataframe/indexing/setitem.py +8 -5
- maxframe/dataframe/indexing/where.py +12 -9
- maxframe/dataframe/merge/__init__.py +0 -1
- maxframe/dataframe/merge/concat.py +10 -31
- maxframe/dataframe/merge/merge.py +2 -24
- maxframe/dataframe/misc/__init__.py +6 -0
- maxframe/dataframe/misc/_duplicate.py +7 -3
- maxframe/dataframe/misc/apply.py +106 -139
- maxframe/dataframe/misc/astype.py +3 -2
- maxframe/dataframe/misc/case_when.py +11 -7
- maxframe/dataframe/misc/cut.py +11 -10
- maxframe/dataframe/misc/describe.py +7 -3
- maxframe/dataframe/misc/drop.py +13 -11
- maxframe/dataframe/misc/eval.py +0 -2
- maxframe/dataframe/misc/get_dummies.py +78 -49
- maxframe/dataframe/misc/isin.py +13 -10
- maxframe/dataframe/misc/map.py +21 -6
- maxframe/dataframe/misc/melt.py +8 -1
- maxframe/dataframe/misc/pivot.py +232 -0
- maxframe/dataframe/misc/pivot_table.py +52 -40
- maxframe/dataframe/misc/rechunk.py +59 -0
- maxframe/dataframe/misc/shift.py +7 -4
- maxframe/dataframe/misc/stack.py +5 -3
- maxframe/dataframe/misc/tests/test_misc.py +167 -1
- maxframe/dataframe/misc/transform.py +63 -65
- maxframe/dataframe/misc/value_counts.py +7 -4
- maxframe/dataframe/missing/dropna.py +16 -7
- maxframe/dataframe/missing/fillna.py +18 -10
- maxframe/dataframe/missing/replace.py +10 -6
- maxframe/dataframe/missing/tests/test_missing.py +2 -2
- maxframe/dataframe/operators.py +1 -27
- maxframe/dataframe/reduction/aggregation.py +65 -3
- maxframe/dataframe/reduction/core.py +3 -1
- maxframe/dataframe/reduction/median.py +1 -1
- maxframe/dataframe/reduction/tests/test_reduction.py +33 -0
- maxframe/dataframe/reduction/unique.py +53 -7
- maxframe/dataframe/statistics/corr.py +9 -6
- maxframe/dataframe/statistics/quantile.py +9 -6
- maxframe/dataframe/tseries/to_datetime.py +6 -4
- maxframe/dataframe/utils.py +219 -31
- maxframe/dataframe/window/rolling.py +7 -4
- maxframe/env.py +1 -0
- maxframe/errors.py +9 -0
- maxframe/extension.py +13 -2
- maxframe/io/objects/core.py +67 -51
- maxframe/io/objects/tensor.py +73 -17
- maxframe/io/objects/tests/test_object_io.py +10 -55
- maxframe/io/odpsio/arrow.py +15 -2
- maxframe/io/odpsio/schema.py +43 -13
- maxframe/io/odpsio/tableio.py +63 -11
- maxframe/io/odpsio/tests/test_arrow.py +1 -2
- maxframe/io/odpsio/tests/test_schema.py +114 -1
- maxframe/io/odpsio/tests/test_tableio.py +42 -0
- maxframe/io/odpsio/tests/test_volumeio.py +21 -58
- maxframe/io/odpsio/volumeio.py +23 -8
- maxframe/learn/__init__.py +2 -2
- maxframe/learn/contrib/__init__.py +2 -2
- maxframe/learn/contrib/graph/connected_components.py +2 -1
- maxframe/learn/contrib/lightgbm/__init__.py +33 -0
- maxframe/learn/contrib/lightgbm/_predict.py +138 -0
- maxframe/learn/contrib/lightgbm/_train.py +163 -0
- maxframe/learn/contrib/lightgbm/callback.py +114 -0
- maxframe/learn/contrib/lightgbm/classifier.py +199 -0
- maxframe/learn/contrib/lightgbm/core.py +372 -0
- maxframe/learn/contrib/lightgbm/dataset.py +153 -0
- maxframe/learn/contrib/lightgbm/regressor.py +29 -0
- maxframe/learn/contrib/lightgbm/tests/__init__.py +13 -0
- maxframe/learn/contrib/lightgbm/tests/test_callback.py +58 -0
- maxframe/learn/contrib/models.py +38 -9
- maxframe/learn/contrib/utils.py +55 -0
- maxframe/learn/contrib/xgboost/callback.py +86 -0
- maxframe/learn/contrib/xgboost/classifier.py +26 -30
- maxframe/learn/contrib/xgboost/core.py +54 -42
- maxframe/learn/contrib/xgboost/dmatrix.py +19 -12
- maxframe/learn/contrib/xgboost/predict.py +16 -9
- maxframe/learn/contrib/xgboost/regressor.py +28 -27
- maxframe/learn/contrib/xgboost/tests/test_callback.py +41 -0
- maxframe/learn/contrib/xgboost/train.py +59 -16
- maxframe/learn/core.py +252 -0
- maxframe/learn/datasets/__init__.py +20 -0
- maxframe/learn/datasets/samples_generator.py +628 -0
- maxframe/learn/linear_model/__init__.py +15 -0
- maxframe/learn/linear_model/_base.py +163 -0
- maxframe/learn/linear_model/_lin_reg.py +175 -0
- maxframe/learn/metrics/__init__.py +25 -0
- maxframe/learn/metrics/_check_targets.py +95 -0
- maxframe/learn/metrics/_classification.py +1121 -0
- maxframe/learn/metrics/_regression.py +256 -0
- maxframe/learn/model_selection/__init__.py +15 -0
- maxframe/learn/model_selection/_split.py +451 -0
- maxframe/learn/model_selection/tests/__init__.py +13 -0
- maxframe/learn/model_selection/tests/test_split.py +156 -0
- maxframe/learn/preprocessing/__init__.py +16 -0
- maxframe/learn/preprocessing/_data/__init__.py +17 -0
- maxframe/learn/preprocessing/_data/min_max_scaler.py +390 -0
- maxframe/learn/preprocessing/_data/normalize.py +127 -0
- maxframe/learn/preprocessing/_data/standard_scaler.py +503 -0
- maxframe/learn/preprocessing/_data/utils.py +79 -0
- maxframe/learn/preprocessing/_label/__init__.py +16 -0
- maxframe/learn/preprocessing/_label/_label_binarizer.py +599 -0
- maxframe/learn/preprocessing/_label/_label_encoder.py +174 -0
- maxframe/learn/utils/__init__.py +4 -0
- maxframe/learn/utils/_encode.py +314 -0
- maxframe/learn/utils/checks.py +161 -0
- maxframe/learn/utils/core.py +33 -0
- maxframe/learn/utils/extmath.py +176 -0
- maxframe/learn/utils/multiclass.py +292 -0
- maxframe/learn/utils/shuffle.py +114 -0
- maxframe/learn/utils/sparsefuncs.py +87 -0
- maxframe/learn/utils/validation.py +775 -0
- maxframe/lib/__init__.py +0 -2
- maxframe/lib/compat.py +145 -0
- maxframe/lib/filesystem/_oss_lib/glob.py +1 -1
- maxframe/lib/mmh3.cp39-win_amd64.pyd +0 -0
- maxframe/lib/sparse/__init__.py +10 -15
- maxframe/lib/sparse/array.py +45 -33
- maxframe/lib/sparse/core.py +0 -2
- maxframe/lib/sparse/linalg.py +31 -0
- maxframe/lib/sparse/matrix.py +5 -2
- maxframe/lib/sparse/tests/__init__.py +0 -2
- maxframe/lib/sparse/tests/test_sparse.py +53 -53
- maxframe/lib/sparse/vector.py +0 -2
- maxframe/mixin.py +59 -2
- maxframe/opcodes.py +13 -5
- maxframe/protocol.py +67 -14
- maxframe/remote/core.py +16 -14
- maxframe/remote/run_script.py +6 -3
- maxframe/serialization/__init__.py +2 -0
- maxframe/serialization/core.cp39-win_amd64.pyd +0 -0
- maxframe/serialization/core.pxd +3 -0
- maxframe/serialization/core.pyi +3 -1
- maxframe/serialization/core.pyx +82 -4
- maxframe/serialization/pandas.py +5 -1
- maxframe/serialization/serializables/core.py +6 -5
- maxframe/serialization/serializables/field.py +2 -2
- maxframe/serialization/serializables/tests/test_field_type.py +3 -5
- maxframe/serialization/tests/test_serial.py +27 -0
- maxframe/session.py +4 -71
- maxframe/sperunner.py +165 -0
- maxframe/tensor/__init__.py +35 -2
- maxframe/tensor/arithmetic/__init__.py +2 -4
- maxframe/tensor/arithmetic/abs.py +0 -2
- maxframe/tensor/arithmetic/absolute.py +0 -2
- maxframe/tensor/arithmetic/add.py +34 -4
- maxframe/tensor/arithmetic/angle.py +0 -2
- maxframe/tensor/arithmetic/arccos.py +1 -4
- maxframe/tensor/arithmetic/arccosh.py +1 -3
- maxframe/tensor/arithmetic/arcsin.py +0 -2
- maxframe/tensor/arithmetic/arcsinh.py +0 -2
- maxframe/tensor/arithmetic/arctan.py +0 -2
- maxframe/tensor/arithmetic/arctan2.py +0 -2
- maxframe/tensor/arithmetic/arctanh.py +0 -2
- maxframe/tensor/arithmetic/around.py +0 -2
- maxframe/tensor/arithmetic/bitand.py +0 -2
- maxframe/tensor/arithmetic/bitor.py +1 -3
- maxframe/tensor/arithmetic/bitxor.py +1 -3
- maxframe/tensor/arithmetic/cbrt.py +0 -2
- maxframe/tensor/arithmetic/ceil.py +0 -2
- maxframe/tensor/arithmetic/clip.py +13 -13
- maxframe/tensor/arithmetic/conj.py +0 -2
- maxframe/tensor/arithmetic/copysign.py +0 -2
- maxframe/tensor/arithmetic/core.py +47 -39
- maxframe/tensor/arithmetic/cos.py +1 -3
- maxframe/tensor/arithmetic/cosh.py +0 -2
- maxframe/tensor/arithmetic/deg2rad.py +0 -2
- maxframe/tensor/arithmetic/degrees.py +0 -2
- maxframe/tensor/arithmetic/divide.py +0 -2
- maxframe/tensor/arithmetic/equal.py +0 -2
- maxframe/tensor/arithmetic/exp.py +1 -3
- maxframe/tensor/arithmetic/exp2.py +0 -2
- maxframe/tensor/arithmetic/expm1.py +0 -2
- maxframe/tensor/arithmetic/fabs.py +0 -2
- maxframe/tensor/arithmetic/fix.py +0 -2
- maxframe/tensor/arithmetic/float_power.py +0 -2
- maxframe/tensor/arithmetic/floor.py +0 -2
- maxframe/tensor/arithmetic/floordiv.py +0 -2
- maxframe/tensor/arithmetic/fmax.py +0 -2
- maxframe/tensor/arithmetic/fmin.py +0 -2
- maxframe/tensor/arithmetic/fmod.py +0 -2
- maxframe/tensor/arithmetic/frexp.py +6 -2
- maxframe/tensor/arithmetic/greater.py +0 -2
- maxframe/tensor/arithmetic/greater_equal.py +0 -2
- maxframe/tensor/arithmetic/hypot.py +0 -2
- maxframe/tensor/arithmetic/i0.py +1 -3
- maxframe/tensor/arithmetic/imag.py +0 -2
- maxframe/tensor/arithmetic/invert.py +1 -3
- maxframe/tensor/arithmetic/isclose.py +0 -2
- maxframe/tensor/arithmetic/iscomplex.py +0 -2
- maxframe/tensor/arithmetic/isfinite.py +1 -3
- maxframe/tensor/arithmetic/isinf.py +0 -2
- maxframe/tensor/arithmetic/isnan.py +0 -2
- maxframe/tensor/arithmetic/isreal.py +0 -2
- maxframe/tensor/arithmetic/ldexp.py +0 -2
- maxframe/tensor/arithmetic/less.py +0 -2
- maxframe/tensor/arithmetic/less_equal.py +0 -2
- maxframe/tensor/arithmetic/log.py +1 -3
- maxframe/tensor/arithmetic/log10.py +1 -3
- maxframe/tensor/arithmetic/log1p.py +1 -3
- maxframe/tensor/arithmetic/log2.py +1 -3
- maxframe/tensor/arithmetic/logaddexp.py +0 -2
- maxframe/tensor/arithmetic/logaddexp2.py +0 -2
- maxframe/tensor/arithmetic/logical_and.py +0 -2
- maxframe/tensor/arithmetic/logical_not.py +1 -3
- maxframe/tensor/arithmetic/logical_or.py +0 -2
- maxframe/tensor/arithmetic/logical_xor.py +0 -2
- maxframe/tensor/arithmetic/lshift.py +0 -2
- maxframe/tensor/arithmetic/maximum.py +0 -2
- maxframe/tensor/arithmetic/minimum.py +0 -2
- maxframe/tensor/arithmetic/mod.py +0 -2
- maxframe/tensor/arithmetic/modf.py +6 -2
- maxframe/tensor/arithmetic/multiply.py +37 -4
- maxframe/tensor/arithmetic/nan_to_num.py +0 -2
- maxframe/tensor/arithmetic/negative.py +0 -2
- maxframe/tensor/arithmetic/nextafter.py +0 -2
- maxframe/tensor/arithmetic/not_equal.py +0 -2
- maxframe/tensor/arithmetic/positive.py +0 -2
- maxframe/tensor/arithmetic/power.py +0 -2
- maxframe/tensor/arithmetic/rad2deg.py +0 -2
- maxframe/tensor/arithmetic/radians.py +0 -2
- maxframe/tensor/arithmetic/real.py +0 -2
- maxframe/tensor/arithmetic/reciprocal.py +5 -3
- maxframe/tensor/arithmetic/rint.py +1 -3
- maxframe/tensor/arithmetic/rshift.py +0 -2
- maxframe/tensor/arithmetic/setimag.py +0 -2
- maxframe/tensor/arithmetic/setreal.py +0 -2
- maxframe/tensor/arithmetic/sign.py +0 -2
- maxframe/tensor/arithmetic/signbit.py +0 -2
- maxframe/tensor/arithmetic/sin.py +0 -2
- maxframe/tensor/arithmetic/sinc.py +1 -3
- maxframe/tensor/arithmetic/sinh.py +0 -2
- maxframe/tensor/arithmetic/spacing.py +0 -2
- maxframe/tensor/arithmetic/sqrt.py +0 -2
- maxframe/tensor/arithmetic/square.py +0 -2
- maxframe/tensor/arithmetic/subtract.py +4 -2
- maxframe/tensor/arithmetic/tan.py +0 -2
- maxframe/tensor/arithmetic/tanh.py +0 -2
- maxframe/tensor/arithmetic/tests/__init__.py +0 -2
- maxframe/tensor/arithmetic/tests/test_arithmetic.py +43 -9
- maxframe/tensor/arithmetic/truediv.py +0 -2
- maxframe/tensor/arithmetic/trunc.py +0 -2
- maxframe/tensor/arithmetic/utils.py +32 -6
- maxframe/tensor/array_utils.py +3 -25
- maxframe/tensor/core.py +6 -6
- maxframe/tensor/datasource/__init__.py +10 -2
- maxframe/tensor/datasource/arange.py +0 -2
- maxframe/tensor/datasource/array.py +3 -22
- maxframe/tensor/datasource/core.py +15 -10
- maxframe/tensor/datasource/diag.py +140 -0
- maxframe/tensor/datasource/diagflat.py +69 -0
- maxframe/tensor/datasource/empty.py +0 -2
- maxframe/tensor/datasource/eye.py +95 -0
- maxframe/tensor/datasource/from_dataframe.py +0 -2
- maxframe/tensor/datasource/from_dense.py +0 -17
- maxframe/tensor/datasource/from_sparse.py +0 -2
- maxframe/tensor/datasource/full.py +0 -2
- maxframe/tensor/datasource/identity.py +54 -0
- maxframe/tensor/datasource/indices.py +115 -0
- maxframe/tensor/datasource/linspace.py +140 -0
- maxframe/tensor/datasource/meshgrid.py +135 -0
- maxframe/tensor/datasource/ones.py +8 -3
- maxframe/tensor/datasource/tests/test_datasource.py +32 -1
- maxframe/tensor/datasource/tri_array.py +107 -0
- maxframe/tensor/datasource/zeros.py +7 -3
- maxframe/tensor/extensions/__init__.py +31 -0
- maxframe/tensor/extensions/accessor.py +25 -0
- maxframe/tensor/extensions/apply_chunk.py +137 -0
- maxframe/tensor/indexing/__init__.py +1 -1
- maxframe/tensor/indexing/choose.py +8 -6
- maxframe/tensor/indexing/compress.py +0 -2
- maxframe/tensor/indexing/extract.py +0 -2
- maxframe/tensor/indexing/fill_diagonal.py +9 -6
- maxframe/tensor/indexing/flatnonzero.py +1 -3
- maxframe/tensor/indexing/getitem.py +10 -43
- maxframe/tensor/indexing/nonzero.py +2 -4
- maxframe/tensor/indexing/setitem.py +19 -9
- maxframe/tensor/indexing/slice.py +6 -3
- maxframe/tensor/indexing/take.py +0 -2
- maxframe/tensor/indexing/tests/__init__.py +0 -2
- maxframe/tensor/indexing/tests/test_indexing.py +0 -2
- maxframe/tensor/indexing/unravel_index.py +6 -6
- maxframe/tensor/lib/__init__.py +16 -0
- maxframe/tensor/lib/index_tricks.py +404 -0
- maxframe/tensor/linalg/__init__.py +36 -0
- maxframe/tensor/linalg/dot.py +145 -0
- maxframe/tensor/linalg/inner.py +36 -0
- maxframe/tensor/linalg/inv.py +83 -0
- maxframe/tensor/linalg/lu.py +115 -0
- maxframe/tensor/linalg/matmul.py +225 -0
- maxframe/tensor/linalg/qr.py +124 -0
- maxframe/tensor/linalg/solve_triangular.py +103 -0
- maxframe/tensor/linalg/svd.py +167 -0
- maxframe/tensor/linalg/tensordot.py +213 -0
- maxframe/tensor/linalg/vdot.py +73 -0
- maxframe/tensor/merge/__init__.py +4 -0
- maxframe/tensor/merge/append.py +74 -0
- maxframe/tensor/merge/column_stack.py +63 -0
- maxframe/tensor/merge/concatenate.py +3 -2
- maxframe/tensor/merge/dstack.py +71 -0
- maxframe/tensor/merge/hstack.py +70 -0
- maxframe/tensor/merge/stack.py +0 -2
- maxframe/tensor/merge/tests/test_merge.py +0 -2
- maxframe/tensor/misc/__init__.py +18 -5
- maxframe/tensor/misc/astype.py +10 -8
- maxframe/tensor/misc/broadcast_to.py +1 -1
- maxframe/tensor/misc/copy.py +64 -0
- maxframe/tensor/misc/diff.py +115 -0
- maxframe/tensor/misc/flatten.py +63 -0
- maxframe/tensor/misc/in1d.py +94 -0
- maxframe/tensor/misc/isin.py +130 -0
- maxframe/tensor/misc/ndim.py +53 -0
- maxframe/tensor/misc/ravel.py +0 -2
- maxframe/tensor/misc/repeat.py +129 -0
- maxframe/tensor/misc/searchsorted.py +147 -0
- maxframe/tensor/misc/setdiff1d.py +58 -0
- maxframe/tensor/misc/squeeze.py +117 -0
- maxframe/tensor/misc/swapaxes.py +113 -0
- maxframe/tensor/misc/tests/test_misc.py +0 -2
- maxframe/tensor/misc/transpose.py +8 -4
- maxframe/tensor/misc/trapezoid.py +123 -0
- maxframe/tensor/misc/unique.py +0 -1
- maxframe/tensor/misc/where.py +10 -8
- maxframe/tensor/operators.py +0 -34
- maxframe/tensor/random/__init__.py +3 -5
- maxframe/tensor/random/binomial.py +0 -2
- maxframe/tensor/random/bytes.py +0 -2
- maxframe/tensor/random/chisquare.py +0 -2
- maxframe/tensor/random/choice.py +9 -8
- maxframe/tensor/random/core.py +20 -5
- maxframe/tensor/random/dirichlet.py +0 -2
- maxframe/tensor/random/exponential.py +0 -2
- maxframe/tensor/random/f.py +2 -4
- maxframe/tensor/random/gamma.py +0 -2
- maxframe/tensor/random/geometric.py +0 -2
- maxframe/tensor/random/gumbel.py +0 -2
- maxframe/tensor/random/hypergeometric.py +0 -2
- maxframe/tensor/random/laplace.py +2 -4
- maxframe/tensor/random/logistic.py +0 -2
- maxframe/tensor/random/lognormal.py +0 -2
- maxframe/tensor/random/logseries.py +0 -2
- maxframe/tensor/random/multinomial.py +0 -2
- maxframe/tensor/random/multivariate_normal.py +0 -2
- maxframe/tensor/random/negative_binomial.py +0 -2
- maxframe/tensor/random/noncentral_chisquare.py +0 -2
- maxframe/tensor/random/noncentral_f.py +1 -3
- maxframe/tensor/random/normal.py +0 -2
- maxframe/tensor/random/pareto.py +0 -2
- maxframe/tensor/random/permutation.py +6 -3
- maxframe/tensor/random/poisson.py +0 -2
- maxframe/tensor/random/power.py +0 -2
- maxframe/tensor/random/rand.py +0 -2
- maxframe/tensor/random/randint.py +0 -2
- maxframe/tensor/random/randn.py +0 -2
- maxframe/tensor/random/random_integers.py +0 -2
- maxframe/tensor/random/random_sample.py +0 -2
- maxframe/tensor/random/rayleigh.py +0 -2
- maxframe/tensor/random/standard_cauchy.py +0 -2
- maxframe/tensor/random/standard_exponential.py +0 -2
- maxframe/tensor/random/standard_gamma.py +0 -2
- maxframe/tensor/random/standard_normal.py +0 -2
- maxframe/tensor/random/standard_t.py +0 -2
- maxframe/tensor/random/tests/__init__.py +0 -2
- maxframe/tensor/random/tests/test_random.py +0 -2
- maxframe/tensor/random/triangular.py +0 -2
- maxframe/tensor/random/uniform.py +0 -2
- maxframe/tensor/random/vonmises.py +0 -2
- maxframe/tensor/random/wald.py +0 -2
- maxframe/tensor/random/weibull.py +0 -2
- maxframe/tensor/random/zipf.py +0 -2
- maxframe/tensor/reduction/__init__.py +0 -2
- maxframe/tensor/reduction/all.py +0 -2
- maxframe/tensor/reduction/allclose.py +0 -2
- maxframe/tensor/reduction/any.py +0 -2
- maxframe/tensor/reduction/argmax.py +1 -3
- maxframe/tensor/reduction/argmin.py +1 -3
- maxframe/tensor/reduction/array_equal.py +0 -2
- maxframe/tensor/reduction/core.py +0 -2
- maxframe/tensor/reduction/count_nonzero.py +0 -2
- maxframe/tensor/reduction/cumprod.py +0 -2
- maxframe/tensor/reduction/cumsum.py +0 -2
- maxframe/tensor/reduction/max.py +0 -2
- maxframe/tensor/reduction/mean.py +0 -2
- maxframe/tensor/reduction/min.py +0 -2
- maxframe/tensor/reduction/nanargmax.py +0 -2
- maxframe/tensor/reduction/nanargmin.py +0 -2
- maxframe/tensor/reduction/nancumprod.py +0 -2
- maxframe/tensor/reduction/nancumsum.py +0 -2
- maxframe/tensor/reduction/nanmax.py +0 -2
- maxframe/tensor/reduction/nanmean.py +0 -2
- maxframe/tensor/reduction/nanmin.py +0 -2
- maxframe/tensor/reduction/nanprod.py +0 -2
- maxframe/tensor/reduction/nanstd.py +0 -2
- maxframe/tensor/reduction/nansum.py +0 -2
- maxframe/tensor/reduction/nanvar.py +0 -2
- maxframe/tensor/reduction/prod.py +0 -2
- maxframe/tensor/reduction/std.py +0 -2
- maxframe/tensor/reduction/sum.py +0 -2
- maxframe/tensor/reduction/tests/test_reduction.py +1 -4
- maxframe/tensor/reduction/var.py +0 -2
- maxframe/tensor/reshape/__init__.py +0 -2
- maxframe/tensor/reshape/reshape.py +6 -5
- maxframe/tensor/reshape/tests/__init__.py +0 -2
- maxframe/tensor/reshape/tests/test_reshape.py +0 -2
- maxframe/tensor/sort/__init__.py +16 -0
- maxframe/tensor/sort/argsort.py +150 -0
- maxframe/tensor/sort/sort.py +295 -0
- maxframe/tensor/special/__init__.py +37 -0
- maxframe/tensor/special/core.py +38 -0
- maxframe/tensor/special/misc.py +142 -0
- maxframe/tensor/special/statistical.py +56 -0
- maxframe/tensor/statistics/__init__.py +5 -0
- maxframe/tensor/statistics/average.py +143 -0
- maxframe/tensor/statistics/bincount.py +133 -0
- maxframe/tensor/statistics/quantile.py +10 -8
- maxframe/tensor/ufunc/__init__.py +0 -2
- maxframe/tensor/ufunc/ufunc.py +0 -2
- maxframe/tensor/utils.py +21 -3
- maxframe/tests/test_protocol.py +3 -3
- maxframe/tests/test_utils.py +210 -1
- maxframe/tests/utils.py +59 -1
- maxframe/udf.py +76 -6
- maxframe/utils.py +418 -17
- {maxframe-1.3.1.dist-info → maxframe-2.0.0.dist-info}/METADATA +4 -1
- maxframe-2.0.0.dist-info/RECORD +939 -0
- {maxframe-1.3.1.dist-info → maxframe-2.0.0.dist-info}/WHEEL +1 -1
- maxframe_client/clients/framedriver.py +19 -3
- maxframe_client/fetcher.py +113 -6
- maxframe_client/session/odps.py +173 -38
- maxframe_client/session/task.py +3 -1
- maxframe_client/tests/test_session.py +41 -5
- maxframe-1.3.1.dist-info/RECORD +0 -705
- {maxframe-1.3.1.dist-info → maxframe-2.0.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
from ....tensor.extensions.apply_chunk import TensorApplyChunk
|
|
18
|
+
from ..core import SPECodeContext, SPEOperatorAdapter, register_op_adapter
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@register_op_adapter(TensorApplyChunk)
|
|
22
|
+
class TensorApplyChunkAdapter(SPEOperatorAdapter):
|
|
23
|
+
def generate_code(self, op: TensorApplyChunk, context: SPECodeContext) -> List[str]:
|
|
24
|
+
input_var = context.get_input_tileable_variable(op.inputs[0])
|
|
25
|
+
output_var = context.get_output_tileable_variable(op.outputs[0])
|
|
26
|
+
func_var = self.translate_var(context, op.func)
|
|
27
|
+
kwargs = op.kwargs.copy()
|
|
28
|
+
if op.with_chunk_index:
|
|
29
|
+
kwargs["chunk_index"] = (0,) * op.inputs[0].ndim
|
|
30
|
+
args = self._translate_call_args(context, *op.args, **kwargs)
|
|
31
|
+
if args:
|
|
32
|
+
args_str = ", " + ", ".join(args)
|
|
33
|
+
else:
|
|
34
|
+
args_str = ""
|
|
35
|
+
return [f"{output_var} = {func_var}({input_var}{args_str})"]
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
from ....tensor.fetch import TensorFetch
|
|
18
|
+
from ..core import SPECodeContext, SPEOperatorAdapter, register_op_adapter
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@register_op_adapter(TensorFetch)
|
|
22
|
+
class TensorFetchAdapter(SPEOperatorAdapter):
|
|
23
|
+
def generate_code(self, op: TensorFetch, context: SPECodeContext) -> List[str]:
|
|
24
|
+
# Simply register Fetch as SPE-executable.
|
|
25
|
+
# Actual codegen is done inside code generator itself.
|
|
26
|
+
return []
|
|
@@ -0,0 +1,63 @@
|
|
|
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
|
+
from ....tensor.indexing import (
|
|
18
|
+
TensorIndex,
|
|
19
|
+
TensorIndexSetValue,
|
|
20
|
+
TensorNonzero,
|
|
21
|
+
TensorUnravelIndex,
|
|
22
|
+
)
|
|
23
|
+
from ..core import SPECodeContext, SPEOperatorAdapter, register_op_adapter
|
|
24
|
+
from ..utils import build_method_call_adapter
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@register_op_adapter(TensorIndex)
|
|
28
|
+
class TensorIndexAdapter(SPEOperatorAdapter):
|
|
29
|
+
def generate_code(self, op: TensorIndex, context: SPECodeContext) -> List[str]:
|
|
30
|
+
context.register_import("numpy", "np")
|
|
31
|
+
indexes_var_name = self.translate_var(context, op.indexes)
|
|
32
|
+
res_var_name = context.get_output_tileable_variable(op.outputs[0])
|
|
33
|
+
input_var_name = context.get_input_tileable_variable(op.inputs[0])
|
|
34
|
+
return [f"{res_var_name} = {input_var_name}[tuple({indexes_var_name})]"]
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@register_op_adapter(TensorIndexSetValue)
|
|
38
|
+
class TensorIndexSetValueAdapter(SPEOperatorAdapter):
|
|
39
|
+
def generate_code(
|
|
40
|
+
self, op: TensorIndexSetValue, context: SPECodeContext
|
|
41
|
+
) -> List[str]:
|
|
42
|
+
context.register_import("numpy", "np")
|
|
43
|
+
indexes_var_name = self.translate_var(context, op.indexes)
|
|
44
|
+
res_var_name = context.get_output_tileable_variable(op.outputs[0])
|
|
45
|
+
input_var_name = context.get_input_tileable_variable(op.inputs[0])
|
|
46
|
+
value_expr = self.translate_var(context, op.value)
|
|
47
|
+
return [
|
|
48
|
+
f"{res_var_name} = {input_var_name}.copy()",
|
|
49
|
+
f"{res_var_name}[tuple({indexes_var_name})] = {value_expr}",
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
TensorNonzeroAdapter = build_method_call_adapter(
|
|
54
|
+
TensorNonzero, "nonzero", 0, source_module="np"
|
|
55
|
+
)
|
|
56
|
+
TensorUnravelIndexAdapter = build_method_call_adapter(
|
|
57
|
+
TensorUnravelIndex,
|
|
58
|
+
"unravel_index",
|
|
59
|
+
0,
|
|
60
|
+
skip_none=True,
|
|
61
|
+
kw_keys=["dims", "order"],
|
|
62
|
+
source_module="np",
|
|
63
|
+
)
|
|
@@ -0,0 +1,63 @@
|
|
|
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
|
+
from ....tensor.linalg import (
|
|
18
|
+
TensorInv,
|
|
19
|
+
TensorLU,
|
|
20
|
+
TensorMatmul,
|
|
21
|
+
TensorQR,
|
|
22
|
+
TensorSolveTriangular,
|
|
23
|
+
TensorSVD,
|
|
24
|
+
TensorTensorDot,
|
|
25
|
+
)
|
|
26
|
+
from ..core import SPECodeContext, SPEOperatorAdapter, register_op_adapter
|
|
27
|
+
from ..utils import build_method_call_adapter
|
|
28
|
+
|
|
29
|
+
TensorInvAdapter = build_method_call_adapter(
|
|
30
|
+
TensorInv, "inv", "input", source_module="npl"
|
|
31
|
+
)
|
|
32
|
+
TensorLUAdapter = build_method_call_adapter(
|
|
33
|
+
TensorLU, "lu", "input", source_module="spl"
|
|
34
|
+
)
|
|
35
|
+
TensorQRAdapter = build_method_call_adapter(TensorQR, "qr", 0, source_module="spl")
|
|
36
|
+
TensorSVDAdapter = build_method_call_adapter(TensorSVD, "svd", 0, source_module="spl")
|
|
37
|
+
TensorMatmulAdapter = build_method_call_adapter(
|
|
38
|
+
TensorMatmul, "matmul", "a", "b", source_module="np", kw_keys=["casting", "order"]
|
|
39
|
+
)
|
|
40
|
+
TensorSolveTriangularAdapter = build_method_call_adapter(
|
|
41
|
+
TensorSolveTriangular,
|
|
42
|
+
"solve_triangular",
|
|
43
|
+
"a",
|
|
44
|
+
"b",
|
|
45
|
+
source_module="spl",
|
|
46
|
+
kw_keys=["lower", "strict"],
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
@register_op_adapter(TensorTensorDot)
|
|
51
|
+
class TensorTensorDotAdapter(SPEOperatorAdapter):
|
|
52
|
+
def generate_code(self, op: TensorTensorDot, context: SPECodeContext) -> List[str]:
|
|
53
|
+
context.register_import("numpy.linalg", "npl")
|
|
54
|
+
|
|
55
|
+
lhs_var_name = context.get_input_tileable_variable(op.inputs[0])
|
|
56
|
+
rhs_var_name = context.get_input_tileable_variable(op.inputs[1])
|
|
57
|
+
res_var_name = context.get_output_tileable_variable(op.outputs[0])
|
|
58
|
+
axes_str = self.generate_call_args_with_attributes(
|
|
59
|
+
op, context, "a_axes", "b_axes"
|
|
60
|
+
)
|
|
61
|
+
return [
|
|
62
|
+
f"{res_var_name} = npl.tensordot({lhs_var_name}, {rhs_var_name}, ({axes_str}))"
|
|
63
|
+
]
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
from ....tensor.core import Tensor
|
|
18
|
+
from ....tensor.merge.concatenate import TensorConcatenate
|
|
19
|
+
from ..core import SPECodeContext, SPEOperatorAdapter, register_op_adapter
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@register_op_adapter(TensorConcatenate)
|
|
23
|
+
class TensorConcatenateAdapter(SPEOperatorAdapter):
|
|
24
|
+
def generate_code(self, op: Tensor, context: SPECodeContext) -> List[str]:
|
|
25
|
+
context.register_import("numpy", "np")
|
|
26
|
+
ndarr_str = ", ".join(context.get_input_tileable_variable(k) for k in op.inputs)
|
|
27
|
+
if len(op.inputs) == 1:
|
|
28
|
+
ndarr_str += ","
|
|
29
|
+
res_var_name = context.get_output_tileable_variable(op.outputs[0])
|
|
30
|
+
axis_var = context.register_operator_constants(op.axis)
|
|
31
|
+
return [f"{res_var_name} = np.concatenate(({ndarr_str}), axis={axis_var})"]
|
|
@@ -0,0 +1,121 @@
|
|
|
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 ....tensor.misc import (
|
|
20
|
+
TensorDiff,
|
|
21
|
+
TensorIsIn,
|
|
22
|
+
TensorRepeat,
|
|
23
|
+
TensorSearchsorted,
|
|
24
|
+
TensorSqueeze,
|
|
25
|
+
TensorSwapAxes,
|
|
26
|
+
TensorTranspose,
|
|
27
|
+
TensorTrapezoid,
|
|
28
|
+
TensorUnique,
|
|
29
|
+
TensorWhere,
|
|
30
|
+
)
|
|
31
|
+
from ..core import SPECodeContext, SPEOperatorAdapter, register_op_adapter
|
|
32
|
+
from ..utils import build_method_call_adapter
|
|
33
|
+
|
|
34
|
+
_trapz_func = "trapezoid" if hasattr(np, "trapezoid") else "trapz"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
TensorDiffAdapter = build_method_call_adapter(
|
|
38
|
+
TensorDiff, "diff", 0, skip_none=True, kw_keys=["n", "axis"], source_module="np"
|
|
39
|
+
)
|
|
40
|
+
TensorIsInAdapter = build_method_call_adapter(
|
|
41
|
+
TensorIsIn,
|
|
42
|
+
"isin",
|
|
43
|
+
0,
|
|
44
|
+
1,
|
|
45
|
+
skip_none=True,
|
|
46
|
+
kw_keys=["assume_unique", "invert"],
|
|
47
|
+
source_module="np",
|
|
48
|
+
)
|
|
49
|
+
TensorRepeatAdapter = build_method_call_adapter(
|
|
50
|
+
TensorRepeat,
|
|
51
|
+
"repeat",
|
|
52
|
+
0,
|
|
53
|
+
skip_none=True,
|
|
54
|
+
kw_keys=["repeats", "axis"],
|
|
55
|
+
source_module="np",
|
|
56
|
+
)
|
|
57
|
+
TensorSearchsortedAdapter = build_method_call_adapter(
|
|
58
|
+
TensorSearchsorted,
|
|
59
|
+
"searchsorted",
|
|
60
|
+
"a",
|
|
61
|
+
"v",
|
|
62
|
+
kw_keys=["side", "sorter"],
|
|
63
|
+
source_module="np",
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
@register_op_adapter(TensorTranspose)
|
|
68
|
+
class TensorTransposeAdapter(SPEOperatorAdapter):
|
|
69
|
+
def generate_code(self, op: TensorTranspose, context: SPECodeContext) -> List[str]:
|
|
70
|
+
context.register_import("numpy", "np")
|
|
71
|
+
input_var_name = context.get_input_tileable_variable(op.inputs[0])
|
|
72
|
+
res_var_name = context.get_output_tileable_variable(op.outputs[0])
|
|
73
|
+
axes_var = self.translate_var(context, op.axes)
|
|
74
|
+
return [f"{res_var_name} = np.transpose({input_var_name}, axes={axes_var})"]
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
TensorTrapezoidAdapter = build_method_call_adapter(
|
|
78
|
+
TensorTrapezoid,
|
|
79
|
+
_trapz_func,
|
|
80
|
+
skip_none=True,
|
|
81
|
+
kw_keys=["y", "x", "dx", "axis"],
|
|
82
|
+
source_module="np",
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
@register_op_adapter(TensorSqueeze)
|
|
87
|
+
class TensorSqueezeAdapter(SPEOperatorAdapter):
|
|
88
|
+
def generate_code(self, op: TensorSqueeze, context: SPECodeContext) -> List[str]:
|
|
89
|
+
context.register_import("numpy", "np")
|
|
90
|
+
input_var_name = context.get_input_tileable_variable(op.inputs[0])
|
|
91
|
+
res_var_name = context.get_output_tileable_variable(op.outputs[0])
|
|
92
|
+
axis_var = self.translate_var(context, op.axis)
|
|
93
|
+
return [f"{res_var_name} = np.squeeze({input_var_name}, axis={axis_var})"]
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
@register_op_adapter(TensorUnique)
|
|
97
|
+
class TensorUniqueAdapter(SPEOperatorAdapter):
|
|
98
|
+
def generate_code(self, op, context):
|
|
99
|
+
context.register_import("numpy", "np")
|
|
100
|
+
input_var_name = context.get_input_tileable_variable(op.inputs[0])
|
|
101
|
+
output_var_names = [
|
|
102
|
+
context.get_output_tileable_variable(out) for out in op.outputs
|
|
103
|
+
]
|
|
104
|
+
return_index_var = self.translate_var(context, op.return_index)
|
|
105
|
+
return_inverse_var = self.translate_var(context, op.return_inverse)
|
|
106
|
+
return_counts_var = self.translate_var(context, op.return_counts)
|
|
107
|
+
axis_var = self.translate_var(context, op.axis)
|
|
108
|
+
return [
|
|
109
|
+
f"{', '.join(output_var_names)} = "
|
|
110
|
+
f"np.unique({input_var_name}, return_index={return_index_var}, "
|
|
111
|
+
f"return_inverse={return_inverse_var}, return_counts={return_counts_var}, "
|
|
112
|
+
f"axis={axis_var})"
|
|
113
|
+
]
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
TensorSwapAxesAdapter = build_method_call_adapter(
|
|
117
|
+
TensorSwapAxes, "swapaxes", "axis1", "axis2", source_module="np"
|
|
118
|
+
)
|
|
119
|
+
TensorWhereAdapter = build_method_call_adapter(
|
|
120
|
+
TensorWhere, "where", "condition", "x", "y", source_module="np"
|
|
121
|
+
)
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
from ....tensor.random.rand import TensorRand
|
|
18
|
+
from ..core import SPECodeContext, SPEOperatorAdapter, register_op_adapter
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@register_op_adapter(TensorRand)
|
|
22
|
+
class TensorRandAdapter(SPEOperatorAdapter):
|
|
23
|
+
def generate_code(self, op: TensorRand, context: SPECodeContext) -> List[str]:
|
|
24
|
+
context.register_import("numpy", "np")
|
|
25
|
+
# Use shape to achieve backward compatibility for 1.0 SDK
|
|
26
|
+
shape = op.size or op.outputs[0].shape
|
|
27
|
+
shape_str = ", ".join(str(x) for x in shape) if shape else ""
|
|
28
|
+
res_var_name = context.get_output_tileable_variable(op.outputs[0])
|
|
29
|
+
return [f"{res_var_name} = np.random.rand({shape_str})"]
|
|
@@ -0,0 +1,39 @@
|
|
|
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
|
+
from ....tensor.reduction.core import TensorCumReduction, TensorReduction
|
|
18
|
+
from ....tensor.reduction.nanvar import TensorNanVar
|
|
19
|
+
from ....tensor.reduction.var import TensorVar
|
|
20
|
+
from ..core import register_op_adapter
|
|
21
|
+
from .core import TensorUnaryCommonAdapter
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@register_op_adapter(TensorReduction)
|
|
25
|
+
class TensorReductionAdapter(TensorUnaryCommonAdapter):
|
|
26
|
+
def _get_op_kw_args(self, op: TensorReduction) -> List[str]:
|
|
27
|
+
return ["axis", "keepdims"]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@register_op_adapter([TensorVar, TensorNanVar])
|
|
31
|
+
class TensorVarAdapter(TensorReductionAdapter):
|
|
32
|
+
def _get_op_kw_args(self, op: TensorReduction) -> List[str]:
|
|
33
|
+
return super()._get_op_kw_args(op) + ["ddof"]
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@register_op_adapter(TensorCumReduction)
|
|
37
|
+
class TensorCumReductionAdapter(TensorUnaryCommonAdapter):
|
|
38
|
+
def _get_op_kw_args(self, op: TensorCumReduction) -> List[str]:
|
|
39
|
+
return ["axis"]
|
|
@@ -0,0 +1,26 @@
|
|
|
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 ....tensor.reshape.reshape import TensorReshape
|
|
16
|
+
from ..utils import build_method_call_adapter
|
|
17
|
+
|
|
18
|
+
TensorReshapeAdapter = build_method_call_adapter(
|
|
19
|
+
TensorReshape,
|
|
20
|
+
"reshape",
|
|
21
|
+
"input",
|
|
22
|
+
"newshape",
|
|
23
|
+
"order",
|
|
24
|
+
skip_none=True,
|
|
25
|
+
source_module="np",
|
|
26
|
+
)
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
from ....tensor.sort.sort import TensorSort
|
|
18
|
+
from ..core import SPECodeContext, SPEOperatorAdapter, register_op_adapter
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@register_op_adapter(TensorSort)
|
|
22
|
+
class TensorSortAdapter(SPEOperatorAdapter):
|
|
23
|
+
def generate_code(self, op: TensorSort, context: SPECodeContext) -> List[str]:
|
|
24
|
+
input_var_name = context.get_input_tileable_variable(op.inputs[0])
|
|
25
|
+
res_var_names = [
|
|
26
|
+
context.get_output_tileable_variable(out) for out in op.outputs
|
|
27
|
+
]
|
|
28
|
+
res_name_iter = iter(res_var_names)
|
|
29
|
+
|
|
30
|
+
axes_str = self.generate_call_args_with_attributes(
|
|
31
|
+
op, context, kw_keys=["axis", "kind", "order"]
|
|
32
|
+
)
|
|
33
|
+
lines = []
|
|
34
|
+
if op.return_value:
|
|
35
|
+
lines.append(
|
|
36
|
+
f"{next(res_name_iter)} = np.sort({input_var_name}, {axes_str})"
|
|
37
|
+
)
|
|
38
|
+
if op.return_indices:
|
|
39
|
+
lines.append(
|
|
40
|
+
f"{next(res_name_iter)} = np.argsort({input_var_name}, {axes_str})"
|
|
41
|
+
)
|
|
42
|
+
return lines
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
from ....tensor.special.core import TensorSpecialUnaryOp
|
|
18
|
+
from ..core import SPECodeContext
|
|
19
|
+
from .core import TensorUnaryCommonAdapter
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class TensorSpecialUnaryOpAdapter(TensorUnaryCommonAdapter):
|
|
23
|
+
@classmethod
|
|
24
|
+
def _gen_func_name(cls, op: TensorSpecialUnaryOp):
|
|
25
|
+
return f"spspecial.{op._func_name}"
|
|
26
|
+
|
|
27
|
+
@classmethod
|
|
28
|
+
def _get_op_kw_args(self, op: TensorSpecialUnaryOp) -> List[str]:
|
|
29
|
+
return []
|
|
30
|
+
|
|
31
|
+
def generate_code(
|
|
32
|
+
self, op: TensorSpecialUnaryOp, context: SPECodeContext
|
|
33
|
+
) -> List[str]:
|
|
34
|
+
context.register_import("scipy.special", "spspecial")
|
|
35
|
+
return super().generate_code(op, context)
|
|
@@ -0,0 +1,24 @@
|
|
|
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 ....tensor.statistics.bincount import TensorBinCount
|
|
16
|
+
from ..utils import build_method_call_adapter
|
|
17
|
+
|
|
18
|
+
TensorBinCountAdapter = build_method_call_adapter(
|
|
19
|
+
TensorBinCount,
|
|
20
|
+
"bincount",
|
|
21
|
+
0,
|
|
22
|
+
kw_keys=["weights", "minlength"],
|
|
23
|
+
source_module="np",
|
|
24
|
+
)
|
|
@@ -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.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Copyright 1999-2025 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from ..... import tensor as mt
|
|
16
|
+
from ...core import SPECodeContext
|
|
17
|
+
from ..arithmetic import (
|
|
18
|
+
TensorAngleAdapter,
|
|
19
|
+
TensorAroundAdapter,
|
|
20
|
+
TensorBinOpAdapter,
|
|
21
|
+
TensorIscloseAdapter,
|
|
22
|
+
TensorSetImagAdapter,
|
|
23
|
+
TensorSetRealAdapter,
|
|
24
|
+
TensorUnaryOpAdapter,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def test_unary_op():
|
|
29
|
+
s1 = mt.random.rand(1000, 5)
|
|
30
|
+
result = mt.sin(s1)
|
|
31
|
+
|
|
32
|
+
adapter = TensorUnaryOpAdapter()
|
|
33
|
+
context = SPECodeContext()
|
|
34
|
+
results = adapter.generate_code(result.op, context)
|
|
35
|
+
expected_results = ["var_1 = np.sin(var_0, casting='same_kind', order='K')"]
|
|
36
|
+
assert results == expected_results
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def test_around():
|
|
40
|
+
s1 = mt.random.rand(1000, 5)
|
|
41
|
+
result = mt.around(s1, 2)
|
|
42
|
+
|
|
43
|
+
adapter = TensorAroundAdapter()
|
|
44
|
+
context = SPECodeContext()
|
|
45
|
+
results = adapter.generate_code(result.op, context)
|
|
46
|
+
expected_results = ["var_1 = np.around(var_0, decimals=2)"]
|
|
47
|
+
assert results == expected_results
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def test_angle():
|
|
51
|
+
s1 = mt.random.rand(1000, 5)
|
|
52
|
+
result = mt.angle(s1, deg=True)
|
|
53
|
+
|
|
54
|
+
adapter = TensorAngleAdapter()
|
|
55
|
+
context = SPECodeContext()
|
|
56
|
+
results = adapter.generate_code(result.op, context)
|
|
57
|
+
expected_results = ["var_1 = np.angle(var_0, deg=True)"]
|
|
58
|
+
assert results == expected_results
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def test_binary_op():
|
|
62
|
+
s1 = mt.random.rand(1000, 5)
|
|
63
|
+
s2 = mt.random.rand(1000, 5)
|
|
64
|
+
result = s1 + s2
|
|
65
|
+
|
|
66
|
+
adapter = TensorBinOpAdapter()
|
|
67
|
+
context = SPECodeContext()
|
|
68
|
+
results = adapter.generate_code(result.op, context)
|
|
69
|
+
expected_results = ["var_2 = np.add(var_0, var_1, casting='same_kind', order='K')"]
|
|
70
|
+
assert results == expected_results
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def test_isclose():
|
|
74
|
+
s1 = mt.random.rand(10, 5)
|
|
75
|
+
s2 = mt.random.rand(10, 5)
|
|
76
|
+
result = mt.isclose(s1, s2, rtol=0.1, atol=0.2)
|
|
77
|
+
adapter = TensorIscloseAdapter()
|
|
78
|
+
context = SPECodeContext()
|
|
79
|
+
results = adapter.generate_code(result.op, context)
|
|
80
|
+
expected_results = [
|
|
81
|
+
"var_2 = np.isclose(var_0, var_1, equal_nan=False, rtol=0.1, atol=0.2)"
|
|
82
|
+
]
|
|
83
|
+
assert results == expected_results
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def test_set_imag():
|
|
87
|
+
a = mt.array([1 + 2j, 3 + 4j, 5 + 6j])
|
|
88
|
+
a.imag = mt.array([8, 10, 12])
|
|
89
|
+
adapter = TensorSetImagAdapter()
|
|
90
|
+
context = SPECodeContext()
|
|
91
|
+
results = adapter.generate_code(a.op, context)
|
|
92
|
+
expected_results = ["var_0.imag = var_1", "var_2 = var_0"]
|
|
93
|
+
assert results == expected_results
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def test_set_real():
|
|
97
|
+
a = mt.array([1 + 2j, 3 + 4j, 5 + 6j])
|
|
98
|
+
a.real = mt.array([8, 10, 12])
|
|
99
|
+
adapter = TensorSetRealAdapter()
|
|
100
|
+
context = SPECodeContext()
|
|
101
|
+
results = adapter.generate_code(a.op, context)
|
|
102
|
+
expected_results = ["var_0.real = var_1", "var_2 = var_0"]
|
|
103
|
+
assert results == expected_results
|