
    biO                     |    d Z ddlZddlZddlZddlmZ ddl	m
Z
  G d de
      Zedk(  r ej                          yy)a,  
Copyright 2013 Steven Diamond

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)BaseTestc                   X    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y)TestExamplesz$ Unit tests using example problems. Nc                 *   t        j                  ddg      }t        j                  ddg      }t        j                  ddg      }t        j                  ddg      }t        j                  d      }t        j                  d      }t        j                  dd      }t        j
                  |      }|j                  |z  t         j                  j                  |      |z  z   |d	   k  |j                  |z  t         j                  j                  |      |z  z   |d   k  |j                  |z  t         j                  j                  |      |z  z   |d   k  |j                  |z  t         j                  j                  |      |z  z   |d
   k  g}	t        j                  ||	      }
|
j                  t        j                        }| j                  |d       | j                  |j                  |       | j                  |j                  d	d	g       y )N         r)namex_cr      solvergx'?)nparrayonescvxVariableMaximizeTlinalgnormProblemsolveSCSassertAlmostEqualvalueassertItemsAlmostEqual)selfa1a2a3a4br   r   objconstraintspresults               T/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/cvxpy/tests/test_examples.pytest_chebyshev_centerz"TestExamples.test_chebyshev_center   s    XXq!fXXq"gXXr1gXXr2hGGAJ LLc"ll15)ll1oDD3J+A--15DD3J+A--15DD3J+A--15DD3J+A--15	
 KK[)(vx0qww/##CII1v6    c                    d}d}t         j                  j                  d       t         j                  j                  ||      }t        j                  |      }|j
                  j                  |      ||z  z   }t        |       t         j                  j                  ||      }|j
                  j                  |      }t         j                  j                  ||      }|j
                  j                  |      }t         j                  j                  ||      }|j
                  j                  |      }t         j                  j                  |d      }t         j                  j                  |d      }	t         j                  j                  |d      }
t         j                  j                  |d      }t         j                  j                  dd      }t         j                  j                  dd      }t         j                  j                  dd      }t         j                  j                  dd      }t        j                         }t        j                  |      }t        j                  dt        j                  ||      z  |j
                  |z  z   |z   |z         }dt        j                  ||      z  |	j
                  |z  z   |z   |k  dt        j                  ||      z  |
j
                  |z  z   |z   |k  dt        j                  ||      z  |j
                  |z  z   |z   |k  g}t        j                  ||      }|j                  t        j                         t        |j                         |d   j                   }|d   j                   }|d   j                   }t        t#        |             |||z  z   ||z  z   ||z  z   }|||	z  z   ||
z  z   ||z  z   }|||z  z   ||z  z   ||z  z   }d	|j
                  j                  |      j                  |      z  |z   }t        |j$                         | j'                  t)        j$                  |      d
       y )N   ư>
   r   g      ?r   r   r   g      )r   r   )r   randomseedrandneyer   dotprintr   r   Minimize	quad_formr   r   r   r   
dual_valuetypeshapeassertEqualintf)r!   nepsP0r5   P1P2P3q0q1q2q3r0r1r2r3slackx	objectiver(   r)   lam1lam2lam3P_lamq_lamr_lamdual_results                               r+   test_numpy_scalarszTestExamples.test_numpy_scalars<   sT   
		rYY__Q"ffQiTTXXb\C#I%b	YY__Q"TTXXb\YY__Q"TTXXb\YY__Q"TTXXb\YY__Q"YY__Q"YY__Q"YY__Q"YY__Q"YY__Q"YY__Q"YY__Q"LLOLLS]]1b%9!9BDD1H!Dr!IE!QR	3==B//"$$(:R?5H3==B//"$$(:R?5H3==B//"$$(:R?5H KK	;/	sww
 	agg1~((1~((1~((d4jT"WtBw&b0T"WtBw&b0T"WtBw&b0577;;u-11%885@k K0&9r-   c           
         dd l }|j                  j                  d       d}d}|j                  j                  ||      }|j                  j                  |      }t	        j
                  |      t	        j                  t	        j                  |z  |z
              }dk  dk  g}t	        j                  ||      j                  t        j                         t        j                         t        |d   j                         t	        j
                         }t	        j
                  d      t	        j
                  d      }t	        j                  d	      }t	        j                  d       t	        j                  dd
      }	|j                  d       |	_        | j!                  t"              5 }
