control-toolbox / CTBase.jl

Fundamentals of the control-toolbox ecosystem
http://control-toolbox.org/CTBase.jl/
MIT License
9 stars 2 forks source link

Add test from Aqua.jl #182

Closed ocots closed 2 weeks ago

ocots commented 2 months ago

Aqua.jl provides functions to run a few automatable checks for Julia packages:

Add a file CTBase/test/Aqua.jl with

Aqua.test_all(CTBase; 
ambiguities=(broken=false,), 
deps_compat=(ignore=[:LinearAlgebra, :Unicode],), 
piracies=true)

and repair everything before adding this in the CI.

ocots commented 2 months ago

Ambiguities

28 ambiguities found. To get a list, set `broken = false`.
Ambiguity #1
==(x::ForwardDiff.Dual{Tx}, y::Real) where Tx @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:144
==(x::Real, y::AbstractIrrational) @ Base irrationals.jl:90

Possible fix, define
  ==(::ForwardDiff.Dual{Tx}, ::AbstractIrrational) where Tx

Ambiguity #2
==(x::Real, y::ForwardDiff.Dual{Ty}) where Ty @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:145
==(x::AbstractIrrational, y::Real) @ Base irrationals.jl:89

Possible fix, define
  ==(::AbstractIrrational, ::ForwardDiff.Dual{Ty}) where Ty

Ambiguity #3
ForwardDiff.Dual(args...) @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:73
(::Type{T})(x::Base.TwicePrecision) where T<:Number @ Base twiceprecision.jl:265

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

Ambiguity #4
(ForwardDiff.Dual{T})(value) where T @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:69
(::Type{T})(x::Base.TwicePrecision) where T<:Number @ Base twiceprecision.jl:265

Possible fix, define
  (ForwardDiff.Dual{T})(::Base.TwicePrecision) where T

Ambiguity #5
(ForwardDiff.Dual{T, V})(x) where {T, V} @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:79
(::Type{T})(x::T) where T<:Number @ Core boot.jl:792

Possible fix, define
  (ForwardDiff.Dual{T, V})(::ForwardDiff.Dual{T, V}) where {T, V}

Ambiguity #6
ForwardDiff.Dual(args...) @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:73
(::Type{T})(x::T) where T<:Number @ Core boot.jl:792

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

Ambiguity #7
(ForwardDiff.Dual{T, V})(x) where {T, V} @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:79
(::Type{T})(x::Base.TwicePrecision) where T<:Number @ Base twiceprecision.jl:265

Possible fix, define
  (ForwardDiff.Dual{T, V})(::Base.TwicePrecision) where {T, V}

Ambiguity #8
ForwardDiff.Dual{T, V, N}(x) where {T, V, N} @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:77
(::Type{T})(x::Base.TwicePrecision) where T<:Number @ Base twiceprecision.jl:265

Possible fix, define
  ForwardDiff.Dual{T, V, N}(::Base.TwicePrecision) where {T, V, N}

Ambiguity #9
ForwardDiff.Dual{T, V, N}(x) where {T, V, N} @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:77
(::Type{T})(z::Complex) where T<:Real @ Base complex.jl:44

Possible fix, define
  ForwardDiff.Dual{T, V, N}(::Complex) where {T, V, N}

Ambiguity #10
(ForwardDiff.Dual{T})(value) where T @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:69
(::Type{T})(z::Complex) where T<:Real @ Base complex.jl:44

Possible fix, define
  (ForwardDiff.Dual{T})(::Complex) where T

Ambiguity #11
ForwardDiff.Dual{T, V, N}(x::Number) where {T, V, N} @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:78
(::Type{T})(z::Complex) where T<:Real @ Base complex.jl:44

Possible fix, define
  ForwardDiff.Dual{T, V, N}(::Complex) where {T, V, N}

