diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2defe7b9..79204b52 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,6 @@ jobs: fail-fast: false matrix: julia-version: - - "1.0" - "1" - "nightly" os: diff --git a/Project.toml b/Project.toml index 3211186c..9b435609 100644 --- a/Project.toml +++ b/Project.toml @@ -13,6 +13,7 @@ Requires = "ae029012-a4dd-5104-9daa-d747884805df" [weakdeps] BaseType = "7fbed51b-1ef5-4d67-9085-a4a9b26f478c" Juno = "e5e0dc1b-0480-54bc-9374-aad01c23163d" +Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" @@ -20,6 +21,7 @@ Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" [extensions] MeasurementsBaseTypeExt = "BaseType" MeasurementsJunoExt = "Juno" +MeasurementsMakieExt = "Makie" MeasurementsRecipesBaseExt = "RecipesBase" MeasurementsSpecialFunctionsExt = "SpecialFunctions" MeasurementsUnitfulExt = "Unitful" @@ -30,6 +32,7 @@ BaseType = "0.2" Calculus = "0.4.1, 0.5" Juno = "0.8" LinearAlgebra = "<0.0.1, 1" +Makie = "0.21, 0.22" Printf = "<0.0.1, 1" QuadGK = "2" RecipesBase = "0.6.0, 0.7, 0.8, 1.0" @@ -38,12 +41,13 @@ SpecialFunctions = "0.8, 1, 2" Statistics = "<0.0.1, 1" Test = "<0.0.1, 1" Unitful = "1" -julia = "1" +julia = "1.10" [extras] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" BaseType = "7fbed51b-1ef5-4d67-9085-a4a9b26f478c" Juno = "e5e0dc1b-0480-54bc-9374-aad01c23163d" +Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" QuadGK = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" @@ -52,4 +56,4 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" [targets] -test = ["Aqua", "BaseType", "QuadGK", "RecipesBase", "SpecialFunctions", "Statistics", "Test", "Unitful"] +test = ["Aqua", "Makie", "BaseType", "QuadGK", "RecipesBase", "SpecialFunctions", "Statistics", "Test", "Unitful"] diff --git a/ext/MeasurementsMakieExt.jl b/ext/MeasurementsMakieExt.jl new file mode 100644 index 00000000..ef672f20 --- /dev/null +++ b/ext/MeasurementsMakieExt.jl @@ -0,0 +1,46 @@ +### plot-recipes.jl +# +# Maintainer: Mosè Giordano +# Keywords: uncertainty, error propagation, physics, plots +# +# This file is a part of Measurements.jl. +# +# License is MIT "Expat". +# +### Commentary: +# +# This file defines the recipes to plot Measurements vectors with Makie.jl package in 2D. +# +### Code: +module MeasurementsMakieExt + +if isdefined(Base, :get_extension) + using Measurements: Measurement, value, uncertainty + using Makie: Makie, PointBased, Errorbars, Band +else + using ..Measurements: Measurement, value, uncertainty + using ..Makie: Makie, PointBased, Errorbars, Band +end +# PointBased plots +Makie.convert_arguments(P::PointBased, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Measurement}) = + Makie.convert_arguments(P, value.(x), value.(y)) +Makie.convert_arguments(P::PointBased, x::AbstractVector{<:Real}, y::AbstractVector{<:Measurement}) = + Makie.convert_arguments(P, x, value.(y)) +Makie.convert_arguments(P::PointBased, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Real}) = + Makie.convert_arguments(P, value.(x), y) + +# errorbars +Makie.convert_arguments(P::Type{<:Errorbars}, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Measurement}, e::AbstractVector{<:Measurement}) = + Makie.convert_arguments(P, value.(x), value.(y), uncertainty.(e)) +Makie.convert_arguments(P::Type{<:Errorbars}, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Real}) = + Makie.convert_arguments(P, value.(x), y, uncertainty.(x)) +Makie.convert_arguments(P::Type{<:Errorbars}, x::AbstractVector{<:Real}, y::AbstractVector{<:Measurement}) = + Makie.convert_arguments(P, x, value.(y), uncertainty.(y)) + +# band +Makie.convert_arguments(P::Type{<:Band}, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Measurement}) = + Makie.convert_arguments(P, value.(x), value.(y) - uncertainty.(y), value.(y) + uncertainty.(y)) +Makie.convert_arguments(P::Type{<:Band}, x::AbstractVector{<:Real}, y::AbstractVector{<:Measurement}) = + Makie.convert_arguments(P, x, value.(y) - uncertainty.(y), value.(y) + uncertainty.(y)) + +end #module diff --git a/test/makie.jl b/test/makie.jl new file mode 100644 index 00000000..287f1e35 --- /dev/null +++ b/test/makie.jl @@ -0,0 +1,25 @@ +import Makie: convert_arguments, Point, PointBased, Errorbars, Band, Vec + +@testset "PointBased" begin + @test convert_arguments(PointBased(), [1, 2], [Measurements.measurement(1.0, 0.5), Measurements.measurement(2.0, 0.1)]) == (Point{2,Float64}[[1.0, 1.0], [2.0, 2.0]],) + @test convert_arguments(PointBased(), [Measurements.measurement(1.0, 0.5), Measurements.measurement(2.0, 0.1)], [1, 2]) == (Point{2,Float64}[[1.0, 1.0], [2.0, 2.0]],) + @test convert_arguments(PointBased(), [Measurements.measurement(1.0, 0.5), Measurements.measurement(2.0, 0.1)], + [Measurements.measurement(1.0, 0.5), Measurements.measurement(2.0, 0.1)]) == (Point{2,Float64}[[1.0, 1.0], [2.0, 2.0]],) +end + +@testset "Errorbars" begin + @test convert_arguments(Errorbars, [1, 2], [Measurements.measurement(1.0, 0.5), Measurements.measurement(2.0, 0.1)]) == (Vec{4, Float64}[[1.0, 1.0, 0.5, 0.5], [2.0, 2.0, 0.1, 0.1]],) + @test convert_arguments(Errorbars, [Measurements.measurement(1.0, 0.5), Measurements.measurement(2.0, 0.1)], [1, 2]) == (Vec{4, Float64}[[1.0, 1.0, 0.5, 0.5], [2.0, 2.0, 0.1, 0.1]],) + # TODO: Currently intentionally ambigious. + # @test convert_arguments(Errorbars, [Measurements.measurement(1.0, 0.5), Measurements.measurement(2.0, 0.1)], + # [Measurements.measurement(1.0, 0.5), Measurements.measurement(2.0, 0.1)]) == (Vec{4, Float64}[[1.0, 1.0, 0.5, 0.5], [2.0, 2.0, 0.1, 0.1]],) + @test convert_arguments(Errorbars, [Measurements.measurement(1.0, 0.5), Measurements.measurement(2.0, 0.1)], + [Measurements.measurement(1.0, 0.5), Measurements.measurement(2.0, 0.1)], + [Measurements.measurement(1.0, 0.5), Measurements.measurement(2.0, 0.1)]) == (Vec{4, Float64}[[1.0, 1.0, 0.5, 0.5], [2.0, 2.0, 0.1, 0.1]],) +end + +@testset "Band" begin + @test convert_arguments(Band, [1, 2], [Measurements.measurement(1.0, 0.5), Measurements.measurement(2.0, 0.1)]) == (Point{2, Float64}[[1.0, 0.5], [2.0, 1.9]], Point{2, Float64}[[1.0, 1.5], [2.0, 2.1]]) + @test convert_arguments(Band, [Measurements.measurement(1.0, 0.5), Measurements.measurement(2.0, 0.1)], + [Measurements.measurement(1.0, 0.5), Measurements.measurement(2.0, 0.1)]) == (Point{2, Float64}[[1.0, 0.5], [2.0, 1.9]], Point{2, Float64}[[1.0, 1.5], [2.0, 2.1]]) +end diff --git a/test/runtests.jl b/test/runtests.jl index b761f779..ff7e43c5 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,4 +1,4 @@ -using Measurements, SpecialFunctions, QuadGK, Calculus, BaseType +using Measurements, SpecialFunctions, QuadGK, Calculus, BaseType, Makie using Test, LinearAlgebra, Statistics, Unitful, Printf, Aqua if !isdefined(Base,:get_extension) @@ -1047,6 +1047,10 @@ end include("plots.jl") end +@testset "Makie recipes" begin + include("makie.jl") +end + @testset "Ranges" begin m = 2 ± 1 @test m .+ (1:6) isa StepRangeLen