diff --git a/keras/src/backend/openvino/excluded_concrete_tests.txt b/keras/src/backend/openvino/excluded_concrete_tests.txt index 3000452394c5..b3276f209bb9 100644 --- a/keras/src/backend/openvino/excluded_concrete_tests.txt +++ b/keras/src/backend/openvino/excluded_concrete_tests.txt @@ -28,7 +28,6 @@ NumpyDtypeTest::test_floor NumpyDtypeTest::test_hstack NumpyDtypeTest::test_identity NumpyDtypeTest::test_inner -NumpyDtypeTest::test_isclose NumpyDtypeTest::test_isfinite NumpyDtypeTest::test_isinf NumpyDtypeTest::test_isnan @@ -157,7 +156,6 @@ NumpyTwoInputOpsCorrectnessTest::test_digitize NumpyTwoInputOpsCorrectnessTest::test_divide_no_nan NumpyTwoInputOpsCorrectnessTest::test_einsum NumpyTwoInputOpsCorrectnessTest::test_inner -NumpyTwoInputOpsCorrectnessTest::test_isclose NumpyTwoInputOpsCorrectnessTest::test_linspace NumpyTwoInputOpsCorrectnessTest::test_logspace NumpyTwoInputOpsCorrectnessTest::test_outer @@ -165,4 +163,4 @@ NumpyTwoInputOpsCorrectnessTest::test_quantile NumpyTwoInputOpsCorrectnessTest::test_take_along_axis NumpyTwoInputOpsCorrectnessTest::test_tensordot NumpyTwoInputOpsCorrectnessTest::test_vdot -NumpyTwoInputOpsCorrectnessTest::test_where \ No newline at end of file +NumpyTwoInputOpsCorrectnessTest::test_where diff --git a/keras/src/backend/openvino/numpy.py b/keras/src/backend/openvino/numpy.py index bc0276d4373f..709a88cfc495 100644 --- a/keras/src/backend/openvino/numpy.py +++ b/keras/src/backend/openvino/numpy.py @@ -778,9 +778,22 @@ def imag(x): def isclose(x1, x2, rtol=1e-5, atol=1e-8, equal_nan=False): - raise NotImplementedError( - "`isclose` is not supported with openvino backend" - ) + dtype = OPENVINO_DTYPES[config.floatx()] + + x1 = ov_opset.convert(get_ov_output(x1), dtype) + x2 = ov_opset.convert(get_ov_output(x2), dtype) + rtol = ov_opset.convert(get_ov_output(rtol), dtype) + atol = ov_opset.convert(get_ov_output(atol), dtype) + + abs_diff = ov_opset.abs(x1 - x2) + abs_x2 = ov_opset.abs(x2) + total_tolerance = atol + rtol * abs_x2 + is_close = ov_opset.less_equal(abs_diff, total_tolerance) + if equal_nan: + both_nan = ov_opset.logical_and(ov_opset.isnan(x1), ov_opset.isnan(x2)) + is_close = ov_opset.logical_or(is_close, both_nan) + + return OpenVINOKerasTensor(is_close.output(0)) def isfinite(x):