
    bi9                     r    d Z ddlZddlZddlmZ ddlZddl	m
Z ddlmZ ddlmZ ddlmZ  G d de      Zy)a.  
Copyright 2023 CVXPY Developers

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
    N)Constant)Variable)BaseTestc                       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
dd
ZddZddZddZddZddZddZy)TestExpressionMethodsz" Unit tests for the atoms module. Nc                     t        d      | _        t        dd      | _        t        dd      | _        t        dd      | _        t        dd      | _        t        d	d
      | _        y )Na)name   xyr   r   AB   r   C)r   r	   r   r   r   r   r   )selfs    ^/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/cvxpy/tests/test_expression_methods.pysetUpzTestExpressionMethods.setUp    sT    s#!#&!#&&s+&s+&s+    c           
         t        t        j                  g dg dg dg            }t        t        j                  g dg dg dg            }dD ]{  }t        t        |      }t        ||      } ||      j
                   |       j
                  k(  sJ t        j                   ||      j                   |       j                        r{J  dD ]{  }t        t        |      }t        ||      } ||      j
                   |       j
                  k(  sJ t        j                   ||      j                   |       j                        r{J  dD ]y  }d	D ]r  } t        t        |      ||      } t        ||      |      }|j
                  |j
                  k(  sJ t        j                  |j                  |j                        rrJ  { d
D ]  }d	D ]|  }dD ]u  } t        t        |      |||      } t        ||      ||      }|j
                  |j
                  k(  sJ t        j                  |j                  |j                        ruJ  ~  dD ]  }d	D ]  }dD ]  }dD ]x  } t        t        |      ||||      } t        ||      |||      }|j
                  |j
                  k(  sJ t        j                  |j                  |j                        rxJ     dD ]{  }dD ]t  } t        t        |      ||      } t        ||      |      }|j
                  |j
                  k(  sJ t        j                  |j                  |j                        rtJ  } y )N)g      ?g      @g      @)       @y            @      @)     X@y             "333333@)r   g      r   )r   g       r   )conj)r   tracecumsummaxminmeanptpprodsumstdvar)r   )Nr      )r    r"   r!   r$   r#   r%   TFkeepdims)r&   r   r(   r   ddof)r+   r.   )r'   )r   nparraygetattrcpshapeallclosevalue)	r   	complex_XXmethodfn	method_fnaxisr+   r.   s	            r   test_all_expressionsz*TestExpressionMethods.test_all_expressions*   sP   RXX|5EGY&Z[\	RXX|]OLMN
 	GF V$B	62Ii=&&)+*;*;;;;;;r)}22IK4E4EFFF	G
 	?F V$B6*Ia5;;)+"3"3333;;r!u{{IK,=,=>>>%	?,
 	>F % >(WR(D1.GAv.t4	xx9??222{{288Y__===>	>
 	BF % B - BH,V,Qh?B 26 24( KI88y666;;rxxAAABB	B$
 
	FF % F - FH ) F0WR0D(N$6GAv$6thUY$Z	!xx9??:::!{{288Y__EEEFFF
	F
 	>F " >(WR(6.GAv.D9	xx9??222{{288Y__===>	>r   c                 
   | j                   j                  dd      }| j                  |j                  t        j
                         | j                  |j                  t        j                         | j                  |j                  d       |j                  dd      }| j                  |j                  d       t        j                  | j                        j                  dd      }| j                  |j                  t        j                         | j                  |j                  t        j                         | j                  |j                  d       | j                  t              5 }| j                   j                  dd       ddd       | j                  t#        j$                        d       t'        j(                  d	      }t'        j                  |d
d      }t+        |      j                  d
d      }| j-                  ||j.                         t        j0                  d
      }t        j2                  t        j4                  d      ||k(  g      }|j7                  t        j8                         | j-                  ||j.                         t'        j                  |d	d      }|j                  d	d      }	| j-                  ||	j.                         t        j0                  d	      }
t        j2                  t        j4                  d      |
|	k(  g      }|j7                  t        j8                         | j-                  ||
j.                         t'        j:                  g dg dg dg dg      }|j                  dd      }t        j0                  |j                        }|j                  dd      }t        j2                  t        j4                  d      ||k(  g      }|j7                  t        j8                         | j-                  ||j.                         | j-                  ||j.                         t'        j:                  g dg dg dg dg      }|j                  dd      }t        j0                  |j                        }|j                  dd      }t        j2                  t        j4                  d      ||k(  g      }|j7                  t        j8                         | j-                  ||j.                         | j-                  ||j.                         y# 1 sw Y   xY w)z Test the reshape class.
        )   r(   Forderr   )r(   r   )   r>   Nz"Invalid reshape dimensions (5, 4).
   )rB   r   r   r   solverr,   )r   r>   rB   )         )	   rC      r   rF   )r   reshapeassertEqualsignsUNKNOWN	curvatureAFFINEr3   r2   squarer   NONNEGCONVEXassertRaises	Exceptionr   str	exceptionr/   aranger   assertItemsAlmostEqualr5   r   ProblemMinimizesolveSCSr0   )r   exprcmr	   A_npA_cpr7   proba_npa_cpr   b
