Skip to content

Commit b4e262d

Browse files
SaifMohammed22Saif Mohammed
andauthored
[Good First Issue][Keras 3 OpenVINO Backend]: Support numpy.dot operation #29119 (#20982)
* Implement dot operation for openvino * Enable dot tests * Add pytest.ini in the root directory * Fix style issues * Handle scaler inputs and fix code formate * Handle scaler inputs and fix code formate * Delete pytest.ini * Remove scaler handling * Handle scaler inputs * Handle scalers and style format * update scaler handling * Fix the format of the numpy.py file * Fix sytling issues * Fix sytling issues --------- Co-authored-by: Saif Mohammed <[email protected]>
1 parent d8d14fd commit b4e262d

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

keras/src/backend/openvino/excluded_concrete_tests.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ NumpyDtypeTest::test_cumsum_bool
2222
NumpyDtypeTest::test_diag
2323
NumpyDtypeTest::test_diff
2424
NumpyDtypeTest::test_digitize
25-
NumpyDtypeTest::test_dot
2625
NumpyDtypeTest::test_einsum
2726
NumpyDtypeTest::test_empty
2827
NumpyDtypeTest::test_exp2
@@ -100,7 +99,8 @@ NumpyOneInputOpsCorrectnessTest::test_cumprod
10099
NumpyOneInputOpsCorrectnessTest::test_diag
101100
NumpyOneInputOpsCorrectnessTest::test_diagonal
102101
NumpyOneInputOpsCorrectnessTest::test_diff
103-
NumpyOneInputOpsCorrectnessTest::test_dot
102+
NumpyOneInputOpsCorrectnessTest::test_exp
103+
NumpyOneInputOpsCorrectnessTest::test_expand_dims
104104
NumpyOneInputOpsCorrectnessTest::test_exp2
105105
NumpyOneInputOpsCorrectnessTest::test_expm1
106106
NumpyOneInputOpsCorrectnessTest::test_flip

keras/src/backend/openvino/numpy.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,17 @@ def digitize(x, bins):
512512

513513

514514
def dot(x, y):
515-
raise NotImplementedError("`dot` is not supported with openvino backend")
515+
element_type = None
516+
if isinstance(x, OpenVINOKerasTensor):
517+
element_type = x.output.get_element_type()
518+
if isinstance(y, OpenVINOKerasTensor):
519+
element_type = y.output.get_element_type()
520+
x = get_ov_output(x, element_type)
521+
y = get_ov_output(y, element_type)
522+
x, y = _align_operand_types(x, y, "dot()")
523+
if x.get_partial_shape().rank == 0 or y.get_partial_shape().rank == 0:
524+
return OpenVINOKerasTensor(ov_opset.multiply(x, y).output(0))
525+
return OpenVINOKerasTensor(ov_opset.matmul(x, y, False, False).output(0))
516526

517527

518528
def empty(shape, dtype=None):

0 commit comments

Comments
 (0)