
    bi
k                         d dl Zd dlZd dlZd dlmZ d dlmc mc m	Z
 d dlmZ d dlmZ d dlmZ d dlmZ ej&                  Z G d de      Zy)    N)AddExpression)solution)SOLVER_ERROR)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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))TestDgp2DcpNc                    t        j                  d      }t        j                  d      }||z  }t        j                  t        j                  |      g       }t         j                  j                  |      }|j                         }| j                  |j                  j                  t               | j                  t        |j                  j                  j                        d       | j                  |j                  j                  j                  d   t         j                         | j                  |j                  j                  j                  d   t         j                         |j                  t              }| j                  |t!        d              | j                  |j"                  d       |j%                  |j'                  |j(                               | j+                  |j,                  d       | j                  |j"                  d       |j/                          |j                  t        d	       | j+                  |j,                  d       | j                  |j"                  d       t        j                  t        j0                  |      g       }t         j                  j                  |      }|j                         }| j                  |j                  t              t!        d             | j                  |j"                  d       |j%                  |j'                  |j(                               | j                  |j,                  t!        d             | j                  |j"                  d       |j/                          |j                  t        d	       | j+                  |j,                  t!        d             | j                  |j"                  d       y )
NTpos   r      inf	unbounded        gp)cvxpyVariableProblemMinimize
reductionsDgp2DcpreduceassertIsInstance	objectiveexprr   assertEquallenargssolveSOLVERfloatstatusunpackretriever   assertAlmostEqualvalue_clear_solutionMaximize)selfxyproddgpdgp2dcpdcpopts           S/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/cvxpy/tests/test_dgp2dcp.pytest_unconstrained_monomialz'TestDgp2Dcp.test_unconstrained_monomial   s   NNt$NNt$1ummENN40"5""**3/nncmm00-@S]]//445q9cmm0055a8%..Icmm0055a8%..Iii 	uU|m,[1

7##CLL12syy#.[1		&T	"syy#.[1mmENN40"5""**3/nn6*E%L9[1

7##CLL12E%L1[1		&T	"syy%,7[1    c                 z   t        j                  d      }t        j                  t        j                  |      |dk(  g      }t         j                  j                  |      }|j                         }| j                  |j                  j                  t         j                         |j                  t              }| j                  |d       | j                  |j                         d   j                  d       |j                  |j!                  |j"                               | j                  |j                  d       | j                  |j                  d       |j%                          |j                  t        d       | j                  |j                  d       | j                  |j                  d       y )NTr
         ?r   r   r   )r   r   r   r   r   r   r   r   r   r   r    r!   r&   	variablesr'   r$   r%   r   r(   )r*   r+   r.   r/   r0   r1   s         r2   test_basic_equality_constraintz*TestDgp2Dcp.test_basic_equality_constraint8   s5   NNt$mmENN1-Sz:""**3/nncmm00%..AiisC(s}}q177=

7##CLL12syy#.qww,		&T	"syy#.qww,r4   c                 R   t        j                  dd      \  }}}d|z  |z  d|z  |z  z   d|z  |z  z   dk  |d|z  k\  g}t        j                  t        j                  d||z  |z  z        |      }|j	                  t
        d       | j                  d|j                  d	       y )
N   Tr
   r   r6   r   r   gGz./@places)r   r   r   r   r    r!   r&   r'   )r*   r+   r,   zconstraintsproblems         r2   test_basic_gpzTestDgp2Dcp.test_basic_gpK   s    ..401as1uqs1u}qs1u,3Q!A#X>--q!A#a%y 9;Gf&ugmmA>r4   c                 Z   t        j                  d      }t        j                  d      }||dz  z  }d|z  |dz  z  }t        j                  t        j                  ||            }|dk(  |dk(  g}t        j                  ||      }t         j
                  j                  |      }|j                         }	|	j                  t               |j                  |j                  |	j                               | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       |j                          |j                  t        d       | j                  |j                  dd	
       | j                  |j                  d       y NTr
         ?      @r6         @      @r      r<   )r   r   r   maximumr   r   r   r   r    r!   r$   r%   r   r&   r'   r(   
r*   r+   r,   prod1prod2objconstrr.   r/   r0   s
             r2   test_maximumzTestDgp2Dcp.test_maximumR   sF   NNt$NNt$AsF