|j                  d      |	_        d d d        | j%                  t'        
j(                        d       t	        j
                         }t	        j
                  d      dz  }||z
  }t	        j*                  |      t	        j,                  d      z   }dd l }d}d}|j                  j                  ||      }|j                  j                  |      }t	        j                  d	      t	        j
                  |      t	        j                  t	        j                  |z  |z
        t	        j,                  d      z  z         }t	        j                  |      fd} |j.                  ddd      }|D cg c]
  } ||       c} d}|j                  j                  d|      }|j                  j                  ||      }|j0                  j3                  |      }t	        j                  d	      d_        t	        j
                  |      |z  }t	        j4                  |      }t	        j6                  ||z  z
        }t	        j                  |t	        j*                        dk(  g      j                  t        j                         t        |j                         t        |j                         d}d}d}g }t9        |      D ]&  }|d|j                  j;                  dd|      fgz  }( t9        |      D ]&  }|d|j                  j;                  dd|      fgz  }( t	        j                  d	      d_        t	        j
                  |      }t	        j
                         }|D cg c]0  \  }}t	        j<                  d||j0                  |z  |z
  z  z
        2 }}}t	        j                  t	        j,                  |d      t+        |      z  z         }t	        j                  |      j                  t        j                         d}|D ]-  \  }}||j0                  |z  |z
  j                  z  dk  s)|dz  }/ t        d|z         t        |j                         t        |j                         y # 1 sw Y   xY wc c}w c c}}w )Nr   r         r      r      Tnonnegnonposz$Parameter value must be nonpositive.r   r1   c                 j    | _         j                  t        j                         j                   S )Nr   )r   r   r   r   )gamma_valuegammar)   rN   s    r+   get_xz0TestExamples.test_readme_examples.<locals>.get_x   s%    %EKGG377G#77Nr-   r	   )num2   (         ?g       @)locscalesizeg      g?z%s misclassifications)numpyr2   r3   r4   r   r   r8   sum_squaresr   r   r   r7   r   r:   	Parameterr   assertRaises	Exceptionr=   str	exceptionsumr   logspacer   r6   r9   r   rangenormalpos)r!   rm   mr?   Ar&   rO   r(   aGcmexprr   re   gammasr   musigmaexpected_returnriskNMdatailabelsamplerM   errorsrd   r)   rN   s                               @@@r+   test_readme_examplesz!TestExamples.test_readme_examplesv   s6   !LLq!$LLq! LLOLLQ!;<	AvqAv&KK	;/ 	
swwagg 	k!n''(
 LLN LLO LL 
 MM& 	a MM&. ::f%% y) 	)Rjj(AG	)R\\*,RS LLNLLO saxwwt}sxx1~- 	 IIOOAq!IIOOAT* LLOLLQ!;eCHHQPQN>R!RS	KK	"	
 R*#)*%u* YY__Q"		1%E"T*LLO q&}}Q&LL5:!=>	KK	CGGAJ!O#45	sww 	o##$ 	djj q 	HAa))c1)EFGGD	Hq 	JAb"))**t3Q*GHIID	J T*LLOLLNNRS?E6UFHHqL1$4556SSLL!Q%E
2B!BC	KK	" 	
sww ! 	ME6fhhlQ&---1!	 	%./aggaggO	) 	)J 	+f Ts   :YY$5Y)Y!c                    t        j                  d      }t        j                  |d   t        j                  |d      z         }|dk\  g}t        j                  ||      }|j                  t         j                         t        d|j                         | j                  |j                  d       t         j                  t        j                         v rR|j                  t         j                         t        d|j                         | j                  |j                  d       |j                  t         j                         t        d|j                         | j                  |j                  dd	       t         j                  t        j                         v rR|j                  t         j                         t        d
|j                         | j                  |j                  d       t         j                  t        j                         v r|j                  t         j                         t        d|j                         | j                  |j                  d       |j                  t         j                         t        d|j                         | j                  |j                  d       t         j                   t        j                         v rR|j                  t         j                          t        d|j                         | j                  |j                  d       t         j"                  t        j                         v rR|j                  t         j"                         t        d|j                         | j                  |j                  d       t        t        j                                y)z)Code from the advanced tutorial.
        r   r   r   r   zoptimal value with CLARABEL:r/   zoptimal value with CVXOPT:zoptimal value with SCS:placeszoptimal value with CPLEX:zoptimal value with GLPK:zoptimal value with GLPK_MI:zoptimal value with GUROBI:zoptimal value with XPRESS:N)r   r   r8   r   r   r   CLARABELr7   r   r   CVXOPTinstalled_solversr   CPLEXGLPKGLPK_MIGUROBIXPRESS)r!   rN   r'   r(   probs        r+   test_advanced1zTestExamples.test_advanced1  s|    LLOll1Q4#((1a.01Avh{{3, 	

#,,
',djj9tzz1- ::..00JJcjjJ).

;""4::q1 	

