@@ -57,8 +57,35 @@ macro register(name)
5757end
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}
6187macro 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
82109
83110# Macro to register POLY{α, β, T}
84111macro 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
0 commit comments