Skip to content

Should SArray constructor create an SVector by default? #1099

Open
@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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions