
    bi                     d   d Z ddlZddlZddlZddlmZ  G d d      ZdefdZ	defdZ
defd	Zdefd
ZdefdZdefdZdefdZdefdZdefdZdefdZdefdZdefdZdefdZdefdZdefdZdefdZdefdZdefdZdefdZdefdZdefdZdefdZdefdZdefdZ defdZ!defd Z"defd!Z#defd"Z$defd#Z%defd$Z&defd%Z'defd&Z(defd'Z)defd(Z* G d) d*      Z+ G d+ d,      Z, G d- d.      Z- G d/ d0      Z. G d1 d2      Z/ G d3 d4      Z0 G d5 d6      Z1y)7a4  
Copyright 2019, the CVXPY developers.

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)BaseTestc                   T    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y)SolverTestHelperNc                    |d   | _         |D cg c]  \  }}|	 c}}| _        t        j                  | j                   | j                        | _        |D cg c]  \  }}|	 c}}| _        |d   | _        |D cg c]  \  }}|	 c}}| _        |D cg c]  \  }}|	 c}}| _        t               | _
        y c c}}w c c}}w c c}}w c c}}w )Nr      )	objectiveconstraintscpProblemprob	variables
expect_valexpect_dual_varsexpect_prim_varsr   tester)	selfobj_pair	var_pairs	con_pairsc_xdvpvs	            Z/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/cvxpy/tests/solver_test_helpers.py__init__zSolverTestHelper.__init__   s    !!*34$!QA4JJt~~t/?/?@	(121!2"1+1: ;2 ;1: ;2 ;j 52 !< ;s   B<C=CCc                 @     | j                   j                  dd|i| y )Nsolver )r   solve)r   r   kwargss      r   r    zSolverTestHelper.solve%   s    		0v00    c           	      z   | j                   D cg c]  }| }}| j                  j                         D ]  }|j                  }|d   s|d   r|j	                  |dk\         /|d   s|d   r|j	                  |dk         N|d   r+|j	                  |t        j                  |      z   dk(         ~|d   r|j	                  ||j                  k(         |d   r>|j	                  |t        j                  t        j                  |            z
  dk(         |d	   r|j	                  |dz	         |d
   r|j	                  |dz         |d   r3|j	                  |t        j                  |j                        k(         R|d   s|d   s^t        j                  |j                        }|j	                  ||k(          |D ]j  }|j                         }t        |t        j                        r!t        j                  j!                  |d      }| j"                  j%                  |d|       l y c c}w )Nnonnegposr   nonposnegimag	symmetricdiagPSDNSD	hermitianbooleaninteger   ord)r	   r   r   
attributesappendr
   conjTr*   nproundvalue	violation
isinstancendarraylinalgnormr   assertAlmostEqual)	r   placesr   all_consr   attrs	round_valconviols	            r   check_primal_feasibilityz)SolverTestHelper.check_primal_feasibility(   s   #//0!A00$$& 	0ALLEX%,Q'xE%LQ'vBGGAJ! 34{#QSS)vBGGBGGAJ$7 71 <=uQ'uQ'{#RWWQSS\ 12y!U9%5HHQWW-	Y/)	0*  	;C==?D$

+yy~~d~2KK))$6:		;- 1s   	H8c                    | j                   D ]  }t        |t        j                   j                        rp|j                  }t        |t        j                   j
                        rt        j                  j                  |      }| j                  j                  |d| z         t        |t        j                   j                        rC|j                  }t        j                  |      }| j                  j                  |d| z          t        |t        j                   j                  t        j                   j                   f      r|j                  }| j                  j#                  |       t        |t        j$                        r.|j&                  }| j                  j)                  |t*               | j                  j-                  |t*               t/        dt1        |      z         y )N
   Unknown constraint type %s.)r	   r;   r
   Conedual_residualSOCr7   r=   r>   r   assertLessEqual
Inequality
dual_valueminassertGreaterEqualEqualityZeroassertIsNotNoner<   dtypeassertEqualfloatassertIsInstance
ValueErrortype)r   r@   rD   dual_violationr   min_dvcontentss          r   check_dual_domainsz#SolverTestHelper.check_dual_domainsE   sS    ## 	LC#r~~223!$!2!2c2>>#5#56%'YY^^N%CN++NB&MJC!:!:;^^..vvg7GHC".."9"92>>;N;N!OP^^++B/b"**-!xxHKK++He<KK00U; !>c!JKK)	Lr"   c                    | j                   D ]  }t        |t        j                   j                  t        j                   j                  f      r6t        j
                  |j                  |j                        j                  }nSt        |t        j                   j                  t        j                   j                  t        j                   j                  t        j                   j                  t        j                   j                  t        j                   j                  t        j                   j                  f      r5t        j
                  |j                   |j                        j                  }nct        |t        j"                        st        |t        j$                        rd}t'        j(                  |       nt+        dt-        |      z        | j.                  j1                  d|        y )Nzd
Dual variables not implemented for quadrature based approximations;
Skipping complementarity check.rI   r   )r	   r;   r
   rN   rR   vdotexprrO   r9   ExpConerL   NonNegrS   r+   	PowCone3D	PowConeNDargsRelEntrConeQuadOpRelEntrConeQuadwarningswarnrY   rZ   r   r?   )r   r@   rD   compmsgs        r   check_complementarityz&SolverTestHelper.check_complementarityb   sE   
 ## 	;C# 9 9 " 7 7 9 :wwsxx8>>C".."8"8"$.."4"4"$.."7"7"$.."5"5"$.."4"4"$..":":"$..":":"< = wwsxx8>>C!3!34
3H\H\8]=c" !>c!JKKKK))$6:%	;r"   c                 x   | j                   j                  j                  }| j                   j                  }|j                  dk(  r|j                  }n|j                   }| j                  D ]e  }t        |t        j                  j                  t        j                  j                  f      r2|j                  }|j                  }|t        j                  ||      z   }tt        |t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                   t        j                  j"                  f      r/|t        j                  |j$                  |j                        z
  }^t'                	 |j(                  }g }
	 j3                         D ]  \  }}t5        d t7        t9        d |j:                  j3                                     D              rh	 t<        j>                  jA                  |jB                        t=        jD                  |jF                        z  }|d| z  kD  s|
