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
2
7
end
3
8
4
- MP. name (:: Type{Variable{N}} ) where {N} = N
9
+ MP. name (:: Type{<: Variable{N}} ) where {N} = N
5
10
MP. name (v:: Variable ) = name (typeof (v))
6
11
MP. 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
8
13
name = string (N)
9
14
splits = split (string (N), r" [\[ ,\] ]\s *" , keepempty= false )
10
15
if length (splits) == 1
@@ -23,15 +28,15 @@ checksorted(x::Tuple{Any}, cmp) = true
23
28
checksorted (x:: Tuple{} , cmp) = true
24
29
checksorted (x:: Tuple , cmp) = cmp (x[1 ], x[2 ]) && checksorted (Base. tail (x), cmp)
25
30
26
- struct Monomial{V, N} <: AbstractMonomial
31
+ struct Monomial{V, M, N} <: AbstractMonomial
27
32
exponents:: NTuple{N, Int}
28
33
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}
30
35
@assert checksorted (V, > )
31
- new {V, N} (exponents)
36
+ new {V, M, N} (exponents)
32
37
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))
35
40
end
36
41
37
42
Monomial (v:: Variable ) = monomial_type (v)((1 ,))
@@ -46,8 +51,8 @@ MP.monomial_type(v::Variable) = Monomial{(v,), 1}
46
51
47
52
MP. exponents (m:: Monomial ) = m. exponents
48
53
MP. 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... )
51
56
_exponent (v:: Variable ) = 0
52
57
MP. degree (m:: Monomial , v:: Variable ) = _exponent (v, powers (m)... )
53
58
0 commit comments