Skip to content

Commit fa499b4

Browse files
authored
Implement isneginf function in keras.ops (#21538)
* Add isneginf method for each backend * Add isneginf method for ops * Add NumpyDtypeTest * Add test cases
1 parent 387fbc9 commit fa499b4

File tree

12 files changed

+91
-0
lines changed

12 files changed

+91
-0
lines changed

keras/api/_tf_keras/keras/ops/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@
202202
from keras.src.ops.numpy import isin as isin
203203
from keras.src.ops.numpy import isinf as isinf
204204
from keras.src.ops.numpy import isnan as isnan
205+
from keras.src.ops.numpy import isneginf as isneginf
205206
from keras.src.ops.numpy import kaiser as kaiser
206207
from keras.src.ops.numpy import left_shift as left_shift
207208
from keras.src.ops.numpy import less as less

keras/api/_tf_keras/keras/ops/numpy/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@
9191
from keras.src.ops.numpy import isin as isin
9292
from keras.src.ops.numpy import isinf as isinf
9393
from keras.src.ops.numpy import isnan as isnan
94+
from keras.src.ops.numpy import isneginf as isneginf
9495
from keras.src.ops.numpy import kaiser as kaiser
9596
from keras.src.ops.numpy import left_shift as left_shift
9697
from keras.src.ops.numpy import less as less

keras/api/ops/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@
202202
from keras.src.ops.numpy import isin as isin
203203
from keras.src.ops.numpy import isinf as isinf
204204
from keras.src.ops.numpy import isnan as isnan
205+
from keras.src.ops.numpy import isneginf as isneginf
205206
from keras.src.ops.numpy import kaiser as kaiser
206207
from keras.src.ops.numpy import left_shift as left_shift
207208
from keras.src.ops.numpy import less as less

keras/api/ops/numpy/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@
9191
from keras.src.ops.numpy import isin as isin
9292
from keras.src.ops.numpy import isinf as isinf
9393
from keras.src.ops.numpy import isnan as isnan
94+
from keras.src.ops.numpy import isneginf as isneginf
9495
from keras.src.ops.numpy import kaiser as kaiser
9596
from keras.src.ops.numpy import left_shift as left_shift
9697
from keras.src.ops.numpy import less as less

keras/src/backend/jax/numpy.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -787,6 +787,11 @@ def isnan(x):
787787
return jnp.isnan(x)
788788

789789

790+
def isneginf(x):
791+
x = convert_to_tensor(x)
792+
return jnp.isneginf(x)
793+
794+
790795
def less(x1, x2):
791796
x1 = convert_to_tensor(x1)
792797
x2 = convert_to_tensor(x2)

keras/src/backend/numpy/numpy.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -696,6 +696,11 @@ def isnan(x):
696696
return np.isnan(x)
697697

698698

699+
def isneginf(x):
700+
x = convert_to_tensor(x)
701+
return np.isneginf(x)
702+
703+
699704
def less(x1, x2):
700705
return np.less(x1, x2)
701706

keras/src/backend/openvino/excluded_concrete_tests.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ NumpyDtypeTest::test_isfinite
3535
NumpyDtypeTest::test_isin
3636
NumpyDtypeTest::test_isinf
3737
NumpyDtypeTest::test_isnan
38+
NumpyDtypeTest::test_isneginf
3839
NumpyDtypeTest::test_linspace
3940
NumpyDtypeTest::test_logaddexp
4041
NumpyDtypeTest::test_logspace
@@ -94,6 +95,7 @@ NumpyOneInputOpsCorrectnessTest::test_floor_divide
9495
NumpyOneInputOpsCorrectnessTest::test_imag
9596
NumpyOneInputOpsCorrectnessTest::test_isfinite
9697
NumpyOneInputOpsCorrectnessTest::test_isinf
98+
NumpyOneInputOpsCorrectnessTest::test_isneginf
9799
NumpyOneInputOpsCorrectnessTest::test_logaddexp
98100
NumpyOneInputOpsCorrectnessTest::test_max
99101
NumpyOneInputOpsCorrectnessTest::test_mean
@@ -155,10 +157,12 @@ NumpyOneInputOpsDynamicShapeTest::test_corrcoef
155157
NumpyOneInputOpsDynamicShapeTest::test_deg2rad
156158
NumpyOneInputOpsDynamicShapeTest::test_hamming
157159
NumpyOneInputOpsDynamicShapeTest::test_hanning
160+
NumpyOneInputOpsDynamicShapeTest::test_isneginf
158161
NumpyOneInputOpsDynamicShapeTest::test_kaiser
159162
NumpyOneInputOpsStaticShapeTest::test_angle
160163
NumpyOneInputOpsStaticShapeTest::test_cbrt
161164
NumpyOneInputOpsStaticShapeTest::test_deg2rad
165+
NumpyOneInputOpsStaticShapeTest::test_isneginf
162166
NumpyTwoInputOpsDynamicShapeTest::test_heaviside
163167
NumpyTwoInputOpsDynamicShapeTest::test_isin
164168
NumpyTwoInputOpsStaticShapeTest::test_heaviside

keras/src/backend/openvino/numpy.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -943,6 +943,12 @@ def isnan(x):
943943
return OpenVINOKerasTensor(ov_opset.is_nan(x).output(0))
944944

945945

946+
def isneginf(x):
947+
raise NotImplementedError(
948+
"`isneginf` is not supported with openvino backend"
949+
)
950+
951+
946952
def less(x1, x2):
947953
element_type = None
948954
if isinstance(x1, OpenVINOKerasTensor):

keras/src/backend/tensorflow/numpy.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1630,6 +1630,14 @@ def isnan(x):
16301630
return tf.math.is_nan(x)
16311631

16321632

1633+
def isneginf(x):
1634+
x = convert_to_tensor(x)
1635+
dtype_as_dtype = tf.as_dtype(x.dtype)
1636+
if dtype_as_dtype.is_integer or not dtype_as_dtype.is_numeric:
1637+
return tf.zeros(x.shape, tf.bool)
1638+
return tf.math.equal(x, -tf.constant(float("inf"), dtype=x.dtype))
1639+
1640+
16331641
def less(x1, x2):
16341642
x1 = convert_to_tensor(x1)
16351643
x2 = convert_to_tensor(x2)

keras/src/backend/torch/numpy.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -913,6 +913,11 @@ def isnan(x):
913913
return torch.isnan(x)
914914

915915

916+
def isneginf(x):
917+
x = convert_to_tensor(x)
918+
return torch.isneginf(x)
919+
920+
916921
def less(x1, x2):
917922
x1, x2 = convert_to_tensor(x1), convert_to_tensor(x2)
918923
return torch.less(x1, x2)

0 commit comments

Comments
 (0)