jI                  ||f       |jK                         rv	 t        jL                  t=        jN                  ||   jQ                         |jR                              }|dz	  }|jT                  }|d| z  kD  s|
jI                  ||f       3|jW                         rv	 t        jL                  t=        jN                  ||   jQ                         |jR                              }|dz  }|jT                  }|d| z  kD  s|
jI                  ||f       |jY                         r	 t=        jN                  ||   jQ                         |jR                        }t=        jZ                  |j\                        }t<        j>                  jA                  |      t=        jD                  |jF                        z  }|d| z  kD  sd|
jI                  ||f       y|j_                         r	 t=        jN                  ||   jQ                         |jR                        }||j`                  z   }t<        j>                  jA                  |      t=        jD                  |jF                        z  }|d| z  kD  s|
jI                  ||f       )|jc                         r	 t        jL                  t=        jN                  ||   jQ                         |jR                              }|dk  }t<        j>                  jA                  |jT                        t=        jD                  |jF                        z  }|d| z  kD  s|
jI                  ||f       |je                         s	 t        jL                  t=        jN                  ||   jQ                         |jR                              }|dk\  }t<        j>                  jA                  |jT                        t=        jD                  |jF                        z  }|d| z  kD  s|
jI                  ||f        tg        |
      rFd|  d	}	|
D ]  \  }}|	d
|jh                   d| z  }	 |	dz  }	| j.                  j1                  |	       y # t*        $ r7}dt-        |      v sJ d}	| j.                  j1                  |	       Y d }~Rd }~ww xY w)Nminimizezis not subscriptablez

            CVXPY problems with `diag` variables are not supported for
            stationarity checks as of now
            c              3   "   K   | ]  }|  	 y wNr   ).0attrs     r   	<genexpr>z?SolverTestHelper.check_stationary_lagrangian.<locals>.<genexpr>   s     ^t8^s   c                     | d   S )Nr   r   )r   s    r   <lambda>z>SolverTestHelper.check_stationary_lagrangian.<locals>.<lambda>   s
    1Q4 r"   rH   r   zo

        The gradient of Lagrangian with respect to the primal variables
        is above the threshold of 10^zr. The names of the problematic
        variables and the corresponding gradient norms are as follows:
            z
			z : 
)5r   r   ra   NAMEr	   r;   r
   rN   rR   rO   r`   rb   rL   rS   rc   r+   rd   re   rf   NotImplementedErrorgrad	TypeErrorstrr   failitemsalllistmapr3   r7   r=   r>   datasqrtsizer4   is_psdConstantreshapetoarrayshaperesidualis_nsdis_diagr*   r9   is_symmetricr6   	is_nonpos	is_nonneglenname)r   r@   Lr   rD   dual_var_valueprim_var_exprgerl   	bad_normsopt_varvr>   	g_bad_mattmp_condual_cone_violationdiag_entriesmats                      r   check_stationary_lagrangianz,SolverTestHelper.check_stationary_lagrangian{   s   II$$II''	>>Z'AA## 	,C# 9 9 " 7 7 9 :!$ #>>C".."8"8"$.."4"4"$.."5"5"$.."7"7"$.."4"4"$..":":"$..":":"< = #..99)++	, 	"A 		 GGI 4	ILWa^SASASAYAYA[-\(]^^Pyy~~aff-0EE"w-'$$dG_5>>#3 "BJJqz7I7I7KW]],[ \I'1nG*1*:*:'*R6']:!((*=w)GH^^%8 "BJJqz7I7I7KW]],[ \I'1nG*1*:*:'*R6']:!((*=w)GH__&V "

1W:+=+=+? OI#%777==#9L*,))..*FQXQ]Q]I^*^'#bF7m3!((*=w)GH))+J !#

1W:+=+=+? OI#ikk1C*,))..*=@U*U'*R6']:!((*=w)GH&&(S "BJJqz7I7I7KW]],[ \I'1nG*,))..9I9I*JRWWU\UaUaMb*b'*R6']:!((*=w)GH&&(S "BJJqz7I7I7KW]],[ \I'1nG*,))..9I9I*JRWWU\UaUaMb*b'*R6']:!((*=w)GHi4	Il y>&'-gY /C
 "+ :g',,s4&99:4KCKKS!a  	")SV333C KKS!!	"s   [9 9	\9,\44\9c                     | j                   j                  }| j                  }|| j                  j	                  |||       y y rq   )r   r9   r   r   r?   )r   r@   actualexpects       r   verify_objectivez!SolverTestHelper.verify_objective   s9    KK))&&&A r"   c                     t        t        | j                              D ]J  }| j                  |   j                  }| j                  |   }|.| j
                  j                  |||       L y rq   )ranger   r   r9   r   r   assertItemsAlmostEqual)r   r@   idxr   r   s        r   verify_primal_valuesz%SolverTestHelper.verify_primal_values   sa    T^^,- 	KC^^C(..F**3/F!22666J		Kr"   c                 |   t        t        | j                              D ]  }| j                  |   j                  }| j                  |   }|.t        |t              rAt        t        |            D ])  }||   }||   }| j                  j                  |||       + | j                  j                  |||        y rq   )	r   r   r	   rO   r   r;   r   r   r   )r   r@   r   r   r   iactexps           r   verify_dual_valuesz#SolverTestHelper.verify_dual_values   s    T--./ 
	OC%%c*55F**3/F!fd+"3v;/ M$Qi$Qi::3VLM
 KK66vvvN
	Or"   )returnN)__name__
__module____qualname__r   r    rF   r^   rm   r   r   r   r   r   r"   r   r   r      s5    	!1;:L:;2iVBKOr"   r   r   c                      t        j                  d      } | dk(  d fg}t        j                  t        j                  | d      dz         df}| t	        j
                  ddg      fg}t        |||      }|S )Nr0   r   r   r         ?r
   VariableMinimizer>   r7   arrayr   )r   r   r   r   sths        r   lp_0r     so    
$Aq&$ IBGGAqMC/0!4HRXXq!f%&'I
8Y	
:CJr"   c                  f   t        j                  dd      } t        j                  d| d   z  d| d   z  z
        }d| d   z  | d   z   d	k  | d   d| d   z  z   d	k  | d   dk\  | d   dk\  g}|d   df|d   df|d   df|d	   dfg}| t        j                  ddg      fg}|d
f}t        |||      }|S )Nr   r   r   r   r      r   r0      r
   r   r   r7   r   r   r   r   r	   r   r   r   r   s          r   lp_1r   
  s     	$S)AB1IAaD01Iqt8ad?a'Q4!ad(?a'Q419Q419K a.!$a.!$a.!$a.!$&I RXXq!f%&'I2H
8Y	
:CJr"   c                  "   t        j                  dd      } t        j                  | d   d| d   z  z         }| d   dk\  | d   dk  | d   dk(  g}|d   df|d   df|d	   d
fg}| t        j                  ddg      fg}|df}t        |||      }|S )Nr   r   r   r         ?r   r0   g           Xr   r   s          r   lp_2r     s    
$S)AAaD31:-.IQ44<1adai8Ka.!$a.!$a.$')I RXXtQi()*I5!H
8Y	
:CJr"   c                      t        j                  d      } t        j                  t        j                  |             t        j
                   f}| d fg}| dk  d fg}t        |||      }|S )Nr   r   r
   r   r   sumr7   infr   r   r   r   r   r   s        r   lp_3r   *  s^    
AARVVAY'"&&1ITIq&$ I
9i
;CJr"   c                      t        j                  d      } t        j                  t        j                  |             t        j
                  f}| d fg}| dk  d f| dk\  d fg}t        |||      }|S )Nr   r   r   r   r   s        r   lp_4r   4  si    
AARVVAY'0ITIq&$q&$!I
9i
;CJr"   c                     t        j                  g d      } t        j                  g d      }t         j                  j                  d       t         j                  j	                  dd      }|j
                  t         j                  j                  dd      z  }|j
                  }t        j                  ||f      }|| z  }|j
                  |z  }|g dxx   t         j                  j                  d      z  cc<   t        j                  d      }t        j                  ||z        || z  f}|| fg}	|dk\  d f||z  |k(  d fg}