#''
"'4tzz1Q799--//JJciiJ(-tzz:""4::q188s,,..JJchhJ',djj9""4::q1 JJckkJ*/<""4::q1::..00JJcjjJ).

;""4::q1::..00JJcjjJ).

;""4::q1c##%&r-   c           	      L   t        j                  ddgddgddgddgd	d
gddgg      j                  }|j                  \  }}t	        j
                  ||f      }t	        j
                  |      }t	        j                  t	        j                  |            }g }t        |      D ]6  }|j                  t	        j                  ||d d |f   z  |z         dk         8 t	        j                  ||      }	|	j                  t        j                        }
| j                  |
dd       y )Ng?g        g      ?gffffff?gɿg?g      пgg       g333333ӿg?r   r   gj+?r   r   )r   r   r   r<   r   r   r   log_detrv   appendr   r   r   r   r   )r!   rN   r?   ry   rz   r&   r'   r(   r   r)   r*   s              r+   test_log_detzTestExamples.test_log_detH  s   HHtSkTlSkdmTlDk# $
 %&A 	
 A LL!Q LLOll3;;q>*q 	?AsxxAadGa8A=>	?KK[)(vva8r-   c                    ddl }ddlm} |j                  j	                  d       d}d}|j                  ||fd      } |j                  t        |j                              |_        |j                  |d	      }|j                  j                  t        |j                              d
z  |_        |j                  j                  |d      }|j                  |j                        }t        j                  |      }||z  }	t        j                  t        j                   ||z              t        j                  ||	z        z    y)z<Test portfolio problem that caused dcp_attr errors.
        r   Nr[   d   r1   g{Gz?)densitycoo)formatr   r   )rm   scipy.sparsesparser2   r3   random_arrayr   lenr   	eye_arrayr4   r6   r   r   r   squarer   )
r!   r   spr?   ry   FDZrN   ys
             r+   test_portfolio_problemz#TestExamples.test_portfolio_problem]  s     	!
		qOOQFDO1QVV%LL5L)QVV-q0IIOOAq!EE!##JLLOE 	

388AE?#cjjQ&77r-   c                 ^   ddl }d}d}|j                  j                  d       |j                  j                  ||      }|j                  j                  |      }t	        j
                  |      }t	        j                  t	        j                  ||z  |z
              }d|k  |dk  g}t	        j                  ||      }	|	j                  t        j                  d       t        |j                         t        |d   j                         t	        j
                         }t	        j
                         }
||
z   dk(  ||
z
  dk\  g}t	        j                  t	        j                  ||
z
              }t	        j                  ||      }	|	j                  t        j                  d       t        d|	j                         t        d	|	j                         t        d
|j                  |
j                         t	        j
                         }t	        j
                         }
||
z   dk(  ||
z
  dk\  g}t	        j                  t	        j                  ||
z
              }t	        j                  ||      }	|	j                  t        j                  d       t        d|	j                         t        d	|	j                         t        d
