
    bix5                         d dl Zd dlZd dlmZ d dlmZ d dl	m
Z
  G d de      Z G d de      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      Zy)    N)solver_test_helpers)BaseTest)	TestPowNDc                   $    e Zd ZddZddZddZy)TestKKT_LPsc                     t        j                         }|j                  d       |j                  |       |j	                  |       |j                  |       |j                  |       y NCLARABELsolver)STHlp_1solvecheck_primal_feasibilitycheck_complementaritycheck_dual_domainscheck_stationary_lagrangianselfplacessths      O/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/cvxpy/tests/test_KKT.py	test_lp_1zTestKKT_LPs.test_lp_1   S    hhj			$$$V,!!&)v&''/    c                     t        j                         }|j                  d       |j                  |       |j	                  |       |j                  |       |j                  |       y r	   )r   lp_2r   r   r   r   r   r   s      r   	test_lp_2zTestKKT_LPs.test_lp_2   r   r   c                     t        j                         }|j                  d       |j                  |       |j	                  |       |j                  |       |j                  |       y r	   )r   lp_5r   r   r   r   r   r   s      r   	test_lp_5zTestKKT_LPs.test_lp_5   r   r   N   )__name__
__module____qualname__r   r   r!    r   r   r   r   	   s    000r   r   c                       e Zd ZddZy)TestKKT_QPsc                     t        j                         }|j                  d       |j                  |       |j	                  |       |j                  |       |j                  |       y r	   )r   qp_0r   r   r   r   r   r   s      r   	test_qp_0zTestKKT_QPs.test_qp_0)   sS    hhj			$$$V,!!&)v&''/r   Nr"   )r$   r%   r&   r,   r'   r   r   r)   r)   '       0r   r)   c                   4    e Zd ZddZddZddZddZddZy)TestKKT_SOCPsc                     t        j                         }|j                  d       |j                  |       |j	                  |       |j                  |       |j                  |       y r	   )r   socp_0r   r   r   r   r   r   s      r   test_socp_0zTestKKT_SOCPs.test_socp_04   S    jjl			$$$V,!!&)v&''/r   c                     t        j                         }|j                  d       |j                  |       |j	                  |       |j                  |       |j                  |       y r	   )r   socp_1r   r   r   r   r   r   s      r   test_socp_1zTestKKT_SOCPs.test_socp_1<   r3   r   c                     t        j                         }|j                  d       |j                  |       |j	                  |       |j                  |       |j                  |       y r	   )r   socp_2r   r   r   r   r   r   s      r   test_socp_2zTestKKT_SOCPs.test_socp_2D   r3   r   c                     t        j                  d      }|j                  d       |j                  |       |j	                  |       |j                  |       |j                  |       y )Nr   axisr
   r   r   socp_3r   r   r   r   r   r   s      r   test_socp_3ax0zTestKKT_SOCPs.test_socp_3ax0L   V    jja 			$$$V,!!&)v&''/r   c                     t        j                  d      }|j                  d       |j                  |       |j	                  |       |j                  |       |j                  |       y )N   r;   r
   r   r=   r   s      r   test_socp_3ax1zTestKKT_SOCPs.test_socp_3ax1U   r@   r   Nr"   )r$   r%   r&   r2   r6   r9   r?   rC   r'   r   r   r/   r/   2   s    00000r   r/   c                       e Zd ZddZy)TestKKT_ECPsc                     t        j                         }|j                  d       |j                  |       |j	                  |       |j                  |       |j                  |       y r	   )r   	expcone_1r   r   r   r   r   r   s      r   test_expcone_1zTestKKT_ECPs.test_expcone_1`   sS    mmo			$$$V,!!&)v&''/r   Nr"   )r$   r%   r&   rH   r'   r   r   rE   rE   ^   r-   r   rE   c                   $    e Zd ZddZddZddZy)TestKKT_SDPsc                     t        j                  d      }|j                  dd       |j                  |       |j	                  |       |j                  |       |j                  |       y )NminSCSư>r   epsr   sdp_1r   r   r   r   r   r   s      r   test_sdp_1minzTestKKT_SDPs.test_sdp_1minj   sX    ii		D	)$$V,!!&)v&''/r   c                     t        j                  d      }|j                  d       |j                  |       |j	                  |       |j                  |       |j                  |       y )NmaxrM   r   rQ   r   s      r   test_sdp_1maxzTestKKT_SDPs.test_sdp_1maxr   sV    ii			$$V,!!&)v&''/r   c                     t        j                         }|j                  dd       |j                  |       |j	                  |       |j                  |       |j                  |       y NrM   rN   rO   )r   sdp_2r   r   r   r   r   r   s      r   
