Skip to content

Matrix division for SMatrix{m, n, BigFloat} #1069

Closed
@hyrodium

Description

@hyrodium

MWE:

julia> using StaticArrays

julia> M = @SMatrix rand(3,3)
3×3 SMatrix{3, 3, Float64, 9} with indices SOneTo(3)×SOneTo(3):
 0.0208401  0.45567   0.110421
 0.918376   0.652122  0.399424
 0.821561   0.418753  0.730901

julia> M / M
3×3 SMatrix{3, 3, Float64, 9} with indices SOneTo(3)×SOneTo(3):
 1.0          -0.0          -0.0
 1.24963e-16   1.0          -0.0
 8.33088e-17  -3.33235e-16   1.0

julia> N = @SMatrix rand(BigFloat, 3,3)
3×3 SMatrix{3, 3, BigFloat, 9} with indices SOneTo(3)×SOneTo(3):
 0.925296  0.56646   0.496179
 0.483511  0.669458  0.31921
 0.759881  0.802041  0.957391

julia> N / N
ERROR: setindex!() with non-isbitstype eltype is not supported by StaticArrays. Consider using SizedArray.
Stacktrace:
  [1] error(s::String)
    @ Base ./error.jl:33
  [2] setindex!
    @ ~/.julia/dev/StaticArrays/src/MArray.jl:39 [inlined]
  [3] macro expansion
    @ ~/.julia/dev/StaticArrays/src/indexing.jl:66 [inlined]
  [4] _setindex!_scalar
    @ ~/.julia/dev/StaticArrays/src/indexing.jl:46 [inlined]
  [5] setindex!
    @ ~/.julia/dev/StaticArrays/src/indexing.jl:42 [inlined]
  [6] macro expansion
    @ ~/.julia/dev/StaticArrays/src/indexing.jl:357 [inlined]
  [7] _setindex!
    @ ~/.julia/dev/StaticArrays/src/indexing.jl:320 [inlined]
  [8] setindex!
    @ ~/.julia/dev/StaticArrays/src/indexing.jl:274 [inlined]
  [9] _solve
    @ ~/.julia/dev/StaticArrays/src/solve.jl:36 [inlined]
 [10] \
    @ ~/.julia/dev/StaticArrays/src/solve.jl:1 [inlined]
 [11] /(A::SMatrix{3, 3, BigFloat, 9}, B::SMatrix{3, 3, BigFloat, 9})
    @ LinearAlgebra ~/julia/julia-1.7.3/share/julia/stdlib/v1.7/LinearAlgebra/src/generic.jl:1152
 [12] top-level scope
    @ REPL[5]:1

This is because A/B uses setindex internally, and the method doesn't support non-isbitstypes. (x-ref: #883)
But is this error as expected?

I thought we can add a matrix division method for non-isbitstypes that does not use setindex.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions