JuliaPhysics / JuliaPhysics/Unitful.jl

`DimensionError` when computing `inv` of a StaticArray

Open
#538 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Julia
Stars
675
Forks
124
Avg merge
3h 38m
Merged PRs (30d)
1

Description

Computing inverse of a `StaticArray` results in a `DimensionError`:
```julia
julia> using Unitful, StaticArrays, LinearAlgebra

julia> N = (@SMatrix [2 5; 1 3])u"Å"
2×2 SMatrix{2, 2, Quantity{Int64, 𝐋, Unitful.FreeUnits{(Å,), 𝐋, nothing}}, 4} with indices SOneTo(2)×SOneTo(2):
2 Å 5 Å
1 Å 3 Å

julia> inv(N)
ERROR: DimensionError: Å and 3.0 Å^-1 are not dimensionally compatible.
Stacktrace:
[1] convert(#unused#::Type{Quantity{Float64, 𝐋, Unitful.FreeUnits{(Å,), 𝐋, nothing}}}, x::Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(Å^-1,), 𝐋^-1, nothing}})
@ Unitful ~/.julia/packages/Unitful/SUQzL/src/conversion.jl:112
[2] macro expansion
@ ~/.julia/packages/StaticArrays/58yy1/src/util.jl:17 [inlined]
[3] convert_ntuple
@ ~/.julia/packages/StaticArrays/58yy1/src/util.jl:13 [inlined]
[4] SMatrix{2, 2, Quantity{Float64, 𝐋, Unitful.FreeUnits{(Å,), 𝐋, nothing}}, 4}(x::NTuple{4, Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(Å^-1,), 𝐋^-1, nothing}}})
@ StaticArrays ~/.julia/packages/StaticArrays/58yy1/src/SArray.jl:28
[5] _inv
@ ~/.julia/packages/StaticArrays/58yy1/src/inv.jl:15 [inlined]
[6] inv(A::SMatrix{2, 2, Quantity{Int64, 𝐋, Unitful.FreeUnits{(Å,), 𝐋, nothing}}, 4})
@ StaticArrays ~/.julia/packages/StaticArrays/58yy1/src/inv.jl:5
[7] top-level scope
@ REPL[13]:1
```

This doesn't occur if I am using normal arrays:
```julia
julia> M = [2 5; 1 3]u"Å"
2×2 Matrix{Quantity{Int64, 𝐋, Unitful.FreeUnits{(Å,), 𝐋, nothing}}}:
2 Å 5 Å
1 Å 3 Å

julia> inv(M)
2×2 reinterpret(Quantity{Float64, 𝐋^-1, Unitful.FreeUnits{(Å^-1,), 𝐋^-1, nothing}}, ::Matrix{Float64}):
3.0 Å^-1 -5.0 Å^-1
-1.0 Å^-1 2.0 Å^-1
```

Contributor guide

No contributing guide indexed for this repository

Research direction

Reproduce the failure with the Unitful and StaticArrays example, then compare it with the normal Matrix result. Start at the StaticArrays inv.jl path and the Unitful conversion.jl path shown in the stack trace; done means inv(N) succeeds and returns the expected inverse quantities with inverse units.

Written by the indexing model from the issue text.

Assessment

Tech stack
julia
Domain
data
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.