
    bi@                         d Z ddlZddlmZmZmZ ddlmZm	Z	m
Z
m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 dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddl m!Z! d Z" G d de      Z#y)aD  
Copyright 2013 Steven Diamond, 2017 Robin Verschueren

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)diagexphstackpnorm)SOCExpConeNonNeg)SolverError)Constant)Variable)CvxAttr2Constr)ConeMatrixStuffing)FlipObjective)CLARABEL)BaseTest)SolverTestHelperc                 t    | j                  |      \  }}| j                  | j                  |ddi       |      S )NF)
warm_startverbosesolver_opts)applyinvertsolve_via_data)solverparam_cone_progdatainv_datas       W/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/cvxpy/tests/test_linear_cone.pysolve_wrapperr"   !   sE    \\/2ND(==..2 / ?@HJ J    c                   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y)TestLinearConez# Unit tests for the domain module. Nc                 b   t        d      | _        t        d      | _        t        d      | _        t        dd      | _        t        dd      | _        t        dd	      | _        t        d
d      | _        t        d
d      | _        t        dd      | _	        t               g| _        y )Na)namebc   x   yzr+   r+   AB)r-   r+   C)r   r'   r)   r*   r,   r.   r/   r1   r2   r3   r   solvers)selfs    r!   setUpzTestLinearCone.setUp*   s    s#s#s#!#&!#&!#&&s+&s+&s+ 
|r#   c           	      N   | j                   D ]  }t        t        d| j                  z        | j                  dk\  g      }| j	                  t               j                  |             |j                  |j                               }t               j                  |      }t        ||d         }| j                  ||j                         t               j                  ||d         }| j                  |j                  |       | j                  |j                  | j                  j                     | j                  j                          t        t        d| j                  z  | j"                  z         | j                  dk  | j"                  | j                  k(  | j"                  dk  g      }|j                  |j                               }| j	                  t               j                  |             t               j                  |      }t        ||d         }| j                  |j                  |       t               j                  ||d         }| j                  |j                  |       | j                  |j                  | j                  j                     | j                  j                          | j                  |j                  | j"                  j                     | j"                  j                          t        t        d| j                  z  | j"                  z
  dz         | j                  dk\  | j"                  d| j$                  z  z   dz
  | j                  k(  | j"                  d| j$                  z   k  g      }| j	                  t               j                  |             |j                  |j                               }t               j                  |      }t        ||d         }| j                  |j                  |       t               j                  ||d         }| j                  |j                  |       | j                  |j                  | j                  j                     | j                  j                          | j                  |j                  | j"                  j                     | j"                  j                          t        t        | j                         | j                  dk\  g      }| j	                  t               j                  |             	 |j                  |j                               }t               j                  |      }| j	                  |j                  |d                t        ||d         }| j                  |j                  |       t               j                  ||d         }| j                  |j                  |       t        t)        | j                        | j                  dk\  | j                  dk  g      }|j                  |j                               }| j	                  t+               j                  |             t+               j                  |      }| j	                  t               j                  |d                t               j                  |d         }| j	                  |j                  |d                t        ||d         }| j                  |j                  |        t               j                  ||d         }| j                  |j                  |        t+               j                  ||d         }| j                  |j                  |        y# t&        $ r Y  yw xY w)	z!Test scalar LP problems.
        r-   r+   r         d   N)r4   r   r   r'   
