
    bi%                     f    d Z ddlZddlZddlmZmZ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)MaximizeMinimizeProblem)Variable)BaseTest)partial_optimizec                   x    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y)
TestDomainz# Unit tests for the domain module. Nc                     t        d      | _        t        dd      | _        t        dd      | _        t        dd      | _        t        dd	      | _        t        dd
      | _        t        dd      | _        y )Na)name   xy   z)r   r   AB)r   r   C)r   r   r   r   r   r   r   r   )selfs    R/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/cvxpy/tests/test_domain.pysetUpzTestDomain.setUp   sb    s#!#&!#&!#&&s+&s+&s+    c           	         t        | j                  dz        t        t        j                  | j                              fD ]5  }t        || j                  | j                  z   ddgk\  g      }t        || j                  | j                  g      }|j                  }| j                  dk\  | j                  dk\  g}t        t        t        | j                  | j                  z               ||z         }|j                  t        j                  d       | j                  |j                  d	       | j                  j                  dk\  sJ t        j                  | j                  | j                  z   ddgz
  j                  d
k\        sJ t        || j                  g      }|j                  }| j                  dk\  | j                  dk\  g}t        t        t        | j                  | j                  z               ||z         }|j                  t        j                          | j                  |j                  d       | j                  j                  d
k\  sJ | j#                  | j                  j                  ddg       t        || j                  | j                  g      }|j                  }| j                  dk\  | j                  dk\  g}t        t        t        | j                  | j                  z               ||z         }|j                  t        j                          | j                  | j                  j                  d       | j#                  | j                  j                  ddg       8 y)zDTest domain for partial minimization/maximization problems.
              )dont_opt_varsr   ư>solvereps   gMbP)opt_varsr"   N)r   r   r   cplogr   r   r   domainsumsolveSCSassertAlmostEqualvaluenpallCLARABELassertItemsAlmostEqual)r   obj	orig_probexprdomconstrprobs          r   test_partial_problemzTestDomain.test_partial_problem(   s    dffr\*HRVVDFF^,DE 	>Cdfftvvo!Q&?%@AI#Idffdff=MND++Cffndffk2F8C$893<HDJJbff$J/""4::r266<<1$$$66466DFF?aV3::eCDDD $IAD++Cffndffk2F8C$893<HDJJbkkJ*""4::q166<<5(((''q!f= $I8HID++Cffndffk2F8C$893<HDJJbkkJ*""466<<6''q!f=;	>r   c                    t        j                  | j                        j                  }t	        t        t        | j                              |      }|j                  t         j                  d       | j                  |j                  d       t        j                  | j                  ddg      j                  }|j                  | j                  dk\         t	        t        t        | j                              |      }|j                  t         j                  d       | j                  | j                  j                  ddg       t        j                  | j                  g d      j                  }|j                  | j                  dk\         t	        t        t        | j                              |      }|j                  t         j                  d       | j                  | j                  j                  g d       y)	z!Test domain for geo_mean
        h㈵>r!   r   r   r   )r      r<   )r   r   r   N)r'   geo_meanr   r)   r   r   r*   r+   r,   r-   r.   appendr2   r   r   r6   r8   s      r   test_geo_meanzTestDomain.test_geo_meanJ   sM    kk$&&!((xDFF,c2

"&&d
+tzz1- kk$&&1a&)00

466R< xDFF,c2

"&&d
+##DFFLL2q':kk$&&),33

466R< xDFF,c2

"&&d
+##DFFLL*=r   c                 4   t        j                  | j                  | j                        j                  }t        t        | j                        |      j                  t         j                  d       | j                  | j                  j                  d       y)z&Test domain for quad_over_lin
        r    r!   r   N)r'   quad_over_linr   r   r)   r   r   r+   r,   r-   r.   r   r6   s     r   test_quad_over_linzTestDomain.test_quad_over_lin_   sc     tvvtvv.55 #&,,BFF,Etvv||Q/r   c                    t        j                  | j                  d      j                  }t	        t        | j                        |      }|j                  t         j                  d       | j                  |j                  d       y)z  Test domain for pnorm.
        g      r    r!   r   N)
r'   pnormr   r)   r   r   r+   r,   r-   r.   r?   s      r   
test_pnormzTestDomain.test_pnormo   s[     hhtvvt$++x'-

"&&d
+tzz1-r   c                    t        j                  | j                        j                  }t	        t        | j                        |      j                  t         j                  d       | j                  | j                  j                  d       y)zTest domain for log.
        r    r!   r   N)
