
    bi%4                        d 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d Z ej                  g d      d        Zej                  j!                  d	d
dg      d        Zej                  j!                  dddg      d        Zd Zej                  d        Zd Zd Zej                  j!                  dg d      d        Zd Zd Zd Zej                  j!                  dg d      d        Zd Zej                  j!                  dg d      d         Zej                  j!                  dg d      d!        Zd" Zd# Z d$ Z!d% Z"d& Z#d' Z$d( Z%y))a,  
Copyright, the CVXPY authors

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
    N)perspective)ExpConec                  ~   t        j                  d      } t        j                  |       }t        j                  d      }t        ||      }|j	                         sJ |j                         rJ |j                  d      rJ |j                  d      rJ |j                  d      rJ |j                  d      rJ y )NTnonnegr      )cpVariableexpr   	is_nonneg	is_nonposis_incris_decr)xfsps       W/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/cvxpy/tests/test_perspective.pytest_monotonicityr      s    
4 A
q	A
4 AAqA;;=={{}yy|yy|yy|yy||    )         r   )paramsc                    t        j                         }t        j                         }| j                  }t        j                  ||      ||z  z   d|z  z
  }|dk\  |dk  g}t        j                  t        j
                  |      |      }|j                  t               |j                  |j                  |j                  |fS )Nr   r         ?solver)	r	   r
   paramquad_over_linProblemMinimizesolveSOLVERvalue)requestr   r   robjconstraintsprob_refs          r   quad_exampler,   +   s     	A
AA


1a
 1Q3
&1
,C617#Kzz"++c*K8HNN&N!>>177AGGQ..r   r   r   r   c                    t        j                  d      }t        j                  dd      }t        j                  ||       }t        j                  ||      }d|k(  |g dk\  g}t        j                  t        j
                  |      |      }|j                  t               t        j                  dd      }t        j                  d      }t        j                  t        j                  ||       t        j                  || dz
        z        }|g dk\  |dk(  g}	t        j                  t        j
                  |      |	      }
|
j                  d	       t        j                  |j                  | z  |
j                        sJ t        j                  |j                  |j                        sJ | dk7  r-t        j                  |j                  |j                        sJ y y )
Nr   Tr   )r   namer   r   r   r   r   posgp)r	   r
   normr   r"   r#   r$   r%   sumpowernpiscloser&   allclose)r   r   r   r   r)   r*   probref_xref_sref_constraintsref_probs              r   test_p_normsr?   ;   sb   
AA
4c*A
1A
..A
C61	>*K::bkk#&4DJJfJ KKt$EKKD!E
&&%#bhhuac&::
;C	)5A:6Ozz"++c*O<HNNdN::djj!mX^^444;;qww,,,Avzz!''5;;/// r   cvxTFc                    t        j                         }t        j                  d      }t        j                  |      | rdndz  }t        j                  ||      }d|k  |dk  d|k  |dk  g}t        j                  | rt        j
                  |      nt        j                  |      |      }|j                  t               t        j                         }t        j                         }t        j                  ||      | rdndz  }d|k  |dk  d|k  |dk  g}	t        j                  | rt        j
                  |      nt        j                  |      |	      }
|
j                  t               t        j                  |j                  |
j                        sJ t        j                  |j                  |j                        sJ t        j                  |j                  |j                        sJ y )NTr   r   r   r   )r	   r
   logr   r"   r#   Maximizer$   r%   rel_entrr7   r8   r&   r9   )r@   r   r   r   r)   r*   r:   r;   r<   r=   r>   s              r   test_rel_entrrF   U   sj   
A
4 A
q	2!$A
..A
C61616162K::#bkk#&2;;s3C[QDJJfJ KKMEKKME
++eU
#CqR
8CEz5A:qEz5A:FOzzc"++c*r{{37GYHNN&N!::djj(..111;;qww,,,::aggu{{+++r   c                  v   t        j                         } t        j                  d      }t        j                  |       }t        j                  ||      }|dk\  d| k  g}t        j                  t        j
                  |      |      }|j                  t               t        j                         }t        j                  d      }t        j                         }|}t        |||      |dk\  |dk\  g}	t        j                  t        j
                  |      |	      }
|
j                  t               t        j                  |j                  |
j                        sJ t        j                  | j                  |j                        sJ t        j                  |j                  |j                  d      sJ y )NTr   r   r   -C6?atol)r	   r
   r   r   r"   r#   r$   r%   r   r7   r8   r&   )r   r   r   r)   r*   r:   r;   r<   ref_zr=   r>   s              r   test_exprL   m   s;   