Ambiguity #12
(ForwardDiff.Dual{T, V})(x) where {T, V} @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:79
(::Type{T})(z::Complex) where T<:Real @ Base complex.jl:44

Possible fix, define
  (ForwardDiff.Dual{T, V})(::Complex) where {T, V}

Ambiguity #13
ForwardDiff.Dual(args...) @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:73
(::Type{T})(z::Complex) where T<:Real @ Base complex.jl:44

Possible fix, define
  ForwardDiff.Dual(::Complex)

Ambiguity #14
ForwardDiff.Dual(args...) @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:73
(::Type{T})(x::AbstractChar) where T<:Union{AbstractChar, Number} @ Base char.jl:50

Possible fix, define
  ForwardDiff.Dual(::AbstractChar)

Ambiguity #15
ForwardDiff.Dual{T, V, N}(x) where {T, V, N} @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:77
(::Type{T})(x::AbstractChar) where T<:Union{AbstractChar, Number} @ Base char.jl:50

Possible fix, define
  ForwardDiff.Dual{T, V, N}(::AbstractChar) where {T, V, N}

Ambiguity #16
(ForwardDiff.Dual{T, V})(x) where {T, V} @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:79
(::Type{T})(x::AbstractChar) where T<:Union{AbstractChar, Number} @ Base char.jl:50

Possible fix, define
  (ForwardDiff.Dual{T, V})(::AbstractChar) where {T, V}

Ambiguity #17
(ForwardDiff.Dual{T})(value) where T @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:69
(::Type{T})(x::AbstractChar) where T<:Union{AbstractChar, Number} @ Base char.jl:50

Possible fix, define
  (ForwardDiff.Dual{T})(::AbstractChar) where T

Ambiguity #18
^(x::Irrational, y::ForwardDiff.Dual{Ty}) where Ty @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:145
^(::Irrational{:ℯ}, x::Number) @ Base.MathConstants mathconstants.jl:119

Possible fix, define
  ^(::Irrational{:ℯ}, ::ForwardDiff.Dual{Ty}) where Ty

Ambiguity #19
^(x::Real, y::ForwardDiff.Dual{Ty}) where Ty @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:145
^(::Irrational{:ℯ}, x::Number) @ Base.MathConstants mathconstants.jl:119

Possible fix, define
  ^(::Irrational{:ℯ}, ::ForwardDiff.Dual{Ty}) where Ty

Ambiguity #20
convert(::Type{ForwardDiff.Dual{T, V, N}}, x) where {T, V, N} @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:435
convert(::Type{T}, x::Base.TwicePrecision) where T<:Number @ Base twiceprecision.jl:271

Possible fix, define
  convert(::Type{ForwardDiff.Dual{T, V, N}}, ::Base.TwicePrecision) where {T, V, N}

Ambiguity #21
convert(::Type{ForwardDiff.Dual{T, V, N}}, x) where {T, V, N} @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:435
convert(::Type{T}, index::CartesianIndex{1}) where T<:Number @ Base.IteratorsMD multidimensional.jl:135

Possible fix, define
  convert(::Type{ForwardDiff.Dual{T, V, N}}, ::CartesianIndex{1}) where {T, V, N}

Ambiguity #22
convert(::Type{ForwardDiff.Dual{T, V, N}}, x) where {T, V, N} @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:435
convert(::Type{T}, x::AbstractChar) where T<:Number @ Base char.jl:185

Possible fix, define
  convert(::Type{ForwardDiff.Dual{T, V, N}}, ::AbstractChar) where {T, V, N}

Ambiguity #23
getindex(a::StaticArrays.TrivialView, inds...) @ StaticArrays ~/.julia/packages/StaticArrays/hLnPS/src/util.jl:51
getindex(x::AbstractArray, i::CTBase.Index) @ CTBase ~/Research/logiciels/dev/control-toolbox/CTBase/src/types.jl:1105

Possible fix, define
  getindex(::StaticArrays.TrivialView, ::CTBase.Index)

