Type piracy in multiple modules
bug 🐞testing 🧪
Today [I learned](https://github.com/NumericalEarth/Breeze.jl/pull/395#discussion_r3255465678) that Aqua doesn't check for type piracy recursively, so we have to actually walk through all submodules of Oceananigans to find them, and it turns out we have many
```julia
using Test, Aqua, Oceananigans
function walk_submodules!(result, visited, mod::Module)
for name in sort(names(mod; all=true, imported=false))
isdefined(mod, name) || continue
value = getproperty(mod, name)
if value isa Module &&
parentmodule(value) === mod &&
!(value in visited) &&
value !== mod
push!(visited, value)
push!(result, value)
walk_submodules!(result, visited, value)
end
end
end
function get_submodules(mod::Module)
result = Module[]
visited = Set{Module}()
walk_submodules!(result, visited, mod)
return result
end
@testset "Aqua" begin
@testset "Type piracy for $(mod)" for mod in get_submodules(Oceananigans)
Aqua.test_piracies(mod)
end
end
```
gives
```
Possible type-piracy detected:
[1] *(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Number, b::Number) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:118
[2] *(Lop::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Union{Function, Number, Oceananigans.Fields.AbstractField}, b::Union{Function, Number, Oceananigans.Fields.AbstractField}, c::Union{Function, Number, Oceananigans.Fields.AbstractField}, d::Union{Function, Number, Oceananigans.Fields.AbstractField}...) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/multiary_operations.jl:71
[3] *(Lop::Tuple, a::Union{Function, Number, Oceananigans.Fields.AbstractField}, b::Union{Function, Number, Oceananigans.Fields.AbstractField}, c::Union{Function, Number, Oceananigans.Fields.AbstractField}, d::Union{Function, Number, Oceananigans.Fields.AbstractField}...) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/multiary_operations.jl:88
[4] *(Lc::Tuple, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:128
[5] *(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:107
[6] +(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Number, b::Number) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:118
[7] +(Lop::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Union{Function, Number, Oceananigans.Fields.AbstractField}, b::Union{Function, Number, Oceananigans.Fields.AbstractField}, c::Union{Function, Number, Oceananigans.Fields.AbstractField}, d::Union{Function, Number, Oceananigans.Fields.AbstractField}...) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/multiary_operations.jl:71
[8] +(Lop::Tuple, a::Union{Function, Number, Oceananigans.Fields.AbstractField}, b::Union{Function, Number, Oceananigans.Fields.AbstractField}, c::Union{Function, Number, Oceananigans.Fields.AbstractField}, d::Union{Function, Number, Oceananigans.Fields.AbstractField}...) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/multiary_operations.jl:88
[9] +(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:107
[10] +(Lc::Tuple, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:128
[11] -(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Number, b::Number) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:118
[12] -(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:107
[13] -(Lc::Tuple, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:128
[14] /(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Number, b::Number) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:118
[15] /(Lc::Tuple, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:128
[16] /(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:107
[17] <(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Number, b::Number) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:118
[18] <(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:107
[19] <(Lc::Tuple, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:128
[20] <=(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Number, b::Number) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:118
[21] <=(Lc::Tuple, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:128
[22] <=(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:107
[23] >(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Number, b::Number) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:118
[24] >(Lc::Tuple, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:128
[25] >(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:107
[26] >=(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Number, b::Number) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:118
[27] >=(Lc::Tuple, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:128
[28] >=(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:107
[29] ^(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Number, b::Number) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:118
[30] ^(Lc::Tuple, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:128
[31] ^(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:107
[32] atan(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Number, b::Number) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:118
[33] atan(Lc::Tuple, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:128
[34] atan(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:107
[35] atand(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Number, b::Number) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:118
[36] atand(Lc::Tuple, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:128
[37] atand(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:107
[38] mod(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Number, b::Number) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:118
[39] mod(Lc::Tuple, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:128
[40] mod(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:107
Type piracy for Oceananigans.AbstractOperations: Test Failed at /Users/mose/.julia/packages/Aqua/MCcFg/src/piracies.jl:245
Expression: isempty(v)
Evaluated: isempty(Method[*(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Number, b::Number) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:118, *(Lop::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Union{Function, Number, Oceananigans.Fields.AbstractField}, b::Union{Function, Number, Oceananigans.Fields.AbstractField}, c::Union{Function, Number, Oceananigans.Fields.AbstractField}, d::Union{Function, Number, Oceananigans.Fields.AbstractField}...) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/multiary_operations.jl:71, *(Lop::Tuple, a::Union{Function, Number, Oceananigans.Fields.AbstractField}, b::Union{Function, Number, Oceananigans.Fields.AbstractField}, c::Union{Function, Number, Oceananigans.Fields.AbstractField}, d::Union{Function, Number, Oceananigans.Fields.AbstractField}...) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/multiary_operations.jl:88, *(Lc::Tuple, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:128, *(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:107, +(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Number, b::Number) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:118, +(Lop::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Union{Function, Number, Oceananigans.Fields.AbstractField}, b::Union{Function, Number, Oceananigans.Fields.AbstractField}, c::Union{Function, Number, Oceananigans.Fields.AbstractField}, d::Union{Function, Number, Oceananigans.Fields.AbstractField}...) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/multiary_operations.jl:71, +(Lop::Tuple, a::Union{Function, Number, Oceananigans.Fields.AbstractField}, b::Union{Function, Number, Oceananigans.Fields.AbstractField}, c::Union{Function, Number, Oceananigans.Fields.AbstractField}, d::Union{Function, Number, Oceananigans.Fields.AbstractField}...) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/multiary_operations.jl:88, +(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:107, +(Lc::Tuple, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:128 … ^(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:107, atan(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Number, b::Number) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:118, atan(Lc::Tuple, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:128, atan(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:107, atand(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Number, b::Number) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:118, atand(Lc::Tuple, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:128, atand(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:107, mod(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a::Number, b::Number) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:118, mod(Lc::Tuple, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:128, mod(Lc::Tuple{Union{Nothing, Center, Face}, Union{Nothing, Center, Face}, Union{Nothing, Center, Face}}, a, b) @ Oceananigans.AbstractOperations ~/.julia/packages/Oceananigans/8cYE4/src/AbstractOperations/binary_operations.jl:107])
Stacktrace:
[...]
Possible type-piracy detected:
[1] isless(::Nothing, ::Nothing) @ Oceananigans.BoundaryConditions ~/.julia/packages/Oceananigans/8cYE4/src/BoundaryConditions/boundary_condition_ordering.jl:108
Type piracy for Oceananigans.BoundaryConditions: Test Failed at /Users/mose/.julia/packages/Aqua/MCcFg/src/piracies.jl:245
Expression: isempty(v)
Evaluated: isempty(Method[isless(::Nothing, ::Nothing) @ Oceananigans.BoundaryConditions ~/.julia/packages/Oceananigans/8cYE4/src/BoundaryConditions/boundary_condition_ordering.jl:108])
Stacktrace:
[...]
Possible type-piracy detected:
[1] ρ′(i, j, k, grid, eos, θ, sᴬ) @ Oceananigans.BuoyancyFormulations ~/.julia/packages/Oceananigans/8cYE4/src/BuoyancyFormulations/nonlinear_equation_of_state.jl:30
Type piracy for Oceananigans.BuoyancyFormulations: Test Failed at /Users/mose/.julia/packages/Aqua/MCcFg/src/piracies.jl:245
Expression: isempty(v)
Evaluated: isempty(Method[ρ′(i, j, k, grid, eos, θ, sᴬ) @ Oceananigans.BuoyancyFormulations ~/.julia/packages/Oceananigans/8cYE4/src/BuoyancyFormulations/nonlinear_equation_of_state.jl:30])
Stacktrace:
[...]
Possible type-piracy detected:
[1] size(loc, topo, sz) @ Oceananigans.Grids ~/.julia/packages/Oceananigans/8cYE4/src/Grids/grid_utils.jl:89
[2] size(loc, topo, sz, indices) @ Oceananigans.Grids ~/.julia/packages/Oceananigans/8cYE4/src/Grids/grid_utils.jl:89
Type piracy for Oceananigans.Grids: Test Failed at /Users/mose/.julia/packages/Aqua/MCcFg/src/piracies.jl:245
Expression: isempty(v)
Evaluated: isempty(Method[size(loc, topo, sz) @ Oceananigans.Grids ~/.julia/packages/Oceananigans/8cYE4/src/Grids/grid_utils.jl:89, size(loc, topo, sz, indices) @ Oceananigans.Grids ~/.julia/packages/Oceananigans/8cYE4/src/Grids/grid_utils.jl:89])
Stacktrace:
[...]
Possible type-piracy detected:
[1] ρ(i, j, k, grid, eos, T, S, Z) @ Oceananigans.Models ~/.julia/packages/Oceananigans/8cYE4/src/Models/seawater_density.jl:10
Type piracy for Oceananigans.Models: Test Failed at /Users/mose/.julia/packages/Aqua/MCcFg/src/piracies.jl:245
Expression: isempty(v)
Evaluated: isempty(Method[ρ(i, j, k, grid, eos, T, S, Z) @ Oceananigans.Models ~/.julia/packages/Oceananigans/8cYE4/src/Models/seawater_density.jl:10])
Stacktrace:
[...]
Test Summary: | Pass Fail Total Time
Aqua | 31 5 36 1.7s
Type piracy for Oceananigans.AbstractOperations | 1 1 1.2s
Type piracy for Oceananigans.Advection | 1 1 0.0s
Type piracy for Oceananigans.Architectures | 1 1 0.0s
Type piracy for Oceananigans.Biogeochemistry | 1 1 0.0s
Type piracy for Oceananigans.BoundaryConditions | 1 1 0.0s
Type piracy for Oceananigans.BuoyancyFormulations | 1 1 0.0s
Type piracy for Oceananigans.Coriolis | 1 1 0.0s
Type piracy for Oceananigans.Diagnostics | 1 1 0.0s
Type piracy for Oceananigans.DistributedComputations | 1 1 0.0s
Type piracy for Oceananigans.Fields | 1 1 0.0s
Type piracy for Oceananigans.Forcings | 1 1 0.0s
Type piracy for Oceananigans.Grids | 1 1 0.0s
Type piracy for Oceananigans.ImmersedBoundaries | 1 1 0.0s
Type piracy for Oceananigans.Logger | 1 1 0.0s
Type piracy for Oceananigans.Models | 1 1 0.0s
Type piracy for Oceananigans.Models.BulkDragBoundaryConditions | 1 1 0.0s
Type piracy for Oceananigans.Models.HydrostaticFreeSurfaceModels | 1 1 0.0s
Type piracy for Oceananigans.Models.HydrostaticFreeSurfaceModels.SplitExplicitFreeSurfaces | 1 1 0.0s
Type piracy for Oceananigans.Models.LagrangianParticleTracking | 1 1 0.0s
Type piracy for Oceananigans.Models.NonhydrostaticModels | 1 1 0.0s
Type piracy for Oceananigans.Models.ShallowWaterModels | 1 1 0.0s
Type piracy for Oceananigans.Models.VarianceDissipationComputations | 1 1 0.0s
Type piracy for Oceananigans.MultiRegion | 1 1 0.0s
Type piracy for Oceananigans.Operators | 1 1 0.0s
Type piracy for Oceananigans.OrthogonalSphericalShellGrids | 1 1 0.0s
Type piracy for Oceananigans.OutputReaders | 1 1 0.0s
Type piracy for Oceananigans.OutputWriters | 1 1 0.0s
Type piracy for Oceananigans.Simulations | 1 1 0.0s
Type piracy for Oceananigans.Solvers | 1 1 0.0s
Type piracy for Oceananigans.StokesDrifts | 1 1 0.0s
Type piracy for Oceananigans.TimeSteppers | 1 1 0.0s
Type piracy for Oceananigans.TurbulenceClosures | 1 1 0.0s
Type piracy for Oceananigans.TurbulenceClosures.Smagorinskys | 1 1 0.0s
Type piracy for Oceananigans.TurbulenceClosures.TKEBasedVerticalDiffusivities | 1 1 0.0s
Type piracy for Oceananigans.Units | 1 1 0.0s
Type piracy for Oceananigans.Utils | 1 1 0.0s
RNG of the outermost testset: Random.Xoshiro(0x398a2405fd4e0591, 0xb1923e0a18b7d4c5, 0xca2772ada9d00479, 0x2c75dbf8783f6893, 0x783f1f53e2417642)
ERROR: Some tests did not pass: 31 passed, 5 failed, 0 errored, 0 broken.
```
Completely untyped signatures like https://github.com/CliMA/Oceananigans.jl/blob/f3574aa91ca66e82f9ade63ba51115923e857c24/src/Grids/grid_utils.jl#L89 are particularly bad.
Now I need to go, when I have time I'll add a test at leat for enforcing no type piracy in the clean submodules, following the example in https://github.com/NumericalEarth/Breeze.jl/pull/713.
6 条评论