A
4 A
q	A
..A
C616"K::bkk#&4DJJfJ KKMEKKt$EKKME
Cue$
EQJ O zz"++c*O<HNN&N!::djj(..111::aggu{{+++::aggu{{777r   c            
      "   t        j                  d      } t        j                         }t        j                  d      }t        j                         }|t        j                  |      k\  g d| k  d|k  |dk  g}|t        d      D cg c]  }t	        | |   |z
  |||          c}z  }t        j
                  t        j                  |      |      }|j                  t               |j                  | j                  |j                  fS c c}w )Nr   r/   r   r   r   )
r	   r
   r5   ranger   r"   r#   r$   r%   r&   )r;   r<   rK   ref_tr=   ir>   s          r   lse_examplerQ      s     KKNEKKMEKKNEKKME 	UAJ
4O %PQ(SQauQx@SSOzz"++e,o>HNN&N!>>5;;33	 Ts   Dc                 &   t        j                  d      }t        j                  d      }t        j                  |      }t        j                  ||      }d|k  |dk  g d|k  g}t        j                  t        j
                  |      |      }|j                  t               | \  }}}	t        j                  |j                  |      sJ t        j                  |j                  |      sJ t        j                  |j                  |	      sJ y Nr   Tr   r   r   r/   r   r	   r
   log_sum_expr   r"   r#   r$   r%   r7   r8   r&   r9   )
rQ   r   r   r   r)   r*   r:   r>   r;   r<   s
             r   test_lserV      s    
AA
4 A
qA
..A
C6169>2K::bkk#&4DJJfJ(HeU::djj(+++;;qww&&&::aggu%%%r   c                 &   t        j                  d      }t        j                  d      }t        j                  |      }t        j                  ||      }d|k  |dk  g d|k  g}t        j                  t        j
                  |      |      }|j                  t               | \  }}}	t        j                  |j                  |      sJ t        j                  |j                  |      sJ t        j                  |j                  |	      sJ y rS   rT   )
rQ   r   r   f_expr)   r*   r:   r>   r;   r<   s
             r   test_lse_atomrY      s    
AA
4 ANN1E
..
"C6169>2K::bkk#&4DJJfJ )HeU::djj(+++;;qww&&&::aggu%%%r   zx_val,s_val))r   r   )   g      ?)r      c                    t        j                         }t        j                  d      }t        j                  |      d|z  z   dz
  }t        j                  ||      }t	        j
                  || g      }t	        j
                  |       |_        t	        j
                  |      |_        |j                  |      }| dz  |z  d| z  z   d|z  z
  }t	        j                  ||      sJ y )NTr   r   rZ   r   )	r	   r
   squarer   r7   arrayr&   numericr8   )	x_vals_valr   r   rX   r)   	val_arrayvalref_vals	            r   test_evaluate_perspre      s    
A
4 AIIaL1QE
..
"C%(IhhuoAGhhuoAG
++i
 C Qhunqw&50G::c7###r   c                 $   | \  }}}}t        j                         }t        j                  d      }t        j                  |      ||z  z   dz
  }t        j                  ||      }|dk  |dk\  g}	t        j                  t        j
                  |      |	      }
|
j                  d       t        j                  |
j                  |      sJ t        j                  |j                  |      sJ t        j                  |j                  |      sJ y )NTr   r   r   r   verbose
r	   r
   r]   r   r"   r#   r$   r7   r8   r&   )r,   rd   r<   r;   r(   r   r   rX   r)   r*   r:   s              r   test_quad_atomrj      s    +GUE1 	A
4 AIIaL1Q3"E
..
"C7AF#K::bkk#&4DJJtJ::djj'***::aggu%%%::aggu%%%r   c                    | \  }}}}t        j                         }t        j                  d      }t        j                  d      }t        j                  |      ||z  z   dz
  }t        j                  ||      }	t        j                  |	|      }
d|k  |dk  |dk\  d|k  |dk  g}t        j                  t        j
                  |
      |      }|j                  d       t        j                  |j                  |      sJ t        j                  |j                  |      sJ t        j                  |j                  |      sJ y )NTr   r   g?r   r   rg   ri   )r,   rd   r<   r;   r(   r   r   trX   	obj_innerr)   r*   r:   s                r   test_quad_persp_persprn      s	   +GUE1 	A
