
    bi+                     B    d dl Z d dlZd dlmZ d dlmZ  G d de      Zy)    N)BaseTest)	scalarizec                   H    e Zd ZdZd
dZd
dZd
dZd
dZd
dZd
dZ	d
d	Z
y)ScalarizeTestz,
    Tests for the scalarize transform.
    Nc                    t        j                         | _        t        j                  t        j                  | j                              }t        j                  t        j                  | j                  dz
              }||g| _        y )N   )cpVariablexMinimizesquare
objectives)selfobj1obj2s      U/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/cvxpy/tests/test_scalarize.pysetUpzScalarizeTest.setUp   sT    {{299TVV,-{{299TVVAX./,    c                    ddg}t        j                  | j                  |      }t        j                  |      }|j                          | j                  | j                  j                  dd       ddg}t        j                  | j                  |      }t        j                  |      }|j                          | j                  | j                  j                  dd       ddg}t        j                  | j                  |      }t        j                  |      }|j                          | j                  | j                  j                  dd       y)z$
        Test weighted sum.
        r         ?   placesr   N)	r   weighted_sumr   r	   ProblemsolveassertItemsAlmostEqualr   valuer   weights
scalarizedprobs       r   test_weighted_sumzScalarizeTest.test_weighted_sum   s     a&++DOOWE
zz*%

##DFFLL#a#@a&++DOOWE
zz*%

##DFFLL!A#>a&++DOOWE
zz*%

##DFFLL!A#>r   c                    ddg}ddg}t        j                  | j                  ||      }t        j                  |      }|j                          | j                  | j                  j                  dd       ddg}ddg}t        j                  | j                  ||      }t        j                  |      }|j                          | j                  | j                  j                  dd       ddg}ddg}ddg}t        j                  | j                  |||d	      }t        j                  |      }|j                          | j                  | j                  j                  dd       d
dg}ddg}| j                  D cg c]%  }t        j                  |j                  d          ' }}t        j                  |||d	      }|j                  d   j                         sJ t        j                  |      }|j                          | j                  | j                  j                  dd       d
dg}ddg}ddg}| j                  D cg c]%  }t        j                  |j                  d          ' }}t        j                  ||||d	      }|j                  d   j                         sJ t        j                  |      }|j                          | j                  | j                  j                  dd       y c c}w c c}w )Nr   r   r   r   r   g      ?g-C6?gh㈵>)
off_targetg      п)r   targets_and_prioritiesr   r	   r   r   r   r   r   Maximizeargs
is_concave)r   targets
prioritiesr!   r"   limitsobjmax_objectivess           r   test_targets_and_prioritiesz)ScalarizeTest.test_targets_and_priorities*   s   a&V
55doozSZ[
zz*%

##DFFLL#a#@a&V
55doozSZ[
zz*%

##DFFLL!A#>Ta&Y
55doozSZ\bAEG
zz*%

##DFFLL#a#@q'V
?CO"++sxx{l3OO55njRYAEG
q!,,...zz*%

##DFFLL!A#>ea&Y
?CO"++sxx{l3OO55njRY[aAEG
q!,,...zz*%

##DFFLL#a#@# P Ps    *K>*Lc                 $   | j                   d   }t        j                  | j                   d   j                  d          }||g}ddg}ddg}t	        j
                  t        d      5  t        j                  |||       d d d        ddg}ddg}t        j                  ||||      }|j                  d   j                         sJ ddg}ddg}t        j                  ||||      }|j                  d   j                         sJ y # 1 sw Y   xY w)Nr   r   r&   z2Scalarized objective is neither convex nor concavematch)r   r	   r(   r)   pytestraises
ValueErrorr   r'   	is_convexr*   )r   obj_1obj_2r   r+   r,   r-   r!   s           r   test_mixed_convexityz"ScalarizeTest.test_mixed_convexityY   s   "T__Q/44Q778U^
b'V
]]:-ab 	N,,ZWM	N W
R55j*gW]^
q!++---!W
R55j*gW]^
q!,,...	N 	Ns   'DDc                    ddg}dg}t        j                  t        d      5  t        j                  | j
                  ||       d d d        ddg}dg}t        j                  t        d      5  t        j                  | j
                  ||       d d d        ddg}ddg}dg}t        j                  t        d      5  t        j                  | j
                  |||       d d d        ddg}d}t        j                  t        d      5  t        j                  | j
                  ||||       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   oxY w# 1 sw Y   y xY w)Nr   z#Number of objectives and prioritiesr2   z Number of objectives and targetszNumber of objectives and limitsr&   z+The off_target argument must be nonnegative)r4   r5   AssertionErrorr   r'   r   )r   r+   r,   r-   r%   s        r   &test_targets_and_priorities_exceptionsz4ScalarizeTest.test_targets_and_priorities_exceptionsn   sU   a& S
]]>1VW 	S,,T__j'R	S V
#]]>1ST 	S,,T__j'R	S V
a&]]>1RS 	[,,T__j'SYZ	[ Q
]]>1^_ 	9,,T__j'SY-79	9 	9!	S 	S
	S 	S	[ 	[
	9 	9s/   "D8/"E?#E$E8EEEE%c                    ddg}t        j                  | j                  |      }t        j                  |      }|j                          | j                  | j                  j                  dd       ddg}t        j                  | j                  |      }t        j                  |      }|j                          | j                  | j                  j                  dd       y )Nr      g?߾?r   r   gn4@?)	r   maxr   r	   r   r   r   r   r   r   s       r   test_maxzScalarizeTest.test_max   s    a&]]4??G<
zz*%

##DFFLL&#Ca&]]4??G<
zz*%

##DFFLL&#Cr   c                    ddg}t        j                  | j                  |      }t        j                  |      }|j                          | j                  | j                  j                  dd       ddg}t        j                  | j                  |      }t        j                  |      }|j                          | j                  | j                  j                  dd       y )Nr   r?   g|a2U?r   r   gK=U?)	r   log_sum_expr   r	   r   r   r   r   r   r   s       r   test_log_sum_expzScalarizeTest.test_log_sum_exp   s    a&**4??GD
zz*%

##DFFLL&#Ca&**4??GD
zz*%

##DFFLL&#Cr   )returnN)__name__
__module____qualname____doc__r   r#   r0   r:   r=   rA   rD    r   r   r   r      s.    '?,,A^/*94DDr   r   )r4   cvxpyr	   cvxpy.tests.base_testr   cvxpy.transformsr   r   rJ   r   r   <module>rN      s!      * &ZDH ZDr   