a!S& nnU]]5%89s(AH%mmC(""**3/nn		&

7##CLL12syy#.qww,qww,		&T	"syy#a8qww,r4   c                    t        j                  d      j                  d      }t         j                  j	                  t        j
                  |      t        j
                  |      j                         t         j                  j	                  t        j
                  |d      t        j
                  |d      j                         t         j                  j	                  t        j
                  |d      t        j
                  |d      j                         t         j                  j	                  t        j
                  |dd      t        j
                  |dd      j                         t         j                  j	                  t        j
                  |dd      t        j
                  |dd      j                         t        j
                  |      }t        j                  ||j                        \  }}t         j                  j	                  t        j                  |      |j                         t        j
                  |d      }t        j                  ||j                        \  }}t         j                  j	                  t        j                  |d      |j                         t        j
                  |d      }t        j                  ||j                        \  }}t         j                  j	                  t        j                  |d      |j                         t        j
                  |dd      }t        j                  ||j                        \  }}t         j                  j	                  t        j                  |dd      |j                         t        j
                  |dd      }t        j                  ||j                        \  }}t         j                  j	                  t        j                  |dd      |j                         t        j                  d      }t         j                  j	                  t        j
                  |      t        j
                  |      j                         t         j                  j	                  t        j
                  |d      t        j
                  |d      j                         t        j
                  |      }t        j                  ||j                        \  }}t         j                  j	                  t        j                  |      |j                         t        j                  d	      }t        j                  d	      }||d
z  z  d|z  |d
z  z  z   }||d
z  z  d|dz  z  |d
z  z  z   }| j                  t        j
                  ||g      j                                | j                  t        j
                  ||g      j!                                | j                  t        j
                  |d|z  g      j#                                ||d
z  z  }	| j                  t        j
                  |	|	g      j%                                | j                  t        j
                  |	d|z  g      j!                                | j                  t        j
                  |	d|z  g      j                                y )N   )rH   r;   r   )axisr   T)rR   keepdims)rS   r
   rD   rE   r   )nparangereshapetestingassert_almost_equalr-   r   r'   dgp_atom_canon
prod_canonr   sumr   
assertTrueis_log_log_convexassertFalseis_log_log_concaveis_dgpis_log_log_affine)
r*   Xr-   X_canon_r+   r,   posy1posy2ms
             r2   	test_prodzTestDgp2Dcp.test_prodh   s   IIbM!!&)


&&rwwqz5::a=3F3FG


&&
''!!
ejj399	;


&&
''!!
ejj399	;


&&
''!!d
+
**QQ
.
4
4	6 	

&&
''!!d
+
**QQ
.
4
4	6 zz!}#..tTYY?



&&rvvay'--@zz!!$#..tTYY?



&&rvvaa'8'--Hzz!!$#..tTYY?



&&rvvaa'8'--Hzz!!d3#..tTYY?



&&
&&T
*GMM	; zz!!d3#..tTYY?



&&
&&T
*GMM	; IIbM


&&rwwqz5::a=3F3FG


&&rwwq4'@',zz!d'C'I'I	K zz!}#..tTYY?



&&rvvay'--@NNt$NNt$AsF
S1Wq#v--AsF
S16\AsF22

E5>2DDFGUEN3FFHIUAeG$45<<>?3J

Aq6*<<>?

Aqw<0CCEFQ%L1CCEFr4   c                    t        j                  d      }t        j                  d      }||dz  z  }d|z  |dz  z  }t        j                  t        j                  t        j                  ||g                  }|dk(  |dk(  g}t        j
                  ||      }t         j                  j                  |      }|j                         }	|	j                  t               |j                  |j                  |	j                               | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       |j!                          |j                  t        d       | j                  |j                  dd	
       | j                  |j                  d       y rC   )r   r   r   maxhstackr   r   r   r   r    r!   r$   r%   r   r&   r'   r(   rJ   s
             r2   test_maxzTestDgp2Dcp.test_max   sQ   NNt$NNt$AsF
a!S& nnUYYu||UEN'CDEs(AH%mmC(""**3/nn		&

7##CLL12syy#.qww,qww,		&T	"syy#a8qww,r4   c                    t        j                  d      }t        j                  d      }||dz  z  }d|z  |dz  z  }||z   }t        j                  t        j                  ||d|z              }|dk(  |dk(  g}t        j                  ||      }|j                  t        d       | j                  |j                  d	       | j                  |j                  d       | j                  |j                  d       y )
NTr
   rD   rE   r   r6   rF   r         ?)	r   r   r)   minimumr   r    r!   r&   r'   	r*   r+   r,   rK   rL   posyrM   rN   r.   s	            r2   test_minimumzTestDgp2Dcp.test_minimum   s    NNt$NNt$AsF