4 A
4 AIIaL1Q3"Eua(I
..A
&C 7AGQ!VR1Wa2g>K::bkk#&4DJJtJ::djj'***::aggu%%%::aggu%%%r   c                     t        j                         } t        j                  d      }t        j                  t        j                  | |      |      }| dk\  |dk  g}t        j                  t        j                  |      |      }|j                  t               t        j                         }t        j                  d      }t        j                  |d      }t        j                  ||      }|dk\  |dk  g}t        j                  t        j                  |      |      }|j                  t               t        j                  |j                  |j                        sJ t        j                  |j                  | j                        sJ t        j                  |j                  |j                        sJ y )NTr   rZ   r   r   r   )r	   r
   r!   r"   r#   r$   r%   r6   r   r7   r8   r&   )	r;   r<   r)   r*   r>   r   r   r   r:   s	            r   test_quad_quadrp      s<   KKMEKKt$E 

2++E595
ACA:uz*Kzz"++c*K8HNN&N! 	A
4 A
AA
..A
C616"K::bkk#&4DJJfJ::djj(..111::aggu{{+++::aggu{{+++r   n)r   rZ   r[      c                    t        j                  d      }t        j                  d      }t        j                  ||       t        j                  || dz
        z  }|dk\  |dk  g}t        j                  t        j                  |      |      }|j                  d       t        j                         }t        j                  d      }t        j                  ||       }t        j                  ||      }|dk\  |dk  g}t        j                  t        j                  |      |      }	|	j                  t               t        j                  |	j                  |j                        sJ t        j                  |j                  |j                        sJ t        j                  |j                  |j                        sJ y )NTr0   r   r   r2   r   r   )r	   r
   r6   r"   r#   r$   r   r%   r7   r8   r&   )
rq   r;   r<   r)   r*   r>   r   r   r   r:   s
             r   
test_powerrt     sF    KKD!EKKD!E ((5!
RXXeQqS1
1CA:u{+Kzz"++c*K8HNNdN 	A
4 A
AA
..A
C617#K::bkk#&4DJJfJ::djj(..111::aggu{{+++::aggu{{+++r   c                  2   t        j                  dd      } t        j                  |       }| t        j                  d      k(  g}t        j
                  t        j                  |      |      }|j                  t         j                         t        j                  dd      }t        j                  d      }t        j                  |      }t        j                  ||      }|t        j                  d      k(  |dk(  g}t        j
                  t        j                  |      |      }|j                  t         j                         |j                  t         j                  k(  sJ t        j                  |j                  |j                        sJ y )Nr   r   TPSDr   r   r   r   )r	   r
   tracer7   eyer"   r#   r$   SCSr   statusOPTIMALr8   r&   )ref_Pr)   r*   r>   Pr   r   r:   s           r   test_psd_tr_perspr   3  s   KKD)E
((5/CBFF1I%&Kzz"++c*K8HNN"&&N! 	F%A
4 A
A
..A
Cq	>16*K::bkk#&4DJJbffJ;;"**$$$::djj(..111r   )r   r   rr   c                    t        j                  |       }t        j                  | | fd      }t        j                  ||      }|dk(  |t        j                  |       k(  g}t        j
                  t        j                  |      |      }|j                  t         j                         t        j                  |       }t        j                  | | fd      }t        j                  d      }t        j                  ||      }	t        j                  |	|      }|dk(  |t        j                  |       k(  |dk(  g}t        j
                  t        j                  |      |      }
|
j                  t         j                         |
j                  t         j                  k(  sJ t        j                  |
j                  |j                  d      sJ t        j                  |j                  |j                  d      sJ y )	NTrw   rZ   r   r   r   g{Gz?rI   )r	   r
   matrix_fracr7   rz   r"   r#   r$   r{   r   r|   r}   r8   r&   r9   )rq   r;   r~   r)   r*   r>   r   r   r   r   r:   s              r   test_psd_mf_perspr   L  sk    KKNEKKAD)E ..
&CA:uq	12Kzz"++c*K8HNN"&&N! 	AA
QF%A
4 A
q!A
..A
C61q	>164K::bkk#&4DJJbffJ;;"**$$$::djj(..t<<<;;qww$777r   c                 D   t        j                  d      }t        j                  | | fd      }t        j                  t        j                  |      |      }|dk  |t	        j
                  |       z	  g}t        j                  t        j                  |      |      }|j                  t         j                         t        j                  | | fd      }t        j                  d      }t        j                  t        j                  t        j                  |            |      }t        j                  ||      }|dk  |t	        j
                  |       z	  g}t        j                  t        j                  |      |      }	|	j                  t         j                         |	j                  t         j                  k(  sJ t	        j                  |	j                  |j                  d      sJ t	        j                   |j                  |j                  d      sJ y )	NTr   rw   rZ   r   MbP?rI   rH   )r	   r
   r!   ry   r7   rz   r"   r#   r$   r{   r   r]   r|   r}   r8   r&   r9   )
rq   r<   r~   r)   r*   r>   r   r   r   r:   s
             r   test_psd_tr_squarer   h  st    KKt$EKKAD)E 

