Skip to content

Commit

Permalink
Switch to FiniteDifferences for @uncertain
Browse files Browse the repository at this point in the history
  • Loading branch information
giordano committed Mar 24, 2022
1 parent 83e5873 commit 9cf297d
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 102 deletions.
4 changes: 2 additions & 2 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ authors = ["Mosè Giordano <[email protected]>"]
version = "2.7.1"

[deps]
Calculus = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9"
FiniteDifferences = "26cc04aa-876d-5657-8c51-4c34ba976000"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
Requires = "ae029012-a4dd-5104-9daa-d747884805df"

[compat]
Calculus = "0.4.1, 0.5"
FiniteDifferences = "0.11.5, 0.12"
RecipesBase = "0.6.0, 0.7, 0.8, 1.0"
Requires = "0.5.0, 1"
julia = "1"
Expand Down
144 changes: 58 additions & 86 deletions benchmark/Manifest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,50 +15,44 @@ uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"

[[BenchmarkCI]]
deps = ["Base64", "BenchmarkTools", "CpuId", "Dates", "GitHub", "JSON", "LinearAlgebra", "Logging", "Markdown", "Pkg", "PkgBenchmark", "Setfield", "Tar", "UnPack", "Zstd_jll"]
git-tree-sha1 = "12f462ed9007e1838ccde5f65a7370564600438f"
deps = ["CpuId", "JSON", "LinearAlgebra", "Logging", "Markdown", "PkgBenchmark", "Setfield"]
git-tree-sha1 = "edf762b6746a0bf1ea1326ae3bcc760454a9f07b"
uuid = "20533458-34a3-403d-a444-e18f38190b5b"
version = "0.1.7"
version = "0.1.3"

[[BenchmarkTools]]
deps = ["JSON", "Logging", "Printf", "Statistics", "UUIDs"]
git-tree-sha1 = "9e62e66db34540a0c919d72172cc2f642ac71260"
git-tree-sha1 = "068fda9b756e41e6c75da7b771e6f89fa8a43d15"
uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
version = "0.5.0"