r'   r(   r   r)   r   r   r+   r,   r-   r.   rC   s     r   test_logzTestDomain.test_logw   sZ     ffTVVn## #&,,BFF,Etvv||Q/r   c                    t        j                  | j                        j                  }t	        t        | j                        |      j                  t         j                  d       | j                  | j                  j                  d       y)zTest domain for log1p.
        r    r!   r   N)
r'   log1pr   r)   r   r   r+   r,   r-   r.   rC   s     r   
test_log1pzTestDomain.test_log1p~   s[     hhtvv%% #&,,BFF,Etvv||R0r   c                    t        j                  | j                        j                  }t	        t        | j                        |      j                  t         j                  d       | j                  | j                  j                  d       y)zTest domain for entr.
        r    r!   r   N)
r'   entrr   r)   r   r   r+   r,   r-   r.   rC   s     r   	test_entrzTestDomain.test_entr   sZ     ggdffo$$ #&,,BFF,Etvv||Q/r   c                 r   t               }t        j                  | j                  |      j                  }t        t        | j                  |z         |      j                  t        j                  d       | j                  | j                  j                  d       | j                  |j                  d       y)z Test domain for kl_div.
        r;   r!   r   N)r   r'   kl_divr   r)   r   r   r+   r,   r-   r.   r   br6   s      r   test_kl_divzTestDomain.test_kl_div   s|     Jii"))!$c*00D0Itvv||Q/qww*r   c                 P   t               }t        j                  | j                  |      j                  }t        t        | j                  |z         |      j                          | j                  | j                  j                  d       | j                  |j                  d       y)z"Test domain for rel_entr.
        r   N)
r   r'   rel_entrr   r)   r   r   r+   r-   r.   rR   s      r   test_rel_entrzTestDomain.test_rel_entr   sq     Jkk$&&!$++!$c*002tvv||Q/qww*r   c                    ddd}t        j                  | j                        j                  } t	        t        | j                        |      j                  d
dt         j                  i| | j                  | j                  j                  d       t        j                  | j                        j                  } t	        t        | j                        || j                  dk\  gz         j                  d
dt         j                  i| | j                  | j                  j                  d       | j                  dz  j                  } t	        t        | j                        || j                  dk\  gz         j                  d
dt         j                  i| | j                  | j                  j                  d       | j                  dz  j                  } t	        t        | j                        || j                  dk\  gz         j                  d
dt         j                  i| | j                  | j                  j                  d       y	)zTest domain for power.
        g:0yE>i )r#   	max_itersr"   r   r   r   r   N )r'   sqrtr   r)   r   r   r+   r,   r-   r.   square)r   optsr6   s      r   
test_powerzTestDomain.test_power   s    &1ggdffo$$, #&,,CBFFCdCtvv||Q/ii&&? #4(8"89??VrvvVQUVtvv||T2|##? #4(8"89??VrvvVQUVtvv||Q/{""? #4(8"89??VrvvVQUVtvv||Q/r   c           	         t        j                  | j                  t        j                  d      z         j
                  }t        t        t        j                  t        j                  | j                                    |      }|j                  t         j                         | j                  |j                  dd       y)z!Test domain for log_det.
        r   r&   r   placesN)r'   log_detr   r/   eyer)   r   r   r*   diagr+   r,   r-   r.   r?   s      r   test_log_detzTestDomain.test_log_det   sz     jj"&&)+,33xrwwtvv 78#>

"&&
!tzz2a8r   c           	         t        j                  | j                  | j                  t	        j
                  d      z         j                  }t        t        t        j                  t        j                  | j                                    |      }|j                  t         j                         | j                  |j                  dd       y)z%Test domain for matrix_frac.
        r   r&   r`   r   ra   N)r'   matrix_fracr   r   r/   rd   r)   r   r   r*   re   r+   r,   r-   r.   r?   s      r   test_matrix_fraczTestDomain.test_matrix_frac   s     nnTVVTVVbffQi%78??xrwwtvv 78#>

"&&
!tzz2a8r   )returnN)__name__
__module____qualname____doc__r   r9   r@   rD   rG   rI   rL   rO   rT   rW   r^   rf   ri   rZ   r   r   r
   r
      sG    -	, >D>*0 .010++0(99r   r
   )rn   numpyr/   cvxpyr'   r   r   r   cvxpy.expressions.variabler   cvxpy.tests.base_testr   !cvxpy.transforms.partial_optimizer   r
   rZ   r   r   <module>rt      s/       - - / * >f9 f9r   