Skip to content

Commit

Permalink
include spatial frequency in Periodic()
Browse files Browse the repository at this point in the history
  • Loading branch information
cmichelenstrofer committed Jul 4, 2023
1 parent ef9b3c6 commit 8b4444e
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 9 deletions.
10 changes: 7 additions & 3 deletions src/DimensionfulAngles.jl
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,10 @@ module DimensionfulAngles

# using Base: Base # extend: see `base.jl` for full list of functions extended
using Unitful: Unitful # extend: has_unit_spacing,
using Unitful: minute, promotion, rad, s, 𝐓
using Unitful: Dimension, DimensionlessQuantity, Frequency, FrequencyFreeUnits, MixedUnits
using Unitful: NoDims, NoUnits, Number, Quantity, Time, Unitlike, Unit, Units
using Unitful: minute, promotion, rad, s, 𝐓, 𝐋
using Unitful: Dimension, DimensionlessQuantity, Frequency, FrequencyFreeUnits, Length
using Unitful: MixedUnits, NoDims, NoUnits, Number, Quantity, Time, Unitlike, Unit, Units
using Unitful: Wavenumber
using Unitful: @dimension, @refunit, @derived_dimension, @unit
using Unitful: dimension, register, uconvert, unit, ustrip
using UnitfulEquivalences: Equivalence, @eqrelation
Expand All @@ -43,6 +44,9 @@ export sexagesimal, show_sexagesimal
# export SolidAngle, SolidAngleUnits, SolidAngleFreeUnits
# export AngularVelocity, AngularVelocityUnits, AngularVelocityFreeUnits
# export AngularAcceleration, AngularAccelerationUnits, AngularAccelerationFreeUnits
# export AngularPeriod, AngularPeriodUnits, AngularPeriodFreeUnits
# export AngularWavenumber, AngularWavenumberUnits, AngularWavenumberUnits
# export AngularWavelength, AngularWavelengthUnits, AngularWavelengthFreeUnits

"""
𝐀
Expand Down
27 changes: 25 additions & 2 deletions src/derived.jl
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,12 @@ See also [`DimensionfulAngles.radᵃ`](@ref).
"""
@unit rpmᵃ "rps" RevolutionsPerMinuteᵃ (1turnᵃ/minute) false

# Angular wavenumber, angular wavelength, angular period
@derived_dimension AngularWavenumber (𝐀*𝐋^-1) true
@derived_dimension AngularWavelength (𝐋*𝐀^-1) true
@derived_dimension AngularPeriod (𝐓*𝐀^-1) true

# periodic equivalence for both temporal and spatial frequency
"""
Periodic()
Expand All @@ -76,10 +82,27 @@ julia> uconvert(u"radᵃ/s", 1u"Hz", Periodic())
```
"""
struct Periodic <: Equivalence end
# temporal
@eqrelation Periodic (AngularVelocity / Frequency = 2π * radᵃ)
@eqrelation Periodic (Frequency * Time = 1)
@eqrelation Periodic (AngularVelocity * Time = 2π * radᵃ)
# so that it defaults to `uconvert` behavior
@eqrelation Periodic (AngularVelocity / AngularVelocity = 1)
@eqrelation Periodic (AngularVelocity * AngularPeriod = 1)
@eqrelation Periodic (Time / AngularPeriod = 2π * radᵃ)
@eqrelation Periodic (AngularPeriod * Frequency = 1/(2π * radᵃ))
# spatial
@eqrelation Periodic (AngularWavenumber / Wavenumber = 2π * radᵃ)
@eqrelation Periodic (Wavenumber * Length = 1)
@eqrelation Periodic (AngularWavenumber * Length = 2π * radᵃ)
@eqrelation Periodic (AngularWavenumber * AngularWavelength = 1)
@eqrelation Periodic (Length / AngularWavelength = 2π * radᵃ)
@eqrelation Periodic (AngularWavelength * Wavenumber = 1/(2π * radᵃ))
# default to `uconvert` behavior, temporal
@eqrelation Periodic (Frequency / Frequency = 1)
@eqrelation Periodic (Time / Time = 1)
@eqrelation Periodic (AngularVelocity / AngularVelocity = 1)
@eqrelation Periodic (AngularPeriod / AngularPeriod = 1)
# default to `uconvert` behavior, spatial
@eqrelation Periodic (Wavenumber / Wavenumber = 1)
@eqrelation Periodic (Length / Length = 1)
@eqrelation Periodic (AngularWavenumber / AngularWavenumber = 1)
@eqrelation Periodic (AngularWavelength / AngularWavelength = 1)
45 changes: 41 additions & 4 deletions test/test_core_package.jl
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Test, DimensionfulAngles, Unitful
using Unitful: 𝐓, FreeUnits, Units
using Unitful: 𝐓, 𝐋, FreeUnits, Units
using DimensionfulAngles: 𝐀

function test_uamacro(unit::Symbol)
Expand Down Expand Up @@ -125,16 +125,53 @@ end
test_uamacro(:rpm)
@test isa(1u"radᵃ/s^2", DimensionfulAngles.AngularAcceleration)