[[Calculus]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad"
uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9"
version = "0.5.1"
version = "0.7.0"

[[ChainRulesCore]]
deps = ["Compat", "LinearAlgebra", "SparseArrays"]
git-tree-sha1 = "42e3c181483fbd2c416087a0a93838803e358358"
git-tree-sha1 = "4b28f88cecf5d9a07c85b9ce5209a361ecaff34a"
uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
version = "0.9.38"
version = "0.9.45"

[[Compat]]
deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "SHA", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"]
git-tree-sha1 = "ac4132ad78082518ec2037ae5770b6e796f7f956"
git-tree-sha1 = "e4e2b39db08f967cc1360951f01e8a75ec441cab"
uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
version = "3.27.0"
version = "3.30.0"

[[CompilerSupportLibraries_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"

[[ConstructionBase]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "48920211c95a6da1914a06c44ec94be70e84ffff"
git-tree-sha1 = "1dc43957fb9a1574fa1b7a449e101bd1fd3a9fb7"
uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
version = "1.1.0"
version = "1.2.1"

[[CpuId]]
deps = ["Markdown"]
git-tree-sha1 = "32d125af0fb8ec3f8935896122c5e345709909e5"
deps = ["Markdown", "Test"]
git-tree-sha1 = "f0464e499ab9973b43c20f8216d088b61fda80c6"
uuid = "adafc99b-e345-5852-983c-f28acb93d879"
version = "0.3.0"
version = "0.2.2"

[[DataStructures]]
deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
Expand All @@ -78,32 +72,26 @@ uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab"
deps = ["Random", "Serialization", "Sockets"]
uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"

[[DocStringExtensions]]
deps = ["LibGit2", "Markdown", "Pkg", "Test"]
git-tree-sha1 = "9d4f64f79012636741cf01133158a54b24924c32"
uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
version = "0.8.4"

[[Downloads]]
deps = ["ArgTools", "LibCURL", "NetworkOptions"]
uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"

[[FiniteDifferences]]
deps = ["ChainRulesCore", "LinearAlgebra", "Printf", "Random", "Richardson", "StaticArrays"]
git-tree-sha1 = "ea447b6add17fae86c07b2cd7f8ab3faed23dbb6"
uuid = "26cc04aa-876d-5657-8c51-4c34ba976000"
version = "0.12.11"

[[Future]]
deps = ["Random"]
uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820"

[[GitHub]]
deps = ["Base64", "Dates", "HTTP", "JSON", "MbedTLS", "Sockets", "SodiumSeal"]
git-tree-sha1 = "a4f61fc1b1724e6eec1d9333eac2d4b01d8fcc8f"
uuid = "bc5e4493-9b4d-5f90-b8aa-2b2bcaad7a26"
version = "5.4.0"

[[HTTP]]
deps = ["Base64", "Dates", "IniFile", "MbedTLS", "NetworkOptions", "Sockets", "URIs"]
git-tree-sha1 = "c9f380c76d8aaa1fa7ea9cf97bddbc0d5b15adc2"
uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3"
version = "0.9.5"

[[IniFile]]
deps = ["Test"]
git-tree-sha1 = "098e4d2c533924c921f9f9847274f2ad89e018b8"
uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f"
version = "0.5.0"

[[InteractiveUtils]]
deps = ["Markdown"]
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
Expand Down Expand Up @@ -149,6 +137,12 @@ uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
deps = ["Libdl"]
uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"

[[LogExpFunctions]]
deps = ["DocStringExtensions", "LinearAlgebra"]
git-tree-sha1 = "1ba664552f1ef15325e68dc4c05c3ef8c2d5d885"
uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688"
version = "0.2.4"

[[Logging]]
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"

Expand All @@ -162,18 +156,12 @@ version = "0.5.6"
deps = ["Base64"]
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"

[[MbedTLS]]
deps = ["Dates", "MbedTLS_jll", "Random", "Sockets"]
git-tree-sha1 = "1c38e51c3d08ef2278062ebceade0e46cefc96fe"
uuid = "739be429-bea8-5141-9913-cc70e7f3736d"
version = "1.0.3"

[[MbedTLS_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"

[[Measurements]]
deps = ["Calculus", "LinearAlgebra", "Printf", "RecipesBase", "Requires"]
deps = ["FiniteDifferences", "LinearAlgebra", "Printf", "RecipesBase", "Requires"]
path = ".."
uuid = "eff96d63-e80a-5855-80a2-b1b0885c5ab7"
version = "2.6.0"
Expand All @@ -189,14 +177,14 @@ uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"

[[OpenSpecFun_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "9db77584158d0ab52307f8c04f8e7c08ca76b5b3"
git-tree-sha1 = "b9b8b8ed236998f91143938a760c2112dceeb2b4"
uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e"
version = "0.5.3+4"
version = "0.5.4+0"

[[OrderedCollections]]
git-tree-sha1 = "4fa2ba51070ec13fcc7517db714445b4ab986bdf"
git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c"
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
version = "1.4.0"
version = "1.4.1"

[[Parsers]]
deps = ["Dates"]
Expand All @@ -210,15 +198,15 @@ uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"

[[PkgBenchmark]]
deps = ["BenchmarkTools", "Dates", "InteractiveUtils", "JSON", "LibGit2", "Logging", "Pkg", "Printf", "TerminalLoggers", "UUIDs"]
git-tree-sha1 = "6e2856f677f8dcab289ded9c3ffb018fad38f29c"
git-tree-sha1 = "5953fd82c49b5d07497d7a92435545d6e6d7b907"
uuid = "32113eaa-f34f-5b0d-bd6c-c81e245fc73d"
version = "0.2.10"
version = "0.2.11"

[[Preferences]]
deps = ["TOML"]
git-tree-sha1 = "ea79e4c9077208cd3bc5d29631a26bc0cff78902"
git-tree-sha1 = "00cfd92944ca9c760982747e9a1d0d5d86ab1e5a"
uuid = "21216c6a-2e73-6563-6e65-726566657250"
version = "1.2.1"
version = "1.2.2"

[[Printf]]
deps = ["Unicode"]
Expand Down Expand Up @@ -255,6 +243,12 @@ git-tree-sha1 = "4036a3bd08ac7e968e27c203d45f5fff15020621"
uuid = "ae029012-a4dd-5104-9daa-d747884805df"
version = "1.1.3"

[[Richardson]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "e03ca566bec93f8a3aeb059c8ef102f268a38949"
uuid = "708f8203-808e-40c0-ba2d-98a6953ed40d"
version = "1.4.0"

[[SHA]]
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"

Expand All @@ -263,9 +257,9 @@ uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"

[[Setfield]]
deps = ["ConstructionBase", "Future", "MacroTools", "Requires"]
git-tree-sha1 = "d5640fc570fb1b6c54512f0bd3853866bd298b3e"
git-tree-sha1 = "7a151f918819326a6003dba451dabe65f8c0f6fb"
uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46"
version = "0.7.0"
version = "0.6.0"

[[SharedArrays]]
deps = ["Distributed", "Mmap", "Random", "Serialization"]
Expand All @@ -274,21 +268,21 @@ uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383"
[[Sockets]]
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"

[[SodiumSeal]]
deps = ["Base64", "Libdl", "libsodium_jll"]
git-tree-sha1 = "80cef67d2953e33935b41c6ab0a178b9987b1c99"
uuid = "2133526b-2bfb-4018-ac12-889fb3908a75"
version = "0.1.1"

[[SparseArrays]]
deps = ["LinearAlgebra", "Random"]
uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"

[[SpecialFunctions]]
deps = ["ChainRulesCore", "OpenSpecFun_jll"]
git-tree-sha1 = "5919936c0e92cff40e57d0ddf0ceb667d42e5902"
deps = ["ChainRulesCore", "LogExpFunctions", "OpenSpecFun_jll"]
git-tree-sha1 = "371204984184315ed7228bcc604d08e1bbc18f31"
uuid = "276daf66-3868-5448-9aa4-cd146d93841b"
version = "1.3.0"
version = "1.4.2"

[[StaticArrays]]
deps = ["LinearAlgebra", "Random", "Statistics"]
git-tree-sha1 = "42378d3bab8b4f57aa1ca443821b752850592668"
uuid = "90137ffa-7385-5640-81b9-e52037218182"
version = "1.2.2"

[[Statistics]]
deps = ["LinearAlgebra", "SparseArrays"]
Expand All @@ -312,39 +306,17 @@ version = "0.1.3"
deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[[URIs]]
git-tree-sha1 = "7855809b88d7b16e9b029afd17880930626f54a2"
uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4"
version = "1.2.0"

[[UUIDs]]
deps = ["Random", "SHA"]
uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"

[[UnPack]]
git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b"
uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed"
version = "1.0.2"

[[Unicode]]
uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"

[[Zlib_jll]]
deps = ["Libdl"]
uuid = "83775a58-1f1d-513f-b197-d71354ab007a"

[[Zstd_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "2c1332c54931e83f8f94d310fa447fd743e8d600"
uuid = "3161d3a3-bdf6-5164-811a-617609db77b4"
version = "1.4.8+0"

[[libsodium_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "848ab3d00fe39d6fbc2a8641048f8f272af1c51e"
uuid = "a9144af2-ca23-56d9-984f-0d03f7b5ccf8"
version = "1.0.20+0"

[[nghttp2_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"
Expand Down
2 changes: 1 addition & 1 deletion docs/Project.toml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
[deps]
AutoGrad = "6710c13c-97f1-543f-91c5-74e8f7d95b35"
Calculus = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9"
Cuba = "8a292aeb-7a57-582c-b821-06e4c11590b1"
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
FiniteDifferences = "26cc04aa-876d-5657-8c51-4c34ba976000"
QuadGK = "1fd47b50-473d-5c70-9696-f719f8f3bcdc"
SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b"
Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"
Expand Down
3 changes: 0 additions & 3 deletions src/Measurements.jl
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,6 @@ __precompile__()

module Measurements

# Calculus is used to calculate numerical derivatives in "@uncertain" macro.
using Calculus

using Requires

# Functions provided by this package and exposed to users
Expand Down
10 changes: 7 additions & 3 deletions src/math.jl
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@
#
### Code:

# FiniteDifferences is used to calculate numerical derivatives in "@uncertain" macro.
using FiniteDifferences

export @uncertain

# This function is to be used by methods of mathematical operations to produce a
Expand Down Expand Up @@ -147,14 +150,14 @@ according to rules of linear error propagation theory.
Function `f` can accept any number of real arguments.
"""
macro uncertain(expr::Expr)
macro uncertain(expr::Expr, p::Int=4)
f = esc(expr.args[1]) # Function name
n = length(expr.args) - 1
if n == 1
a = esc(expr.args[2]) # Argument, of Measurement type
return quote
let x = measurement($a)
result($f(x.val), Calculus.derivative($f, x.val), x)
result($f(x.val), FiniteDifferences.central_fdm($(esc(p)), 1)($f, x.val), x)
end
end
else
Expand All @@ -164,7 +167,8 @@ macro uncertain(expr::Expr)
argsval =:([]) # Build up the array of values of arguments
[push!(argsval.args, :($(args.args[i]).val)) for i=1:n] # Fill the array
return :( result($f($argsval...),
Calculus.gradient(x -> $f(x...), $argsval),
FiniteDifferences.grad(FiniteDifferences.central_fdm($(esc(p)), 1),
x -> $f(x...), $argsval)[1],
$args) )
end
end
Expand Down
14 changes: 7 additions & 7 deletions test/runtests.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Measurements, SpecialFunctions, QuadGK, Calculus
using Measurements, SpecialFunctions, QuadGK, FiniteDifferences
using Test, LinearAlgebra, Statistics, Unitful, Printf, Aqua
Aqua.test_all(Measurements)

Expand Down Expand Up @@ -331,7 +331,7 @@ end
end
end
for c in (-1 ± 1, 0 ± 1, 1 ± 1)
@test sinc(c) @uncertain(sinc(c)) rtol = 1e-7
@test sinc(c) @uncertain(sinc(c)) atol = 1e-7
@test cosc(c) @uncertain(cosc(c)) rtol = 1e-7
@test Measurements.value(sinc(c) ^ 2 + cosc(c) ^ 2) == 1
end
Expand Down Expand Up @@ -831,16 +831,16 @@ end
@test QuadGK.quadgk(cos, x, y)[1]
@uncertain(((x,y) -> QuadGK.quadgk(cos, x, y)[1])(x, y))
@test QuadGK.quadgk(sin, -y, y)[1]
@uncertain((x -> QuadGK.quadgk(sin, -x, x)[1])(y)) atol = 1e-10
@uncertain((x -> QuadGK.quadgk(sin, -x, x)[1])(y)) atol = 1.5e-10
@test QuadGK.quadgk(exp, 0.4, x)[1]
@uncertain((x -> QuadGK.quadgk(exp, 0.4, x)[1])(x))
end

@testset "Calculus" begin
@testset "FiniteDifferences" begin
for a in (w, x, y)
@test Calculus.derivative(exp, a + w) exp(a + w)
@test Calculus.derivative(t -> sin(t * x), a) x * cos(a * x)
@test Calculus.derivative(t -> y * cos(t), a) -y * sin(a)
@test FiniteDifferences.central_fdm(5, 1)(exp, a + w) exp(a + w)
@test FiniteDifferences.central_fdm(5, 1)(t -> sin(t * x), a) x * cos(a * x)
@test FiniteDifferences.central_fdm(5, 1)(t -> y * cos(t), a) -y * sin(a)
end
end

Expand Down

0 comments on commit 9cf297d

Please sign in to comment.