
    bi                     f    d Z ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ  G d de      Zy)	a,  
Copyright 2013 Steven Diamond

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

    http://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)vstack)power)Variable)BaseTestc                   p    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y)TestExpressionsz2 Unit tests for the expression/expression module. Nc                      y )N )selfs    U/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/cvxpy/tests/test_quadratic.pysetUpzTestExpressions.setUp   s        c                 V   t        d      }t        d      }| j                  |j                                | j                  |j	                                | j                  |j                                t        j                         5  t        j                  d       t        |j                  |z  d      }| j                  |j                                | j                  |j	                                | j                  |j                                d d d        t        ||z
  d      }| j                  |j                                | j                  |j	                                | j                  |j                                t        |d|z  z   d      }| j                  |j                                | j                  |j	                                | j                  |j                                | j                  |j                                |d|z  z   dz  }| j                  |j                                | j                  |j	                                | j                  |j                                | j                  |j                                y # 1 sw Y   xY w)N   ignorer         )r   assertFalseis_constant
assertTrue	is_affineis_quadraticwarningscatch_warningssimplefilterr   Tis_dcp)r   xystuws          r   
test_powerzTestExpressions.test_power#   s   QKQK)&()$$& 	.!!(+accAgq!AOOAMMO,OOAKKM*OOANN,-	. !A#qM)&()!AaC%O)'()
#qsUQJ)'()
#-	. 	.s   BJJ(c                 |   t        d      }t        d      }| j                  |j                                | j                  |j	                                | j                  |j                                t        j                         5  t        j                  d       |j                  |z  }d d d        | j                  j                                | j                  |j	                                | j                  |j                                | j                  |j                                y # 1 sw Y   xY w)Nr      r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    s       r   test_matrix_multiplicationz*TestExpressions.test_matrix_multiplicationB   s    VV)&()$$& 	!!(+aA	 	)'()$	 	s   %D22D;c                    t        d      }t        d      }t               }t        j                  ||z
  |      }| j                  |j	                                | j                  |j                                | j                  |j                                | j                  |j                                t        j                  |d|z  z   d      }| j                  |j	                                | j                  |j                                | j                  |j                                | j                  |j                                y )Nr&   r   r'   )	r   cpquad_over_linr   r   r   r   r   r   r   r   r   zr    r!   s         r   test_quad_over_linz"TestExpressions.test_quad_over_linQ   s    VVJQqS!$)')*
#QqsUA&)'()
#r   c                    t        d      }t        j                  d      }|j                  |z  }t	        j
                  ||      }| j                  |j                                | j                  |j                                | j                  |j                                | j                  |j                                y )Nr'   )r   npeyer   r+   matrix_fracr   r   r   r   r   r   )r   r   MPr    s        r   test_matrix_fracz TestExpressions.test_matrix_fraca   s    QKFF1ICC!GNN1a )'()
#r   c                 X   t        d      }t        j                  d      dt        j                  d      z  z
  }t        j                  d      }t	        j
                         5  t	        j                  d       |j                  |z  |z  |j                  |z  z   }d d d        | j                  j                                | j                  |j                                | j                  |j                                | j                  |j                                y # 1 sw Y   xY w)Nr'   r   )r'   r'   )r'   r   r   )r   r1   r2   onesr   r   r   r   r   r   r   r   r   r   )r   r   r5   qr    s        r   test_quadratic_formz#TestExpressions.test_quadratic_formk   s    QKFF1I"''&/))GGFO$$& 	&!!(+a!accAg%A	& 	)'()$	& 	&s   #8D  D)c                    t        d      }t        j                  d      }t        j                  d      }t        j                  d      }||z  |z  |z   }| j                  |j	                                | j                  |j                                | j                  |j                                | j                  |j                                t        j                  |      }| j                  |j	                                | j                  |j                                | j                  |j                                | j                  |j                                t        j                  |d      dz  }| j                  |j	                                | j                  |j                                | j                  |j                                | j                  |j                                y )Nr'      r&   )r=      )r   r>   fror   )r   r1   r8   r   r   r   r   r   r   r+   sum_squaresnorm)r   Xr5   Qr4   r   r    r!   s           r   test_sum_squaresz TestExpressions.test_sum_squaresw   sP   VGGFOGGFOGGFOEAIM)&()