|j                  |
j                         | j!                  |	j                  t        j"                         | j%                  |	j                  d       | j%                  |j                  d       | j%                  |
j                  d       t	        j                  t	        j&                  ||
z         |	j(                        }	t        d	|	j                  t        j                  d             | j%                  |	j                  dd       |	j(                  }||
z   dk  |d<   t	        j                  |	j*                  |      }	t        d	|	j                  t        j                  d             | j%                  |	j                  dd       t	        j
                         }t	        j                  t	        j                  |      |dk\  |dk  g      }	|	j                  t        j                  d       t        d|	j                         t        d	|	j                         | j!                  |	j                  t        j,                         | j%                  |	j                  t.        j0                         t	        j                  t	        j                  |            }	|	j                  t        j2                         t        d|	j                         t        d	|	j                         | j!                  |	j                  t        j4                         | j%                  |	j                  t.        j0                          t	        j
                          t	        j
                  d      }t	        j
                  d      }ddl }d}d}|j                  j                  d       |j                  j                  ||      }|j                  j                  |      }t	        j
                  |      }t	        j                  t	        j                  ||z  |z
              }d|k  |dk  g}t	        j                  ||      }	t        d|	j                  t        j                  d             t        d       t        |j                         | j%                  |	j                  d       t	        j6                  d      }t	        j6                  d       t	        j6                  dd      }|j9                  d       |_        t	        j6                  d      }d|_        t	        j6                  dd      }ddl }d}d}|j                  j                  d       |j                  j                  ||      }|j                  j                  |      }t	        j6                  d      }t	        j
                  |      }t	        j                  ||z  |z
        }t	        j                  ||t	        j:                  |d      z  z         }t	        j                  |      }	g }g }g }|j=                  dd      }|D ]  }||_        |	j                  t        j                  d       |j?                  |j                         |j?                  t	        j:                  |d      j                         |j?                  |j                          ddl }t	        j
                  d      }|j9                  d      }t        d |j@                         t        d!t	        jB                  |      j@                         t        d"||z  j@                         	 ||z    y# tD        $ r}t        |       Y d}~yd}~ww xY w)#z3Test examples from cvxpy.org introduction.
        r   NrY   rZ   r   r0   )r   r@   zstatus:zoptimal valuezoptimal varri   r   r   g      @r   r   r[   r\   r1   zOptimal valuezOptimal vargO@Tr^   r`   )r_   r      r/   )r[   r   )r   r[   zdimensions of X:zdimensions of sum(X):zdimensions of A @ X:)#rm   r2   r3   r4   r   r   r8   rn   r   r   r   r7   r   r:   r   statusr=   OPTIMALr   r   r(   rO   
INFEASIBLEr   infr   	UNBOUNDEDro   r   r   ru   r   rl   rt   
ValueError)r!   rm   ry   r?   rz   r&   rN   rO   r(   r   r   r'   r|   rhord   error
sq_penalty
l1_penaltyx_values
gamma_valsvalXes                          r+   
test_introzTestExamples.test_introt  s|    	 !LLq!$LLq! LLOLLQ!;<	AvqAv&{{9k2 	

#''t
,agg 	k!n''(
 LLNLLN 1uz1uz# ll3::a!e,- {{3,

#''t
,i%otzz*mQWWagg.
 LLNLLN 1uz1uz# ll3::a!e,- {{3,

#''t
,i%otzz*mQWWagg.ckk2tzz3/qww,qww*
 {{3<<A.0@0@AotzzdzCDtzz3q9 &&a%1*A{{4>>;7otzzdzCDtzz3q9 LLN {{3<<?Q!VQ!V,<=

#''t
,i%otzz*cnn5tzz2662 {{3<<?+

#,,
'i%otzz*cmm4tzzBFF73
 	 LLO LL  	 !LLq!$LLq! LLOLLQ!;<	AvqAv&{{9k2otzzdzCDmaggtzz=9 MM& 	a MM&. ::f%% mm4(	 mm4q1 	 !LLq!$LLq!T* LLOA	*ll55!Q#778{{3 

^^B*
 	%CEKJJcgg4J0 ekk*chhq!n223OOAGG$	% 	LL JJv 	 !&&)%swwqz7$q1ull3	E 	!HH	s   h 	h,h''h,c                    ddl }|j                  j                  d       d\  }}|j                  j                  dd||f      }|j                  \  }} |j
                  ||f      }t        |      D ]7  }t        |      D ]'  }|j                  j                         dkD  s!d|||f<   ) 9 ||z  }t        j                  ||f      }	t        j                  t        j                  |	            }
t        j                  ||	      t        j                  ||      k(  g}t        j                  |
|      }|j                  t        j                         y)	z Test image in-painting.
        r   Nr   )rZ   rZ      )rl   gffffff?r   )rm   r2   r3   randintr<   zerosrv   r   r   r8   tvmultiplyr   r   r   )r!   r   rowscolsUorigKnownr   jUcorrUr'   r(   r   s                r+   test_inpaintingzTestExamples.test_inpaintingI  s$    	
		q
d 		!!!Sd|!<[[
d $&t 	$A4[ $99##%+"#E!Q$K$	$ eLL$&ll366!9%||E1-eU1KKL{{3,

#''
"r-   c                    ddl }|j                  j                  d       d}d} |j                  ||f      }t	        j
                  |      }t        |      D cg c]6  }t	        j                  t	        j                  d||ddf   |z  g            8 }}t        |      }t	        j                  |      }	t	        j                  |	      }
|
j                  t        j                  d       yc c}w )z?Test log_sum_exp function that failed in Github issue.
        r   Nr   r[   r   )r   	max_iters)rm   r2   r3   r   r   r   rv   log_sum_exphstackrt   r8   r   r   r   )r!   r   ry   r?   r   wr   expr2expr3r'   r)   s              r+   test_log_sum_expzTestExamples.test_log_sum_expc  s     	
		qBGGQFOLLOHMaQ1Q!Q$!,<!=>QQE
ll5!KK	sww!,	 Rs   ;C.)returnN)__name__
__module____qualname____doc__r,   rW   r   r   r   r   r   r   r    r-   r+   r   r      s8    .7<7:tXt6'p9*8.Sj#4-r-   r   __main__)r   unittestrm   r   cvxpyr   cvxpy.interface	interfacer>   cvxpy.tests.base_testr   r   r   mainr   r-   r+   <module>r      sD         *W	-8 W	-t zHMMO r-   