Skip to content

Commit 7dc773a

Browse files
authored
[OpenVINO backend] Support numpy.isneginf (#21665)
* feat: included tests for isneginf * feat: added isneginf to numpy openvino * fix: code format with pre-commit
1 parent b620e4d commit 7dc773a

File tree

2 files changed

+26
-7
lines changed

2 files changed

+26
-7
lines changed

keras/src/backend/openvino/excluded_concrete_tests.txt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ NumpyDtypeTest::test_isfinite
3636
NumpyDtypeTest::test_isin
3737
NumpyDtypeTest::test_isinf
3838
NumpyDtypeTest::test_isnan
39-
NumpyDtypeTest::test_isneginf
4039
NumpyDtypeTest::test_isposinf
4140
NumpyDtypeTest::test_kron
4241
NumpyDtypeTest::test_linspace
@@ -94,7 +93,6 @@ NumpyOneInputOpsCorrectnessTest::test_floor_divide
9493
NumpyOneInputOpsCorrectnessTest::test_imag
9594
NumpyOneInputOpsCorrectnessTest::test_isfinite
9695
NumpyOneInputOpsCorrectnessTest::test_isinf
97-
NumpyOneInputOpsCorrectnessTest::test_isneginf
9896
NumpyOneInputOpsCorrectnessTest::test_isposinf
9997
NumpyOneInputOpsCorrectnessTest::test_max
10098
NumpyOneInputOpsCorrectnessTest::test_mean
@@ -156,12 +154,10 @@ NumpyOneInputOpsDynamicShapeTest::test_cbrt
156154
NumpyOneInputOpsDynamicShapeTest::test_corrcoef
157155
NumpyOneInputOpsDynamicShapeTest::test_hamming
158156
NumpyOneInputOpsDynamicShapeTest::test_hanning
159-
NumpyOneInputOpsDynamicShapeTest::test_isneginf
160157
NumpyOneInputOpsDynamicShapeTest::test_isposinf
161158
NumpyOneInputOpsDynamicShapeTest::test_kaiser
162159
NumpyOneInputOpsStaticShapeTest::test_angle
163160
NumpyOneInputOpsStaticShapeTest::test_cbrt
164-
NumpyOneInputOpsStaticShapeTest::test_isneginf
165161
NumpyOneInputOpsStaticShapeTest::test_isposinf
166162
NumpyTwoInputOpsDynamicShapeTest::test_gcd
167163
NumpyTwoInputOpsDynamicShapeTest::test_heaviside

keras/src/backend/openvino/numpy.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -969,9 +969,32 @@ def isnan(x):
969969

970970

971971
def isneginf(x):
972-
raise NotImplementedError(
973-
"`isneginf` is not supported with openvino backend"
974-
)
972+
x = get_ov_output(x)
973+
x_type = x.get_element_type()
974+
975+
if x_type.is_integral() or x_type == Type.boolean:
976+
shape = ov_opset.shape_of(x, "i32").output(0)
977+
false_const = ov_opset.constant(False, Type.boolean).output(0)
978+
return OpenVINOKerasTensor(
979+
ov_opset.broadcast(false_const, shape).output(0)
980+
)
981+
982+
if x_type == Type.bf16:
983+
x_f32 = ov_opset.convert(x, Type.f32).output(0)
984+
neg_inf = ov_opset.constant(-np.inf, Type.f32).output(0)
985+
is_neg_inf = ov_opset.equal(x_f32, neg_inf).output(0)
986+
else:
987+
if x_type == Type.f16:
988+
neg_inf = ov_opset.constant(-np.inf, Type.f16).output(0)
989+
elif x_type == Type.f32:
990+
neg_inf = ov_opset.constant(-np.inf, Type.f32).output(0)
991+
elif x_type == Type.f64:
992+
neg_inf = ov_opset.constant(-np.inf, Type.f64).output(0)
993+
else:
994+
neg_inf = ov_opset.constant(-np.inf, Type.f32).output(0)
995+
is_neg_inf = ov_opset.equal(x, neg_inf).output(0)
996+
997+
return OpenVINOKerasTensor(is_neg_inf)
975998

976999

9771000
def isposinf(x):

0 commit comments

Comments
 (0)