maxframe 1.3.1__cp310-cp310-macosx_10_9_universal2.whl → 2.0.0b1__cp310-cp310-macosx_10_9_universal2.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.cpython-310-darwin.so +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.cpython-310-darwin.so +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 +9 -8
- maxframe/dataframe/groupby/apply.py +50 -74
- maxframe/dataframe/groupby/apply_chunk.py +393 -0
- maxframe/dataframe/groupby/core.py +80 -17
- maxframe/dataframe/groupby/extensions.py +26 -0
- maxframe/dataframe/groupby/fill.py +9 -4
- maxframe/dataframe/groupby/sample.py +7 -7
- maxframe/dataframe/groupby/tests/test_groupby.py +3 -3
- maxframe/dataframe/groupby/transform.py +57 -54
- maxframe/dataframe/indexing/align.py +7 -6
- maxframe/dataframe/indexing/getitem.py +9 -8
- maxframe/dataframe/indexing/iloc.py +28 -23
- maxframe/dataframe/indexing/insert.py +7 -3
- maxframe/dataframe/indexing/loc.py +9 -8
- maxframe/dataframe/indexing/reindex.py +36 -30
- maxframe/dataframe/indexing/rename_axis.py +18 -10
- maxframe/dataframe/indexing/reset_index.py +0 -2
- maxframe/dataframe/indexing/sample.py +13 -9
- maxframe/dataframe/indexing/set_axis.py +9 -6
- maxframe/dataframe/indexing/setitem.py +8 -5
- maxframe/dataframe/indexing/where.py +12 -9
- maxframe/dataframe/merge/__init__.py +0 -1
- maxframe/dataframe/merge/concat.py +10 -31
- maxframe/dataframe/merge/merge.py +2 -24
- maxframe/dataframe/misc/__init__.py +6 -0
- maxframe/dataframe/misc/_duplicate.py +7 -3
- maxframe/dataframe/misc/apply.py +106 -139
- maxframe/dataframe/misc/astype.py +3 -2
- maxframe/dataframe/misc/case_when.py +11 -7
- maxframe/dataframe/misc/cut.py +11 -10
- maxframe/dataframe/misc/describe.py +7 -3
- maxframe/dataframe/misc/drop.py +13 -11
- maxframe/dataframe/misc/eval.py +0 -2
- maxframe/dataframe/misc/get_dummies.py +78 -49
- maxframe/dataframe/misc/isin.py +13 -10
- maxframe/dataframe/misc/map.py +21 -6
- maxframe/dataframe/misc/melt.py +8 -1
- maxframe/dataframe/misc/pivot.py +232 -0
- maxframe/dataframe/misc/pivot_table.py +52 -40
- maxframe/dataframe/misc/rechunk.py +59 -0
- maxframe/dataframe/misc/shift.py +7 -4
- maxframe/dataframe/misc/stack.py +5 -3
- maxframe/dataframe/misc/tests/test_misc.py +167 -1
- maxframe/dataframe/misc/transform.py +63 -65
- maxframe/dataframe/misc/value_counts.py +7 -4
- maxframe/dataframe/missing/dropna.py +16 -7
- maxframe/dataframe/missing/fillna.py +18 -10
- maxframe/dataframe/missing/replace.py +10 -6
- maxframe/dataframe/missing/tests/test_missing.py +2 -2
- maxframe/dataframe/operators.py +1 -27
- maxframe/dataframe/reduction/aggregation.py +65 -3
- maxframe/dataframe/reduction/core.py +3 -1
- maxframe/dataframe/reduction/median.py +1 -1
- maxframe/dataframe/reduction/tests/test_reduction.py +33 -0
- maxframe/dataframe/reduction/unique.py +53 -7
- maxframe/dataframe/statistics/corr.py +9 -6
- maxframe/dataframe/statistics/quantile.py +9 -6
- maxframe/dataframe/tseries/to_datetime.py +6 -4
- maxframe/dataframe/utils.py +219 -31
- maxframe/dataframe/window/rolling.py +7 -4
- maxframe/env.py +1 -0
- maxframe/errors.py +9 -0
- maxframe/extension.py +13 -2
- maxframe/io/objects/core.py +67 -51
- maxframe/io/objects/tensor.py +73 -17
- maxframe/io/objects/tests/test_object_io.py +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/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 +16 -9
- maxframe/learn/contrib/xgboost/regressor.py +28 -27
- maxframe/learn/contrib/xgboost/tests/test_callback.py +41 -0
- maxframe/learn/contrib/xgboost/train.py +59 -16
- maxframe/learn/core.py +252 -0
- maxframe/learn/datasets/__init__.py +20 -0
- maxframe/learn/datasets/samples_generator.py +628 -0
- maxframe/learn/linear_model/__init__.py +15 -0
- maxframe/learn/linear_model/_base.py +163 -0
- maxframe/learn/linear_model/_lin_reg.py +175 -0
- maxframe/learn/metrics/__init__.py +25 -0
- maxframe/learn/metrics/_check_targets.py +95 -0
- maxframe/learn/metrics/_classification.py +1121 -0
- maxframe/learn/metrics/_regression.py +256 -0
- maxframe/learn/model_selection/__init__.py +15 -0
- maxframe/learn/model_selection/_split.py +451 -0
- maxframe/learn/model_selection/tests/__init__.py +13 -0
- maxframe/learn/model_selection/tests/test_split.py +156 -0
- maxframe/learn/preprocessing/__init__.py +16 -0
- maxframe/learn/preprocessing/_data/__init__.py +17 -0
- maxframe/learn/preprocessing/_data/min_max_scaler.py +390 -0
- maxframe/learn/preprocessing/_data/normalize.py +127 -0
- maxframe/learn/preprocessing/_data/standard_scaler.py +503 -0
- maxframe/learn/preprocessing/_data/utils.py +79 -0
- maxframe/learn/preprocessing/_label/__init__.py +16 -0
- maxframe/learn/preprocessing/_label/_label_binarizer.py +599 -0
- maxframe/learn/preprocessing/_label/_label_encoder.py +174 -0
- maxframe/learn/utils/__init__.py +4 -0
- maxframe/learn/utils/_encode.py +314 -0
- maxframe/learn/utils/checks.py +161 -0
- maxframe/learn/utils/core.py +33 -0
- maxframe/learn/utils/extmath.py +176 -0
- maxframe/learn/utils/multiclass.py +292 -0
- maxframe/learn/utils/shuffle.py +114 -0
- maxframe/learn/utils/sparsefuncs.py +87 -0
- maxframe/learn/utils/validation.py +775 -0
- maxframe/lib/__init__.py +0 -2
- maxframe/lib/compat.py +145 -0
- maxframe/lib/filesystem/_oss_lib/glob.py +1 -1
- maxframe/lib/mmh3.cpython-310-darwin.so +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.cpython-310-darwin.so +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.1.dist-info → maxframe-2.0.0b1.dist-info}/METADATA +4 -1
- maxframe-2.0.0b1.dist-info/RECORD +939 -0
- {maxframe-1.3.1.dist-info → maxframe-2.0.0b1.dist-info}/WHEEL +1 -1
- maxframe_client/clients/framedriver.py +19 -3
- maxframe_client/fetcher.py +113 -6
- maxframe_client/session/odps.py +173 -38
- maxframe_client/session/task.py +3 -1
- maxframe_client/tests/test_session.py +41 -5
- maxframe-1.3.1.dist-info/RECORD +0 -705
- {maxframe-1.3.1.dist-info → maxframe-2.0.0b1.dist-info}/top_level.txt +0 -0
|
@@ -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,12 +12,16 @@
|
|
|
14
12
|
# See the License for the specific language governing permissions and
|
|
15
13
|
# limitations under the License.
|
|
16
14
|
|
|
15
|
+
import functools
|
|
16
|
+
|
|
17
17
|
import numpy as np
|
|
18
18
|
|
|
19
19
|
from ... import opcodes
|
|
20
|
+
from ...serialization.serializables import BoolField
|
|
21
|
+
from ..datasource import scalar
|
|
20
22
|
from ..utils import infer_dtype
|
|
21
|
-
from .core import TensorBinOp
|
|
22
|
-
from .utils import arithmetic_operator
|
|
23
|
+
from .core import TensorBinOp, TensorMultiOp
|
|
24
|
+
from .utils import TreeReductionBuilder, arithmetic_operator
|
|
23
25
|
|
|
24
26
|
|
|
25
27
|
@arithmetic_operator(sparse_mode="binary_or")
|
|
@@ -79,3 +81,34 @@ def multiply(x1, x2, out=None, where=None, **kwargs):
|
|
|
79
81
|
def rmultiply(x1, x2, **kwargs):
|
|
80
82
|
op = TensorMultiply(**kwargs)
|
|
81
83
|
return op.rcall(x1, x2)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class TensorTreeMultiply(TensorMultiOp):
|
|
87
|
+
_op_type_ = opcodes.TREE_MULTIPLY
|
|
88
|
+
_func_name = "multiply"
|
|
89
|
+
|
|
90
|
+
ignore_empty_input = BoolField("ignore_empty_input", default=False)
|
|
91
|
+
|
|
92
|
+
def __init__(self, sparse=False, **kw):
|
|
93
|
+
super().__init__(sparse=sparse, **kw)
|
|
94
|
+
|
|
95
|
+
@classmethod
|
|
96
|
+
def _is_sparse(cls, *args):
|
|
97
|
+
if not args or all(np.isscalar(x) for x in args):
|
|
98
|
+
return False
|
|
99
|
+
if all(
|
|
100
|
+
np.isscalar(x) or (hasattr(x, "issparse") and x.issparse()) for x in args
|
|
101
|
+
):
|
|
102
|
+
return True
|
|
103
|
+
return False
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
@infer_dtype(lambda *args: functools.reduce(np.multiply, args))
|
|
107
|
+
def tree_multiply(*args, combine_size=None, **kwargs):
|
|
108
|
+
class MultiplyBuilder(TreeReductionBuilder):
|
|
109
|
+
def _build_reduction(self, inputs, final=False):
|
|
110
|
+
op = TensorTreeMultiply(args=inputs, **kwargs)
|
|
111
|
+
return op(*inputs)
|
|
112
|
+
|
|
113
|
+
args = [scalar(a) if np.isscalar(a) else a for a in args]
|
|
114
|
+
return MultiplyBuilder(combine_size).build(args)
|
|
@@ -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");
|
|
@@ -22,11 +20,15 @@ from .core import TensorUnaryOp
|
|
|
22
20
|
from .utils import arithmetic_operator
|
|
23
21
|
|
|
24
22
|
|
|
25
|
-
@arithmetic_operator(sparse_mode="
|
|
23
|
+
@arithmetic_operator(sparse_mode="always_false")
|
|
26
24
|
class TensorReciprocal(TensorUnaryOp):
|
|
27
25
|
_op_type_ = opcodes.RECIPROCAL
|
|
28
26
|
_func_name = "reciprocal"
|
|
29
27
|
|
|
28
|
+
@classmethod
|
|
29
|
+
def _is_sparse(cls, x):
|
|
30
|
+
return False
|
|
31
|
+
|
|
30
32
|
|
|
31
33
|
@infer_dtype(np.reciprocal)
|
|
32
34
|
def reciprocal(x, out=None, where=None, **kwargs):
|
|
@@ -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");
|
|
@@ -22,7 +20,7 @@ from .core import TensorUnaryOp
|
|
|
22
20
|
from .utils import arithmetic_operator
|
|
23
21
|
|
|
24
22
|
|
|
25
|
-
@arithmetic_operator(sparse_mode="
|
|
23
|
+
@arithmetic_operator(sparse_mode="always_false")
|
|
26
24
|
class TensorRint(TensorUnaryOp):
|
|
27
25
|
_op_type_ = opcodes.RINT
|
|
28
26
|
_func_name = "rint"
|
|
@@ -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");
|
|
@@ -22,7 +20,7 @@ from .core import TensorUnaryOp
|
|
|
22
20
|
from .utils import arithmetic_operator
|
|
23
21
|
|
|
24
22
|
|
|
25
|
-
@arithmetic_operator(sparse_mode="
|
|
23
|
+
@arithmetic_operator(sparse_mode="always_false")
|
|
26
24
|
class TensorSinc(TensorUnaryOp):
|
|
27
25
|
_op_type_ = opcodes.SINC
|
|
28
26
|
_func_name = "sinc"
|
|
@@ -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");
|
|
@@ -27,6 +25,10 @@ class TensorSubtract(TensorBinOp):
|
|
|
27
25
|
_op_type_ = opcodes.SUB
|
|
28
26
|
_func_name = "subtract"
|
|
29
27
|
|
|
28
|
+
@classmethod
|
|
29
|
+
def _is_sparse_with_scalar(cls, scalar_val, lhs):
|
|
30
|
+
return isinstance(scalar_val, (int, float)) and scalar_val == 0
|
|
31
|
+
|
|
30
32
|
|
|
31
33
|
@infer_dtype(np.subtract)
|
|
32
34
|
def subtract(x1, x2, out=None, where=None, **kwargs):
|
|
@@ -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");
|
|
@@ -16,14 +14,14 @@
|
|
|
16
14
|
|
|
17
15
|
import numpy as np
|
|
18
16
|
import pytest
|
|
19
|
-
|
|
20
|
-
from maxframe.tensor.arithmetic.core import TensorBinOp, TensorUnaryOp
|
|
21
|
-
from maxframe.utils import collect_leaf_operators
|
|
17
|
+
import scipy.sparse as sps
|
|
22
18
|
|
|
23
19
|
from ....core import enter_mode
|
|
20
|
+
from ....utils import collect_leaf_operators
|
|
24
21
|
from ...core import SparseTensor, Tensor
|
|
25
22
|
from ...datasource import array, empty, ones, tensor
|
|
26
23
|
from .. import * # noqa: F401
|
|
24
|
+
from ..core import TensorBinOp, TensorUnaryOp
|
|
27
25
|
|
|
28
26
|
|
|
29
27
|
def test_add():
|
|
@@ -51,8 +49,8 @@ def test_add():
|
|
|
51
49
|
|
|
52
50
|
t = t1 + 1
|
|
53
51
|
assert t.op.gpu is None
|
|
54
|
-
assert t.issparse() is
|
|
55
|
-
assert type(t) is
|
|
52
|
+
assert t.issparse() is False
|
|
53
|
+
assert type(t) is Tensor
|
|
56
54
|
|
|
57
55
|
t = t1 + 0
|
|
58
56
|
assert t.issparse() is True
|
|
@@ -343,8 +341,8 @@ def test_cos():
|
|
|
343
341
|
t1 = tensor([[0, 1, 0], [1, 0, 0]], chunk_size=2).tosparse()
|
|
344
342
|
|
|
345
343
|
t = cos(t1)
|
|
346
|
-
assert t.issparse() is
|
|
347
|
-
assert type(t) is
|
|
344
|
+
assert t.issparse() is False
|
|
345
|
+
assert type(t) is Tensor
|
|
348
346
|
|
|
349
347
|
|
|
350
348
|
def test_around():
|
|
@@ -416,3 +414,39 @@ def test_binary_op_func_name():
|
|
|
416
414
|
for op_type in results:
|
|
417
415
|
if op_type not in (TensorSetImag, TensorSetReal):
|
|
418
416
|
assert hasattr(op_type, "_func_name")
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
def test_tree_arithmetic():
|
|
420
|
+
raws = [np.random.rand(10, 10) for _ in range(10)]
|
|
421
|
+
tensors = [tensor(a, chunk_size=3) for a in raws]
|
|
422
|
+
|
|
423
|
+
t = tree_add(*tensors, combine_size=4)
|
|
424
|
+
assert isinstance(t.op, TensorTreeAdd)
|
|
425
|
+
assert t.issparse() is False
|
|
426
|
+
assert len(t.inputs) == 3
|
|
427
|
+
assert len(t.inputs[0].inputs) == 4
|
|
428
|
+
assert len(t.inputs[-1].inputs) == 2
|
|
429
|
+
|
|
430
|
+
t = tree_multiply(*tensors, combine_size=4)
|
|
431
|
+
assert isinstance(t.op, TensorTreeMultiply)
|
|
432
|
+
assert t.issparse() is False
|
|
433
|
+
assert len(t.inputs) == 3
|
|
434
|
+
assert len(t.inputs[0].inputs) == 4
|
|
435
|
+
assert len(t.inputs[-1].inputs) == 2
|
|
436
|
+
|
|
437
|
+
raws = [sps.random(5, 9, density=0.1) for _ in range(10)]
|
|
438
|
+
tensors = [tensor(a, chunk_size=3) for a in raws]
|
|
439
|
+
|
|
440
|
+
t = tree_add(*tensors, combine_size=4)
|
|
441
|
+
assert isinstance(t.op, TensorTreeAdd)
|
|
442
|
+
assert t.issparse() is True
|
|
443
|
+
assert len(t.inputs) == 3
|
|
444
|
+
assert len(t.inputs[0].inputs) == 4
|
|
445
|
+
assert len(t.inputs[-1].inputs) == 2
|
|
446
|
+
|
|
447
|
+
t = tree_multiply(*tensors, combine_size=4)
|
|
448
|
+
assert isinstance(t.op, TensorTreeMultiply)
|
|
449
|
+
assert t.issparse() is True
|
|
450
|
+
assert len(t.inputs) == 3
|
|
451
|
+
assert len(t.inputs[0].inputs) == 4
|
|
452
|
+
assert len(t.inputs[-1].inputs) == 2
|
|
@@ -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");
|
|
@@ -16,6 +14,8 @@
|
|
|
16
14
|
|
|
17
15
|
import numpy as np
|
|
18
16
|
|
|
17
|
+
from ...config import options
|
|
18
|
+
|
|
19
19
|
|
|
20
20
|
def arithmetic_operator(cls=None, init=True, sparse_mode=None):
|
|
21
21
|
def _decorator(cls):
|
|
@@ -26,11 +26,12 @@ def arithmetic_operator(cls=None, init=True, sparse_mode=None):
|
|
|
26
26
|
def _is_sparse_binary_and_const(x1, x2):
|
|
27
27
|
if all(np.isscalar(x) for x in [x1, x2]):
|
|
28
28
|
return False
|
|
29
|
-
if all(
|
|
30
|
-
np.isscalar(x) or (hasattr(x, "issparse") and x.issparse())
|
|
31
|
-
for x in [x1, x2]
|
|
32
|
-
):
|
|
29
|
+
if all(hasattr(x, "issparse") and x.issparse() for x in [x1, x2]):
|
|
33
30
|
return True
|
|
31
|
+
if np.isscalar(x1):
|
|
32
|
+
return cls._is_sparse_with_scalar(x1, True)
|
|
33
|
+
if np.isscalar(x2):
|
|
34
|
+
return cls._is_sparse_with_scalar(x2, False)
|
|
34
35
|
return False
|
|
35
36
|
|
|
36
37
|
def _is_sparse_binary_or_const(x1, x2):
|
|
@@ -63,3 +64,28 @@ def arithmetic_operator(cls=None, init=True, sparse_mode=None):
|
|
|
63
64
|
return _decorator(cls)
|
|
64
65
|
else:
|
|
65
66
|
return _decorator
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class TreeReductionBuilder:
|
|
70
|
+
def __init__(self, combine_size=None):
|
|
71
|
+
self._combine_size = combine_size or options.dpe.reduction.combine_size
|
|
72
|
+
|
|
73
|
+
def _build_reduction(self, inputs, final=False):
|
|
74
|
+
raise NotImplementedError
|
|
75
|
+
|
|
76
|
+
def build(self, inputs):
|
|
77
|
+
combine_size = self._combine_size
|
|
78
|
+
while len(inputs) > self._combine_size:
|
|
79
|
+
new_inputs = []
|
|
80
|
+
for i in range(0, len(inputs), combine_size):
|
|
81
|
+
objs = inputs[i : i + combine_size]
|
|
82
|
+
if len(objs) == 1:
|
|
83
|
+
obj = objs[0]
|
|
84
|
+
else:
|
|
85
|
+
obj = self._build_reduction(objs, final=False)
|
|
86
|
+
new_inputs.append(obj)
|
|
87
|
+
inputs = new_inputs
|
|
88
|
+
|
|
89
|
+
if len(inputs) == 1:
|
|
90
|
+
return inputs[0]
|
|
91
|
+
return self._build_reduction(inputs, final=True)
|
maxframe/tensor/array_utils.py
CHANGED
|
@@ -107,25 +107,13 @@ def _is_array_writeable(a):
|
|
|
107
107
|
return True
|
|
108
108
|
|
|
109
109
|
|
|
110
|
-
def
|
|
110
|
+
def as_same_module(inputs, ret_extra=False, copy_if_not_writeable=False):
|
|
111
111
|
input_tensors = [
|
|
112
112
|
i for i in inputs if hasattr(i, "ndim") and i.ndim > 0
|
|
113
113
|
] # filter scalar
|
|
114
114
|
has_sparse = any(issparse(i) for i in inputs)
|
|
115
115
|
|
|
116
|
-
|
|
117
|
-
try:
|
|
118
|
-
device = _most_nbytes_device(
|
|
119
|
-
(i.device.id if hasattr(i, "device") else -1, i.nbytes)
|
|
120
|
-
for i in input_tensors
|
|
121
|
-
)
|
|
122
|
-
except ValueError:
|
|
123
|
-
device = -1
|
|
124
|
-
|
|
125
|
-
if device == -1:
|
|
126
|
-
outputs = [_get(i) for i in inputs]
|
|
127
|
-
else:
|
|
128
|
-
outputs = [move_to_device(i, device) for i in inputs]
|
|
116
|
+
outputs = [_get(i) for i in inputs]
|
|
129
117
|
|
|
130
118
|
if copy_if_not_writeable:
|
|
131
119
|
new_outputs = []
|
|
@@ -155,7 +143,7 @@ def as_same_device(inputs, device=None, ret_extra=False, copy_if_not_writeable=F
|
|
|
155
143
|
m = get_array_module(input_tensors[0])
|
|
156
144
|
else:
|
|
157
145
|
m = np
|
|
158
|
-
return outputs,
|
|
146
|
+
return outputs, m
|
|
159
147
|
|
|
160
148
|
|
|
161
149
|
def as_np_array(x):
|
|
@@ -174,13 +162,3 @@ def device(device_id):
|
|
|
174
162
|
else: # pragma: no cover
|
|
175
163
|
with cp.cuda.Device(device_id) as dev:
|
|
176
164
|
yield dev
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
def create_array(op):
|
|
180
|
-
xp = array_module(op.gpu)
|
|
181
|
-
|
|
182
|
-
def inner(func, *args, **kwargs):
|
|
183
|
-
with device(op.device):
|
|
184
|
-
return getattr(xp, func)(*args, **kwargs)
|
|
185
|
-
|
|
186
|
-
return inner
|
maxframe/tensor/core.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");
|
|
@@ -30,7 +28,7 @@ from ..core import (
|
|
|
30
28
|
is_build_mode,
|
|
31
29
|
register_output_types,
|
|
32
30
|
)
|
|
33
|
-
from ..core.entity.utils import refresh_tileable_shape
|
|
31
|
+
from ..core.entity.utils import fill_chunk_slices, refresh_tileable_shape
|
|
34
32
|
from ..serialization.serializables import (
|
|
35
33
|
AnyField,
|
|
36
34
|
DataTypeField,
|
|
@@ -50,7 +48,7 @@ class TensorOrder(Enum):
|
|
|
50
48
|
|
|
51
49
|
|
|
52
50
|
class TensorData(HasShapeTileableData, _ExecuteAndFetchMixin):
|
|
53
|
-
__slots__ = ()
|
|
51
|
+
__slots__ = ("_accessors",)
|
|
54
52
|
type_name = "Tensor"
|
|
55
53
|
|
|
56
54
|
_legacy_deprecated_non_primitives = ["_chunks"]
|
|
@@ -79,6 +77,7 @@ class TensorData(HasShapeTileableData, _ExecuteAndFetchMixin):
|
|
|
79
77
|
_order=order,
|
|
80
78
|
**kw,
|
|
81
79
|
)
|
|
80
|
+
self._accessors = dict()
|
|
82
81
|
if self.order is None and self.op is not None:
|
|
83
82
|
if len(self.inputs) == 0:
|
|
84
83
|
self._order = TensorOrder.C_ORDER
|
|
@@ -137,7 +136,8 @@ class TensorData(HasShapeTileableData, _ExecuteAndFetchMixin):
|
|
|
137
136
|
|
|
138
137
|
def refresh_params(self):
|
|
139
138
|
refresh_tileable_shape(self)
|
|
140
|
-
|
|
139
|
+
fill_chunk_slices(self)
|
|
140
|
+
if self.dtype is None:
|
|
141
141
|
self._dtype = self.chunks[0].dtype
|
|
142
142
|
|
|
143
143
|
@property
|
|
@@ -458,7 +458,7 @@ class Tensor(HasShapeTileable):
|
|
|
458
458
|
array([('c', 1), ('a', 2)],
|
|
459
459
|
dtype=[('x', '|S1'), ('y', '<i4')])
|
|
460
460
|
"""
|
|
461
|
-
from .
|
|
461
|
+
from .sort import sort
|
|
462
462
|
|
|
463
463
|
self._data = sort(
|
|
464
464
|
self,
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
from .arange import arange
|
|
15
|
+
from .arange import TensorArange, arange
|
|
16
16
|
from .array import (
|
|
17
17
|
ArrayDataSource,
|
|
18
18
|
CSRMatrixDataSource,
|
|
@@ -22,11 +22,19 @@ from .array import (
|
|
|
22
22
|
asfortranarray,
|
|
23
23
|
tensor,
|
|
24
24
|
)
|
|
25
|
+
from .diag import TensorDiag, diag
|
|
26
|
+
from .diagflat import diagflat
|
|
25
27
|
from .empty import TensorEmpty, TensorEmptyLike, empty, empty_like
|
|
28
|
+
from .eye import TensorEye, eye
|
|
26
29
|
from .from_dataframe import from_dataframe, from_index, from_series
|
|
27
30
|
from .from_dense import fromdense
|
|
28
31
|
from .from_sparse import fromsparse
|
|
29
32
|
from .full import full, full_like
|
|
33
|
+
from .identity import identity
|
|
34
|
+
from .indices import indices
|
|
35
|
+
from .linspace import TensorLinspace, linspace
|
|
36
|
+
from .meshgrid import meshgrid
|
|
30
37
|
from .ones import TensorOnes, TensorOnesLike, ones, ones_like
|
|
31
38
|
from .scalar import Scalar, scalar
|
|
32
|
-
from .
|
|
39
|
+
from .tri_array import TensorTril, TensorTriu, tril, triu
|
|
40
|
+
from .zeros import TensorZeros, TensorZerosLike, zeros, zeros_like
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import numpy as np
|
|
16
16
|
|
|
17
17
|
from ... import opcodes
|
|
18
|
-
from ...lib.sparse.core import cp,
|
|
18
|
+
from ...lib.sparse.core import cp, get_array_module, issparse
|
|
19
19
|
from ...serialization.serializables import (
|
|
20
20
|
AnyField,
|
|
21
21
|
FieldTypes,
|
|
@@ -26,7 +26,6 @@ from ...serialization.serializables import (
|
|
|
26
26
|
from ...utils import on_deserialize_shape, on_serialize_shape
|
|
27
27
|
from ..array_utils import is_array, is_cupy
|
|
28
28
|
from ..core import TENSOR_TYPE, Tensor, TensorData, TensorOrder
|
|
29
|
-
from ..utils import get_chunk_slices
|
|
30
29
|
from .core import TensorNoInput
|
|
31
30
|
from .scalar import scalar
|
|
32
31
|
|
|
@@ -81,26 +80,6 @@ class CSRMatrixDataSource(TensorNoInput):
|
|
|
81
80
|
kw["gpu"] = True
|
|
82
81
|
super().__init__(data=data, **kw)
|
|
83
82
|
|
|
84
|
-
def to_chunk_op(self, *args):
|
|
85
|
-
_, idx, chunk_size = args
|
|
86
|
-
|
|
87
|
-
xps = cps if self.gpu else sps
|
|
88
|
-
if len(self.shape) == 1:
|
|
89
|
-
shape = (1, self.shape[0])
|
|
90
|
-
else:
|
|
91
|
-
shape = self.shape
|
|
92
|
-
data = xps.csr_matrix((self.data, self.indices, self.indptr), shape)
|
|
93
|
-
chunk_data = data[get_chunk_slices(chunk_size, idx)]
|
|
94
|
-
|
|
95
|
-
chunk_op = self.copy().reset_key()
|
|
96
|
-
chunk_op.data = chunk_data.data
|
|
97
|
-
chunk_op.indices = chunk_data.indices
|
|
98
|
-
chunk_op.indptr = chunk_data.indptr
|
|
99
|
-
chunk_shape = chunk_data.shape[1:] if len(self.shape) == 1 else chunk_data.shape
|
|
100
|
-
chunk_op.shape = chunk_shape
|
|
101
|
-
|
|
102
|
-
return chunk_op
|
|
103
|
-
|
|
104
83
|
|
|
105
84
|
def _from_spmatrix(spmatrix, dtype=None, chunk_size=None, gpu=None):
|
|
106
85
|
if gpu is None:
|
|
@@ -152,6 +131,8 @@ def tensor(
|
|
|
152
131
|
try:
|
|
153
132
|
data = m.asarray(data, dtype=dtype, order=order)
|
|
154
133
|
except ValueError:
|
|
134
|
+
if not hasattr(data, "__array__"):
|
|
135
|
+
raise
|
|
155
136
|
arr = data.__array__(dtype=dtype)
|
|
156
137
|
if isinstance(arr, TENSOR_TYPE):
|
|
157
138
|
return arr.astype(arr.dtype, order=order, copy=False)
|