a!S& u}nnU]]5%4@As(AH%mmC(		&T	"syy*;<qww,qww,r4   c           
      (   t        j                  d      }t        j                  d      }||dz  z  }d|z  |dz  z  }||z   }t        j                  t        j                  t        j                  ||d|z  g                  }|dk(  |dk(  g}t        j
                  ||      }|j                  t        d       | j                  |j                  d	d
       | j                  |j                  d       | j                  |j                  d       y )NTr
   rD   rE   r   r6   rF   r   rn   rH   r<   )
r   r   r)   minrk   r   r    r!   r&   r'   rp   s	            r2   test_minzTestDgp2Dcp.test_min   s    NNt$NNt$AsF
a!S& u}nnUYYu||UE1T64J'KLMs(AH%mmC(		&T	"syy*;AFqww,qww,r4   c                    | j                  d       t        j                  dd      }t        j                  t        j                  |d            }|d   |d   z  |d   z  |d   z  d	k\  g}t        j
                  ||      }t        j                  j                  |      }|j                         }|j                  t               |j                  |j                  |j                               d
}| j                  |j                  |       | j                  |d   |d   z  |d   z  |d   z  j                  d	d       |j!                          |j                  t        d       | j                  |j                  |       | j                  |d   |d   z  |d   z  |d   z  j                  d	d       t        j                  dd      }t        j                  d      }t        j                  t        j                  |d      |z        }|d   |d   z  |d   z  |d   z  d	k\  g}t        j
                  ||      }t        j                  j                  |      }|j                         }|j                  t              }| j#                  |j                  t%        d              |j                  |j                  |j                               | j                  |j                  d       | j                  |j&                  d       |j!                          |j                  t        d       | j                  |j                  d       | j                  |j&                  d       t        j                  dd      }t        j                  t        j                  |d            }t        j
                  |g       }t        j                  j                  |      }|j                         }|j                  t              }| j#                  |j                  t%        d              |j                  |j                  |j                               | j                  |j                  d       | j                  |j&                  d       |j!                          |j                  t        d       | j                  |j                  d       | j                  |j&                  d       t        j                  dd      }t        j                  t        j                  t        j(                  d|d   dz  z  |d   dz  z  |d   |d   z  d|d   z  |d   dz  z  z   |d   g      d            }|d   |d   z  d	k\  g}t        j
                  ||      }t        j                  j                  |      }|j                         }|j                  t               |j                  |j                  |j                               d}| j                  |j                  |d       | j                  |d   |d   z  j                  dd       | j                  |d   j                  dd       |j!                          |j                  t        d       | j                  |j                  |d       | j                  |d   |d   z  j                  dd       | j                  |d   j                  dd       y )N,Enable test once sum_largest is implemented.rH   Tr
   r;   r   r   r      rG   r<   r   r   r   r   rD   g      <@g      0@)skipTestr   r   r   sum_largestr   r   r   r   r    r!   r$   r%   r   r&   r'   r(   r   r"   r#   rk   )	r*   r+   rM   rN   r.   r/   r0   r1   r,   s	            r2   test_sum_largestzTestDgp2Dcp.test_sum_largest   s   DENN4T*nnU..q!45A$1+!$qt+r12mmC(""**3/nn		&

7##CLL12syy#.!qtad 2QqT 9@@"&' 	 	)		&T	"syy#.!qtad 2QqT 9@@"&' 	 	) NN4T*NNt$nnU..q!4q89A$1+!$qt+r12mmC(""**3/nniiU5\M2

7##CLL12syy#.szz;7		&T	"syy#.szz;7 NN1$'nnU..q!45mmC$""**3/nniiU5\M2

7##CLL12syy#.szz;7		&T	"syy#.szz;7 NN4T*nnU..
,,AaD#I!c	1tad{S1Q4Z!A$'%991Q4A BCDF G A$1+#$mmC(""**3/nn		&

