
    bic                     t   d dl Z d dlZd dlZd dlmZ d dlm	Z	  e j                  d       ej                  ej                  gZej                  dej                  diZej                  dej                  diZded	d
dfdedededededdfdZded	ddfdedededededdfdZ G d de	      Z G d de	      Zy)    N)BaseTestignoreepstol_gap_abs	max_itersmax_iterFh㈵>ư>g&.>gpsolve_methodsdeltaatolreturnc           	         |D ]e  }t         j                  j                  d       t        |   |i}| j	                         sv | j
                  dt        j                  |d|d|| | j                          | j                         D ],  }	t         j                  j                  |	j                  d       . | j	                         D ]0  }
|t        j                  j                  |
j                   z  |
_        2  | j
                  dt        j                  |d|d|| | j                          | j                         D cg c]  }|j                   }}| j                         D cg c]  }|j                   }}i }| j	                         D ]0  }
|
j                  ||
<   |
xj                  |
j                  z  c_        2  | j
                  d||d|| t!        | j                         |      D cg c]  \  }}|j                  |z
   }}}t!        ||      D ]'  \  }}t         j                  j#                  |||       ) | j	                         D ]  }
||
   |
_         h yc c}w c c}w c c}}w )	zAChecks the analytical derivative against a numerical computation.r   T)solverr   requires_gradsolve_method        r   r   r   N )nprandomseedEPS_NAME
parameterssolvesDIFFCP
derivative	variablestestingassert_equalr   randnshapevaluezipassert_allclose)problemr   r   r   r   r   kwargsr   eps_optvariableparamvvariable_valuesdeltas
old_values	old_value
num_deltas
analytical	numericals                      V/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/cvxpy/tests/test_derivative.pyperturbcheckr7      sb      !,
		qF#S)!!#GMM /bSY /#/'-/ #--/ =

''<= '') 	@E"))//5;;"??EK	@ 	+QXX"Dv 	+	+#)	+,3,=,=,?@q177@@#*#4#4#67a!''77 
'') 	'E %JuKK5;;&K	' 	@V@g@@ 7$$&8:$2Q	AGGi:
 : &)%< 	I!J	JJ&&z94&H	I '') 	,E$U+EK	,A!,  A7:s   I-*I28I7-C6?c           	         |D ]q  }t         |   |i}|t        j                  k(  r	d|vrd|d<   t        d | j	                         D              }	t        j                  |	      }
d}| j	                         D ]~  }t        j                  |j                        j                         |
|||j                  z    |
|||j                  z    j                  |j                        |_        ||j                  z  } t        j                  |
j                        }t        |
j                        D ]  }|
|   }|d|z  z   |
|<    | j                  d||d|| t        j                  | j!                         D cg c]  }|j                  j                          c}      }|d|z  z
  |
|<    | j                  d||d|| t        j                  | j!                         D cg c]  }|j                  j                          c}      }t        j                  |      t        j                  |      z
  |z  ||<   ||
|<    g }d}| j	                         D ]K  }|j#                  ||||j                  z    j                  |j                               ||j                  z  }M i }| j!                         D ]  }|j$                  ||<   d|_          | j                  dt        j&                  d||d	|| | j)                          t+        | j	                         |      D ]1  \  }}t
        j,                  j/                  |j$                  ||
       3 | j!                         D ]  }||   |_         t yc c}w c c}w )zIChecks the analytical adjoint derivative against a numerical computation.r   i:  c              3   4   K   | ]  }|j                     y w)N)size).0ps     r6   	<genexpr>zgradcheck.<locals>.<genexpr>D   s     8a1668s   r         ?r   NT)r   r   r   r   r   r   )r   r   SCSsumr   r   zerosasarrayr&   flattenr;   reshaper%   ranger   concatenater!   appendgradientr   backwardr'   r"   r(   )r)   r   r   r   r   r   r*   r   r+   r;   valuesoffsetr-   numgradioldx
