maxframe 0.1.0b5__cp311-cp311-macosx_11_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of maxframe might be problematic. Click here for more details.
- maxframe/__init__.py +32 -0
- maxframe/_utils.cpython-311-darwin.so +0 -0
- maxframe/_utils.pxd +33 -0
- maxframe/_utils.pyx +547 -0
- maxframe/codegen.py +528 -0
- maxframe/config/__init__.py +15 -0
- maxframe/config/config.py +443 -0
- maxframe/config/tests/__init__.py +13 -0
- maxframe/config/tests/test_config.py +103 -0
- maxframe/config/tests/test_validators.py +34 -0
- maxframe/config/validators.py +57 -0
- maxframe/conftest.py +139 -0
- maxframe/core/__init__.py +65 -0
- maxframe/core/base.py +156 -0
- maxframe/core/entity/__init__.py +44 -0
- maxframe/core/entity/chunks.py +68 -0
- maxframe/core/entity/core.py +152 -0
- maxframe/core/entity/executable.py +337 -0
- maxframe/core/entity/fuse.py +73 -0
- maxframe/core/entity/objects.py +100 -0
- maxframe/core/entity/output_types.py +90 -0
- maxframe/core/entity/tileables.py +438 -0
- maxframe/core/entity/utils.py +24 -0
- maxframe/core/graph/__init__.py +17 -0
- maxframe/core/graph/builder/__init__.py +16 -0
- maxframe/core/graph/builder/base.py +86 -0
- maxframe/core/graph/builder/chunk.py +430 -0
- maxframe/core/graph/builder/tileable.py +34 -0
- maxframe/core/graph/builder/utils.py +41 -0
- maxframe/core/graph/core.cpython-311-darwin.so +0 -0
- maxframe/core/graph/core.pyx +467 -0
- maxframe/core/graph/entity.py +171 -0
- maxframe/core/graph/tests/__init__.py +13 -0
- maxframe/core/graph/tests/test_graph.py +205 -0
- maxframe/core/mode.py +96 -0
- maxframe/core/operator/__init__.py +34 -0
- maxframe/core/operator/base.py +450 -0
- maxframe/core/operator/core.py +276 -0
- maxframe/core/operator/fetch.py +53 -0
- maxframe/core/operator/fuse.py +29 -0
- maxframe/core/operator/objects.py +72 -0
- maxframe/core/operator/shuffle.py +111 -0
- maxframe/core/operator/tests/__init__.py +13 -0
- maxframe/core/operator/tests/test_core.py +64 -0
- maxframe/core/tests/__init__.py +13 -0
- maxframe/core/tests/test_mode.py +75 -0
- maxframe/dataframe/__init__.py +81 -0
- maxframe/dataframe/arithmetic/__init__.py +359 -0
- maxframe/dataframe/arithmetic/abs.py +33 -0
- maxframe/dataframe/arithmetic/add.py +60 -0
- maxframe/dataframe/arithmetic/arccos.py +28 -0
- maxframe/dataframe/arithmetic/arccosh.py +28 -0
- maxframe/dataframe/arithmetic/arcsin.py +28 -0
- maxframe/dataframe/arithmetic/arcsinh.py +28 -0
- maxframe/dataframe/arithmetic/arctan.py +28 -0
- maxframe/dataframe/arithmetic/arctanh.py +28 -0
- maxframe/dataframe/arithmetic/around.py +152 -0
- maxframe/dataframe/arithmetic/bitwise_and.py +46 -0
- maxframe/dataframe/arithmetic/bitwise_or.py +50 -0
- maxframe/dataframe/arithmetic/bitwise_xor.py +46 -0
- maxframe/dataframe/arithmetic/ceil.py +28 -0
- maxframe/dataframe/arithmetic/core.py +342 -0
- maxframe/dataframe/arithmetic/cos.py +28 -0
- maxframe/dataframe/arithmetic/cosh.py +28 -0
- maxframe/dataframe/arithmetic/degrees.py +28 -0
- maxframe/dataframe/arithmetic/docstring.py +442 -0
- maxframe/dataframe/arithmetic/equal.py +56 -0
- maxframe/dataframe/arithmetic/exp.py +28 -0
- maxframe/dataframe/arithmetic/exp2.py +28 -0
- maxframe/dataframe/arithmetic/expm1.py +28 -0
- maxframe/dataframe/arithmetic/floor.py +28 -0
- maxframe/dataframe/arithmetic/floordiv.py +64 -0
- maxframe/dataframe/arithmetic/greater.py +57 -0
- maxframe/dataframe/arithmetic/greater_equal.py +57 -0
- maxframe/dataframe/arithmetic/invert.py +33 -0
- maxframe/dataframe/arithmetic/is_ufuncs.py +62 -0
- maxframe/dataframe/arithmetic/less.py +57 -0
- maxframe/dataframe/arithmetic/less_equal.py +57 -0
- maxframe/dataframe/arithmetic/log.py +28 -0
- maxframe/dataframe/arithmetic/log10.py +28 -0
- maxframe/dataframe/arithmetic/log2.py +28 -0
- maxframe/dataframe/arithmetic/mod.py +60 -0
- maxframe/dataframe/arithmetic/multiply.py +60 -0
- maxframe/dataframe/arithmetic/negative.py +33 -0
- maxframe/dataframe/arithmetic/not_equal.py +56 -0
- maxframe/dataframe/arithmetic/power.py +68 -0
- maxframe/dataframe/arithmetic/radians.py +28 -0
- maxframe/dataframe/arithmetic/sin.py +28 -0
- maxframe/dataframe/arithmetic/sinh.py +28 -0
- maxframe/dataframe/arithmetic/sqrt.py +28 -0
- maxframe/dataframe/arithmetic/subtract.py +64 -0
- maxframe/dataframe/arithmetic/tan.py +28 -0
- maxframe/dataframe/arithmetic/tanh.py +28 -0
- maxframe/dataframe/arithmetic/tests/__init__.py +13 -0
- maxframe/dataframe/arithmetic/tests/test_arithmetic.py +695 -0
- maxframe/dataframe/arithmetic/truediv.py +64 -0
- maxframe/dataframe/arithmetic/trunc.py +28 -0
- maxframe/dataframe/arrays.py +864 -0
- maxframe/dataframe/core.py +2417 -0
- maxframe/dataframe/datasource/__init__.py +15 -0
- maxframe/dataframe/datasource/core.py +81 -0
- maxframe/dataframe/datasource/dataframe.py +59 -0
- maxframe/dataframe/datasource/date_range.py +504 -0
- maxframe/dataframe/datasource/from_index.py +54 -0
- maxframe/dataframe/datasource/from_records.py +107 -0
- maxframe/dataframe/datasource/from_tensor.py +419 -0
- maxframe/dataframe/datasource/index.py +117 -0
- maxframe/dataframe/datasource/read_csv.py +528 -0
- maxframe/dataframe/datasource/read_odps_query.py +299 -0
- maxframe/dataframe/datasource/read_odps_table.py +253 -0
- maxframe/dataframe/datasource/read_parquet.py +421 -0
- maxframe/dataframe/datasource/series.py +55 -0
- maxframe/dataframe/datasource/tests/__init__.py +13 -0
- maxframe/dataframe/datasource/tests/test_datasource.py +401 -0
- maxframe/dataframe/datastore/__init__.py +26 -0
- maxframe/dataframe/datastore/core.py +19 -0
- maxframe/dataframe/datastore/to_csv.py +227 -0
- maxframe/dataframe/datastore/to_odps.py +162 -0
- maxframe/dataframe/extensions/__init__.py +41 -0
- maxframe/dataframe/extensions/accessor.py +50 -0
- maxframe/dataframe/extensions/reshuffle.py +83 -0
- maxframe/dataframe/extensions/tests/__init__.py +13 -0
- maxframe/dataframe/extensions/tests/test_extensions.py +38 -0
- maxframe/dataframe/fetch/__init__.py +15 -0
- maxframe/dataframe/fetch/core.py +86 -0
- maxframe/dataframe/groupby/__init__.py +82 -0
- maxframe/dataframe/groupby/aggregation.py +350 -0
- maxframe/dataframe/groupby/apply.py +251 -0
- maxframe/dataframe/groupby/core.py +179 -0
- maxframe/dataframe/groupby/cum.py +124 -0
- maxframe/dataframe/groupby/fill.py +141 -0
- maxframe/dataframe/groupby/getitem.py +92 -0
- maxframe/dataframe/groupby/head.py +105 -0
- maxframe/dataframe/groupby/sample.py +214 -0
- maxframe/dataframe/groupby/tests/__init__.py +13 -0
- maxframe/dataframe/groupby/tests/test_groupby.py +374 -0
- maxframe/dataframe/groupby/transform.py +255 -0
- maxframe/dataframe/indexing/__init__.py +84 -0
- maxframe/dataframe/indexing/add_prefix_suffix.py +110 -0
- maxframe/dataframe/indexing/align.py +349 -0
- maxframe/dataframe/indexing/at.py +83 -0
- maxframe/dataframe/indexing/getitem.py +204 -0
- maxframe/dataframe/indexing/iat.py +37 -0
- maxframe/dataframe/indexing/iloc.py +566 -0
- maxframe/dataframe/indexing/insert.py +86 -0
- maxframe/dataframe/indexing/loc.py +411 -0
- maxframe/dataframe/indexing/reindex.py +526 -0
- maxframe/dataframe/indexing/rename.py +462 -0
- maxframe/dataframe/indexing/rename_axis.py +209 -0
- maxframe/dataframe/indexing/reset_index.py +402 -0
- maxframe/dataframe/indexing/sample.py +221 -0
- maxframe/dataframe/indexing/set_axis.py +194 -0
- maxframe/dataframe/indexing/set_index.py +61 -0
- maxframe/dataframe/indexing/setitem.py +130 -0
- maxframe/dataframe/indexing/tests/__init__.py +13 -0
- maxframe/dataframe/indexing/tests/test_indexing.py +488 -0
- maxframe/dataframe/indexing/where.py +308 -0
- maxframe/dataframe/initializer.py +288 -0
- maxframe/dataframe/merge/__init__.py +32 -0
- maxframe/dataframe/merge/append.py +121 -0
- maxframe/dataframe/merge/concat.py +325 -0
- maxframe/dataframe/merge/merge.py +593 -0
- maxframe/dataframe/merge/tests/__init__.py +13 -0
- maxframe/dataframe/merge/tests/test_merge.py +215 -0
- maxframe/dataframe/misc/__init__.py +134 -0
- maxframe/dataframe/misc/_duplicate.py +46 -0
- maxframe/dataframe/misc/accessor.py +276 -0
- maxframe/dataframe/misc/apply.py +692 -0
- maxframe/dataframe/misc/astype.py +236 -0
- maxframe/dataframe/misc/case_when.py +141 -0
- maxframe/dataframe/misc/check_monotonic.py +84 -0
- maxframe/dataframe/misc/cut.py +383 -0
- maxframe/dataframe/misc/datetimes.py +79 -0
- maxframe/dataframe/misc/describe.py +108 -0
- maxframe/dataframe/misc/diff.py +210 -0
- maxframe/dataframe/misc/drop.py +440 -0
- maxframe/dataframe/misc/drop_duplicates.py +248 -0
- maxframe/dataframe/misc/duplicated.py +292 -0
- maxframe/dataframe/misc/eval.py +728 -0
- maxframe/dataframe/misc/explode.py +171 -0
- maxframe/dataframe/misc/get_dummies.py +208 -0
- maxframe/dataframe/misc/isin.py +217 -0
- maxframe/dataframe/misc/map.py +236 -0
- maxframe/dataframe/misc/melt.py +162 -0
- maxframe/dataframe/misc/memory_usage.py +248 -0
- maxframe/dataframe/misc/pct_change.py +150 -0
- maxframe/dataframe/misc/pivot_table.py +262 -0
- maxframe/dataframe/misc/qcut.py +104 -0
- maxframe/dataframe/misc/select_dtypes.py +104 -0
- maxframe/dataframe/misc/shift.py +256 -0
- maxframe/dataframe/misc/stack.py +238 -0
- maxframe/dataframe/misc/string_.py +221 -0
- maxframe/dataframe/misc/tests/__init__.py +13 -0
- maxframe/dataframe/misc/tests/test_misc.py +468 -0
- maxframe/dataframe/misc/to_numeric.py +178 -0
- maxframe/dataframe/misc/transform.py +361 -0
- maxframe/dataframe/misc/transpose.py +136 -0
- maxframe/dataframe/misc/value_counts.py +182 -0
- maxframe/dataframe/missing/__init__.py +53 -0
- maxframe/dataframe/missing/checkna.py +223 -0
- maxframe/dataframe/missing/dropna.py +280 -0
- maxframe/dataframe/missing/fillna.py +275 -0
- maxframe/dataframe/missing/replace.py +439 -0
- maxframe/dataframe/missing/tests/__init__.py +13 -0
- maxframe/dataframe/missing/tests/test_missing.py +89 -0
- maxframe/dataframe/operators.py +273 -0
- maxframe/dataframe/plotting/__init__.py +40 -0
- maxframe/dataframe/plotting/core.py +78 -0
- maxframe/dataframe/plotting/tests/__init__.py +13 -0
- maxframe/dataframe/plotting/tests/test_plotting.py +136 -0
- maxframe/dataframe/reduction/__init__.py +107 -0
- maxframe/dataframe/reduction/aggregation.py +344 -0
- maxframe/dataframe/reduction/all.py +78 -0
- maxframe/dataframe/reduction/any.py +78 -0
- maxframe/dataframe/reduction/core.py +837 -0
- maxframe/dataframe/reduction/count.py +59 -0
- maxframe/dataframe/reduction/cummax.py +30 -0
- maxframe/dataframe/reduction/cummin.py +30 -0
- maxframe/dataframe/reduction/cumprod.py +30 -0
- maxframe/dataframe/reduction/cumsum.py +30 -0
- maxframe/dataframe/reduction/custom_reduction.py +42 -0
- maxframe/dataframe/reduction/kurtosis.py +104 -0
- maxframe/dataframe/reduction/max.py +65 -0
- maxframe/dataframe/reduction/mean.py +61 -0
- maxframe/dataframe/reduction/min.py +65 -0
- maxframe/dataframe/reduction/nunique.py +141 -0
- maxframe/dataframe/reduction/prod.py +76 -0
- maxframe/dataframe/reduction/reduction_size.py +36 -0
- maxframe/dataframe/reduction/sem.py +69 -0
- maxframe/dataframe/reduction/skew.py +89 -0
- maxframe/dataframe/reduction/std.py +53 -0
- maxframe/dataframe/reduction/str_concat.py +48 -0
- maxframe/dataframe/reduction/sum.py +77 -0
- maxframe/dataframe/reduction/tests/__init__.py +13 -0
- maxframe/dataframe/reduction/tests/test_reduction.py +486 -0
- maxframe/dataframe/reduction/unique.py +90 -0
- maxframe/dataframe/reduction/var.py +72 -0
- maxframe/dataframe/sort/__init__.py +34 -0
- maxframe/dataframe/sort/core.py +36 -0
- maxframe/dataframe/sort/sort_index.py +153 -0
- maxframe/dataframe/sort/sort_values.py +311 -0
- maxframe/dataframe/sort/tests/__init__.py +13 -0
- maxframe/dataframe/sort/tests/test_sort.py +81 -0
- maxframe/dataframe/statistics/__init__.py +33 -0
- maxframe/dataframe/statistics/corr.py +280 -0
- maxframe/dataframe/statistics/quantile.py +341 -0
- maxframe/dataframe/statistics/tests/__init__.py +13 -0
- maxframe/dataframe/statistics/tests/test_statistics.py +82 -0
- maxframe/dataframe/tests/__init__.py +13 -0
- maxframe/dataframe/tests/test_initializer.py +29 -0
- maxframe/dataframe/tseries/__init__.py +13 -0
- maxframe/dataframe/tseries/tests/__init__.py +13 -0
- maxframe/dataframe/tseries/tests/test_tseries.py +30 -0
- maxframe/dataframe/tseries/to_datetime.py +297 -0
- maxframe/dataframe/ufunc/__init__.py +27 -0
- maxframe/dataframe/ufunc/tensor.py +54 -0
- maxframe/dataframe/ufunc/ufunc.py +52 -0
- maxframe/dataframe/utils.py +1267 -0
- maxframe/dataframe/window/__init__.py +29 -0
- maxframe/dataframe/window/aggregation.py +96 -0
- maxframe/dataframe/window/core.py +69 -0
- maxframe/dataframe/window/ewm.py +249 -0
- maxframe/dataframe/window/expanding.py +147 -0
- maxframe/dataframe/window/rolling.py +376 -0
- maxframe/dataframe/window/tests/__init__.py +13 -0
- maxframe/dataframe/window/tests/test_ewm.py +70 -0
- maxframe/dataframe/window/tests/test_expanding.py +66 -0
- maxframe/dataframe/window/tests/test_rolling.py +57 -0
- maxframe/env.py +33 -0
- maxframe/errors.py +21 -0
- maxframe/extension.py +81 -0
- maxframe/learn/__init__.py +17 -0
- maxframe/learn/contrib/__init__.py +17 -0
- maxframe/learn/contrib/pytorch/__init__.py +16 -0
- maxframe/learn/contrib/pytorch/run_function.py +110 -0
- maxframe/learn/contrib/pytorch/run_script.py +102 -0
- maxframe/learn/contrib/pytorch/tests/__init__.py +13 -0
- maxframe/learn/contrib/pytorch/tests/test_pytorch.py +42 -0
- maxframe/learn/contrib/utils.py +52 -0
- maxframe/learn/contrib/xgboost/__init__.py +26 -0
- maxframe/learn/contrib/xgboost/classifier.py +86 -0
- maxframe/learn/contrib/xgboost/core.py +156 -0
- maxframe/learn/contrib/xgboost/dmatrix.py +150 -0
- maxframe/learn/contrib/xgboost/predict.py +138 -0
- maxframe/learn/contrib/xgboost/regressor.py +78 -0
- maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
- maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
- maxframe/learn/contrib/xgboost/train.py +121 -0
- maxframe/learn/utils/__init__.py +15 -0
- maxframe/learn/utils/core.py +29 -0
- maxframe/lib/__init__.py +15 -0
- maxframe/lib/aio/__init__.py +27 -0
- maxframe/lib/aio/_runners.py +162 -0
- maxframe/lib/aio/_threads.py +35 -0
- maxframe/lib/aio/base.py +82 -0
- maxframe/lib/aio/file.py +85 -0
- maxframe/lib/aio/isolation.py +100 -0
- maxframe/lib/aio/lru.py +242 -0
- maxframe/lib/aio/parallelism.py +37 -0
- maxframe/lib/aio/tests/__init__.py +13 -0
- maxframe/lib/aio/tests/test_aio_file.py +55 -0
- maxframe/lib/compression.py +55 -0
- maxframe/lib/cython/__init__.py +13 -0
- maxframe/lib/cython/libcpp.pxd +30 -0
- maxframe/lib/filesystem/__init__.py +21 -0
- maxframe/lib/filesystem/_glob.py +173 -0
- maxframe/lib/filesystem/_oss_lib/__init__.py +13 -0
- maxframe/lib/filesystem/_oss_lib/common.py +198 -0
- maxframe/lib/filesystem/_oss_lib/glob.py +147 -0
- maxframe/lib/filesystem/_oss_lib/handle.py +156 -0
- maxframe/lib/filesystem/arrow.py +236 -0
- maxframe/lib/filesystem/base.py +263 -0
- maxframe/lib/filesystem/core.py +95 -0
- maxframe/lib/filesystem/fsmap.py +164 -0
- maxframe/lib/filesystem/hdfs.py +31 -0
- maxframe/lib/filesystem/local.py +112 -0
- maxframe/lib/filesystem/oss.py +157 -0
- maxframe/lib/filesystem/tests/__init__.py +13 -0
- maxframe/lib/filesystem/tests/test_filesystem.py +223 -0
- maxframe/lib/filesystem/tests/test_oss.py +182 -0
- maxframe/lib/functools_compat.py +81 -0
- maxframe/lib/mmh3.cpython-311-darwin.so +0 -0
- maxframe/lib/mmh3_src/MurmurHash3.cpp +339 -0
- maxframe/lib/mmh3_src/MurmurHash3.h +43 -0
- maxframe/lib/mmh3_src/mmh3module.cpp +387 -0
- maxframe/lib/sparse/__init__.py +861 -0
- maxframe/lib/sparse/array.py +1604 -0
- maxframe/lib/sparse/core.py +92 -0
- maxframe/lib/sparse/matrix.py +241 -0
- maxframe/lib/sparse/tests/__init__.py +15 -0
- maxframe/lib/sparse/tests/test_sparse.py +476 -0
- maxframe/lib/sparse/vector.py +150 -0
- maxframe/lib/tblib/LICENSE +20 -0
- maxframe/lib/tblib/__init__.py +327 -0
- maxframe/lib/tblib/cpython.py +83 -0
- maxframe/lib/tblib/decorators.py +44 -0
- maxframe/lib/tblib/pickling_support.py +90 -0
- maxframe/lib/tests/__init__.py +13 -0
- maxframe/lib/tests/test_wrapped_pickle.py +51 -0
- maxframe/lib/version.py +620 -0
- maxframe/lib/wrapped_pickle.py +139 -0
- maxframe/mixin.py +100 -0
- maxframe/odpsio/__init__.py +21 -0
- maxframe/odpsio/arrow.py +91 -0
- maxframe/odpsio/schema.py +364 -0
- maxframe/odpsio/tableio.py +322 -0
- maxframe/odpsio/tests/__init__.py +13 -0
- maxframe/odpsio/tests/test_arrow.py +88 -0
- maxframe/odpsio/tests/test_schema.py +297 -0
- maxframe/odpsio/tests/test_tableio.py +136 -0
- maxframe/odpsio/tests/test_volumeio.py +90 -0
- maxframe/odpsio/volumeio.py +95 -0
- maxframe/opcodes.py +590 -0
- maxframe/protocol.py +415 -0
- maxframe/remote/__init__.py +18 -0
- maxframe/remote/core.py +210 -0
- maxframe/remote/run_script.py +121 -0
- maxframe/serialization/__init__.py +26 -0
- maxframe/serialization/arrow.py +95 -0
- maxframe/serialization/core.cpython-311-darwin.so +0 -0
- maxframe/serialization/core.pxd +44 -0
- maxframe/serialization/core.pyi +61 -0
- maxframe/serialization/core.pyx +1094 -0
- maxframe/serialization/exception.py +86 -0
- maxframe/serialization/maxframe_objects.py +39 -0
- maxframe/serialization/numpy.py +91 -0
- maxframe/serialization/pandas.py +202 -0
- maxframe/serialization/scipy.py +71 -0
- maxframe/serialization/serializables/__init__.py +55 -0
- maxframe/serialization/serializables/core.py +262 -0
- maxframe/serialization/serializables/field.py +624 -0
- maxframe/serialization/serializables/field_type.py +589 -0
- maxframe/serialization/serializables/tests/__init__.py +13 -0
- maxframe/serialization/serializables/tests/test_field_type.py +121 -0
- maxframe/serialization/serializables/tests/test_serializable.py +250 -0
- maxframe/serialization/tests/__init__.py +13 -0
- maxframe/serialization/tests/test_serial.py +412 -0
- maxframe/session.py +1310 -0
- maxframe/tensor/__init__.py +183 -0
- maxframe/tensor/arithmetic/__init__.py +315 -0
- maxframe/tensor/arithmetic/abs.py +68 -0
- maxframe/tensor/arithmetic/absolute.py +68 -0
- maxframe/tensor/arithmetic/add.py +82 -0
- maxframe/tensor/arithmetic/angle.py +72 -0
- maxframe/tensor/arithmetic/arccos.py +104 -0
- maxframe/tensor/arithmetic/arccosh.py +91 -0
- maxframe/tensor/arithmetic/arcsin.py +94 -0
- maxframe/tensor/arithmetic/arcsinh.py +86 -0
- maxframe/tensor/arithmetic/arctan.py +106 -0
- maxframe/tensor/arithmetic/arctan2.py +128 -0
- maxframe/tensor/arithmetic/arctanh.py +86 -0
- maxframe/tensor/arithmetic/around.py +114 -0
- maxframe/tensor/arithmetic/bitand.py +95 -0
- maxframe/tensor/arithmetic/bitor.py +102 -0
- maxframe/tensor/arithmetic/bitxor.py +95 -0
- maxframe/tensor/arithmetic/cbrt.py +66 -0
- maxframe/tensor/arithmetic/ceil.py +71 -0
- maxframe/tensor/arithmetic/clip.py +165 -0
- maxframe/tensor/arithmetic/conj.py +74 -0
- maxframe/tensor/arithmetic/copysign.py +78 -0
- maxframe/tensor/arithmetic/core.py +544 -0
- maxframe/tensor/arithmetic/cos.py +85 -0
- maxframe/tensor/arithmetic/cosh.py +72 -0
- maxframe/tensor/arithmetic/deg2rad.py +72 -0
- maxframe/tensor/arithmetic/degrees.py +77 -0
- maxframe/tensor/arithmetic/divide.py +114 -0
- maxframe/tensor/arithmetic/equal.py +76 -0
- maxframe/tensor/arithmetic/exp.py +106 -0
- maxframe/tensor/arithmetic/exp2.py +67 -0
- maxframe/tensor/arithmetic/expm1.py +79 -0
- maxframe/tensor/arithmetic/fabs.py +74 -0
- maxframe/tensor/arithmetic/fix.py +69 -0
- maxframe/tensor/arithmetic/float_power.py +103 -0
- maxframe/tensor/arithmetic/floor.py +77 -0
- maxframe/tensor/arithmetic/floordiv.py +94 -0
- maxframe/tensor/arithmetic/fmax.py +105 -0
- maxframe/tensor/arithmetic/fmin.py +106 -0
- maxframe/tensor/arithmetic/fmod.py +99 -0
- maxframe/tensor/arithmetic/frexp.py +92 -0
- maxframe/tensor/arithmetic/greater.py +77 -0
- maxframe/tensor/arithmetic/greater_equal.py +69 -0
- maxframe/tensor/arithmetic/hypot.py +77 -0
- maxframe/tensor/arithmetic/i0.py +89 -0
- maxframe/tensor/arithmetic/imag.py +67 -0
- maxframe/tensor/arithmetic/invert.py +110 -0
- maxframe/tensor/arithmetic/isclose.py +115 -0
- maxframe/tensor/arithmetic/iscomplex.py +64 -0
- maxframe/tensor/arithmetic/isfinite.py +106 -0
- maxframe/tensor/arithmetic/isinf.py +103 -0
- maxframe/tensor/arithmetic/isnan.py +82 -0
- maxframe/tensor/arithmetic/isreal.py +63 -0
- maxframe/tensor/arithmetic/ldexp.py +99 -0
- maxframe/tensor/arithmetic/less.py +69 -0
- maxframe/tensor/arithmetic/less_equal.py +69 -0
- maxframe/tensor/arithmetic/log.py +92 -0
- maxframe/tensor/arithmetic/log10.py +85 -0
- maxframe/tensor/arithmetic/log1p.py +95 -0
- maxframe/tensor/arithmetic/log2.py +85 -0
- maxframe/tensor/arithmetic/logaddexp.py +80 -0
- maxframe/tensor/arithmetic/logaddexp2.py +78 -0
- maxframe/tensor/arithmetic/logical_and.py +81 -0
- maxframe/tensor/arithmetic/logical_not.py +74 -0
- maxframe/tensor/arithmetic/logical_or.py +82 -0
- maxframe/tensor/arithmetic/logical_xor.py +88 -0
- maxframe/tensor/arithmetic/lshift.py +82 -0
- maxframe/tensor/arithmetic/maximum.py +108 -0
- maxframe/tensor/arithmetic/minimum.py +108 -0
- maxframe/tensor/arithmetic/mod.py +104 -0
- maxframe/tensor/arithmetic/modf.py +83 -0
- maxframe/tensor/arithmetic/multiply.py +81 -0
- maxframe/tensor/arithmetic/nan_to_num.py +99 -0
- maxframe/tensor/arithmetic/negative.py +65 -0
- maxframe/tensor/arithmetic/nextafter.py +68 -0
- maxframe/tensor/arithmetic/not_equal.py +72 -0
- maxframe/tensor/arithmetic/positive.py +47 -0
- maxframe/tensor/arithmetic/power.py +106 -0
- maxframe/tensor/arithmetic/rad2deg.py +71 -0
- maxframe/tensor/arithmetic/radians.py +77 -0
- maxframe/tensor/arithmetic/real.py +70 -0
- maxframe/tensor/arithmetic/reciprocal.py +76 -0
- maxframe/tensor/arithmetic/rint.py +68 -0
- maxframe/tensor/arithmetic/rshift.py +81 -0
- maxframe/tensor/arithmetic/setimag.py +29 -0
- maxframe/tensor/arithmetic/setreal.py +29 -0
- maxframe/tensor/arithmetic/sign.py +81 -0
- maxframe/tensor/arithmetic/signbit.py +65 -0
- maxframe/tensor/arithmetic/sin.py +98 -0
- maxframe/tensor/arithmetic/sinc.py +102 -0
- maxframe/tensor/arithmetic/sinh.py +93 -0
- maxframe/tensor/arithmetic/spacing.py +72 -0
- maxframe/tensor/arithmetic/sqrt.py +81 -0
- maxframe/tensor/arithmetic/square.py +69 -0
- maxframe/tensor/arithmetic/subtract.py +81 -0
- maxframe/tensor/arithmetic/tan.py +88 -0
- maxframe/tensor/arithmetic/tanh.py +92 -0
- maxframe/tensor/arithmetic/tests/__init__.py +15 -0
- maxframe/tensor/arithmetic/tests/test_arithmetic.py +414 -0
- maxframe/tensor/arithmetic/truediv.py +104 -0
- maxframe/tensor/arithmetic/trunc.py +72 -0
- maxframe/tensor/arithmetic/utils.py +65 -0
- maxframe/tensor/array_utils.py +186 -0
- maxframe/tensor/base/__init__.py +34 -0
- maxframe/tensor/base/astype.py +119 -0
- maxframe/tensor/base/atleast_1d.py +74 -0
- maxframe/tensor/base/broadcast_to.py +89 -0
- maxframe/tensor/base/ravel.py +92 -0
- maxframe/tensor/base/tests/__init__.py +13 -0
- maxframe/tensor/base/tests/test_base.py +114 -0
- maxframe/tensor/base/transpose.py +125 -0
- maxframe/tensor/base/unique.py +205 -0
- maxframe/tensor/base/where.py +127 -0
- maxframe/tensor/core.py +724 -0
- maxframe/tensor/datasource/__init__.py +32 -0
- maxframe/tensor/datasource/arange.py +156 -0
- maxframe/tensor/datasource/array.py +415 -0
- maxframe/tensor/datasource/core.py +109 -0
- maxframe/tensor/datasource/empty.py +169 -0
- maxframe/tensor/datasource/from_dataframe.py +70 -0
- maxframe/tensor/datasource/from_dense.py +54 -0
- maxframe/tensor/datasource/from_sparse.py +47 -0
- maxframe/tensor/datasource/full.py +186 -0
- maxframe/tensor/datasource/ones.py +173 -0
- maxframe/tensor/datasource/scalar.py +40 -0
- maxframe/tensor/datasource/tests/__init__.py +13 -0
- maxframe/tensor/datasource/tests/test_datasource.py +278 -0
- maxframe/tensor/datasource/zeros.py +188 -0
- maxframe/tensor/fetch/__init__.py +15 -0
- maxframe/tensor/fetch/core.py +54 -0
- maxframe/tensor/indexing/__init__.py +47 -0
- maxframe/tensor/indexing/choose.py +196 -0
- maxframe/tensor/indexing/compress.py +124 -0
- maxframe/tensor/indexing/core.py +190 -0
- maxframe/tensor/indexing/extract.py +71 -0
- maxframe/tensor/indexing/fill_diagonal.py +183 -0
- maxframe/tensor/indexing/flatnonzero.py +60 -0
- maxframe/tensor/indexing/getitem.py +175 -0
- maxframe/tensor/indexing/nonzero.py +120 -0
- maxframe/tensor/indexing/setitem.py +132 -0
- maxframe/tensor/indexing/slice.py +29 -0
- maxframe/tensor/indexing/take.py +130 -0
- maxframe/tensor/indexing/tests/__init__.py +15 -0
- maxframe/tensor/indexing/tests/test_indexing.py +234 -0
- maxframe/tensor/indexing/unravel_index.py +103 -0
- maxframe/tensor/merge/__init__.py +15 -0
- maxframe/tensor/merge/stack.py +132 -0
- maxframe/tensor/merge/tests/__init__.py +13 -0
- maxframe/tensor/merge/tests/test_merge.py +52 -0
- maxframe/tensor/operators.py +123 -0
- maxframe/tensor/random/__init__.py +168 -0
- maxframe/tensor/random/beta.py +87 -0
- maxframe/tensor/random/binomial.py +137 -0
- maxframe/tensor/random/bytes.py +39 -0
- maxframe/tensor/random/chisquare.py +110 -0
- maxframe/tensor/random/choice.py +186 -0
- maxframe/tensor/random/core.py +234 -0
- maxframe/tensor/random/dirichlet.py +123 -0
- maxframe/tensor/random/exponential.py +94 -0
- maxframe/tensor/random/f.py +135 -0
- maxframe/tensor/random/gamma.py +128 -0
- maxframe/tensor/random/geometric.py +93 -0
- maxframe/tensor/random/gumbel.py +167 -0
- maxframe/tensor/random/hypergeometric.py +148 -0
- maxframe/tensor/random/laplace.py +133 -0
- maxframe/tensor/random/logistic.py +129 -0
- maxframe/tensor/random/lognormal.py +159 -0
- maxframe/tensor/random/logseries.py +122 -0
- maxframe/tensor/random/multinomial.py +133 -0
- maxframe/tensor/random/multivariate_normal.py +192 -0
- maxframe/tensor/random/negative_binomial.py +125 -0
- maxframe/tensor/random/noncentral_chisquare.py +132 -0
- maxframe/tensor/random/noncentral_f.py +126 -0
- maxframe/tensor/random/normal.py +143 -0
- maxframe/tensor/random/pareto.py +140 -0
- maxframe/tensor/random/permutation.py +104 -0
- maxframe/tensor/random/poisson.py +111 -0
- maxframe/tensor/random/power.py +142 -0
- maxframe/tensor/random/rand.py +82 -0
- maxframe/tensor/random/randint.py +121 -0
- maxframe/tensor/random/randn.py +96 -0
- maxframe/tensor/random/random_integers.py +123 -0
- maxframe/tensor/random/random_sample.py +86 -0
- maxframe/tensor/random/rayleigh.py +110 -0
- maxframe/tensor/random/shuffle.py +61 -0
- maxframe/tensor/random/standard_cauchy.py +105 -0
- maxframe/tensor/random/standard_exponential.py +72 -0
- maxframe/tensor/random/standard_gamma.py +120 -0
- maxframe/tensor/random/standard_normal.py +74 -0
- maxframe/tensor/random/standard_t.py +135 -0
- maxframe/tensor/random/tests/__init__.py +15 -0
- maxframe/tensor/random/tests/test_random.py +167 -0
- maxframe/tensor/random/triangular.py +119 -0
- maxframe/tensor/random/uniform.py +131 -0
- maxframe/tensor/random/vonmises.py +131 -0
- maxframe/tensor/random/wald.py +114 -0
- maxframe/tensor/random/weibull.py +140 -0
- maxframe/tensor/random/zipf.py +122 -0
- maxframe/tensor/rechunk/__init__.py +26 -0
- maxframe/tensor/rechunk/rechunk.py +43 -0
- maxframe/tensor/reduction/__init__.py +66 -0
- maxframe/tensor/reduction/all.py +103 -0
- maxframe/tensor/reduction/allclose.py +88 -0
- maxframe/tensor/reduction/any.py +105 -0
- maxframe/tensor/reduction/argmax.py +103 -0
- maxframe/tensor/reduction/argmin.py +103 -0
- maxframe/tensor/reduction/array_equal.py +64 -0
- maxframe/tensor/reduction/core.py +168 -0
- maxframe/tensor/reduction/count_nonzero.py +81 -0
- maxframe/tensor/reduction/cumprod.py +97 -0
- maxframe/tensor/reduction/cumsum.py +101 -0
- maxframe/tensor/reduction/max.py +120 -0
- maxframe/tensor/reduction/mean.py +123 -0
- maxframe/tensor/reduction/min.py +120 -0
- maxframe/tensor/reduction/nanargmax.py +82 -0
- maxframe/tensor/reduction/nanargmin.py +76 -0
- maxframe/tensor/reduction/nancumprod.py +91 -0
- maxframe/tensor/reduction/nancumsum.py +94 -0
- maxframe/tensor/reduction/nanmax.py +111 -0
- maxframe/tensor/reduction/nanmean.py +106 -0
- maxframe/tensor/reduction/nanmin.py +111 -0
- maxframe/tensor/reduction/nanprod.py +94 -0
- maxframe/tensor/reduction/nanstd.py +126 -0
- maxframe/tensor/reduction/nansum.py +115 -0
- maxframe/tensor/reduction/nanvar.py +149 -0
- maxframe/tensor/reduction/prod.py +130 -0
- maxframe/tensor/reduction/std.py +134 -0
- maxframe/tensor/reduction/sum.py +125 -0
- maxframe/tensor/reduction/tests/__init__.py +13 -0
- maxframe/tensor/reduction/tests/test_reduction.py +181 -0
- maxframe/tensor/reduction/var.py +176 -0
- maxframe/tensor/reshape/__init__.py +17 -0
- maxframe/tensor/reshape/reshape.py +188 -0
- maxframe/tensor/reshape/tests/__init__.py +15 -0
- maxframe/tensor/reshape/tests/test_reshape.py +37 -0
- maxframe/tensor/statistics/__init__.py +13 -0
- maxframe/tensor/statistics/percentile.py +175 -0
- maxframe/tensor/statistics/quantile.py +288 -0
- maxframe/tensor/ufunc/__init__.py +26 -0
- maxframe/tensor/ufunc/ufunc.py +200 -0
- maxframe/tensor/utils.py +718 -0
- maxframe/tests/__init__.py +13 -0
- maxframe/tests/test_codegen.py +69 -0
- maxframe/tests/test_protocol.py +144 -0
- maxframe/tests/test_utils.py +376 -0
- maxframe/tests/utils.py +164 -0
- maxframe/typing_.py +37 -0
- maxframe/udf.py +134 -0
- maxframe/utils.py +1114 -0
- maxframe-0.1.0b5.dist-info/METADATA +104 -0
- maxframe-0.1.0b5.dist-info/RECORD +647 -0
- maxframe-0.1.0b5.dist-info/WHEEL +5 -0
- maxframe-0.1.0b5.dist-info/top_level.txt +3 -0
- maxframe_client/__init__.py +17 -0
- maxframe_client/clients/__init__.py +13 -0
- maxframe_client/clients/framedriver.py +118 -0
- maxframe_client/clients/spe.py +104 -0
- maxframe_client/conftest.py +15 -0
- maxframe_client/fetcher.py +264 -0
- maxframe_client/session/__init__.py +22 -0
- maxframe_client/session/consts.py +36 -0
- maxframe_client/session/graph.py +119 -0
- maxframe_client/session/odps.py +482 -0
- maxframe_client/session/task.py +280 -0
- maxframe_client/session/tests/__init__.py +13 -0
- maxframe_client/session/tests/test_task.py +85 -0
- maxframe_client/tests/__init__.py +13 -0
- maxframe_client/tests/test_fetcher.py +89 -0
- maxframe_client/tests/test_session.py +255 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# Copyright 1999-2024 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 time
|
|
16
|
+
from io import BytesIO
|
|
17
|
+
|
|
18
|
+
import mock
|
|
19
|
+
import pytest
|
|
20
|
+
|
|
21
|
+
from .. import oss
|
|
22
|
+
from .._oss_lib import glob as og
|
|
23
|
+
from .._oss_lib.common import OSSFileEntry
|
|
24
|
+
from ..oss import build_oss_path
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class OSSObjInfo:
|
|
28
|
+
def __init__(self, name, content):
|
|
29
|
+
self.key = name
|
|
30
|
+
# Use the current time as "Last-Modified" in the test.
|
|
31
|
+
self.last_modified = int(time.time())
|
|
32
|
+
self.size = len(content.encode("utf8"))
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class ObjectMeta:
|
|
36
|
+
def __init__(self, key, obj_dict):
|
|
37
|
+
self.headers = {}
|
|
38
|
+
self.headers["Last-Modified"] = int(time.time())
|
|
39
|
+
self.headers["Content-Length"] = len(obj_dict[key].encode("utf8"))
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class MockObject:
|
|
43
|
+
def __init__(self, obj_dict, key, byte_range):
|
|
44
|
+
self._stream = BytesIO(obj_dict[key].encode("utf8"))
|
|
45
|
+
self._byte_range = byte_range
|
|
46
|
+
|
|
47
|
+
def read(self):
|
|
48
|
+
self._stream.seek(self._byte_range[0])
|
|
49
|
+
if self._byte_range[1] is None:
|
|
50
|
+
return self._stream.read()
|
|
51
|
+
else:
|
|
52
|
+
size = self._byte_range[1] - self._byte_range[0] + 1
|
|
53
|
+
return self._stream.read(size)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class SideEffectBucket:
|
|
57
|
+
def __init__(self, *_, **__):
|
|
58
|
+
self.obj_dict = {
|
|
59
|
+
"file.csv": "id1,id2,id3\n1,2,3\n",
|
|
60
|
+
"dir/": "",
|
|
61
|
+
"dir/file1.csv": "2",
|
|
62
|
+
"dir/file2.csv": "3",
|
|
63
|
+
"dir/subdir/": "",
|
|
64
|
+
"dir/subdir/file3.csv": "s4",
|
|
65
|
+
"dir/subdir/file4.csv": "s5",
|
|
66
|
+
"dir2/": "",
|
|
67
|
+
"dir2/file6.csv": "6",
|
|
68
|
+
"dir2/file7.csv": "7",
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
def get_object_meta(self, key):
|
|
72
|
+
return ObjectMeta(key, self.obj_dict)
|
|
73
|
+
|
|
74
|
+
def object_exists(self, key):
|
|
75
|
+
return key in self.obj_dict.keys()
|
|
76
|
+
|
|
77
|
+
def get_object(self, key, byte_range):
|
|
78
|
+
return MockObject(self.obj_dict, key, byte_range)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class SideEffectObjIter:
|
|
82
|
+
def __init__(self, *args, **kwargs):
|
|
83
|
+
self.bucket = args[0]
|
|
84
|
+
self.prefix = kwargs["prefix"]
|
|
85
|
+
|
|
86
|
+
def __iter__(self):
|
|
87
|
+
for name, content in self.bucket.obj_dict.items():
|
|
88
|
+
if name.startswith(self.prefix):
|
|
89
|
+
yield OSSObjInfo(name, content)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
@mock.patch("oss2.Bucket", side_effect=SideEffectBucket)
|
|
93
|
+
@mock.patch("oss2.ObjectIteratorV2", side_effect=SideEffectObjIter)
|
|
94
|
+
def test_oss_filesystem(fake_obj_iter, fake_oss_bucket):
|
|
95
|
+
access_key_id = "your_access_key_id"
|
|
96
|
+
access_key_secret = "your_access_key_secret"
|
|
97
|
+
end_point = "your_endpoint"
|
|
98
|
+
|
|
99
|
+
file_path = f"oss://bucket/file.csv"
|
|
100
|
+
dir_path = f"oss://bucket/dir/"
|
|
101
|
+
dir_path_content_magic = f"oss://bucket/dir*/"
|
|
102
|
+
other_scheme_path = f"scheme://netloc/path"
|
|
103
|
+
not_exist_file_path = f"oss://bucket/not_exist.csv"
|
|
104
|
+
|
|
105
|
+
fake_file_path = build_oss_path(
|
|
106
|
+
file_path, access_key_id, access_key_secret, end_point
|
|
107
|
+
)
|
|
108
|
+
fake_dir_path = build_oss_path(
|
|
109
|
+
dir_path, access_key_id, access_key_secret, end_point
|
|
110
|
+
)
|
|
111
|
+
fake_dir_path_contains_magic = build_oss_path(
|
|
112
|
+
dir_path_content_magic, access_key_id, access_key_secret, end_point
|
|
113
|
+
)
|
|
114
|
+
fake_other_scheme_path = build_oss_path(
|
|
115
|
+
other_scheme_path, access_key_id, access_key_secret, end_point
|
|
116
|
+
)
|
|
117
|
+
fake_not_exist_file_path = build_oss_path(
|
|
118
|
+
not_exist_file_path, access_key_id, access_key_secret, end_point
|
|
119
|
+
)
|
|
120
|
+
fs = oss.OSSFileSystem.get_instance()
|
|
121
|
+
|
|
122
|
+
# Test OSSFileSystem.
|
|
123
|
+
assert len(fs.ls(fake_dir_path)) == 4
|
|
124
|
+
assert not fs.isfile(fake_dir_path)
|
|
125
|
+
assert fs.isdir(fake_dir_path)
|
|
126
|
+
assert not fs.isdir(fake_file_path)
|
|
127
|
+
assert fs.isfile(fake_file_path)
|
|
128
|
+
assert fs.exists(fake_file_path)
|
|
129
|
+
assert not fs.exists(fake_not_exist_file_path)
|
|
130
|
+
assert fs.stat(fake_file_path)["type"] == "file"
|
|
131
|
+
assert fs.stat(fake_dir_path)["type"] == "directory"
|
|
132
|
+
assert fs.glob(fake_dir_path) == [fake_dir_path]
|
|
133
|
+
|
|
134
|
+
with pytest.raises(ValueError) as e:
|
|
135
|
+
fs.exists(fake_other_scheme_path)
|
|
136
|
+
msg1 = e.value.args[0]
|
|
137
|
+
assert (
|
|
138
|
+
msg1 == f"Except scheme oss, but got scheme: "
|
|
139
|
+
f"scheme in path: {fake_other_scheme_path}"
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
with pytest.raises(RuntimeError) as e:
|
|
143
|
+
fs.exists(file_path)
|
|
144
|
+
msg2 = e.value.args[0]
|
|
145
|
+
assert msg2 == "Please use build_oss_path to add OSS info"
|
|
146
|
+
|
|
147
|
+
with pytest.raises(OSError):
|
|
148
|
+
print(fs.ls(fake_file_path))
|
|
149
|
+
|
|
150
|
+
assert len(fs.glob(fake_file_path)) == 1
|
|
151
|
+
assert len(fs.glob(fake_dir_path + "*", recursive=True)) == 4
|
|
152
|
+
assert len(fs.glob(fake_dir_path_contains_magic)) == 2
|
|
153
|
+
|
|
154
|
+
# Test the specific functions of glob.
|
|
155
|
+
assert og.has_magic(b"*")
|
|
156
|
+
assert og.escape(b"*") == b"[*]"
|
|
157
|
+
assert og.escape("*") == "[*]"
|
|
158
|
+
|
|
159
|
+
# test OSSIOBase
|
|
160
|
+
with fs.open(fake_file_path) as f:
|
|
161
|
+
assert f.readline() == b"id1,id2,id3\n"
|
|
162
|
+
assert f.readline() == b"1,2,3\n"
|
|
163
|
+
f.seek(-1, 2)
|
|
164
|
+
assert f.readline() == b"\n"
|
|
165
|
+
with pytest.raises(AttributeError):
|
|
166
|
+
f.fileno()
|
|
167
|
+
with pytest.raises(OSError):
|
|
168
|
+
f.seek(-1)
|
|
169
|
+
with pytest.raises(OSError):
|
|
170
|
+
f.seek(-100, 1)
|
|
171
|
+
with pytest.raises(ValueError):
|
|
172
|
+
f.seek(1, 3)
|
|
173
|
+
f.seek(0)
|
|
174
|
+
assert f.read() == b"id1,id2,id3\n1,2,3\n"
|
|
175
|
+
f.seek(0)
|
|
176
|
+
assert f.readline(2) == b"id"
|
|
177
|
+
f.seek(0)
|
|
178
|
+
with pytest.raises(TypeError):
|
|
179
|
+
f.readline("2")
|
|
180
|
+
|
|
181
|
+
fe = OSSFileEntry(fake_file_path)
|
|
182
|
+
assert fe.path == fake_file_path
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Copyright 1999-2024 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
|
+
Backported functools APIs from Python 3.8
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from typing import List
|
|
20
|
+
|
|
21
|
+
__all__ = ["cached_property"]
|
|
22
|
+
|
|
23
|
+
# Avoid importing types, so we can speedup import time
|
|
24
|
+
GenericAlias = type(List[int])
|
|
25
|
+
|
|
26
|
+
_NOT_FOUND = object()
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class cached_property:
|
|
30
|
+
def __init__(self, func):
|
|
31
|
+
self.func = func
|
|
32
|
+
self.attrname = None
|
|
33
|
+
self.__doc__ = func.__doc__
|
|
34
|
+
self.__module__ = func.__module__
|
|
35
|
+
|
|
36
|
+
def __set_name__(self, owner, name):
|
|
37
|
+
if self.attrname is None:
|
|
38
|
+
self.attrname = name
|
|
39
|
+
elif name != self.attrname:
|
|
40
|
+
raise TypeError(
|
|
41
|
+
"Cannot assign the same cached_property to two different names "
|
|
42
|
+
f"({self.attrname!r} and {name!r})."
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
def __get__(self, instance, owner=None):
|
|
46
|
+
if instance is None:
|
|
47
|
+
return self
|
|
48
|
+
if self.attrname is None:
|
|
49
|
+
raise TypeError(
|
|
50
|
+
"Cannot use cached_property instance without calling __set_name__ on it."
|
|
51
|
+
)
|
|
52
|
+
try:
|
|
53
|
+
cache = instance.__dict__
|
|
54
|
+
except (
|
|
55
|
+
AttributeError
|
|
56
|
+
): # not all objects have __dict__ (e.g. class defines slots)
|
|
57
|
+
msg = (
|
|
58
|
+
f"No '__dict__' attribute on {type(instance).__name__!r} "
|
|
59
|
+
f"instance to cache {self.attrname!r} property."
|
|
60
|
+
)
|
|
61
|
+
raise TypeError(msg) from None
|
|
62
|
+
val = cache.get(self.attrname, _NOT_FOUND)
|
|
63
|
+
if val is _NOT_FOUND:
|
|
64
|
+
val = self.func(instance)
|
|
65
|
+
try:
|
|
66
|
+
cache[self.attrname] = val
|
|
67
|
+
except TypeError:
|
|
68
|
+
msg = (
|
|
69
|
+
f"The '__dict__' attribute on {type(instance).__name__!r} instance "
|
|
70
|
+
f"does not support item assignment for caching {self.attrname!r} property."
|
|
71
|
+
)
|
|
72
|
+
raise TypeError(msg) from None
|
|
73
|
+
return val
|
|
74
|
+
|
|
75
|
+
__class_getitem__ = classmethod(GenericAlias)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
try:
|
|
79
|
+
from functools import cached_property # noqa: F811
|
|
80
|
+
except ImportError:
|
|
81
|
+
pass
|
|
Binary file
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
//-----------------------------------------------------------------------------
|
|
2
|
+
// MurmurHash3 was written by Austin Appleby, and is placed in the public
|
|
3
|
+
// domain. The author hereby disclaims copyright to this source code.
|
|
4
|
+
|
|
5
|
+
// Note - The x86 and x64 versions do _not_ produce the same results, as the
|
|
6
|
+
// algorithms are optimized for their respective platforms. You can still
|
|
7
|
+
// compile and run any of them on any platform, but your performance with the
|
|
8
|
+
// non-native version will be less than optimal.
|
|
9
|
+
|
|
10
|
+
#include "MurmurHash3.h"
|
|
11
|
+
|
|
12
|
+
//-----------------------------------------------------------------------------
|
|
13
|
+
// Platform-specific functions and macros
|
|
14
|
+
|
|
15
|
+
// Microsoft Visual Studio
|
|
16
|
+
|
|
17
|
+
#if defined(_MSC_VER)
|
|
18
|
+
|
|
19
|
+
#define FORCE_INLINE __forceinline
|
|
20
|
+
|
|
21
|
+
#include <stdlib.h>
|
|
22
|
+
|
|
23
|
+
#define ROTL32(x,y) _rotl(x,y)
|
|
24
|
+
#define ROTL64(x,y) _rotl64(x,y)
|
|
25
|
+
|
|
26
|
+
#define BIG_CONSTANT(x) (x)
|
|
27
|
+
|
|
28
|
+
// Other compilers
|
|
29
|
+
|
|
30
|
+
#else // defined(_MSC_VER)
|
|
31
|
+
|
|
32
|
+
#if defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && GNUC_MINOR >= 4))
|
|
33
|
+
/* gcc version >= 4.4 4.1 = RHEL 5, 4.4 = RHEL 6. Don't inline for RHEL 5 gcc which is 4.1*/
|
|
34
|
+
#define FORCE_INLINE inline __attribute__((always_inline))
|
|
35
|
+
#else
|
|
36
|
+
#define FORCE_INLINE
|
|
37
|
+
#endif
|
|
38
|
+
|
|
39
|
+
inline uint32_t rotl32 ( uint32_t x, int8_t r )
|
|
40
|
+
{
|
|
41
|
+
return (x << r) | (x >> (32 - r));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
inline uint64_t rotl64 ( uint64_t x, int8_t r )
|
|
45
|
+
{
|
|
46
|
+
return (x << r) | (x >> (64 - r));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
#define ROTL32(x,y) rotl32(x,y)
|
|
50
|
+
#define ROTL64(x,y) rotl64(x,y)
|
|
51
|
+
|
|
52
|
+
#define BIG_CONSTANT(x) (x##LLU)
|
|
53
|
+
|
|
54
|
+
#endif // !defined(_MSC_VER)
|
|
55
|
+
|
|
56
|
+
//-----------------------------------------------------------------------------
|
|
57
|
+
// Block read - if your platform needs to do endian-swapping or can only
|
|
58
|
+
// handle aligned reads, do the conversion here
|
|
59
|
+
|
|
60
|
+
FORCE_INLINE uint32_t getblock ( const uint32_t * p, int i )
|
|
61
|
+
{
|
|
62
|
+
return p[i];
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
FORCE_INLINE uint64_t getblock ( const uint64_t * p, int i )
|
|
66
|
+
{
|
|
67
|
+
return p[i];
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
//-----------------------------------------------------------------------------
|
|
71
|
+
// Finalization mix - force all bits of a hash block to avalanche
|
|
72
|
+
|
|
73
|
+
FORCE_INLINE uint32_t fmix ( uint32_t h )
|
|
74
|
+
{
|
|
75
|
+
h ^= h >> 16;
|
|
76
|
+
h *= 0x85ebca6b;
|
|
77
|
+
h ^= h >> 13;
|
|
78
|
+
h *= 0xc2b2ae35;
|
|
79
|
+
h ^= h >> 16;
|
|
80
|
+
|
|
81
|
+
return h;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
//----------
|
|
85
|
+
|
|
86
|
+
FORCE_INLINE uint64_t fmix ( uint64_t k )
|
|
87
|
+
{
|
|
88
|
+
k ^= k >> 33;
|
|
89
|
+
k *= BIG_CONSTANT(0xff51afd7ed558ccd);
|
|
90
|
+
k ^= k >> 33;
|
|
91
|
+
k *= BIG_CONSTANT(0xc4ceb9fe1a85ec53);
|
|
92
|
+
k ^= k >> 33;
|
|
93
|
+
|
|
94
|
+
return k;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
//-----------------------------------------------------------------------------
|
|
98
|
+
|
|
99
|
+
void MurmurHash3_x86_32 ( const void * key, Py_ssize_t len,
|
|
100
|
+
uint32_t seed, void * out )
|
|
101
|
+
{
|
|
102
|
+
const uint8_t * data = (const uint8_t*)key;
|
|
103
|
+
const Py_ssize_t nblocks = len / 4;
|
|
104
|
+
|
|
105
|
+
uint32_t h1 = seed;
|
|
106
|
+
|
|
107
|
+
const uint32_t c1 = 0xcc9e2d51;
|
|
108
|
+
const uint32_t c2 = 0x1b873593;
|
|
109
|
+
|
|
110
|
+
//----------
|
|
111
|
+
// body
|
|
112
|
+
|
|
113
|
+
const uint32_t * blocks = (const uint32_t *)(data + nblocks*4);
|
|
114
|
+
|
|
115
|
+
for(Py_ssize_t i = -nblocks; i; i++)
|
|
116
|
+
{
|
|
117
|
+
uint32_t k1 = getblock(blocks,i);
|
|
118
|
+
|
|
119
|
+
k1 *= c1;
|
|
120
|
+
k1 = ROTL32(k1,15);
|
|
121
|
+
k1 *= c2;
|
|
122
|
+
|
|
123
|
+
h1 ^= k1;
|
|
124
|
+
h1 = ROTL32(h1,13);
|
|
125
|
+
h1 = h1*5+0xe6546b64;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
//----------
|
|
129
|
+
// tail
|
|
130
|
+
|
|
131
|
+
const uint8_t * tail = (const uint8_t*)(data + nblocks*4);
|
|
132
|
+
|
|
133
|
+
uint32_t k1 = 0;
|
|
134
|
+
|
|
135
|
+
switch(len & 3)
|
|
136
|
+
{
|
|
137
|
+
case 3: k1 ^= tail[2] << 16;
|
|
138
|
+
case 2: k1 ^= tail[1] << 8;
|
|
139
|
+
case 1: k1 ^= tail[0];
|
|
140
|
+
k1 *= c1; k1 = ROTL32(k1,15); k1 *= c2; h1 ^= k1;
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
//----------
|
|
144
|
+
// finalization
|
|
145
|
+
|
|
146
|
+
h1 ^= len;
|
|
147
|
+
|
|
148
|
+
h1 = fmix(h1);
|
|
149
|
+
|
|
150
|
+
*(uint32_t*)out = h1;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
//-----------------------------------------------------------------------------
|
|
154
|
+
|
|
155
|
+
void MurmurHash3_x86_128 ( const void * key, const Py_ssize_t len,
|
|
156
|
+
uint32_t seed, void * out )
|
|
157
|
+
{
|
|
158
|
+
const uint8_t * data = (const uint8_t*)key;
|
|
159
|
+
const Py_ssize_t nblocks = len / 16;
|
|
160
|
+
|
|
161
|
+
uint32_t h1 = seed;
|
|
162
|
+
uint32_t h2 = seed;
|
|
163
|
+
uint32_t h3 = seed;
|
|
164
|
+
uint32_t h4 = seed;
|
|
165
|
+
|
|
166
|
+
const uint32_t c1 = 0x239b961b;
|
|
167
|
+
const uint32_t c2 = 0xab0e9789;
|
|
168
|
+
const uint32_t c3 = 0x38b34ae5;
|
|
169
|
+
const uint32_t c4 = 0xa1e38b93;
|
|
170
|
+
|
|
171
|
+
//----------
|
|
172
|
+
// body
|
|
173
|
+
|
|
174
|
+
const uint32_t * blocks = (const uint32_t *)(data + nblocks*16);
|
|
175
|
+
|
|
176
|
+
for(Py_ssize_t i = -nblocks; i; i++)
|
|
177
|
+
{
|
|
178
|
+
uint32_t k1 = getblock(blocks,i*4+0);
|
|
179
|
+
uint32_t k2 = getblock(blocks,i*4+1);
|
|
180
|
+
uint32_t k3 = getblock(blocks,i*4+2);
|
|
181
|
+
uint32_t k4 = getblock(blocks,i*4+3);
|
|
182
|
+
|
|
183
|
+
k1 *= c1; k1 = ROTL32(k1,15); k1 *= c2; h1 ^= k1;
|
|
184
|
+
|
|
185
|
+
h1 = ROTL32(h1,19); h1 += h2; h1 = h1*5+0x561ccd1b;
|
|
186
|
+
|
|
187
|
+
k2 *= c2; k2 = ROTL32(k2,16); k2 *= c3; h2 ^= k2;
|
|
188
|
+
|
|
189
|
+
h2 = ROTL32(h2,17); h2 += h3; h2 = h2*5+0x0bcaa747;
|
|
190
|
+
|
|
191
|
+
k3 *= c3; k3 = ROTL32(k3,17); k3 *= c4; h3 ^= k3;
|
|
192
|
+
|
|
193
|
+
h3 = ROTL32(h3,15); h3 += h4; h3 = h3*5+0x96cd1c35;
|
|
194
|
+
|
|
195
|
+
k4 *= c4; k4 = ROTL32(k4,18); k4 *= c1; h4 ^= k4;
|
|
196
|
+
|
|
197
|
+
h4 = ROTL32(h4,13); h4 += h1; h4 = h4*5+0x32ac3b17;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
//----------
|
|
201
|
+
// tail
|
|
202
|
+
|
|
203
|
+
const uint8_t * tail = (const uint8_t*)(data + nblocks*16);
|
|
204
|
+
|
|
205
|
+
uint32_t k1 = 0;
|
|
206
|
+
uint32_t k2 = 0;
|
|
207
|
+
uint32_t k3 = 0;
|
|
208
|
+
uint32_t k4 = 0;
|
|
209
|
+
|
|
210
|
+
switch(len & 15)
|
|
211
|
+
{
|
|
212
|
+
case 15: k4 ^= tail[14] << 16;
|
|
213
|
+
case 14: k4 ^= tail[13] << 8;
|
|
214
|
+
case 13: k4 ^= tail[12] << 0;
|
|
215
|
+
k4 *= c4; k4 = ROTL32(k4,18); k4 *= c1; h4 ^= k4;
|
|
216
|
+
|
|
217
|
+
case 12: k3 ^= tail[11] << 24;
|
|
218
|
+
case 11: k3 ^= tail[10] << 16;
|
|
219
|
+
case 10: k3 ^= tail[ 9] << 8;
|
|
220
|
+
case 9: k3 ^= tail[ 8] << 0;
|
|
221
|
+
k3 *= c3; k3 = ROTL32(k3,17); k3 *= c4; h3 ^= k3;
|
|
222
|
+
|
|
223
|
+
case 8: k2 ^= tail[ 7] << 24;
|
|
224
|
+
case 7: k2 ^= tail[ 6] << 16;
|
|
225
|
+
case 6: k2 ^= tail[ 5] << 8;
|
|
226
|
+
case 5: k2 ^= tail[ 4] << 0;
|
|
227
|
+
k2 *= c2; k2 = ROTL32(k2,16); k2 *= c3; h2 ^= k2;
|
|
228
|
+
|
|
229
|
+
case 4: k1 ^= tail[ 3] << 24;
|
|
230
|
+
case 3: k1 ^= tail[ 2] << 16;
|
|
231
|
+
case 2: k1 ^= tail[ 1] << 8;
|
|
232
|
+
case 1: k1 ^= tail[ 0] << 0;
|
|
233
|
+
k1 *= c1; k1 = ROTL32(k1,15); k1 *= c2; h1 ^= k1;
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
//----------
|
|
237
|
+
// finalization
|
|
238
|
+
|
|
239
|
+
h1 ^= len; h2 ^= len; h3 ^= len; h4 ^= len;
|
|
240
|
+
|
|
241
|
+
h1 += h2; h1 += h3; h1 += h4;
|
|
242
|
+
h2 += h1; h3 += h1; h4 += h1;
|
|
243
|
+
|
|
244
|
+
h1 = fmix(h1);
|
|
245
|
+
h2 = fmix(h2);
|
|
246
|
+
h3 = fmix(h3);
|
|
247
|
+
h4 = fmix(h4);
|
|
248
|
+
|
|
249
|
+
h1 += h2; h1 += h3; h1 += h4;
|
|
250
|
+
h2 += h1; h3 += h1; h4 += h1;
|
|
251
|
+
|
|
252
|
+
((uint32_t*)out)[0] = h1;
|
|
253
|
+
((uint32_t*)out)[1] = h2;
|
|
254
|
+
((uint32_t*)out)[2] = h3;
|
|
255
|
+
((uint32_t*)out)[3] = h4;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
//-----------------------------------------------------------------------------
|
|
259
|
+
|
|
260
|
+
void MurmurHash3_x64_128 ( const void * key, const Py_ssize_t len,
|
|
261
|
+
const uint32_t seed, void * out )
|
|
262
|
+
{
|
|
263
|
+
const uint8_t * data = (const uint8_t*)key;
|
|
264
|
+
const Py_ssize_t nblocks = len / 16;
|
|
265
|
+
|
|
266
|
+
uint64_t h1 = seed;
|
|
267
|
+
uint64_t h2 = seed;
|
|
268
|
+
|
|
269
|
+
const uint64_t c1 = BIG_CONSTANT(0x87c37b91114253d5);
|
|
270
|
+
const uint64_t c2 = BIG_CONSTANT(0x4cf5ad432745937f);
|
|
271
|
+
|
|
272
|
+
//----------
|
|
273
|
+
// body
|
|
274
|
+
|
|
275
|
+
const uint64_t * blocks = (const uint64_t *)(data);
|
|
276
|
+
|
|
277
|
+
for(Py_ssize_t i = 0; i < nblocks; i++)
|
|
278
|
+
{
|
|
279
|
+
uint64_t k1 = getblock(blocks,i*2+0);
|
|
280
|
+
uint64_t k2 = getblock(blocks,i*2+1);
|
|
281
|
+
|
|
282
|
+
k1 *= c1; k1 = ROTL64(k1,31); k1 *= c2; h1 ^= k1;
|
|
283
|
+
|
|
284
|
+
h1 = ROTL64(h1,27); h1 += h2; h1 = h1*5+0x52dce729;
|
|
285
|
+
|
|
286
|
+
k2 *= c2; k2 = ROTL64(k2,33); k2 *= c1; h2 ^= k2;
|
|
287
|
+
|
|
288
|
+
h2 = ROTL64(h2,31); h2 += h1; h2 = h2*5+0x38495ab5;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
//----------
|
|
292
|
+
// tail
|
|
293
|
+
|
|
294
|
+
const uint8_t * tail = (const uint8_t*)(data + nblocks*16);
|
|
295
|
+
|
|
296
|
+
uint64_t k1 = 0;
|
|
297
|
+
uint64_t k2 = 0;
|
|
298
|
+
|
|
299
|
+
switch(len & 15)
|
|
300
|
+
{
|
|
301
|
+
case 15: k2 ^= uint64_t(tail[14]) << 48;
|
|
302
|
+
case 14: k2 ^= uint64_t(tail[13]) << 40;
|
|
303
|
+
case 13: k2 ^= uint64_t(tail[12]) << 32;
|
|
304
|
+
case 12: k2 ^= uint64_t(tail[11]) << 24;
|
|
305
|
+
case 11: k2 ^= uint64_t(tail[10]) << 16;
|
|
306
|
+
case 10: k2 ^= uint64_t(tail[ 9]) << 8;
|
|
307
|
+
case 9: k2 ^= uint64_t(tail[ 8]) << 0;
|
|
308
|
+
k2 *= c2; k2 = ROTL64(k2,33); k2 *= c1; h2 ^= k2;
|
|
309
|
+
|
|
310
|
+
case 8: k1 ^= uint64_t(tail[ 7]) << 56;
|
|
311
|
+
case 7: k1 ^= uint64_t(tail[ 6]) << 48;
|
|
312
|
+
case 6: k1 ^= uint64_t(tail[ 5]) << 40;
|
|
313
|
+
case 5: k1 ^= uint64_t(tail[ 4]) << 32;
|
|
314
|
+
case 4: k1 ^= uint64_t(tail[ 3]) << 24;
|
|
315
|
+
case 3: k1 ^= uint64_t(tail[ 2]) << 16;
|
|
316
|
+
case 2: k1 ^= uint64_t(tail[ 1]) << 8;
|
|
317
|
+
case 1: k1 ^= uint64_t(tail[ 0]) << 0;
|
|
318
|
+
k1 *= c1; k1 = ROTL64(k1,31); k1 *= c2; h1 ^= k1;
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
//----------
|
|
322
|
+
// finalization
|
|
323
|
+
|
|
324
|
+
h1 ^= len; h2 ^= len;
|
|
325
|
+
|
|
326
|
+
h1 += h2;
|
|
327
|
+
h2 += h1;
|
|
328
|
+
|
|
329
|
+
h1 = fmix(h1);
|
|
330
|
+
h2 = fmix(h2);
|
|
331
|
+
|
|
332
|
+
h1 += h2;
|
|
333
|
+
h2 += h1;
|
|
334
|
+
|
|
335
|
+
((uint64_t*)out)[0] = h1;
|
|
336
|
+
((uint64_t*)out)[1] = h2;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
//-----------------------------------------------------------------------------
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
//-----------------------------------------------------------------------------
|
|
2
|
+
// MurmurHash3 was written by Austin Appleby, and is placed in the public
|
|
3
|
+
// domain. The author hereby disclaims copyright to this source code.
|
|
4
|
+
|
|
5
|
+
#ifndef _MURMURHASH3_H_
|
|
6
|
+
#define _MURMURHASH3_H_
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
// To handle 64-bit data; see https://docs.python.org/2.7/c-api/arg.html
|
|
10
|
+
#ifndef PY_SSIZE_T_CLEAN
|
|
11
|
+
#define PY_SSIZE_T_CLEAN
|
|
12
|
+
#endif
|
|
13
|
+
#include <Python.h>
|
|
14
|
+
|
|
15
|
+
//-----------------------------------------------------------------------------
|
|
16
|
+
// Platform-specific functions and macros
|
|
17
|
+
|
|
18
|
+
// Microsoft Visual Studio
|
|
19
|
+
|
|
20
|
+
#if defined(_MSC_VER)
|
|
21
|
+
typedef unsigned __int8 uint8_t;
|
|
22
|
+
typedef unsigned __int32 uint32_t;
|
|
23
|
+
typedef unsigned __int64 uint64_t;
|
|
24
|
+
|
|
25
|
+
// Other compilers
|
|
26
|
+
|
|
27
|
+
#else // defined(_MSC_VER)
|
|
28
|
+
|
|
29
|
+
#include <stdint.h>
|
|
30
|
+
|
|
31
|
+
#endif // !defined(_MSC_VER)
|
|
32
|
+
|
|
33
|
+
//-----------------------------------------------------------------------------
|
|
34
|
+
|
|
35
|
+
void MurmurHash3_x86_32 ( const void * key, Py_ssize_t len, uint32_t seed, void * out );
|
|
36
|
+
|
|
37
|
+
void MurmurHash3_x86_128 ( const void * key, Py_ssize_t len, uint32_t seed, void * out );
|
|
38
|
+
|
|
39
|
+
void MurmurHash3_x64_128 ( const void * key, Py_ssize_t len, uint32_t seed, void * out );
|
|
40
|
+
|
|
41
|
+
//-----------------------------------------------------------------------------
|
|
42
|
+
|
|
43
|
+
#endif // _MURMURHASH3_H_
|