7##CLL12syy#a8!qt22DCqtzz3q9		&T	"syy#a8!qt22DCqtzz3q9r4   c                    t        j                  d      }t        j                  d      }t        j                  t        j                  ||z        |dz  |k  |dk\  g      }| j	                  |j                  t        d      d       | j	                  |j                  d       | j	                  |j                  d       y )NTr
   r;   r   r   gUUUUUU?r6   )r   r   r   r   r&   r    r!   r'   )r*   r+   r,   ps       r2   test_divzTestDgp2Dcp.test_div$  s    NNt$NNt$MM%..Q/Q3!8Q!V,.qwwv$w7Cqww,qww	2r4   c                    t        j                  dd      }g d}t        j                  ||      }t        j                  t        j                  |      g       }t         j
                  j                  |      }|j                         }|j                  t               | j                  |j                  t        d              |j                  |j                  |j                               | j                  |j                  d       | j                  |j                   d       |j#                          |j                  t        d       | j                  |j                  d       | j                  |j                   d       y )	Nr;   Tr
   )r   r   rD   r   r   r   r   )r   r   geo_meanr   r   r   r   r   r    r!   r   r'   r"   r$   r%   r   r#   r(   )r*   r+   r~   r   r.   r/   r0   s          r2   test_geo_meanzTestDgp2Dcp.test_geo_mean-  s   NN1$'>>!Q'mmENN84b9""**3/nn		&U5\M2

7##CLL12C([1		&T	"C([1r4   c                    t        j                  t        j                  dt        j                         z        g       }t	        j
                  t        j                  d      5  |j                  t        d       d d d        |j                  t               | j                  |j                  d       | j                  |j                  t        d              y # 1 sw Y   axY w)N      z*However, the problem does follow DCP rulesmatchTr   r   r   )r   r   r   r   pytestraiseserrorDGPErrorr    r!   r   r#   r'   r"   r*   r@   s     r2   )test_solving_non_dgp_problem_raises_errorz5TestDgp2Dcp.test_solving_non_dgp_problem_raises_error>  s    --tenn6F/F GL]]5>>1]^ 	+MM&TM*	+f5u6		+ 	+s   $CC%c                    t        j                  t        j                  t        j                  d      t        j                  d      z              }t	        j
                  t        j                  d      5  |j                  t        d       |j                  t               d d d        |j                  t        d       | j                  |j                  d       | j                  |j                  d       y # 1 sw Y   YxY w)NTr
   z*However, the problem does follow DGP rulesr   r   r   r   )r   r   r   r   r   r   r   DCPErrorr    r!   r   r#   r&   r'   r   s     r2   )test_solving_non_dcp_problem_raises_errorz5TestDgp2Dcp.test_solving_non_dcp_problem_raises_errorF  s    --
..D1ENNt4LL
M
 ]]5>>1]^ 	"MM&TM*MM&!	" 	f&5w}}c2	" 	"s   9-C>>Dc                    t        j                  d      }t        j                  t        j                  t        j                  |      t        j
                  |      z
              }| j                  t        j                  d      5  |j                  t               d d d        t        j                  d      }t        j                  t        j                  |      ||z  dk  g      }| j                  t        j                  d      5  |j                  t               d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr;   zThe objective is not DCPr+   )name   z%The following constraints are not DCP)r   r   r   r   r[   sum_squaresassertRaisesRegexr   r   r    r!   )r*   r+   r@   s      r2   3test_solving_non_dcp_problems_raises_detailed_errorz?TestDgp2Dcp.test_solving_non_dcp_problems_raises_detailed_errorR  s    NN1--uyy|e>O>OPQ>R/R ST##ENN4OP 	"MM&!	" NN$--q 1AEQJ<@##ENN4\] 	"MM&!	" 	"	" 	"
	" 	"s   D*D6*D36D?c                    t        j                  t        j                  g dg dg            }t        j                  t        j                  g dg dg            }||z   }t	        j
                  ||j                        \  }}| j                  t        |      d       | j                  |j                  |j                         t        j                  t        j                  |j                        t        j                  |j                        z         }t        j                  j                  ||j                         t        j                  t        j                  g dg dg            }t        j                  d      }||z   }t	        j
                  ||j                        \  }}| j                  t        |      d       | j                  |j                  |j                         t        j                  t        j                  |j                        t        j                  |j                        z         }t        j                  j                  ||j                         y )Nr6          @rE   rF         @rG   )r   rE   rF   )r   rG         @r   r   )r   ConstantrT   arrayrY   	add_canonr   r   r   shapelogexpr'   rW   rX   )r*   rb   YZcanon_matrixr?   expectedr,   s           r2   test_add_canonzTestDgp2Dcp.test_add_canon]  s   NN288_o$FGHNN288_o$FGHE$2$<$<Q$G!k[)1-++QWW566"&&/BFF177O;<