b_reshaped
X_reshapeds                 r   test_reshapez"TestExpressionMethods.test_reshape   s    vv~~fC~0AII.2V,||F#|.V,yy ((s(;AHH-2V,y) 	.RFFNN6N-	.R\\*=	? IIbMzz!V3/{""6"5##D$**5KKzz"++a.19+6

"&&
!##D!''2zz$#.||Bc|*##D$**5KKOzz"++a.19+6

"&&
!##D!''2 HH	
  YYvSY1
KK YYvSY1
zz"++a.:+C*DE

"&&
!##J
0@0@A##Aqww/ HH	
  YYvSY1
KK YYvSY1
zz"++a.:+C*DE

"&&
!##J
0@0@A##Aqww/m	. 	.s   2T<<Uc                    t        j                  d      }t        j                  d      }g d}g d}t	        ||      D ]f  \  }}|j                  |d      }| j                  |j                  |       t        j
                  ||      }| j                  |j                  |       h t        j                  t        d      5  |j                  dd       d	d	d	       t        j                  t        d
      5  |j                  dd       d	d	d	       t        j                  t        d      5  |j                  dd       d	d	d	       t        j                  t        d      5  |j                  dd       d	d	d	       t        j                  g dg dg      }	t        |	      j                  dd      }
t        j                  |
j                  |	j                  dd            sJ t        |	      j                  dd      }
t        j                  |
j                  |	j                  dd            sJ y	# 1 sw Y   ixY w# 1 sw Y   ?xY w# 1 sw Y   xY w# 1 sw Y   xY w)z>
        Test the reshape class with -1 in the shape.
        r   r   ))r(   )r(   rm   )rm   r   rm   )rm   ))rF   r(   )r(   rF   r   rF   rn   r?   r@   zCannot reshape expression)match)rH   rm   NzOnly one)rm   rm   zInvalid reshape dimensions)rm   r   z'Specified dimension must be nonnegative)rm   )r(   r   r   )r>   rB   rF   rm   r   )r2   r   r/   onesziprL   rM   r3   pytestraises