test_sdp_2zTestKKT_SDPs.test_sdp_2z   U    iik		D	)$$V,!!&)v&''/r   Nr"   )r$   r%   r&   rS   rV   rZ   r'   r   r   rJ   rJ   h   s    000r   rJ   c                       e Zd Zedej
                  fd       Zedej
                  fd       ZddefdZ	ddefdZ
ddefdZddefdZddefd	Zddefd
Zy)TestKKT_PCPsreturnc                     d} d}t        j                  d      }t        j                  j	                  d       t        j                  j                  | |      }t        j                  | |fd      }t        j                  t        j                  ||      d	      }t        j                  g d
      }t        j                  g d      }t        j                  ||d   |      t        j                  ||d   |      |dk\  t        j                  |d	      dk  g}t        j                  |d   |d   z         }	|	df}
|d f|d f|d fg}|D cg c]  }|d f }}t        j                  |
||      S c c}w )Nr#         shaper   Trd   nonnegrB   r;   )gYGY?gaŹ?gptvS?grX?)g	\?g}R7?gOB?g|W?gl<&S@)cpVariablenprandomseedrandsummultiplyarray	PowConeNDMaximizer   SolverTestHelper)n_buyern_itemszVXualpha1alpha2consobjobj_pair	var_pairscon
cons_pairss                 r   non_vec_pow_ndzTestKKT_PCPs.non_vec_pow_nd   sG   KKd#
		qIINN7G,KKw0>FF2;;q!$1-JKJKQ!f-r||AqtV/LQqq)Q.0kk!A$1+&*+YYY 	 .22csDk2
2##HiDD 3s   E2c                  ^   d} d}t        j                  d      }t        j                  j	                  d       t        j                  j                  | |      }t        j                  | |fd      }t        j                  t        j                  ||      d      }t        j                  g d	      }t        j                  g d
      }t        j                  t        j                  ||g      |t        j                  ||g      d      |dk\  t        j                  |d      dk  g}t        j                  |d   |d   z         }	t        j                  |	|      }
|
j                  d       |	df}|D cg c]  }|d f }}|d f|d f|d fg}t        j                  |||      S c c}w )Nr#   r`   ra   rc   rB   Tre   r;   )gP?g'?gqQ5?gC?)g?gFkV?g:ࡹ?g,M	?r   rM   r   g},_@)rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   vstackrq   Problemr   r   rr   )rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   probr}   r   r   r~   s                  r   
vec_pow_ndzTestKKT_PCPs.vec_pow_nd   sf   KKd#
		qIINN7G,KKw0>FF2;;q!$1-JKJKRYY1v.299ff=M3NUVWQqq)Q.0kk!A$1+&zz#t$