&&x1C1CD NN288_o$FGHNN3E$2$<$<Q$G!k[)1-++QWW566"&&/BFF177O;<


&&x1C1CDr4   c                 h   t        j                  t        j                  g dg dg            }t        j                  t        j                  dgdgdgg            }t        j                  ||      }t        j                  ||j                        \  }}| j                  t        |      d       | j                  |j                  d       t        j                  t        j                  d      t        j                  d      z   t        j                  d	      z         }t        j                  t        j                  d
      t        j                  d      z   t        j                  d      z         }| j                  ||d   j                         | j                  ||d   j                         y )Nr   r   r6   r   rE   r   r   r   rF   rG   r   r         "@r   r   r   r   )r   r   rT   r   matmulrY   mulexpression_canonr   r   r   r   r   r   r&   r'   )r*   rb   r   r   r   r?   first_entrysecond_entrys           r2   test_matmul_canonzTestDgp2Dcp.test_matmul_canonq  s1   NN288_o$FGHNN288cUSEC5$9:;LLA$2$F$F
QVV%!k[)1-++V4ffRVVC[266#;6DEvvbffSkBFF3K7"&&+EF{L,>,D,DE|\$-?-E-EFr4   c                    t        j                  t        j                  ddgddgg            }t        j                  |      }t        j                  ||j                        \  }}| j                  t        |      d       | j                  |j                                t        j                  t        j                  d      t        j                  d      z         }| j                  ||j                         y )Nr6   r   r   g      ,@r   )r   r   rT   r   tracerY   trace_canonr   r   r   r\   	is_scalarr   r   r&   r'   )r*   rb   r   canonr?   r   s         r2   test_trace_canonzTestDgp2Dcp.test_trace_canon~  s    NN288c3Z#t$=>?KKN+77166B{[)1-)*66"&&+t45x5r4   c                 V   t        j                  d      }t        j                  |      }t        j                  |      dk\  g}t        j                  ||      }|j                  t        d       | j                  |j                  d       | j                  |j                  d       y )NTr
   g?r   g333333?)	r   r   r)   one_minus_posr   r    r!   r&   r'   )r*   r+   rM   rN   r@   s        r2   test_one_minus_poszTestDgp2Dcp.test_one_minus_pos  s~    NNt$nnQ%%a(C/0--V,f&w}}c2qww,r4   c                 H   t        j                  d      }t        j                  t        j                  |            }d}| j	                  t
        j                        5 }|j                  dd       | j                  |t        |             d d d        y # 1 sw Y   y xY w)NTr
   zvWhen `gp=True`, `solver` must be a conic solver (received 'OSQP'); try calling `solve()` with `solver=cvxpy.CLARABEL`.OSQPsolverr   )
r   r   r   r   assertRaisesr   SolverErrorr    r   str)r*   r+   r@   	error_msgerrs        r2   test_qp_solver_not_allowedz&TestDgp2Dcp.test_qp_solver_not_allowed  s    NNt$--q 120	 u001 	2SMMDM1YC1	2 	2 	2s    /BB!c                    | j                  d       t        j                  dd      }|d   |d   |d   |d   f\  }}}}t        j                  t        j                  t        j
                  d|d	z  z  |d	z  z  ||z  d	|z  |dz  z  z   |g      d            }||z  |z  d
k\  g}t        j                  ||      }|j                  t        d       y )Nrw   rx   Tr
   r   r   r   r;   rD   ry   r   )	rz   r   r   r   r{   rk   r   r    r!   )	r*   r+   x0x1x2x3rM   rN   r~   s	            r2   test_paper_example_sum_largestz*TestDgp2Dcp.test_paper_example_sum_largest  s    DENN4T*A$!adAaD1BBnnU..
