@@ -46,12 +46,6 @@ class Maximize(Builtin):
4646
4747 >> Maximize[-2 x^2 - 3 x + 5, x]
4848 = {{49 / 8, {x -> -3 / 4}}}
49-
50- #>> Maximize[1 - (x y - 3)^2, {x, y}]
51- = {{1, {x -> 3, y -> 1}}}
52-
53- #>> Maximize[{x - 2 y, x^2 + y^2 <= 1}, {x, y}]
54- = {{Sqrt[5], {x -> Sqrt[5] / 5, y -> -2 Sqrt[5] / 5}}}
5549 """
5650
5751 attributes = A_PROTECTED | A_READ_PROTECTED
@@ -79,11 +73,12 @@ def eval_constraints(self, f, vars, evaluation: Evaluation):
7973 "Maximize[f_List, vars_]"
8074
8175 constraints = [function for function in f .elements ]
82- constraints [0 ] = from_sympy (constraints [0 ].to_sympy () * IntegerM1 )
83-
84- dual_solutions = (
85- Expression ( SymbolMinimize , constraints , vars ). evaluate ( evaluation ). elements
76+ constraints [0 ] = from_sympy (- ( constraints [0 ].to_sympy ()) )
77+ constraints = ListExpression ( * constraints )
78+ minimize_expr = Expression ( SymbolMinimize , constraints , vars ). evaluate (
79+ evaluation
8680 )
81+ dual_solutions = minimize_expr .evaluate (evaluation ).elements
8782
8883 solutions = []
8984 for dual_solution in dual_solutions :
@@ -107,20 +102,13 @@ class Minimize(Builtin):
107102
108103 >> Minimize[2 x^2 - 3 x + 5, x]
109104 = {{31 / 8, {x -> 3 / 4}}}
110-
111- #>> Minimize[(x y - 3)^2 + 1, {x, y}]
112- = {{1, {x -> 3, y -> 1}}}
113-
114- #>> Minimize[{x - 2 y, x^2 + y^2 <= 1}, {x, y}]
115- = {{-Sqrt[5], {x -> -Sqrt[5] / 5, y -> 2 Sqrt[5] / 5}}}
116105 """
117106
118107 attributes = A_PROTECTED | A_READ_PROTECTED
119108 summary_text = "compute the minimum of a function"
120109
121110 def eval_onevariable (self , f , x , evaluation : Evaluation ):
122111 "Minimize[f_?NotListQ, x_?NotListQ]"
123-
124112 sympy_x = x .to_sympy ()
125113 sympy_f = f .to_sympy ()
126114
@@ -129,7 +117,6 @@ def eval_onevariable(self, f, x, evaluation: Evaluation):
129117 candidates = sympy .solve (derivative , sympy_x , real = True , dict = True )
130118
131119 minimum_list = []
132-
133120 for candidate in candidates :
134121 value = second_derivative .subs (candidate )
135122 if value .is_real and value > 0 :
@@ -190,7 +177,6 @@ def eval_multiplevariable(self, f, vars, evaluation: Evaluation):
190177 candidates .append (candidate )
191178
192179 minimum_list = []
193-
194180 for candidate in candidates :
195181 eigenvals = hessian .subs (candidate ).eigenvals ()
196182
@@ -214,14 +200,16 @@ def eval_multiplevariable(self, f, vars, evaluation: Evaluation):
214200 * (
215201 ListExpression (
216202 from_sympy (sympy_f .subs (minimum ).simplify ()),
217- [
218- Expression (
219- SymbolRule ,
220- from_sympy (list (minimum .keys ())[i ]),
221- from_sympy (list (minimum .values ())[i ]),
203+ ListExpression (
204+ * (
205+ Expression (
206+ SymbolRule ,
207+ from_sympy (list (minimum .keys ())[i ]),
208+ from_sympy (list (minimum .values ())[i ]),
209+ )
210+ for i in range (len (vars_sympy ))
222211 )
223- for i in range (len (vars_sympy ))
224- ],
212+ ),
225213 )
226214 for minimum in minimum_list
227215 )
@@ -407,14 +395,16 @@ def eval_constraints(self, f, vars, evaluation: Evaluation):
407395 * (
408396 ListExpression (
409397 from_sympy (objective_function .subs (minimum ).simplify ()),
410- [
411- Expression (
412- SymbolRule ,
413- from_sympy (list (minimum .keys ())[i ]),
414- from_sympy (list (minimum .values ())[i ]),
398+ ListExpression (
399+ * (
400+ Expression (
401+ SymbolRule ,
402+ from_sympy (list (minimum .keys ())[i ]),
403+ from_sympy (list (minimum .values ())[i ]),
404+ )
405+ for i in range (len (vars_sympy ))
415406 )
416- for i in range (len (vars_sympy ))
417- ],
407+ ),
418408 )
419409 for minimum in minimum_list
420410 )
0 commit comments