ValueErrorAssertionErrorr0   r   r4   r5   )r   r`   
numpy_exprshapesexpected_shapesr3   expected_shapeexpr_reshapednumpy_expr_reshapedr   
A_reshapeds              r   test_reshape_negative_onez/TestExpressionMethods.test_reshape_negative_one   s   
 {{6"WWV_
7>%(%A 	H!E> LLcL:M]00.A"$**Z"?066G	H ]]:-HI 	-LLL,	- ]]>< 	.LLL-	. ]]:-IJ 	-LLL,	- ]]>1Z[ 	.LLL-	. HHi+,a[((3(7
{{:++QYYrY-EFFFa[((3(7
{{:++QYYrY-EFFF!	- 	-	. 	.	- 	-	. 	.s0   H>:I1I(I%>III"%I.c                 6   t        j                  d      }t        j                  t              5  |j                  d       d d d        t        j                  t              5  |j                          d d d        t        j                  t              5  t        j                  |       d d d        t        j                  t              5  t        j
                  |d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ZxY w# 1 sw Y   y xY w)N)r>   r   rK   )r2   r   rs   warnsFutureWarningrL   flattenvec)r   r7   s     r   test_missing_order_warningz0TestExpressionMethods.test_missing_order_warning   s    KK\\-( 	IIf	\\-( 	IIK	\\-( 	FF1I	\\-( 	"JJq&!	" 	"	 		 		 		" 	"s/   C+"C7DD+C47D DDc                    | j                  t               j                         j                  t        j
                         | j                  t        d      j                  dd      j                  d       | j                  t        d      j                  dd      j                  d       | j                  t        d      j                  d	      j                  d
       | j                  t              5 }| j                  j                  d	       ddd       | j                  t        j                        d       y# 1 sw Y   /xY w)z
        Test max.
        r   r   Tr;   r+   )r(   rl   r(   r   r(   r;   r   r>   N0axis 4 is out of bounds for array of dimension 1)rM   r   r    rN   rO   rP   r3   rV   rW   r   rX   rY   r   ra   s     r   test_maxzTestExpressionMethods.test_max   s    
 	)..		: 	!a$?EEtL&)--1t-DJJFS&)--1-5;;TB y) 	RFFJJAJ	R\\*,^_	 	s   7EEc                    | j                  t               j                         j                  t        j
                         | j                  t        d      j                  d      j                  t                      | j                  t        d      j                  d      j                  d       | j                  t        d      j                  d      j                  d       | j                  t              5 }| j                  j                  d       d	d	d	       | j                  t        j                        d
       y	# 1 sw Y   /xY w)z
        Test min.
        r   r   r   rl   r   r(   r   r>   Nr   )rM   r   r!   rN   rO   rP   r3   tuplerV   rW   r   rX   rY   r   s     r   test_minzTestExpressionMethods.test_min  s    
 	)..		: 	!a066@&)--1-5;;TB&)--1-5;;TB y) 	RFFJJAJ	R\\*,^_	 	s   =EEc           
         | j                  t        ddg      j                         j                  t        j
                         | j                  t        ddg      j                         j                  t        j                         | j                  t        d      j                         j                  t        j
                         | j                  t        d      j                         j                  t                      | j                  t        d      j                         j                  t        j                         | j                  t        d      j                  d      j                  d       t        j                  ddgg      }| j                  t        j                  |t        j                  t        d            z        j                  t        j
                         | j                  t        d      j                  d	      j                  t                      | j                  t        d
      j                  dd      j                  d       | j                  t        d
      j                  dd      j                  d       | j                  t        d
      j                  d	      j                  d       | j!                  t"              5 }t        j                  | j$                  d	       ddd       | j                  t'        j(                        d       t+        j,                  d      }| j                  t        |      j                         j.                  d       t+        j,                  d      }| j1                  t        |      j                  d	      j.                  g d       y# 1 sw Y   xY w)z$
        Test the sum atom.
        r(   rm   r   r   r(   Tr*   )r(   r(   r   r   rl   r   r   Fr   r   r>   Nr   r   )r(   r(   r(   )rM   r   r%   rN   rO   rP   rQ   CONSTANTr   r3   r   rR   r/   r0   r2   rS   rV   rW   r   rX   rY   sp	eye_arrayr5   r[   )r   matra   r   s       r   test_sumzTestExpressionMethods.test_sum  s    	1b'*..055qyyA1b'*..0::AJJG!*//;!*00%':!*44ahh?&)--t-<BBFKhhBy!bii&< <=GGS 	!a066@&)--1t-DJJFS&)--1u-EKKTR&)--1-5;;TB y) 	#RFF466"	#R\\*J	L LLO!*00!4LLO##HQKOOO$;$A$A9M	# 	#s    "OOc                    | j                   j                         }| j                  |j                  t        j
                         | j                  |j                  t        j                         | j                  |j                  t                      | j                  t              5 }| j                  j                          ddd       | j                  t        j                        d       y# 1 sw Y   /xY w)zTest the trace atom.
        Nz-Argument to trace must be a 2-d square array.)r   r   rM   rN   rO   rP   rQ   rR   r3   r   rV   rW   r   rX   rY   )r   r`   ra   s      r   
