
    bi;                         d dl Z d dlZd dlZd dlZd dlmZ d dlm	Z	 ej                  Z G d de	      Z G d de	      Z G d de	      Zy)	    N)BaseTestc                       e 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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)TestDcpNc                     t        j                         }||z  }| j                  |j                                | j	                  |j                                y N)cp	ParameterassertFalseis_dpp
assertTrueis_dcp)selfxproducts      O/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/cvxpy/tests/test_dpp.py#test_multiply_scalar_params_not_dppz+TestDcp.test_multiply_scalar_params_not_dpp   s>    LLNa%)*()    c                     t        j                  d      }||z  }| j                  |j                                | j	                  |j                                y )N)   r   )r   r	   r   r   r
   r   )r   Xr   s      r   test_matmul_params_not_dppz"TestDcp.test_matmul_params_not_dpp   sA    LL a%())*r   c                     t        j                         }t        j                         }||z  }| j                  |j	                                | j                  |j                                y r   r   r	   Variabler   r   r   r   r   yr   s       r   'test_multiply_param_and_variable_is_dppz/TestDcp.test_multiply_param_and_variable_is_dpp   sG    LLNKKMa%()()r   c                     t        j                         }t        j                         }t        j                  ||      }| j	                  |j                                | j	                  |j                                y r   )r   r	   r   multiplyr   r   r   r   s       r   'test_multiply_variable_and_param_is_dppz/TestDcp.test_multiply_variable_and_param_is_dpp!   sN    LLNKKM++a#()()r   c                     t        j                         }t        j                         }t        j                  |      |z  }| j	                  |j                                y r   )r   r	   r   expr
   r   r   s       r   5test_multiply_nonlinear_param_and_variable_is_not_dppz=TestDcp.test_multiply_nonlinear_param_and_variable_is_not_dpp(   s>    LLNKKM&&)a-)*r   c                    t        j                  d      }t        j                  d      }t        j                  |      |z  }| j	                  |j                                | j                  |j                                y NTnonneg)r   r	   r   r"   r
   r   r   r   r   s       r   Ctest_multiply_nonlinear_nonneg_param_and_nonneg_variable_is_not_dppzKTestDcp.test_multiply_nonlinear_nonneg_param_and_nonneg_variable_is_not_dpp.   sW    LL%KKt$&&)a-)*()r   c                     t        j                         }t        j                         }||z   |z  }| j                  |j	                                | j                  |j                                y r   r   r   s       r   .test_multiply_affine_param_and_variable_is_dppz6TestDcp.test_multiply_affine_param_and_variable_is_dpp5   sK    LLNKKMq5A+()()r   c                    t        j                         }t        j                         }||z   dz  }| j                  |j	                                | j                  |j                                | j                  |j                                y N   )r   r	   r   r   	is_convexr   r   r   s       r   (test_multiply_param_plus_var_times_constz0TestDcp.test_multiply_param_plus_var_times_const<   s`    LLNKKMq5A+))+,()()r   c                 B   t        j                  d      }t        j                         }|t        j                  |      z  }| j	                  |j                                | j	                  |j                                | j	                  |j                                y r%   )r   r	   r   r"   r   r.   r   r   r   s       r   1test_multiply_param_and_nonlinear_variable_is_dppz9TestDcp.test_multiply_param_and_nonlinear_variable_is_dppD   sg    LL%KKMbffQi-))+,()()r   c                 b   t        j                         }t        j                         }|t        j                  |      k(  g}| j	                  |d   j                  d             t        j                  t        j                  d      |      }| j	                  |j                  d             y Nr   Tdppr   r   r	   normr
   r   ProblemMinimizer   r   a
constraintproblems        r   test_nonlinear_equality_not_dppz'TestDcp.test_nonlinear_equality_not_dppL   }    KKMLLN2771:o&
A--$-78**R[[^Z8D12r   c                 b   t        j                         }t        j                         }|t        j                  |      k  g}| j	                  |d   j                  d             t        j                  t        j                  d      |      }| j	                  |j                  d             y r3   r6   r:   s        r   !test_nonconvex_inequality_not_dppz)TestDcp.test_nonconvex_inequality_not_dppT   r?   r   c                 l   t        j                         }t        j                         }||z   dz  }| j                  |j	                                d|_        t        j                  t        j                  |      |dk(  g      }|j                  t         j                        }| j                  |d       y )Nr-          @      )r   r	   r   r   r   valuer8   r9   solveSCSassertAlmostEqual)r   r   r   r   r=   rF   s         r   .test_solve_multiply_param_plus_var_times_constz6TestDcp.test_solve_multiply_param_plus_var_times_const\   s    LLNKKMq5A+()**R[[1AF8<bff%ub)r   c                 4   t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  ||z  |z
        |t        j                  |      z  z   }|dk\  g}t        j                  t        j
                  |      |      }| j                  |j                                | j                  |d   j                                | j                  |j                                y )N   rM   rM   rD   Tr&   r   )r   r	   r   r7   r8   r9   r   r   )r   Fr   glambd	objectiveconstraintsr=   s           r   test_paper_example_is_dppz!TestDcp.test_paper_example_is_dppf   s    LL KKLL D)GGAEAI&);;	Avh**R[[3[A	((*+A--/0()r   c                     t        j                         }t        j                  t        j                  |            }| j	                  |j                                y r   )r   r	   r"   logr
   r   )r   r   exprs      r   "test_non_dcp_expression_is_not_dppz*TestDcp.test_non_dcp_expression_is_not_dppr   s7    LLNvvbffQi 'r   c                     t        j                         }d|_        t        j                         }t        j                  t        j
                  ||z        ||k(  g      }| j                  |j                                | j                  |j                                t        j                         5  t        j                  d       | j                  |j                  t         j                        d       d d d        d|_        t        j                         5  t        j                  d       | j                  |j                  t         j                        d       d d d        y # 1 sw Y   rxY w# 1 sw Y   y xY w)Nr-   ignore      	   )r   r	   rF   r   r8   r9   r
   r   r   r   warningscatch_warningssimplefilterassertEqualrG   rH   r   r   r   r=   s       r   test_can_solve_non_dpp_problemz&TestDcp.test_can_solve_non_dpp_problemw   s   LLNKKM**R[[Q/!q&:)*()$$& 	8!!(+W]]2662B7	8 $$& 	7!!(+W]]2662A6	7 	7		8 	8	7 	7s   2AE(AE4(E14E=c                    t        j                         }d|_        t        j                         }t        j                  t        j
                  ||z         ||k(  g      }| j                  |j                                | j                  |j                                | j                  |j                  t         j                        d       d|_        | j                  |j                  t         j                        d       y )Nr-   
   r\      )r   r	   rF   r   r8   r9   r   r   r   rI   rG   rH   rb   s       r   test_solve_dpp_problemzTestDcp.test_solve_dpp_problem   s    LLNKKM**R[[Q/!q&:()()w}}RVV4b9w}}RVV4a8r   c           	      x   t        j                         }d|_        t        j                         }t        j                  t        j
                  ||z        ||k(  g      }t        j                         5  t        j                  d       |j                  t         j                        \  }}}d d d        | j                  |j                                | j                  t         j                  j                  j                   j                  D cg c]  }t#        |       c}v        y # 1 sw Y   xY wc c}w )Nr-   rZ   )r   r	   rF   r   r8   r9   r^   r_   r`   get_problem_datarH   r
   r   r   
reductionseval_params
EvalParamstyper   r   r   r=   _chainrs          r   0test_chain_data_for_non_dpp_problem_evals_paramsz8TestDcp.test_chain_data_for_non_dpp_problem_evals_params   s    LLNKKM**R[[Q/!q&:$$& 	;!!(+!22266:KAua	; 	)*11<<*/*:*:;Qa;< 	=		; 	;
 <s   49D+D7
+D4c           	         t        j                         }d|_        t        j                         }t        j                  t        j
                  ||z         ||k(  g      }|j                  t         j                        \  }}}| j                  t         j                  j                  j                  |j                  D cg c]  }t        |       c}v        y c c}w r,   )r   r	   rF   r   r8   r9   ri   rH   r
   rj   rk   rl   rm   rn   s          r   4test_chain_data_for_dpp_problem_does_not_eval_paramsz<TestDcp.test_chain_data_for_dpp_problem_does_not_eval_params   s    LLNKKM**R[[Q/!q&:..rvv65!22==.3.>.>?T!W?@ 	A?s   ?C
c                 8   t        j                  d      }t        j                  dd      }t        j                  d      |_        t        j                  ||      }| j                  |j                                | j                  |j                                y )NrN   rL   T)PSDrM   )r   r   r	   npeyerF   	quad_formr
   r   r   r   r   r   Pr   s       r   test_param_quad_form_not_dppz$TestDcp.test_param_quad_form_not_dpp   se    KKLLT*&&)LLA$
#r   c                     t        j                  d      }t        j                  d      }t        j                  ||      }| j                  |j                                | j                  |j                                y )NrN   rM   )r   r   rw   rx   ry   r   r   r   rz   s       r   test_const_quad_form_is_dppz#TestDcp.test_const_quad_form_is_dpp   sQ    KKFF1ILLA
#
#r   c                    d\  }}t        j                  |df      }t        j                  d      }t        j                  ||f      }t        j                  |df      }t        j                  d      }t        j                  d      }d|z  t        j
                  t        j                  |||z  |z         t        j                  t        j                  t        j                  |df      ||z  |z   g      j                  dd      j                  z
        z  }	| t        j                  |d      z  |t        j                  |      z  z
  }
t        j                  t        j                  |	|
z               }| j                  |	j!                                | j                  |j#                                | j                  |j!                                y )	Nr\   rM   rD   rD   rD   Tr&         ?r   )axiskeepdims)r   r   r	   rw   onessumr   log_sum_exphstackzerosTr7   sum_squaresr8   Maximizer   r   r   )r   Nnbetabr   Ylambd1lambd2log_likelihoodregularizationr=   s               r    test_paper_example_logreg_is_dppz(TestDcp.test_paper_example_logreg_is_dpp   sb   1{{Aq6"KKLL!Q GGQFOT*T*q&BFFKK1t8a<(NN299bhh1v&6D1%EFHH !D223!4%5 5 !2774#33fr~~d?S6SS**R[[.)HIJ--/0()()r   c                    d\  }}t        j                  |df      }t        j                  ||f      }t        j                  ||f      }t        j                  |df      }t        j                  |df      }t        j                  |df      }dt        j                  ||z        z  |j                  |z  z   |j                  |z  z   }	t        j
                  t        j                  |	      t        j                  |      dk  |||z  k(  g      }
| j                  |
j                                | j                  |
j                                y )Nr\   r\   rD         ?)r   r	   r   r   r   r8   r9   r7   r   r   r   )r   r   mr   P_sqrtP_21qur   rR   r=   s              r    test_paper_example_stoch_controlz(TestDcp.test_paper_example_stoch_control   s   1LL!Q q!f%||QF#LL!Q KKAKKA"..!44qssQw>qH	**R[[3 ggajC/dQh?A()()r   c                    d}t        j                  |      }t        j                  |      }t        j                  t        j                  ||z
              }|dk\  g}t        j
                  ||      }| j                  |j                                t        j                  ddg      |_
        |j                  t         j                  d       | j                  |j                  |j                         t        j                  ddg      |_
        |j                  t         j                  d       | j                  |j                  t        j                  d             y )NrM   r   r-   g:0yE>)eps)r   r	   r   r9   r   r8   r   r   rw   arrayrF   rG   rH   assertItemsAlmostEqualr   )r   r   r   r   rR   rS   r=   s          r   test_paper_example_reluzTestDcp.test_paper_example_relu   s    LLOKKNKKq1u 56	Avh**Y4()((Aq6"bff$'##AGGQWW5((B8$bff$'##AGGRXXa[9r   c                    d\  }}t        j                  ||f      }t        j                  |df      }t        j                  |df      }t        j                  |df      }t        j                  dt        j                  ||z
        z        }||z  |k  g}t        j
                  ||      }	| j                  |	j                                y )Nr   rD   r   )r   r	   r   r9   r   r8   r   r   )
r   r   r   Ghpr   rR   rS   r=   s
             r   test_paper_example_opt_net_qpz%TestDcp.test_paper_example_opt_net_qp   s    1LL!Q LL!Q LL!Q KKAKKbnnQU&; ;<	1uzl**Y4()r   c                    d}t        j                  ||f      }t        j                  |      }t        j                  |      }t        j                  |      }t        j                  |j                        }t        j                  dt        j
                  ||z
        z        }dt        j
                  ||z        z  dk  |||z
  k(  g}t        j                  ||      }	| j                  |	j                                y )NrM   r   rD   )	r   r	   r   shaper9   r   r8   r   r   )
r   r   A_sqrtzr   r   slackrR   rS   r=   s
             r   *test_paper_example_ellipsoidal_constraintsz2TestDcp.test_paper_example_ellipsoidal_constraints   s    q!f%LLOLLOKKNAGG$KKbnnQU&; ;<	R^^FUN;;q@A~'**Y4()r   c                 Z   t        j                  dd      }t        j                  d      }t        j                  ||z         }|dk  g}t        j                  ||      }t        j                  dg      |_        t        j                         5  t        j                  d       |j                  t         j                  d       d d d        t
        j                  j                  |j                  dd	
       t        j                  dd      }t        j                  d      }t        j                  ||dz  z         }|dk  g}t        j                  ||      }t        j                  dg      |_        t        j                         5  t        j                  d       |j                  t         j                  d       d d d        t
        j                  j                  |j                  dd	
       t        j                  dd      }t        j                  d      }t        j                  t        j                  ||dz              }|dk  g}t        j                  ||      }t        j                  dg      |_        t        j                         5  t        j                  d       |j                  t         j                  d       d d d        t
        j                  j                  |j                  dd	
       y # 1 sw Y   BxY w# 1 sw Y   RxY w# 1 sw Y   PxY w)NrD   Tr&   r   rZ   gư>)solverr   rC   r\   decimalrM   )r   r	   r   r   r8   rw   r   rF   r^   r_   r`   rG   rH   testingassert_almost_equalr   )r   sr   objconsprobs         r   test_non_dpp_powerszTestDcp.test_non_dpp_powers   sH   LL4(KKNkk!A#Qxzz#t$((B4.$$& 	0!!(+JJbff$J/	0 	

&&tzz2q&ALL4(KKNkk!AqD&!Qxzz#t$((B4.$$& 	0!!(+JJbff$J/	0 	

&&tzz2q&ALL4(KKNkk"++aA./Qxzz#t$((B4.$$& 	0!!(+JJbff$J/	0 	

&&tzz2q&A3	0 	0	0 	0	0 	0s$   7L7L7L!LL!L*c                 X   t        j                         }d|_        t        j                         }t        j                  t        j
                  ||z         ||k(  g      }| j                  |j                                | j                  |j                                |j                  t         j                  d      }| j                  |d       t        j                  t        j                        5  |j                  t         j                  dd       ddd       y# 1 sw Y   yxY w)z"Test the ignore_dpp flag.
        r-   T)
ignore_dppre   )enforce_dppr   N)r   r	   rF   r   r8   r9   r   r   r   rG   rH   rI   pytestraiseserrorDPPError)r   r   r   r=   results        r   test_ignore_dppzTestDcp.test_ignore_dpp  s     LLNKKM**R[[Q/!q&:()()rvv$7vr* ]]5>>* 	EMM"&&dtMD	E 	E 	Es   4#D  D)c                    t        j                         }t        j                         }t        j                  ||      |z   }t        j                  t        j
                  |            }t        j                         5  t        j                  dd       d|_	        |j                  t         j                         |j                  j                         }d|_	        |j                  t         j                         |j                  j                         }d|_	        |j                  t         j                         |j                  j                         }t        j                  ||      rJ t        j                  ||      sJ 	 ddd       t        j                   t"        j$                        5  |j                  t         j&                  d	       ddd       t        j                  d
d      }t        j                  dd      }|dk\  g}	t        j                  ||      }
t        j                  t        j
                  |
      |	      }|j                  d      }d
|_	        |j                  d      }d|_	        |j                  d      }t        j                  |d
      sJ t        j                  |d      sJ t        j                  |d
      sJ y# 1 sw Y   WxY w# 1 sw Y   xY w)z*Test case with parameter in quad_over_lin.rZ   z.*DPP.*)messagerD   )r   i  NT)r   rM   posr   rF   gp)r   r   r	   quad_over_linr8   r9   r^   r_   filterwarningsrF   rG   CLARABELcopyrw   iscloser   r   r   r   OSQP)r   r   r   lossr   sol1sol2sol3r   rS   rR   s              r   test_quad_over_linzTestDcp.test_quad_over_lin/  s,    KKMLLN!$q(zzKK
 $$& 	*##HjAAGJJbkkJ*77<<>DAGJJbkkJ*77<<>DAGJJbkkJ*77<<>Dzz$---::dD)))	*  ]]5>>* 	2JJrwwDJ1	2 KK&LLtQ/Avh$$Qq)	zz"++i0+>zzTz"zzTz"zzTz"zz$"""zz$"""zz$"""E	* 	* 	2 	2s   >DK5"K,K),K6returnN)__name__
__module____qualname__r   r   r   r    r#   r(   r*   r/   r1   r>   rA   rJ   rT   rX   rc   rg   rr   rt   r|   r~   r   r   r   r   r   r   r   r    r   r   r   r      s    *+**+****33*
*(
7	9
=A$$*$*:	** BDE"0#r   r   c                       e 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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d dZd dZ y)!TestDgpNc                 N   t        j                  dd      }t        j                  d      }t        j                  t        j                  |      ||k(  g      }| j                  |j                  j                  d             | j                  |j                  d   j                  d             | j                  |j                  d             t         j                  j                  |      }|j                         }| j                  |j                                |j                  t         j                  dd       | j                  |j                   d       d|_        |j                  t         j                  dd       | j                  |j                   d       y )	NTr   r   r   r4   r   r   r   r   rC   )r   r	   r   r8   r9   r   rR   is_dgprS   rj   Dgp2Dcpreducer   rG   rH   rI   rF   )r   alphar   dgpdgp2dcpdcps         r   test_basic_equality_constraintz&TestDgp.test_basic_equality_constrainte  s#   S1KKD!jjQ!u*6,,,67*11d1;<

t
,---'',nn

%		Dd	;qww,		Dd	;qww,r   c                 H   t        j                  dd      }t        j                  d      }||z   |k  g}| j                  |d   j	                  d             | j                  t        j
                  t        j                  d      |      j	                  d             y NTr   r   r   r   r4   rD   )r   r	   r   r   r   r8   r9   r   r   r   r<   s       r    test_basic_inequality_constraintz(TestDgp.test_basic_inequality_constrainty  s{    S1KKD!%i1n%

1,,,67

2;;q>:>EE$EOPr   c                 H   t        j                  dd      }t        j                  d      }|||z   k(  g}| j                  |d   j	                  d             | j                  t        j
                  t        j                  d      |      j	                  d             y r   r   r	   r   r
   r   r8   r9   r   s       r   'test_nonlla_equality_constraint_not_dppz/TestDgp.test_nonlla_equality_constraint_not_dpp      S1KKD!1u9n%
A--$-78BKKNJ?FF4FPQr   c                 H   t        j                  dd      }t        j                  d      }|||z   k  g}| j                  |d   j	                  d             | j                  t        j
                  t        j                  d      |      j	                  d             y r   r   r   s       r   +test_nonllcvx_inequality_constraint_not_dppz3TestDgp.test_nonllcvx_inequality_constraint_not_dpp  r   r   c                     t        j                  d      }t        j                  d      }t        j                  d      }|dz  |dz  z  |dz  z  |dz  z  }| j                  |j                  d             y NTr   g333333?r   r\   rM   r4   r   r	   r   r   )r   r   r   kappamonomials        r   test_param_monomial_is_dppz"TestDgp.test_param_monomial_is_dpp  sg    &||%&#:c	)E1H4uax?D12r   c                    t        j                  d      }t        j                  d      }t        j                  d      }|dz  |dz  z  |dz  z  |dz  z  }||dz  |dz  z  z   }| j                  |j                  d             y r   r   )r   r   r   r   r   
posynomials         r   test_param_posynomial_is_dppz$TestDgp.test_param_posynomial_is_dpp  s    &||%&#:c	)E1H4uax?q47 22

))d)34r   c                 *   t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }|dz  |dz  z  |dz  z  |dz  z  |z  }| j                  |j	                  d             y r   r   r	   r   r   r   )r   r   r   r   taur   s         r   test_mixed_monomial_is_dppz"TestDgp.test_mixed_monomial_is_dpp  sz    &{{t$&kkd##:c	)E1H4uax?#ED12r   c                 :   t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }|dz  |dz  z  |dz  z  |dz  z  |z  }||z   dz  }| j                  |j	                  d             y r   r   )r   r   r   r   r   r   r   s          r   test_mixed_posynomial_is_dppz$TestDgp.test_mixed_posynomial_is_dpp  s    &{{t$&kkd##:c	)E1H4uax?#E)A-

))d)34r   c                     t        j                  d      }t        j                  d      }||z  }| j                  |j	                  d             ||z  }| j                  |j	                  d             y )Nr   rF   Tr   r4   )r   r	   r   r   r   r
   )r   r   r   pow1pow2s        r   test_nested_power_not_dppz!TestDgp.test_nested_power_not_dpp  s`    3'KKD!%x-.U{./r   c                    t        j                  dd      }t        j                  d      }t        j                  t        j                  ||z  |z        ||k(  g      }| j                  |j                  j                                | j                  |j                  j                  d             | j                  t        j                        5  |j                  t         j                  dd       d d d        t        j                         5  t        j                   d       |j                  t         j                  dd       | j#                  |j$                  d       d d d        y # 1 sw Y   zxY w# 1 sw Y   y xY w)	NTr   r   r   r4   r   rZ   F)r   r	   r   r8   r9   r   rR   r   r
   assertRaisesr   r   rG   rH   r^   r_   r`   rI   rF   )r   r   r   r   s       r   !test_non_dpp_problem_raises_errorz)TestDgp.test_non_dpp_problem_raises_error  s"   S1KKD!jjeAg%781:,G,,./--$-78u~~. 	@IIRVV$I?	@ $$& 	1!!(+IIRVV%I@""177C0	1 	1	@ 	@	1 	1s   #E0AE<0E9<Fc                 ,   t        j                  dd      }t        j                  dd      }t        j                  d      }||z  |z  }t        j                  t        j                  |      ||k(  g      }| j                  |j                                | j                  |j                  d             | j                  |j                  d             |j                  t         j                  dd       | j                  |j                  d       | j                  |j                  d       d	|_        |j                  t         j                  dd       | j                  |j                  d	       | j                  |j                  d
       y )NTr   r   rC   r   r4   r   r         @      2@r   r	   r   r8   r9   r   r   r
   r   rG   rH   rI   rF   )r   r   r   r   r   r=   s         r   test_basic_monomialzTestDgp.test_basic_monomial  s    S1||C0KKD!:a<**R[[2Q%ZLA()401./RVV$?qww,w}}c2RVV$?qww,w}}d3r   c                 4   t        j                  dd      }t        j                  dd      }t        j                  dd      }t        j                  d      }t        j                  d      }||z  |z  }||z  |z  |z  }||z   }t        j                  t        j                  |      ||k(  ||k(  g      }	| j                  |	j                                | j                  |	j                  d             | j                  |	j                  d             |	j                  t         j                  dd	       | j                  |j                  d       | j                  |j                  d       | j                  |	j                  d
d       d|_        d|_        |	j                  t         j                  dd	       | j                  |j                  d       | j                  |j                  d       | j                  |	j                  dd       y )NTr   r   rC   r  r   r4   r   r   g      ,@r\   places      @g      @g     w@r  )
r   r   r   r   r   r   monomial_onemonomial_twor   r=   s
             r   test_basic_posynomialzTestDgp.test_basic_posynomial  s   S1||C0S1KKD!KKD!Tz!|Ez!|A~!L0
**R[[45j!t)46 	()401./RVV$?qww,qww,w}}d1=
RVV$?qww,qww,w}}eA>r   c                    t        j                  dd      \  }}}t        j                  dd      }t        j                  dd      }||z  |z  ||z  |z  z   ||z  |z  z   |k  |||z  k\  g}t        j                  t        j                  d||z  |z  z        |      }| j                  |j                  d             |j                  t        dd	       | j                  d
|j                  d       y )Nr\   Tr   rC   r   r   rD   r4   r   r   gGz./@rM   r  )r   r   r	   r8   r9   r   r   rG   SOLVERrI   rF   )r   r   r   r   r;   r   rS   r=   s           r   test_basic_gpzTestDgp.test_basic_gp  s    ++d-1aLLT-LLT-s1uqs1u}qs1u,11!8<**R[[AaCE3[A401f48ugmmA>r   c                    t        j                  d      }t        j                  d      }t        j                  d      }t        j                  dd      }t        j                  dd      }t        j                  dd      }|||z  z  }||z  ||z  z  }t        j                  t        j                  ||            }	||k(  ||k(  g}
t        j
                  |	|
      }| j                  |j                  d	             |j                  t        dd
       | j                  |j                  dd       | j                  |j                  d       | j                  |j                  d       d|_        d|_        d|_        d|_        |j                  t        dd
       | j                  |j                  dd       | j                  |j                  d       | j                  |j                  d       y NTr   r   r  r  r   r   r  r4   r  g      @r   r  rM   rC   r  )r   r   r	   r9   maximumr8   r   r   rG   r  rI   rF   r   r   r   r   r   r   r   prod1prod2r   constrr=   s               r   test_maximumzTestDgp.test_maximum	  s   KKD!KKD!3'||C0S1llt3/!U(
qE!kk"**UE23u*a3h'**S&)401f48w}}c!<qww,qww,
	f48w}}d1=qww,qww,r   c                 $   t        j                  d      }t        j                  d      }t        j                  d      }t        j                  dd      }t        j                  dd      }t        j                  dd      }|||z  z  }||z  ||z  z  }t        j                  t        j                  t        j
                  ||g                  }	||k(  ||k(  g}
t        j                  |	|
      }| j                  |j                  d	             |j                  t        dd
       | j                  |j                  dd       | j                  |j                  d       | j                  |j                  d       d|_        d|_        d|_        d|_        |j                  t        dd
       | j                  |j                  dd       | j                  |j                  d       | j                  |j                  d       y r  )r   r   r	   r9   maxr   r8   r   r   rG   r  rI   rF   r  s               r   test_maxzTestDgp.test_max)  s   KKD!KKD!3'||C0S1llt3/!U(
qE!kk"&&E5>!:;<u*a3h'**S&)401f48w}}c!<qww,qww,
	f48w}}d1=qww,qww,r   c                 ,   t        j                  ddd      }t        j                  d      }t        j                  t        j                  ||z        ||k(  g      }| j                  |j                  d             |j                  t         j                  dd       | j                  |j                  d       | j                  |j                  d       |j                  t         j                  dd       | j                  |j                  d       | j                  |j                  d       d|_
        |j                  t         j                  dd       | j                  |j                  d	       | j                  |j                  d       y )
NTr   r   r   rF   namer   r4   r   r  g      ;@)r   r	   r   r8   r9   r   r   rG   rH   rI   rF   )r   r   r   r=   s       r   $test_param_in_exponent_and_elsewherez,TestDgp.test_param_in_exponent_and_elsewhereI  s   Sw?KKD!**R[[E2Q%ZLA401RVV$?w}}c2qww, 	RVV$?w}}c2qww,RVV$?w}}d3qww,r   c                 D   t        j                  d      }t        j                  d      }t        j                  ddd      }t        j                  ddd      }|||z  z  }||z  ||z  z  }||z   }t        j                  t        j                  ||d|z              }||k(  |d	k(  g}	t        j
                  ||	      }
|
j                  t        dd
       | j                  |
j                  d       | j                  |j                  d       | j                  |j                  d	       d|_	        |
j                  t        dd
       | j                  |
j                  d       | j                  |j                  d       | j                  |j                  d	       y NTr   r   r   r'  r  r   rD   r  r  g      ?rC   g      ?)
r   r   r	   r   minimumr8   rG   r  rI   rF   r   r   r   r   r   r  r   posyr   r!  r   s              r   test_minimumzTestDgp.test_minimum]  sP   KKD!KKD!Sw?||Cf=AuHq1e8#u}kk"**UE1T6:;u*a3h'jjf%		&Tt	4syy*<=qww,qww,		&Tt	4syy*=>qww,qww,r   c           
      l   t        j                  d      }t        j                  d      }t        j                  ddd      }t        j                  ddd      }|||z  z  }||z  ||z  z  }||z   }t        j                  t        j                  t        j
                  ||d|z  g                  }||k(  |d	k(  g}	t        j                  ||	      }
|
j                  t        dd
       | j                  |
j                  d       | j                  |j                  d       | j                  |j                  d	       d|_
        |
j                  t        dd
       | j                  |
j                  d       | j                  |j                  d       | j                  |j                  d	       y r+  )r   r   r	   r   minr   r8   rG   r  rI   rF   r-  s              r   test_minzTestDgp.test_minw  s\   KKD!KKD!Sw?||Cf=AuHq1e8#u}kk"&&E5!D&+A!BCDu*a3h'jjf%		&Tt	4syy*<=qww,qww,		&Tt	4syy*=>qww,qww,r   c                 "   t        j                  dd      }t        j                  dd      }t        j                  d      }t        j                  d      }t        j                  t        j                  ||z        ||z  |k  ||k\  g      }| j                  |j                  t        dd      d       | j                  |j                  d       | j                  |j                  d       d|_        t        j                  t        j                  ||z        ||z  |k  ||k\  g      }| j                  |j                  t        dd      d	       | j                  |j                  d
       | j                  |j                  d       y )NTr  r   r   r   r  gUUUUUU?rC   gUUUUUU?gUUUUUU?)	r   r	   r   r8   r9   rI   rG   r  rF   )r   r   r   r   r   r   s         r   test_divzTestDgp.test_div  s5   S1||C0KKD!KKD!JJr{{1q5)AeGqL!t)+DEqwwv$DwI(	*qww	2qww,
JJr{{1q5)AeGqL!t)+DEqwwv$DwI(	*qww	2qww,r   c                 :   t        j                  d      }t        j                  |      }t        j                  dd      }t        j                  ||z         dk\  g}t        j
                  ||      }|j                  t        dd       | j                  |j                  d       | j                  |j                  d       d|_	        |j                  t        dd       | j                  |j                  d       | j                  |j                  d       y )	NTr   g?r   g?r  r   g?)
r   r   r   r	   one_minus_posr8   rG   r  rI   rF   )r   r   r   r   r!  r=   s         r   test_one_minus_poszTestDgp.test_one_minus_pos  s    KKD!kk!nS1""519-45**S&)f48w}}c2qww,f48w}}c2qww,r   c           
         t        j                  dd      }t        j                  t        j                  |            }t	        t        ddgddgddgddgddgg       }t        j                  g d      }||   |k(  |d   |d	   z  |d
   z  |d   z  dk(  g}t        j                  ||      }|j                  t        d       |j                  }t        j                  |j                  dd|z        }||   |k(  |d   |d	   z  |d
   z  |d   z  dk(  g}t        j                  ||      }|j                  t        dd       ||_        |j                  t        dd       | j                  |j                  |       y )Nr   Tr   r   rM   rD   )r   ffffff?皙?皙	@皙@)r   rD   )rD   r   )rD   rM   rL   r   r   r   r   r   rF   r  )r   r   r9   pf_eigenvaluetupleziprw   r   r8   rG   r  rF   r	   r   rI   )	r   r   r   known_indicesknown_valuesr!  r=   optimal_valueparams	            r   test_pf_matrix_completionz!TestDgp.test_pf_matrix_completion  s~   KKD)kk"**1-.cQFQFQFQFQF#KLMxx 9:
M
l
*
D'AdG
ag
%$
/3
6
 **S&)f&<#5#54#&|#35 M
e
#
D'AdG
ag
%$
/3
6
 **S&)f48 #f48w}}m<r   c                 r   t        j                  dd      }t        j                  dd      }t        j                  dd      }t        j                  |d   |z  |d   |z  |d   |z  g      }t        j                  t        j                  ||dz        t        j                  |dz  |            }t        j
                  |      }|d	   d
k(  |d   dk(  |d   dk(  |d   dk(  |d   dk(  |d   |d   z  |d   z  d
k(  g}t        j                  t        j                  |      |      }|j                  t        d       |j                  }	t        j                  d      }
t        j                  t        j                  |||
z        t        j                  ||
z  |            }t        j
                  |      }t        j                  t        j                  |      |      }|j                  t        dd       d|
_
        |j                  t        dd       | j                  |j                  |	       y )Nr   Tr   r  r   rD   rM   g      )r   r   r   )r   rM   r9  r   r:  )rM   r   r;  rN   r<  r   g       r  r  )r   r   vstackr  r   r   r8   r9   rG   r  rF   r	   rI   )r   r   r   r   xyRrR   rS   r   rC  rD  s              r   test_rank_one_nmfzTestDgp.test_rank_one_nmf  s   KKD)KK$'KK$'YY!q!A$(AaD1H56JJ
++a"$
(
++aDk2
&( FF1I	
D'S.
D'S.
D'S.
D'S.
D'S.
A$1+!

#
 zz"++i0+>

6d
#

4(JJ
++a"%
)
++aElB
') FF1I	zz"++i0+>

6d
5 

6d
5tzz=9r   c                 &   t        j                  d      }t        j                  d      }t        j                  d      }t        j                  dd      }t        j                  dd      }t        j                  dd      }t        j                  dd      }||z  |z  }||z  |z  |z  ||z  |z  z   |k  |||z  k  |||z  k  ||k\  g}	t        j                  t        j                  |      |	      }
|
j                  t        dd       y )	NTr   r  r   rC   g      $@r   r  )r   r   r	   r8   r   rG   r  )r   r   r   r   r;   r   cdobjective_fnrS   r=   s              r   test_documentation_probzTestDgp.test_documentation_prob  s    KKD!KKD!KKD!LLT-LLT-LLT.LLT-1uqy
a%!)a-!a%!)
#q
(!qs(A1Ha1fF**R[[6Df48r   c                    t        j                  dd      }t        j                  d      }t        j                  d      }t        j                  t        j                  |      ||z  dk\  t        j
                  ||z         dk  g      }|j                  t        dd       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d	       d
|_	        |j                  t        dd       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       y )NTr   r   r      r-   r  rM   r   r  rD   )
r   r	   r   r8   r9   r   rG   r  rI   rF   r   r   wr   r=   s        r   test_sum_scalarzTestDgp.test_sum_scalar  s   S1KKD!KKD!**R[[^cQhuqy(9Q(>?Af48w}}a0qww*qww*f48w}}a0qww*qww*r   c                 r   t        j                  ddddg      }t        j                  dd      }t        j                  dd      }t        j                  t        j                  t        j
                  |            t        j                  ||      dk\  t        j
                  ||z         dk  g      }|j                  t        dd	       | j                  |j                  d       t        j                  j                  |j                  t        j                  d
d
g      d       t        j                  j                  |j                  t        j                  ddg      d       ddg|_
        |j                  t         j                  dd	       | j                  |j                  dd       t        j                  j                  |j                  t        j                  ddg      d       t        j                  j                  |j                  t        j                  ddg      d       y )NrM   Tr   r=  rM   r      re   r  r-   r\   r   r   r  (   r  rD   )r   r	   r   r8   r9   r   r   rG   r  rI   rF   rw   r   r   r   r   rR  s        r   test_sum_vectorzTestDgp.test_sum_vector  s   4T#sDKKt$KKt$**R[[3 kk!Q/25 ffUQY/2578 	f48w}}b1


&&qww!Q0@!&L


&&qww!Q0@!&LCjbkkd=w}}b;


&&qww"b0BA&N


&&qww!Q0@!&Lr   c                    t        j                  ddddg      }t        j                  dd      }t        j                  dd      }t        j                  t        j                  t        j
                  ||z               t        j                  ||      dk\  t        j                  ||z         dk  g      }|j                  t        dd	       t        j                  j                  |j                  t        j                  d
d
g      d       t        j                  j                  |j                  t        j                  ddg      d       | j                  |j                  d       ddg|_        |j                  t        dd	       t        j                  j                  |j                  t        j                  ddg      d       t        j                  j                  |j                  t        j                  ddg      d       t        j                  j                  |j                  dd       y )NrV  Tr   r=  rM   r   rW  re   r  r   r\   r   r-   H   r  rD   i  )r   r	   r   r8   r9   r   r   r   rG   r  rw   r   r   rF   r   rI   rR  s        r   test_sum_squares_vectorzTestDgp.test_sum_squares_vector'  s   4T#sDKKt$KKt$**R[[	)BC kk!Q/25 ffUQY/2578 	f48


&&qww!Q0@!&L


&&qww!Q0@!&Lw}}k:Cjf48


&&qww!Q0@!&L


&&qww"b0BA&N


&&w}}mQ&Or   c                    t        j                  dd      }t        j                  dd      }t        j                  dd      }t        j                  t        j                  |t        j
                  |      z        t        j                  ||      dk\  t        j
                  |      dk  g      }|j                  t        dd       t        j                  j                  |j                  d	d
       t        j                  j                  |j                  t        j                  ddgddgg      d
       t        j                  j                  |j                  t        j                  ddgddgg      d
       d|_        |j                  t        dd       t        j                  j                  |j                  dd
       t        j                  dd      }t        j                  dd      }t        j                  d      |_        d|_        t        j                  t        j                  t        j
                  ||z              ||k(  g      }|j                  t        dd       t        j                  j                  |j                  dd
       dt        j                  d      z  |_        |j                  t        dd       t        j                  j                  |j                  dd
       dt        j                  d      z  |_        |j                  t        dd       t        j                  j                  |j                  dd
       y )NrL   Tr   r   r   re   rW  r  rQ  r   r   rM   r-   rC      r         @r  g      (@)r   r   r	   r8   r9   r   r   rG   r  rw   r   r   rF   r   r   )r   rS  r   r   r=   s        r   test_sum_matrixzTestDgp.test_sum_matrix9  sd   KKD)KKD)S1**R[[rvvay9 kk!Q/25 ffQi2o/0 	f48


&&w}}a&C


&&qww1a&1a&9I0JTU&V


&&qww1a&1a&9I0JTU&Vf48


&&w}}b!&DKKD)LLT*''&/**R[[	):;a1fXFf48


&&w}}c1&E'f48


&&w}}c1&E'f48


&&w}}dA&Fr   c                 z   t        j                  dd      }t        j                  dd      }t        j                  t        j                  ||            }| j                  |j                  d             t        j                  |j                  |z        }| j                  |j                  d             y Nr   Tr   r4   )r   r   r	   r"   r   r   r   r   r   r   rL  rW   s       r   test_expzTestDgp.test_expY  s~    KKt$LL%vvbkk!Q'(-.vvaccAg-.r   c                 z   t        j                  dd      }t        j                  dd      }t        j                  t        j                  ||            }| j                  |j                  d             t        j                  |j                  |z        }| j                  |j                  d             y rb  )	r   r   r	   rV   r   r   r   r   r
   rc  s       r   test_logzTestDgp.test_logb  s    KKt$LL%vvbkk!Q'(-.vvaccAg./r   c                    t        j                  dd      }t        j                  d      }t        j                  ddgddgg      |_        t        j                  d	dg      }t        j                  ||      }t        j                  t        j                  d
      ||k(  g      }| j                  |j                  d             |j                  t         j                  dd       t        j                  t        j                  j                  |j
                  t        j                  |                  }| j!                  |j
                  |       t        j                  dd      }t        j                  ||      }| j#                  |j                  d             | j                  |j                  d             y )NrM   Tr   rL   )r   rD   r\   r   r4   r   F)r   r   r	   rw   r   rF   gmatmulr8   r9   r   r   rG   rH   r"   linalgrV   r   r
   )r   r   Ar   rW   r=   sltnx_pars           r   test_gmatmulzTestDgp.test_gmatmulk  s8   KKt$LLv&((RGaW-.HHaVzz!Q**R[[-	{;401RVV$?vvbiiooaggrvvay9:##AGGT2QD)zz!U#././r   r   )!r   r   r   r   r   r   r   r   r   r   r  r  r	  r  r  r  r"  r%  r)  r/  r2  r4  r7  rE  rJ  rO  rT  rY  r\  r`  rd  rf  ro  r   r   r   r   r   d  s    -(QRR3535014*?>?-@-@-(-4-4-&-=:":H9 +"M$P$G@/00r   r   c                   z    e Zd Z ej                         Z ej                         Z ej                         ZddZ	y)TestCallbackParamNc                     t        j                   fd      }t        j                  t        j                   j                         j                  |k\  g      }|j                         sJ d j                  _        d j                  _        |j                           j                   j                  j                  d       d j                  _        |j                           j                   j                  j                  d       t        j                  t        d      5  d|_        d d d        y # 1 sw Y   y xY w)	Nc                  ^     j                   j                   j                  j                  z  S r   )r   rF   r   )r   s   r   <lambda>z7TestCallbackParam.test_callback_param.<locals>.<lambda>  s    466<<$&&,,;V r   )callbackr   r  rC   r_  z'Cannot set the value of a CallbackParam)match)r   CallbackParamr8   r9   r   r   r   rF   r   rG   rI   r   r   NotImplementedError)r   callback_paramr=   s   `  r   test_callback_paramz%TestCallbackParam.test_callback_param  s    ))3VW**R[[0466^3K2LM~~tvv||S1tvv||S1]].6_` 	'#&N 	' 	' 	's   (D99Er   )
r   r   r   r   r   r   r	   r   r   rz  r   r   r   rq  rq  }  s.    AAA'r   rq  )r^   numpyrw   r   cvxpyr   cvxpy.errorr   cvxpy.tests.base_testr   r   r  r   r   rq  r   r   r   <module>r     sJ         *	R#h R#n
V0h V0r' 'r   