@@ -12,23 +12,24 @@ Immutable is a bit of a misnomer, as using the `@set!` macro from `Setfield.jl`
12
12
"""
13
13
struct ImmutableDensePolynomial{B,T,X,N} <: AbstractDenseUnivariatePolynomial{B,T,X}
14
14
coeffs:: NTuple{N,T}
15
- function ImmutableDensePolynomial {B,T,X,N} (cs:: NTuple{N} ) where {B,N,T,X}
15
+ function ImmutableDensePolynomial {B,T,X,N} (cs:: Tuple{S,Vararg{S}} ) where {B,N,T,X, S}
16
+ m = length (cs)
17
+ m > N && throw (ArgumentError (" Tuple too large for N" ))
18
+ m < N && (cs = ntuple (i -> i <= m ? cs[i] : zero (T), Val (N)))
19
+ new {B,T,Symbol(X),N} (T .(cs))
20
+ end
21
+ function ImmutableDensePolynomial {B,T,X,N} (cs:: Tuple{} ) where {B,N,T,X}
16
22
new {B,T,Symbol(X),N} (cs)
17
23
end
18
24
end
19
25
26
+
20
27
ImmutableDensePolynomial {B,T,X,N} (check:: Type{Val{false}} , cs:: NTuple{N,T} ) where {B,N,T,X} =
21
28
ImmutableDensePolynomial {B,T,X} (cs)
22
29
23
30
ImmutableDensePolynomial {B,T,X,N} (check:: Type{Val{true}} , cs:: NTuple{N,T} ) where {B,N, T,X} =
24
31
ImmutableDensePolynomial {B,T,X,N} (cs)
25
32
26
- # tuple with mismatched size
27
- function ImmutableDensePolynomial {B,T,X,N} (xs:: NTuple{M,S} ) where {B,T,S,X,N,M}
28
- p = ImmutableDensePolynomial {B,S,X,M} (xs)
29
- convert (ImmutableDensePolynomial{B,T,X,N}, ImmutableDensePolynomial {B,T,X,M} (xs))
30
- end
31
-
32
33
# vector case with N
33
34
function ImmutableDensePolynomial {B,T,X,N} (xs:: AbstractVector{S} ) where {B,T,S,X,N}
34
35
ImmutableDensePolynomial {B,T,X,N} (ntuple (Base. Fix1 (getindex, xs), Val (N)))
@@ -46,10 +47,13 @@ function ImmutableDensePolynomial{B,T,X,N}(c::S) where {B,T,X,N,S<:Scalar}
46
47
cs = ntuple (i -> i == 1 ? T (c) : zero (T), Val (N))
47
48
return ImmutableDensePolynomial {B,T,X,N} (cs)
48
49
end
49
- ImmutableDensePolynomial {B,T,X} (:: Val{false} , xs:: NTuple{N,S} ) where {B,T,S,X,N} = ImmutableDensePolynomial {B,T,X,N} (convert (NTuple{N,T}, xs))
50
+ function ImmutableDensePolynomial {B,T,X} (:: Val{false} , xs:: Tuple{S,Vararg{S}} ) where {B,T,S,X}
51
+ N = length (xs)
52
+ ImmutableDensePolynomial {B,T,X,N} (convert (NTuple{N,T}, xs))
53
+ end
50
54
ImmutableDensePolynomial {B,T,X} (xs:: NTuple{N} ) where {B,T,X,N} = ImmutableDensePolynomial {B,T,X,N} (convert (NTuple{N,T}, xs))
51
55
ImmutableDensePolynomial {B,T} (xs:: NTuple{N} , var:: SymbolLike = Var (:x )) where {B,T,N} = ImmutableDensePolynomial {B,T,Symbol(var),N} (xs)
52
- ImmutableDensePolynomial {B} (xs:: NTuple{N,T} , var:: SymbolLike = Var (:x )) where {B,T,N } = ImmutableDensePolynomial {B,T,Symbol(var),N } (xs)
56
+ ImmutableDensePolynomial {B} (xs:: Tuple{T,Vararg{T}} , var:: SymbolLike = Var (:x )) where {B,T} = ImmutableDensePolynomial {B,T,Symbol(var),length(xs) } (xs)
53
57
54
58
# abstract vector. Must eat order
55
59
ImmutableDensePolynomial {B,T,X} (:: Val{false} , xs:: AbstractVector , order:: Int = 0 ) where {B,T,X} =
0 commit comments