inv(I::UniformScaling{Bool}) = UniformScaling{Float64}

You also have

julia> inv(true)
1.0

so I would assume it stems from this since

julia> UniformScaling(1//1)
UniformScaling{Rational{Int64}}
1//1*I

julia> inv(ans)
UniformScaling{Rational{Int64}}
1//1*I

and it seems like dispatching specifically on I might not be optimal since you can also create

julia> UniformScaling(false)
UniformScaling{Bool}
false*I

which would not fulfill inv(false*I) = false*I but still have the same type.

4 Likes