maxframe 1.3.0__cp310-cp310-win32.whl → 2.0.0__cp310-cp310-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/_utils.cp310-win32.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.cp310-win32.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 +62 -9
- 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 +128 -3
- maxframe/dataframe/reduction/core.py +20 -6
- 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/llm/models/dashscope.py +34 -0
- maxframe/learn/contrib/llm/models/managed.py +15 -0
- maxframe/learn/contrib/llm/multi_modal.py +92 -0
- maxframe/learn/contrib/llm/text.py +21 -5
- 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 +13 -8
- 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.cp310-win32.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.cp310-win32.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.0.dist-info → maxframe-2.0.0.dist-info}/METADATA +5 -1
- maxframe-2.0.0.dist-info/RECORD +939 -0
- {maxframe-1.3.0.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.0.dist-info/RECORD +0 -705
- {maxframe-1.3.0.dist-info → maxframe-2.0.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Copyright 1999-2025 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import pytest
|
|
16
|
+
|
|
17
|
+
from ..... import tensor as mt
|
|
18
|
+
from ...core import SPECodeContext
|
|
19
|
+
from ..datasource import (
|
|
20
|
+
TensorArangeAdapter,
|
|
21
|
+
TensorEmptyAdapter,
|
|
22
|
+
TensorFullAdapter,
|
|
23
|
+
TensorOnesZerosAdapter,
|
|
24
|
+
TensorOnesZerosLikeAdapter,
|
|
25
|
+
TensorTriArrayAdapter,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def test_arange():
|
|
30
|
+
s1 = mt.arange(10)
|
|
31
|
+
adapter = TensorArangeAdapter()
|
|
32
|
+
context = SPECodeContext()
|
|
33
|
+
results = adapter.generate_code(s1.op, context)
|
|
34
|
+
expected_results = [
|
|
35
|
+
"var_0 = np.arange(const_0, const_1, const_2, dtype=np.dtype('int64'))"
|
|
36
|
+
]
|
|
37
|
+
assert results == expected_results
|
|
38
|
+
assert [context.constants[f"const_{i}"] for i in range(3)] == [0, 10, 1]
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def test_empty():
|
|
42
|
+
s1 = mt.empty((100, 100))
|
|
43
|
+
adapter = TensorEmptyAdapter()
|
|
44
|
+
context = SPECodeContext()
|
|
45
|
+
results = adapter.generate_code(s1.op, context)
|
|
46
|
+
expected_results = ["var_0 = np.empty((100, 100), dtype=const_0, order='C')"]
|
|
47
|
+
assert results == expected_results
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def test_full():
|
|
51
|
+
s1 = mt.full((100, 100), 1)
|
|
52
|
+
adapter = TensorFullAdapter()
|
|
53
|
+
context = SPECodeContext()
|
|
54
|
+
results = adapter.generate_code(s1.op, context)
|
|
55
|
+
expected_results = [
|
|
56
|
+
"var_0 = np.full((100, 100), 1, dtype=np.dtype('int64'), order='C')"
|
|
57
|
+
]
|
|
58
|
+
assert results == expected_results
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
@pytest.mark.parametrize("method", ["triu", "tril"])
|
|
62
|
+
def test_tri_array(method):
|
|
63
|
+
s1 = mt.random.rand(20, 20)
|
|
64
|
+
adapter = TensorTriArrayAdapter()
|
|
65
|
+
s3 = getattr(mt, method)(s1, k=1)
|
|
66
|
+
context = SPECodeContext()
|
|
67
|
+
results = adapter.generate_code(s3.op, context)
|
|
68
|
+
expected_results = [f"var_1 = np.{method}(var_0, k=1)"]
|
|
69
|
+
assert results == expected_results
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
@pytest.mark.parametrize("method", ["ones", "zeros"])
|
|
73
|
+
def test_ones_zeros(method):
|
|
74
|
+
s1 = getattr(mt, method)((1000, 5), order="F")
|
|
75
|
+
adapter = TensorOnesZerosAdapter()
|
|
76
|
+
context = SPECodeContext()
|
|
77
|
+
results = adapter.generate_code(s1.op, context)
|
|
78
|
+
expected_results = [f"var_0 = np.{method}((1000, 5), dtype=const_0, order='F')"]
|
|
79
|
+
assert results == expected_results
|
|
80
|
+
|
|
81
|
+
s2 = getattr(mt, method)((1000,), order="F")
|
|
82
|
+
adapter = TensorOnesZerosAdapter()
|
|
83
|
+
context = SPECodeContext()
|
|
84
|
+
results = adapter.generate_code(s2.op, context)
|
|
85
|
+
expected_results = [f"var_0 = np.{method}((1000,), dtype=const_0, order='F')"]
|
|
86
|
+
assert results == expected_results
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
@pytest.mark.parametrize("method", ["ones_like", "zeros_like"])
|
|
90
|
+
def test_ones_zeros_like(method):
|
|
91
|
+
data = mt.tensor([[2, 0, 0], [0, 0, 2]])
|
|
92
|
+
s1 = getattr(mt, method)(data, order="F")
|
|
93
|
+
adapter = TensorOnesZerosLikeAdapter()
|
|
94
|
+
context = SPECodeContext()
|
|
95
|
+
results = adapter.generate_code(s1.op, context)
|
|
96
|
+
expected_results = [
|
|
97
|
+
f"var_1 = np.{method}(var_0, dtype=const_0, order='F', shape=(2, 3))"
|
|
98
|
+
]
|
|
99
|
+
assert results == expected_results
|
|
@@ -0,0 +1,37 @@
|
|
|
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 ..extensions import TensorApplyChunkAdapter
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_tensor_apply_chunk():
|
|
21
|
+
s1 = mt.random.rand(10, 20, 30)
|
|
22
|
+
|
|
23
|
+
adapter = TensorApplyChunkAdapter()
|
|
24
|
+
|
|
25
|
+
result = s1.mf.apply_chunk(lambda x: x + 1)
|
|
26
|
+
context = SPECodeContext()
|
|
27
|
+
results = adapter.generate_code(result.op, context)
|
|
28
|
+
expected_results = [f"var_1 = {context.get_udfs()[0].name}(var_0)"]
|
|
29
|
+
assert results == expected_results
|
|
30
|
+
|
|
31
|
+
result = s1.mf.apply_chunk(lambda x, chunk_index: x + 1, with_chunk_index=True)
|
|
32
|
+
context = SPECodeContext()
|
|
33
|
+
results = adapter.generate_code(result.op, context)
|
|
34
|
+
expected_results = [
|
|
35
|
+
f"var_1 = {context.get_udfs()[0].name}(var_0, chunk_index=(0, 0, 0))"
|
|
36
|
+
]
|
|
37
|
+
assert results == expected_results
|
|
@@ -0,0 +1,44 @@
|
|
|
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 ..indexing import TensorIndexAdapter, TensorIndexSetValueAdapter
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_getitem():
|
|
21
|
+
s1 = mt.random.rand(10, 20, 30)
|
|
22
|
+
result = s1[:, 1, 2:3]
|
|
23
|
+
|
|
24
|
+
adapter = TensorIndexAdapter()
|
|
25
|
+
context = SPECodeContext()
|
|
26
|
+
results = adapter.generate_code(result.op, context)
|
|
27
|
+
expected_results = [
|
|
28
|
+
"var_0 = var_1[tuple([slice(None, None, None), 1, slice(2, 3, None)])]"
|
|
29
|
+
]
|
|
30
|
+
assert results == expected_results
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def test_setitem():
|
|
34
|
+
s1 = mt.random.rand(10, 20, 30)
|
|
35
|
+
s1[:, 1, 2:3] = 1.0
|
|
36
|
+
|
|
37
|
+
adapter = TensorIndexSetValueAdapter()
|
|
38
|
+
context = SPECodeContext()
|
|
39
|
+
results = adapter.generate_code(s1.op, context)
|
|
40
|
+
expected_results = [
|
|
41
|
+
"var_0 = var_1.copy()",
|
|
42
|
+
"var_0[tuple((slice(None, None, None), 1, slice(2, 3, None)))] = 1.0",
|
|
43
|
+
]
|
|
44
|
+
assert results == expected_results
|
|
@@ -0,0 +1,38 @@
|
|
|
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 ..linalg import TensorQRAdapter, TensorTensorDotAdapter
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_qr():
|
|
21
|
+
a = mt.random.randn(9, 6)
|
|
22
|
+
adapter = TensorQRAdapter()
|
|
23
|
+
q, r = mt.linalg.qr(a)
|
|
24
|
+
context = SPECodeContext()
|
|
25
|
+
results = adapter.generate_code(q.op, context)
|
|
26
|
+
expected_results = ["var_0, var_1 = spl.qr(var_2)"]
|
|
27
|
+
assert results == expected_results
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def test_tensordot():
|
|
31
|
+
s1 = mt.arange(60).reshape(3, 4, 5)
|
|
32
|
+
s2 = mt.arange(24).reshape(4, 3, 2)
|
|
33
|
+
adapter = TensorTensorDotAdapter()
|
|
34
|
+
s3 = mt.tensordot(s1, s2, axes=([1, 0], [0, 1]))
|
|
35
|
+
context = SPECodeContext()
|
|
36
|
+
results = adapter.generate_code(s3.op, context)
|
|
37
|
+
expected_results = ["var_2 = npl.tensordot(var_0, var_1, ((1, 0), (0, 1)))"]
|
|
38
|
+
assert results == expected_results
|
|
@@ -0,0 +1,28 @@
|
|
|
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 ..merge import TensorConcatenateAdapter
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_concatenate():
|
|
21
|
+
s1 = mt.random.rand(1000, 5)
|
|
22
|
+
s2 = mt.random.rand(1000, 5)
|
|
23
|
+
adapter = TensorConcatenateAdapter()
|
|
24
|
+
s3 = mt.concatenate([s1, s2], axis=1)
|
|
25
|
+
context = SPECodeContext()
|
|
26
|
+
results = adapter.generate_code(s3.op, context)
|
|
27
|
+
expected_results = ["var_2 = np.concatenate((var_0, var_1), axis=1)"]
|
|
28
|
+
assert results == expected_results
|
|
@@ -0,0 +1,94 @@
|
|
|
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 ..misc import (
|
|
18
|
+
TensorIsInAdapter,
|
|
19
|
+
TensorSqueezeAdapter,
|
|
20
|
+
TensorTransposeAdapter,
|
|
21
|
+
TensorUniqueAdapter,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def test_isin():
|
|
26
|
+
result = mt.isin(2 * mt.arange(4).reshape((2, 2)), [1, 2, 4, 8])
|
|
27
|
+
|
|
28
|
+
adapter = TensorIsInAdapter()
|
|
29
|
+
context = SPECodeContext()
|
|
30
|
+
results = adapter.generate_code(result.op, context)
|
|
31
|
+
expected_results = [
|
|
32
|
+
"var_0 = np.isin(var_1, var_2, assume_unique=False, invert=False)"
|
|
33
|
+
]
|
|
34
|
+
assert results == expected_results
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def test_transpose():
|
|
38
|
+
result = mt.transpose(mt.ones((1, 2, 3)), (1, 0, 2))
|
|
39
|
+
|
|
40
|
+
adapter = TensorTransposeAdapter()
|
|
41
|
+
context = SPECodeContext()
|
|
42
|
+
results = adapter.generate_code(result.op, context)
|
|
43
|
+
expected_results = ["var_1 = np.transpose(var_0, axes=[1, 0, 2])"]
|
|
44
|
+
assert results == expected_results
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def test_squeeze():
|
|
48
|
+
result = mt.squeeze(mt.ones((1, 2, 3)), axis=0)
|
|
49
|
+
|
|
50
|
+
adapter = TensorSqueezeAdapter()
|
|
51
|
+
context = SPECodeContext()
|
|
52
|
+
results = adapter.generate_code(result.op, context)
|
|
53
|
+
expected_results = ["var_1 = np.squeeze(var_0, axis=(0,))"]
|
|
54
|
+
assert results == expected_results
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def test_unique():
|
|
58
|
+
tensor = mt.unique([1, 1])
|
|
59
|
+
adapter = TensorUniqueAdapter()
|
|
60
|
+
context = SPECodeContext()
|
|
61
|
+
results = adapter.generate_code(tensor.op, context)
|
|
62
|
+
expected_results = [
|
|
63
|
+
"var_1 = np.unique(var_0, return_index=False, return_inverse=False, return_counts=False, axis=0)"
|
|
64
|
+
]
|
|
65
|
+
assert results == expected_results
|
|
66
|
+
|
|
67
|
+
tensor = mt.unique([1, 1], return_index=True)
|
|
68
|
+
context = SPECodeContext()
|
|
69
|
+
results = adapter.generate_code(tensor[0].op, context)
|
|
70
|
+
expected_results = [
|
|
71
|
+
"var_1, var_2 = "
|
|
72
|
+
"np.unique(var_0, return_index=True, return_inverse=False, return_counts=False, axis=0)"
|
|
73
|
+
]
|
|
74
|
+
assert results == expected_results
|
|
75
|
+
|
|
76
|
+
tensor = mt.unique([1, 1], return_index=True, return_inverse=True)
|
|
77
|
+
context = SPECodeContext()
|
|
78
|
+
results = adapter.generate_code(tensor[0].op, context)
|
|
79
|
+
expected_results = [
|
|
80
|
+
"var_1, var_2, var_3 = "
|
|
81
|
+
"np.unique(var_0, return_index=True, return_inverse=True, return_counts=False, axis=0)"
|
|
82
|
+
]
|
|
83
|
+
assert results == expected_results
|
|
84
|
+
|
|
85
|
+
tensor = mt.unique(
|
|
86
|
+
[1, 1], return_index=True, return_inverse=True, return_counts=True
|
|
87
|
+
)
|
|
88
|
+
context = SPECodeContext()
|
|
89
|
+
results = adapter.generate_code(tensor[0].op, context)
|
|
90
|
+
expected_results = [
|
|
91
|
+
"var_1, var_2, var_3, var_4 = "
|
|
92
|
+
"np.unique(var_0, return_index=True, return_inverse=True, return_counts=True, axis=0)"
|
|
93
|
+
]
|
|
94
|
+
assert results == expected_results
|
|
@@ -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 ..... import tensor as mt
|
|
16
|
+
from ...core import SPECodeContext
|
|
17
|
+
from ..random import TensorRandAdapter
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_rand_multi_dimension():
|
|
21
|
+
s1 = mt.random.rand(1000, 5)
|
|
22
|
+
adapter = TensorRandAdapter()
|
|
23
|
+
context = SPECodeContext()
|
|
24
|
+
results = adapter.generate_code(s1.op, context)
|
|
25
|
+
expected_results = ["var_0 = np.random.rand(1000, 5)"]
|
|
26
|
+
assert results == expected_results
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def test_rand_no_dimension():
|
|
30
|
+
s1 = mt.random.rand()
|
|
31
|
+
adapter = TensorRandAdapter()
|
|
32
|
+
context = SPECodeContext()
|
|
33
|
+
results = adapter.generate_code(s1.op, context)
|
|
34
|
+
expected_results = ["var_0 = np.random.rand()"]
|
|
35
|
+
assert results == expected_results
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def test_rand_backward_compatibility_multi_dimension():
|
|
39
|
+
s1 = mt.random.rand(10, 5, 20)
|
|
40
|
+
s1.op.size = None
|
|
41
|
+
adapter = TensorRandAdapter()
|
|
42
|
+
context = SPECodeContext()
|
|
43
|
+
results = adapter.generate_code(s1.op, context)
|
|
44
|
+
expected_results = ["var_0 = np.random.rand(10, 5, 20)"]
|
|
45
|
+
assert results == expected_results
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_rand_backward_compatibility_no_dimension():
|
|
49
|
+
s1 = mt.random.rand()
|
|
50
|
+
s1.op.size = None
|
|
51
|
+
adapter = TensorRandAdapter()
|
|
52
|
+
context = SPECodeContext()
|
|
53
|
+
results = adapter.generate_code(s1.op, context)
|
|
54
|
+
expected_results = ["var_0 = np.random.rand()"]
|
|
55
|
+
assert results == expected_results
|
|
@@ -0,0 +1,65 @@
|
|
|
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 ..reduction import (
|
|
18
|
+
TensorCumReductionAdapter,
|
|
19
|
+
TensorReductionAdapter,
|
|
20
|
+
TensorVarAdapter,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def test_reduction():
|
|
25
|
+
s1 = mt.random.rand(1000, 5)
|
|
26
|
+
result = mt.argmax(s1, axis=1)
|
|
27
|
+
|
|
28
|
+
adapter = TensorReductionAdapter()
|
|
29
|
+
context = SPECodeContext()
|
|
30
|
+
results = adapter.generate_code(result.op, context)
|
|
31
|
+
expected_results = ["var_1 = np.argmax(var_0, axis=1)"]
|
|
32
|
+
assert results == expected_results
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def test_cum_reduction():
|
|
36
|
+
s1 = mt.random.rand(1000, 5)
|
|
37
|
+
result = mt.cumsum(s1, axis=1)
|
|
38
|
+
|
|
39
|
+
adapter = TensorCumReductionAdapter()
|
|
40
|
+
context = SPECodeContext()
|
|
41
|
+
results = adapter.generate_code(result.op, context)
|
|
42
|
+
expected_results = ["var_1 = np.cumsum(var_0, axis=1)"]
|
|
43
|
+
assert results == expected_results
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def test_var():
|
|
47
|
+
s1 = mt.random.rand(1000, 5)
|
|
48
|
+
result = mt.var(s1, ddof=0.1)
|
|
49
|
+
|
|
50
|
+
adapter = TensorVarAdapter()
|
|
51
|
+
context = SPECodeContext()
|
|
52
|
+
results = adapter.generate_code(result.op, context)
|
|
53
|
+
expected_results = ["var_1 = np.var(var_0, ddof=0.1)"]
|
|
54
|
+
assert results == expected_results
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def test_nanvar():
|
|
58
|
+
s1 = mt.random.rand(1000, 5)
|
|
59
|
+
result = mt.nanvar(s1, ddof=0.1)
|
|
60
|
+
|
|
61
|
+
adapter = TensorVarAdapter()
|
|
62
|
+
context = SPECodeContext()
|
|
63
|
+
results = adapter.generate_code(result.op, context)
|
|
64
|
+
expected_results = ["var_1 = np.nanvar(var_0, ddof=0.1)"]
|
|
65
|
+
assert results == expected_results
|
|
@@ -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 ..... import tensor as mt
|
|
16
|
+
from ...core import SPECodeContext
|
|
17
|
+
from ..reshape import TensorReshapeAdapter
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_reshape_C():
|
|
21
|
+
t1 = mt.arange(6).reshape((3, 2))
|
|
22
|
+
t2 = mt.reshape(t1, (2, 3))
|
|
23
|
+
adapter = TensorReshapeAdapter()
|
|
24
|
+
context = SPECodeContext()
|
|
25
|
+
context.get_input_tileable_variable(t1.op.outputs[0])
|
|
26
|
+
results = adapter.generate_code(t2.op, context)
|
|
27
|
+
expected_results = ["var_1 = np.reshape(var_0, (2, 3), 'C')"]
|
|
28
|
+
assert results == expected_results
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def test_reshape_F():
|
|
32
|
+
t1 = mt.arange(6).reshape((3, 2))
|
|
33
|
+
t2 = mt.reshape(t1, (2, 3), "F")
|
|
34
|
+
adapter = TensorReshapeAdapter()
|
|
35
|
+
context = SPECodeContext()
|
|
36
|
+
context.get_input_tileable_variable(t1.op.outputs[0])
|
|
37
|
+
results = adapter.generate_code(t2.op, context)
|
|
38
|
+
expected_results = ["var_1 = np.reshape(var_0, (2, 3), 'F')"]
|
|
39
|
+
assert results == expected_results
|
|
@@ -0,0 +1,49 @@
|
|
|
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 ..sort import TensorSortAdapter
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_sort():
|
|
21
|
+
t1 = mt.array([1, 4, 5, 3])
|
|
22
|
+
t2 = mt.sort(t1, stable=True)
|
|
23
|
+
adapter = TensorSortAdapter()
|
|
24
|
+
context = SPECodeContext()
|
|
25
|
+
context.get_input_tileable_variable(t1.op.outputs[0])
|
|
26
|
+
results = adapter.generate_code(t2.op, context)
|
|
27
|
+
expected_results = ["var_1 = np.sort(var_0, axis=0, kind='STABLE', order=None)"]
|
|
28
|
+
assert results == expected_results
|
|
29
|
+
|
|
30
|
+
t2, t3 = mt.sort(t1, stable=True, return_index=True)
|
|
31
|
+
adapter = TensorSortAdapter()
|
|
32
|
+
context = SPECodeContext()
|
|
33
|
+
context.get_input_tileable_variable(t1.op.outputs[0])
|
|
34
|
+
results = adapter.generate_code(t2.op, context)
|
|
35
|
+
expected_results = [
|
|
36
|
+
"var_1 = np.sort(var_0, axis=0, kind='STABLE', order=None)",
|
|
37
|
+
"var_2 = np.argsort(var_0, axis=0, kind='STABLE', order=None)",
|
|
38
|
+
]
|
|
39
|
+
assert results == expected_results
|
|
40
|
+
|
|
41
|
+
t2 = mt.argsort(t1, stable=True)
|
|
42
|
+
adapter = TensorSortAdapter()
|
|
43
|
+
context = SPECodeContext()
|
|
44
|
+
context.get_input_tileable_variable(t1.op.outputs[0])
|
|
45
|
+
results = adapter.generate_code(t2.op, context)
|
|
46
|
+
expected_results = [
|
|
47
|
+
"var_1 = np.argsort(var_0, axis=0, kind='STABLE', order=None)",
|
|
48
|
+
]
|
|
49
|
+
assert results == expected_results
|
|
@@ -0,0 +1,28 @@
|
|
|
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 .....tensor.special import expit
|
|
17
|
+
from ...core import SPECodeContext
|
|
18
|
+
from ..special import TensorSpecialUnaryOpAdapter
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def test_special_unary():
|
|
22
|
+
result = expit(mt.random.rand(10, 10))
|
|
23
|
+
|
|
24
|
+
adapter = TensorSpecialUnaryOpAdapter()
|
|
25
|
+
context = SPECodeContext()
|
|
26
|
+
results = adapter.generate_code(result.op, context)
|
|
27
|
+
expected_results = ["var_1 = spspecial.expit(var_0)"]
|
|
28
|
+
assert results == expected_results
|
|
@@ -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 ..... import tensor as mt
|
|
16
|
+
from ...core import SPECodeContext
|
|
17
|
+
from ..statistics import TensorBinCountAdapter
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_bincount():
|
|
21
|
+
w = mt.array([0.3, 0.5, 0.2, 0.7, 1.0, -0.6]) # weights
|
|
22
|
+
x = mt.array([0, 1, 1, 2, 2, 2])
|
|
23
|
+
result = mt.bincount(x, weights=w)
|
|
24
|
+
|
|
25
|
+
adapter = TensorBinCountAdapter()
|
|
26
|
+
context = SPECodeContext()
|
|
27
|
+
results = adapter.generate_code(result.op, context)
|
|
28
|
+
expected_results = ["var_0 = np.bincount(var_1, weights=var_2, minlength=0)"]
|
|
29
|
+
assert results == expected_results
|
|
@@ -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,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 .... import remote as mr
|
|
16
|
+
from ..core import SPECodeContext
|
|
17
|
+
from ..remote import RemoteFunctionAdapter
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_remote():
|
|
21
|
+
def f(v1, v2):
|
|
22
|
+
return v1 + v2
|
|
23
|
+
|
|
24
|
+
v0 = mr.spawn(f, (2, 3))
|
|
25
|
+
v1 = mr.spawn(f, (v0, 10))
|
|
26
|
+
context = SPECodeContext()
|
|
27
|
+
results = RemoteFunctionAdapter().generate_code(v1.op, context)
|
|
28
|
+
assert callable(context.constants["const_0"])
|
|
29
|
+
assert results[0] == "var_1 = const_0(var_0, 10)"
|