t        ||	|
      }|S )N)
r   r   r   r0   r      r   r         )r   r   r0   g      @r   r   rH   r0   )r   r0   r   r   )r7   r   randomseedrandnr6   randvstackr
   r   r   r   )x0mu0A_minA_redAbr   r   r   r   r   r   s               r   lp_5r   ?  s    
0	1B
(()
*CIINN1IIOOAr"EGGbiinnQ**EGGE
		5%.!A	BA	c	AlOryy~~a((O 	BAQU#QV,IR	Iq&$!a%1*d!34I
9i
;CJr"   c                      t        j                         } ddlm} t        j                   |d      | z        }|t
        j                  f}| dfg}t        ||g       }|S )zTest LP with no constraintsr   r   q=
ףp?Nr
   r   cvxpy.expressions.constantsr   Maximizer7   r   r   r   r   r   r   r   r   s         r   lp_6r   W  sS    
A4HTNQ./I266"HTI
8Y
3CJr"   c                     d} t        j                  | dz         }t        j                  |       }t        j                  | dz         }t        j                  t        j                  t        j                  |                  }|dd |dd z
  |k(  |t        j                  |      k\  g}|d   df|d   dfg}|df|df|dfg}|df}t        |||      }	|	S )z
    An ill-posed problem to test multiprecision ability of solvers.

    This test will not pass on CVXOPT (as of v1.3.1) and on SDPA without GMP support.
    2   r   Nr   r           )r
   r   r   r   r%   r   )
nadeltar   r   r	   r   r   r   r   s
             r   lp_7r   b  s     	A
QqSAKKE
QqSABFF266%=12I	!"#2%	RVVAYK a.$'a.$')ITTI 2H
8Y	
:CJr"   c                  .   t        j                  ddg      } t        j                  ddg      }t        j                  dd| |g      }t        j                  |d   d|d   z  z         }|t        j                  ddg      fg}|d	f}t        ||g       }|S )
z*An LP using the variable bounds attribute.r   r   r   r   r   )r   r   boundsr   r   r   )r7   r   r
   r   r   r   )lowerupperr   r   r   r   r   s          r   lp_bound_attrr   {  s    HHdAYEHHc1XE
$S%@AAaD31:-.IRXXtQi()*I5!H
8Y
3CJr"   c                      t        j                  d      } t        j                  t        j                  |             }| d   dk\  g}|d   dfg}|df}| dfg}t	        |||      }|S )Nr   r   r0   )r
   r   r   squarer   )r   r   r	   r   r   r   r   s          r   qp_0r     sl    
AABIIaL)IQ419+Ka.!$%I1~HQI
8Y	
:CJr"   c                      t        j                  d      } t        j                  t        j                  | d      dz         df}| dk(  d fg}| t	        j
                  ddg      fg}t        |||      }|S )Nr   r   r0   r   r   r   )r   r   r   r   r   s        r   socp_0r     so    
$ABGGAqMA-.2Hq&$ IRXXq!f%&'I
8Y	
:CJr"   c                  X   t        j                  d      } t        j                         }t         j                  j                  j	                  ||       }|| d   | d   z   d| d   z  z   dk\  |dk  g}t        j
                  d| d   z  d| d   z  z   | d   z         }t        j                  g d	      }t        j                  |d
      }d}| |f||fg}t        j                  dg      t        j                  g d      g}d}	d}
|d   |f|d   |	f|d   |
fg}|df}t        |||      }|S )zu
    min 3 * x[0] + 2 * x[1] + x[2]
    s.t. norm(x,2) <= y
         x[0] + x[1] + 3*x[2] >= 1.0
         y <= 5
    r   r   r   r   r   r0   r   r   gL{9gji	g5l@decimalsg@)gy@gH?g(h?g/W@繋2+)
r
   r   r	   second_orderrL   r   r7   r   r8   r   )r   ysocr	   objexpect_xexpect_yr   
expect_socexpect_ineq1expect_ineq2r   r   r   s                 r   socp_1r    sF    	$A
A
..
%
%
)
)!Q
/CQ4!A$;QqT)S06K ++a!A$hQqT)AaD0
1CxxRSHxx1-HHXX I((J<("((3Y*Z[J%L$La.*-a.,/a.,/1I ()H
8Y	
:CJr"   c                  J   t        j                  dd      } t        j                  d| d   z  d| d   z  z
        }t        j                  | d   d| d   z  z   d	d
      }d| d   z  | d   z   dk  t         j                  j                  t        j                  dg      |      | d   dk\  | d   dk\  g}|d   df|d   t        j                  dg      t        j                  dgg      gf|d   df|d   dfg}| t        j                  ddg      fg}|df}t        |||      }|S )z>
    An (unnecessarily) SOCP-based reformulation of LP_1.
    r   r   r   r   r   r   r   r0   r   r   F)orderr   g       @g       r   )
r
   r   r   r   r	   rL   r   r7   r   r   )r   r   ra   r	   r   r   r   r   s           r   socp_2r    s:    	$S)AB1IAaD01I::adQ1XovS9Dqt8ad?a'>>%%bkk1#&6=Q419Q419K a.!$a.288RD>288cUG3D"EFa.!$a.!$&I RXXq!f%&'I2H
8Y	
:CJr"   c                    t        j                  d      }t        j                  ddg      }t        j                  d      }t        j                  d|z  d|z  gd|z  d|z  gg      }t        j
                  |d|z  g      |j                  z  }t        j
                  ddg      }t        j
                  ddg      }t        j                  ||z  ||z  ||z  g      }t        j                  t        j                  d            }	t        j                  ||z        }
| d	k(  r_t         j                  j                  |	|j                  d	
      }t        j                  g d      t        j                  g dg dg      g}nWt         j                  j                  |	|d
      }t        j                  g d      t        j                  d	d	gddgddgg      g}|