left_solnsright_solnsnumgradsold_gradientss                        r6   	gradcheckrU   ;   sB      /*F#S)QUU?{&8"(F;87#5#5#788$'') 	!E13EKK1H1P1P1RF6&5::-. (;<DDU[[QEKejj F	!
 ((6<<(v{{# 	A)CcEk)F1IGMMDBD'DVDGDUDUDW(Xq):(XYJcEk)F1IGMMDBD'DVD..WEVEVEX)Y!''//*;)YZK&&,rvvk/BBeKGAJF1I	 '') 	!EOOv

23;;EKKHJejj F	!
 ""$ 	A zzM!AJ	 	 	+QXXTbv 	+	+#)	+!'"4"4"6A 	KNE7JJ&&u~~wT&J	K ""$ 	*A&q)AJ	*]/*( )Y *Zs   6!M9!!M>c                       e Zd ZdZddZddZddZddZddZddZ	dd	Z
dd
ZddZddZddZddZddZddZy)TestBackward1Test problem.backward() and problem.derivative().Nc                 R    	 dd l }| y # t        $ r | j                  d       Y y w xY wNr   zdiffcp not installed.diffcpModuleNotFoundErrorskipTestselfr\   s     r6   setUpzTestBackward.setUpr   )    	3" 	3MM12	3   	 &&c                 
   t        j                         }t        j                         }t        j                  |d|z  z
        }t        j                  t        j
                  |      |dk\  g      }d|_        |j                  t         j                  dd       | j                  |j                  d       |j                          | j                  |j                  d       d	|_        |j                          | j                  |j                  d
       t        |d       t        |d       |j                  t         j                  dd       d|_        |j                          | j                  |j                  d       y )N   r         @T绽|=)r   r   r   g      @       @      @g       @r8   r   MbP?gMb`?)cp	ParameterVariablesquareProblemMinimizer&   r   r   assertAlmostEqualrJ   rI   rU   r7   r   r    )r`   brP   	quadraticr)   s        r6   test_scalar_quadraticz"TestBackward.test_scalar_quadraticy   s   LLNKKMIIa!a%i(	**R[[3a1fX>RYYdFqww+ 	qzz2.
qzz2.'%W4(RYYdFqww-    c                    t         j                  j                  d       d}t        j                  |      }t        j
                  ||f      }t        j
                  |d      }t        j                  t        j                  ||z  |z
  d            }t        j                  |      }| j                  |j                                t         j                  j                  ||      }|j                  |z  t        j                  |      z   |_        t         j                  j                  |      |_        t        |       t!        |       y )Nr      rr   name   r=   )r   r   r   rk   rm   rl   rp   pnormro   
assertTrueis_dppr$   Teyer&   rU   r7   )r`   nrP   Arr   	objectiver)   Ls           r6   test_l1_squarezTestBackward.test_l1_square   s    
		qKKNLL!Q LL%KKQa 89	**Y'()IIOOAq!##'BFF1I%))//!$'Wru   c                 `   t         j                  j                  d       d\  }}t        j                  |      }t        j
                  ||f      }t        j
                  |d      }t        j                  t        j                  ||z  |z
  d            }t        j                  |      }| j                  |j                                t         j                  j                  ||      |_        t         j                  j                  |      |_        t        |d       t        |d       y )	Nr   )rw   re   rr   rx   rz   r{   rj   r   )r   r   r   rk   rm   rl   rp   r|   ro   r}   r~   r$   r&   rU   r7   )r`   mr   rP   r   rr   r   r)   s           r6   test_l1_rectanglezTestBackward.test_l1_rectangle   s    
		q1KKNLL!Q LL%KKQa 89	**Y'()))//!Q'))//!$'%W4(ru   c                    t         j                  j                  d       d\  }}t        j                  ||f      }t        j                  |      }t        j
                  |      }t        j                  ||z  |z
        t        j                  |      z   }t        j                  t        j                  |            }t         j                  j                  ||      |_
        t         j                  j                  |      |_
        t        |t        j                  g       t        |t        j                  g       y )Nr         r   )r   r   r   rk   rl   rm   sum_squaresro   rp   r$   r&   rU   r   r@   r7   r`   r   r   r   rr   rP   objr)   s           r6   test_least_squareszTestBackward.test_least_squares   s    
		q1LL!Q LLOKKNnnQUQY'"..*;;**R[[-.))//!Q'))//!$'!%%1WQUUG4ru   c                     t         j                  j                  d       d\  }}t         j                  j                  ||      }t         j                  j                  |d      }d }t        j                   |||z  t         j                  j                  |d      dz  z               }t        j                  |df      }t        j                  ||f      }t        j                  d      }	t        j                  t        j                  |||z        t        j                  t        j                  t        j                  |df      ||z  g      j                  dd      j                  z
        }
t        j                  t        j                  |
 |	t        j                   |      z  z               }||_        d|	_        t%        |t&        j(                  gd	d
       t+        |t&        j(                  gd       y )Nr   )r   re   rz   c                 :    ddt        j                  |        z   z  S )Nrz   )r   exp)zs    r6   sigmoidz6TestBackward.test_logistic_regression.<locals>.sigmoid   s    BFFA2J''ru   r?   T)nonneg)axiskeepdims皙?:0yE>r   r   r   r8   r   r   )r   r   r   r$   roundrk   rm   rl   rA   multiplylog_sum_exphstackrB   r   ro   rp   r   r&   rU   r   r@   r7   )r`   Nr   X_npa_truer   yaXlamlog_likelihoodr)   s               r6   test_logistic_regressionz%TestBackward.test_logistic_regression   st   
		q1yyq!$A&	( HHWTF]RYY__Q-BS-HHIJKKALL!Q ll$'KK1q5!NN299bhh1v&6A%>?AA$(**+!,

 **KK#q0A*AABD	'!%%tFWQUUG$?ru   c                    t         j                  j                  d       d\  }}}t         j                  j                  |      }t         j                  j	                  ||      }|j                  |      }t         j                  j	                  ||      }|j                  |      t         j                  j                  |      z   }t        j                  |      }	t        j                  ||f      }
t        j                  |      }t        j                  ||f      }t        j                  |      }t        j                  t        j                  t        j                  |	            t        j                  |	      z
        }|
|	z  |k(  ||	z  |k  g}t        j                  ||      }||
_        ||_        ||_        ||_        t        |t         j"                  gddd       t%        |t         j"                  gd       y )	Nr   )r   rw   re   {Gz?r   '  )r   r   r   r   r8   r   )r   r   r   randr$   dotrk   rm   rl   MaximizerA   entrr   ro   r&   rU   r   r@   r7   )r`   r   r   r=   tmpA_npb_npF_npg_nprP   r   rr   Fgr   constraintsr)   s                    r6   test_entropy_maximizationz&TestBackward.test_entropy_maximization   sm   
		q1aiinnQyyq!$xx}yyq!$xx}ryy~~a00KKNLL!Q LLOLL!Q LLOkk"&&,r~~a/@@A1uz1uz#**S+.'!%%tQWXWQUUG$?ru   c                    t         j                  j                  d       d}t        j                  d      }t        j
                  d      }| |z  t        j                  t        j                  |            z
  t        j                  t        j                  d|z
              z
  }t        j                  |      |k(  g}t        j                  t        j                  |      |      }t        j                  g d      |_        t        |t        j                  gd       t        |t        j                  gd       y )	Nr   re            ?)r         r   r   r   r   r8   )r   r   r   rk   rl   rm   rA   r   ro   rp   arrayr&   rU   r   r@   r7   )r`   krP   r   r   consr)   s          r6   test_lmlzTestBackward.test_lml   s    
		qLLOKKNb1frvvbggaj))BFF27726?,CCq	Q**R[[-t4((./'!%%t<WQUUG$?ru   c                 
   t         j                  j                  d       d}d}t        j                  ||f      }t        |      D cg c]  }t        j                  ||f       }}t        |      D cg c]  }t        j                  d       }}t         j                  j                  ||      |_        t        ||      D ]O  \  }}t         j                  j                  ||      |_        t         j                  j                  dd      |_        Q t        j                  ||fd      }	t        |      D 
cg c]#  }
t        j                  ||
   |	z        ||
   k(  % }}
t        j                  t        j                  t        j                  ||	z        t        j                  |	      z         |      }t        |t        j                   gdd	       t#        |t        j                   g
       y c c}w c c}w c c}
w )Nr   rw   rz   rz   rz   T)PSDrj   rg   r   r   )r   r   r   rk   rl   rF   r$   r&   r'   rm   tracero   rp   r   rU   r   r@   r7   )r`   r   r=   C_Asbsr   rr   r   rN   r   r)   s                r6   test_sdpzTestBackward.test_sdp  s|   
		qLL!Q ,1!H5qbllAq6"55,1!H5qbll6"55))//!Q'BK 	,DAqiiooa+AGiiooa+AG	, KKAD)=B1XFrxx1	*be3FF**R[[!a%2>>!;L)LM(*'!%%tGWQUUG4 65 Gs   G65G;<(H c                 <   t         j                  j                  d       d\  }}t        j                  ||f      }t        j                  |      }t        j
                  |      }t        j                  ||z  |z
        t        j                  |      z   }t        j                  t        j                  |            }t         j                  j                  ||      |_
        t         j                  j                  |      |_
        |j                  t        j                         | j                  t        d      5  |j                          d d d        | j                  t        d      5  |j!                          d d d        y # 1 sw Y   9xY w# 1 sw Y   y xY w)Nr   r   zIbackward can only be called after calling solve with `requires_grad=True`zKderivative can only be called after calling solve with `requires_grad=True`)r   r   r   rk   rl   rm   r   ro   rp   r$   r&   r   r@   assertRaisesRegex
ValueErrorrJ   r    r   s           r6   test_forget_requires_gradz&TestBackward.test_forget_requires_grad  s7   
		q1LL!Q LLOKKNnnQUQY'"..*;;**R[[-.))//!Q'))//!$bff##J%FG 	 	 ##J%FG 	!  	! 	!		 		! 	!s   =F,FFFc                    t        j                         }t        j                         }t        j                  t        j                  |      |dk\  |dk  g      }d|_        |j                  t         j                  d       | j                  t         j                  d      5  |j                          d d d        | j                  t        d      5  |j                          d d d        y # 1 sw Y   9xY w# 1 sw Y   y xY w)Nrz   Tr   r   .Backpropagating through infeasible/unbounded.*.Differentiating through infeasible/unbounded.*)rk   rm   rl   ro   rp   r&   r   r   r   SolverErrorrJ   r   r    r`   rP   r-   r)   s       r6   test_infeasiblezTestBackward.test_infeasible)  s    KKM**R[[/!q&!r'1BCRYYd;##BNN 5M N 		 ##J 1I J 	! 	! 	!	 		! 	!s   "C+C7+C47D c                    t        j                         }t        j                         }t        j                  t        j                  |      ||k  g      }d|_        |j                  t         j                  d       | j                  t         j                  j                  d      5  |j                          d d d        | j                  t        d      5  |j                          d d d        y # 1 sw Y   9xY w# 1 sw Y   y xY w)Nrz   Tr   r   r   )rk   rm   rl   ro   rp   r&   r   r   r   errorr   rJ   r   r    r   s       r6   test_unboundedzTestBackward.test_unbounded6  s    KKM**R[[^a5j\:RYYd;##BHH$8$8 ;S T 		 ##J 1I J 	! 	! 	!	 		! 	!s   (C1C=1C:=Dc                 T   t        j                         }t        j                         }t        j                  t        j                  |      ||k  g      }d|_        | j                  t        d      5  |j                  t         j                  d       d d d        y # 1 sw Y   y xY w)Nrz   z>When requires_grad is True, the only supported solver is SCS.*T)r   )
rk   rm   rl   ro   rp   r&   r   r   r   CLARABELr   s       r6   test_unsupported_solverz$TestBackward.test_unsupported_solverC  s    KKM**R[[^a5j\:##J%EF 	; MM"++TM:	; 	; 	;s   3"BB'c                 f   t        j                         }t        j                         }d|_        t        j                  t        j
                  |      ||z  dk\  g      }|j                  t         j                        \  }}}|t        j                     }| j                  d|j                         y )Nr   r   )rk   rm   rl   r&   ro   rp   get_problem_datar   r   r   assertIndata)r`   rP   r-   r)   r   r   r   s          r6   test_zero_in_problem_dataz&TestBackward.test_zero_in_problem_dataM  s{    KKM**R[[^eai1n-=>--bii8
aIc166"ru   r   N)__name__
__module____qualname____doc__ra   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   ru   r6   rW   rW   p   sN    ;3.0 )5@6@4@5(!(!!;#ru   rW   c                       e Zd ZdZddZddZddZddZddZddZ	dd	Z
dd
ZddZddZddZddZddZddZddZddZddZddZy)TestBackwardDgprX   Nc                 R    	 dd l }| y # t        $ r | j                  d       Y y w xY wrZ   r[   r_   s     r6   ra   zTestBackwardDgp.setUpY  rb   rc   c                    t        j                  d      }t        j                  d      }t        j                  |      }t        j                  |      |dz  k\  g}t        j
                  ||      }d|_        d|_        |j                  t         j                  ddd       | j                  |j                  dd	       |j                          |j                          | j                  |j                  d
d	       | j                  |j                  dd	       t        |dt        j                   gd       t#        |dt        j                   gd       d|_        d|_        |j                  t         j                  ddd       |j                          |j                          | j                  |j                  dd	       | j                  |j                  dd	       | j                  |j                  dd	       t        |dt        j                   gd       t#        |dt        j                   gd       y )NTposre   皙?r	   r   r   r   r   gzG?rw   placesggrj   r   r   r   r?   g      ?r   gh㈵侩rk   rl   rm   r   one_minus_posro   r&   r   r   r   rq   rJ   r    rI   rU   r   r@   r7   r`   alpharP   r   constrr)   s         r6   test_one_minus_analyticz'TestBackwardDgp.test_one_minus_analytic`  s    &KKD!KKN	""1%12**Y/RYY4tNqww
1=u~~va@qwwA>'d155'EWaeeW4HRYY4tNqww
1=u~~va@qwwA>'d155'EWaeeW4Hru   c                 P   d}t        j                         }t        j                  d      }t        j                  |      }t        j                  |      t        j
                  |      |z  k\  g}t        j                  ||      }d|_        d|_        |j                  t         j                  ddd       | j                  |j                  d|dz  z
         |j                          |j                          | j                  |j                  t        j                   |       |dz  z         | j                  |j                  |j                  dz  d	
       t#        |dt$        j&                  gd       t)        |dt$        j&                  gd       d|_        d|_        |j                  t         j                  ddd       | j                  |j                  d|dz  z
         |j                          |j                          | j                  |j                  t        j                   |       |dz  z         | j                  |j                  |j                  dz  d	
       t#        |dt$        j&                  gd       t)        |dt$        j&                  gd       y )Nrh   Tr   r   r	   r
   r   rz   rw   r   rj   r   g333333)rk   rl   rm   r   r   Constantro   r&   r   r   r   rq   rJ   r    rI   r   logrU   r   r@   r7   r`   baser   rP   r   r   r)   s          r6   test_analytic_param_in_exponentz/TestBackwardDgp.test_analytic_param_in_exponent  s    KKD!KKN	""1%T):E)AAB**Y/RYY4tNqwwD4L(89u~~t}TD\/IJqwwt(;AF'd155'EWaeeW4HRYY4tNqwwD4L(89u~~t}TD\/IJqwwt(;AF'd155'EWaeeW4Hru   c                    t        j                  d      }t        j                  d      }t        j                  |      }t        j                  |      |dz  |dz  z   k\  g}t        j
                  ||      }d|_        d|_        |j                  t         j                  ddd       | j                  |j                  d	       |j                          |j                          | j                  |j                  d
       | j                  |j                  |j                  dz         t        |dt        j                   gd       t#        |dt        j                   gd       y )NTr   re   rw   r   r	   r
   r   gE?g|Gzrj   r   r   r   s         r6   test_param_used_twicez%TestBackwardDgp.test_param_used_twice  s    &KKD!KKN	""1%E1H)<<=**Y/RYY4tNqww(;<u~~/@Aqwwt(;<'d155'EWaeeW4Hru   c                    d}t        j                  dd      }t        j                  d      }t        j                  |      }t        j                  |      t        j
                  |      |z  |dz  z   k\  g}t        j                  ||      }d|_        |j                  t         j                  ddd       | j                  |j                  d	|dz  z
  d
z
         |j                          |j                          | j                  |j                  t        j                   |       |dz  z  dz
         | j                  |j                  |j                  dz  d       y )N333333?Tr?   r   r&   r   re   r	   r   rz   g      ?r   rw   r   )rk   rl   rm   r   r   r   ro   r   r   r   rq   r&   rJ   r    rI   r   r   r   s          r6   )test_param_used_in_exponent_and_elsewherez9TestBackwardDgp.test_param_used_in_exponent_and_elsewhere  s    S1KKD!KKN	""1%T):E)AE1H)LLM**Y/RYY4tNqwwD3K&(@Au~~t}TC[/H5/PQqwwt(;AFru   c                    t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                         }|||z  ||z  z   ||z  z   z  |k  |||z  k\  g}t        j                  t        j                  d||z  |z  z        |      }| j                  |j                  d             d|_        d|_        d|_        t        |dt        j                  gd	       t        |dt        j                  gd	       y )
NTr   rz   )dpprh   r   r?   rj   r   )rk   rm   rl   ro   rp   r}   is_dgpr&   rU   r   r@   r7   )	r`   rP   r   r   r   rr   cr   r)   s	            r6   test_basic_gpzTestBackwardDgp.test_basic_gp  s    KKD!KKD!KKD!LLT"LLT"LLN!A#!)ac/*a/ad;**R[[AaCE3[A401'd155'EWaeeW4Hru   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
                  |	|
      }t        |dd	
       t        |dd	
       y )NTr   r?   r&   rf   r  r   ri   rj   )r   r   )rk   rm   rl   rp   maximumro   rU   r7   r`   rP   r   r   rr   r  dprod1prod2r   r   r)   s               r6   test_maximumzTestBackwardDgp.test_maximum  s    KKD!KKD!LLs#LLT-LLT-LLT-AqDA1kk"**UE23q&!q&!**S&)'d.WD1ru   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  z  }t        j                  t        j                  t        j
                  ||g                  }	||k(  ||k(  g}
t        j                  |	|
      }t        |d	       t        |d	       y )
NTr   r?   r  g      ?r  rf   r   r   )	rk   rm   rl   rp   maxr   ro   rU   r7   r  s               r6   test_maxzTestBackwardDgp.test_max  s    KKD!KKD!LLs#LLT-LLT-LLT-A1A1kk"&&E5>!:;<q&!q&!**S&)'d#W&ru   c                 Z   t        j                  d      }t        j                  d      }t        j                  dd      }t        j                  dd      }t        j                  t        j                  ||z        ||z  |k  ||k\  g      }t        |d       t        |d       y )NTr   rw   r  rz   r  )rk   rm   rl   ro   rp   rU   r7   )r`   rP   r   r   rr   r)   s         r6   test_divzTestBackwardDgp.test_div  s    KKD!KKD!LLT+LLT+**R[[Q/!A#(AF1CD'd#W&ru   c                    t        j                  d      }t        j                  dd      }t        j                  dd      }t        j                  |      }t        j                  ||z        ||z  k\  g}t        j
                  ||      }t        |dt        j                  gd       t        |dt        j                  gd       y )NTr   rw   r  r   rj   r   )
rk   rm   rl   r   r   ro   rU   r   r@   r7   )r`   rP   r   rr   r   r   r)   s          r6   test_one_minus_posz"TestBackwardDgp.test_one_minus_pos  s    KKD!LLT+LLT-kk!n""1Q3'1Q3./**S&)'d155'EWaeeW4Hru   c                    t        j                  d      }t        j                  d      }t        j                  dd      }t        j                  dd      }t        j                  dd      }t        j                  ||z        }|t        j                  ||z        z  |z  |k\  |||z  k\  g}t        j
                  ||      }t        |dt        j                  gd       t        |t        j                  gdd	       y )
NTr   re   r  rz   rw   rj   r   )r   r   r   )
rk   rm   rl   rp   r   ro   rU   r   r@   r7   )	r`   rP   r   r   rr   r  r   r   r)   s	            r6    test_paper_example_one_minus_posz0TestBackwardDgp.test_paper_example_one_minus_pos  s    KKD!KKD!LLT+LLT+LLT+kk!a% r''A..1491!8D**S&)'d155'EWQUUG4Hru   c                    t        j                  dd      }t        j                  dd      }t        j                  t        j                  t        j
                  |d                  }t        j                  |      |k(  t        j                  |d   |d	   g      d
|z  k(  g}t        j                  ||      }t        |d       t        |d       y )Nre   re   Tr   r   r  r   )orderr   rz   rz   r   re   r  )rk   rm   rl   rp   geo_meanvecdiagr   ro   rU   r7   )r`   r   r   r   r   r)   s         r6   test_matrix_constraintz&TestBackwardDgp.test_matrix_constraint  s    KKD)LLT-kk"++bffQc&:;<''!*/))QtWag./1Q368**S&)'d#W&ru   c                    t        j                  d      }t        j                  d      }t        j                  dd      }t        j                  dd      }t        j                  ||z        }t        j                  ||z  |z        t        j
                  ||z        k  g}t        j                  ||      }t        |dt        j                  gdd       t        |dt        j                  gdd	       y )
