@@ -171,23 +171,55 @@ uexpand(q::QuantityArray) = uexpand.(q)
171171Convert a quantity `q` with base SI units to the symbolic units of `qout`, for `q` and `qout` with compatible units.
172172Mathematically, the result has value `q / uexpand(qout)` and units `dimension(qout)`.
173173"""
174- function uconvert (qout:: UnionAbstractQuantity{<:Any, <:AbstractSymbolicDimensions } , q:: UnionAbstractQuantity{<:Any, <:Dimensions} )
174+ function uconvert (qout:: UnionAbstractQuantity{<:Any, <:SymbolicDimensions } , q:: UnionAbstractQuantity{<:Any, <:Dimensions} )
175175 @assert isone (ustrip (qout)) " You passed a quantity with a non-unit value to uconvert."
176176 qout_expanded = uexpand (qout)
177177 dimension (q) == dimension (qout_expanded) || throw (DimensionError (q, qout_expanded))
178178 new_val = ustrip (q) / ustrip (qout_expanded)
179179 new_dim = dimension (qout)
180180 return new_quantity (typeof (q), new_val, new_dim)
181181end
182- function uconvert (qout:: UnionAbstractQuantity{<:Any,<:AbstractSymbolicDimensions } , q:: QuantityArray{<:Any,<:Any,<:Dimensions} )
182+ function uconvert (qout:: UnionAbstractQuantity{<:Any,<:SymbolicDimensions } , q:: QuantityArray{<:Any,<:Any,<:Dimensions} )
183183 @assert isone (ustrip (qout)) " You passed a quantity with a non-unit value to uconvert."
184184 qout_expanded = uexpand (qout)
185185 dimension (q) == dimension (qout_expanded) || throw (DimensionError (q, qout_expanded))
186186 new_array = ustrip (q) ./ ustrip (qout_expanded)
187187 new_dim = dimension (qout)
188188 return QuantityArray (new_array, new_dim, quantity_type (q))
189189end
190- # TODO : Method for converting SymbolicDimensions -> SymbolicDimensions
190+
191+ # Ensure we always do operations with SymbolicDimensions:
192+ function uconvert (
193+ qout:: UnionAbstractQuantity{T,<:SymbolicDimensionsSingleton{R}} ,
194+ q:: Union {
195+ <: UnionAbstractQuantity{<:Any,<:Dimensions} ,
196+ <: QuantityArray{<:Any,<:Any,<:Dimensions} ,
197+ },
198+ ) where {T,R}
199+ return uconvert (
200+ convert (
201+ with_type_parameters (
202+ typeof (qout),
203+ T,
204+ with_type_parameters (SymbolicDimensions, R),
205+ ),
206+ qout,
207+ ),
208+ q,
209+ )
210+ end
211+
212+ # Allow user to convert SymbolicDimensions -> SymbolicDimensions
213+ function uconvert (
214+ qout:: UnionAbstractQuantity{<:Any,<:AbstractSymbolicDimensions{R}} ,
215+ q:: Union {
216+ <: UnionAbstractQuantity{<:Any,<:AbstractSymbolicDimensions} ,
217+ <: QuantityArray{<:Any,<:Any,<:AbstractSymbolicDimensions} ,
218+ },
219+ ) where {R}
220+ return uconvert (qout, uexpand (q))
221+ end
222+
191223
192224"""
193225 uconvert(qout::UnionAbstractQuantity{<:Any, <:AbstractSymbolicDimensions})
0 commit comments