Skip to content

My fix branch #21585

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open

Conversation

arjunverma2004
Copy link

No description provided.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary of Changes

Hello @arjunverma2004, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request implements the diagonal operation for the Keras OpenVINO backend. Previously unsupported, this functionality is now enabled by providing a concrete implementation using OpenVINO opset functions, allowing for more complete NumPy API compatibility within the OpenVINO backend.

Highlights

  • New Feature Implementation: The diagonal function has been fully implemented for the Keras OpenVINO backend, providing support for extracting diagonals from arrays.
  • Test Coverage: The test_diagonal entry has been removed from the excluded_concrete_tests.txt file, indicating that the diagonal operation is now expected to pass tests within the OpenVINO backend.
  • Dependency Usage: The implementation leverages openvino.runtime.opset13 for constructing the computational graph for the diagonal operation.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request implements the diagonal operation for the OpenVINO backend and enables the corresponding correctness tests. The implementation is quite thorough. I've found a few issues related to handling tensor inputs for the function arguments, which could lead to errors if not addressed. Specifically, the input tensor x and the parameters offset, axis1, and axis2 are not correctly processed when they are tensors. My suggestions aim to fix these issues by using the backend's utility functions for tensor conversion, which will also improve consistency with other operations in this file.

Comment on lines +22 to +36
x_node = ov.constant(x) # -> ov.Node
offset_const = ov_opset.constant(int(offset), dtype="i64")

# rank & normalize axes
shape = ov_opset.shape_of(x_node) # i64 vector
rank = ov_opset.shape_of(shape) # scalar i64 (len of shape)
rank_val = ov_opset.squeeze(rank) # [] -> scalar
axis1_node = ov_opset.floor_mod(
ov_opset.add(ov_opset.constant(int(axis1), dtype="i64"), rank_val),
rank_val,
)
axis2_node = ov_opset.floor_mod(
ov_opset.add(ov_opset.constant(int(axis2), dtype="i64"), rank_val),
rank_val,
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The implementation of diagonal doesn't correctly handle tensor inputs for x, offset, axis1, and axis2. It assumes they are Python scalars or numpy arrays by using ov.constant and int(), which will lead to errors when OpenVINOKerasTensor objects are passed.

To fix this and align with the style of other functions in this backend, please use the get_ov_output utility to convert inputs to OpenVINO tensors and ov_opset.convert for type casting. This will also make the new import of opset13 on line 4 unnecessary.

Suggested change
x_node = ov.constant(x) # -> ov.Node
offset_const = ov_opset.constant(int(offset), dtype="i64")
# rank & normalize axes
shape = ov_opset.shape_of(x_node) # i64 vector
rank = ov_opset.shape_of(shape) # scalar i64 (len of shape)
rank_val = ov_opset.squeeze(rank) # [] -> scalar
axis1_node = ov_opset.floor_mod(
ov_opset.add(ov_opset.constant(int(axis1), dtype="i64"), rank_val),
rank_val,
)
axis2_node = ov_opset.floor_mod(
ov_opset.add(ov_opset.constant(int(axis2), dtype="i64"), rank_val),
rank_val,
)
x_node = get_ov_output(x)
offset_const = ov_opset.convert(get_ov_output(offset), Type.i64)
# rank & normalize axes
shape = ov_opset.shape_of(x_node) # i64 vector
rank = ov_opset.shape_of(shape) # scalar i64 (len of shape)
rank_val = ov_opset.squeeze(rank) # [] -> scalar
axis1_node = ov_opset.floor_mod(
ov_opset.add(ov_opset.convert(get_ov_output(axis1), Type.i64), rank_val),
rank_val,
)
axis2_node = ov_opset.floor_mod(
ov_opset.add(ov_opset.convert(get_ov_output(axis2), Type.i64), rank_val),
rank_val,
)

@@ -1,6 +1,7 @@
import numpy as np
import openvino.opset14 as ov_opset
from openvino import Type
from openvino.runtime import opset13 as ov
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This import from opset13 is inconsistent with the rest of the file, which uses opset14. By applying the suggestion to use get_ov_output on line 22, this import will become unnecessary and can be removed.

@codecov-commenter
Copy link

codecov-commenter commented Aug 15, 2025

Codecov Report

❌ Patch coverage is 5.00000% with 38 lines in your changes missing coverage. Please review.
✅ Project coverage is 82.68%. Comparing base (45c98ec) to head (f450869).

Files with missing lines Patch % Lines
keras/src/backend/openvino/numpy.py 5.00% 38 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master   #21585      +/-   ##
==========================================
- Coverage   82.73%   82.68%   -0.06%     
==========================================
  Files         567      567              
  Lines       56678    56717      +39     
  Branches     8839     8839              
==========================================
+ Hits        46895    46896       +1     
- Misses       7609     7647      +38     
  Partials     2174     2174              
Flag Coverage Δ
keras 82.49% <5.00%> (-0.06%) ⬇️
keras-jax 63.60% <5.00%> (-0.05%) ⬇️
keras-numpy 58.18% <0.00%> (-0.05%) ⬇️
keras-openvino 34.59% <5.00%> (-0.03%) ⬇️
keras-tensorflow 64.15% <5.00%> (-0.05%) ⬇️
keras-torch 63.75% <5.00%> (-0.05%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@gbaned gbaned requested a review from mattdangerw August 18, 2025 07:22
@gbaned gbaned added this to PR Queue Aug 18, 2025
@github-project-automation github-project-automation bot moved this to Assigned Reviewer in PR Queue Aug 18, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Assigned Reviewer
Development

Successfully merging this pull request may close these issues.

3 participants