-
Notifications
You must be signed in to change notification settings - Fork 19.6k
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
base: master
Are you sure you want to change the base?
My fix branch #21585
Conversation
There was a problem hiding this 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 theexcluded_concrete_tests.txt
file, indicating that thediagonal
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 thediagonal
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
-
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. ↩
There was a problem hiding this 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.
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, | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Codecov Report❌ Patch coverage is
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
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
No description provided.