,,CK"c'!GcBhQ&&  	 
 r'B,"$%MM#v&	4 r4   c                 8   t        j                  d      }t        j                  d      }t        j                  ||z        }|t        j                  ||z        z  dz  dk\  ||dz  k\  g}t        j                  ||      }|j                  t        d       y )NTr
   r   r   r;   r   )r   r   r   r   r   r    r!   r*   r+   r,   rM   rN   r@   s         r2    test_paper_example_one_minus_posz,TestDgp2Dcp.test_paper_example_one_minus_pos  s    NNt$NNt$nnQU#u**1q511a71<a1Q3hG--V,f&r4   c                 r   t        j                  dd      }t        j                  t        j                  t        j                  |                  }t        j
                  t        j                  |            dk(  t        j
                  t        j                  |d   |d   g            dk(  g}t        j                  ||      }|j                  dd       t        j                  j                  |j                  dt        j                  d      z  d	
       | j                  |j                  d       y )Nr   r   Tr
   皙?r   r   r   SCSr   r   r;   decimal      @)r   r   r   r   eye_minus_invr   diagrk   r   r    rT   rW   rX   r'   onesr&   r*   rb   rM   rN   r@   s        r2    test_paper_example_eye_minus_invz,TestDgp2Dcp.test_paper_example_eye_minus_inv  s    NN6t,nnU[[)<)<Q)?@A..A/36..qw$.@!ABcIK--V,e,


&&qwwBGGFO0CQ&Ow}}d3r4   c                 &   t        j                  dd      }t        j                  t        j                  t        j                  |                  }t        j
                  |      dk(  t        j                  |d   |d   g      dk(  g}t        j                  ||      }|j                  dd       t        j                  j                  |j                  dt        j                  d      z  d	
       | j                  |j                  d       y )Nr   Tr
   r   r   r   CLARABELr   r;   r   r   )r   r   r   r   r   r   rk   r   r    rT   rW   rX   r'   r   r&   r   s        r2   test_simpler_eye_minus_invz&TestDgp2Dcp.test_simpler_eye_minus_inv  s    NN6t,nnU[[)<)<Q)?@A**Q-3&,,$412c9;--V,j1


&&qwwBGGFO0CQ&Ow}}d3r4   c                 D   t        j                  d      }t        j                  d      }t        j                  ||z        }t        j                  ||z        t        j                  |      k  g}t        j
                  ||      }|j                  t        d       y )NTr
   r   )r   r   r   r   r   r   r    r!   r   s         r2   test_paper_example_exp_logz&TestDgp2Dcp.test_paper_example_exp_log  sq    NNt$NNt$nnQU#))AaC.EIIaL01--V,f&r4   c           
      d   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       }||   g dk(  |d   |d	   z  |d
   z  |d   z  dk(  g}t        j                  ||      }|j                  t        d       y )Nr;   r;   Tr
   r   r   r   )r6   ffffff?皙?皙	@皙@r   r   )r   r   r   r6   r   )	r   r   r   pf_eigenvaluetuplezipr   r    r!   )r*   rb   rM   known_indicesrN   r@   s         r2   test_pf_matrix_completionz%TestDgp2Dcp.test_pf_matrix_completion  s    NN6t,nnU0034cQFQFQFQFQF#KLM
M
7
7
D'AdG
ag
%$
/3
6
 --V,f&r4   c                    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       y )Nr   Tr
   r:   r   r   r   r   r   r6   )r   r   r   r   r   r   )r   r   r   r   r   r   )
r   r   vstackrI   multiplyr[   r   r   r    r!   )	r*   rb   r+   r,   xyRr   r?   probs	            r2   test_rank_one_nmfzTestDgp2Dcp.test_rank_one_nmf  s&   NN6t,NN4T*NN4T*\\1Q4!8QqTAXqtax89MM
..RTN
+
..tb
)+ IIaL	
D'S.
D'S.
D'S.
D'S.
D'S.
A$1+!

#
 }}U^^I6D

6d
#r4   c                 l   t        j                  d      }t        j                  d      }t        j                  d      }||z  |z  }d|z  |z  |z  d|z  |z  z   dk  |d|z  k  |d|z  k  |dk\  g}t        j                  t        j                  |      |      }|j	                  t
        d       y )NTr
   rH   r   
   r   r   )r   r   r   r)   r    r!   )r*   r+   r,   r>   objective_fnr?   r@   s          r2   test_documentation_probz#TestDgp2Dcp.test_documentation_prob  s    NNt$NNt$NNt$1uqy
a%!)a-!a%!)
#r
)1!8Q!A#XqAvG--| <kJf&r4   c                    t        j                  d      }t        j                  d      }||z  }t        j                  t        j                  |      g       }t         j                  j                         }|j                  |      \  }}t        j                  t        d i i i       }|j                  ||      }	| j                  |	j                  t               y )NTr
   )r   r   r   r   r   r   applyr   Solutionr   invertr   r#   )
