Skip to content
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

Many ambiguities #18

Closed
timholy opened this issue Aug 14, 2016 · 8 comments
Closed

Many ambiguities #18

timholy opened this issue Aug 14, 2016 · 8 comments
Labels
bug up for grabs Implement me, I'm yours!

Comments

@timholy
Copy link
Member

timholy commented Aug 14, 2016

While it's not necessary to fix these unless they cause errors, this is a bit concerning:

julia> using StaticArrays

julia> Base.Test.detect_ambiguities(StaticArrays, Base, Core)
Skipping StaticArrays.MutableFieldVector
Skipping Base.<|
Skipping Base.>:
Skipping Base.cluster_manager
17-element Array{Tuple{Method,Method},1}:
 (+(a::Number, b::StaticArrays.StaticArray) at /home/tim/.julia/v0.6/StaticArrays/src/linalg.jl:19,+(x::Bool, A::AbstractArray{Bool,N<:Any}) at arraymath.jl:91)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
 (-(a::StaticArrays.StaticArray, b::AbstractArray) at /home/tim/.julia/v0.6/StaticArrays/src/linalg.jl:16,-(x::Union{Base.ReshapedArray{T<:Any,1,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray{T<:Any,1},SubArray{T<:Any,1,A<:Union{Base.ReshapedArray{T<:Any,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N<:Any}},L<:Any}}, y::AbstractSparseArray{Tv<:Any,Ti<:Any,1}) at sparse/sparsevector.jl:1184)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
 (.*(a1::Number, a2::StaticArrays.StaticArray) at /home/tim/.julia/v0.6/StaticArrays/src/arraymath.jl:19,.*{P<:Base.Dates.Period}(y::Real, X::Union{Base.ReshapedArray{P,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray{P,N<:Any},SubArray{P,N<:Any,A<:Union{Base.ReshapedArray{T<:Any,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N<:Any}},L<:Any}}) at dates/periods.jl:91)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
 (+(a::StaticArrays.StaticArray, b::AbstractArray) at /home/tim/.julia/v0.6/StaticArrays/src/linalg.jl:12,+{P<:Union{Base.Dates.CompoundPeriod,Base.Dates.Period},Q<:Union{Base.Dates.CompoundPeriod,Base.Dates.Period}}(X::Union{Base.ReshapedArray{P,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray{P,N<:Any},SubArray{P,N<:Any,A<:Union{Base.ReshapedArray{T<:Any,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N<:Any}},L<:Any}}, Y::Union{Base.ReshapedArray{Q,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray{Q,N<:Any},SubArray{Q,N<:Any,A<:Union{Base.ReshapedArray{T<:Any,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N<:Any}},L<:Any}}) at dates/periods.jl:338)
 (.*(a1::StaticArrays.StaticArray, a2::Number) at /home/tim/.julia/v0.6/StaticArrays/src/arraymath.jl:14,.*{P<:Base.Dates.Period}(X::Union{Base.ReshapedArray{P,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray{P,N<:Any},SubArray{P,N<:Any,A<:Union{Base.ReshapedArray{T<:Any,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N<:Any}},L<:Any}}, y::Real) at dates/periods.jl:101)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
 (+(a::StaticArrays.StaticArray, b::Number) at /home/tim/.julia/v0.6/StaticArrays/src/linalg.jl:20,+(A::AbstractArray{Bool,N<:Any}, x::Bool) at arraymath.jl:90)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
 (-(a::AbstractArray, b::StaticArrays.StaticArray) at /home/tim/.julia/v0.6/StaticArrays/src/linalg.jl:15,-{P<:Union{Base.Dates.CompoundPeriod,Base.Dates.Period},Q<:Union{Base.Dates.CompoundPeriod,Base.Dates.Period}}(X::Union{Base.ReshapedArray{P,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray{P,N<:Any},SubArray{P,N<:Any,A<:Union{Base.ReshapedArray{T<:Any,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N<:Any}},L<:Any}}, Y::Union{Base.ReshapedArray{Q,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray{Q,N<:Any},SubArray{Q,N<:Any,A<:Union{Base.ReshapedArray{T<:Any,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N<:Any}},L<:Any}}) at dates/periods.jl:338)
 (-(a::AbstractArray, b::StaticArrays.StaticArray) at /home/tim/.julia/v0.6/StaticArrays/src/linalg.jl:15,-(x::AbstractSparseArray{Tv<:Any,Ti<:Any,1}, y::Union{Base.ReshapedArray{T<:Any,1,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray{T<:Any,1},SubArray{T<:Any,1,A<:Union{Base.ReshapedArray{T<:Any,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N<:Any}},L<:Any}}) at sparse/sparsevector.jl:1185)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
 (+(a::AbstractArray, b::StaticArrays.StaticArray) at /home/tim/.julia/v0.6/StaticArrays/src/linalg.jl:11,+(x::AbstractSparseArray{Tv<:Any,Ti<:Any,1}, y::Union{Base.ReshapedArray{T<:Any,1,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray{T<:Any,1},SubArray{T<:Any,1,A<:Union{Base.ReshapedArray{T<:Any,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N<:Any}},L<:Any}}) at sparse/sparsevector.jl:1185)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
 (-(a::StaticArrays.StaticArray, b::Number) at /home/tim/.julia/v0.6/StaticArrays/src/linalg.jl:23,-(A::AbstractArray{Bool,N<:Any}, x::Bool) at arraymath.jl:92)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
 (-(a::Number, b::StaticArrays.StaticArray) at /home/tim/.julia/v0.6/StaticArrays/src/linalg.jl:22,-(x::Bool, A::AbstractArray{Bool,N<:Any}) at arraymath.jl:93)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
 (./(a1::StaticArrays.StaticArray, a2::Number) at /home/tim/.julia/v0.6/StaticArrays/src/arraymath.jl:15,./{P<:Base.Dates.Period}(X::Union{Base.ReshapedArray{P,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray{P,N<:Any},SubArray{P,N<:Any,A<:Union{Base.ReshapedArray{T<:Any,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N<:Any}},L<:Any}}, y::Real) at dates/periods.jl:101)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
 (mapreduce(f, op, a1::StaticArrays.StaticArray) at /home/tim/.julia/v0.6/StaticArrays/src/mapreduce.jl:99,mapreduce(f, op::Union{Base.#&,Base.#|}, itr::AbstractArray) at reduce.jl:220)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
 (+(a::AbstractArray, b::StaticArrays.StaticArray) at /home/tim/.julia/v0.6/StaticArrays/src/linalg.jl:11,+{P<:Union{Base.Dates.CompoundPeriod,Base.Dates.Period},Q<:Union{Base.Dates.CompoundPeriod,Base.Dates.Period}}(X::Union{Base.ReshapedArray{P,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray{P,N<:Any},SubArray{P,N<:Any,A<:Union{Base.ReshapedArray{T<:Any,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N<:Any}},L<:Any}}, Y::Union{Base.ReshapedArray{Q,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray{Q,N<:Any},SubArray{Q,N<:Any,A<:Union{Base.ReshapedArray{T<:Any,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N<:Any}},L<:Any}}) at dates/periods.jl:338)
 (mapreduce(f, op, a1::StaticArrays.StaticArray) at /home/tim/.julia/v0.6/StaticArrays/src/mapreduce.jl:99,mapreduce(f, op::Union{Base.#&,Base.#|}, itr) at reduce.jl:221)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
 (+(a::StaticArrays.StaticArray, b::AbstractArray) at /home/tim/.julia/v0.6/StaticArrays/src/linalg.jl:12,+(x::Union{Base.ReshapedArray{T<:Any,1,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray{T<:Any,1},SubArray{T<:Any,1,A<:Union{Base.ReshapedArray{T<:Any,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N<:Any}},L<:Any}}, y::AbstractSparseArray{Tv<:Any,Ti<:Any,1}) at sparse/sparsevector.jl:1184)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
 (-(a::StaticArrays.StaticArray, b::AbstractArray) at /home/tim/.julia/v0.6/StaticArrays/src/linalg.jl:16,-{P<:Union{Base.Dates.CompoundPeriod,Base.Dates.Period},Q<:Union{Base.Dates.CompoundPeriod,Base.Dates.Period}}(X::Union{Base.ReshapedArray{P,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray{P,N<:Any},SubArray{P,N<:Any,A<:Union{Base.ReshapedArray{T<:Any,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N<:Any}},L<:Any}}, Y::Union{Base.ReshapedArray{Q,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray{Q,N<:Any},SubArray{Q,N<:Any,A<:Union{Base.ReshapedArray{T<:Any,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N<:Any}},L<:Any}}) at dates/periods.jl:338)

(In my packages' tests I'm starting to test that this returns an empty array. I can use setdiff to get rid of StaticArrays' ambiguities, but I thought I should let you know.)

@andyferris
Copy link
Member

Ideally these should be fixed. It's really hard to predict these, and worse, people can add more definitions to any package that cause further ambiguities. Some of these are so esoteric that it seems a little silly to fix. I'm wondering if there is something that can be done at the Julia language level to simplify this explosion of possibilities... but maybe it's inherent to multiple dispatch?

On the other hand, I'm not sure I can prioritize this for this week at least, sorry @timholy :(

@timholy
Copy link
Member Author

timholy commented Aug 15, 2016

No problem. Like you, I think the fix for some of these is pointless and probably should be done in Base (see the "Dates module" link above).

I might tackle some of them at some point; this is just a TODO.

@andyferris
Copy link
Member

Yes, I was just reading that - thanks. I'm sure we can cover the Bool ones if that makes sense.

Do you think there is much demand for a static bits array?

@andyferris andyferris added the up for grabs Implement me, I'm yours! label Nov 10, 2016
@timholy
Copy link
Member Author

timholy commented Oct 17, 2018

The good news is that Dates isn't loaded by default anymore, so most of the sillier ambiguities noted above are not present unless you load the Dates stdlib.

The bad news is we're now up to 114 ambiguities! This makes it hard for any package depending on StaticArrays to deliberately check for ambiguities in its tests. I will work on this, but gotta figure out what we want to do about #518 first.

@andyferris
Copy link
Member

Okay, thanks... I haven't looked at this for quite some time, unfortunately.

@c42f
Copy link
Member

c42f commented Aug 1, 2019

It appears we're down to 5 ambiguities now if only LinearAlgebra and StaticArrays are loaded. Most of them look surprisingly fixable too.

@c42f c42f added the bug label Aug 1, 2019
@timholy
Copy link
Member Author

timholy commented Aug 2, 2019

Could conceivably drop the permitted number if you don't want to give up recent progress. Might be Julia version-dependent though.

@hyrodium
Copy link
Collaborator

hyrodium commented Aug 9, 2022

The issue seems to have already been resolved.

julia> using StaticArrays, Test

julia> detect_ambiguities(StaticArrays)
Tuple{Method, Method}[]

x-ref: #1016 #1072

@hyrodium hyrodium closed this as completed Aug 9, 2022
oschulz pushed a commit to oschulz/StaticArrays.jl that referenced this issue Apr 4, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug up for grabs Implement me, I'm yours!
Projects
None yet
Development

No branches or pull requests

4 participants