%
 +,,01Sc4[1
1YD	At95	##HiDD 2s   ;F*r   c                     t        j                         }|j                  dd       |j                  |       |j	                  |       |j                  |       |j                  |       y rX   )r   pcp_1r   r   r   r   r   r   s      r   
test_pcp_1zTestKKT_PCPs.test_pcp_1   r[   r   c                     t        j                         }|j                  dd       |j                  |       |j	                  |       |j                  |       |j                  |       y rX   )r   pcp_2r   r   r   r   r   r   s      r   
test_pcp_2zTestKKT_PCPs.test_pcp_2   r[   r   c                     t        j                         }|j                  dd       |j                  |       |j	                  |       |j                  |       |j                  |       y rX   )r   pcp_3r   r   r   r   r   r   s      r   
test_pcp_3zTestKKT_PCPs.test_pcp_3   r[   r   c                     | j                         }|j                  dd       |j                  |       |j                  |       |j	                  |       |j                  |       y rX   )r   r   r   r   r   r   r   s      r   
test_pcp_4zTestKKT_PCPs.test_pcp_4   sX    !!#		D	)$$V,!!&)v&''/r   c                     | j                         }|j                  dd       |j                  |       |j                  |       |j	                  |       |j                  |       y rX   )r   r   r   r   r   r   r   s      r   
test_pcp_5zTestKKT_PCPs.test_pcp_5   sV    oo		D	)$$V,!!&)v&''/r   c                     t        j                         }|j                  dd       |j                  |       |j	                  |       y rX   )r   pcp_4r   r   r   r   s      r   
test_pcp_6zTestKKT_PCPs.test_pcp_6   s:    oo		D	)v&''/r   Nr"   )   )r$   r%   r&   staticmethodr   rr   r   r   intr   r   r   r   r   r   r'   r   r   r]   r]      s    EC00 E E( E,, E E*0 00 00 00 00 00 0r   r]   c                      e Zd ZdZedej                  fd       Zedej                  fd       Zedej                  fd       Z	edej                  fd       Z
edej                  fd       Z	 ddZdd	Zdd
ZddZddZy)TestKKT_Flagsz
    A class with tests for testing out the incorporation of
    implicit constraints within `check_stationarity_lagrangian`
    r^   c                     t        j                  dd      } t        j                  t        j                  |             }| d   dk(  g}|d   dfg}| t	        j
                  g dg d	g d
g      fg}|df}t        j                  |||      }|S )z\
        Tests NSD flag
        Reference values via MOSEK
        Version: 10.0.46
        r   r   T)rd   NSDr   rB   {   r   N)     ^     ^@        )r   r   r   )r   r   r   g	   n)rg   rh   rq   
lambda_minri   ro   r   rr   rw   r|   r{   	con_pairsr~   r}   r   s          r   nsd_flagzTestKKT_Flags.nsd_flag   s     KKe.kk"--*+$3!WdO
	 #8#8#8#: ; < =	 +,""8Y	B
r   c                  x   t        j                  dd      } t        j                  t        j                  |             }t        j                  |       dk  | d   dk\  | d   dk  g}|d   d	f|d
   d	f|d   d	fg}| t        j                  g dg dg dg dg      fg}|df}t        j                  |||      }|S )z\
        Tests PSD flag
        Reference values via MOSEK
        Version: 10.0.46
        r#   r#   T)rd   PSD
   r   r#      r   NrB   rb   )w̫   @      @!tBr   )r   r   r   r   )r   r   3?rID?)r   r   r   r   g.նl@	rg   rh   Minimizelog_sum_expnorm2ri   ro   r   rr   r   s          r   psd_flagzTestKKT_Flags.psd_flag   s     KKe.kk"..+,r!1T7a<4A>!WdO!WdO!WdO
	
 #W#W#W#W#Y Z [ \	 *+""8Y	B
r   c                  x   t        j                  dd      } t        j                  t        j                  |             }t        j                  |       dk  | d   dk\  | d   dk  g}|d   d	f|d
   d	f|d   d	fg}| t        j                  g dg dg dg dg      fg}|df}t        j                  |||      }|S )zb
        Tests symmetric flag
        Reference values via MOSEK
        Version: 10.0.46
        r   T)rd   	symmetricr   r   r#   r   r   NrB   rb   )禶A^r   U!hr
