Indirection in matrix multiplication to avoid ambiguities #1210
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This adds a level of indirection in
*(::AbstractMatrix, ::AbstractMatrix)to avoid method ambiguities with packages. This generally happens when a package defines*(::SpecializedMatrix, ::SomeMatrix)andLinearAlgebradefines*(::SomeMatrix, ::AnotherSpecializedMatrix). By changing the latter to add a method to the internal functionmul, we avoid such method ambiguities.Practically speaking, this is mainly necessary when a method is being added to
*with one of the arguments being quite specialized, e.g.*(::Diagonal, ::UpperTriangular{<:Any, <:StridedMatrix}). In such cases, we may add the method tomulinstead. This should usually not be necessary if one is just defining*(::Diagonal, ::UpperTriangular). However, seeing that packages may add methods like*(::Diagonal{<:Any, <:SpecialMatrix}, ::AbstractMatrix), we may decide to change these to usemulas well in the future. I've not made too many changes in this PR to avoid clutter, and this mainly focusses on addressing regressions arising from the diagonal-triangular multiplications.This PR resolves a couple of method ambiguity errors in the
ArrayLayouts.jltest set that are seen on nightly.