test_tracez TestExpressionMethods.test_trace=  s     vv||~AII.2UW-y) 	RFFLLN	R\\*H	J	 	s   (C11C:c                     t        j                  dd      }t        j                  dd      }|j                         }|j                         }|j                         sJ |j	                         sJ y)z/Test sign of trace for psd/nsd inputs.
        r   T)PSD)NSDN)r2   r   r   	is_nonneg	is_nonpos)r   X_psdX_nsd	psd_trace	nsd_traces        r   test_trace_sign_psdz)TestExpressionMethods.test_trace_sign_psdJ  s^     F-F-KKM	KKM	""$$$""$$$r   c                 \   t        t        j                  g dg dg            }|j                         }|j	                         sJ |j
                  dk(  sJ t        j                  |j                  d      sJ |j                  d      }|j	                         sJ |j
                  dk(  sJ t        j                  |j                  t        j                  g d            sJ |j                  d	      }|j	                         sJ |j
                  d
k(   t        j                  |j                  t        j                  ddg            sJ |j                  dd      }|j	                         sJ |j
                  dk(  sJ t        j                  |j                  t        j                  g dg            sJ |j                  d	d      }|j	                         sJ |j
                  dk(  sJ t        j                  |j                  t        j                  dgdgg            sJ y)zTest the ptp atom.
        )      $@g      $r   )      @        g       g      4@r   r   r   )r>   rC   g      @r(   r   g      @Tr*   r   r   N)	r   r/   r0   r#   r   r3   iscloser5   r4   )r   r	   r`   s      r   test_ptpzTestExpressionMethods.test_ptpV  s    RXX/@ABuuw~~zzRzz$**c***uu!u}~~zzT!!!{{4::rxx'=>>>uu!u}~~

d{{4::rxxc
';<<<uuQu&~~zzV###{{4::rxx'?@@@uuQu&~~zzV###{{4::rxx#'?@@@r   c                 >   t        j                  g dg dg      }t        |      }|j                         }|j	                         }|j                         }|j                         sJ |j                         sJ |j                         sJ t        j                  |j                         |j                        sJ t        j                  |j	                         |j                        sJ t        j                  |j                         |j                        sJ dD ]  }|j	                  |      }|j                  |      }t        j                  |j	                  |      |j                        sJ t        j                  |j                  |      |j                        rJ  dD ]  }dD ]  }|j                  ||      }|j                  ||      }|j                  |j                  ||      j                  k(  sJ |j                  |j                  ||      j                  k(  sJ t        j                  |j                  ||      |j                        sJ t        j                  |j                  ||      |j                        rJ   y)z'Test the mean, std, var atoms.
        )r   r   r   )r   r   g      ?)r   r(   r-   r)   r   N)r/   r0   r   r"   r'   r&   r   r   r5   r3   r4   )	r   re   r	   	expr_meanexpr_varexpr_stdr.   r;   r+   s	            r   
test_statsz TestExpressionMethods.test_statss  s$    xx-89TNFFH	557557""$$$!!###!!###zz$))+y777zz$((*hnn555zz$((*hnn555 	CDuu$u'Huu$u'H::dhhDh18>>BBB::dhhDh18>>BBB	C  	[D) [FFxF@	55dX5> $)))*Q*W*WWWW~~th)O)U)UUUU{{499$9#JIOO\\\{{4888#I8>>ZZZ[	[r   c                 x   t        j                  d      }t        j                  t        j                  |            }t        j                  ||j                         dk\  g      }|j                  t         j                         t        j                  |j                  t        j                  d            sJ yzTest conj.
        )r>   r(   rD   N)r2   r   r]   r%   r\   r   r^   r_   r/   r4   r5   rq   r   vobjrd   s       r   	test_conjzTestExpressionMethods.test_conj  sv     KKkk"&&)$zz#A/

"&&
!{{177BGGDM222r   c                 x   t        j                  d      }t        j                  t        j                  |            }t        j                  ||j                         dk\  g      }|j                  t         j                         t        j                  |j                  t        j                  d            sJ yr   )r2   r   r]   r%   r\   	conjugater^   r_   r/   r4   r5   rq   r   s       r   test_conjugatez$TestExpressionMethods.test_conjugate  sx     KKkk"&&)$zz# 234

"&&
!{{177BGGDM222r   )returnN)__name__
__module____qualname____doc__r   r<   rj   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sY    ,,W>tF0R!GF	"`"`"N@J
%A:#[J33r   r   )r   numpyr/   rs   scipy.sparsesparser   cvxpyr2   cvxpy.settingssettingsrO   cvxpy.expressions.constantsr   cvxpy.expressions.variabler   cvxpy.tests.base_testr   r   r   r   r   <module>r      s2   "      0 / *K3H K3r   