@@ -8,18 +8,30 @@ for T in (:DirectBasis, :ReciprocalBasis)
88 @doc """
99 $($ T) {D} <: Basis{D}
1010
11- - `vecs::NTuple {D, SVector{D, Float64}}`
11+ - `vecs::SVector {D, SVector{D,Float64}}`
1212 """
1313 struct $ T{D} <: Basis{D}
14- vecs:: SVector{D,SVector{D,Float64}}
14+ vecs:: SVector{D, SVector{D,Float64}}
15+ $ T {D} (vecs:: SVector{D, SVector{D,Float64}} ) where D = new {D} (vecs)
16+ $ T (vecs:: SVector{D, SVector{D,Float64}} ) where D = new {D} (vecs)
1517 end
1618 end
17- @eval $ T (Rs:: NTuple{D,AbstractVector{<:Real}} ) where D = $ T {D} (SVector {D,Float64} .(Rs))
18- @eval $ T (Rs:: NTuple{D,NTuple{D,<:Real}} ) where D = $ T {D} (SVector {D,Float64} .(Rs))
19- @eval $ T (Rs:: AbstractVector{<:Real} ...) = $ T (Rs)
20- @eval $ T (Rs:: NTuple{D,<:Real} ...) where D = $ T {D} (SVector {D,Float64} .(Rs))
21- @eval $ T (Rs:: AbstractVector{<:Real} ) = (D= length (Rs); $ T {D} (SVector {D,Float64} .(Rs)))
22- end
19+ @eval function convert (:: Type{$T{D}} , Vs:: StaticVector{D, <:StaticVector{D, <:Real}} ) where D
20+ $ T {D} (convert (SVector{D, SVector{D, Float64}}, Vs))
21+ end
22+ @eval $ T {D} (Vs:: NTuple{D, SVector{D, Float64}} ) where D = $ T {D} (SVector {D} (Vs))
23+ @eval $ T (Vs:: NTuple{D, SVector{D, Float64}} ) where D = $ T {D} (Vs)
24+ @eval $ T {D} (Vs:: NTuple{D, NTuple{D,<:Real}} ) where D = $ T {D} (SVector {D,Float64} .(Vs))
25+ @eval $ T (Vs:: NTuple{D, NTuple{D,<:Real}} ) where D = $ T {D} (Vs)
26+ @eval $ T {D} (Vs:: AbstractVector{<:Real} ...) where D = $ T {D} (convert (SVector{D, SVector{D, Float64}}, Vs))
27+ @eval $ T (Vs:: AbstractVector{<:Real} ...) = $ T {length(Vs)} (Vs... )
28+ @eval $ T {D} (Vs:: StaticVector{D,<:Real} ...) where D = $ T {D} (Vs) # resolve ambiguities w/
29+ @eval $ T (Vs:: StaticVector{D,<:Real} ...) where D = $ T {D} (Vs) # `::StaticArray` methods
30+ end
31+
32+ # Fix a bug in StaticArrays: https://github.com/JuliaArrays/StaticArrays.jl/issues/915
33+ # TODO : Remove when fixed upstream
34+ Base. abs2 (a:: StaticArray ) = LinearAlgebra. norm_sqr (a)
2335
2436vecs (Vs:: Basis ) = Vs. vecs
2537# define the AbstractArray interface for DirectBasis{D}
0 commit comments