df}||fg}|t        j                  ddg      fg}t        |||      }|S )Nr   r   r   r0   r   皙?g?r   r   axis)r   g|?gWڏ?)r   -Pƕp)r   疥ݵri?W27?r  r  r  r  g`gXWA?ggOv)r
   r   r7   r   r   r*   r6   r   r   onesr   r	   rL   r   )r  r   r   root2umat1mat2mat3Xtr   rD   
con_expectr   r   r   r   s                    r   socp_3r%    s   
$A
"aAGGAJE
1u9b5j)AIq5y+ABCA77E1u9%&,D77Aq6?D77C:D
		4!8TAXtax01A
BGGAL!AAE"Iqynn  ACCa 0HH89HH;9; <

 nn  AA .HH89HHq!f&7&79 :

 9%Hz"#IRXXz;789:I
8Y	
:CJr"   c                      t        j                  ddg      } t        j                  |       df}| df}| dz  dk  df}t        ||g|g      }|S )Nr   r   )r   r0   r   r   )r
   r   r   r   )r   r   var_paircon_pairr   s        r   socp_bounds_attrr)    sW    
B7#AA#H2wH1	1~H
8hZ(
<CJr"   c                    t        j                  dd      }d|d   k  |d   dk  d|d   k  |d   dk  d	|d
   k  |d
   dk  d|d   k  |d   dk  |d   dk(  |d   dk(  |d   dk(  |d   dk(  |dz	  g}| dk(  rt        j                  |d         }|df}n-| dk(  rt        j                  |d         }|df}nt	        d      |D cg c]  }|df }}|dfg}t        |||      }|S c c}w )aT  
    Solve "Example 8.3" from Convex Optimization by Boyd & Vandenberghe.

    Verify (1) optimal objective values, (2) that the dual variable to the PSD constraint
    belongs to the correct cone (i.e. the dual variable is itself PSD), and (3) that
    complementary slackness holds with the PSD primal variable and its dual variable.
    r   r   Tr   r)   g333333?r   r   ?g?)r   r0   r   )r   r   gffffff?g)r0   r   gٿ)r   r   r   r  r0   r0   )r   r   r   rP   )r   r   g(\ؿmaxr   zUnknown objective_sense.N)r
   r   r   r   RuntimeErrorr   )	objective_senserhor	   r  r   r   r   r   r   s	            r   sdp_1r4    s6    ++Fd
3C#d)#SY#%5#d)#SY#%5#d)#SY#%53t9$c$i4&7t9>3t9>3t9>3t9PQ>!8K %kk#d)$<	E	!kk#d)$;566$/0q!T0I0tI
8Y	
:CJ 1s   C&c                     t        j                  dd      } t        j                  dd      }t        j                  ddgddgg      }t        j                  ddgddgg      }t        j                  g d	g d
g dg dg      }t        j                  g dg dg dg dg      }d}d}| t        j                  ddgddgg      f|t        j                  g dg dg dg dg      fg}t        j                  || z        t        j                  ||z        z   |k(  df|d   |k  df| dz	  t        j                  ddgddgg      f|dz	  t        j                  g dg dg dg dg      fg}	t        j
                  t        j                  || z        t        j                  ||z        z         }
|
d f}t        |||	      }|S )!z4
    Example SDO2 from MOSEK 9.2 documentation.
    r/  Tr,  r+  r   r   r   r0   )r   r   r   )r6  r0   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r6     r6  gq5@g/N@gE?)g`UA56@      r   r   )r8  g:E~?r   r   )r   r   r   r   )r   r   r          gr-  g~:&@)r   t?r   r   )r:  gm+ŧ@r   r   )r   r   r   r   )r   r   r   gFIO@gH\3J@)r
   r   r7   r   tracer   r   )X1X2C1A1C2A2r   kr   r   obj_exprr   r   s                r   sdp_2rD    s    
6T	2B	6T	2B	Aq6Aq6"	#B	Aq6Aq6"	#B	=-|L	MB	<mL	MB
A
A	RXXZ0"I.0 1 	2	RXX00'(* + 	,I 
"r'	RXXb2g.	.!	3[A	DQ$	q"(([*5'35 6 	7	q"((4<,46 7 	8	I {{288BG,rxxR/@@AH+&H
8Y	
:CJr"   c                     t        j                  d      } t         j                  j                  | d   | d   | d         }t        j                  |       dk  t        j                  |       dk\  | dk\  |g}t        j
                  d| d   z  d| d   z  z   | d   z         }|d	f}t        j                  d
g      t        j                  dg      t        j                  dg      g}|d   df|d   df|d   t        j                  d      f|d   |fg}t        j                  dgdgdgg      }| |fg}t        |||      }	|	S )z
    min   3 * x[0] + 2 * x[1] + x[2]
    s.t.  0.1 <= x[0] + x[1] + x[2] <= 1
          x >= 0
          x[0] >= x[1] * exp(x[2] / x[1])
    )r   r   r   r0   r   r   r   皙?r   gs?gq ܧgmsֿgUYF?gn@g; ?gS?g
uན?)
r
   r   r	   rb   r   r   r7   r   zerosr   )
r   cone_conr	   r  r   
expect_expr   r	  r   r   s
             r   	expcone_1rJ  ;  sI    	&!A~~%%adAaD!A$7H66!9#66!9#6K ++a!A$hQqT)AaD0
1C()H((K=)288[M+BBHHj\DZ[Ja.!$a."45a."(("89a.*-/I xx*
|j\BCHXI
8Y	
:CJr"   c                  B   t        j                  g dg dg dg      } t         j                  j                  |       }d}t	        j
                  d      }t	        j
                  dd	      }t	        j
                  dd
	      }t	        j                  t        j                  d            }t	        j                  |||z  |z  z
        }t	        j                  |j                  |z  d      |k  }t        j                  j                  |||      }	|df}
|t        j                  g d      f|t        j                  g d      fg}|df|	t        j                  g d      t        j                  g d      t        j                  g d      gfg}t        |
||      }|S )z>
    A random risk-parity portfolio optimization problem.
    )gHzG?p=
ף?(\	@)rL  gq=
ףp@q=
ףp	@)rM  rN  gzGa!@g      ?r#  r   r   r   r   sr   r0   pg.$-L@)g@2:=o?gQ|a?g1?)gSg+ٱgC4Xr   )      rS  rS  )gO}:gPpSgjeB)g1*?gZ?gݰmQf@)r7   r   r=   choleskyr
   r   r   r  r   r>   r6   r	   rb   r   )sigmar   r   r#  r   rP  r   r   con1con2r   r   r   r   s                 r   expcone_socp_1rX  U  s[    HH(((* +E 			5!AA
A
$S)A
$S)A
BGGAL!AAA	M*I771337a A%D>>!!!Q*D9%H	
BHH123	
BHH345I
 
s	./78457 	I 8Y	
:CJr"   c                     t        j                  ddgddgg      } t        j                  d      }t        j                  d      }t        j                  dd      }t        j                  ||j
                  g      }t        j                  |t        j                  d	      g      }t        j                  ||g      }|t        j                  d
gdgg      f|t        j                  dgdgg      f|t        j                  ddgddgg      fg}t        j                  |      dk(  df|dk\  t        j                  dgdgg      f|dk\  t        j                  dgdgg      f|dz	  t        j                  g dg dg dg      ft        j                  |t        j                  d      |d      t        j                  dgdgg      t        j                  dgdgg      t        j                  dgdgg      gfg}t        j                  t        j                  | |z        t        j                  |d !      z         }	|	d"f}
t        |
||      }|S )#z%
    Example sdp and power cone.
    j!ϣ?k<oH9@r0   r   r   r/  Tr,  r  gο?gcڃ?g{Gz?g{ޥ?g	}?g6?r   g/=ÿr   r9  go{1?g}
?)rZ  r[  Qo=)r[  r\  r^  )r^  r^  g<S=?r.  gm:V@>gqo6*>gwcdʝ>g)>g
&2Ч=g}TM	>r0   rQ  gmyܶ?)r7   r   r
   r   r   r6   r  hstackr   rd   r   r;  r>   r   )Sigmar   r  r"  M1M2M3r   r   rC  r   r   s               r   	sdp_pcp_1rd  v  sd    HH	K0"Z02 3E 	% A