NTr   g?r  r  r   r   r   r   r   r   i  )rk   rm   rl   rp   r   r   ro   rU   r   r@   r7   )r`   rP   r   r   rr   r   r   r)   s           r6   test_paper_example_exp_logz*TestBackwardDgp.test_paper_example_exp_log(  s    KKD!KKD!LLT-LLT-kk!a% &&1Q-266!A#;./**S&)'d155'PVWWaeeW4SWXru   c           
      J   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      }t        j                  |j                  d|      }t        j                  dd	
      }||   |k(  |d   |d   z  |d   z  |d   z  |k(  g}t        j                  ||      }t        |dt        j                  gd       t        |dt        j                  gd       y )Nrw   rw   Tr   r   re   rz   )r   ffffff?皙?皙	@皙@r%   r   r&   r   r  r  r   )rz   re   r  r   r   r8   )rk   rm   rp   rA   tupler'   r   r   rl   r%   ro   rU   r   r@   r7   )	r`   r   r   known_indicesknown_valuesr-   betar   r)   s	            r6   test_matrix_completionz&TestBackwardDgp.test_matrix_completion3  s   KKD) kk"&&)$cQFQFQFQFQF#KLMxx 9:<#5#54#/1||C0
M
e
#
D'AdG
ag
%$
/4
7
 **S&)'d155'EWaeeW4Hru   c                 |   t        j                  dd      }t        j                  dd      }t        j                  dd      }t        j                  |d   |z  |d   |z  |d   |z  g      }t        j                  d	      }t        j                  dd
