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