% A
%40A	Aqss8	B	Arwwv'	(B	B8	B 
BHHzl!l$ % 	&	
BHHtff  	 	
BHHz:.!9.0 1 	2I 
a,-	
aC55" # 	$	
dBHHzl *|- . 	/	q"((CCCE F 	G 
aC	0288n=M>L=M=O 4P3588n=M>L=M=O 4P3588n=M>L=M=O 4P	3Q 	R
I  {{288EAI.a@AH+,H
8Y	
:CJr"   c            	      f   t        j                  d      } t        j                         }t        j                  d      }t         j                  j                  t	        j
                  d      || t        j                  g d            t        j                  |      |k  | d   | d   z   d| d   z  z   dk\  |d	k  g}t        j                  d| d   z  d| d   z  z   | d   z         }t	        j                  g d
      }|dz  }t	        j                  |d      }t	        j                  |d      }d	}| |f||f||fg}d}	d}
t	        j                  g d      t	        j                  g d      t	        j                  g d      g}|d   |f|d   |
f|d   |	f|d   |
fg}|df}t        |||      }|S )z
    Use a 3D power cone formulation for

    min 3 * x[0] + 2 * x[1] + x[2]
    s.t. norm(x,2) <= y
         x[0] + x[1] + 3*x[2] >= 1.0
         y <= 5
    r   r   r   )r   r   r   r   r   r0   r      r   r   r  r  gY W?)gEUD4W5@g24?gƿl?)F2V?rg  rg  )g2m @gC?gY2hr  )r
   r   r	   rd   r7   r  r   r   r   r   r8   r   )r   y_squareepisr	   r  r	  expect_episexpect_y_squarer   r  r  	expect_pcr   r   r   s                  r   pcp_1rm    s    	$A{{}H;;T"D>>++BGGAJa_A]^66$<8+Q4!A$;QqT)S0r>#K ++a!A$hQqT)AaD0
1CxxRSHa-Kxx1-H((;3KOX$O,.I &L)L>?>??@BI a.),a.,/a.,/a.,/1I ()H
8Y	
:CJr"   c                     t        j                  d      } t        j                  d      }t        j                  t        j                  |       | d   z         }t        j                  | d   | d   g      }t        j                  | d   dg      }t         j
                  j                  |||dd	g      }t        j                  d
dg      t        j                  ddg      t        j                  ddg      g}| d   | d   z   d| d   z  z   dk(  df||fg}|df}| t        j                  g d      f|dfg}	t        ||	|      }
|
S )a  
    Reformulate

        max  (x**0.2)*(y**0.8) + z**0.4 - x
        s.t. x + y + z/2 == 2
             x, y, z >= 0
    Into

        max  x3 + x4 - x0
        s.t. x0 + x1 + x2 / 2 == 2,
             (x0, x1, x3) in Pow3D(0.2)
             (x2, 1.0, x4) in Pow3D(0.4)
    r   r   r   r   r0   r   r   r  皙?g'.?g5-Ϻ?geź?g)ɾT?g      r   g0ĺ?y6gLP^?g?g'Vr@N
r
   r   r   r   r_  r	   rd   r7   r   r   )r   hyposr   arg1arg2pc_conexpect_pc_conr   r   r   r   s              r   pcp_2rx    sB    	$AKKd#ERVVE]NQqT12I99adAaD\"D99qtSk#D^^%%dD%#sDFXXz:67XXz:67XXsCj)+M 
1!sQqTz	!Q	&(:;	I ./H	
BHH9:;	I 8Y	
:CJr"   c                     ddl m} m} t        j                  d      }t        j                  ddgddgdd	gd
dgddgddgddgg      	 dj                  d   }t        j                         }t        j                  |df      }t        j                  |df      }t        j                  j                  |||z  |z  dz        }t        j                  |      dk(  |dk\  |t        j                  |      |k(  g}|d   df|d   t        j                  ddg      f|d   t        j                  dgdgdgdgdgdgdgg      t        j                  dgdgdgdgdgdgdgg      t        j                  dgd gd!gd"gd#gd$gd%gg      gf|d&   dfg}	fd'}
 | dgdg      } ||
t        j                  d(g      |d)*      }t        j                  |j                  gd|j                  z
  gg      }t        j                  |      |j                  f}|t        j                  d+gd,gd-gd.gd/gd0gd1gg      f||f|t        j                  |j                  g      fg}t        |||	      }|S )2Nr   )Boundsro   r]  g(1^gRA?g'Q?ggY{g8gHl?gu-ig?Msۿg/T8aFA?g]Vg~rog8>gg_?g*kqg      @r   g&S:r   r0   g?g!i]Kg?gN.wzf?gud?gW!?g.Oڛ>g9??g1֏zn?g|ߣg%Y$y?ggXe׿g Vc?gPTzd?gs=d?gqBfr   c                 z    t         j                  j                  d d df   | z  d d df   d| z
  z  z         S )Nr   r   r1   )r7   r=   r>   )w0DrR  s    r   
univar_objzpcp_3.<locals>.univar_obj   s<    yy~~a1glQq!tWB-??Q~GGr"   ro  gؗҜ<)r   tolg7af_}?ge?gjM?gO̴?g*?g QD{?g o?)scipy.optimizerz  ro   r
   r   r7   r   r   r  r	   rd   r   r   r   funr   )rz  ro   wr6   r#  dr  powconer	   r   r~  univar_bounds
univar_resw_optr   r   r   r}  rR  s                    @@r   pcp_3r    s   /
FA
j!K j![!J[!I  	!A 	A	
A
A
QFA77Aq6?Dnn&&q!d(AE1Q3?G66!9>167BFF1INCK	Q"	Q3*-.	Qhh######& ' hh('('('('('('(* + hh#$###$' () 	*, 
Q$3I8HA3$M*bhhuomQVWJHHz||nq:<<'7&89:EA
/HRXX&'&'&'&'&'&'&') * + URXXz~~./0	2I 8Y	
:CJr"   c                  *   t        j                  d      } t        j                  d      }| |k(  d f|dk(  d fg}t        j                  t        j                  | d      dz         df}| t	        j
                  ddg      f|dfg}t        |||      }|S )Nr   r   Tr.   r   r   r   r   )r   bool_varr   r   r   r   s         r   mi_lp_0r  5  s    
$A{{4(Hx-&a-&(IBGGAqMC/0!4HRXXq!f%&A I
8Y	
:CJr"   c                     t        j                  dd      } t        j                  d      }t        j                  d      }t        j                  d| d   z  d	| d
   z  z
        }d| d   z  | d
   z   |k  | d   d| d
   z  z   d|z  k  | dk\  |d|z  k(  |dk(  g}|df}| t        j                  d
d
g      f|d
f|dfg}|D cg c]  }|d f }}t        |||      }	|	S c c}w )Nr0   r   rO  Tr  r/   r   r   r   r   r   r   r   )
r   boolvarintvarr   r	   r   r   r   r   r   s
             r   mi_lp_1r  A  s   
