From 8830222dbb2a68d1e2b82c46bf3aa87c7a109afa Mon Sep 17 00:00:00 2001 From: Johnny Chen Date: Mon, 24 Aug 2020 15:29:42 +0800 Subject: [PATCH 1/5] update CI settings * move codecov report to github action * enable artifact caching * disable fail-fast because Github Action doesn't support allow_failures yet --- .github/workflows/juliapackage.yml | 24 +++++++++++++++++++++++- .travis.yml | 14 -------------- 2 files changed, 23 insertions(+), 15 deletions(-) delete mode 100644 .travis.yml diff --git a/.github/workflows/juliapackage.yml b/.github/workflows/juliapackage.yml index 4aded472..09f77848 100644 --- a/.github/workflows/juliapackage.yml +++ b/.github/workflows/juliapackage.yml @@ -1,25 +1,47 @@ name: Unit test on: + create: + tags: push: branches: - master pull_request: + schedule: + - cron: '20 00 1 * *' jobs: test: runs-on: ${{ matrix.os }} strategy: + fail-fast: false matrix: julia-version: ['1.0', '1', 'nightly'] os: [ubuntu-latest, windows-latest, macOS-latest] steps: - - uses: actions/checkout@v1.0.0 + - uses: actions/checkout@v2 - name: "Set up Julia" uses: julia-actions/setup-julia@v1 with: version: ${{ matrix.julia-version }} + - name: Cache artifacts + uses: actions/cache@v1 + env: + cache-name: cache-artifacts + with: + path: ~/.julia/artifacts + key: ${{ runner.os }}-test-${{ env.cache-name }}-${{ hashFiles('**/Project.toml') }} + restore-keys: | + ${{ runner.os }}-test-${{ env.cache-name }}- + ${{ runner.os }}-test- + ${{ runner.os }}- - name: "Unit Test" uses: julia-actions/julia-runtest@master + + - uses: julia-actions/julia-processcoverage@v1 + - uses: codecov/codecov-action@v1 + with: + file: lcov.info + \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 8bc76a3c..00000000 --- a/.travis.yml +++ /dev/null @@ -1,14 +0,0 @@ -## Documentation: http://docs.travis-ci.com/user/languages/julia/ -# Only used to upload coverage report -language: julia -os: - - linux -julia: - - 1.0 -notifications: - email: false -git: - depth: 99999999 - -after_success: - - julia -e 'using Pkg; Pkg.add("Coverage"); using Coverage; Coveralls.submit(process_folder())' From 2b25a043ede0a569cdc0720c43e1866408c675ea Mon Sep 17 00:00:00 2001 From: Johnny Chen Date: Mon, 24 Aug 2020 15:15:53 +0800 Subject: [PATCH 2/5] update show tests Julia 1.6 has made a lot of changes to `show`. Two of the most "breaking change" among it is 1) that `Array{T, 2}` is now shown as `Matrix{T}` and 2) that `RGB{Normed{UInt8, 8}}` is now shown as its alias `RGB{N0f8}` FixedPointNumbers and Colors/ColorTypes have made similar changes, too. This update is not perfect because the reference is hard coded into test cases and it's very likely to break in future. But given that how `op` is shown isn't of high priority here, here I just save myself some time and copy & paste the results so as to make tests pass. --- src/distortedview.jl | 2 +- src/operations/cache.jl | 4 ++-- src/operations/crop.jl | 4 ++-- src/operations/either.jl | 2 +- src/operations/scale.jl | 2 +- src/operations/zoom.jl | 2 +- src/pipeline.jl | 2 +- test/operations/tst_cache.jl | 11 +++++++---- test/operations/tst_channels.jl | 6 ++++-- test/operations/tst_convert.jl | 6 ++++-- test/tst_distortedview.jl | 12 +++++++++--- 11 files changed, 33 insertions(+), 20 deletions(-) diff --git a/src/distortedview.jl b/src/distortedview.jl index 4de4e0d3..37ee027c 100644 --- a/src/distortedview.jl +++ b/src/distortedview.jl @@ -19,7 +19,7 @@ Base.size(A::DistortedView) = map(length, axes(A)) Base.axes(A::DistortedView) = axes(A.parent) function Base.showarg(io::IO, A::DistortedView, toplevel) - print(io, typeof(A).name, '(') + print(io, typeof(A).name.name, '(') Base.showarg(io, parent(A), false) print(io, ", ") Base.showarg(io, A.grid, false) diff --git a/src/operations/cache.jl b/src/operations/cache.jl index 78580a27..8347f869 100644 --- a/src/operations/cache.jl +++ b/src/operations/cache.jl @@ -130,7 +130,7 @@ function Base.show(io::IO, op::CacheImageInto{<:AbstractArray}) print(io, "Cache into preallocated ") print(io, summary(op.buffer)) else - print(io, typeof(op).name, "(") + print(io, typeof(op).name.name, "(") Base.showarg(io, op.buffer, false) print(io, ")") end @@ -141,7 +141,7 @@ function Base.show(io::IO, op::CacheImageInto{<:Tuple}) print(io, "Cache into preallocated ") print(io, "(", join(map(summary, op.buffer), ", "), ")") else - print(io, typeof(op).name, "((") + print(io, typeof(op).name.name, "((") for (i, buffer) in enumerate(op.buffer) Base.showarg(io, buffer, false) i < length(op.buffer) && print(io, ", ") diff --git a/src/operations/crop.jl b/src/operations/crop.jl index e418bbfd..2f09d076 100644 --- a/src/operations/crop.jl +++ b/src/operations/crop.jl @@ -89,7 +89,7 @@ function Base.show(io::IO, op::Crop{N}) where N end else print(io, "Augmentor.") - print(io, typeof(op).name, "{$N}($(op.indices))") + print(io, typeof(op).name.name, "{$N}($(op.indices))") end end @@ -195,7 +195,7 @@ function Base.show(io::IO, op::CropNative{N}) where N end else print(io, "Augmentor.") - print(io, typeof(op).name, "{$N}($(op.indices))") + print(io, typeof(op).name.name, "{$N}($(op.indices))") end end diff --git a/src/operations/either.jl b/src/operations/either.jl index 4c1050ab..6c045c28 100644 --- a/src/operations/either.jl +++ b/src/operations/either.jl @@ -231,7 +231,7 @@ function Base.show(io::IO, op::Either) print(io, '.') end else - print(io, typeof(op).name, " (1 out of ", length(op.operations), " operation(s)):") + print(io, typeof(op).name.name, " (1 out of ", length(op.operations), " operation(s)):") percent_int = map(c->round(Int, c*100), op.chances) percent_float = map(c->round(c*100; digits=1), op.chances) percent = if any(i != f for (i,f) in zip(percent_int,percent_float)) diff --git a/src/operations/scale.jl b/src/operations/scale.jl index c9948752..eddaaedb 100644 --- a/src/operations/scale.jl +++ b/src/operations/scale.jl @@ -115,6 +115,6 @@ function Base.show(io::IO, op::Scale{N}) where N else print(io, "Augmentor.") fct = length(op.factors[1]) == 1 ? map(first,op.factors) : op.factors - print(io, typeof(op).name, "{$N}($(fct))") + print(io, typeof(op).name.name, "{$N}($(fct))") end end diff --git a/src/operations/zoom.jl b/src/operations/zoom.jl index 0f5405f1..1f05d7c5 100644 --- a/src/operations/zoom.jl +++ b/src/operations/zoom.jl @@ -137,6 +137,6 @@ function Base.show(io::IO, op::Zoom{N}) where N else fct = length(op.factors[1]) == 1 ? map(first,op.factors) : op.factors print(io, "Augmentor.") - print(io, typeof(op).name, "{$N}($(fct))") + print(io, typeof(op).name.name, "{$N}($(fct))") end end diff --git a/src/pipeline.jl b/src/pipeline.jl index a448187f..35ac9051 100644 --- a/src/pipeline.jl +++ b/src/pipeline.jl @@ -40,7 +40,7 @@ function Base.show(io::IO, pipeline::Pipeline) end else k = length("$n") - print(io, "$n-step $(typeof(pipeline).name):") + print(io, "$n-step Augmentor.$(typeof(pipeline).name.name):") for (i, op) in enumerate(ops) println(io) print(io, lpad(string(i), k+1, " "), ".) ") diff --git a/test/operations/tst_cache.jl b/test/operations/tst_cache.jl index f93aa43d..37295bcd 100644 --- a/test/operations/tst_cache.jl +++ b/test/operations/tst_cache.jl @@ -74,13 +74,15 @@ end @test typeof(@inferred(CacheImage(buf))) <: Augmentor.CacheImageInto op = @inferred CacheImage(buf) @test Augmentor.CacheImageInto(buf) === op - @test str_show(op) == "Augmentor.CacheImageInto(::Array{Gray{N0f8},2})" + @test endswith("CacheImageInto(::Array{Gray{N0f8},2})", str_show(op)) + @test str_showconst(op) == "CacheImage(Array{Gray{N0f8}}(2, 3))" op2 = @inferred CacheImage(Array{Gray{N0f8}}(undef, 2, 3)) @test typeof(op) == typeof(op2) @test typeof(op.buffer) == typeof(op2.buffer) @test size(op.buffer) == size(op2.buffer) - @test str_showcompact(op) == "Cache into preallocated 2×3 Array{Gray{N0f8},2} with eltype Gray{Normed{UInt8,8}}" + @test str_showcompact(op) == "Cache into preallocated 2×3 Array{Gray{N0f8},2} with eltype Gray{Normed{UInt8,8}}" || + str_showcompact(op) == "Cache into preallocated 2×3 Array{Gray{N0f8},2} with eltype Gray{N0f8}" v = Augmentor.applylazy(Resize(2,3), camera) res = @inferred Augmentor.applyeager(op, v) @@ -116,13 +118,14 @@ end op = @inferred CacheImage(buf1,buf2) @test op === @inferred CacheImage((buf1,buf2)) @test Augmentor.CacheImageInto((buf1,buf2)) === op - @test str_show(op) == "Augmentor.CacheImageInto((::Array{Gray{N0f8},2}, ::Array{RGB{N0f8},2}))" + @test endswith("CacheImageInto((::Array{Gray{N0f8},2}, ::Array{RGB{N0f8},2}))", str_show(op)) @test str_showconst(op) == "CacheImage(Array{Gray{N0f8}}(3, 3), Array{RGB{N0f8}}(2, 3))" op2 = @inferred CacheImage(Array{Gray{N0f8}}(undef, 3, 3), Array{RGB{N0f8}}(undef, 2, 3)) @test typeof(op) == typeof(op2) @test typeof(op.buffer) == typeof(op2.buffer) @test size.(op.buffer) === size.(op2.buffer) - @test str_showcompact(op) == "Cache into preallocated (3×3 Array{Gray{N0f8},2} with eltype Gray{Normed{UInt8,8}}, 2×3 Array{RGB{N0f8},2} with eltype RGB{Normed{UInt8,8}})" + @test str_showcompact(op) == "Cache into preallocated (3×3 Array{Gray{N0f8},2} with eltype Gray{Normed{UInt8,8}}, 2×3 Array{RGB{N0f8},2} with eltype RGB{Normed{UInt8,8}})" || + str_showcompact(op) == "Cache into preallocated (3×3 Array{Gray{N0f8},2} with eltype Gray{N0f8}, 2×3 Array{RGB{N0f8},2} with eltype RGB{N0f8})" @test buf1 == square @test buf2 == rgb_rect diff --git a/test/operations/tst_channels.jl b/test/operations/tst_channels.jl index 5dde13b2..7c5e594a 100644 --- a/test/operations/tst_channels.jl +++ b/test/operations/tst_channels.jl @@ -107,10 +107,12 @@ end @test_throws MethodError CombineChannels(Float64) @test typeof(@inferred(CombineChannels(RGB))) <: CombineChannels <: Augmentor.Operation @test typeof(@inferred(CombineChannels(RGB{N0f8}))) <: CombineChannels <: Augmentor.Operation - @test str_show(CombineChannels(RGB)) == "Augmentor.CombineChannels(RGB{Any})" + @test str_show(CombineChannels(RGB)) == "Augmentor.CombineChannels(RGB{Any})" || + str_show(CombineChannels(RGB)) == "Augmentor.CombineChannels(RGB)" @test str_show(CombineChannels(Gray{N0f8})) == "Augmentor.CombineChannels(Gray{N0f8})" @test str_showconst(CombineChannels(RGB{N0f8})) == "CombineChannels(RGB{N0f8})" - @test str_showcompact(CombineChannels(Gray)) == "Combine color channels into colorant Gray{Any}" + @test str_showcompact(CombineChannels(Gray)) == "Combine color channels into colorant Gray{Any}" || + str_showcompact(CombineChannels(Gray)) == "Combine color channels into colorant Gray" end @testset "eager" begin @test Augmentor.supports_eager(CombineChannels) === false diff --git a/test/operations/tst_convert.jl b/test/operations/tst_convert.jl index 758665e4..180ce027 100644 --- a/test/operations/tst_convert.jl +++ b/test/operations/tst_convert.jl @@ -9,12 +9,14 @@ @test typeof(@inferred(ConvertEltype(RGB))) <: ConvertEltype <: Augmentor.Operation @test typeof(@inferred(ConvertEltype(RGB{N0f8}))) <: ConvertEltype <: Augmentor.Operation @test str_show(ConvertEltype(Float64)) == "Augmentor.ConvertEltype(Float64)" - @test str_show(ConvertEltype(RGB)) == "Augmentor.ConvertEltype(RGB{Any})" + @test str_show(ConvertEltype(RGB)) == "Augmentor.ConvertEltype(RGB{Any})" || + str_show(ConvertEltype(RGB)) == "Augmentor.ConvertEltype(RGB)" @test str_show(ConvertEltype(Gray{N0f8})) == "Augmentor.ConvertEltype(Gray{N0f8})" @test str_showconst(ConvertEltype(Float64)) == "ConvertEltype(Float64)" @test str_showconst(ConvertEltype(RGB{N0f8})) == "ConvertEltype(RGB{N0f8})" @test str_showcompact(ConvertEltype(Float64)) == "Convert eltype to Float64" - @test str_showcompact(ConvertEltype(Gray)) == "Convert eltype to Gray{Any}" + @test str_showcompact(ConvertEltype(Gray)) == "Convert eltype to Gray{Any}" || + str_showcompact(ConvertEltype(Gray)) == "Convert eltype to Gray" end @testset "eager" begin @test Augmentor.supports_eager(ConvertEltype) === true diff --git a/test/tst_distortedview.jl b/test/tst_distortedview.jl index ea99362e..699349f2 100644 --- a/test/tst_distortedview.jl +++ b/test/tst_distortedview.jl @@ -116,16 +116,22 @@ end @test parent(dv) === camera @test size(dv) == size(camera) @test eltype(dv) == eltype(camera) - @test summary(dv) == "512×512 Augmentor.DistortedView(::Array{Gray{N0f8},2}, ::Array{Float64,3} as 3×3 vector field) with eltype Gray{Normed{UInt8,8}}" + @test summary(dv) == "512×512 Augmentor.DistortedView(::Array{Gray{N0f8},2}, ::Array{Float64,3} as 3×3 vector field) with eltype Gray{Normed{UInt8,8}}" || + summary(dv) == "512×512 DistortedView(::Array{Gray{N0f8},2}, ::Array{Float64,3} as 3×3 vector field) with eltype Gray{Normed{UInt8,8}}" || + summary(dv) == "512×512 DistortedView(::Array{Gray{N0f8},2}, ::Array{Float64,3} as 3×3 vector field) with eltype Gray{N0f8}" @test_reference "reference/distort_static.txt" dv camerao = OffsetArray(camera, (-5,-10)) dv2 = @inferred Augmentor.DistortedView(camerao, A) @test size(dv2) == size(camera) @test eltype(dv2) == eltype(camera) - @test summary(dv2) == "512×512 Augmentor.DistortedView(::Array{Gray{N0f8},2}, ::Array{Float64,3} as 3×3 vector field) with eltype Gray{Normed{UInt8,8}}" + @test summary(dv2) == "512×512 Augmentor.DistortedView(::Array{Gray{N0f8},2}, ::Array{Float64,3} as 3×3 vector field) with eltype Gray{Normed{UInt8,8}}" || + summary(dv2) == "512×512 DistortedView(::Array{Gray{N0f8},2}, ::Array{Float64,3} as 3×3 vector field) with eltype Gray{Normed{UInt8,8}}" || + summary(dv2) == "512×512 DistortedView(::Array{Gray{N0f8},2}, ::Array{Float64,3} as 3×3 vector field) with eltype Gray{N0f8}" @test_reference "reference/distort_static.txt" dv2 v = view(Augmentor.DistortedView(rand(10,10), A), 2:8, 3:10) - @test summary(v) == "7×8 view(Augmentor.DistortedView(::Array{Float64,2}, ::Array{Float64,3} as 3×3 vector field), 2:8, 3:10) with eltype Float64" + @test summary(v) == "7×8 view(Augmentor.DistortedView(::Array{Float64,2}, ::Array{Float64,3} as 3×3 vector field), 2:8, 3:10) with eltype Float64" || + summary(v) == "7×8 view(DistortedView(::Array{Float64,2}, ::Array{Float64,3} as 3×3 vector field), 2:8, 3:10) with eltype Float64" || + summary(v) == "7×8 view(DistortedView(::Matrix{Float64}, ::Array{Float64,3} as 3×3 vector field), 2:8, 3:10) with eltype Float64" end From 4a5957936b6d7f862519a6c19bb3d89801fcb91d Mon Sep 17 00:00:00 2001 From: Johnny Chen Date: Mon, 24 Aug 2020 15:20:48 +0800 Subject: [PATCH 3/5] fix type instability in AggregateThenMapFun aggfun and mapfun might not support `Gray{N0f8}` well, this is a patch to make sure things goes well here wrt type stability. --- src/operations/mapfun.jl | 6 ++++-- test/operations/tst_mapfun.jl | 19 +++++++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/operations/mapfun.jl b/src/operations/mapfun.jl index 40ad8ad0..fa9d6feb 100644 --- a/src/operations/mapfun.jl +++ b/src/operations/mapfun.jl @@ -129,12 +129,14 @@ end @inline supports_lazy(::Type{<:AggregateThenMapFun}) = true function applyeager(op::AggregateThenMapFun, img::AbstractArray, param) - agg = op.aggfun(img) + # promote the result to float type because `aggfun` might not widely support `Gray{N0f8}`/`N0f8` types well + # e.g, type instability in https://github.com/JuliaGraphics/ColorVectorSpace.jl/issues/134 + agg = op.aggfun(of_eltype(floattype(eltype(img)), img)) plain_array(map(x -> op.mapfun(x, agg), img)) end function applylazy(op::AggregateThenMapFun, img::AbstractArray, param) - agg = op.aggfun(img) + agg = op.aggfun(of_eltype(floattype(eltype(img)), img)) mappedarray(x -> op.mapfun(x, agg), img) end diff --git a/test/operations/tst_mapfun.jl b/test/operations/tst_mapfun.jl index 5942dc33..eb5ef2e6 100644 --- a/test/operations/tst_mapfun.jl +++ b/test/operations/tst_mapfun.jl @@ -85,7 +85,7 @@ end @testset "eager" begin @test_throws MethodError Augmentor.applyeager(AggregateThenMapFun(mean, identity), nothing) @test Augmentor.supports_eager(AggregateThenMapFun) === true - m = mean(rect) + m = floattype(eltype(rect)).(mean(rect)) img_out = map(x->x-m, rect) imgs = [ rect, @@ -101,13 +101,14 @@ end @test eltype(res) <: Gray{N0f8} @test typeof(axes(img_in)) <: NTuple{2,Base.OneTo} ? typeof(res) <: Array : typeof(res) <: Array res = @inferred(Augmentor.applyeager(AggregateThenMapFun(mean, (x,a)->x-a), img_in)) - @test res == img_out + @test res ≈ img_out @test typeof(res) == typeof(img_out) end img = OffsetArray(rgb_rect, -2, -1) res = @inferred(Augmentor.applyeager(AggregateThenMapFun(mean, (x,a)->x-a), img)) @test res ≈ collect(img .- mean(rgb_rect)) - @test typeof(res) <: Array{RGB{Float64}} + @test typeof(res) <: Array + @test eltype(res) <: RGB{<:AbstractFloat} # could be either Float32 / Float64 end end @testset "affine" begin @@ -123,15 +124,17 @@ end @test parent(res) === rect @test res isa ReadonlyMappedArray res = @inferred(Augmentor.applylazy(AggregateThenMapFun(mean, (x,a)->x-a), rgb_rect)) - @test res == mappedarray(x->x-mean(rgb_rect), rgb_rect) + @test res ≈ mappedarray(x->x-mean(rgb_rect), rgb_rect) @test parent(res) === rgb_rect - @test typeof(res) <: MappedArrays.ReadonlyMappedArray{ColorTypes.RGB{Float64}} + @test typeof(res) <: MappedArrays.ReadonlyMappedArray + @test eltype(res) <: RGB{<:AbstractFloat} # could be either Float32 / Float64 img = OffsetArray(rgb_rect, -2, -1) res = @inferred(Augmentor.applylazy(AggregateThenMapFun(mean, (x,a)->x-a), img)) - @test res == mappedarray(x->x-mean(rgb_rect), img) + @test res ≈ mappedarray(x->x-mean(rgb_rect), img) @test parent(res) === img - @test typeof(res) <: MappedArrays.ReadonlyMappedArray{ColorTypes.RGB{Float64}} - @test @inferred(getindex(res,0,0)) isa RGB{Float64} + @test typeof(res) <: MappedArrays.ReadonlyMappedArray + @test eltype(res) <: RGB{<:AbstractFloat} # could be either Float32 / Float64 + @test @inferred(getindex(res,0,0)) isa RGB{<:AbstractFloat} end @testset "view" begin @test Augmentor.supports_view(AggregateThenMapFun) === false From 7186b5ba8f646cef105301d02cd672915b6960d9 Mon Sep 17 00:00:00 2001 From: Johnny Chen Date: Mon, 24 Aug 2020 15:51:03 +0800 Subject: [PATCH 4/5] only trigger benchmark on `run benchmark` label --- .github/workflows/benchmark.yml | 20 +++++++++++++++----- benchmark/run_benchmarks.jl | 6 ++++++ 2 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 benchmark/run_benchmarks.jl diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 516dee55..68d5b139 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -2,20 +2,30 @@ name: Run benchmarks on: pull_request: + types: [labeled, opened, synchronize, reopened] jobs: Benchmark: runs-on: ubuntu-latest + # Only trigger the benchmark job when we add `run benchmark` label to the PR + if: contains(github.event.pull_request.labels.*.name, 'run benchmark') steps: - uses: actions/checkout@v2 - uses: julia-actions/setup-julia@latest + - name: Cache artifacts + uses: actions/cache@v1 + env: + cache-name: cache-artifacts with: - version: 1.3 + path: ~/.julia/artifacts + key: ${{ runner.os }}-test-${{ env.cache-name }}-${{ hashFiles('**/Project.toml') }} + restore-keys: | + ${{ runner.os }}-test-${{ env.cache-name }}- + ${{ runner.os }}-test- + ${{ runner.os }}- - name: Install dependencies - run: julia -e 'using Pkg; pkg"add PkgBenchmark BenchmarkCI@0.1"' + run: julia -e 'using Pkg; pkg"add JSON PkgBenchmark BenchmarkCI@0.1"' - name: Run benchmarks - run: julia -e 'using BenchmarkCI; BenchmarkCI.judge()' - - name: Post results - run: julia -e 'using BenchmarkCI; BenchmarkCI.postjudge()' + run: julia benchmark/run_benchmarks.jl env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/benchmark/run_benchmarks.jl b/benchmark/run_benchmarks.jl new file mode 100644 index 00000000..fa1f0bc6 --- /dev/null +++ b/benchmark/run_benchmarks.jl @@ -0,0 +1,6 @@ +# To run it locally, BenchmarkCI should be added to root project +using BenchmarkCI +on_CI = haskey(ENV, "GITHUB_ACTIONS") + +BenchmarkCI.judge() +on_CI ? BenchmarkCI.postjudge() : BenchmarkCI.displayjudgement() From d12716c459874ebd36eb89d2f64232ddaadb116c Mon Sep 17 00:00:00 2001 From: Johnny Chen Date: Mon, 24 Aug 2020 15:56:42 +0800 Subject: [PATCH 5/5] bump Rotations and CoordinateTransformations version --- Project.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Project.toml b/Project.toml index 51c9755f..c5d790ab 100644 --- a/Project.toml +++ b/Project.toml @@ -22,7 +22,7 @@ StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" [compat] ComputationalResources = "0.3" -CoordinateTransformations = "0.5" +CoordinateTransformations = "0.5, 0.6" FileIO = "1" IdentityRanges = "0.3" ImageCore = "0.8.1" @@ -32,7 +32,7 @@ Interpolations = "0.8, 0.9, 0.10, 0.11, 0.12" MLDataPattern = "0.4, 0.5" MappedArrays = "0.1, 0.2" OffsetArrays = "0.8, 0.9, 0.10, 0.11, 1" -Rotations = "0.7, 0.8, 0.9, 0.10, 0.11, 0.12, 0.13" +Rotations = "0.7, 0.8, 0.9, 0.10, 0.11, 0.12, 0.13, 1" StaticArrays = "0.8, 0.9, 0.10, 0.11, 0.12" julia = "1"