r   )r   r   r   r   )r   r   &r   )r   r   r   g\gG@r   r   s          r   symmetric_flagzTestKKT_Flags.symmetric_flag  s     KKet4kk"..+,r!1T7a<4A>!WdO!WdO!WdO
	
 #W#W#W#W#Y Z [ \	 *+""8Y	B
r   c                  x   t        j                  dd      } t        j                  t        j                  |             }t        j                  |       dk  | d   dk\  | d   dk  g}|d   d	f|d
   d	f|d   d	fg}| t        j                  g dg dg dg dg      fg}|df}t        j                  |||      }|S )z_
        Tests nonneg flag
        Reference values via MOSEK
        Version: 10.0.46
        r   Tre   r   r   r#   r   r   NrB   rb   )|D>r   r   r   )0dOw>r   r   r   )r   r   r   gXOw>gO@r   r   s          r   nonneg_flagzTestKKT_Flags.nonneg_flag'  s     KKeD1kk"..+,r!1T7a<4A>!WdO!WdO!WdO
	
 #c#c#c#c#e $ % &	
 *+""8Y	B
r   c                  z   t        j                  dd      } t        j                  t        j                  |             }t        j                  |       dk  t        j
                  | d      dk\  g}|d   df|d	   dfg}| t        j                  g d
g d
g dg      fg}|df}t        j                  |||      }|S )z_
        Tests nonpos flag
        Reference values via MOSEK
        Version: 10.0.46
        r   T)rd   nonposrb      ir   NrB   )u>ɿr   >ɿ)r   r   gW-Ƨ>ɿgAf?)
rg   rh   r   r   r   sum_smallestri   ro   r   rr   r   s          r   nonpos_flagzTestKKT_Flags.nonpos_flag?  s     KKfT2kk"((1+&q!Q&1(=(DE!WdO!WdO
	 #J#J#J#L M N O	 +,""8Y	B
r   c                     t         j                         }|j                  d       |j                  |       |j	                  |       |j                  |       |j                  |       y NrM   r   )r   r   r   r   r   r   r   r   s      r   test_kkt_nsd_varzTestKKT_Flags.test_kkt_nsd_varW  V    $$&			$$V,!!&)v&''/r   c                     t         j                         }|j                  d       |j                  |       |j	                  |       |j                  |       |j                  |       y r   )r   r   r   r   r   r   r   r   s      r   test_kkt_psd_varzTestKKT_Flags.test_kkt_psd_var_  r   r   c                     t         j                         }|j                  d       |j                  |       |j	                  |       |j                  |       |j                  |       y r   )r   r   r   r   r   r   r   r   s      r   test_kkt_symmetric_varz$TestKKT_Flags.test_kkt_symmetric_varg  sV    **,			$$V,!!&)v&''/r   c                     t         j                         }|j                  d       |j                  |       |j	                  |       |j                  |       |j                  |       y r   )r   r   r   r   r   r   r   r   s      r   test_kkt_nonneg_varz!TestKKT_Flags.test_kkt_nonneg_varo  V    '')			$$V,!!&)v&''/r   c                     t         j                         }|j                  d       |j                  |       |j	                  |       |j                  |       |j                  |       y r   )r   r   r   r   r   r   r   r   s      r   test_kkt_nonpos_varz!TestKKT_Flags.test_kkt_nonpos_varw  r   r   Nr"   )r$   r%   r&   __doc__r   r   rr   r   r   r   r   r   r   r   r   r   r   r'   r   r   r   r      s    
 c**  & c**  , C00  , --  . --  (00000r   r   )numpyri   cvxpyrg   cvxpy.testsr   r   cvxpy.tests.base_testr   cvxpy.tests.test_cone2coner   r   r)   r/   rE   rJ   r]   r   r'   r   r   <module>r      sn      2 * 00( 0<0( 0)0H )0X08 008 06Z08 Z0x^0H ^0r   