AC Akk$'G[[&FB1IAaD01Iqt8ad?f,Q4!ad(?a'k16Q[(Q;	 K
 2HRXXq!f%&11I %00q!T0I0
8Y	
:CJ 1s   C c                  :   d} d}d}g g dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d#g d$g d%g d&g d'g d(g d)g d*g d+g d,g d-g d.g d/g d0g d1g d2g d3g d4g d5}t        j                  | d67      }t        j                  t        j                  t        j                  |D cg c]  }|d8   	 c}|                  }t        j                  t        j                  |D cg c]  }|d9   	 c}|            |k  g}||f}|d:   d fg}	|d fg}
t        ||
|	      }|S c c}w c c}w );Nr     i   )r   ^   i  r   )r0   i  iF  r   )r   i     r   )r   i  i  r   )r   i  iB  r   )r      i  r   )r   i  +   r   )   i/  iM  r   )	   i  i  r   )rH   i     r   )   i  r  r   )   ig  i  r   )   i  z   r   )   iV  r  r   )   r   i  r   )   i   i>  r   )   iN  i  r   )   i  ir  r   )   i  io  r   )   i}  i  r   )   iy  i+  r   )      i  r   )r7  i  i  r   )   i  H   r   )rf  ii  j  r   )   r     r   )   i  iX  r   )   i     r   )   i  r  r   )      i  r   )   i     r   )    t   i  r   )!   i  a   r   )"   i  i  r   )#   i     r   )$   i9  k   r   )%   i  r  r   )&   i  F   r   )'   i  b   r   )(     iX  r   ))   i  i  r   )*   i  i  r   )r  Q   i  r   ),   i  i  r   )-   :      r   ).   i/  i  r   )/   i  r  r   )0   i  i  r   )1   i  r  r   )r   i  i  r   Tr  r   r0   r   )r
   r   r   r   multiplyr   )r   r   zcoeffsr"  r   r   r	   r   r   r   r   s               r   mi_lp_2r  T  s   
AAA3o 3/ 31A 33 032B33/31A3  3 "13 3D3  	3 "2	3 4C	3
  3
 "33
 5F3  3 "33 5F3  3 "33 5E3  3 "33 5F3  3 "33 5F3  3 "33 5E3  3 "33 5F3  3 "23 4D3  3 "33 5F3 3 !23 4D3  3 "33 5F3  !3  !2!3F" 	At$ABFF2;;f/E!/Eq#IJKI66"++V&<qt&<a@AQFGK1~Ha.$'(ITI
8Y	
:CJ 0F&<s   FFc            
         t        j                  dd      } ddlm} t        j                   |d            }| d   | d   z   | d   z   | d   z   dk  | d   | d   z   | d   z   | d   z   dk\  | d   | d   z   dk  | d   | d   z   dk  | d   | d   z   dk  | d   | d   z   dk  | d   | d   z   dk  | d   | d   z   dk  g}|t
        j                   f}|D cg c]  }|d f }}| d fg}t        |||      }|S c c}w )	Nr   Tr  r   r   r   r0   r   r   )	r   r   r   r	   r   r   r   r   r   s	            r   mi_lp_3r  t  s>   
At$A4HQK(IQ4!A$;1%!,1Q4!A$;1%!,1Q4!A$;!#Q4!A$;!#Q4!A$;!#Q4!A$;!#Q4!A$;!#Q4!A$;!#%K BFF7#H$/0q!T0I0TI
8Y	
:CJ 1s   C3c                      t        j                  d      } ddlm} t        j                   |d      | z        }|df}| dfg}t        ||g       }|S )zTest MI without constraintsTr  r   r   r   r   )r
   r   r   r   r   r   r   s         r   mi_lp_4r    sR    
D!A4HTNQ./I4 HQI
8Y
3CJr"   c                  \   t        j                  dd      } | d   | d   z   dk(  | d   | d   z   dk(  | d   | d	   z   dk(  | d
   | d   z   dk(  | d   | d   z   dk(  | d   | d   z   dk  | d   | d   z   dk  | d   | d   z   dk  | d   | d	   z   dk  | d
   | d   z   dk  | d	   | d   z   dk  | d   | d
   z   dk  | d   | d   z   dk  | d   | d   z   dk  | d   | d   z   dk  g}t        j                  d      }|t        j                  f}|D cg c]  }|d f }}| d fg}t        |||      }|S c c}w )Nr  Tr  r0   r   r   r   r   r   r  r   rH   r  r   )r
   r   r   r7   r   r   )r  r	   r  r   r   r   r   r   s           r   mi_lp_5r    s   
B%AQ4!A$;!#Q4!A$;!#Q4!A$;!#Q4!A$;!#R51Q4<1$Q4!A$;!#Q4!A$;!#Q4!A$;!#Q4!A$;!#Q4!A$;!#Q4!A$;!#R51Q4<1$Q4!A$;!#Q4!A$;!#Q4!B%<1$&K ++a.CRVV}H$/0q!T0I0TI
8Y	
:CJ 1s   D)c                     d} d}t        j                  | fdd      }t        j                  | fd      }t        j                  |fdd      }t        j                  j	                  ||       }t        j                  j	                  |      }t        j
                  t        j                  |            }||z  |k  |d	k  t        j                  |      d
k\  t        j                  |      dk  |d   |d	   z   |d   z   d
k\  |d   |d   z   |d   z   dk\  |d   |d   z   |d   z   dk\  |d   |d
   z   dk\  |d   |d   z   dk\  |d   |d   z   dk\  |d   |d   z   dk\  |d   |d   z   d	k\  |d   dk\  |d   d	k\  |d   d	k\  |d   d	k\  |d    d	k\  |d!   d	k\  |d"   d	k\  |d#   d	k\  |d$   d	k\  |d%   d	k\  |d&   d	k\  g}t        |d'f|d'f|d'f|d'fg|D 	cg c]  }	|	d'f c}	      S c c}	w )(z0Test MILP for timelimit and no feasible solutionr  Tr   )r.   r   r  rO  r  )r%   r   r   rH   r  r   r0   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r7  r  rf  r  r  r  r  N)r
   r   r7   r   r   r   r   r   )
r   mr   r  r  r   r   r   r	   rD   s
             r   mi_lp_6r    s1   
A
A
QD$S1A
QDs#A
QDd-A
		q!A
		qABFF1I&I	A
	Q
q	R
q	R	!qtadb 	!qtada	!qtada	!qu	""	""	""	""	"
	"
	"
	"
	"
	"
	"
	"
	"
	"
	"
/K2 	D
TQI4y) +,#t,  	-s   G c            	      "   t         j                  j                  d       d} t        j                  | fd      }t        j                  | fd      }t        j                  | fd      }d}t        j
                  |dz  |z
        }t         j                  j                  |       }t        j                  |||z
  z        }|dk  |dk  |dk\  |dk  |||z  k  |d|z
  |z  k  g}t        |d	f|d	f|d	f|d	fg|D 	cg c]  }	|	d	f c}	      S c c}	w )
zPProblem that takes significant time to solve - for testing time/iteration limitsr      T)r%   r  g     @@r.  r   N)r7   r   r   r
   r   cumsumr   r   )
r   r   r  c_or_dbigrP  rR  r   r	   rD   s
             r   mi_lp_7r    s   IINN1A
