-
Notifications
You must be signed in to change notification settings - Fork 4
Add support for sum and kronecker product of COO sparse matrices #45
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: main
Are you sure you want to change the base?
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #45 +/- ##
==========================================
+ Coverage 85.39% 86.41% +1.02%
==========================================
Files 4 4
Lines 363 405 +42
==========================================
+ Hits 310 350 +40
- Misses 53 55 +2 ☔ View full report in Codecov by Sentry. |
tmigot
left a comment
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.
Thanks @albertomercurio for the PR! That's a great add.
I made some comments regarding the implementation.
@geoffroyleconte or @dpo would you have some time to check this PR too?
| for j in eachindex(rowval_colvalA) | ||
| if rowval_colvalA[j] == rowval_colval[i] | ||
| nzval[i] += A.vals[j] | ||
| break |
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.
If I am not wrong you assume here that each matrix has unique pair of (row, col) while I don't think it is necessary true.
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.
But they should be unique, right? I mean, we should merge them in the moment of creating the sparse matrix, no?
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.
Really sorry @albertomercurio , I completely lost track of this PR. There is a discussion on this https://github.com/orgs/JuliaSmoothOptimizers/discussions/51 , and the status is that QuadraticModels is not merging them by default.
| rowval_colvalA = collect(zip(A.rows, A.cols)) | ||
| rowval_colvalB = collect(zip(B.rows, B.cols)) | ||
|
|
||
| rowval_colval = union(rowval_colvalA, rowval_colvalB) |
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.
I think there should be a more efficient to do this. The union will iterate over both vectors, and to compute the sum you do it again. Would it be more efficient to do both at the same time?
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.
At the moment I don’t have anything in mind. Do you have an idea?
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.
Okay, let's create an issue on the package after this PR is merge to point out to this as a possible improvement.
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.
How does SparseMatrixCSC do it?
| for j in eachindex(rowval_colvalB) | ||
| if rowval_colvalB[j] == rowval_colval[i] | ||
| nzval[i] += B.vals[j] | ||
| break |
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.
see comment above
| Bnnz = nnz(B) | ||
|
|
||
| if Annz == 0 || Bnnz == 0 | ||
| return SparseMatrixCOO(Int[], Int[], T[], out_shape...) |
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.
This should be tested in the unit tests too
Co-authored-by: Tangi Migot <tangi.migot@gmail.com>
Co-authored-by: Tangi Migot <tangi.migot@gmail.com>
|
What is missing here? It is a pity to not see this in |
|
Hi @CarloLucibello ! As you can see here there are comments that need to be adressed in this PR. |
Hello,
I added the support of the following operations:
A + Bkron(A, B)where both
AandBareSparseMatrixCOO