Ambiguity #24
getindex(x::SparseArrays.ReadOnly, y...) @ SparseArrays ~/.julia/juliaup/julia-1.10.3+0.aarch64.apple.darwin14/share/julia/stdlib/v1.10/SparseArrays/src/readonly.jl:20
getindex(x::AbstractArray, i::CTBase.Index) @ CTBase ~/Research/logiciels/dev/control-toolbox/CTBase/src/types.jl:1105

Possible fix, define
  getindex(::SparseArrays.ReadOnly, ::CTBase.Index)

Ambiguity #25
log(x::Irrational, y::ForwardDiff.Dual{Ty}) where Ty @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:145
log(::Irrational{:ℯ}, x::Number) @ Base.MathConstants mathconstants.jl:124

Possible fix, define
  log(::Irrational{:ℯ}, ::ForwardDiff.Dual{Ty}) where Ty

Ambiguity #26
log(x::Real, y::ForwardDiff.Dual{Ty}) where Ty @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:145
log(::Irrational{:ℯ}, x::Number) @ Base.MathConstants mathconstants.jl:124

Possible fix, define
  log(::Irrational{:ℯ}, ::ForwardDiff.Dual{Ty}) where Ty

Ambiguity #27
promote_rule(::Type{R}, ::Type{ForwardDiff.Dual{T, V, N}}) where {R<:Real, T, V, N} @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:427
promote_rule(::Type{<:AbstractIrrational}, ::Type{T}) where T<:Real @ Base irrationals.jl:44

Possible fix, define
  promote_rule(::Type{R}, ::Type{ForwardDiff.Dual{T, V, N}}) where {T, V, N, R<:AbstractIrrational}

Ambiguity #28
promote_rule(::Type{R}, ::Type{ForwardDiff.Dual{T, V, N}}) where {R<:Real, T, V, N} @ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:427
promote_rule(::Type{S}, ::Type{T}) where {S<:AbstractIrrational, T<:Number} @ Base irrationals.jl:45

Possible fix, define
  promote_rule(::Type{S}, ::Type{ForwardDiff.Dual{T, V, N}}) where {S<:AbstractIrrational, T, V, N}

Skipping Base.active_repl
Skipping Base.active_repl_backend
Method ambiguity: Test Failed at /Users/ocots/.julia/packages/Aqua/tHrmY/src/ambiguities.jl:78
  Expression: iszero(num_ambiguities)

Stacktrace:
 [1] macro expansion
   @ ~/.julia/juliaup/julia-1.10.3+0.aarch64.apple.darwin14/share/julia/stdlib/v1.10/Test/src/Test.jl:672 [inlined]
 [2] _test_ambiguities(packages::Vector{Base.PkgId}; broken::Bool, kwargs::@Kwargs{})
   @ Aqua ~/.julia/packages/Aqua/tHrmY/src/ambiguities.jl:78
 [3] _test_ambiguities
   @ ~/.julia/packages/Aqua/tHrmY/src/ambiguities.jl:68 [inlined]
 [4] test_ambiguities
   @ ~/.julia/packages/Aqua/tHrmY/src/ambiguities.jl:28 [inlined]
 [5] macro expansion
   @ ~/.julia/packages/Aqua/tHrmY/src/Aqua.jl:69 [inlined]
 [6] macro expansion
   @ ~/.julia/juliaup/julia-1.10.3+0.aarch64.apple.darwin14/share/julia/stdlib/v1.10/Test/src/Test.jl:1577 [inlined]
 [7] test_all(testtarget::Module; ambiguities::@NamedTuple{broken::Bool}, unbound_args::Bool, undefined_exports::Bool, project_extras::Bool, stale_deps::Bool, deps_compat::@NamedTuple{ignore::Vector{Symbol}}, piracies::Bool, persistent_tasks::Bool)
   @ Aqua ~/.julia/packages/Aqua/tHrmY/src/Aqua.jl:68