QDd#A
QDd#A[[!t,F
C
		!c'A+A
		AAQK(I	Q	Q	Q	Q	Vc\	a&jCK 	D
TaY/ +,#t,  	-s   :Dc                  (   t        j                  d      } t        j                  dd      }t        j                  | d      |d   k  t        j                  | d      |d   k  | d   | d   z   d	| d   z  z   d
k\  |dk  g}t        j                  d	| d   z  d| d   z  z   | d   z   |d   z   d|d   z  z         }|df}| t	        j
                  g d      f|t	        j
                  ddg      fg}|D cg c]  }|df }}t        |||      }|S c c}w )a   
    Formulate the following mixed-integer SOCP with cvxpy
        min 3 * x[0] + 2 * x[1] + x[2] +  y[0] + 2 * y[1]
        s.t. norm(x,2) <= y[0]
             norm(x,2) <= y[1]
             x[0] + x[1] + 3*x[2] >= 0.1
             y <= 5, y integer.
    r   r   r   T)r   r/   r0   r   r   r   rF  r   g0RX?)g
g&ۿgj-?N)r
   r   r>   r   r7   r   r   )	r   r  r	   r  r   r   r   r   r   s	            r   	mi_socp_1r    s)    	$A
$-A771a=AaD(771a=AaD(Q4!A$;QqT)S06K ++a!A$hQqT)AaD01Q47!ad(B
CC()HRXXEFGRXXq!f%&(I$/0q!T0I0
8Y	
:CJ 1s   3Dc                     t        j                  d      } t        j                  d      }t        j                  d      }t        j                  d| d   z  d| d	   z  z
        }d
| d   z  | d	   z   |k  | d   d
| d	   z  z   d
z  d|z  k  | dk\  |d|z  k(  |dk(  g}|df}| t        j                  d	d	g      f|d	f|dfg}|D cg c]  }|df }}t        |||      }	|	S c c}w )z^
    An (unnecessarily) SOCP-based reformulation of MI_LP_1.
    Doesn't use SOC objects.
    r   r   Tr  r  r   r   r   r   r0   r  r   r   Nr   )
r   r  int_varr   r	   r   r   rD   r   r   s
             r   	mi_socp_2r  	  s   
 	$A{{4(Hkk$'GB1IAaD01Iqt8ad?g-aD1qt8O)Q\96a(l*a<	!K
 2HRXXq!f%&A1I )44#t4I4
8Y	
:CJ 5s   C"c                  R   t        j                  d      } t        j                  d      }t        j                  d      }t        j                  t        j                  |       | d   z         }t        j                  | d   | d   g      }t        j                  | d   |g      }t         j
                  j                  |||d	d
g      }| d   | d   z   d| d   z  z   dk(  df|dfd|k  df|dk  dfg}|df}| t        j                  g d      f|df|dfg}	t        ||	|      }
|
S )z
    max  x3 + x4 - x0
    s.t. x0 + x1 + x2 / 2 == 2,
         (x0, x1, x3) in Pow3D(0.2)
         (x2, q, x4) in Pow3D(0.4)
         0.1 <= q <= 1.9,
         q integer
    r   r   r   Tr  r   r0   r   r  ro  r   NrF  gffffff?rp  rq  r   rr  )r   rs  qr   rt  ru  rv  r   r   r   r   s              r   mi_pcp_0r     s2    	$AKKd#E
D!ARVVE]NQqT12I99adAaD\"D99qtQi!D^^%%dD%#sDF	
1!sQqTz	!Q	&-		4	
c4	I ./H	
BHH9:;		
CI
 8Y	
:CJr"   c                      e Zd Zeddededefd       Zeddededefd       Zeddededefd       Z	eddedefd       Z
eddedefd       Zeddededefd	       Zeddededefd
       Zeddededefd       Ze	 	 ddededefd       Zeddedefd       Zeddedefd       Zeddedefd       Zeddedefd       Zeddedefd       Zeddedefd       Zy)StandardTestLPsr@   dualsr   c                     t               } |j                  | fi | |j                  |       |j                  |       |r|j	                  |       |S rq   )r   r    r   r   rm   r   r@   r  r!   r   s        r   	test_lp_0zStandardTestLPs.test_lp_0B  sN    f		&#F#  (V$%%f-
r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |r|j	                  |       |S rq   )r   r    r   r   r   r  s        r   	test_lp_1zStandardTestLPs.test_lp_1L  N    f		&#F#V$  (""6*
r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |r|j	                  |       |S rq   )r   r    r   r   r   r  s        r   	test_lp_2zStandardTestLPs.test_lp_2V  r  r"   c                 b    t               } |j                  | fi | |j                  |       |S rq   )r   r    r   r   r@   r!   r   s       r   	test_lp_3zStandardTestLPs.test_lp_3`  /    f		&#F#V$
r"   c                 b    t               } |j                  | fi | |j                  |       |S rq   )r   r    r   r  s       r   	test_lp_4zStandardTestLPs.test_lp_4g  r  r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |r"|j	                  |       |j                  |       |S rq   )r   r    r   rF   rm   r^   r  s        r   	test_lp_5zStandardTestLPs.test_lp_5n  \    f		&#F#V$$$V,%%f-""6*
r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |r"|j	                  |       |j                  |       |S rq   )r   r    r   rF   rm   r^   r  s        r   	test_lp_6zStandardTestLPs.test_lp_6y  r  r"   c                     t               }dd l}|j                  j                  j                         d   r$ |j                  | fi | |j                  |       |S )Nr   gmp)r   sdpapsdpacallget_backend_infor    r   )r   r@   r  r!   r   r  s         r   	test_lp_7zStandardTestLPs.test_lp_7  sM    f>>""335e<CIIf''  (
r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |r|j	                  |       |S rq   )r   r    r   r   r   r  s        r   test_lp_bound_attrz"StandardTestLPs.test_lp_bound_attr  sP     o		&#F#V$  (""6*
r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |S rq   )r  r    r   r   r  s       r   test_mi_lp_0zStandardTestLPs.test_mi_lp_0  =    i		&#F#V$  (
r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |S rq   )r  r    r   r   r  s       r   test_mi_lp_1zStandardTestLPs.test_mi_lp_1  r  r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |S rq   )r  r    r   r   r  s       r   test_mi_lp_2zStandardTestLPs.test_mi_lp_2  r  r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |S rq   )r  r    r   r   r  s       r   test_mi_lp_3zStandardTestLPs.test_mi_lp_3  r  r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |S rq   )r  r    r   r   r  s       r   test_mi_lp_4zStandardTestLPs.test_mi_lp_4  r  r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |S rq   )r  r    r   r   r  s       r   test_mi_lp_5zStandardTestLPs.test_mi_lp_5  r  r"   Nr   Tr   )r   r   r   staticmethodintboolr   r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r  r   r"   r   r  r  @  sL   # $ L\   # $ L\   # $ L\   # 8H   # 8H   # $ M]   # $ L\   # $ L\     
   S ;K   S ;K   S ;K   S ;K   S ;K   S ;K  r"   r  c                   ,    e Zd Zeddededefd       Zy)StandardTestQPsr@   r  r   c                     t               } |j                  | fi | |j                  |       |j                  |       |r"|j	                  |       |j                  |       |S rq   )r   r    r   r   rm   r   r  s        r   	test_qp_0zStandardTestQPs.test_qp_0  s\    f		&#F#  (V$%%f-""6*
