Skip to content

Should SArray constructor create an SVector by default? #1099

@jonniediegelman

Description

@jonniediegelman
julia> args = (0.0, 0.0, 0.0)
(0.0, 0.0, 0.0)

julia> SArray(args...)
ERROR: DimensionMismatch: No precise constructor for SArray found. Length of input was 3.
Stacktrace:
 [1] _no_precise_size(SA::Type, x::Tuple{Float64, Float64, Float64})
   @ StaticArrays ~/.julia/packages/StaticArrays/PUoe1/src/convert.jl:156
 [2] _no_precise_size(SA::Type, x::StaticArrays.Args{Tuple{Float64, Float64, Float64}})
   @ StaticArrays ~/.julia/packages/StaticArrays/PUoe1/src/convert.jl:155
 [3] adapt_size(#unused#::Type{SArray}, x::StaticArrays.Args{Tuple{Float64, Float64, Float64}})
   @ StaticArrays ~/.julia/packages/StaticArrays/PUoe1/src/convert.jl:112
 [4] construct_type(#unused#::Type{SArray}, x::StaticArrays.Args{Tuple{Float64, Float64, Float64}})
   @ StaticArrays ~/.julia/packages/StaticArrays/PUoe1/src/convert.jl:87
 [5] SArray(::Float64, ::Vararg{Float64})
   @ StaticArrays ~/.julia/packages/StaticArrays/PUoe1/src/convert.jl:160
 [6] top-level scope
   @ REPL[6]:1

This makes it hard to robustly recreate things from their types. ConstructionBase.jl, for example, uses nameof the type to get a constructor that will be robust to things like reconstructing with different eltypes.

julia> using ConstructionBase

julia> T = constructorof(typeof(SA[0.0, 0.0, 0.0]))
SArray

julia T(0, 0, 0)
# Same error

Versions I'm using:

(jl_VtnNO2) pkg> st
Status `/private/var/folders/4z/x1xvpm1d3jd0x24qgrlk9ksm0000gp/T/jl_VtnNO2/Project.toml`
  [187b0558] ConstructionBase v1.4.1
  [90137ffa] StaticArrays v1.5.9

julia> versioninfo()
Julia Version 1.8.1
Commit afb6c60d69a (2022-09-06 15:09 UTC)
Platform Info:
  OS: macOS (x86_64-apple-darwin21.4.0)
  CPU: 16 × Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-13.0.1 (ORCJIT, skylake)
  Threads: 1 on 8 virtual cores
Environment:
  JULIA_EDITOR = code
  JULIA_NUM_THREADS = 
  JULIA_PKG_DEVDIR = /Users/jonnie.diegelman/dev

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions