Skip to content

Commit 18ab462

Browse files
authored
Implement deg2rad function in keras.ops (#21444)
* Add deg2rad function for numpy * Add deg2rad for ops * Patch for numpy_test * update numpy.py for torch * update numpy_test * update tensorflow numpy.py * fix test case failed * Update excluded_concrete_tests.txt * Fix openvino test failed * Update the code by review
1 parent b855c42 commit 18ab462

File tree

12 files changed

+123
-0
lines changed

12 files changed

+123
-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
@@ -163,6 +163,7 @@
163163
from keras.src.ops.numpy import cross as cross
164164
from keras.src.ops.numpy import cumprod as cumprod
165165
from keras.src.ops.numpy import cumsum as cumsum
166+
from keras.src.ops.numpy import deg2rad as deg2rad
166167
from keras.src.ops.numpy import diag as diag
167168
from keras.src.ops.numpy import diagflat as diagflat
168169
from keras.src.ops.numpy import diagonal as diagonal

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
from keras.src.ops.numpy import cross as cross
5353
from keras.src.ops.numpy import cumprod as cumprod
5454
from keras.src.ops.numpy import cumsum as cumsum
55+
from keras.src.ops.numpy import deg2rad as deg2rad
5556
from keras.src.ops.numpy import diag as diag
5657
from keras.src.ops.numpy import diagflat as diagflat
5758
from keras.src.ops.numpy import diagonal as diagonal

keras/api/ops/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@
163163
from keras.src.ops.numpy import cross as cross
164164
from keras.src.ops.numpy import cumprod as cumprod
165165
from keras.src.ops.numpy import cumsum as cumsum
166+
from keras.src.ops.numpy import deg2rad as deg2rad
166167
from keras.src.ops.numpy import diag as diag
167168
from keras.src.ops.numpy import diagflat as diagflat
168169
from keras.src.ops.numpy import diagonal as diagonal

keras/api/ops/numpy/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
from keras.src.ops.numpy import cross as cross
5353
from keras.src.ops.numpy import cumprod as cumprod
5454
from keras.src.ops.numpy import cumsum as cumsum
55+
from keras.src.ops.numpy import deg2rad as deg2rad
5556
from keras.src.ops.numpy import diag as diag
5657
from keras.src.ops.numpy import diagflat as diagflat
5758
from keras.src.ops.numpy import diagonal as diagonal

keras/src/backend/jax/numpy.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,11 @@ def cumsum(x, axis=None, dtype=None):
598598
return jnp.cumsum(x, axis=axis, dtype=dtype)
599599

600600

601+
def deg2rad(x):
602+
x = convert_to_tensor(x)
603+
return jnp.deg2rad(x)
604+
605+
601606
def diag(x, k=0):
602607
x = convert_to_tensor(x)
603608
return jnp.diag(x, k=k)

keras/src/backend/numpy/numpy.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -515,6 +515,19 @@ def cumsum(x, axis=None, dtype=None):
515515
return np.cumsum(x, axis=axis, dtype=dtype)
516516

517517

518+
def deg2rad(x):
519+
x = convert_to_tensor(x)
520+
521+
if x.dtype in ["int64", "float64"]:
522+
dtype = "float64"
523+
elif x.dtype in ["bfloat16", "float16"]:
524+
dtype = x.dtype
525+
else:
526+
dtype = config.floatx()
527+
528+
return np.deg2rad(x).astype(dtype)
529+
530+
518531
def diag(x, k=0):
519532
return np.diag(x, k=k)
520533

keras/src/backend/openvino/excluded_concrete_tests.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ NumpyDtypeTest::test_correlate
2121
NumpyDtypeTest::test_cross
2222
NumpyDtypeTest::test_cumprod
2323
NumpyDtypeTest::test_cumsum_bool
24+
NumpyDtypeTest::test_deg2rad
2425
NumpyDtypeTest::test_diag
2526
NumpyDtypeTest::test_digitize
2627
NumpyDtypeTest::test_einsum
@@ -84,6 +85,7 @@ NumpyOneInputOpsCorrectnessTest::test_conj
8485
NumpyOneInputOpsCorrectnessTest::test_corrcoef
8586
NumpyOneInputOpsCorrectnessTest::test_correlate
8687
NumpyOneInputOpsCorrectnessTest::test_cumprod
88+
NumpyOneInputOpsCorrectnessTest::test_deg2rad
8789
NumpyOneInputOpsCorrectnessTest::test_diag
8890
NumpyOneInputOpsCorrectnessTest::test_diagonal
8991
NumpyOneInputOpsCorrectnessTest::test_exp2
@@ -152,10 +154,12 @@ NumpyOneInputOpsDynamicShapeTest::test_angle
152154
NumpyOneInputOpsDynamicShapeTest::test_bartlett
153155
NumpyOneInputOpsDynamicShapeTest::test_blackman
154156
NumpyOneInputOpsDynamicShapeTest::test_corrcoef
157+
NumpyOneInputOpsDynamicShapeTest::test_deg2rad
155158
NumpyOneInputOpsDynamicShapeTest::test_hamming
156159
NumpyOneInputOpsDynamicShapeTest::test_hanning
157160
NumpyOneInputOpsDynamicShapeTest::test_kaiser
158161
NumpyOneInputOpsStaticShapeTest::test_angle
162+
NumpyOneInputOpsStaticShapeTest::test_deg2rad
159163
CoreOpsBehaviorTests::test_associative_scan_invalid_arguments
160164
CoreOpsBehaviorTests::test_scan_invalid_arguments
161165
CoreOpsCallsTests::test_associative_scan_basic_call

keras/src/backend/openvino/numpy.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,12 @@ def cumsum(x, axis=None, dtype=None):
642642
return OpenVINOKerasTensor(ov_opset.cumsum(x, axis).output(0))
643643

644644

645+
def deg2rad(x):
646+
raise NotImplementedError(
647+
"`deg2rad` is not supported with openvino backend"
648+
)
649+
650+
645651
def diag(x, k=0):
646652
raise NotImplementedError("`diag` is not supported with openvino backend")
647653

keras/src/backend/tensorflow/numpy.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1256,6 +1256,28 @@ def cumsum(x, axis=None, dtype=None):
12561256
return tf.math.cumsum(x, axis=axis)
12571257

12581258

1259+
def deg2rad(x):
1260+
x = convert_to_tensor(x)
1261+
1262+
dtype = x.dtype
1263+
if standardize_dtype(dtype) in [
1264+
"bool",
1265+
"int8",
1266+
"int16",
1267+
"int32",
1268+
"uint8",
1269+
"uint16",
1270+
"uint32",
1271+
]:
1272+
dtype = config.floatx()
1273+
elif standardize_dtype(dtype) in ["int64"]:
1274+
dtype = "float64"
1275+
x = tf.cast(x, dtype)
1276+
1277+
pi = tf.constant(math.pi, dtype=dtype)
1278+
return x * (pi / tf.constant(180.0, dtype=dtype))
1279+
1280+
12591281
def diag(x, k=0):
12601282
x = convert_to_tensor(x)
12611283
if len(x.shape) == 1:

keras/src/backend/torch/numpy.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -670,6 +670,15 @@ def cumsum(x, axis=None, dtype=None):
670670
return torch.cumsum(x, dim=axis, dtype=to_torch_dtype(dtype))
671671

672672

673+
def deg2rad(x):
674+
x = convert_to_tensor(x)
675+
676+
if standardize_dtype(x.dtype) == "int64":
677+
return cast(torch.deg2rad(x), "float64")
678+
679+
return torch.deg2rad(x)
680+
681+
673682
def diag(x, k=0):
674683
x = convert_to_tensor(x)
675684
return torch.diag(x, diagonal=k)

0 commit comments

Comments
 (0)