# Aqua.jl finds many ambiguities in Core, Base

**URL:** <https://discourse.julialang.org/t/aqua-jl-finds-many-ambiguities-in-core-base/103963>\
**Category:** Package Management\
**Tags:** package, aqua, ambiguities\
**Created:** [September 18, 2023, 3:19am UTC](https://discourse.julialang.org/t/aqua-jl-finds-many-ambiguities-in-core-base/103963 "2023-09-18T03:19:48Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Joris\_Pinkse](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joris_pinkse/32/216398_2.png) [@Joris\_Pinkse](https://discourse.julialang.org/u/Joris_Pinkse)\
**Post date:** [September 18, 2023, 3:19am UTC](https://discourse.julialang.org/t/aqua-jl-finds-many-ambiguities-in-core-base/103963/1 "2023-09-18T03:19:48Z")

</div>

I’m using `Aqua.jl` on my package and have addressed all issues that Aqua complained about except that it finds many ambiguities when I call `Aqua.test_all` on my package, but none if I call `Aqua.test_ambiguities` on my package (the latter excludes `Core` and `Base`).

There are many messages like the one below. Can I ignore such ambiguities? If not, how can I address them?

```julia
55 ambiguities found
Ambiguity #1
ForwardDiff.Dual(args...) @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:73
(::Type{T})(x::Base.TwicePrecision) where T<:Number @ Base twiceprecision.jl:266

Possible fix, define
  ForwardDiff.Dual(::Base.TwicePrecision)

```

---

<div class="post-metadata">

**Author:** ![tim.holy](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tim.holy/32/52_2.png) [@tim.holy](https://discourse.julialang.org/u/tim.holy)\
**Post date:** [September 18, 2023, 6:39pm UTC](https://discourse.julialang.org/t/aqua-jl-finds-many-ambiguities-in-core-base/103963/2 "2023-09-18T18:39:23Z")

</div>

I haven’t tried recently, but I generally avoid running Aqua’s ambiguity test. Instead I just use `Test.detect_ambiguities(MyPackage)` and see if the resulting list is empty.

---

<div class="post-metadata">

**Author:** ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/27854_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)\
**Post date:** [September 18, 2023, 6:50pm UTC](https://discourse.julialang.org/t/aqua-jl-finds-many-ambiguities-in-core-base/103963/3 "2023-09-18T18:50:42Z")

</div>

Any idea if the checks differ between Test and Aqua?

---

<div class="post-metadata">

**Author:** ![tim.holy](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tim.holy/32/52_2.png) [@tim.holy](https://discourse.julialang.org/u/tim.holy)\
**Post date:** [September 18, 2023, 6:57pm UTC](https://discourse.julialang.org/t/aqua-jl-finds-many-ambiguities-in-core-base/103963/4 "2023-09-18T18:57:35Z")

</div>

I think Aqua passes a long list of modules, some of which are “not yours.” I think this has some history: `Test.detect_ambiguities` originally (many Julia releases ago) didn’t do a good job with cross-package ambiguities, and so Aqua’s fix (at the cost of false positives) was to supply a superset of modules. But then I think what happened is that `Test.detect_ambiguities` got fixed, and now the Aqua approach is actively counterproductive. But I am not sure of any of this, as I wasn’t involved in the work. (CC @vtjnash.)

Aqua just [calls `detect_ambiguities`](https://github.com/JuliaTesting/Aqua.jl/blob/3cd8d0ea4496010c4b0c25954e6171c2b8a67004/src/ambiguities.jl#L200-L207) so it’s presumably down to what gets passed in and how the results are processed.

---

<div class="post-metadata">

**Author:** ![nsajko](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nsajko/32/221187_2.png) [@nsajko](https://discourse.julialang.org/u/nsajko)\
**Post date:** [September 18, 2023, 7:20pm UTC](https://discourse.julialang.org/t/aqua-jl-finds-many-ambiguities-in-core-base/103963/5 "2023-09-18T19:20:52Z")

</div>

FTR, there doesn’t seem to be any ambiguities in Julia itself, at least on nightly:

```julia-repl
julia> using Test, LinearAlgebra

julia> detect_ambiguities(Main, Base, LinearAlgebra, recursive = true)
Skipping Base.HashArrayMappedTries.delete
Skipping Base.HashArrayMappedTries.insert
Tuple{Method, Method}[]

```

So these are bugs in user packages, `ForwardDiff`, in your example:

```julia-repl
julia> using ForwardDiff

julia> detect_ambiguities(Main, Base, LinearAlgebra, ForwardDiff, recursive = true)
Skipping Base.HashArrayMappedTries.delete
Skipping Base.HashArrayMappedTries.insert
26-element Vector{Tuple{Method, Method}}:
[...]

```

---

<div class="post-metadata">

**Author:** ![Joris\_Pinkse](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joris_pinkse/32/216398_2.png) [@Joris\_Pinkse](https://discourse.julialang.org/u/Joris_Pinkse)\
**Post date:** [September 18, 2023, 7:36pm UTC](https://discourse.julialang.org/t/aqua-jl-finds-many-ambiguities-in-core-base/103963/6 "2023-09-18T19:36:21Z")

</div>

Right, albeit that OTOH Aqua claims that by default it tests for ambiguities in the package itself, Core, and Base.