t	        j
                  g d            }t        j                  t        j                  |||z        t        j                  ||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                  |      |	      }
t        |
dt        j                  gdd       t        |
dt        j                  gdd       y )Nr)  Tr   )rw   r   rz   re   r   r  )   )r   r*  r+  r,  r-  r   )r   r%   r&   )r   r   )r   re   r   )re   r   rw   )re   rz   r   r   r     r&  )rk   rm   vstackrl   r   r   r  r   rA   ro   rp   rU   r   r@   r7   )r`   r   rP   r   xyr   rr   Rr   r   r)   s              r6   test_rank_one_nmfz!TestBackwardDgp.test_rank_one_nmfE  s   KKD)KK$'KK$'YY!q!A$(AaD1H56LLt$LLT!xx(FGIJJ
++a"!
%
++aAh
#% FF1I	
D'QqT/
D'QqT/
D'QqT/
D'QqT/
D'QqT/
A$1+!
!
$
 **R[[3[A 	'd155'PTUWaeeW4SWXru   c                 n   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                  |      |	      }
t        |
dt        j                  gd	       t        |
dt        j                  gd	       y )
NTr   ri   r  rh   g      $@r   r   r   )	rk   rm   rl   ro   r   rU   r   r@   r7   )r`   rP   r   r   r   rr   r  r  objective_fnr   r)   s              r6   test_documentation_probz'TestBackwardDgp.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'd155'EWaeeW4Hru   c                 N   t        j                  ddddg      }t        j                  dd      }t        j                  dd      }t        j                  dd	      }t        j                  dd	      }t        j                  t        j                  t        j
                  ||z               t        j                  ||      |k\  t        j                  ||z         |k  g      }t        |dt        j                  gd
