Skip to content

Commit 497a9a1

Browse files
committed
rework Basis more after tightening of supertype; avoid StaticArrays ambiguities etc.
1 parent 581b746 commit 497a9a1

File tree

3 files changed

+23
-10
lines changed

3 files changed

+23
-10
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "Crystalline"
22
uuid = "ae5e2be0-a263-11e9-351e-f94dad1eb351"
33
authors = ["Thomas Christensen <[email protected]>"]
4-
version = "0.3.8"
4+
version = "0.3.9"
55

66
[deps]
77
Combinatorics = "861a8166-3701-5b0c-9a16-15d98fcdc6aa"

src/Crystalline.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ import Base: getindex, setindex!, # → iteration/AbstractArray interface
1818
string, isapprox, zero,
1919
readuntil, vec, show, summary,
2020
+, -, , ==, ImmutableDict,
21-
isone, one
21+
isone, one,
22+
convert
2223
import LinearAlgebra: inv
2324
import Random # → `_Uniform` in src/utils.jl
2425
import Random: rand #

src/types.jl

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2436
vecs(Vs::Basis) = Vs.vecs
2537
# define the AbstractArray interface for DirectBasis{D}

0 commit comments

Comments
 (0)