From 1207a26c4d6bac71b8dc29fd378bf6afe2b6f4ee Mon Sep 17 00:00:00 2001 From: icweaver Date: Thu, 4 Sep 2025 05:31:17 -0700 Subject: [PATCH 1/2] initial commit up --- Project.toml | 12 +++++++++- ext/PlanckDynamicQuantitiesExt.jl | 37 +++++++++++++++++++++++++++++++ ext/PlanckUnitfulExt.jl | 34 ++++++++++++++++++++++++++++ src/Planck.jl | 21 ++++-------------- test/Project.toml | 6 +++++ test/runtests.jl | 18 ++------------- 6 files changed, 94 insertions(+), 34 deletions(-) create mode 100644 ext/PlanckDynamicQuantitiesExt.jl create mode 100644 ext/PlanckUnitfulExt.jl diff --git a/Project.toml b/Project.toml index c368ff0..152acd7 100644 --- a/Project.toml +++ b/Project.toml @@ -4,8 +4,18 @@ authors = ["Miles Lucas and contributors"] version = "0.1.0" [deps] +TestItemRunner = "f8b46487-2199-4994-9208-9a1283c18c0a" + +[weakdeps] +DynamicQuantities = "06fc5a27-2a28-4c7c-a15d-362465fb6821" Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" +[extensions] +PlanckDynamicQuantitiesExt = "DynamicQuantities" +PlanckUnitfulExt = "Unitful" + [compat] +DynamicQuantities = "1, 1.8" +TestItemRunner = "1.1.0" Unitful = "1" -julia = "1.6" +julia = "1.10" diff --git a/ext/PlanckDynamicQuantitiesExt.jl b/ext/PlanckDynamicQuantitiesExt.jl new file mode 100644 index 0000000..12bf65d --- /dev/null +++ b/ext/PlanckDynamicQuantitiesExt.jl @@ -0,0 +1,37 @@ +module PlanckDynamicQuantitiesExt + import Planck + + using DynamicQuantities: UnionAbstractQuantity, Dimensions, dimension, uexpand + using DynamicQuantities.Constants: h, c, k_B + + using TestItemRunner: @testitem + + isfreq(q::UnionAbstractQuantity) = (dimension ∘ uexpand)(q) == Dimensions(time=-1) + islength(q::UnionAbstractQuantity) = (dimension ∘ uexpand)(q) == Dimensions(length=1) + + function Planck.blackbody(q::UnionAbstractQuantity, T) + if isfreq(q) + return 2 * h * q^3 / c^2 / expm1(h * q / (k_B * T)) + end + if islength(q) + return 2 * h * c^2 / q^5 / expm1(h * c / (q * k_B * T)) + end + end + + @testitem "Consistent unit conversions" begin + using Planck, DynamicQuantities + + @test (ustrip ∘ blackbody)(545us"nm", 6000u"K") ≈ blackbody(545e-9, 6000) + @test (ustrip ∘ blackbody)(500_000us"GHz", 6000u"K") ≈ 3.441e-8 rtol=1e-3 + end + + @testitem "Known temperatures" begin + using Planck, DynamicQuantities + + @test blackbody(545e-9, 6000) ≈ 3.079e13 rtol=1e-3 + @test blackbody(Float32, 545e-9, 6000) ≈ 3.079f13 rtol=1f-3 + + @test blackbody(545us"nm", 6000u"K") ≈ 3.079e13u"W/m^3" rtol=1e-3 + @test blackbody(500_000u"GHz", 6000u"K") ≈ 3.441e-8u"W/m^2/Hz" rtol=1e-3 + end +end # end diff --git a/ext/PlanckUnitfulExt.jl b/ext/PlanckUnitfulExt.jl new file mode 100644 index 0000000..c10dc6d --- /dev/null +++ b/ext/PlanckUnitfulExt.jl @@ -0,0 +1,34 @@ +module PlanckUnitfulExt + import Planck + + using Unitful: AbstractQuantity + using Unitful: 𝐋, 𝐓 + using Unitful: h, c0, k + + using TestItemRunner: @testitem + + function Planck.blackbody(ν::AbstractQuantity{V,inv(𝐓)}, T) where V + 2 * h * ν^3 / c0^2 / expm1(h * ν / (k * T)) + end + + function Planck.blackbody(λ::AbstractQuantity{V,𝐋}, T) where V + 2 * h * c0^2 / λ^5 / expm1(h * c0 / (λ * k * T)) + end + + @testitem "Consistent unit conversions" begin + using Planck, Unitful + + @test ustrip(u"W/m^3", blackbody(545u"nm", 6000u"K")) ≈ blackbody(545e-9, 6000) + @test ustrip(u"W/m^2/Hz", blackbody(500u"THz", 6000u"K")) ≈ 3.441e-8 rtol=1e-3 + end + + @testitem "Known temperatures" begin + using Planck, Unitful + + @test blackbody(545e-9, 6000) ≈ 3.079e13 rtol=1e-3 + @test blackbody(Float32, 545e-9, 6000) ≈ 3.079f13 rtol=1f-3 + + @test blackbody(545u"nm", 6000u"K") ≈ 3.079e13u"W/m^3" rtol=1e-3 + @test blackbody(500u"THz", 6000u"K") ≈ 3.441e-8u"W/m^2/Hz" rtol=1e-3 + end +end # end diff --git a/src/Planck.jl b/src/Planck.jl index a985cca..a2db344 100644 --- a/src/Planck.jl +++ b/src/Planck.jl @@ -1,17 +1,11 @@ module Planck -using Unitful -using Unitful: AbstractQuantity -using Unitful: 𝐋, 𝐓 -using Unitful: h, c0, k - export blackbody # constants in SI units -const _h = ustrip(u"J*s", h) -const _c0 = ustrip(u"m/s", c0) -const _k = ustrip(u"J/K", k) - +const _h = 6.62607015e-34 +const _c0 = 299792458 +const _k = 1.380649e-23 """ blackbody([OT], x, T) @@ -51,13 +45,6 @@ julia> blackbody(u"erg/s/cm^2/nm/sr", 600u"nm", 5850u"K") """ blackbody(OT, x, T) = OT(blackbody(x, T)) -function blackbody(ν::AbstractQuantity{V,inv(𝐓)}, T) where V - 2 * h * ν^3 / c0^2 / expm1(h * ν / (k * T)) -end - -function blackbody(λ::AbstractQuantity{V,𝐋}, T) where V - 2 * h * c0^2 / λ^5 / expm1(h * c0 / (λ * k * T)) -end # SI (meters, Kelvin) function blackbody(λ, T) @@ -65,4 +52,4 @@ function blackbody(λ, T) end -end +end # end diff --git a/test/Project.toml b/test/Project.toml index 0ff3cec..c28b735 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -1,3 +1,9 @@ [deps] +DynamicQuantities = "06fc5a27-2a28-4c7c-a15d-362465fb6821" +Planck = "49ffdefc-b0d8-4915-a1d4-43900e16f762" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +TestItemRunner = "f8b46487-2199-4994-9208-9a1283c18c0a" Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[sources] +Planck = {path = ".."} diff --git a/test/runtests.jl b/test/runtests.jl index 0cd421d..501770d 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,17 +1,3 @@ -using Planck -using Test -using Unitful +using TestItemRunner -@testset "Planck.jl" begin - @testset "Consistent unit conversions" begin - @test ustrip(u"W/m^3", blackbody(545u"nm", 6000u"K")) ≈ blackbody(545e-9, 6000) - @test ustrip(u"W/m^2/Hz", blackbody(500u"THz", 6000u"K")) ≈ 3.441e-8 rtol=1e-3 - end - @testset "Known temperatures" begin - @test blackbody(545e-9, 6000) ≈ 3.079e13 rtol=1e-3 - @test blackbody(Float32, 545e-9, 6000) ≈ 3.079f13 rtol=1f-3 - - @test blackbody(545u"nm", 6000u"K") ≈ 3.079e13u"W/m^3" rtol=1e-3 - @test blackbody(500u"THz", 6000u"K") ≈ 3.441e-8u"W/m^2/Hz" rtol=1e-3 - end -end +@run_package_tests filter=ti -> occursin("Planck", ti.filename) verbose=true From 22e72a393c89de4adaa6ee01fc831b2af13edeec Mon Sep 17 00:00:00 2001 From: icweaver Date: Mon, 8 Sep 2025 13:34:54 -0700 Subject: [PATCH 2/2] fix stale dep --- ext/PlanckDynamicQuantitiesExt.jl | 3 --- ext/PlanckUnitfulExt.jl | 3 --- src/Planck.jl | 9 +++++++++ 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/ext/PlanckDynamicQuantitiesExt.jl b/ext/PlanckDynamicQuantitiesExt.jl index 12bf65d..2ccf328 100644 --- a/ext/PlanckDynamicQuantitiesExt.jl +++ b/ext/PlanckDynamicQuantitiesExt.jl @@ -28,9 +28,6 @@ module PlanckDynamicQuantitiesExt @testitem "Known temperatures" begin using Planck, DynamicQuantities - @test blackbody(545e-9, 6000) ≈ 3.079e13 rtol=1e-3 - @test blackbody(Float32, 545e-9, 6000) ≈ 3.079f13 rtol=1f-3 - @test blackbody(545us"nm", 6000u"K") ≈ 3.079e13u"W/m^3" rtol=1e-3 @test blackbody(500_000u"GHz", 6000u"K") ≈ 3.441e-8u"W/m^2/Hz" rtol=1e-3 end diff --git a/ext/PlanckUnitfulExt.jl b/ext/PlanckUnitfulExt.jl index c10dc6d..c4c452f 100644 --- a/ext/PlanckUnitfulExt.jl +++ b/ext/PlanckUnitfulExt.jl @@ -25,9 +25,6 @@ module PlanckUnitfulExt @testitem "Known temperatures" begin using Planck, Unitful - @test blackbody(545e-9, 6000) ≈ 3.079e13 rtol=1e-3 - @test blackbody(Float32, 545e-9, 6000) ≈ 3.079f13 rtol=1f-3 - @test blackbody(545u"nm", 6000u"K") ≈ 3.079e13u"W/m^3" rtol=1e-3 @test blackbody(500u"THz", 6000u"K") ≈ 3.441e-8u"W/m^2/Hz" rtol=1e-3 end diff --git a/src/Planck.jl b/src/Planck.jl index a2db344..731f5bb 100644 --- a/src/Planck.jl +++ b/src/Planck.jl @@ -2,6 +2,8 @@ module Planck export blackbody +using TestItemRunner: @testitem + # constants in SI units const _h = 6.62607015e-34 const _c0 = 299792458 @@ -51,5 +53,12 @@ function blackbody(λ, T) 2 * _h * _c0^2 / λ^5 / expm1(_h * _c0 / (λ * _k * T)) # W / m^3 end +@testitem "Known temperatures" begin + using Planck, Unitful + + @test blackbody(545e-9, 6000) ≈ 3.079e13 rtol=1e-3 + @test blackbody(Float32, 545e-9, 6000) ≈ 3.079f13 rtol=1f-3 +end + end # end