assertTruer   acceptssolver(   r   r"   assertAlmostEqualopt_valr   primal_varsidvaluer)   r*   r   r   r   )	r5   r   presultp_newsltninv_sltnp_mininv_flipped_sltns	            r!   test_scalar_lpzTestLinearCone.test_scalar_lp9   s    ll H	EF466*TVVq[M:AOO.088;<WWV[[]+F&(..q1E q2D""64<<8)+224qBH""8#3#3V<""8#7#7		#B#'66<<1 DFFTVV!341dff&6!DFAWWV[[]+FOO.088;<&(..q1E q2D""4<<8)+224qBH""8#3#3V<""8#7#7		#B#'66<<1""8#7#7		#B#'66<<1 466DFF!2S!891!DFF(*Q.$&&81tvv:-/0A OO.088;<WWV[[]+F&(..q1E q2D""4<<8)+224qBH""8#3#3V<""8#7#7		#B#'66<<1""8#7#7		#B#'66<<1
 $&&)DFFaK=9AOO.088;</ '(..q1EOOFNN5845 q2D""4<<8)+224qBH""8#3#3V< (466Q;!*DEAWWV[[]+FOOMO33A67!O))!,EOO.088qBC&(..uQx8EOOFNN5845 q2D""4<<&9)+224qBH""8#3#3fW=,55haI""#3#;#;VDQH	Ed  s   0^	^$#^$c           	      N   | j                   D ]  }t        t        j                  ddg            }t	        t        |j                  | j                  z        | j                  |k\  g      }|j                  |j                               }| j                  t               j                  |             t               j                  |      }| j                  |j                  |d                t        ||d         }| j                  |j                   |       t               j#                  ||d         }t               j                  |      }| j                  |j                  |d                t        ||d         }| j                  |j                   |       t               j#                  ||d         }| j                  |j                   |       | j%                  |j&                  | j                  j(                     | j                  j*                         t        t        j                  ddgddgg      j                        j*                  }	t        ddgddgg      }
