@@ -53,22 +53,36 @@ function _operate_exponents_to!(output::Vector{Int}, op::F, z1::Vector{Int}, z2:
53
53
end
54
54
return
55
55
end
56
+ function _operate_exponents_to! (output:: Vector{Vector{Int}} , op:: F , z1:: Vector{Vector{Int}} , z2:: Vector{Int} , maps) where {F<: Function }
57
+ for i in eachindex (output)
58
+ _operate_exponents_to! (output[i], op, z1[i], z2, maps)
59
+ end
60
+ return
61
+ end
56
62
# Not used yet
57
63
# function _operate_exponents!(op::F, Z::Vector{Vector{Int}}, z2::Vector{Int}, args::Vararg{Any,N}) where {F<:Function,N}
58
64
# return Vector{Int}[_operate_exponents!(op, z, z2, args...) for z in Z]
59
65
# end
66
+ function _resize! (output:: Vector , n)
67
+ resize! (output, n)
68
+ end
69
+ function _resize! (output:: Vector{<:Vector} , n)
70
+ for out in output
71
+ _resize! (out, n)
72
+ end
73
+ end
60
74
function _multdivmono! (output, output_variables:: Vector{PolyVar{true}} ,
61
75
v:: Vector{PolyVar{true}} , x:: Monomial{true} , op, z)
62
76
if v == x. vars
63
77
if output_variables != v
64
78
resize! (output_variables, length (v))
65
79
copyto! (output_variables, v)
66
- resize ! (output, length (output_variables))
80
+ _resize ! (output, length (output_variables))
67
81
end
68
82
_operate_exponents_to! (output, op, z, x. z)
69
83
else
70
84
maps = mergevars_to! (output_variables, [v, x. vars])
71
- resize ! (output, length (output_variables))
85
+ _resize ! (output, length (output_variables))
72
86
_operate_exponents_to! (output, op, z, x. z, maps)
73
87
end
74
88
return
@@ -135,13 +149,23 @@ function MP.mapexponents(f::Function, x::Monomial{true}, y::Monomial{true})
135
149
w, z = multdivmono (x. vars, y, f, x. z)
136
150
return Monomial {true} (w, z)
137
151
end
138
- function Base.:( * )( x:: Monomial {true} , y:: MonomialVector {true} )
139
- w, Z = multdivmono (y . vars, x, + , y . Z)
152
+ function MP . mapexponents (f :: Function , x:: MonomialVector {true} , y:: Monomial {true} )
153
+ w, Z = multdivmono (x . vars, y, f, x . Z)
140
154
return MonomialVector {true} (w, Z)
141
155
end
142
- function MA . operate! ( :: typeof ( * ) , x:: MonomialVector{true} , y:: Monomial{true} )
143
- _multdivmono! (x. Z, x. vars, copy (x. vars), y, + , copy (x. Z))
156
+ function MP . mapexponents! (f :: Function , x:: MonomialVector{true} , y:: Monomial{true} )
157
+ _multdivmono! (x. Z, x. vars, copy (x. vars), y, f , copy . (x. Z))
144
158
return x
145
159
end
146
- Base.:(* )(y:: MonomialVector{true} , x:: Monomial{true} ) = x * y
160
+ function MP. mapexponents (f:: Function , x:: MonomialVector{true} , y:: PolyVar{true} )
161
+ return MP. mapexponents (f, x, MP. monomial (y))
162
+ end
163
+ function MP. mapexponents! (f:: Function , x:: MonomialVector{true} , y:: PolyVar{true} )
164
+ return MP. mapexponents! (f, x, MP. monomial (y))
165
+ end
166
+ function MA. operate! (:: typeof (* ), x:: MonomialVector{true} , y:: DMonomialLike{true} )
167
+ return MP. mapexponents! (+ , x, y)
168
+ end
169
+ Base.:(* )(y:: MonomialVector{true} , x:: DMonomialLike{true} ) = MP. mapexponents (+ , y, x)
170
+ Base.:(* )(x:: DMonomialLike{true} , y:: MonomialVector{true} ) = y * x
147
171
Base.:(* )(x:: Monomial{true} , y:: PolyVar{true} ) = y * x
0 commit comments