r*   r+   r,   r-   r.   r/   rd   inverse_datasolndgp_solns
             r2   test_solver_errorzTestDgp2Dcp.test_solver_error  s    NNt$NNt$1ummENN40"5""**,!--,<  tRR@>>$5,7r4   c                    t        j                  d      }t        j                  d      }t        j                  t        j                  |      ||z  dk\  t        j                  |      dk  g      }|j                  t        d       t        j                  j                  |j                  d       t        j                  j                  |j                  d       t        j                  j                  |j                  d       y )NTr
   r   r   r   r   )r   r   r   r   r[   r    r!   rT   rW   rX   r'   r*   whr@   s       r2   test_sum_scalarzTestDgp2Dcp.test_sum_scalar  s    NNt$NNt$--q 1!"1EIIaLA,= >@f&


&&w}}a8


&&qww2


&&qww2r4   c                    t        j                  dd      }t        j                  dd      }t        j                  t        j                  t        j                  |            t        j
                  ||      dk\  t        j                  |      dk  g      }|j                  t        d       t        j                  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 )
Nr   Tr
   r   r   rH   r;   r   r   r   r   r   r   r[   r   r    r!   rT   rW   rX   r'   r   r   s       r2   test_sum_vectorzTestDgp2Dcp.test_sum_vector  s    NN1$'NN1$'--uyy| <!&1!5!; %		! 2!45 	f&


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


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


&&qww!Q0@!&Lr4   c                    t        j                  dd      }t        j                  dd      }t        j                  t        j                  t        j                  |            t        j
                  ||      dk\  t        j                  |      dk  g      }|j                  t        d       t        j                  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 )
Nr   Tr
   r   r      r;   r   r   )r   r   r   r   r   r   r[   r    r!   rT   rW   rX   r'   r   r   s       r2   test_sum_squares_vectorz#TestDgp2Dcp.test_sum_squares_vector  s    NN1$'NN1$'--u/@/@/C D!&1!5!; %		! 2!45 	f&


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


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


&&qww!Q0@!&Lr4   c                    t        j                  dd      }t        j                  dd      }t        j                  t        j                  t        j                  |            t        j
                  ||      dk\  t        j                  |      dk  g      }|j                  t        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	       y )Nr   Tr
   r      r   r  r;   r   r   r   r  r   s       r2   test_sum_matrixzTestDgp2Dcp.test_sum_matrix&  s   NN6t,NN6t,--uyy| <!&1!5!; %		! 2!45 	f&


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


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


&&qww1a&1a&9I0JTU&Vr4   c                 @   t        j                  dd      }t        j                  d      }t        j                  t        j                  |      ||z  dk\  t        j                  |      dk  g      }|j                  t        d       t        j                  j                  |j                  d       t        j                  j                  |j                  d       t        j                  j                  |j                  t        j                  dgg             y )Nr   Tr
   r   r   r   r   )r   r   r   r   r   r    r!   rT   rW   rX   r'   r   r   s       r2   
test_tracezTestDgp2Dcp.test_trace1  s    NN6t,NNt$--q 1!"1EKKNa,? @Bf&


&&w}}a8


&&qww2


&&qww1#@r4   c                    t        j                  d      }d|_        t        j                  t        j                  |      g       }t         j
                  j                  |      }|j                         }| j                  |j                         d   j                  t        j                  |j                               t        j                  d      }t        j                  t        j                  |      ||k(  g      }|j                  t        d       | j                  |j                  d       d|_        |j                  t        d       | j                  |j                  d       y )NTr
   r6   r   r   r   )r   	Parameterr'   r   r   r   r   r   r&   
parametersrT   r   r   r    r!   )r*   paramr.   r/   r0   r+   r@   s          r2   test_parameterzTestDgp2Dcp.test_parameter;  s    D)mmENN5126""**3/nns~~/288"&&:MNNNt$--q 1AJ<@f&w}}c2f&w}}c2r4   c                 R   t        j                  dd      }d|_        t        j                  t        j                  |      g       }t         j
                  j                  |      }|j                         }| j                  |j                         d   j                         d       y )NTalpha)r   r   r6   r   )r   r  r'   r   r   r   r   r   r&   r  r   )r*   r  r.   r/   r0   s        r2   test_parameter_namezTestDgp2Dcp.test_parameter_nameL  sy    Dw7mmENN5126""**3/nns~~/27797Cr4   c                    t        j                  dd      }t        j                  ddgddgg      }t        j                  ddg      }t        j                  ||      }||_        | j                  |j
                  d	d