t	        t        |j                  | j                  z  | j,                  z         |	| j                  z  ddgk\  d|
z  | j.                  z  | j                  k(  | j.                  ddgk\  | j,                  dk\  g      }| j                  t               j                  |             |j                  |j                               }t               j                  |      }| j                  |j                  |d                t        ||d         }| j                  |j                   |d       t               j#                  ||d         }| j                  |j                   |d       |j1                         D ]7  }| j%                  |j&                  |j(                     |j*                  d       9  y )	Nr8   r+   r   r-   r:      places)r4   r   nparrayr   r   Tr,   r>   r(   r<   r   r=   r   r"   r?   r@   r   assertItemsAlmostEqualrA   rB   rC   r'   r/   	variables)r5   r   r*   rD   rE   rF   rG   rH   p_new1r1   Imatvars               r!   test_vector_lpzTestLinearCone.test_vector_lp   sQ   ll &	AF1a&)*Atvv.1>AWWV[[]+FOO.088;<&(..q1EOOFNN5845 q2D""4<<8)+224qBH')//2FOOFNN6!956 3D""4<<8)+224CH""8#3#3V<''(<(<TVVYY(G(,6 Aq6Aq6"23556<<AaVaV,-Dtvv!67TVVAw.4$&&DFF2Aq6)1&'A
 OO.088;<WWV[[]+F&(..q1EOOFNN5845 q2D""4<<"B)+224qBH""8#3#3VA"F{{} A++H,@,@,H,/IIa , AAI&	Ar#   c                 P   | j                   D ]  }t        t        j                  d            j                  }t        t        | j                        | j                  || j                  z   k(  | j                  dk\  g      }| j                  t               j                  |             |j                  |j                               }t               j                  |      }t        ||d         }| j!                  |j"                  |       t               j%                  ||d         }| j!                  |j"                  |       |j'                         D ]5  }| j)                  |j*                  |j,                     |j                         7 t        t        j                  d      dz        j                  }t        t        d      | j                  || j.                  z  k\  | j                  | j0                  k(  | j.                  |j2                  k(  g      }| j                  t               j                  |             |j                  |j                               }t               j                  |      }t        ||d         }| j!                  |j"                  |       t               j%                  ||d         }| j!                  |j"                  |       |j'                         D ]5  }| j)                  |j*                  |j,                     |j                         7  y )Nr0   r   r8   )r+   r-   r+   )r4   r   rQ   onesrC   r   r   r'   r1   r<   r   r=   r>   r(   r   r"   r?   r@   r   rU   rT   rA   rB   r3   r2   rS   )	r5   r   rS   rD   rE   rF   rG   rH   rX   s	            r!   test_matrix_lpzTestLinearCone.test_matrix_lp   sg   ll 	7F)//A(466QZ+?1*MNAOO.088;<WWV[[]+F&(..q1E q2D""4<<8)+224qBH""8#3#3V<{{} 7++H,@,@,H,/II77 *+11AdffDFF
&:&*ff&6!##&G HAOO.088;<WWV[[]+F&(..q1E q2D""4<<8)+224qBH""8#3#3V<{{} 7++H,@,@,H,/II771	7r#   c                 Z   | j                   D ]  }t        t        | j                        t	        | j
                  d      | j                  k  g      }t        t        | j                        t        | j                  | j
                        g      }| j                  t               j                  |             t               j                  |      }|j                  |d         s y|j                  |j                               }t        ||d         }| j                  |j                  |       t               j!                  ||d         }| j                  |j                  |       |j#                         D ]5  }| j%                  |j&                  |j(                     |j*                         7 t        t        | j                        t	        | j
                  dz  | j,                  dd z   d      | j                  dz   k  | j
                  dk\  | j,                  dk(  g      }t        t        | j                        t        | j                  dz   | j
                  dz  | j,                  dd z         | j
                  dk\  | j,                  dk(  g      }| j                  t               j                  |             |j                  |j                               }t               j                  |      }t        ||d         }| j                  |j                  |d       t               j!                  ||d         }| j                  |j                  |d       |j#                         D ]7  }| j%                  |j&                  |j(                     |j*                  d       9  y)zTest SOCP problems.
        r+   )rD   r   Nr8   r:   rO   )r4   r   r   r)   r	   r,   r
   r<   r   r=   r   r>   r(   r"   r?   r@   r   rU   rT   rA   rB   rC   r.   	r5   r   rD   pmodrF   rE   rG   rH   rX   s	            r!   	test_socpzTestLinearCone.test_socp   s    ll 	AF(51+=+G*HIA8DFF+c$&&$&&.A-BCDOO.088>?&(..t4E>>%(+WWV[[]+F q2D""4<<8)+224qBH""8#3#3V<{{} 7++H,@,@,H,/II77
 (5DFF2AJ1F!+LPTPVPVWXPX+X+/66Q;!+E FA8DFF+c$&&(DFF1Htvvbqz<Q.R.2ffk466Q;.H IDOO.088>?WWV[[]+F&(..t4E q2D""4<<"B)+224qBH""8#3#3VA"F{{} A++H,@,@,H,/IIa , AA;	Ar#   c           
         | j                   D ]  }t        t        | j                        t	        | j
                        | j                  k  | j
                  dk\  g      }t        t        | j                        t        | j
                  t        d      | j                        | j
                  dk\  g      }| j                  t               j                  |             t               j                  |      }|j                  |d         s y|j                  |j                               }t        ||d         }| j                  |j                   |d       t               j#                  ||d         }| j                  |j                   |d       |j%                         D ]7  }| j'                  |j(                  |j*                     |j,                  d       9 t        t        | j                        t	        | j
                  dz  | j.                  z         | j                  dz   k  | j
                  dk\  | j.                  dk\  g      }t        t        | j                        t        | j
                  dz  | j.                  z   t        d      | j                  dz         | j
                  dk\  | j.                  dk\  g      }| j                  t               j                  |             |j                  |j                               }t               j                  |      }t        ||d         }| j                  |j                   |d       t               j#                  ||d         }| j                  |j                   |d       |j%                         D ]7  }| j'                  |j(                  |j*                     |j,                  d       9  y)z(Test exponential cone problems.
        r8   r   NrO   r+   r:   )r4   r   r   r)   r   r'   r   r   r<   r   r=   r   r>   r(   r"   r?   r@   r   rU   rT   rA   rB   rC   r*   r^   s	            r!   exp_conezTestLinearCone.exp_cone   s    ll 	AF(3tvv;$&&+@$&&A+*NOA8DFF+gdffhqk466.RTXTZTZ^_T_-`aDOO.088>?&(..t4E>>%(+WWV[[]+F q2D""4<<"B)+224qBH""8#3#3VA"F~~' A++H,@,@,H,/IIa , AA
 (3tvvax$&&/@+ATVVAX+M+/66Q;!+E FA8DFF+gdffQh6GRSVZV\V\]^V^._.2ffk466Q;.H IDOO.088>?WWV[[]+F&(..t4E q2D""4<<"B)+224qBH""8#3#3VA"F~~' A++H,@,@,H,/IIa , AA;	Ar#   c                    t        d      }t        |d         }t        |      dk(  |d   dk(  |d   dk(  ||j                  k(  |dz	  g}t	        ||      }| j                  t               j                  |             t               j                  |      }| j                  t               j                  |d                t        d	      }t        |d         }|dk(  |d
dgdd
ggz	  g}t	        ||      }| j                  t               j                  |             t               j                  |      }| j                  t               j                  |d                t        d	d      }t        |d         }|d
dgdd
ggz  g}t               j                  t	        ||            \  }}| j                  t               j                  |             y)z1 Test positive semi-definite constraints
        )r-   r-   )r   r+   r8   )r   r8   g333333?)r8   r+   g333333ӿr   r0   r+   T)	symmetric)r   r   N)r   r   r   rS   r   r<   r   r=   r   r   r   r   )r5   r3   objconstraintsprobrI   _s          r!   test_psd_constraintsz#TestLinearCone.test_psd_constraints  s    VqwAw!|w#~w$ACCxAv	
 sK(//56%%d+*,44U1X>?VqwAvqaVaV$445sK(//56%%d+*,44U1X>?Vt,qwaVaV,,- "((k)BCa*,44T:;r#   c                    t        dd      }t        d|d   z  d|d   z  z
        }t        dd	|d   z  |d   z   z
  d|d   d	|d   z  z   z
  |d   |d   g      }t        |      g}t	        ||      }| j                  t               j                  |             | j                  t               j                  |             t               j                  |      }| j                  t               j                  |d                y )