#NN1)'()
# GGAuq )')*
#r   c                    t               }t               }t               }t        j                         5  t        j                  d       ||z  }| j	                  |j                                | j                  |j                                ||z   dz  |z
  ||z  z
  }| j	                  |j                                | j                  |j                                d d d        y # 1 sw Y   y xY w)Nr   r   )r   r   r   r   r   r   r   r   r-   s         r   test_indefinite_quadraticz)TestExpressions.test_indefinite_quadratic   s    JJJ$$& 	)!!(+!AOOANN,-QXXZ(1q1qs"AOOANN,-QXXZ(	) 	) 	)s   B(C$$C-c           	      `   t               }t               }t               }t        j                  t        |||g            dz  }| j	                  |j                                t        j                  t        |dz  t        |d      |g            }| j	                  |j                                y )Nr   )r   r+   maxr   r   r   r   r-   s         r   test_non_quadraticz"TestExpressions.test_non_quadratic   s    JJJFF61a)$%q()*FF61a4q!a012)*r   c                    t        d      }t        d      }t        j                         5  t        j                  d       ||z  }d d d        | j	                  j                                | j	                  |j                                | j                  |j                                | j	                  |j                                y # 1 sw Y   xY w)Nr&   r<   r   )
r   r   r   r   r   r   r   r   r   r   r(   s       r   test_affine_prodz TestExpressions.test_affine_prod   s    VV$$& 	!!(+AA	 	)'()$	 	s   CCc                    t               }|j                         rJ dd|z  z   j                         rJ |dz  j                         sJ |dz  dz  j                         sJ |dz  |dz  z   j                         sJ d|dz  z  |dz  z   j                         sJ t        j                  |dz        j                         sJ t        j                  |dz        j                         rJ t        j
                  |dz        j                         sJ t        j                  |dz        j                         sJ t        j                  |dz  d      j                         sJ t        j                  |dz  d      j                         sJ t        j                  |dz  |      j                         rJ t        j                   d      }t        j                  d      }t        j                  |dz  |      j                         sJ t        j                  dd      }t        j                  |dz  |      j                         sJ y)z%Test the has_quadratic_term function.r   r   r   )r   r   T)PSDN)r   has_quadratic_termr+   conjpossquarehuberr   r,   r1   r2   r3   	Parameter)r   r   r   r5   s       r   test_has_quadraticz"TestExpressions.test_has_quadratic   s   J'')))!G//1111((***1Q**,,,1q!t//111!Q$A11333wwq!t}//11166!Q$<22444yyA11333xx1~00222xx1a 335551a(;;===##AqD!,??AAAKKNFF1I~~adA&99;;;LLT*~~adA&99;;;r   c                    t        j                         }t        j                         }t        j                  t        j                  |      t        j                  ||      z         }t        j
                  ||dk(  g      }|j                  t         j                  d       t        j                  |j                  d      sJ t        j                  |j                  d      sJ y)z)Test sum_squares(x) + quad_over_lin(x, y)r   T)solveruse_quad_objr   N)r+   r   MinimizerQ   r,   ProblemsolveCLARABELr1   isclosevalue)r   r   r   objprobs        r   test_composite_quad_over_linz,TestExpressions.test_composite_quad_over_lin   s     KKMKKMkk"))A,)9)9!Q)??@zz#Qx(

"++D
9zz!''1%%%zz!''1%%%r   )returnN)__name__
__module____qualname____doc__r   r$   r)   r/   r6   r:   rD   rF   rI   rK   rT   r`   r
   r   r   r   r      sA    <$>%$ $
%$4)	+%<,	&r   r   )re   r   numpyr1   cvxpyr+   cvxpy.atoms.affine.vstackr   cvxpy.atoms.elementwise.powerr   cvxpy.expressions.variabler   cvxpy.tests.base_testr   r   r
   r   r   <module>rl      s/        , / / *z&h z&r   