d       t        |dt        j                  gd
d       y )N)re   Tr   r.  r   r  
   re   r   r   r6  r&  )rk   rl   rm   ro   rp   r   r   rA   rU   r   r@   r7   )r`   r   r2  kappawhr)   s          r6   test_sum_squares_vectorz'TestBackwardDgp.test_sum_squares_vectoro  s    4T#sD||B/R0KKt$KKt$**R[[	)BC kk!Q/47 ffUQY/58:; 	'd155'PTUWaeeW4SWXru   c                 >   t        j                  dd      }t        j                  dd      }t        j                  dd      }t        j                  dd      }t        j                  dd      }t        j                  t        j                  |t        j
                  |      z        t        j                  ||      |k\  t        j
                  |      |k  g      }t        |dt        j                  gd	       t        |dt        j                  gd	       y )
Nr  Tr   r   r  r   r?  r   r   )rk   rm   rl   ro   rp   rA   r   rU   r   r@   r7   )r`   rA  rB  r   r2  r@  r)   s          r6   test_sum_matrixzTestBackwardDgp.test_sum_matrix{  s    KKD)KKD)S1||B/R0**R[[rvvay9 kk!Q/47 ffQi5023 	'd155'EWaeeW4Hru   r   )r   r   r   r   ra   r   r   r   r  r	  r  r  r  r  r  r$  r'  r3  r:  r=  rC  rE  r   ru   r6   r   r   W  sn    ;3 ID!IFI,G&I"2 ' 'I
I'	YI$Y4I 
Y
Iru   r   )warningsnumpyr   cvxpyrk   cvxpy.settingssettingsr   cvxpy.tests.base_testr   filterwarningsr   r@   SOLVE_METHODSr   MAX_ITERS_NAMEboollistfloatr7   rU   rW   r   r   ru   r6   <module>rR     s       *    !QUU%EE5JJ' %%JJ
$ &+- $Dt%,d %,4 %,%,,1%,?D%,Z^%,P #(}!D2*4 2* 2*2*).2*<A2*W[2*jd#8 d#NnIh nIru   