g       t        j                  d|      }| j                  t        j                  ||      j
                  d	d
g       d |_        t        j                  t        j                  d      ||k(  g      }|j                  t        d       t        j                  t        j                  j                  |t        j                  |                  }| j                  |j
                  |       y )Nr   Tr
   g      r   r6   g      r;   gF ې?g      ?r   )r'   r   )r   r   rT   r   gmatmulr'   assertItemsAlmostEqualr  r   r   r    r!   r   linalgr   )r*   r+   Abr   A_parr   sltns           r2   test_gmatmulzTestDgp2Dcp.test_gmatmulT  s   NN1$'HHsBi"c+,HHaV}}Q"##DJJT0BCa0##EMM%$;$A$A%/$6	8}}U^^C0419+>

&T
*vvbiiooa34##AGGT2r4   c                 F   t        j                  dd      }t        j                  ddg      }t        j                  |      }||_        | j                  |j
                  t        j                  dt        j                  dz  z  g       t        j                  t        j                  t        j                  |            ||k\  g      }|j                  t        d       | j                  |j
                  t        j                  dt        j                  dz  z  g       y )Nr   Tr
   r   rD   r   )r   r   rT   r   xexpr'   r  er   r   r-   r    r!   )r*   r+   r  r   r   s        r2   	test_xexpzTestDgp2Dcp.test_xexpe  s    NN1$'HHaXzz!}##DJJsRTT2X~0FG}}U^^EJJt,<=1fX'

&T
*##DJJsRTT2X~0FGr4   c                    t        j                  d      }t        j                  t        j                  t        j                  t        j
                  t        j                  ddg            d      |dz  z        |dk\  g      }| j                  |j                  d      d	       | j                  |j                  j                  d	       | j                  |j                  d
       t        j                  d      }t        j                  g d      }t        j                  j	                  |d      }t        j                  t        j                  t        j                  t        j
                  |      d      |dz  z        |dk\  g      }| j                  |j                  d      |       | j                  |j                  j                  |       | j                  |j                  d
       t        j                  d      }t        j                  ddgddgg      }t        j                  j	                  |d      }t        j                  t        j                  t        j                  t        j
                  |      d      |dz  z        |dk\  g      }| j                  |j                  d      |       | j                  |j                  j                  |       | j                  |j                  d
       t        j                  dd      }t        j
                  ddg      }t        j                  t        j                  t        j                  |d            ||k(  g      }| j                  |j                  d      d	       | j                  |j                  j                  d	       | j                  |j                  |j                         y )NTr
   r;   rH   r   )r~   r   r   r   r6   )g      ?r;   r   rD   fro)r   r   r   r   normr   rT   r   r&   r    r   opt_valr'   r  r  )r*   r+   r~   arrl3_normmatl2_normcs           r2   
test_pnormzTestDgp2Dcp.test_pnormq  s   NNt$MM%..ENN288QPQFCS4TXY)Z]^`a]a)ab6($qww$w/3qzz1115qww, NNt$hh{#))..a(MM%..ENN34G1)MPQUVPV)VW6($qww$w/9qzz117;qww, NNt$hhC1a&)*))..e,MM%..ENN34G5)QTUYZTZ)Z[6($qww$w/9qzz117;qww, NN1$'NNAq6"MM%..A);<qAvhGqww$w/3qzz1115##AGGQWW5r4   )returnN))__name__
__module____qualname__r3   r8   rA   rO   rh   rl   rr   ru   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  r  r  r  r  r  r#  r-   r4   r2   r   r      s    &2P-&?-,8Gt-,- - J:X32"7
3	"E(G6-2!'44'
'$*
'	83	M	M	WA3"D3"
H"6r4   r   )numpyrT   r   r   cvxpy.errorr   'cvxpy.reductions.dgp2dcp.canonicalizersr   r/   canonicalizersrY   cvxpy.atoms.affine.add_exprr   cvxpy.reductionsr   cvxpy.settingsr   cvxpy.tests.base_testr   r   r!   r   r2  r4   r2   <module>r;     s:        @ @ 5 % ' *	D
6( D
6r4   