Skip to content

Commit 6ff4b25

Browse files
authored
Merge pull request #226 from jverzani/issues_214_215
closes issue #214; close issue #215; adjust register macros
2 parents 1d6cb14 + c8aa44f commit 6ff4b25

File tree

4 files changed

+46
-4
lines changed

4 files changed

+46
-4
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name = "Polynomials"
33
uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45"
44
license = "MIT"
55
author = "JuliaMath"
6-
version = "1.1.1"
6+
version = "1.1.0"
77

88
[deps]
99
Intervals = "d8418881-c3e1-53bb-8760-2df7ec849ed5"

src/abstract.jl

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,35 @@ macro register(name)
5757
end
5858

5959

60+
macro registerN(name, params...)
61+
poly = esc(name)
62+
αs = tuple(esc.(params)...)
63+
quote
64+
Base.convert(::Type{P}, q::Q) where {$(αs...),T, P<:$poly{$(αs...),T}, Q <: $poly{$(αs...),T}} = q
65+
Base.convert(::Type{$poly{$(αs...)}}, q::Q) where {$(αs...),T, Q <: $poly{$(αs...),T}} = q
66+
Base.promote(p::P, q::Q) where {$(αs...),T, P <:$poly{$(αs...),T}, Q <: $poly{$(αs...),T}} = p,q
67+
Base.promote_rule(::Type{<:$poly{$(αs...),T}}, ::Type{<:$poly{$(αs...),S}}) where {$(αs...),T,S} =
68+
$poly{$(αs...),promote_type(T, S)}
69+
Base.promote_rule(::Type{<:$poly{$(αs...),T}}, ::Type{S}) where {$(αs...),T,S<:Number} =
70+
$poly{$(αs...),promote_type(T,S)}
71+
72+
function $poly{$(αs...),T}(x::AbstractVector{S}, var::SymbolLike = :x) where {$(αs...),T,S}
73+
$poly{$(αs...),T}(T.(x), Symbol(var))
74+
end
75+
$poly{$(αs...)}(coeffs::AbstractVector{T}, var::SymbolLike=:x) where {$(αs...),T} =
76+
$poly{$(αs...),T}(coeffs, Symbol(var))
77+
$poly{$(αs...),T}(n::Number, var::SymbolLike = :x) where {$(αs...),T} = n*one($poly{$(αs...),T}, Symbol(var))
78+
$poly{$(αs...)}(n::Number, var::SymbolLike = :x) where {$(αs...)} = n*one($poly{$(αs...)}, Symbol(var))
79+
$poly{$(αs...),T}(var::SymbolLike=:x) where {$(αs...), T} = variable($poly{$(αs...),T}, Symbol(var))
80+
$poly{$(αs...)}(var::SymbolLike=:x) where {$(αs...)} = variable($poly{$(αs...)}, Symbol(var))
81+
end
82+
end
83+
84+
85+
# deprecated. If desired, replace with @registerN type parameters... macro
6086
# Macros to register POLY{α, T} and POLY{α, β, T}
6187
macro register1(name)
88+
@warn "@register1 is deprecated use @registerN"
6289
poly = esc(name)
6390
quote
6491
Base.convert(::Type{P}, p::P) where {P<:$poly} = p
@@ -82,6 +109,7 @@ end
82109

83110
# Macro to register POLY{α, β, T}
84111
macro register2(name)
112+
@warn "@register2 is deprecated use @registerN"
85113
poly = esc(name)
86114
quote
87115
Base.convert(::Type{P}, p::P) where {P<:$poly} = p

src/common.jl

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,16 @@ fit(P::Type{<:AbstractPolynomial},
9090
y,
9191
deg::Integer = length(x) - 1;
9292
weights = nothing,
93-
var = :x,) = fit(P, promote(collect(x), collect(y))..., deg; weights = weights, var = var)
94-
93+
var = :x,) = fit'(P, promote(collect(x), collect(y))..., deg; weights = weights, var = var)
94+
95+
# avoid issue 214
96+
fit′(P::Type{<:AbstractPolynomial}, x, y, args...;kwargs...) = throw(MethodError("x and y do not produce abstract vectors"))
97+
fit′(P::Type{<:AbstractPolynomial},
98+
x::AbstractVector{T},
99+
y::AbstractVector{T},
100+
args...; kwargs...) where {T} = fit(P,x,y,args...; kwargs...)
101+
102+
95103
fit(x::AbstractVector,
96104
y::AbstractVector,
97105
deg::Integer = length(x) - 1;
@@ -249,7 +257,8 @@ LinearAlgebra.norm(q::AbstractPolynomial, p::Real = 2) = norm(coeffs(q), p)
249257
250258
Returns the complex conjugate of the polynomial
251259
"""
252-
LinearAlgebra.conj(p::P) where {P <: AbstractPolynomial} = P(conj(coeffs(p)))
260+
LinearAlgebra.conj(p::P) where {P <: AbstractPolynomial} = (P)(conj(coeffs(p)), p.var)
261+
LinearAlgebra.adjoint(p::P) where {P <: AbstractPolynomial} = (P)(adjoint.(coeffs(p)), p.var)
253262
LinearAlgebra.transpose(p::AbstractPolynomial) = p
254263
LinearAlgebra.transpose!(p::AbstractPolynomial) = p
255264

test/StandardBasis.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,9 @@ end
286286
yy = Real[15.7696, 21.4851, 28.2463]
287287
fit(P, xx, yy, 2)
288288

289+
# issue #214 -- should error
290+
@test_throws MethodError fit(Polynomial, rand(2,2), rand(2,2))
291+
289292
end
290293
end
291294

@@ -574,6 +577,8 @@ end
574577
@test coeffs(p2) ==ᵗ⁰ [1 + 1im, 2 + 3im]
575578
@test transpose(p) == p
576579
P != ImmutablePolynomial && @test transpose!(p) == p
580+
@test adjoint(Polynomial(im)) == Polynomial(-im) # issue 215
581+
@test conj(Polynomial(im)) == Polynomial(-im) # issue 215
577582

578583
@test norm(P([1., 2.])) == norm([1., 2.])
579584
@test norm(P([1., 2.]), 1) == norm([1., 2.], 1)

0 commit comments

Comments
 (0)