@@ -90,19 +90,32 @@ function MP.monomials(v::WithVariables)
90
90
return MP. monomials (v. inner)
91
91
end
92
92
93
-
94
- _cat (a:: Vector , b:: Vector ) = vcat (a, b)
95
- _cat (a:: Vector , :: Tuple{} ) = copy (a)
96
- _cat (a:: Tuple , b:: Tuple ) = [a... , b... ]
97
- _cat (a:: Tuple , :: Tuple{} ) = [a... ]
93
+ _merge_sorted (a:: Vector , :: Tuple{} ) = a
94
+ function _merge_sorted (a:: Vector , b:: Vector )
95
+ vars = sort! (vcat (a, b), rev = true )
96
+ unique! (vars)
97
+ return vars
98
+ end
99
+ _merge_sorted (a:: Tuple{} , :: Tuple{} ) = a
100
+ _merge_sorted (a:: Tuple , :: Tuple{} ) = a
101
+ _merge_sorted (:: Tuple{} , b:: Tuple ) = b
102
+ function _merge_sorted (a:: Tuple , b:: Tuple )
103
+ v = first (a)
104
+ w = first (b)
105
+ if v == w
106
+ return (v, _merge_sorted (Base. tail (a), Base. tail (b))... )
107
+ elseif v > w
108
+ return (v, _merge_sorted (Base. tail (a), b)... )
109
+ else
110
+ return (w, _merge_sorted (a, Base. tail (b))... )
111
+ end
112
+ end
98
113
99
114
_vars (:: SemialgebraicSets.FullSpace ) = tuple ()
100
115
_vars (x) = MP. variables (x)
101
116
102
117
function with_variables (inner, outer)
103
- vars = sort! (_cat (_vars (inner), _vars (outer)), rev = true )
104
- unique! (vars)
105
- return WithVariables (inner, vars)
118
+ return WithVariables (inner, _merge_sorted (_vars (inner), _vars (outer)))
106
119
end
107
120
108
121
function preprocessed_domain (:: Putinar , domain:: BasicSemialgebraicSet , p)
0 commit comments