Test Summary:    | Fail  Total  Time
Method ambiguity |    1      1  1.9s
ERROR: Some tests did not pass: 0 passed, 1 failed, 0 errored, 0 broken.
ocots commented 2 months ago

Piracies

julia> Aqua.test_all(CTBase; 
       ambiguities=(broken=true,), 
       deps_compat=(ignore=[:LinearAlgebra, :Unicode],), 
       piracies=true)
28 ambiguities found. To get a list, set `broken = false`.
Skipping Base.active_repl
Skipping Base.active_repl_backend
Test Summary:    | Broken  Total  Time
Method ambiguity |      1      1  1.7s
Test Summary:           | Pass  Total  Time
Unbound type parameters |    1      1  0.0s
Test Summary:     | Pass  Total  Time
Undefined exports |    1      1  0.0s
Test Summary:                              | Pass  Total  Time
Compare Project.toml and test/Project.toml |    1      1  0.0s
Test Summary:      | Pass  Total  Time
Stale dependencies |    1      1  0.7s
Test Summary: | Pass  Total  Time
Compat bounds |    4      4  0.0s
Possible type-piracy detected:
[1] \(x::Tuple{Vararg{Symbol}}, y::Tuple{Vararg{Symbol}}) @ CTBase ~/Research/logiciels/dev/control-toolbox/CTBase/src/description.jl:139
Piracy: Test Failed at /Users/ocots/.julia/packages/Aqua/tHrmY/src/piracies.jl:240
  Expression: isempty(v)
   Evaluated: isempty(Method[\(x::Tuple{Vararg{Symbol}}, y::Tuple{Vararg{Symbol}}) @ CTBase ~/Research/logiciels/dev/control-toolbox/CTBase/src/description.jl:139])

Stacktrace:
 [1] macro expansion
   @ ~/.julia/juliaup/julia-1.10.3+0.aarch64.apple.darwin14/share/julia/stdlib/v1.10/Test/src/Test.jl:672 [inlined]
 [2] test_piracies(m::Module; broken::Bool, kwargs::@Kwargs{})
   @ Aqua ~/.julia/packages/Aqua/tHrmY/src/piracies.jl:240
 [3] test_piracies
   @ ~/.julia/packages/Aqua/tHrmY/src/piracies.jl:217 [inlined]
 [4] macro expansion
   @ ~/.julia/packages/Aqua/tHrmY/src/Aqua.jl:100 [inlined]
 [5] macro expansion
   @ ~/.julia/juliaup/julia-1.10.3+0.aarch64.apple.darwin14/share/julia/stdlib/v1.10/Test/src/Test.jl:1577 [inlined]
 [6] test_all(testtarget::Module; ambiguities::@NamedTuple{broken::Bool}, unbound_args::Bool, undefined_exports::Bool, project_extras::Bool, stale_deps::Bool, deps_compat::@NamedTuple{ignore::Vector{Symbol}}, piracies::Bool, persistent_tasks::Bool)
   @ Aqua ~/.julia/packages/Aqua/tHrmY/src/Aqua.jl:99
Test Summary: | Fail  Total  Time
Piracy        |    1      1  0.0s
ERROR: Some tests did not pass: 0 passed, 1 failed, 0 errored, 0 broken.
jbcaillau commented 2 months ago

@ocots nice addition before the CI,but what is going on with ForwardDiff.jl?

ocots commented 2 months ago

Don't really know what is going on with ForwardDiff.jl but with Aqua.jl we can exclude some checks:

using Aqua

@testset "Aqua.jl" begin
  Aqua.test_all(
    YourPackage;
    ambiguities=(exclude=[SomePackage.some_function], broken=true),
    stale_deps=(ignore=[:SomePackage],),
    deps_compat=(ignore=[:SomeOtherPackage],),
    piracies=false,
  )
end