1- struct Variable{Name} <: AbstractVariable
1+ """
2+ Variable{Name,M} <: AbstractVariable
3+
4+ Variable of name `Name` and monomial order `M`.
5+ """
6+ struct Variable{Name,M} <: AbstractVariable
27end
38
4- MP. name(:: Type{Variable{N}} ) where {N} = N
9+ MP. name(:: Type{<: Variable{N}} ) where {N} = N
510MP. name(v:: Variable ) = name(typeof(v))
611MP. name_base_indices(v:: Variable ) = name_base_indices(typeof(v))
7- function MP. name_base_indices(v :: Type{Variable{N}} ) where N
12+ function MP. name_base_indices(:: Type{<: Variable{N}} ) where N
813 name = string(N)
914 splits = split(string(N), r" [\[ ,\] ]\s *" , keepempty= false )
1015 if length(splits) == 1
@@ -23,15 +28,15 @@ checksorted(x::Tuple{Any}, cmp) = true
2328checksorted(x:: Tuple{} , cmp) = true
2429checksorted(x:: Tuple , cmp) = cmp(x[1 ], x[2 ]) && checksorted(Base. tail(x), cmp)
2530
26- struct Monomial{V, N} <: AbstractMonomial
31+ struct Monomial{V, M, N} <: AbstractMonomial
2732 exponents:: NTuple{N, Int}
2833
29- function Monomial{V, N}(exponents:: NTuple{N, Int} = ntuple(_ -> 0 , Val{N}())) where {V, N}
34+ function Monomial{V, M, N}(exponents:: NTuple{N, Int} = ntuple(_ -> 0 , Val{N}())) where {V, M , N}
3035 @assert checksorted(V, > )
31- new{V, N}(exponents)
36+ new{V, M, N}(exponents)
3237 end
33- Monomial{V}(exponents:: NTuple{N, Integer} = ()) where {V, N} = Monomial{V, N}(exponents)
34- Monomial{V}(exponents:: AbstractVector{<:Integer} ) where {V} = Monomial{V}(NTuple{length(V), Int}(exponents))
38+ Monomial{V, M }(exponents:: NTuple{N, Integer} = ()) where {V, N} = Monomial{V, M , N}(exponents)
39+ Monomial{V, M }(exponents:: AbstractVector{<:Integer} ) where {V} = Monomial{V, M }(NTuple{length(V), Int}(exponents))
3540end
3641
3742Monomial(v:: Variable ) = monomial_type(v)((1 ,))
@@ -46,8 +51,8 @@ MP.monomial_type(v::Variable) = Monomial{(v,), 1}
4651
4752MP. exponents(m:: Monomial ) = m. exponents
4853MP. exponent(m:: Monomial , i:: Integer ) = m. exponents[i]
49- _exponent(v :: V , p1:: Tuple{V, Integer} , p2... ) where {V <: Variable } = p1[2 ]
50- _exponent(v:: Variable , p1 :: Tuple{Variable, Integer} , p2... ) = _exponent(v, p2... )
54+ _exponent(:: V , p1:: Tuple{V, Integer} , p2... ) where {V <: Variable } = p1[2 ]
55+ _exponent(v:: Variable , :: Tuple{Variable, Integer} , p2... ) = _exponent(v, p2... )
5156_exponent(v:: Variable ) = 0
5257MP. degree(m:: Monomial , v:: Variable ) = _exponent(v, powers(m). .. )
5358
0 commit comments