288E?E
2CA:uq	12Kzz"++c*K8HNN"&&N! 	QF%A
4 A
ryy!-q1A
..A
C61q	>*K::bkk#&4DJJbffJ;;"**$$$::djj(..t<<<;;qww$777r   c                     t        j                  dd      } t        j                  |       }t        j                  |       ddgk\  g}t        j                  t        j
                  |      |      }|j                          t        j                  dd      }t        j                  |      }t        j                  d      }t        j                  ||      }t        j                  |      ddgk\  |dk(  g}t        j                  t        j
                  |      |      }|j                          |j                  t         j                  k(  sJ t        j                  |j                  |j                  d      sJ t        j                  |j                  j                         | j                  j                         d	      sJ y )
Nrv   T)diagr   r   r   r   rI   rH   )r	   r
   ry   r   r"   r#   r$   r   r|   r}   r7   r8   r&   r9   toarray)X_refr)   r*   r>   Xr   r   r:   s           r   	test_diagr     s9   KKT*E
((5/C775>aV+,Kzz"++c*K8HNN
F&A
A
4 A
..A
C771:!Q'a0K::bkk#&4DJJL;;"**$$$::djj(..t<<<;;qww(%++*=*=*?dKKKr   c                  <   t        j                         } t        j                  d      }t        | dz
  |      }t        j                  t        j                  |      | dk\  |dk  g      }|j                          t        j                  |j                  d      sJ y )NTr   r   Q	@gQ@)	r	   r
   r   r"   r#   r$   r7   r8   r&   r   r   r)   r:   s       r   test_scalar_xr     sr    
A
4 A
ac1
C::bkk#&dAF(;<DJJL::djj(+++r   c                  P   t        j                         } t        j                  d      }t        | dz   |      }t        j                  t        j                  |      | dk\  g      }t        j                  t        d      5  |j                          d d d        y # 1 sw Y   y xY w)NTr   r   r   zpass in a recession functionmatch)	r	   r
   r   r"   r#   pytestraisesAssertionErrorr$   r   s       r   test_assert_s_nonzeror     sw    
A
4 A
ac1
C::bkk#&d4D	~-K	L 

  s   BB%c                     t        j                  d      } t        j                         }t        j                  d      }| t        j                  |      z  }t        j                  ||      }t        j
                  t        j                  |      |dk  |dk\  g      }d| _        |j                          t        j                  |j                  d| j                  z        sJ y )NTr   r   r   c   r   )r	   	Parameterr
   r]   r   r"   r#   r&   r$   r7   r8   )r   r   r   r   r)   r:   s         r   test_parameterr     s    
D!A
A
4 A	"))A,A
..A
C::bkk#&aa(89DAGJJL::djj!AGG),,,r   c                     t        j                         } t        j                  d      }t        j                  t        d      5  t        t        j                  |       t        j                  |             d d d        y # 1 sw Y   y xY w)Nr   zs must be a variabler   )r	   r
   r   r   r   r   r]   r5   )r   r   s     r   test_afine_sr     sX    
A
AA	~-C	D -BIIaL"&&),- - -s   3BB
c                  x   t        j                         } t        j                  d      }t        j                         }t        j                  t        j                  || z         |      }|j                         rJ t        j                  t        j                  || z         |      }|j                         rJ y )NTr   )r	   r
   r   r   r]   is_dpprC   )r   r   ar)   s       r   test_dppr     s~    
A
4 A
A
..1Q3
+Czz|
..!a
(Czz||r   c                     t        j                  d      } t        j                  dd      }| dz   }| }t        j                  |||      }t        j                  |        dz   dk\  g}t        j                  t        j
                  |      |      }|j                          t        j                  | j                  d      sJ t        j                  |j                  d      sJ y )Nr   Tr   )f_recessionr   rB   )
r	   r
   r   r]   r"   r#   r$   r7   r8   r&   )r   r   r   r   r)   constrr:   s          r   test_s_eq_0r     s     	AA
Ad#A	AAK
..A;
7Cyy|ma1$%F::bkk#&/DJJL::aggr"""::aggq!!!r   )&__doc__numpyr7   r   cvxpyr	   cvxpy.atoms.perspectiver   cvxpy.constraints.exponentialr   CLARABELr%   r   fixturer,   markparametrizer?   rF   rL   rQ   rV   rY   re   rj   rn   rp   rt   r   r   r   r   r   r   r   r   r   r    r   r   <module>r      s       / 1	  '(/ )/ q!f%0 &02 u., /,.84 4 4"&"&$ (CD$ E$$&(&.,8 m,, -,822 j)8 *86 j)8 *84L(,--"r   