r"   Nr  )r   r   r   r  r  r  r   r  r   r"   r   r  r    s*    # $ L\  r"   r  c                       e Zd Zeddededefd       Zeddededefd       Zeddededefd       Z	eddededefd       Z
eddededefd       Zeddedefd	       Zeddedefd
       Zeddedefd       Zy)StandardTestSOCPsr@   r  r   c                     t               } |j                  | fi | |j                  |       |j                  |       |r|j	                  |       |S rq   )r   r    r   r   rm   r  s        r   test_socp_0zStandardTestSOCPs.test_socp_0  sN    h		&#F#V$  (%%f-
r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |r"|j	                  |       |j                  |       |S rq   )r  r    r   r   rm   r   r  s        r   test_socp_1zStandardTestSOCPs.test_socp_1  \    h		&#F#V$  (%%f-""6*
r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |r"|j	                  |       |j                  |       |S rq   )r  r    r   r   rm   r   r  s        r   test_socp_2zStandardTestSOCPs.test_socp_2  r&  r"   c                     t        d      } |j                  | fi | |j                  |       |j                  |       |r"|j	                  |       |j                  |       |S )Nr   r  r%  r    r   r   rm   r   r  s        r   test_socp_3ax0z StandardTestSOCPs.test_socp_3ax0  ^    !n		&#F#V$  (%%f-""6*
r"   c                     t        d      } |j                  | fi | |j                  |       |j                  |       |r"|j	                  |       |j                  |       |S )Nr   r  r*  r  s        r   test_socp_3ax1z StandardTestSOCPs.test_socp_3ax1  r,  r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |S rq   )r  r    r   r   r  s       r   test_mi_socp_1z StandardTestSOCPs.test_mi_socp_1  =    k		&#F#V$  (
r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |S rq   )r  r    r   r   r  s       r   test_mi_socp_2z StandardTestSOCPs.test_mi_socp_2  r1  r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |S rq   )r)  r    r   r   r  s       r   test_socp_bounds_attrz'StandardTestSOCPs.test_socp_bounds_attr#  s>     		&#F#V$  (
r"   Nr  r   Tr  )r   r   r   r  r  r  r   r#  r%  r(  r+  r.  r0  r3  r5  r   r"   r   r!  r!    s;   C D N^   C D N^   C D N^   s t Qa   s t Qa   s =M   s =M   c DT  r"   r!  c                   l    e Zd Zeddededefd       Zeddededefd       Zed	dededefd       Z	y)
StandardTestSDPsr@   r  r   c                     t        d      } |j                  | fi | |j                  d       |j                  |       |r"|j	                  |       |j                  |       |S )NrP   r0   r@   r4  r    r   rF   rm   r^   r  s        r   test_sdp_1minzStandardTestSDPs.test_sdp_1min.  a    El		&#F#A&$$V,%%f-""6*
r"   c                     t        d      } |j                  | fi | |j                  d       |j                  |       |r"|j	                  |       |j                  |       |S )Nr0  r0   r:  r;  r  s        r   test_sdp_1maxzStandardTestSDPs.test_sdp_1max9  r=  r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |j	                  |       |r"|j                  |       |j                  |       |S rq   )rD  r    r   rF   r   rm   r^   r  s        r   
test_sdp_2zStandardTestSDPs.test_sdp_2D  sl     g		&#F#V$$$V,  (%%f-""6*
r"   Nr  )r0   T)
r   r   r   r  r  r  r   r<  r?  rA  r   r"   r   r8  r8  ,  s~    c d P`   c d P`   
3 
4 
M] 
 
r"   r8  c                   ,    e Zd Zeddededefd       Zy)StandardTestECPsr@   r  r   c                     t               } |j                  | fi | |j                  |       |j                  |       |r"|j	                  |       |j                  |       |S rq   )rJ  r    r   r   rm   r   r  s        r   test_expcone_1zStandardTestECPs.test_expcone_1T  s\    k		&#F#V$  (%%f-""6*
r"   Nr  )r   r   r   r  r  r  r   rE  r   r"   r   rC  rC  R  s*    s t Qa  r"   rC  c                   L    e Zd Zeddededefd       Zeddededefd       Zy)	StandardTestMixedCPsr@   r  r   c                     t               } |j                  | fi | |j                  |       |j                  |       |r"|j	                  |       |j                  |       |S rq   )rX  r    r   r   rm   r   r  s        r   test_exp_soc_1z#StandardTestMixedCPs.test_exp_soc_1b  s]    		&#F#V$  (%%f-""6*
r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |j	                  |       |r"|j                  |       |j                  |       |S rq   )rd  r    r   rF   r   rm   r^   r  s        r   test_sdp_pcp_1z#StandardTestMixedCPs.test_sdp_pcp_1m  sj    k		&#F#V$$$V,  (%%f-""6*
r"   Nr6  )r   F)	r   r   r   r  r  r  r   rI  rK  r   r"   r   rG  rG  `  sT    s t Qa   	s 	t 	Rb 	 	r"   rG  c                       e Zd Zed	dededefd       Zed	dededefd       Zed	dededefd       Z	ed
dedefd       Z
y)StandardTestPCPsr@   r  r   c                     t               } |j                  | fi | |j                  |       |j                  |       |j	                  |       |r"|j                  |       |j                  |       |S rq   )rm  r    r   rF   r   rm   r   r  s        r   
test_pcp_1zStandardTestPCPs.test_pcp_1|  j    g		&#F#V$$$V,  (%%f-""6*
r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |j	                  |       |r"|j                  |       |j                  |       |S rq   )rx  r    r   rF   r   rm   r   r  s        r   
test_pcp_2zStandardTestPCPs.test_pcp_2  rP  r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |j	                  |       |r#|j                  |       |j                  |       y y rq   )r  r    r   rF   r   rm   r   r  s        r   
test_pcp_3zStandardTestPCPs.test_pcp_3  sj    g		&#F#V$$$V,  (%%f-""6* r"   c                     t               } |j                  | fi | |j                  |       |j                  |       |j	                  |       |S rq   )r  r    r   rF   r   r  s       r   test_mi_pcp_0zStandardTestPCPs.test_mi_pcp_0  sK    j		&#F#V$$$V,  (
r"   Nr6  r   )r   r   r   r  r  r  r   rO  rR  rT  rV  r   r"   r   rM  rM  z  s    	3 	4 	M] 	 	 	3 	4 	M] 	 	 +3 +4 +M] + + c <L  r"   rM  )2__doc__ri   numpyr7   cvxpyr
   cvxpy.tests.base_testr   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r%  r)  r4  rD  rJ  rX  rd  rm  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r8  rC  rG  rM  r   r"   r   <module>r[     s:      *fO fOR  &
 
   0  2	' 		 	    <  *$ D* . :! !H# 4( B)# )X$ $N! !HE EP	! 	! &! @! (! ! 2'! 'V! 4# 0# ." @J JZ N Nb# #L  4, ,r"   