From 75de95e94658d45548e7c930e6133366efcf72af Mon Sep 17 00:00:00 2001 From: Christian Bourjau Date: Tue, 3 Sep 2024 23:40:02 +0200 Subject: [PATCH] Update array API tests without adding complex number support (#37) Co-authored-by: Aditya Goel <48102515+adityagoel4512@users.noreply.github.com> Co-authored-by: Aditya Goel --- .github/workflows/array-api.yml | 9 +- api-coverage-tests | 2 +- pixi.toml | 10 +- skips.txt | 108 +-------------------- xfails.txt | 164 ++++++++++++++++++++++++++++++++ 5 files changed, 180 insertions(+), 113 deletions(-) create mode 100644 xfails.txt diff --git a/.github/workflows/array-api.yml b/.github/workflows/array-api.yml index 852c84b..fefe240 100644 --- a/.github/workflows/array-api.yml +++ b/.github/workflows/array-api.yml @@ -24,14 +24,9 @@ jobs: - name: Install repository run: pixi run postinstall - name: Run Array API tests - env: - ARRAY_API_TESTS_MODULE: ndonnx - run: | - pushd api-coverage-tests - pixi run pytest --ci --max-examples 2 array_api_tests/ --json-report --json-report-file=api-coverage-tests.json -n auto -vv --skips-file=../skips.txt - popd + run: pixi run arrayapitests - name: Upload Array API tests report uses: actions/upload-artifact@v4 with: name: api-coverage-tests - path: api-coverage-tests/api-coverage-tests.json + path: api-coverage-tests.json diff --git a/api-coverage-tests b/api-coverage-tests index ea15d57..4caff28 160000 --- a/api-coverage-tests +++ b/api-coverage-tests @@ -1 +1 @@ -Subproject commit ea15d5792bbaeb57d2149e74870ad814730df704 +Subproject commit 4caff2867c69d5b9b329320319b61c5444bf6f87 diff --git a/pixi.toml b/pixi.toml index 91a8420..0fbfe24 100644 --- a/pixi.toml +++ b/pixi.toml @@ -43,10 +43,18 @@ hypothesis = "*" onnxruntime = "*" mypy = ">=1.10.0,<1.11" ndindex = "*" + [feature.test.tasks] test = "pytest" test-coverage = "pytest --cov=ndonnx --cov-report=xml --cov-report=term-missing" -arrayapitests = "ARRAY_API_TESTS_MODULE=ndonnx pytest --max-examples 2 api-coverage-tests/array_api_tests/ --json-report --json-report-file=api-coverage-tests.json -n auto -vv --skips-file=skips.txt" + +[feature.test.tasks.arrayapitests] +cmd = "pytest --max-examples 16 api-coverage-tests/array_api_tests/ -v -rfX --json-report --json-report-file=api-coverage-tests.json -n auto --disable-deadline --disable-extension linalg --skips-file=skips.txt --xfails-file=xfails.txt --hypothesis-seed=0" +[feature.test.tasks.arrayapitests.env] +ARRAY_API_TESTS_MODULE="ndonnx" +ARRAY_API_TESTS_VERSION="2023.12" +ARRAY_API_TESTS_SKIP_DTYPES="complex64,complex128" + [feature.lint.dependencies] pre-commit = "*" diff --git a/skips.txt b/skips.txt index 821e70f..f372e85 100644 --- a/skips.txt +++ b/skips.txt @@ -1,104 +1,4 @@ -array_api_tests/test_creation_functions.py::test_meshgrid -array_api_tests/test_has_names.py::test_has_names[array_attribute-device] -array_api_tests/test_has_names.py::test_has_names[array_method-__dlpack__] -array_api_tests/test_has_names.py::test_has_names[array_method-__dlpack_device__] -array_api_tests/test_has_names.py::test_has_names[array_method-to_device] -array_api_tests/test_has_names.py::test_has_names[linalg-det] -array_api_tests/test_has_names.py::test_has_names[linalg-diagonal] -array_api_tests/test_has_names.py::test_has_names[linalg-eigh] -array_api_tests/test_has_names.py::test_has_names[linalg-eigvalsh] -array_api_tests/test_has_names.py::test_has_names[linalg-inv] -array_api_tests/test_has_names.py::test_has_names[linalg-matmul] -array_api_tests/test_has_names.py::test_has_names[linalg-matrix_norm] -array_api_tests/test_has_names.py::test_has_names[linalg-matrix_power] -array_api_tests/test_has_names.py::test_has_names[linalg-matrix_rank] -array_api_tests/test_has_names.py::test_has_names[linalg-matrix_transpose] -array_api_tests/test_has_names.py::test_has_names[linalg-outer] -array_api_tests/test_has_names.py::test_has_names[linalg-pinv] -array_api_tests/test_has_names.py::test_has_names[linalg-qr] -array_api_tests/test_has_names.py::test_has_names[linalg-slogdet] -array_api_tests/test_has_names.py::test_has_names[linalg-solve] -array_api_tests/test_has_names.py::test_has_names[linalg-svd] -array_api_tests/test_has_names.py::test_has_names[linalg-svdvals] -array_api_tests/test_has_names.py::test_has_names[linalg-tensordot] -array_api_tests/test_has_names.py::test_has_names[linalg-trace] -array_api_tests/test_has_names.py::test_has_names[linalg-vecdot] -array_api_tests/test_has_names.py::test_has_names[linalg-vector_norm] -array_api_tests/test_has_names.py::test_has_names[linear_algebra-tensordot] -array_api_tests/test_has_names.py::test_has_names[linear_algebra-vecdot] -array_api_tests/test_has_names.py::test_has_names[linalg-cross] -array_api_tests/test_has_names.py::test_has_names[linalg-cholesky] -array_api_tests/test_linalg.py -array_api_tests/test_set_functions.py::test_unique_all -array_api_tests/test_set_functions.py::test_unique_counts -array_api_tests/test_set_functions.py::test_unique_inverse -array_api_tests/test_set_functions.py::test_unique_values -array_api_tests/test_signatures.py::test_array_method_signature[__array_namespace__] -array_api_tests/test_signatures.py::test_array_method_signature[__dlpack__] -array_api_tests/test_signatures.py::test_array_method_signature[__dlpack_device__] -array_api_tests/test_signatures.py::test_array_method_signature[to_device] -array_api_tests/test_signatures.py::test_func_signature[from_dlpack] -array_api_tests/test_signatures.py::test_func_signature[tensordot] -array_api_tests/test_signatures.py::test_func_signature[vecdot] -array_api_tests/test_signatures.py::test_func_signature[meshgrid] -array_api_tests/test_sorting_functions.py::test_argsort -array_api_tests/test_special_cases.py::test_binary[__mod__(isfinite(x1_i) and x1_i < 0 and x2_i is +infinity) -> x2_i] -array_api_tests/test_special_cases.py::test_binary[__mod__(isfinite(x1_i) and x1_i > 0 and x2_i is -infinity) -> x2_i] -array_api_tests/test_special_cases.py::test_binary[__mod__(x1_i is +0 and x2_i < 0) -> -0] -array_api_tests/test_special_cases.py::test_binary[__mod__(x1_i is -0 and x2_i > 0) -> +0] -array_api_tests/test_special_cases.py::test_binary[add(x1_i is -infinity and x2_i is -infinity) -> -infinity] -array_api_tests/test_special_cases.py::test_binary[atan2(x1_i is +infinity and x2_i is -infinity) -> roughly +3pi/4] -array_api_tests/test_special_cases.py::test_binary[atan2(x1_i < 0 and x2_i is -0) -> roughly -pi/2] -array_api_tests/test_special_cases.py::test_binary[atan2(x1_i > 0 and isfinite(x1_i) and x2_i is -infinity) -> roughly +pi] -array_api_tests/test_special_cases.py::test_binary[atan2(x1_i > 0 and x2_i is -0) -> roughly +pi/2] -array_api_tests/test_special_cases.py::test_binary[atan2(x1_i is +0 and x2_i < 0) -> roughly +pi] -array_api_tests/test_special_cases.py::test_binary[atan2(x1_i is +0 and x2_i is +0) -> +0] -array_api_tests/test_special_cases.py::test_binary[atan2(x1_i is +0 and x2_i is -0) -> roughly +pi] -array_api_tests/test_special_cases.py::test_binary[atan2(x1_i is -0 and x2_i < 0) -> roughly -pi] -array_api_tests/test_special_cases.py::test_binary[atan2(x1_i is -0 and x2_i is +0) -> -0] -array_api_tests/test_special_cases.py::test_binary[atan2(x1_i is -0 and x2_i is -0) -> roughly -pi] -array_api_tests/test_special_cases.py::test_binary[atan2(x1_i is -infinity and x2_i is +infinity) -> roughly -pi/4] -array_api_tests/test_special_cases.py::test_binary[atan2(x1_i is -infinity and x2_i is -infinity) -> roughly -3pi/4] -array_api_tests/test_special_cases.py::test_binary[floor_divide(copysign(1, x1_i) != copysign(1, x2_i) and isfinite(x1_i) and x1_i != 0 and isfinite(x2_i) and x2_i != 0) -> negative sign] -array_api_tests/test_special_cases.py::test_binary[__floordiv__(copysign(1, x1_i) != copysign(1, x2_i) and isfinite(x1_i) and x1_i != 0 and isfinite(x2_i) and x2_i != 0) -> negative sign] -array_api_tests/test_special_cases.py::test_binary[__floordiv__((x1_i is +infinity or x1_i == -infinity) and (x2_i is +infinity or x2_i == -infinity)) -> NaN] -array_api_tests/test_special_cases.py::test_binary[remainder(isfinite(x1_i) and x1_i < 0 and x2_i is +infinity) -> x2_i] -array_api_tests/test_special_cases.py::test_binary[remainder(isfinite(x1_i) and x1_i > 0 and x2_i is -infinity) -> x2_i] -array_api_tests/test_special_cases.py::test_binary[remainder(x1_i is +0 and x2_i < 0) -> -0] -array_api_tests/test_special_cases.py::test_binary[remainder(x1_i is -0 and x2_i > 0) -> +0] -array_api_tests/test_special_cases.py::test_empty_arrays[prod] -array_api_tests/test_special_cases.py::test_iop[__imod__(isfinite(x1_i) and x1_i < 0 and x2_i is +infinity) -> x2_i] -array_api_tests/test_special_cases.py::test_iop[__imod__(isfinite(x1_i) and x1_i > 0 and x2_i is -infinity) -> x2_i] -array_api_tests/test_special_cases.py::test_iop[__imod__(x1_i is +0 and x2_i < 0) -> -0] -array_api_tests/test_special_cases.py::test_iop[__imod__(x1_i is -0 and x2_i > 0) -> +0] -array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(copysign(1, x1_i) != copysign(1, x2_i) and isfinite(x1_i) and x1_i != 0 and isfinite(x2_i) and x2_i != 0) -> negative sign] -array_api_tests/test_special_cases.py::test_nan_propagation[prod] -array_api_tests/test_special_cases.py::test_unary[acos(x_i < -1) -> NaN] -array_api_tests/test_special_cases.py::test_unary[acos(x_i > 1) -> NaN] -array_api_tests/test_special_cases.py::test_unary[asin(x_i < -1) -> NaN] -array_api_tests/test_special_cases.py::test_unary[asin(x_i > 1) -> NaN] -array_api_tests/test_special_cases.py::test_unary[atanh(x_i < -1) -> NaN] -array_api_tests/test_special_cases.py::test_unary[atanh(x_i > 1) -> NaN] -array_api_tests/test_special_cases.py::test_unary[expm1(x_i is -0) -> -0] -array_api_tests/test_special_cases.py::test_unary[log1p(x_i is +0) -> +0] -array_api_tests/test_special_cases.py::test_unary[log1p(x_i is -0) -> -0] -array_api_tests/test_special_cases.py::test_unary[log1p(x_i is -1) -> -infinity] -array_api_tests/test_special_cases.py::test_unary[sinh(x_i is +0) -> +0] -array_api_tests/test_special_cases.py::test_unary[sinh(x_i is +infinity) -> +infinity] -array_api_tests/test_special_cases.py::test_unary[sinh(x_i is -0) -> -0] -array_api_tests/test_special_cases.py::test_unary[sinh(x_i is -infinity) -> -infinity] -array_api_tests/test_special_cases.py::test_unary[sinh(x_i is NaN) -> NaN] -array_api_tests/test_special_cases.py::test_unary[sqrt(x_i < 0) -> NaN] -array_api_tests/test_statistical_functions.py::test_prod -array_api_tests/test_statistical_functions.py::test_std -array_api_tests/test_statistical_functions.py::test_var -array_api_tests/test_statistical_functions.py::test_sum -array_api_tests/test_special_cases.py::test_binary[atan2(x1_i < 0 and isfinite(x1_i) and x2_i is -infinity) -> roughly -pi] -array_api_tests/test_special_cases.py::test_binary[atan2(x1_i is +infinity and x2_i is +infinity) -> roughly +pi/4] -array_api_tests/test_has_names.py::test_has_names[array_attribute-size] -array_api_tests/test_has_names.py::test_has_names[creation-from_dlpack] -array_api_tests/test_has_names.py::test_has_names[creation-meshgrid] -array_api_tests/test_operators_and_elementwise_functions.py::test_pow -array_api_tests/test_operators_and_elementwise_functions.py::test_floor_divide -array_api_tests/test_operators_and_elementwise_functions.py::test_atan2 -array_api_tests/test_operators_and_elementwise_functions.py::test_sinh +# The following tests cause segfaults + +array_api_tests/test_manipulation_functions.py::test_roll +array_api_tests/test_data_type_functions.py::test_broadcast_arrays diff --git a/xfails.txt b/xfails.txt new file mode 100644 index 0000000..6a4d7aa --- /dev/null +++ b/xfails.txt @@ -0,0 +1,164 @@ +array_api_tests/test_constants.py::test_newaxis +array_api_tests/test_creation_functions.py::test_eye +array_api_tests/test_creation_functions.py::test_meshgrid +array_api_tests/test_data_type_functions.py::test_can_cast +array_api_tests/test_data_type_functions.py::test_isdtype +array_api_tests/test_has_names.py::test_has_names[array_attribute-device] +array_api_tests/test_has_names.py::test_has_names[array_method-__complex__] +array_api_tests/test_has_names.py::test_has_names[array_method-__dlpack__] +array_api_tests/test_has_names.py::test_has_names[array_method-__dlpack_device__] +array_api_tests/test_has_names.py::test_has_names[array_method-to_device] +array_api_tests/test_has_names.py::test_has_names[creation-from_dlpack] +array_api_tests/test_has_names.py::test_has_names[creation-meshgrid] +array_api_tests/test_has_names.py::test_has_names[elementwise-conj] +array_api_tests/test_has_names.py::test_has_names[elementwise-copysign] +array_api_tests/test_has_names.py::test_has_names[elementwise-hypot] +array_api_tests/test_has_names.py::test_has_names[elementwise-imag] +array_api_tests/test_has_names.py::test_has_names[elementwise-maximum] +array_api_tests/test_has_names.py::test_has_names[elementwise-minimum] +array_api_tests/test_has_names.py::test_has_names[elementwise-real] +array_api_tests/test_has_names.py::test_has_names[elementwise-signbit] +array_api_tests/test_has_names.py::test_has_names[fft-fft] +array_api_tests/test_has_names.py::test_has_names[fft-fftfreq] +array_api_tests/test_has_names.py::test_has_names[fft-fftn] +array_api_tests/test_has_names.py::test_has_names[fft-fftshift] +array_api_tests/test_has_names.py::test_has_names[fft-hfft] +array_api_tests/test_has_names.py::test_has_names[fft-ifft] +array_api_tests/test_has_names.py::test_has_names[fft-ifftn] +array_api_tests/test_has_names.py::test_has_names[fft-ifftshift] +array_api_tests/test_has_names.py::test_has_names[fft-ihfft] +array_api_tests/test_has_names.py::test_has_names[fft-irfft] +array_api_tests/test_has_names.py::test_has_names[fft-irfftn] +array_api_tests/test_has_names.py::test_has_names[fft-rfft] +array_api_tests/test_has_names.py::test_has_names[fft-rfftfreq] +array_api_tests/test_has_names.py::test_has_names[fft-rfftn] +array_api_tests/test_has_names.py::test_has_names[info-__array_namespace_info__] +array_api_tests/test_has_names.py::test_has_names[linalg-cholesky] +array_api_tests/test_has_names.py::test_has_names[linalg-cross] +array_api_tests/test_has_names.py::test_has_names[linalg-det] +array_api_tests/test_has_names.py::test_has_names[linalg-diagonal] +array_api_tests/test_has_names.py::test_has_names[linalg-eigh] +array_api_tests/test_has_names.py::test_has_names[linalg-eigvalsh] +array_api_tests/test_has_names.py::test_has_names[linalg-inv] +array_api_tests/test_has_names.py::test_has_names[linalg-matmul] +array_api_tests/test_has_names.py::test_has_names[linalg-matrix_norm] +array_api_tests/test_has_names.py::test_has_names[linalg-matrix_power] +array_api_tests/test_has_names.py::test_has_names[linalg-matrix_rank] +array_api_tests/test_has_names.py::test_has_names[linalg-matrix_transpose] +array_api_tests/test_has_names.py::test_has_names[linalg-outer] +array_api_tests/test_has_names.py::test_has_names[linalg-pinv] +array_api_tests/test_has_names.py::test_has_names[linalg-qr] +array_api_tests/test_has_names.py::test_has_names[linalg-slogdet] +array_api_tests/test_has_names.py::test_has_names[linalg-solve] +array_api_tests/test_has_names.py::test_has_names[linalg-svd] +array_api_tests/test_has_names.py::test_has_names[linalg-svdvals] +array_api_tests/test_has_names.py::test_has_names[linalg-tensordot] +array_api_tests/test_has_names.py::test_has_names[linalg-trace] +array_api_tests/test_has_names.py::test_has_names[linalg-vecdot] +array_api_tests/test_has_names.py::test_has_names[linalg-vector_norm] +array_api_tests/test_has_names.py::test_has_names[linear_algebra-tensordot] +array_api_tests/test_has_names.py::test_has_names[linear_algebra-vecdot] +array_api_tests/test_has_names.py::test_has_names[manipulation-moveaxis] +array_api_tests/test_has_names.py::test_has_names[manipulation-repeat] +array_api_tests/test_has_names.py::test_has_names[manipulation-tile] +array_api_tests/test_has_names.py::test_has_names[manipulation-unstack] +array_api_tests/test_inspection_functions.py::test_array_namespace_info +array_api_tests/test_inspection_functions.py::test_array_namespace_info_dtypes +array_api_tests/test_linalg.py::test_matrix_transpose +array_api_tests/test_linalg.py::test_tensordot +array_api_tests/test_linalg.py::test_vecdot +array_api_tests/test_manipulation_functions.py::test_moveaxis +array_api_tests/test_manipulation_functions.py::test_repeat +array_api_tests/test_manipulation_functions.py::test_squeeze +array_api_tests/test_manipulation_functions.py::test_tile +array_api_tests/test_manipulation_functions.py::test_unstack +array_api_tests/test_operators_and_elementwise_functions.py::test_acosh +array_api_tests/test_operators_and_elementwise_functions.py::test_asinh +array_api_tests/test_operators_and_elementwise_functions.py::test_atan2 +array_api_tests/test_operators_and_elementwise_functions.py::test_clip +array_api_tests/test_operators_and_elementwise_functions.py::test_conj +array_api_tests/test_operators_and_elementwise_functions.py::test_copysign +array_api_tests/test_operators_and_elementwise_functions.py::test_cos +array_api_tests/test_operators_and_elementwise_functions.py::test_hypot +array_api_tests/test_operators_and_elementwise_functions.py::test_imag +array_api_tests/test_operators_and_elementwise_functions.py::test_maximum +array_api_tests/test_operators_and_elementwise_functions.py::test_minimum +array_api_tests/test_operators_and_elementwise_functions.py::test_pow[__ipow__(x, s)] +array_api_tests/test_operators_and_elementwise_functions.py::test_pow[__pow__(x, s)] +array_api_tests/test_operators_and_elementwise_functions.py::test_real +array_api_tests/test_operators_and_elementwise_functions.py::test_signbit +array_api_tests/test_operators_and_elementwise_functions.py::test_sinh +array_api_tests/test_operators_and_elementwise_functions.py::test_sqrt +array_api_tests/test_operators_and_elementwise_functions.py::test_tan +array_api_tests/test_searching_functions.py::test_argmax +array_api_tests/test_searching_functions.py::test_argmin +array_api_tests/test_searching_functions.py::test_nonzero_zerodim_error +array_api_tests/test_searching_functions.py::test_searchsorted +array_api_tests/test_searching_functions.py::test_where +array_api_tests/test_set_functions.py::test_unique_all +array_api_tests/test_set_functions.py::test_unique_counts +array_api_tests/test_set_functions.py::test_unique_inverse +array_api_tests/test_set_functions.py::test_unique_values +array_api_tests/test_signatures.py::test_array_method_signature[__complex__] +array_api_tests/test_signatures.py::test_array_method_signature[__dlpack__] +array_api_tests/test_signatures.py::test_array_method_signature[__dlpack_device__] +array_api_tests/test_signatures.py::test_array_method_signature[to_device] +array_api_tests/test_signatures.py::test_func_signature[__array_namespace_info__] +array_api_tests/test_signatures.py::test_func_signature[astype] +array_api_tests/test_signatures.py::test_func_signature[conj] +array_api_tests/test_signatures.py::test_func_signature[copysign] +array_api_tests/test_signatures.py::test_func_signature[from_dlpack] +array_api_tests/test_signatures.py::test_func_signature[hypot] +array_api_tests/test_signatures.py::test_func_signature[imag] +array_api_tests/test_signatures.py::test_func_signature[maximum] +array_api_tests/test_signatures.py::test_func_signature[meshgrid] +array_api_tests/test_signatures.py::test_func_signature[minimum] +array_api_tests/test_signatures.py::test_func_signature[moveaxis] +array_api_tests/test_signatures.py::test_func_signature[real] +array_api_tests/test_signatures.py::test_func_signature[repeat] +array_api_tests/test_signatures.py::test_func_signature[signbit] +array_api_tests/test_signatures.py::test_func_signature[tensordot] +array_api_tests/test_signatures.py::test_func_signature[tile] +array_api_tests/test_signatures.py::test_func_signature[unstack] +array_api_tests/test_signatures.py::test_func_signature[vecdot] +array_api_tests/test_signatures.py::test_info_func_signature[capabilities] +array_api_tests/test_signatures.py::test_info_func_signature[default_device] +array_api_tests/test_signatures.py::test_info_func_signature[default_dtypes] +array_api_tests/test_signatures.py::test_info_func_signature[devices] +array_api_tests/test_signatures.py::test_info_func_signature[dtypes] +array_api_tests/test_sorting_functions.py::test_argsort +array_api_tests/test_special_cases.py::test_binary[copysign(x1_i is NaN and x2_i < 0) -> NaN] +array_api_tests/test_special_cases.py::test_binary[copysign(x1_i is NaN and x2_i > 0) -> NaN] +array_api_tests/test_special_cases.py::test_binary[copysign(x1_i is NaN and x2_i is +0) -> NaN] +array_api_tests/test_special_cases.py::test_binary[copysign(x1_i is NaN and x2_i is -0) -> NaN] +array_api_tests/test_special_cases.py::test_binary[maximum(x1_i is NaN or x2_i is NaN) -> NaN] +array_api_tests/test_special_cases.py::test_binary[minimum(x1_i is NaN or x2_i is NaN) -> NaN] +array_api_tests/test_special_cases.py::test_empty_arrays[prod] +array_api_tests/test_special_cases.py::test_nan_propagation[max] +array_api_tests/test_special_cases.py::test_nan_propagation[min] +array_api_tests/test_special_cases.py::test_nan_propagation[prod] +array_api_tests/test_special_cases.py::test_unary[expm1(x_i is -0) -> -0] +array_api_tests/test_special_cases.py::test_unary[isfinite(x_i is NaN) -> False] +array_api_tests/test_special_cases.py::test_unary[log1p(x_i is +0) -> +0] +array_api_tests/test_special_cases.py::test_unary[log1p(x_i is -0) -> -0] +array_api_tests/test_special_cases.py::test_unary[log1p(x_i is -1) -> -infinity] +array_api_tests/test_special_cases.py::test_unary[sign(x_i is NaN) -> NaN] +array_api_tests/test_special_cases.py::test_unary[signbit(isfinite(x_i) and x_i < 0) -> True] +array_api_tests/test_special_cases.py::test_unary[signbit(isfinite(x_i) and x_i > 0) -> False] +array_api_tests/test_special_cases.py::test_unary[signbit(x_i is +0) -> False] +array_api_tests/test_special_cases.py::test_unary[signbit(x_i is +NaN) -> False] +array_api_tests/test_special_cases.py::test_unary[signbit(x_i is +infinity) -> False] +array_api_tests/test_special_cases.py::test_unary[signbit(x_i is -0) -> True] +array_api_tests/test_special_cases.py::test_unary[signbit(x_i is -NaN) -> True] +array_api_tests/test_special_cases.py::test_unary[signbit(x_i is -infinity) -> True] +array_api_tests/test_special_cases.py::test_unary[sinh(x_i is +0) -> +0] +array_api_tests/test_special_cases.py::test_unary[sinh(x_i is +infinity) -> +infinity] +array_api_tests/test_special_cases.py::test_unary[sinh(x_i is -0) -> -0] +array_api_tests/test_special_cases.py::test_unary[sinh(x_i is -infinity) -> -infinity] +array_api_tests/test_special_cases.py::test_unary[sinh(x_i is NaN) -> NaN] +array_api_tests/test_statistical_functions.py::test_cumulative_sum +array_api_tests/test_statistical_functions.py::test_prod +array_api_tests/test_special_cases.py::test_unary[acos(x_i > 1) -> NaN] +array_api_tests/test_special_cases.py::test_unary[asin(x_i > 1) -> NaN] +array_api_tests/test_special_cases.py::test_unary[acosh(x_i < 1) -> NaN] +array_api_tests/test_special_cases.py::test_unary[asinh(x_i < 1) -> NaN]