From 00aeab327e945b01f11a28aa7091731646a7d90c Mon Sep 17 00:00:00 2001 From: Roman Kazantsev Date: Mon, 3 Feb 2025 03:04:03 +0400 Subject: [PATCH] [OpenVINO backend] Provide more granular tests exclusion mechanism (#20845) * [OpenVINO backend] Provide more granular tests exclusion mechanism This mechanism is required for open-source community who will provide PRs for each operation. In order to validate PR with the concrete operation support, they should remove the corresponding line. Signed-off-by: Kazantsev, Roman * Optimize code in conftest.py Signed-off-by: Kazantsev, Roman * Format code file Signed-off-by: Kazantsev, Roman * Update keras/src/backend/openvino/excluded_concrete_tests.txt --------- Signed-off-by: Kazantsev, Roman --- conftest.py | 21 ++++ .../openvino/excluded_concrete_tests.txt | 102 ++++++++++++++++++ keras/src/backend/openvino/excluded_tests.txt | 1 - 3 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 keras/src/backend/openvino/excluded_concrete_tests.txt diff --git a/conftest.py b/conftest.py index a710f73786cd..a1ea903ad8e4 100644 --- a/conftest.py +++ b/conftest.py @@ -25,6 +25,16 @@ def pytest_configure(config): def pytest_collection_modifyitems(config, items): + with open( + "keras/src/backend/openvino/excluded_concrete_tests.txt", "r" + ) as file: + openvino_skipped_tests = file.readlines() + # it is necessary to check if stripped line is not empty + # and exclude such lines + openvino_skipped_tests = [ + line.strip() for line in openvino_skipped_tests if line.strip() + ] + requires_trainable_backend = pytest.mark.skipif( backend() == "numpy" or backend() == "openvino", reason="Trainer not implemented for NumPy and OpenVINO backend.", @@ -32,6 +42,17 @@ def pytest_collection_modifyitems(config, items): for item in items: if "requires_trainable_backend" in item.keywords: item.add_marker(requires_trainable_backend) + # also, skip concrete tests for openvino, listed in the special file + # this is more granular mechanism to exclude tests rather + # than using --ignore option + for skipped_test in openvino_skipped_tests: + if skipped_test in item.nodeid: + item.add_marker( + skip_if_backend( + "openvino", + "Not supported operation by openvino backend", + ) + ) def skip_if_backend(given_backend, reason): diff --git a/keras/src/backend/openvino/excluded_concrete_tests.txt b/keras/src/backend/openvino/excluded_concrete_tests.txt new file mode 100644 index 000000000000..74d88c14c976 --- /dev/null +++ b/keras/src/backend/openvino/excluded_concrete_tests.txt @@ -0,0 +1,102 @@ +NumPyTestRot90 +NumpyArrayCreateOpsCorrectnessTest +NumpyDtypeTest +HistogramTest +NumpyOneInputOpsCorrectnessTest::test_all +NumpyOneInputOpsCorrectnessTest::test_amax +NumpyOneInputOpsCorrectnessTest::test_amin +NumpyOneInputOpsCorrectnessTest::test_any +NumpyOneInputOpsCorrectnessTest::test_argmax +NumpyOneInputOpsCorrectnessTest::test_argmin +NumpyOneInputOpsCorrectnessTest::test_argpartition +NumpyOneInputOpsCorrectnessTest::test_argsort +NumpyOneInputOpsCorrectnessTest::test_array +NumpyOneInputOpsCorrectnessTest::test_average +NumpyOneInputOpsCorrectnessTest::test_bincount +NumpyOneInputOpsCorrectnessTest::test_bitwise_invert +NumpyOneInputOpsCorrectnessTest::test_conj +NumpyOneInputOpsCorrectnessTest::test_correlate +NumpyOneInputOpsCorrectnessTest::test_count_nonzero +NumpyOneInputOpsCorrectnessTest::test_cumprod +NumpyOneInputOpsCorrectnessTest::test_diag +NumpyOneInputOpsCorrectnessTest::test_diagonal +NumpyOneInputOpsCorrectnessTest::test_diff +NumpyOneInputOpsCorrectnessTest::test_dot +NumpyOneInputOpsCorrectnessTest::test_exp +NumpyOneInputOpsCorrectnessTest::test_expand_dims +NumpyOneInputOpsCorrectnessTest::test_flip +NumpyOneInputOpsCorrectnessTest::test_floor_divide +NumpyOneInputOpsCorrectnessTest::test_hstack +NumpyOneInputOpsCorrectnessTest::test_imag +NumpyOneInputOpsCorrectnessTest::test_isfinite +NumpyOneInputOpsCorrectnessTest::test_isinf +NumpyOneInputOpsCorrectnessTest::test_log +NumpyOneInputOpsCorrectnessTest::test_max +NumpyOneInputOpsCorrectnessTest::test_mean +NumpyOneInputOpsCorrectnessTest::test_median +NumpyOneInputOpsCorrectnessTest::test_meshgrid +NumpyOneInputOpsCorrectnessTest::test_min +NumpyOneInputOpsCorrectnessTest::test_moveaxis +NumpyOneInputOpsCorrectnessTest::test_nan_to_num +NumpyOneInputOpsCorrectnessTest::test_ndim +NumpyOneInputOpsCorrectnessTest::test_nonzero +NumpyOneInputOpsCorrectnessTest::test_pad_float16_constant_2 +NumpyOneInputOpsCorrectnessTest::test_pad_float32_constant_2 +NumpyOneInputOpsCorrectnessTest::test_pad_float64_constant_2 +NumpyOneInputOpsCorrectnessTest::test_pad_int16_constant_2 +NumpyOneInputOpsCorrectnessTest::test_pad_int8_constant_2 +NumpyOneInputOpsCorrectnessTest::test_pad_uint8_constant_2 +NumpyOneInputOpsCorrectnessTest::test_pad_int32_constant_2 +NumpyOneInputOpsCorrectnessTest::test_prod +NumpyOneInputOpsCorrectnessTest::test_ravel +NumpyOneInputOpsCorrectnessTest::test_real +NumpyOneInputOpsCorrectnessTest::test_reciprocal +NumpyOneInputOpsCorrectnessTest::test_repeat +NumpyOneInputOpsCorrectnessTest::test_reshape +NumpyOneInputOpsCorrectnessTest::test_roll +NumpyOneInputOpsCorrectnessTest::test_round +NumpyOneInputOpsCorrectnessTest::test_searchsorted +NumpyOneInputOpsCorrectnessTest::test_select +NumpyOneInputOpsCorrectnessTest::test_signbit +NumpyOneInputOpsCorrectnessTest::test_size +NumpyOneInputOpsCorrectnessTest::test_slogdet +NumpyOneInputOpsCorrectnessTest::test_sort +NumpyOneInputOpsCorrectnessTest::test_split +NumpyOneInputOpsCorrectnessTest::test_sqrt_int32 +NumpyOneInputOpsCorrectnessTest::test_squeeze +NumpyOneInputOpsCorrectnessTest::test_std +NumpyOneInputOpsCorrectnessTest::test_sum +NumpyOneInputOpsCorrectnessTest::test_swapaxes +NumpyOneInputOpsCorrectnessTest::test_tile +NumpyOneInputOpsCorrectnessTest::test_trace +NumpyOneInputOpsCorrectnessTest::test_transpose +NumpyOneInputOpsCorrectnessTest::test_tril +NumpyOneInputOpsCorrectnessTest::test_tril_in_layer +NumpyOneInputOpsCorrectnessTest::test_triu +NumpyOneInputOpsCorrectnessTest::test_trunc +NumpyOneInputOpsCorrectnessTest::test_unravel_index +NumpyOneInputOpsCorrectnessTest::test_var +NumpyOneInputOpsCorrectnessTest::test_vectorize +NumpyOneInputOpsCorrectnessTest::test_vstack +NumpyTwoInputOpsCorrectnessTest::test_append +NumpyTwoInputOpsCorrectnessTest::test_arctan2 +NumpyTwoInputOpsCorrectnessTest::test_bitwise_and +NumpyTwoInputOpsCorrectnessTest::test_bitwise_left_shift +NumpyTwoInputOpsCorrectnessTest::test_bitwise_or +NumpyTwoInputOpsCorrectnessTest::test_bitwise_right_shift +NumpyTwoInputOpsCorrectnessTest::test_bitwise_xor +NumpyTwoInputOpsCorrectnessTest::test_cross +NumpyTwoInputOpsCorrectnessTest::test_digitize +NumpyTwoInputOpsCorrectnessTest::test_divide_no_nan +NumpyTwoInputOpsCorrectnessTest::test_einsum +NumpyTwoInputOpsCorrectnessTest::test_full_like +NumpyTwoInputOpsCorrectnessTest::test_inner +NumpyTwoInputOpsCorrectnessTest::test_isclose +NumpyTwoInputOpsCorrectnessTest::test_linspace +NumpyTwoInputOpsCorrectnessTest::test_logspace +NumpyTwoInputOpsCorrectnessTest::test_outer +NumpyTwoInputOpsCorrectnessTest::test_quantile +NumpyTwoInputOpsCorrectnessTest::test_take_along_axis +NumpyTwoInputOpsCorrectnessTest::test_tensordot +NumpyTwoInputOpsCorrectnessTest::test_vdot +NumpyTwoInputOpsCorrectnessTest::test_where \ No newline at end of file diff --git a/keras/src/backend/openvino/excluded_tests.txt b/keras/src/backend/openvino/excluded_tests.txt index 31e18389248d..41c08c3d00a1 100644 --- a/keras/src/backend/openvino/excluded_tests.txt +++ b/keras/src/backend/openvino/excluded_tests.txt @@ -33,7 +33,6 @@ keras/src/ops/image_test.py keras/src/ops/linalg_test.py keras/src/ops/math_test.py keras/src/ops/nn_test.py -keras/src/ops/numpy_test.py keras/src/optimizers keras/src/quantizers keras/src/random