Skip to content

Commit 9f8bbca

Browse files
authored
[OpenVINO backend] Added support for numpy.isclose operation (#21138)
* Added decomposition for numpy.isclose * Removed test from excluded list * Fixed failed test cases * Fixed dtype error
1 parent 78ca6a4 commit 9f8bbca

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

keras/src/backend/openvino/excluded_concrete_tests.txt

-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ NumpyDtypeTest::test_flip
2323
NumpyDtypeTest::test_floor
2424
NumpyDtypeTest::test_hstack
2525
NumpyDtypeTest::test_inner
26-
NumpyDtypeTest::test_isclose
2726
NumpyDtypeTest::test_isfinite
2827
NumpyDtypeTest::test_isinf
2928
NumpyDtypeTest::test_isnan
@@ -149,7 +148,6 @@ NumpyTwoInputOpsCorrectnessTest::test_digitize
149148
NumpyTwoInputOpsCorrectnessTest::test_divide_no_nan
150149
NumpyTwoInputOpsCorrectnessTest::test_einsum
151150
NumpyTwoInputOpsCorrectnessTest::test_inner
152-
NumpyTwoInputOpsCorrectnessTest::test_isclose
153151
NumpyTwoInputOpsCorrectnessTest::test_linspace
154152
NumpyTwoInputOpsCorrectnessTest::test_logspace
155153
NumpyTwoInputOpsCorrectnessTest::test_outer

keras/src/backend/openvino/numpy.py

+16-3
Original file line numberDiff line numberDiff line change
@@ -850,9 +850,22 @@ def imag(x):
850850

851851

852852
def isclose(x1, x2, rtol=1e-5, atol=1e-8, equal_nan=False):
853-
raise NotImplementedError(
854-
"`isclose` is not supported with openvino backend"
855-
)
853+
dtype = OPENVINO_DTYPES[config.floatx()]
854+
855+
x1 = ov_opset.convert(get_ov_output(x1), dtype)
856+
x2 = ov_opset.convert(get_ov_output(x2), dtype)
857+
rtol = ov_opset.convert(get_ov_output(rtol), dtype)
858+
atol = ov_opset.convert(get_ov_output(atol), dtype)
859+
860+
abs_diff = ov_opset.abs(x1 - x2)
861+
abs_x2 = ov_opset.abs(x2)
862+
total_tolerance = atol + rtol * abs_x2
863+
is_close = ov_opset.less_equal(abs_diff, total_tolerance)
864+
if equal_nan:
865+
both_nan = ov_opset.logical_and(ov_opset.isnan(x1), ov_opset.isnan(x2))
866+
is_close = ov_opset.logical_or(is_close, both_nan)
867+
868+
return OpenVINOKerasTensor(is_close.output(0))
856869

857870

858871
def isfinite(x):

0 commit comments

Comments
 (0)