Skip to content

Commit 31cac01

Browse files
authored
Merge pull request #191 from JuliaPhysics/fixed-rational-constant
Create alias `FRInt32` for `FixedRational{Int32, 25200}`
2 parents b7ec886 + 0148cb2 commit 31cac01

File tree

5 files changed

+38
-12
lines changed

5 files changed

+38
-12
lines changed

README.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ you can use a `QuantityArray`:
328328

329329
```julia-repl
330330
julia> ar = rand(3)u"m/s"
331-
3-element QuantityArray(::Vector{Float64}, ::Quantity{Float64, Dimensions{FixedRational{Int32, 25200}}}):
331+
3-element QuantityArray(::Vector{Float64}, ::Quantity{Float64, Dimensions{FRInt32}}):
332332
0.2729202669351497 m s⁻¹
333333
0.992546340360901 m s⁻¹
334334
0.16863543422972482 m s⁻¹
@@ -423,31 +423,32 @@ julia> total_cookies = cookie_rate * total_milk
423423
92.7 cookies
424424
```
425425

426-
Exponents are tracked by default with the type `R = FixedRational{Int32,C}`,
427-
which represents rational numbers with a fixed denominator `C`.
426+
Exponents are tracked by default with the type `FRInt32` (alias for `FixedRational{Int32, 25200}`),
427+
which represents rational numbers with an integer numerator and fixed denominator.
428428
This is much faster than `Rational`.
429429

430430
```julia
431431
julia> typeof(0.5u"kg")
432-
Quantity{Float64, Dimensions{FixedRational{Int32, 25200}}}
432+
Quantity{Float64, Dimensions{FRInt32}}
433433
```
434434

435435
You can change the type of the value field by initializing with a value
436436
explicitly of the desired type.
437437

438438
```julia
439439
julia> typeof(Quantity(Float16(0.5), mass=1, length=1))
440-
Quantity{Float16, Dimensions{FixedRational{Int32, 25200}}}
440+
Quantity{Float16, Dimensions{FRInt32}}
441441
```
442442

443443
or by conversion:
444444

445445
```julia
446446
julia> typeof(convert(Quantity{Float16}, 0.5u"m/s"))
447-
Quantity{Float16, Dimensions{FixedRational{Int32, 25200}}}
447+
Quantity{Float16, Dimensions{FRInt32}}
448448
```
449449

450-
For many applications, `FixedRational{Int8,6}` will suffice,
450+
For many applications, using `FRInt8` (alias for `FixedRational{Int8,12}`)
451+
will suffice as the base dimensions type,
451452
and can be faster as it means the entire `Dimensions`
452453
struct will fit into 64 bits.
453454
You can change the type of the dimensions field by passing
@@ -456,9 +457,9 @@ the type you wish to use as the second argument to `Quantity`:
456457
```julia
457458
julia> using DynamicQuantities
458459

459-
julia> R8 = Dimensions{FixedRational{Int8,6}};
460+
julia> R8 = Dimensions{FRInt8};
460461

461-
julia> R32 = Dimensions{FixedRational{Int32,2^4 * 3^2 * 5^2 * 7}}; # Default
462+
julia> R32 = Dimensions{FRInt32};
462463

463464
julia> q8 = [Quantity{Float64,R8}(randn(), length=rand(-2:2)) for i in 1:1000];
464465

docs/src/api.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,7 @@ Filter = t -> !(t in [ustrip, dimension, ulength, umass, utime, ucurrent, utemp
3434

3535
```@docs
3636
FixedRational
37+
FRInt32
38+
FRInt8
3739
DynamicQuantities.denom
3840
```

src/DynamicQuantities.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module DynamicQuantities
33
export Units, Constants, SymbolicUnits, SymbolicConstants
44
export AbstractQuantity, AbstractGenericQuantity, AbstractRealQuantity, UnionAbstractQuantity
55
export Quantity, GenericQuantity, RealQuantity
6-
export FixedRational
6+
export FixedRational, FRInt32, FRInt8
77
export AbstractDimensions, Dimensions, NoDims
88
export AbstractSymbolicDimensions, SymbolicDimensions, SymbolicDimensionsSingleton
99
export QuantityArray

src/types.jl

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,21 @@ else
44
@eval const static_fieldnames = fieldnames
55
end
66

7-
const DEFAULT_DIM_BASE_TYPE = FixedRational{DEFAULT_NUMERATOR_TYPE,DEFAULT_DENOM}
7+
"""
8+
FRInt32
9+
10+
FixedRational with Int32 numerator and denominator 25200.
11+
"""
12+
const FRInt32 = FixedRational{DEFAULT_NUMERATOR_TYPE,DEFAULT_DENOM}
13+
14+
"""
15+
FRInt8
16+
17+
FixedRational with Int8 numerator and denominator 12.
18+
"""
19+
const FRInt8 = FixedRational{Int8, 12}
20+
21+
const DEFAULT_DIM_BASE_TYPE = FRInt32
822
const DEFAULT_VALUE_TYPE = Float64
923

1024
"""

test/unittests.jl

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,15 @@ end
737737
x = 10u"m"
738738
user_quantity = Quantity(10.0, Dimensions{FixedRational{Int32,25200}}(1, 0, 0, 0, 0, 0, 0))
739739
@test x == user_quantity
740+
741+
@testset "FRInt32 and FRInt8 type aliases" begin
742+
@test FRInt32 === FixedRational{Int32, 25200}
743+
@test FRInt8 === FixedRational{Int8, 12}
744+
@test DEFAULT_DIM_BASE_TYPE === FRInt32
745+
746+
@test occursin("FRInt32", string(FRInt32))
747+
@test occursin("FRInt8", string(FRInt8))
748+
end
740749
end
741750

742751
@testset "Quantity promotion" begin
@@ -1682,7 +1691,7 @@ end
16821691
io = IOBuffer()
16831692
Base.showarg(io, z, true)
16841693
msg = String(take!(io))
1685-
Q == Quantity && @test occursin(r"QuantityArray\(::Vector{Float64}, ::(DynamicQuantities\.)?Quantity{Float64, (DynamicQuantities\.)?SymbolicDimensions{(DynamicQuantities\.)?FixedRational{Int32, 25200}}}\)", msg)
1694+
Q == Quantity && @test occursin(r"QuantityArray\(::Vector{Float64}, ::(DynamicQuantities\.)?Quantity{Float64, (DynamicQuantities\.)?SymbolicDimensions{(DynamicQuantities\.)?FRInt32}}\)", msg)
16861695

16871696
io = IOBuffer()
16881697
Base.show(io, MIME"text/plain"(), typeof(z))

0 commit comments

Comments
 (0)