maxframe 1.3.0__cp37-cp37m-win_amd64.whl → 2.0.0b1__cp37-cp37m-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.cp37-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.cp37-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 +33 -3
- maxframe/dataframe/datasource/read_odps_table.py +20 -5
- maxframe/dataframe/datasource/read_parquet.py +8 -3
- maxframe/dataframe/datasource/tests/test_datasource.py +33 -0
- 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 +8 -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 +22 -48
- 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 +53 -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.cp37-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.cp37-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 +67 -1
- maxframe/udf.py +76 -6
- maxframe/utils.py +418 -17
- {maxframe-1.3.0.dist-info → maxframe-2.0.0b1.dist-info}/METADATA +5 -1
- maxframe-2.0.0b1.dist-info/RECORD +939 -0
- 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.0b1.dist-info}/WHEEL +0 -0
- {maxframe-1.3.0.dist-info → maxframe-2.0.0b1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,70 @@
|
|
|
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 .concatenate import concatenate
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def hstack(tup):
|
|
19
|
+
"""
|
|
20
|
+
Stack tensors in sequence horizontally (column wise).
|
|
21
|
+
|
|
22
|
+
This is equivalent to concatenation along the second axis, except for 1-D
|
|
23
|
+
tensors where it concatenates along the first axis. Rebuilds tensors divided
|
|
24
|
+
by `hsplit`.
|
|
25
|
+
|
|
26
|
+
This function makes most sense for tensors with up to 3 dimensions. For
|
|
27
|
+
instance, for pixel-data with a height (first axis), width (second axis),
|
|
28
|
+
and r/g/b channels (third axis). The functions `concatenate`, `stack` and
|
|
29
|
+
`block` provide more general stacking and concatenation operations.
|
|
30
|
+
|
|
31
|
+
Parameters
|
|
32
|
+
----------
|
|
33
|
+
tup : sequence of tensors
|
|
34
|
+
The tensors must have the same shape along all but the second axis,
|
|
35
|
+
except 1-D tensors which can be any length.
|
|
36
|
+
|
|
37
|
+
Returns
|
|
38
|
+
-------
|
|
39
|
+
stacked : Tensor
|
|
40
|
+
The tensor formed by stacking the given tensors.
|
|
41
|
+
|
|
42
|
+
See Also
|
|
43
|
+
--------
|
|
44
|
+
stack : Join a sequence of tensors along a new axis.
|
|
45
|
+
vstack : Stack tensors in sequence vertically (row wise).
|
|
46
|
+
dstack : Stack tensors in sequence depth wise (along third axis).
|
|
47
|
+
concatenate : Join a sequence of tensors along an existing axis.
|
|
48
|
+
hsplit : Split tensor along second axis.
|
|
49
|
+
block : Assemble tensors from blocks.
|
|
50
|
+
|
|
51
|
+
Examples
|
|
52
|
+
--------
|
|
53
|
+
>>> import maxframe.tensor as mt
|
|
54
|
+
|
|
55
|
+
>>> a = mt.array((1,2,3))
|
|
56
|
+
>>> b = mt.array((2,3,4))
|
|
57
|
+
>>> mt.hstack((a,b)).execute()
|
|
58
|
+
array([1, 2, 3, 2, 3, 4])
|
|
59
|
+
>>> a = mt.array([[1],[2],[3]])
|
|
60
|
+
>>> b = mt.array([[2],[3],[4]])
|
|
61
|
+
>>> mt.hstack((a,b)).execute()
|
|
62
|
+
array([[1, 2],
|
|
63
|
+
[2, 3],
|
|
64
|
+
[3, 4]])
|
|
65
|
+
|
|
66
|
+
"""
|
|
67
|
+
if all(x.ndim == 1 for x in tup):
|
|
68
|
+
return concatenate(tup, axis=0)
|
|
69
|
+
else:
|
|
70
|
+
return concatenate(tup, axis=1)
|
maxframe/tensor/merge/stack.py
CHANGED
maxframe/tensor/misc/__init__.py
CHANGED
|
@@ -12,23 +12,36 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
from .astype import TensorAstype
|
|
15
|
+
from .astype import TensorAstype, astype
|
|
16
16
|
from .atleast_1d import atleast_1d
|
|
17
17
|
from .atleast_2d import atleast_2d
|
|
18
18
|
from .atleast_3d import atleast_3d
|
|
19
19
|
from .broadcast_to import TensorBroadcastTo, broadcast_to
|
|
20
|
+
from .copy import copy
|
|
21
|
+
from .diff import TensorDiff, diff
|
|
22
|
+
from .flatten import flatten
|
|
23
|
+
from .in1d import in1d
|
|
24
|
+
from .isin import TensorIsIn, isin
|
|
25
|
+
from .ndim import ndim
|
|
20
26
|
from .ravel import ravel
|
|
21
|
-
from .
|
|
22
|
-
from .
|
|
27
|
+
from .repeat import TensorRepeat, repeat
|
|
28
|
+
from .searchsorted import TensorSearchsorted, searchsorted
|
|
29
|
+
from .setdiff1d import setdiff1d
|
|
30
|
+
from .squeeze import TensorSqueeze, squeeze
|
|
31
|
+
from .swapaxes import TensorSwapAxes, swapaxes
|
|
32
|
+
from .transpose import TensorTranspose, transpose
|
|
33
|
+
from .trapezoid import TensorTrapezoid, trapezoid
|
|
34
|
+
from .unique import TensorUnique, unique
|
|
23
35
|
from .where import TensorWhere, where
|
|
24
36
|
|
|
25
37
|
|
|
26
38
|
def _install():
|
|
27
39
|
from ..core import Tensor, TensorData
|
|
28
|
-
from .astype import _astype
|
|
29
40
|
|
|
30
41
|
for cls in (Tensor, TensorData):
|
|
31
|
-
setattr(cls, "astype",
|
|
42
|
+
setattr(cls, "astype", astype)
|
|
43
|
+
setattr(cls, "flatten", flatten)
|
|
44
|
+
setattr(cls, "swapaxes", swapaxes)
|
|
32
45
|
setattr(cls, "ravel", ravel)
|
|
33
46
|
|
|
34
47
|
|
maxframe/tensor/misc/astype.py
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env python
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
1
|
# Copyright 1999-2025 Alibaba Group Holding Ltd.
|
|
4
2
|
#
|
|
5
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -14,11 +12,14 @@
|
|
|
14
12
|
# See the License for the specific language governing permissions and
|
|
15
13
|
# limitations under the License.
|
|
16
14
|
|
|
15
|
+
from typing import List
|
|
16
|
+
|
|
17
17
|
import numpy as np
|
|
18
18
|
|
|
19
19
|
from ... import opcodes
|
|
20
|
+
from ...core import EntityData
|
|
20
21
|
from ...serialization.serializables import KeyField, StringField
|
|
21
|
-
from ...utils import
|
|
22
|
+
from ...utils import make_dtype
|
|
22
23
|
from ..operators import TensorHasInput, TensorOperatorMixin
|
|
23
24
|
from ..utils import get_order
|
|
24
25
|
|
|
@@ -33,15 +34,16 @@ class TensorAstype(TensorHasInput, TensorOperatorMixin):
|
|
|
33
34
|
def __init__(self, dtype=None, sparse=False, **kw):
|
|
34
35
|
super().__init__(dtype=dtype, sparse=sparse, **kw)
|
|
35
36
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
@classmethod
|
|
38
|
+
def _set_inputs(cls, op: "TensorAstype", inputs: List[EntityData]):
|
|
39
|
+
super()._set_inputs(op, inputs)
|
|
40
|
+
op._input = op._inputs[0]
|
|
39
41
|
|
|
40
42
|
def __call__(self, tensor, order=None):
|
|
41
43
|
return self.new_tensor([tensor], tensor.shape, order=order)
|
|
42
44
|
|
|
43
45
|
|
|
44
|
-
def
|
|
46
|
+
def astype(tensor, dtype, order="K", casting="unsafe", copy=True):
|
|
45
47
|
"""
|
|
46
48
|
Copy of the tensor, cast to a specified type.
|
|
47
49
|
|
|
@@ -102,7 +104,7 @@ def _astype(tensor, dtype, order="K", casting="unsafe", copy=True):
|
|
|
102
104
|
>>> x.astype(int).execute()
|
|
103
105
|
array([1, 2, 2])
|
|
104
106
|
"""
|
|
105
|
-
dtype =
|
|
107
|
+
dtype = make_dtype(dtype)
|
|
106
108
|
tensor_order = get_order(order, tensor.order)
|
|
107
109
|
|
|
108
110
|
if tensor.dtype == dtype and tensor.order == tensor_order:
|
|
@@ -85,5 +85,5 @@ def broadcast_to(tensor, shape):
|
|
|
85
85
|
f"and requested shape {shape}"
|
|
86
86
|
)
|
|
87
87
|
|
|
88
|
-
op = TensorBroadcastTo(shape, dtype=tensor.dtype, sparse=tensor.issparse())
|
|
88
|
+
op = TensorBroadcastTo(shape=shape, dtype=tensor.dtype, sparse=tensor.issparse())
|
|
89
89
|
return op(tensor, shape)
|
|
@@ -0,0 +1,64 @@
|
|
|
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
|
+
|
|
16
|
+
def copy(a, order="K"):
|
|
17
|
+
"""
|
|
18
|
+
Return a tensor copy of the given object.
|
|
19
|
+
|
|
20
|
+
Parameters
|
|
21
|
+
----------
|
|
22
|
+
a : array_like
|
|
23
|
+
Input data.
|
|
24
|
+
order : {'C', 'F', 'A', 'K'}, optional
|
|
25
|
+
Controls the memory layout of the copy. 'C' means C-order,
|
|
26
|
+
'F' means F-order, 'A' means 'F' if `a` is Fortran contiguous,
|
|
27
|
+
'C' otherwise. 'K' means match the layout of `a` as closely
|
|
28
|
+
as possible. (Note that this function and :meth:`ndarray.copy` are very
|
|
29
|
+
similar, but have different default values for their order=
|
|
30
|
+
arguments.)
|
|
31
|
+
|
|
32
|
+
Returns
|
|
33
|
+
-------
|
|
34
|
+
arr : Tensor
|
|
35
|
+
Tensor interpretation of `a`.
|
|
36
|
+
|
|
37
|
+
Notes
|
|
38
|
+
-----
|
|
39
|
+
This is equivalent to:
|
|
40
|
+
|
|
41
|
+
>>> import maxframe.tensor as mt
|
|
42
|
+
|
|
43
|
+
>>> mt.array(a, copy=True) #doctest: +SKIP
|
|
44
|
+
|
|
45
|
+
Examples
|
|
46
|
+
--------
|
|
47
|
+
Create an array x, with a reference y and a copy z:
|
|
48
|
+
|
|
49
|
+
>>> x = mt.array([1, 2, 3])
|
|
50
|
+
>>> y = x
|
|
51
|
+
>>> z = mt.copy(x)
|
|
52
|
+
|
|
53
|
+
Note that, when we modify x, y changes, but not z:
|
|
54
|
+
|
|
55
|
+
>>> x[0] = 10
|
|
56
|
+
>>> (x[0] == y[0]).execute()
|
|
57
|
+
True
|
|
58
|
+
>>> (x[0] == z[0]).execute()
|
|
59
|
+
False
|
|
60
|
+
|
|
61
|
+
"""
|
|
62
|
+
from ..datasource import array
|
|
63
|
+
|
|
64
|
+
return array(a, order=order, copy=True)
|
|
@@ -0,0 +1,115 @@
|
|
|
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 ...serialization.serializables import Int32Field, Int64Field
|
|
16
|
+
from ..datasource import tensor as astensor
|
|
17
|
+
from ..operators import TensorOperator, TensorOperatorMixin
|
|
18
|
+
from ..utils import validate_axis
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class TensorDiff(TensorOperator, TensorOperatorMixin):
|
|
22
|
+
n = Int64Field("n")
|
|
23
|
+
axis = Int32Field("axis")
|
|
24
|
+
|
|
25
|
+
def __call__(self, a):
|
|
26
|
+
shape = list(a.shape)
|
|
27
|
+
shape[self.axis] -= self.n
|
|
28
|
+
shape = tuple(shape)
|
|
29
|
+
return self.new_tensor([a], shape, dtype=a.dtype, order=a.order)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def diff(a, n=1, axis=-1):
|
|
33
|
+
"""
|
|
34
|
+
Calculate the n-th discrete difference along the given axis.
|
|
35
|
+
|
|
36
|
+
The first difference is given by ``out[n] = a[n+1] - a[n]`` along
|
|
37
|
+
the given axis, higher differences are calculated by using `diff`
|
|
38
|
+
recursively.
|
|
39
|
+
|
|
40
|
+
Parameters
|
|
41
|
+
----------
|
|
42
|
+
a : array_like
|
|
43
|
+
Input tensor
|
|
44
|
+
n : int, optional
|
|
45
|
+
The number of times values are differenced. If zero, the input
|
|
46
|
+
is returned as-is.
|
|
47
|
+
axis : int, optional
|
|
48
|
+
The axis along which the difference is taken, default is the
|
|
49
|
+
last axis.
|
|
50
|
+
|
|
51
|
+
Returns
|
|
52
|
+
-------
|
|
53
|
+
diff : Tensor
|
|
54
|
+
The n-th differences. The shape of the output is the same as `a`
|
|
55
|
+
except along `axis` where the dimension is smaller by `n`. The
|
|
56
|
+
type of the output is the same as the type of the difference
|
|
57
|
+
between any two elements of `a`. This is the same as the type of
|
|
58
|
+
`a` in most cases. A notable exception is `datetime64`, which
|
|
59
|
+
results in a `timedelta64` output tensor.
|
|
60
|
+
|
|
61
|
+
See Also
|
|
62
|
+
--------
|
|
63
|
+
gradient, ediff1d, cumsum
|
|
64
|
+
|
|
65
|
+
Notes
|
|
66
|
+
-----
|
|
67
|
+
Type is preserved for boolean tensors, so the result will contain
|
|
68
|
+
`False` when consecutive elements are the same and `True` when they
|
|
69
|
+
differ.
|
|
70
|
+
|
|
71
|
+
For unsigned integer tensors, the results will also be unsigned. This
|
|
72
|
+
should not be surprising, as the result is consistent with
|
|
73
|
+
calculating the difference directly:
|
|
74
|
+
|
|
75
|
+
>>> import maxframe.tensor as mt
|
|
76
|
+
|
|
77
|
+
>>> u8_arr = mt.array([1, 0], dtype=mt.uint8)
|
|
78
|
+
>>> mt.diff(u8_arr).execute()
|
|
79
|
+
array([255], dtype=uint8)
|
|
80
|
+
>>> (u8_arr[1,...] - u8_arr[0,...]).execute()
|
|
81
|
+
255
|
|
82
|
+
|
|
83
|
+
If this is not desirable, then the array should be cast to a larger
|
|
84
|
+
integer type first:
|
|
85
|
+
|
|
86
|
+
>>> i16_arr = u8_arr.astype(mt.int16)
|
|
87
|
+
>>> mt.diff(i16_arr).execute()
|
|
88
|
+
array([-1], dtype=int16)
|
|
89
|
+
|
|
90
|
+
Examples
|
|
91
|
+
--------
|
|
92
|
+
>>> x = mt.array([1, 2, 4, 7, 0])
|
|
93
|
+
>>> mt.diff(x).execute()
|
|
94
|
+
array([ 1, 2, 3, -7])
|
|
95
|
+
>>> mt.diff(x, n=2).execute()
|
|
96
|
+
array([ 1, 1, -10])
|
|
97
|
+
|
|
98
|
+
>>> x = mt.array([[1, 3, 6, 10], [0, 5, 6, 8]])
|
|
99
|
+
>>> mt.diff(x).execute()
|
|
100
|
+
array([[2, 3, 4],
|
|
101
|
+
[5, 1, 2]])
|
|
102
|
+
>>> mt.diff(x, axis=0).execute()
|
|
103
|
+
array([[-1, 2, 0, -2]])
|
|
104
|
+
|
|
105
|
+
>>> x = mt.arange('1066-10-13', '1066-10-16', dtype=mt.datetime64)
|
|
106
|
+
>>> mt.diff(x).execute()
|
|
107
|
+
array([1, 1], dtype='timedelta64[D]')
|
|
108
|
+
|
|
109
|
+
"""
|
|
110
|
+
a = astensor(a)
|
|
111
|
+
n = int(n)
|
|
112
|
+
|
|
113
|
+
axis = validate_axis(a.ndim, axis)
|
|
114
|
+
op = TensorDiff(axis=axis, n=n)
|
|
115
|
+
return op(a)
|
|
@@ -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
|
+
import numpy as np
|
|
16
|
+
|
|
17
|
+
from ..utils import get_order
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def flatten(a, order="C"):
|
|
21
|
+
"""
|
|
22
|
+
Return a copy of the tensor collapsed into one dimension.
|
|
23
|
+
|
|
24
|
+
Parameters
|
|
25
|
+
----------
|
|
26
|
+
order : {'C', 'F', 'A', 'K'}, optional
|
|
27
|
+
'C' means to flatten in row-major (C-style) order.
|
|
28
|
+
'F' means to flatten in column-major (Fortran-
|
|
29
|
+
style) order. 'A' means to flatten in column-major
|
|
30
|
+
order if `a` is Fortran *contiguous* in memory,
|
|
31
|
+
row-major order otherwise. 'K' means to flatten
|
|
32
|
+
`a` in the order the elements occur in memory.
|
|
33
|
+
The default is 'C'.
|
|
34
|
+
|
|
35
|
+
Returns
|
|
36
|
+
-------
|
|
37
|
+
y : Tensor
|
|
38
|
+
A copy of the input tensor, flattened to one dimension.
|
|
39
|
+
|
|
40
|
+
See Also
|
|
41
|
+
--------
|
|
42
|
+
ravel : Return a flattened tensor.
|
|
43
|
+
flat : A 1-D flat iterator over the tensor.
|
|
44
|
+
|
|
45
|
+
Examples
|
|
46
|
+
--------
|
|
47
|
+
|
|
48
|
+
>>> import maxframe.tensor as mt
|
|
49
|
+
|
|
50
|
+
>>> a = mt.array([[1,2], [3,4]])
|
|
51
|
+
>>> a.flatten().execute()
|
|
52
|
+
array([1, 2, 3, 4])
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
from ..reshape.reshape import TensorReshape, calc_shape
|
|
56
|
+
|
|
57
|
+
if a.ndim == 1:
|
|
58
|
+
return a
|
|
59
|
+
|
|
60
|
+
new_shape = np.nan if any(np.isnan(s) for s in a.shape) else calc_shape(a.size, -1)
|
|
61
|
+
tensor_order = get_order(order, a.order)
|
|
62
|
+
op = TensorReshape(newshape=new_shape, dtype=a.dtype, create_view=False)
|
|
63
|
+
return op(a, order=tensor_order, out_shape=new_shape)
|
|
@@ -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 typing import Union
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
|
|
19
|
+
from ...typing_ import TileableType
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def in1d(
|
|
23
|
+
ar1: Union[TileableType, np.ndarray],
|
|
24
|
+
ar2: Union[TileableType, np.ndarray, list],
|
|
25
|
+
assume_unique: bool = False,
|
|
26
|
+
invert: bool = False,
|
|
27
|
+
):
|
|
28
|
+
"""
|
|
29
|
+
Test whether each element of a 1-D tensor is also present in a second tensor.
|
|
30
|
+
|
|
31
|
+
Returns a boolean tensor the same length as `ar1` that is True
|
|
32
|
+
where an element of `ar1` is in `ar2` and False otherwise.
|
|
33
|
+
|
|
34
|
+
We recommend using :func:`isin` instead of `in1d` for new code.
|
|
35
|
+
|
|
36
|
+
Parameters
|
|
37
|
+
----------
|
|
38
|
+
ar1 : (M,) Tensor
|
|
39
|
+
Input tensor.
|
|
40
|
+
ar2 : array_like
|
|
41
|
+
The values against which to test each value of `ar1`.
|
|
42
|
+
assume_unique : bool, optional
|
|
43
|
+
If True, the input tensors are both assumed to be unique, which
|
|
44
|
+
can speed up the calculation. Default is False.
|
|
45
|
+
invert : bool, optional
|
|
46
|
+
If True, the values in the returned tensor are inverted (that is,
|
|
47
|
+
False where an element of `ar1` is in `ar2` and True otherwise).
|
|
48
|
+
Default is False. ``np.in1d(a, b, invert=True)`` is equivalent
|
|
49
|
+
to (but is faster than) ``np.invert(in1d(a, b))``.
|
|
50
|
+
|
|
51
|
+
Returns
|
|
52
|
+
-------
|
|
53
|
+
in1d : (M,) Tensor, bool
|
|
54
|
+
The values `ar1[in1d]` are in `ar2`.
|
|
55
|
+
|
|
56
|
+
See Also
|
|
57
|
+
--------
|
|
58
|
+
isin : Version of this function that preserves the
|
|
59
|
+
shape of ar1.
|
|
60
|
+
numpy.lib.arraysetops : Module with a number of other functions for
|
|
61
|
+
performing set operations on arrays.
|
|
62
|
+
|
|
63
|
+
Notes
|
|
64
|
+
-----
|
|
65
|
+
`in1d` can be considered as an element-wise function version of the
|
|
66
|
+
python keyword `in`, for 1-D sequences. ``in1d(a, b)`` is roughly
|
|
67
|
+
equivalent to ``mt.array([item in b for item in a])``.
|
|
68
|
+
However, this idea fails if `ar2` is a set, or similar (non-sequence)
|
|
69
|
+
container: As ``ar2`` is converted to a tensor, in those cases
|
|
70
|
+
``asarray(ar2)`` is an object tensor rather than the expected tensor of
|
|
71
|
+
contained values.
|
|
72
|
+
|
|
73
|
+
Examples
|
|
74
|
+
--------
|
|
75
|
+
>>> import maxframe.tensor as mt
|
|
76
|
+
>>> test = mt.array([0, 1, 2, 5, 0])
|
|
77
|
+
>>> states = [0, 2]
|
|
78
|
+
>>> mask = mt.in1d(test, states)
|
|
79
|
+
>>> mask.execute()
|
|
80
|
+
array([ True, False, True, False, True])
|
|
81
|
+
>>> test[mask].execute()
|
|
82
|
+
array([0, 2, 0])
|
|
83
|
+
>>> mask = mt.in1d(test, states, invert=True)
|
|
84
|
+
>>> mask.execute()
|
|
85
|
+
array([False, True, False, True, False])
|
|
86
|
+
>>> test[mask].execute()
|
|
87
|
+
array([1, 5])
|
|
88
|
+
"""
|
|
89
|
+
from .. import asarray
|
|
90
|
+
from .isin import isin
|
|
91
|
+
|
|
92
|
+
ar1 = asarray(ar1).ravel()
|
|
93
|
+
ar2 = asarray(ar2).ravel()
|
|
94
|
+
return isin(ar1, ar2, assume_unique=assume_unique, invert=invert)
|
|
@@ -0,0 +1,130 @@
|
|
|
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 Union
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
|
|
19
|
+
from ... import opcodes
|
|
20
|
+
from ...serialization.serializables import BoolField
|
|
21
|
+
from ...typing_ import TileableType
|
|
22
|
+
from ..core import TensorOrder
|
|
23
|
+
from ..datasource import tensor as astensor
|
|
24
|
+
from ..operators import TensorOperator, TensorOperatorMixin
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class TensorIsIn(TensorOperator, TensorOperatorMixin):
|
|
28
|
+
_op_type_ = opcodes.ISIN
|
|
29
|
+
|
|
30
|
+
assume_unique = BoolField("assume_unique")
|
|
31
|
+
invert = BoolField("invert")
|
|
32
|
+
|
|
33
|
+
def __call__(self, element, test_elements):
|
|
34
|
+
self.dtype = np.dtype(bool)
|
|
35
|
+
return self.new_tensor(
|
|
36
|
+
[element, test_elements], shape=element.shape, order=TensorOrder.C_ORDER
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def isin(
|
|
41
|
+
element: Union[TileableType, np.ndarray],
|
|
42
|
+
test_elements: Union[TileableType, np.ndarray, list],
|
|
43
|
+
assume_unique: bool = False,
|
|
44
|
+
invert: bool = False,
|
|
45
|
+
):
|
|
46
|
+
"""
|
|
47
|
+
Calculates `element in test_elements`, broadcasting over `element` only.
|
|
48
|
+
Returns a boolean array of the same shape as `element` that is True
|
|
49
|
+
where an element of `element` is in `test_elements` and False otherwise.
|
|
50
|
+
|
|
51
|
+
Parameters
|
|
52
|
+
----------
|
|
53
|
+
element : array_like
|
|
54
|
+
Input tensor.
|
|
55
|
+
test_elements : array_like
|
|
56
|
+
The values against which to test each value of `element`.
|
|
57
|
+
This argument is flattened if it is a tensor or array_like.
|
|
58
|
+
See notes for behavior with non-array-like parameters.
|
|
59
|
+
assume_unique : bool, optional
|
|
60
|
+
If True, the input tensors are both assumed to be unique, which
|
|
61
|
+
can speed up the calculation. Default is False.
|
|
62
|
+
invert : bool, optional
|
|
63
|
+
If True, the values in the returned tensor are inverted, as if
|
|
64
|
+
calculating `element not in test_elements`. Default is False.
|
|
65
|
+
``mt.isin(a, b, invert=True)`` is equivalent to (but faster
|
|
66
|
+
than) ``mt.invert(mt.isin(a, b))``.
|
|
67
|
+
|
|
68
|
+
Returns
|
|
69
|
+
-------
|
|
70
|
+
isin : Tensor, bool
|
|
71
|
+
Has the same shape as `element`. The values `element[isin]`
|
|
72
|
+
are in `test_elements`.
|
|
73
|
+
|
|
74
|
+
See Also
|
|
75
|
+
--------
|
|
76
|
+
in1d : Flattened version of this function.
|
|
77
|
+
|
|
78
|
+
Notes
|
|
79
|
+
-----
|
|
80
|
+
|
|
81
|
+
`isin` is an element-wise function version of the python keyword `in`.
|
|
82
|
+
``isin(a, b)`` is roughly equivalent to
|
|
83
|
+
``mt.array([item in b for item in a])`` if `a` and `b` are 1-D sequences.
|
|
84
|
+
|
|
85
|
+
`element` and `test_elements` are converted to tensors if they are not
|
|
86
|
+
already. If `test_elements` is a set (or other non-sequence collection)
|
|
87
|
+
it will be converted to an object tensor with one element, rather than a
|
|
88
|
+
tensor of the values contained in `test_elements`. This is a consequence
|
|
89
|
+
of the `tensor` constructor's way of handling non-sequence collections.
|
|
90
|
+
Converting the set to a list usually gives the desired behavior.
|
|
91
|
+
|
|
92
|
+
Examples
|
|
93
|
+
--------
|
|
94
|
+
>>> import maxframe.tensor as mt
|
|
95
|
+
|
|
96
|
+
>>> element = 2*mt.arange(4).reshape((2, 2))
|
|
97
|
+
>>> element.execute()
|
|
98
|
+
array([[0, 2],
|
|
99
|
+
[4, 6]])
|
|
100
|
+
>>> test_elements = [1, 2, 4, 8]
|
|
101
|
+
>>> mask = mt.isin(element, test_elements)
|
|
102
|
+
>>> mask.execute()
|
|
103
|
+
array([[ False, True],
|
|
104
|
+
[ True, False]])
|
|
105
|
+
>>> element[mask].execute()
|
|
106
|
+
array([2, 4])
|
|
107
|
+
>>> mask = mt.isin(element, test_elements, invert=True)
|
|
108
|
+
>>> mask.execute()
|
|
109
|
+
array([[ True, False],
|
|
110
|
+
[ False, True]])
|
|
111
|
+
>>> element[mask]
|
|
112
|
+
array([0, 6])
|
|
113
|
+
|
|
114
|
+
Because of how `array` handles sets, the following does not
|
|
115
|
+
work as expected:
|
|
116
|
+
|
|
117
|
+
>>> test_set = {1, 2, 4, 8}
|
|
118
|
+
>>> mt.isin(element, test_set).execute()
|
|
119
|
+
array([[ False, False],
|
|
120
|
+
[ False, False]])
|
|
121
|
+
|
|
122
|
+
Casting the set to a list gives the expected result:
|
|
123
|
+
|
|
124
|
+
>>> mt.isin(element, list(test_set)).execute()
|
|
125
|
+
array([[ False, True],
|
|
126
|
+
[ True, False]])
|
|
127
|
+
"""
|
|
128
|
+
element, test_elements = astensor(element), astensor(test_elements).ravel()
|
|
129
|
+
op = TensorIsIn(assume_unique=assume_unique, invert=invert)
|
|
130
|
+
return op(element, test_elements)
|