@@ -12,24 +12,23 @@ 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:: 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}
15
+ function ImmutableDensePolynomial {B,T,X,N} (cs:: NTuple{N} ) where {B,N,T,X}
22
16
new {B,T,Symbol(X),N} (cs)
23
17
end
24
18
end
25
19
26
-
27
20
ImmutableDensePolynomial {B,T,X,N} (check:: Type{Val{false}} , cs:: NTuple{N,T} ) where {B,N,T,X} =
28
21
ImmutableDensePolynomial {B,T,X} (cs)
29
22
30
23
ImmutableDensePolynomial {B,T,X,N} (check:: Type{Val{true}} , cs:: NTuple{N,T} ) where {B,N, T,X} =
31
24
ImmutableDensePolynomial {B,T,X,N} (cs)
32
25
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
+
33
32
# vector case with N
34
33
function ImmutableDensePolynomial {B,T,X,N} (xs:: AbstractVector{S} ) where {B,T,S,X,N}
35
34
ImmutableDensePolynomial {B,T,X,N} (ntuple (Base. Fix1 (getindex, xs), Val (N)))
@@ -47,13 +46,10 @@ function ImmutableDensePolynomial{B,T,X,N}(c::S) where {B,T,X,N,S<:Scalar}
47
46
cs = ntuple (i -> i == 1 ? T (c) : zero (T), Val (N))
48
47
return ImmutableDensePolynomial {B,T,X,N} (cs)
49
48
end
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
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))
54
50
ImmutableDensePolynomial {B,T,X} (xs:: NTuple{N} ) where {B,T,X,N} = ImmutableDensePolynomial {B,T,X,N} (convert (NTuple{N,T}, xs))
55
51
ImmutableDensePolynomial {B,T} (xs:: NTuple{N} , 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)
52
+ ImmutableDensePolynomial {B} (xs:: NTuple{N,T} , var:: SymbolLike = Var (:x )) where {B,T,N } = ImmutableDensePolynomial {B,T,Symbol(var),N } (xs)
57
53
58
54
# abstract vector. Must eat order
59
55
ImmutableDensePolynomial {B,T,X} (:: Val{false} , xs:: AbstractVector , order:: Int = 0 ) where {B,T,X} =
0 commit comments