JuliaSmoothOptimizers / PartitionedVectors.jl

Other
8 stars 1 forks source link

Add three workflows #37

Open amontoison opened 1 year ago

codecov[bot] commented 1 year ago

Codecov Report

Base: 99.06% // Head: 99.13% // Increases project coverage by +0.06% :tada:

Coverage data is based on head (151b1d5) compared to base (869eeda). Patch has no changes to coverable lines.

Additional details and impacted files ```diff @@ Coverage Diff @@ ## main #37 +/- ## ========================================== + Coverage 99.06% 99.13% +0.06% ========================================== Files 6 6 Lines 214 231 +17 ========================================== + Hits 212 229 +17 Misses 2 2 ``` | [Impacted Files](https://codecov.io/gh/JuliaSmoothOptimizers/PartitionedVectors.jl/pull/37?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=JuliaSmoothOptimizers) | Coverage Δ | | |---|---|---| | [src/struct.jl](https://codecov.io/gh/JuliaSmoothOptimizers/PartitionedVectors.jl/pull/37/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=JuliaSmoothOptimizers#diff-c3JjL3N0cnVjdC5qbA==) | `100.00% <0.00%> (ø)` | | | [src/broadcast.jl](https://codecov.io/gh/JuliaSmoothOptimizers/PartitionedVectors.jl/pull/37/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=JuliaSmoothOptimizers#diff-c3JjL2Jyb2FkY2FzdC5qbA==) | `100.00% <0.00%> (ø)` | | | [src/linearAlgebra.jl](https://codecov.io/gh/JuliaSmoothOptimizers/PartitionedVectors.jl/pull/37/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=JuliaSmoothOptimizers#diff-c3JjL2xpbmVhckFsZ2VicmEuamw=) | `100.00% <0.00%> (ø)` | | | [src/krylov.jl](https://codecov.io/gh/JuliaSmoothOptimizers/PartitionedVectors.jl/pull/37/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=JuliaSmoothOptimizers#diff-c3JjL2tyeWxvdi5qbA==) | `98.63% <0.00%> (+0.24%)` | :arrow_up: | Help us with your feedback. Take ten seconds to tell us [how you rate us](https://about.codecov.io/nps?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=JuliaSmoothOptimizers). Have a feature suggestion? [Share it here.](https://app.codecov.io/gh/feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=JuliaSmoothOptimizers)

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.

amontoison commented 1 year ago

@paraynaud You have a lot of ambiguities (Aqua workflow) and invalidations (Invalidations workflow). If you have invalidations, it means that functions in Base and dependencies must be recompiled because you redefine one of them or you abuse of type-piracy. They are performance killers.

paraynaud commented 1 year ago

@paraynaud You have a lot of ambiguities (Aqua workflow) and invalidations (Invalidations workflow).

I saw ambiguities, but not the invalidations, where should I look?

If you have invalidations, it means that functions in Base and dependencies must be recompiled because you redefine one of them or you abuse of type-piracy. They are performance killers.

I redefine many Base, LinearAlgebra and Krylov methods, so nothing unexpected ;) What do you mean by "recompiled"? Where should I recompile something? (e.g. PartitionedVectors.jl side or elsewhere)

What is the result of these workflows on other modules? (or PartitionedVectors.jl is the first one?)

PS: For your information, I will soon release PartitionedVectors@0.1.2, it improves a lot the performances.

amontoison commented 1 year ago

I saw ambiguities, but not the invalidations, where should I look?

The workflow Invalidations / evaluate gives the number of invalidations and tests that you don't add new invalidations with new pull request. Because it's the first time we use it here, it can't determine if you added more invalidations.

If you have invalidations, it means that functions in Base and dependencies must be recompiled because you redefine one of them or you abuse of type-piracy. They are performance killers.

I redefine many Base, LinearAlgebra and Krylov methods, so nothing unexpected ;) What do you mean by "recompiled"? Where should I recompile something? (e.g. PartitionedVectors.jl side or elsewhere)

Do you redefine them or extend them for your type? I think that in some cases you redefined the Base and LinearAlgebra functions, so it means after using PartitionedVectors the routines that you redefined will be used by all other packages and they must be recompiled at runtime because you invalidate what was already (pre)compiled.

What is the result of these workflows on other modules? (or PartitionedVectors.jl is the first one?)

The CompatHelper.yml will open a new PR for you when a dependency has a new version. The Aqua.yml do a collection a basic checks, it is explained here. All tests should passed for a Julia package.

About the invalidations, Krylov.jl I has 0 invalidation, DCISolver.jl has 15 invalidations and your package 532.

PS: For your information, I will soon release PartitionedVectors@0.1.2, it improves a lot the performances.

Good news! But you will have other improvements if you track and fix some of these invalidations.

paraynaud commented 1 year ago

Thanks for the explanation.

Do you redefine them or extend them for your type?

For dot, I do:

import LinearAlgebra.dot

dot(pv1::PartitionedVector{T}, pv2::PartitionedVector{T}) where {T}
  some_stuff(pv1,pv2)
end

I think that extends the number of dot methods available, because dot(ones(5), rand(5)) still works, See Krylov extensions, LinearAlgebra extensions and Base.broadcast extension.

I will try to fix ambiguities and invalidations before PartitionedVectors@0.1.3, I opened an issue.