Nr+   r,   shaper(   r   r:   r8   r-   r+   )r   r   r   r   r   assertFalser   r=   r<   r   r   )r5   r,   	objectiveconstr_exprrf   rg   rI   s          r!   test_nonneg_constraints_backendz.TestLinearCone.test_nonneg_constraints_backend4  s    4c*R!A$YQqT12	a1qt8ad?31Q4!ad(?3dd$ % k*+y+.+-55d;<//56%%d+*,44U1X>?r#   c                    t        dd      }t        d|d   z  d|d   z  z
        }t        dd	|d   z  |d   z   z
  d|d   d	|d   z  z   z
  |d   |d   g      }t        |      g}t	        j
                  g d
      }|d   |fg}|t	        j
                  ddg      fg}|df}t        |||      }	|	j                  d       |	j                  d       |	j                  d       |j                  }
d|
|
dk\  <   t        j                  j                  |
d	      }|d   j                         }| j                  ||d       t	        j
                  ddg      |_
        |d   j                  }
| j!                  |
t	        j
                  g d             |d   j                         }t	        j"                  d      }| j                  ||       y )Nrk   r,   rl   rn   r   r:   r8   r-   r+   )r8   r+   r   r   ir   )r   rN   rO   )ordrM   )r   r   r8   r+   g      @)r   r   r   r   rQ   rR   r   r>   verify_primal_valuesverify_dual_valuesrC   linalgnorm	violationr?   residualrT   sqrt)r5   r,   rp   rq   rf   expect_dual_var	con_pairs	var_pairsobj_pairsthexpr_valmanual_violreported_violexpected_viols                 r!    test_nonneg_constraints_end_userz/TestLinearCone.test_nonneg_constraints_end_userB  s   4c*R!A$YQqT12	a1qt8ad?31Q4!ad(?3dd$ % k*+((<0!!no67	1a&)*+	r? xI>			$   *a($$"#QiinnX1n5#A002{M!D((B8$q>**##HH\"	

 $A002}m<r#   )returnN)__name__
__module____qualname____doc__r6   rK   rY   r\   r`   rb   ri   rr   r    r#   r!   r%   r%   '   s<    -$KE\'AT7:"AH"AJ<:@"=r#   r%   )$r   numpyrQ   cvxpyr   r   r   cvxpy.atomsr   r   r   r	   cvxpy.constraintsr
   r   r   cvxpy.errorr   cvxpy.expressions.constantsr   cvxpy.expressions.variabler    cvxpy.reductions.cvx_attr2constrr   .cvxpy.reductions.dcp2cone.cone_matrix_stuffingr   cvxpy.reductions.flip_objectiver   5cvxpy.reductions.solvers.conic_solvers.clarabel_conifr   cvxpy.tests.base_testr   cvxpy.tests.solver_test_helpersr   r"   r%   r   r#   r!   <module>r      sP      - - 0 0 2 2 # 0 / ; M 9 J * <J}=X }=r#   