# periodic
# angular wavenumber, angular wavelength, angular period
@test typeof(DimensionfulAngles.AngularWavenumber) === UnionAll
@test DimensionfulAngles.AngularWavenumberFreeUnits === FreeUnits{U, 𝐀 * 𝐋^-1} where {U}
@test DimensionfulAngles.AngularWavenumberUnits === Units{U, 𝐀 * 𝐋^-1} where {U}

@test typeof(DimensionfulAngles.AngularWavelength) === UnionAll
@test DimensionfulAngles.AngularWavelengthFreeUnits === FreeUnits{U, 𝐀^-1 * 𝐋} where {U}
@test DimensionfulAngles.AngularWavelengthUnits === Units{U, 𝐀^-1 * 𝐋} where {U}

@test typeof(DimensionfulAngles.AngularPeriod) === UnionAll
@test DimensionfulAngles.AngularPeriodFreeUnits === FreeUnits{U, 𝐀^-1 * 𝐓} where {U}
@test DimensionfulAngles.AngularPeriodUnits === Units{U, 𝐀^-1 * 𝐓} where {U}

# periodic: temporal
@test uconvert(u"radᵃ/s", 1u"Hz", Periodic()) (2π)u"radᵃ/s"
@test uconvert(u"Hz", 1u"radᵃ/s", Periodic()) (1 / 2π)u"Hz"
@test uconvert(u"Hz", 10u"s", Periodic()) 0.1u"Hz"
@test uconvert(u"s", 10u"Hz", Periodic()) 0.1u"s"
@test uconvert(u"s", 2u"radᵃ/s", Periodic()) (π)u"s"
@test uconvert(u"radᵃ/s", (π)u"s", Periodic()) 2u"radᵃ/s"
@test uconvert(u"radᵃ/s", 10u"radᵃ/s", Periodic()) 10u"radᵃ/s"
@test uconvert(u"1/s", 10u"1/s", Periodic()) 10u"1/s"
@test uconvert(u"s/radᵃ", 10u"radᵃ/s", Periodic()) 0.1u"s/radᵃ"
@test uconvert(u"radᵃ/s", 10u"s/radᵃ", Periodic()) 0.1u"radᵃ/s"
@test uconvert(u"s/radᵃ", 1u"s", Periodic()) (1 / 2π)u"s/radᵃ"
@test uconvert(u"s", 1u"s/radᵃ", Periodic()) (2π)u"s"
@test uconvert(u"s/radᵃ", 1u"Hz", Periodic()) (1 / 2π)u"s/radᵃ"
@test uconvert(u"Hz", 1u"s/radᵃ", Periodic()) (1 / 2π)u"Hz"
@test uconvert(u"Hz", 10u"Hz", Periodic()) 10u"1/s"
@test uconvert(u"s", 10u"s", Periodic()) 10u"s"
@test uconvert(u"radᵃ/s", 10u"radᵃ/s", Periodic()) 10u"radᵃ/s"
@test uconvert(u"s/radᵃ", 10u"s/radᵃ", Periodic()) 10u"s/radᵃ"
# periodic: spatial
@test uconvert(u"radᵃ/m", 1u"1/m", Periodic()) (2π)u"radᵃ/m"
@test uconvert(u"m^-1", 1u"radᵃ/m", Periodic()) (1 / 2π)u"1/m"
@test uconvert(u"m^-1", 10u"m", Periodic()) 0.1u"1/m"
@test uconvert(u"m", 10u"m^-1", Periodic()) 0.1u"m"
@test uconvert(u"m", 2u"radᵃ/m", Periodic()) (π)u"m"
@test uconvert(u"radᵃ/m", (π)u"m", Periodic()) 2u"radᵃ/m"
@test uconvert(u"m/radᵃ", 10u"radᵃ/m", Periodic()) 0.1u"m/radᵃ"
@test uconvert(u"radᵃ/m", 10u"m/radᵃ", Periodic()) 0.1u"radᵃ/m"
@test uconvert(u"m/radᵃ", 1u"m", Periodic()) (1 / 2π)u"m/radᵃ"
@test uconvert(u"m", 1u"m/radᵃ", Periodic()) (2π)u"m"
@test uconvert(u"m/radᵃ", 1u"m^-1", Periodic()) (1 / 2π)u"m/radᵃ"
@test uconvert(u"m^-1", 1u"m/radᵃ", Periodic()) (1 / 2π)u"1/m"
@test uconvert(u"m^-1", 10u"m^-1", Periodic()) 10u"1/m"
@test uconvert(u"m", 10u"m", Periodic()) 10u"m"
@test uconvert(u"radᵃ/m", 10u"radᵃ/m", Periodic()) 10u"radᵃ/m"
@test uconvert(u"m/radᵃ", 10u"m/radᵃ", Periodic()) 10u"m/radᵃ"
end

@testset "DefaultSymbols" begin
Expand Down

2 comments on commit 8b4444e

@cmichelenstrofer
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JuliaRegistrator
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Error while trying to register: "Tag with name v0.1.3 already exists and points to a different commit"

Please sign in to comment.