
    bia                    R   d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlZddlZddlmZ ddlZddlmZ ddlZddlmZ ddl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%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/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7  G d de5      Z8y)a,  
Copyright 2017 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)redirect_stdout)Fraction)StringIO)linalg)PSDExpConeNonNegZero)DCPErrorParameterErrorSolverError)Constant	ParameterVariable)Problem)	scs_conif)ConicSolver)INSTALLED_SOLVERSSOLVER_MAP_CONIC)ECOS_DEPRECATION_MSG)BaseTest)CITATION_DICTc                      e Zd ZdZd^dZd^dZd^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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!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.d^d.Z/d^d/Z0d^d0Z1d^d1Z2d^d2Z3d^d3Z4d^d4Z5d^d5Z6d^d6Z7d^d7Z8d^d8Z9d^d9Z:d^d:Z;d^d;Z<d^d<Z=d^d=Z>d^d>Z?d^d?Z@d^d@ZAd^dAZBd^dBZCd^dCZDd^dDZEd^dEZFd^dFZGd^dGZHd^dHZId^dIZJd^dJZKd^dKZLd^dLZMd^dMZNd^dNZOd^dOZPd^dPZQd^dQZRd^dRZSd^dSZTd^dTZUd^dUZVd^dVZWd^dWZXd^dXZYd^dYZZd^dZZ[d^d[Z\d^d\Z]d^d]Z^y)_TestProblemz5Unit tests for the expression/expression 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      | _	        y )Nanamebc   x   yzr"   r"   ABr$   r"   C)
r   r   r    r!   r#   r%   r&   r(   r)   r+   selfs    S/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/cvxpy/tests/test_problem.pysetUpzTestProblem.setUp8   sz    s#s#s#!#&!#&!#&&s+&s+&s+    c           	         t        j                  | j                        }t        |      }| j	                  t        |      dt        |      dt        g       d       | j                  dz  | j                  k(  | j                  dk(  g}t        ||      }| j	                  t        |      dt        |      dt        |      d       dd| j                  j                         iz  }t        t        j                  | j                        t        | j                        t        | j                        g      }| j	                  t        |      |       y)	z%Test string representations.
        zProblem(z, )r"   r   zCminimize %(name)s
subject to %(name)s == 0
           %(name)s >= 0r   N)cpMinimizer   r   assertEqualreprr#   r   r
   r	   str)r-   objprobconstraintsresults        r.   test_to_strzTestProblem.test_to_strE   s     kk$&&!s|d$s)T"X%NOvvax466)466Q;7sK(d$s)T+EV%WX TW  	
 r{{466*T$&&\6$&&>,JKTF+r0   c                 \   t        t        j                  | j                        | j                  | j                  k  | j
                  | j                  dz   k  g      }|j                         }| j                  | j                  | j
                  | j                  g}| j                  ||       y)z#Test the variables method.
        r"   N)	r   r3   r4   r   r#   r    r(   	variablesassertCountEqual)r-   pvars_refs       r.   test_variableszTestProblem.test_variablesX   sy     BKK'$&&DFF*:DFFdffqj<P)QRvvtvvtvvtvv.eS)r0   c                 Z    t        dd       t        ddd        t        ddd d g       y )Nwithout_bounds        )r   valuewith_none_bounds)r   rG   boundswith_none_none_boundsr   r,   s    r.   test_variables_with_valuez%TestProblem.test_variables_with_valuea   s+    &c2(DA-S$Nr0   c                 8   t        t        j                  | j                        | j                  | j                  k  | j
                  | j                  dz   k  g      }|j                  | j                  | j                  | j
                  | j                  dk(  sJ y )Nr"   )r   r#   r    r(   )r   r3   r4   r   r#   r    r(   var_dictr-   r@   s     r.   test_var_dictzTestProblem.test_var_dictg   si    BKK'$&&DFF*:DFFdffqj<P)QRzz466TVV$&&QQQQr0   c                 "   t               }t        dd      }t        dd      }t        t        j                  |      | j                  |z   |k  | j
                  ||z   dz   k  g      }|j                         }|||g}| j                  ||       y)z$Test the parameters method.
        r$   Tnonpos   rT   nonnegr"   N)r   r   r3   r4   r   r    
parametersr?   )r-   p1p2p3r@   paramsrB   s          r.   test_parameterszTestProblem.test_parametersk   s     [q&vd+BKKOdffrkR&727Q;9N%OP2rlfc*r0   c                    t        d      }t        ddd      }t        ddd	      }t        t        j                  |      | j                  |z   |k  | j
                  ||z   d
z   k  g      }|j                  |||dk(  sJ y )NrX   r   r$   TrY   )rR   r   rS   rZ   )rV   r   r"   )rX   rY   rZ   )r   r   r3   r4   r   r    
param_dict)r-   rX   rY   rZ   r@   s        r.   test_param_dictzTestProblem.test_param_dictv   sx    D!qD1vd6BKKOdffrkR&727Q;9N%OP||b"====r0   c                    t        j                  d      }t        j                  t        j                  |      g       }| j	                  t
        d      5  |j                  t         j                         d d d        y # 1 sw Y   y xY w)Nlambdar   z&A Parameter (whose name is 'lambda').*)msgsolver)r3   r   r   r4   assertRaisesr   solveSCS)r-   paramproblems      r.   2test_solving_a_problem_with_unspecified_parametersz>TestProblem.test_solving_a_problem_with_unspecified_parameters}   sj    (+**R[[/4"J  L 	)MMM(	) 	) 	)s   !BB
c                    t         j                  j                  dd      }t         j                  j                  d      }t        t	        j
                  || j                  z        | j                  |k\  g      }|j                         }||g}| j                  t        |      t        |             t        ||      D ]W  \  }}| j                  |j                  |j                         | j                  |j                  |k(  j                                Y t        t	        j
                  | j                         | j                  dk\  g      }|j                         }t        j"                  d      g}| j                  t        |      t        |             t        ||      D ]Y  \  }}| j                  |j                  |j                        xr, | j                  |j                  |k(  j                                [ y)z#Test the constants method.
           r"   N)numpyrandomrandnr   r3   r4   r#   	constantsr5   lenzipassertTupleEqualshape
assertTruerG   allr   array)r-   c1c2r@   
constants_rB   r!   rs           r.   test_constantszTestProblem.test_constants   s}    \\1%\\"BKKTVV,tvv|n=[[]
2hS3z?3
C( 	2DAq!!!''1773OOQWW\..01	2 BKK'$&&A+7[[]
{{1~S3z?3
C( 	6DAqQWWagg. 6A 2 2 45	6r0   c                 n   t               }t        dd      }t        dd      }t        j                  j                  dd      }t        j                  j                  dd      }d|j	                  |      g}t        t        j                  |      | j                  |z   |k  | j                  ||z   |d   z   k  | j                  |d   k(  g      }|j                  j                  }| j                  j                  | j                  j                  z   | j                  j                  z   }	| j                  ||	       |j                  j                  }
t        j                   |j                        t        j                   |j                        z   t        j                   |j                        z   t#        |      z   }	| j                  |
|	       |j                  j$                  }|j	                  |      j                  }	| j                  ||	       |j                  j&                  }t        j                   |j                        t        j                   |j                        z   }	| j                  ||	       |j                  j(                  }t+        |j,                        }	| j                  ||	       y	)
z&Test the size_metrics method.
        r$   TrQ   rS   rU   r"   rl   r   N)r   rm   rn   ro   dotr   r3   r4   r   r    r!   size_metricsnum_scalar_variablessizer5   num_scalar_dataprodrq   num_scalar_eq_constrnum_scalar_leq_constrmax_data_dimensionmaxrt   )r-   rX   rY   rZ   rx   ry   rp   r@   n_variablesrB   n_datan_eq_constrn_leq_constrmax_data_dims                 r.   test_size_metricszTestProblem.test_size_metrics   s    [q&vd+\\1%\\1%r
O	BKKOdffrkR&7&*ffR)A,0F&F&*ff	!&<&> ? nn99ffkkDFFKK'$&&++5c* //jj!EJJrww$77%**RWW:MMPST]P^^% nn99ffRjooc* ~~;;jj!EJJrww$77s+ ~~88"((ms+r0   c                 $   t        t        j                  t        j                  | j                              | j                  dk(  g      }|j                  t        j                         |j                  }| j                  |j                  d       | j                  |j                  d       t        t        j                  t        j                  | j                              | j                  dk(  g      }|j                  t        j                         |j                  }| j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  d|j                         t        t        j                  t        j                   | j                              | j                  dk(  g      }|j                  t        j"                         |j                  }| j                  |j                  d       | j                  |j                  d       | j%                  t'        |j                  d             | j%                  t)        |      j+                  d             y)z&Test the solver_stats method.
        r   rc   infozSolverStats(solver_name=N)r   r3   r4   normr#   rf   sCLARABELsolver_statsassertGreater
solve_time	num_itersrg   
setup_timeassertInextra_statssumOSQPru   hasattrr7   
startswith)r-   r9   statss      r.   test_solver_statszTestProblem.test_solver_stats   s    r{{277466?3dffk]C

!**
%!!5++Q/5??A.r{{277466?3dffk]C

!%%
 !!5++Q/5++Q/5??A.fe//0r{{266$&&>2TVVq[MB

!&&
!!!5++Q/ 	5??A. 1 16:;E
--.HIJr0   c                     t        t        j                  t        j                  | j                              | j                  dk(  g      }|j                          t        |j                  t              sJ y )Nr   )	r   r3   r4   r   r#   rf   
isinstancecompilation_timefloat)r-   r9   s     r.   test_compilation_timez!TestProblem.test_compilation_time   sL    r{{277466?3dffk]C

$//777r0   c                 
	   t        t        j                  t        j                  | j                        dz               j                  t        j                        \  }}}|t        j                     }| j                  |j                  d       | j                  |d   j                  d       | j                  |d   j                  d       t        t        j                  t        j                  | j                        dz               j                  t        j                        \  }}}|t        j                     }| j                  |j                  dg       | j                  |d   j                  d       | j                  |d   j                  d	       t        t        j                  t        j                   | j                        dz               }|j                  t        j                  d
di      \  }}}|t        j                     }| j                  |j                  dg       | j                  |d   j                  d       | j                  |d   j                  d       |j                  t        j                  d
di      \  }}}|t        j                     }| j                  |j                  g        | j                  |d   j                  d       | j                  |d   j                  d       | j                  |d   j                  d       t        j"                  t$        v rt        t        j                  t        j                  | j                        dz               j                  t        j"                        \  }}}|t        j                     }| j                  |j                  dg       t        t        j                  t        j                  | j                        dz               j                  d      \  }}}|t        j                     }| j                  |j                  dg       | j                  |d   j                  d       | j                  |d   j                  d	       y)z&Test get_problem_data method.
        r"   rl   r!   r"   r(   r*   r$   r$   r$   r$   use_quad_objF)solver_optsrT   )rT   r$   TPr'   r   r"   ClarabelN)r   r3   r4   expr   get_problem_datar   rg   r   DIMSr5   rt   r   r#   r   socsum_squaresCVXOPTr   )r-   data_dimsr@   s        r.   test_get_problem_dataz!TestProblem.test_get_problem_data   sQ    R[[!);<=NNquuU
aK$$%1%c$/c&1R[[1)<=>OOPQPZPZ[
aK$$%A3'c$/c&1 BKKtvv 6 :;<''NE;R'S
aK$$%A3'c$/c&1''ND;Q'R
aK$$%2&c&1c$/c&188(( RWWTVV_q-@!ABSSJD!Q(()DTXXs+ R[[1)<=>OOPZ[
aK$$%A3'c$/c&1r0   c                    t        t        j                  t        j                  | j                              | j                  dk(  g      }|j                  t        j                        \  }}}|d   |d   |d   d}t        j                  |t        j                           }t        j                  ||      }t        t        j                  t        j                  | j                              | j                  dk(  g      }|j                  |||       | j                  | j                  j                   dd       | j                  |j                   dd       | j                  |j"                  t        j$                         y	)
z$Test unpack results method.
        r   r!   r(   r    )r!   r(   r    r$   placesrl   N)r   r3   r4   r   r   r   r   rg   r   dims_to_solver_dictr   r   scsrf   unpack_resultsassertAlmostEqualrG   statusOPTIMAL)r-   r9   argschaininvr   conessolutions           r.   test_unpack_resultszTestProblem.test_unpack_results  s    r{{266$&&>2TVVq[MB007eS#YT#YT#Y?--d;3C3C.DE99T5)r{{266$&&>2TVVq[MBHeS1tvv||Qq9tzz1Q7t{{AII6r0   c           	         g g d}t         j                  }t        D ]  }dD ]  }|t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  fv rct               t         _        t        t        j                  | j                  | j                  d   z         | j                  dk\  | j                  dk\  g      }|j                  ||       |t         v rRt         |   j"                  r;|j$                  j'                  t)        d      dk(         |j                  ||       t*        t         |   j,                  v r]t        t        j                  | j                        t        j.                  | j                        dk\  g      }|j                  ||       t0        t         |   j,                  v rut        j2                  | j                  dd	      }t        t        j                  | j                        t        j4                  |      dk\  g      }|j                  ||       t         j                  j7                         }t         j                  j9                          |t         _        ||   j'                  ||f         |d   D ]   \  }}t;        |       t=        |      dkD  r J  |d
   D ]   \  }}t;        |       t=        |      dk(  r J  y)z5Test silencing and enabling solver messages.
        TFr   r"   )verboserd   Tbooleanrl   rl   Frt   orderFNsysstdoutr   r3   GLPKGLPK_MIMOSEKCBCSCIPYCOPTr   r   r4   r   r#   rf   r   MIP_CAPABLEr:   appendr   r   SUPPORTED_CONSTRAINTSlogr   reshape
lambda_mingetvaluecloseprintrq   )	r-   outputsbackuprd   r   r@   a_matoutoutputs	            r.   test_verbosezTestProblem.test_verbose!  s_   
 B'' 	7F( 7 bggrzz288RVV hh1 1%Z
BKK(:;!VVq[$&&A+687--'/;;,,Xd-Cq-HI?"26":"P"PP#BKK$7"&&.A:M9NO?.v6LLL "

466s K#BKK$7"--:NRS:S9TU?jj))+

  "#
 ''f6=7	7B &dm 	#NFF&Mv;?"?	# &en 	$NFF&Mv;!###	$r0   c           	         g g d}t         j                  }t        D ]  }dD ]  }|t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  fv rct               t         _        t        t        j                  | j                  | j                  d   z         | j                  dk\  | j                  dk\  g      }|j                  ||       |t         v rRt         |   j"                  r;|j$                  j'                  t)        d      dk(         |j                  ||       t*        t         |   j,                  v r]t        t        j                  | j                        t        j.                  | j                        dk\  g      }|j                  ||       t0        t         |   j,                  v rut        j2                  | j                  dd	      }t        t        j                  | j                        t        j4                  |      dk\  g      }|j                  ||       t         j                  j7                         }t         j                  j9                          |t         _        ||   j'                  ||f         |d   D ]   \  }}t;        |       t=        |      dkD  r J  |d
   D ]   \  }}t;        |       t=        |      dk(  r J  y)z:Test silencing and enabling solver-only messages.
        r   r   r"   )solver_verboserd   Tr   r   r   r   FNr   )	r-   r   r   rd   r   r@   r   r   r   s	            r.   test_solver_verbosezTestProblem.test_solver_verboseQ  s_    B'' 	>F"/ > bggrzz288RVV hh1 1%Z
BKK(:;!VVq[$&&A+68~fE--'/;;,,Xd-Cq-HI~fM"26":"P"PP#BKK$7"&&.A:M9NO~fM.v6LLL "

466s K#BKK$7"--:NRS:S9TU~fMjj))+

  "#
'..V}==>	>B &dm 	#NFF&Mv;?"?	# &en 	$NFF&Mv;!###	$r0   c                    t        j                  dd        t        t        j                  d            }|j	                  d      }| j                  |d       ddt        fd}t        j                  d|       t        t        j                  d            }|j	                  ddd	      }| j                  |d
       |j	                  dd      }| j                  |d       |j	                  ddd      }| j                  |d       y )Ntestc                      y)Nrl    r,   s    r.   <lambda>z1TestProblem.test_register_solve.<locals>.<lambda>  s    r0   rl   )methodr    c                 
    ||fS Nr   )r-   r   r    s      r.   r   z-TestProblem.test_register_solve.<locals>.test  s    q6Mr0   r   r$   )r    r   rl   r$   rl   r"   rT   )r   r    rl   rT   r   )r   register_solver3   r4   rf   r5   int)r-   r@   r;   r   s       r.   test_register_solvezTestProblem.test_register_solve  s    v~6BKKN#'#	S 	vt,BKKN#a/(6*(6Q/(r0   c                     t        t        j                  | j                  | j                  d   z         | j                  dk\  | j                  dk\  g      }t        t                     5 }|j                  dd       ddd       j                         }t        d   |v sJ t        d   |v sJ t        j                  d      }t        j                  d      }t        j                  d      }||z  |z  }d	|z  |z  |z  d|z  |z  z   d
k  |d|z  k  |d|z  k  |dk\  g}t        j                   t        j                  |      |      }	t        t                     5 }|	j                  ddd       ddd       |j                         }t        d   |v sJ t        d   |v sJ t        j                         }t        j                  |      }
t        j                   t        j                  |
      |dk\  |dk  g      }	t        t                     5 }|	j                  ddd       ddd       |j                         }t        d   |v sJ t        d   |v sJ y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   MxY w)zTest bibtex citations.
        r   r"   T)r   bibtexNCVXPYDCPposrT   
   rl   )r   r   gpDGP      )r   r   qcpDQCP)r   r3   r4   r   r#   r   r   rf   r   r   r   Maximizeceil)r-   r@   fr   r#   r%   r&   objective_fnr:   ri   exprs              r.   test_bibtexzTestProblem.test_bibtex  sA   
 BKK 23VVq[$&&A+.0XZ( 	/AGGDG.	/jjlW%,,,U#s*** KKD!KKD!KKD!1uqy	A	AA	!R'ac1!8Q!VE**R[[6DXZ( 	>AMM$tM=	>jjlW%,,,U#s*** KKMwwqz**R[[.b!r'0BCXZ( 	?AMM$tM>	?jjlW%,,,V$+++9	/ 	/	> 	>	? 	?s$   )II(I4I%(I14I=c                    t        t        j                  t        j                  | j                                    }| j                  |j                         d       t        t        j                  t        j                  | j                                    }| j                  |j                         d       | j                  t              5  |j                  t        j                         d d d        y # 1 sw Y   y xY w)NTFrc   )r   r3   r4   norm_infr   r5   is_dcpr  re   r   rf   rg   rN   s     r.   test_is_dcpzTestProblem.test_is_dcp  s    BKKDFF 345T*BKKDFF 345U+x( 	#GG266G"	# 	# 	#s   !C66C?c           	      p   t         j                  j                  dd      }t         j                  j                  d      }t         j                  j                  dd      }t         j                  j                  d      }t         j                  j                  dd      }t         j                  j                  d      }t        j                  || j
                  z  |z
        }dt        j                  t        j                  || j
                  z               z  t        j                  t        j                  t        j                  || j
                  z        g d      d      z   }dt        j                  t        j                  || j
                  z              z  t        j                  t        j                  t        j                  || j
                  z        g d      d      z   }	t        t        j                  |      g       }
| j                  |
j                         d       t        t        j                  |      g       }
| j                  |
j                         d       t        t        j                  |	      g       }
| j                  |
j                         d       t        t        j                  |      || j
                  z  |k(  || j
                  z  |k  g      }
| j                  |
j                         d       t        t        j                  |      || j
                  z  |k(  || j
                  z  |k  g      }
| j                  |
j                         d       t        t        j                  |      t        j                  dd| j
                  z        d	k  t        j                  d| j
                  z        d
k  t        j                  d| j
                  z  d      dk  || j
                  z  |k(  g      }
| j                  |
j                         d       t        t        j                  |      t        j                  dd| j
                  z        d	k  t        j                  d| j
                  z        d
k  t        j                  d| j
                  z  d      dk  || j
                  z  |k(  g      }
| j                  |
j                         d       t        t        j                  |      t        j                  dd| j
                  dz  z        d	k  g      }
| j                  |
j                         d       t        t        j                  |      t        j                  dd| j
                  dz  z        d	k  g      }
| j                  |
j                         d       y )NrT   r$   r"   )      @r  r  r  g       @TFrl      d   i  )rm   rn   ro   r3   r   r%   absquad_over_linmaximumminimumr   r4   r5   is_qpr   )r-   r(   r    Aeqbeqr   gr8   qpwa_objnot_qpwa_objr@   s              r.   
test_is_qpzTestProblem.test_is_qp  s   LLq!$LLq!ll  A&ll  #LLq!$LLq!nnQZ!^,R^^RVVAJ%7$788RZZq466z(:<LMrRSq466z(:;;RZZq466z(:<LMrRS BKK$b)D)BKK)2.D)BKK-r2E*BKK$466\S(!dff*/:<D)BKK)466\S(!dff*/:<D)BKK$rzz!QZ'@C'G')vva$&&j'9S'@')wwq466z1'='E'*TVV|s':'< = 	D)BKK)BJJq!dff*,E,L,.FF1tvv:,>#,E,.GGAJ,Bd,J,/$&&LC,?,A B 	D)BKK$rzz!Q1_'E'L&MNE*BKK)BJJq!dffk/,Jc,Q+RSE*r0   c                    t        d      }t        t        j                  | j                  |z         |d| j                  z   k(  |dk  g      }|j                  t        j                  d      }| j                  |d       | j                  | j                  j                  d       | j                  |j                  d       y )	Nr   r   r"   r$   h㈵>rd   eps      @rl   )	r   r   r3   r  r   rf   rg   r   rG   )r-   varr@   r;   s       r.   test_variable_name_conflictz'TestProblem.test_variable_name_conflict9  s    C BKK-q466z0A3!8/LMD1vs+tvv||Q/syy!,r0   c                    t        t        j                  | j                        | j                  | j                  k\  g      }t        t        j                  d| j                  z        | j                  dk\  | j                  dk\  g      }||z   }| j                  t        |j                        d       | j                  |j                  t        j                  d      d       t        t        j                  | j                        | j                  dk  g      }t        t        j                  d| j                  z        | j                  dk  g      }||z   }| j                  t        |j                        d       | j                  |j                  t        j                  d      d       t        t        j                  d| j                  z              }t        |||g      }| j                  t        |j                        d       | j                  |j                  t        j                  d      d       t        |g      }| j                  t        |j                        d       | j                  t              5 }	||z    d d d        | j                  t        	j                         d	       y # 1 sw Y   /xY w)
Nr"   rl   r$   ư>r!     rT   r  "Problem does not follow DCP rules.)r   r3   r4   r   r    r5   rq   r:   r   rf   rg   r  r   re   r   r7   	exception)
r-   prob1prob2prob_minimizeprob3prob4prob_maximizeprob5prob_sumcms
             r.   test_add_problemszTestProblem.test_add_problemsB  s   DFF+dff.>-?@AdffH-!TVVq[/IJ]667;}22"&&d2KQODFF+dffk];AdffH-!}=]667;}22"&&d2KQO AdffH-.ue,-X112A6x~~RVV~FKw<X112A6 x( 	BEM	R\\*,PQ	 	s   J::Kc                    t        t        j                  t        | j                  d            | j                  dk\  g      }|j                  t        j                        }g d}|D ]r  }| j                  ||z  j                  t        j                        ||z  d       | j                  ||z  j                  t        j                        ||z  d       t y )Nr"   rc   )r   rl   ffffff@gbX9Hr$   r   )r   r3   r4   powr   rf   rg   r   )r-   r+  answerfactorsr  s        r.   test_mul_problemszTestProblem.test_mul_problems\  s    CN3dffk]CBFF+% 	[A""AI#4#4BFF#4#CQZXY"Z""EAI#4#4BFF#4#CQZXY"Z	[r0   c           
         t        t        j                  | j                        | j                  | j                  k\  g      }t        t        j                  d| j                  z        | j                  dk\  | j                  dk\  g      }t        t        j
                  t        | j                  | j                  z   d             | j                  dk\  g      }|d|z  z   }t        t        j                  | j                  d| j                  z  z         | j                  | j                  k\  | j                  dk\  | j                  dk\  g      }| j                  |j                  t        j                        |j                  t        j                               ||dz  z
  }t        t        j                  | j                  t        | j                  | j                  z   d      dz  z         | j                  dk\  | j                  | j                  k\  g      }| j                  |j                  t        j                        |j                  t        j                               |d|z  z   d|z  z
  }t        t        j                  | j                  dt        | j                  | j                  z   d      z  z         | j                  | j                  k\  | j                  dk\  | j                  dk\  g      }	| j                  |j                  t        j                        |	j                  t        j                               y )Nr"   rl   r$   rT   rc   r   )
r   r3   r4   r   r    r  r7  r   rf   r   )
r-   r+  r,  r.  combo1
combo1_refcombo2
combo2_refcombo3
combo3_refs
             r.   test_lin_combination_problemsz)TestProblem.test_lin_combination_problemse  sh   DFF+dff.>-?@AdffH-!TVVq[/IJS$&&!%<$<=!}M U"R[[!dff*)<="ff.!TVVq[IK
v||2;;|?)//r{{/C	E qR[[#dfftvvoq2I!2K)KL"ffk466TVV+;<>
v||2;;|?)//r{{/C	E U"QY.R[[!c$&&466/16M2M)MN"ff.!TVVq[IK
v||2;;|?)//r{{/C	Er0   c                    t        t        j                  d| j                  z        | j                  dk\  g      }|j	                  t        j
                  d      }| j                  |d       | j                  | j                  j                  d       t        t        j                  d| j                  z  | j                  z
        | j                  dk  | j                  | j                  k(  | j                  dk  g      }|j	                  t        j
                  d      }| j                  |d       | j                  | j                  j                  d       | j                  | j                  j                  d       t        t        j                  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
                  d      }| j                  |d	       | j                  | j                  j                  d       | j                  | j                  j                  d
       | j                  | j                  j                  d       t        j                  | j                        }t        || j                  dk  g      }|j	                  t        j                        }| j                  ||j                         | j                  |j                  t        j                         | j                  j                  J |j                   d   j"                  J t        t        j                  | j                        | j                  dk\  g      }|j	                  t        j                         | j                  |j                  t        j$                         t'        j(                  |j                        sJ |j                  dkD  sJ | j                  j                  J |j                   d   j"                  J t        j*                  t,        v rt        t        j                  | j                         | j                  dk\  g      }|j	                  t        j*                        }| j                  ||j                         | j                  |j                  t        j$                         t'        j(                  |j                        sJ |j                  dk  sJ t        t        j                  | j                        | j                  dk\  | j                  dk  g      }| j                  j/                  d       |j                   d   j1                  d       |j	                  t        j                        }| j                  ||j                         | j                  |j                  t        j2                         t'        j(                  |j                        sJ |j                  dk  sJ | j                  j                  J |j                   d   j"                  J t        t        j                  | j                         | j                  dk\  | j                  dk  g      }|j	                  t        j                        }| j                  ||j                         | j                  |j                  t        j2                         t'        j(                  |j                        sJ |j                  dkD  sJ y )Nr$   r"   r'  r!  r(     r#  r  gJY@gUUUUUU@gUUUUUUſrc   r   rl   )r   r3   r4   r   rf   rg   r   rG   r  r    r!   r   r   r5   r   r   r:   
dual_value	UNBOUNDEDrm   isinfr   r   
save_valuesave_dual_value
INFEASIBLE)r-   r@   r;   r   s       r.   test_scalar_lpzTestProblem.test_scalar_lp  sG   BKK$&&)DFFaK=9D1vq)tvv||Q/BKK$&&466 12VVq[$&&DFF"2DFFaK@BD1vs+tvv||Q/tvv||Q/ BKK$&&466 1C 78VVq[VVah&*dff4VVq466z)+, D1v{3tvv||Q/tvv||W5tvv||V4 kk$&&!C$&&A+'

+)199-vv||'''}}Q**666 BKK'$&&A+7	qzz"1;;/{{177###ww{{vv||###}}Q**22288((TVVG,tvv{m<AWWAHHW-FVQWW-QXXq{{3;;qww'''77Q;; BKK'$&&A+tvv{)CD!	a((+

+)1<<0{{177###ww{{vv||###}}Q**222BKK(466Q;!*DE

+)1<<0{{177###ww{{r0   c                    t        t        j                  ddgg      j                        j                  }t        t        j                  |j                  | j                  z        | j                  d d d f   |k\  g      }|j                  t        j                  d      }| j                  |d       | j                  | j                  j                  ddg       t        t        j                  ddgddgg      j                        j                  }t        ddgddgg      }t        t        j                  |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                  d      }| j                  |d
d       |j                  | j                  z  | j                  z   j                  d   }| j                  ||       | j                  | j                  j                  ddgd       | j                  | j                  j                  ddgd       y )Nrl   r"   r'  r!  rD  r$   r   rT      r      )r   rm   rw   TrG   r   r3   r4   r#   rf   rg   r   assertItemsAlmostEqualr   r&   )r-   r!   r@   r;   r(   Imatr8   s          r.   test_vector_lpzTestProblem.test_vector_lp  s   U[[1a&*,,-33BKKdff-q$w10D/EFD1vq)##DFFLL1a&9U[[1a&1a&!12445;;!Q!Q()BKKdfftvv 56ZB7*tVdff_.VV1v%VVq["#
 D1vr!4ssTVV|dff$++A.sF+##DFFLL1a&#C##DFFLL1a&#Cr0   c                 ^   t        t        j                  d            j                  }t	        t        j                  d      | j                  |k(  g      }|j                  t        j                        }| j                  |d       | j                  | j                  j                  |       y)z6Test CLARABEL with no inequality constraints.
        r'   rl   rc   N)r   rm   onesrG   r   r3   r4   r(   rf   r   r   r   rQ  r-   rP  r@   r;   s       r.   test_CLARABEL_noineqz TestProblem.test_CLARABEL_noineq  sw     UZZ'(..BKKNTVVq[M2

+vq)##DFFLL!4r0   c                    t        t        j                  d            j                  }t	        t        j                  d      | j                  |k(  g      }|j                  t
        j                        }| j                  |d       | j                  | j                  j                  |       t        t        j                  d      dz        j                  }t	        t        j                  d      | j                  || j                  z  k\  | j                  | j                  k(  | j                  |j                  k(  g      }|j                  t
        j                        }| j                  |d       | j                  | j                  j                  | j                  j                         | j                  | j                  j                  |       | j                  j                  || j                  z  j                  k\  j!                         sJ | j#                  t%        | j                  j                        t&        j(                  j*                         y )Nr'   rl   rc   r"   r$   r"   )r   rm   rU  rG   r   r3   r4   r(   rf   rg   r   rQ  r+   r)   rP  r   rv   r5   typeintfDEFAULT_INTFTARGET_MATRIXrV  s       r.   test_matrix_lpzTestProblem.test_matrix_lp  s   UZZ'(..BKKNTVVq[M2'vq)##DFFLL!4UZZ')*00BKKNTVVq466z%9%)VVtvv%5tvv}%F G,vq)##DFFLL$&&,,?##DFFLL!4TVV 2 2277999 	dffll+T->->-L-LMr0   c                    t        t        j                  | j                        | j                  | j                  k  | j                  ddgk(  g      }|j                  t        j                        }| j                  |d       | j                  | j                  j                  d       t        t        j                  | j                        | j                  | j                  k  | j                  ddgddggk(  g      }|j                  t        j                        }| j                  |d       | j                  | j                  j                  d       t        t        j                  dgdgg| j                  | j                  z   dz   z        | j                  | j                  z   ddgk\  g      }|j                  t        j                        }| j                  |d       y )Nrl   r"   rc   r$   rT   rD  )
r   r3   r4   r   r#   rf   r   r   rG   r(   r-   r@   r;   s      r.   test_variable_promotionz#TestProblem.test_variable_promotion  so   BKK'$&&DFF*:DFFq!f<L)MN,vq)tvv||Q/BKK'VVtvv%VVAA// ,vq)tvv||Q/ BKK!qc
dfftvvo.A BCVVdff_A./1,vq)r0   c                     t               }ddgddgg|z  }d|_        |j                  dt        j                  ddgddgg      j                  z  z
  j                         rJ y )Nrl   r"   r$   rT   )r   rG   rm   rw   rP  any)r-   r   r   s      r.   test_parameter_promotionz$TestProblem.test_parameter_promotion  sf    K1v1v"II%++1v1v.>"?"A"A AAFFHHHHr0   c                 p   t               }t        dd      }t        dd      }t        t        j                  || j                  z        | j                  |z   |k  | j
                  ||z   dz   k  g      }d|_        t        j                  d       |_        t        j                  d      |_        |j                  t        j                  d	      }| j                  |d
       d|_        | j                  t              5  |j                  t        j                  d	       ddd       y# 1 sw Y   yxY w)z'Test problems with parameters.
        r$   TrQ   rS   rU   r"   r   r'  r!  N)r   r   r3   r  r   r    rG   rm   rU  rf   rg   r   re   r   )r-   rX   rY   rZ   r@   r;   s         r.   test_parameter_problemsz#TestProblem.test_parameter_problems  s     [q&vd+BKK466	*TVVb[B->"r'TU+@U,VWJJt$$::f%D1vr*~. 	-GG266tG,	- 	- 	-s   "D,,D5c           
         t        t        j                  t        j                  d                  }|j	                  t        j
                  d      }| j                  |d       t        t        j                  t        j                  | j                              | j                  dk\  g      }|j	                  t        j
                  d      }| j                  |d       | j                  | j                  j                  d       t        t        j                  dt        j                  | j                  d| j                  z  z         z  | j                  z         | j                  dk\  | j                  dk  | j                  dk(  g      }|j	                  t        j
                  d      }| j                  |d       | j                  | j                  j                  d| j                  j                  z  z   d       | j                  | j                  j                  d       t        t        j                  t        j                  | j                               | j                  dk  g      }|j	                  t        j
                  d      }| j                  |d       | j                  | j                  j                  d       t        t        j                  t        j                  | j                  | j                  z
        dz         | j                  ddgk\  | j                  dd	gk  g      }|j	                  t        j                  
      }| j                  t        |      d       | j                  t        t!        | j                  j                        d   t!        | j                  j                        d   z
        d       y )Nr'  r!  r"   r$   rM  r   rD  rc   r  rl      )r   r3   r4   r  rf   rg   r   r   rG   r    r!   r  r#   r&   r   r   listr`  s      r.   test_norm_infzTestProblem.test_norm_inf'  s   BKKB01D1vq) BKKDFF 34tvv{mDD1vq)tvv||Q/BKK"++dffqx.?"@ @466 IJVVq[$&&B,!<>D1vq)tvv||an<a@tvv||Q/ BKKTVV!4 45"~FD1vr*tvv||R0 BKKDFFTVVO <q @AVV1v%tvv"b'9:<,uV}b1uT$&&,,%7%:T$&&,,=OPQ=R%RSUVWr0   c                 f   t        t        j                  t        j                  d                  }|j	                  t        j
                  d      }| j                  |d       t        t        j                  t        j                  | j                              | j                  dk  g      }|j	                  t        j
                  d      }| j                  |d       | j                  | j                  j                  d       t        t        j                  t        j                  | j                               | j                  dk  g      }|j	                  t        j
                  d      }| j                  |d       | j                  | j                  j                  d       t        t        j                  t        j                  | j                  | j                  z
        dz         | j                  ddgk\  | j                  ddgk  g      }|j	                  t        j
                  d      }| j                  t        |      d	       | j                  t        t        | j                  j                        d
   t        | j                  j                        d
   z
        d       y )Nri  r'  r!  r"   rD  r$   rM  rj     rl   rk  )r   r3   r4   norm1rf   rg   r   r   rG   r  r#   r&   r   rl  r`  s      r.   
test_norm1zTestProblem.test_norm1H  s   BKK-.D1vq) BKK 01DFFbL>BD1vq)tvv||R0 BKK$&&!1 12TVVr\NCD1vr*tvv||R0 BKK$&& 9A =>VV1v%tvv"b'9:<D1uV}b1uT$&&,,%7%:T$&&,,=OPQ=R%RSUVWr0   c                 4   t        t        j                  t        j                  dd                  }|j	                  t        j
                        }| j                  |d       t        t        j                  t        j                  | j                  d            | j                  dk  g      }|j	                  t        j
                        }| j                  |d       | j                  | j                  j                  d       t        t        j                  t        j                  | j                  d             | j                  dk  g      }|j	                  t        j
                        }| j                  |d       | j                  | j                  j                  d       t        t        j                  t        j                  | j                  | j                  z
  d      dz         | j                  ddgk\  | j                  ddgk  g      }|j	                  t        j
                        }| j                  |d	       | j                  | j                  j                  ddg       | j                  | j                  j                  ddg       t        t        j                  t        j                  | j                  | j                  z
  j                  d      dz         | j                  ddgk\  | j                  ddgk  g      }|j	                  t        j
                        }| j                  |d	       | j                  | j                  j                  ddg       | j                  | j                  j                  ddg       y )
Nri  r"   r@   rc   rD  r$   rM  rj  gA4F;)@)r   r3   r4   pnormrf   rg   r   r   rG   r  r#   r&   rQ  rP  r`  s      r.   
test_norm2zTestProblem.test_norm2b  s   BKKq 123'vq) BKK1 562G'vq)tvv||R0 BKK$&&A!6 67$&&B,H'vr*tvv||R0 BKK$&&A > BCVV1v%tvv"b'9:<'vx0##DFFLL1a&9##DFFLL2r(; BKK$&&466/)<)< BQ FGVV1v%tvv"b'9:<'vx0##DFFLL1a&9##DFFLL2r(;r0   c           	      t   t        t        j                  t        j                  t        j                  | j
                                    d| j
                  k\  g      }|j                  t        j                  d      }| j                  |d       | j                  | j
                  j                  g d       y )Nri  r'  r!  rO  )ri  ri  ri  ri  )r   r3   r4   r   r  r(   rf   rg   r   rQ  rG   r`  s      r.   test_abszTestProblem.test_abs  su    BKKrvvdff~ 67",HD1vq)##DFFLL2BCr0   c           
         | j                  t              5 }t        t        j                  t        j
                  | j                  | j                                    j                  t        j                  d       d d d        | j                  t        j                        d       | j                  t              5 }t        t        j                  t        j
                  d| j                                    j                  t        j                  d       d d d        | j                  t        |j                        d       t        j                         5  t        j                  d       | j                  t              5 }t        j                  t        j
                  | j                  ddgdd	gg            }t        |      j                  t        j                  d       d d d        | j!                  d
t        |j                        v        d d d        ddgdd	gg}t        t        j                  t        j
                  | j                  |            | j                  dk\  g      }|j                  t        j                  d      }| j#                  |dd       ddg}t        t        j                  t        j
                  || j                              | j                  dk\  g      }|j                  t        j                  d      }| j#                  |d	       ddg}ddgdd	gg}t        t        j                  t        j
                  ||                  }|j                  t        j                  d      }| j#                  |d       y # 1 sw Y   "xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nr'  r!  z8At least one argument to quad_form must be non-variable.rl   z.Invalid dimensions for arguments to quad_form.ignorerM  r   	   r)  rT      r$   r   r"   (   )re   	Exceptionr   r3   r4   	quad_formr#   r(   rf   rg   r5   r7   r*  warningscatch_warningssimplefilterru   r   )r-   r3  	objectiver   r@   r;   r!   s          r.   test_quad_formzTestProblem.test_quad_form  s   y) 	^RBKKTVVTVV <=>DDBFFX\D]	^F	

 y) 	YRBKKQ 789??rvvSW?X	YR\\*,\]$$& 	2!!(+""9- BKKTVVr1g1v=N(OP		"((D(AB OO@"2<<01 2	2 VaVBKKTVVQ 78466Q;-HD1vr!4FBKKQ 78466Q;-HD1vq)FVaVBKKQ 234D1vr*C	^ 	^	Y 	YB B	2 	2s>   A&N>AN)+OA$N6*.ON&)N36O 	;OOc                    t        t        j                  t        j                  dt        j                  | j
                        z   t        j                  | j                        z   t        j                  | j                  | j
                  z
        z   d            | j                  ddgk\  | j
                  ddgk  t        j                  | j                  | j
                  z   d      dk  g      }|j                  t        j                  d      }| j                  |d	       | j                  | j                  j                  ddg       | j                  | j
                  j                  ddg       y )
NrD  r"   rs  r$   rM  rj  r'  r!     )r   r3   r4   rt  rp  r&   r#   r  rf   rg   r   rQ  rG   r`  s      r.   test_mixed_atomszTestProblem.test_mixed_atoms  s   BKKRXXdff-=)=+-88DFF+;*<)+TVVdff_)E*FIJ!L M VV1v%tvv"b'9288DFFTVVOWX;Y]^;^_a D1vr*##DFFLL1a&9##DFFLL2r(;r0   c                 X   t        t        j                  t        j                  ddgd      | j                  z        | j                  dk\  g      }|j                  t        j                  d      }| j                  |d       | j                  | j                  j                  d       y )Nr$   rT   r"   rs  r'  r!  r   )	r   r3   r4   rt  r   rf   rg   r   rG   r`  s      r.   test_mult_constant_atomsz$TestProblem.test_mult_constant_atoms  sw    BKK!Q1 5dff <=!}MD1vr*tvv||Q/r0   c           
      6   t         j                  t         j                  t         j                  fD ]  }|t        v s|t         j                  k(  rd}nd}t        t        j                  t        j                  | j                  | j                  z               | j                  ddgk\  ddgddgg| j                  z  ddgk(  t        j                  | j                  | j                  z   d      d	k  g      }|j                  |
      }| j                  |d|       | j                  | j                  j                  ddg|       | j                  | j                  j                  ddg|       | j                  |j                   d   j"                  ddg|       | j                  |j                   d   j"                  ddg|       | j                  |j                   d   j"                  d|       t%        j&                  d      dz  }t        t        j                  d      | j(                  || j*                  z  k\  | j(                  | j,                  k(  | j*                  |j.                  k(  g      }|j                  |
      }| j                  |j                   d   j"                  ddgz  |       | j                  |j                   d   j"                  ddgz  |       | j                  |j                   d   j"                  ddgz  |        y)z)Test recovery of dual variables.
        rl   rD  r"   r$   rT   rM  rj  rs  r  rc   r   r         ?rY  r(  N)r   r   rg   r   r   r   r3   r4   rp  r#   r&   rt  rf   r   rQ  rG   r:   rE  rm   rU  r(   r+   r)   rP  )r-   rd   accr@   r;   rP  s         r.   test_dual_variableszTestProblem.test_dual_variables  s    zz155!((3 	\F**QUU?CCBKK$&&(AB!VV1v-VaV,tvv5"bAHHTVVdff_:cACD /&&vq&=++DFFLL1a&+M++DFFLL2q'#+N++AMM!,<,G,G!QX[+\++AMM!,<,G,G"c[^+_&&q}}Q'7'B'BAc&RJJv&q(BKKN!VVq466z1!VVtvv-!VVqss],- /++AMM!,<,G,GA3WZ+[++AMM!,<,G,GA3WZ+[++AMM!,<,G,GA3WZ+[9	\r0   c           
          t        t        j                   j                  d          j                  d   dk   j                  d   dk(  g      }|j	                  t        j
                  d      } j                  |d        j                   j                  j                  ddg       d}t        j                  ||z        }t        j                  |||f      }t        ||f      }t        t        j                  t        j                  |            ||k(  g      }|j	                  t        j
                  d      }||z  ||z  dz   z  dz  ||z  z
  } j                  ||       t        t        j                  t         fdt        d      D                     j                   dd	gd
dggk  g      }|j	                  t        j
                  d      } j                  |d        j                   j                   j                  g d       ddgddgg j"                  z   j                  z   }t        t        j                  |d          j                   j"                  k(   j"                  ddgk(  g      }|j	                  t        j
                  d      } j                  |d        j                   j                  j                   j"                  j                         y )Nr   r"   rl   r$   :0yE>r!  r   c              3   j   K   | ]*  }j                   ||f   j                   |d |z
  f   z    , yw)rl   N)r(   ).0ir-   s     r.   	<genexpr>z,TestProblem.test_indexing.<locals>.<genexpr>  s2     #TaDFF1a4L466!QqS&>$A#Ts   03ri  rT   )rl   ri  r  rT   r  )r   r3   r  r#   rf   rg   r   rQ  rG   rm   aranger   r   r4   r   ranger(   r&   )r-   r@   r;   nr(   r#   r8  r
  s   `       r.   test_indexingzTestProblem.test_indexing  sH   BKKq	*TVVAY!^TVVAY!^,LMD1vq)##DFFLL1a&9LL1MM!aV$aVBKKq	*Q!VH5D11ac!eQ1$vv. BKK#T5QR8#T TUVVB"a1124D1vq)##DFFLL.A AA$&&(4661BKKQ(466TVV+;TVV1v=M*NOD1vr*##DFFLL$&&,,?r0   c                    | j                   dt        d       d   }t        t        j                  |      | j                   dk(  g      }|j                  t        j                        }| j                  |d       | j                  | j                   j                  ddg       | j                   dt        j                  d       d   }t        t        j                  |      | j                   dk(  g      }|j                  t        j                        }| j                  |d       | j                  | j                   j                  ddg       y)z:Test problems that have special types as indices.
        r   r"   rl   rc   N)r#   r   r   r3   r4   rf   rg   r   rQ  rG   rm   int64)r-   costr@   r;   s       r.   test_non_python_int_indexz%TestProblem.test_non_python_int_index  s     vvaA"BKK%!}5'vq)##DFFLL1a&9 vvaA'*BKK%!}5'vq)##DFFLL1a&9r0   c                 f   t        t        j                  t        j                  | j                              | j                  ddd d f   dk  | j                  dd d f   dk(  g      }|j                  t        j                  d      }| j                  |d       | j                  | j                  j                  dg dz         t        t        j                  t        j                  | j                  ddddf               | j                  ddd d f   dk  | j                  dd d f   dk(  g      }|j                  t        j                  d      }| j                  |d       | j                  | j                  j                  ddddf   ddg       t        t        j                  t        j                  | j                  ddd d f   | j                  z   d d ddf               | j                  ddd d f   dk  | j                  dd d f   dk(  | j                  | j                  z   d d df   dk(  | j                  | j                  z   d d df   dk(  | j                  dk(  g      }|j                  t        j                  d      }| j                  |d	       | j                  | j                  j                  ddd d f   g d
       | j                  | j                  j                  g d       t        t        j                  dgdgg| j                  ddd d f   | j                  z   d d df   z        | j                  ddd d f   dk  | j                  dd d f   dk(  dgdgg| j                  | j                  z   d d df   z  dk(  | j                  | j                  z   d d df   dk(  | j                  dk(  d| j                  d d df   z  dk  g      }|j                  t        j                  d      }| j                  |d	       | j                  | j                  j                  dddf   ddg       | j                  | j                  j                  g d       t        t        j                  t        j                  | j                  ddd d f   | j                  z   d d df   d            | j                  ddd d f   dk  | j                  dd d f   dk(  | j                  | j                  z   d d df   dk(  | j                  | j                  z   d d df   dk(  | j                  dk(  g      }|j                  t        j                  d      }| j                  |d       | j                  | j                  j                  dddf   ddgd       | j                  | j                  j                  g d       t        t        j                  t        j                  | j                              | j                  ddd d f   j                  dk  | j                  dd d f   j                  dk(  g      }|j                  t        j                  d      }| j                  |d       | j                  | j                  j                  dg dz         y )Nrl   r$   r"   r   r'  r!  r   rl   r"   r"   r  )rl   r"   rl   r"   )r"   r"   rl   rl   rT   )rl   g      rl   rl   rs  ri  r   )r   r3   r  r   r+   rf   rg   r   rQ  rG   r(   r)   r4   rt  rP  r`  s      r.   test_slicingzTestProblem.test_slicing  sj   BKKtvv/$&&1a.A2EtvvaQRd|WXGX1YZD1vr*##DFFLL!I+>BKKtvva!eQh'7 89VVAaCF^q($&&A,!*;<>D1vq)##DFFLL1Q$:QFCBKKqsAv(?AaC'H IJVVAaCF^q($&&A,!*;fftvvoq!t,1DFFTVVOQT3Ja3OVVq["# D1vr*##DFFLL1a$8,G##DFFLL,?BKK!qc
dffQqS!Vntvv.Eq!t-L LMVVAaCF^q($&&A,!*;cA3Z466DFF?AqD"99Q>$&&RSUVRV@W[\@\VVq[!DFF1a4L.A"578 D1vr*##DFFLL1a$81a&A##DFFLL.ABKK$&&1a.466*A1a4)HA NOVVAaCF^q($&&A,!*;fftvvoq!t,1DFFTVVOQT3Ja3OVVq["# D1vq)##DFFLL1a$81b'!#L##DFFLL,? BKKtvv/$&&1a.2B2Ba2GPQSTPT[\I\1]^D1vr*##DFFLL!I+>r0   c                 	   t        dd      }t        dd      }t        dd      }t        dd      }t        j                  d	      }t        t	        j
                  |t	        j                  ||g      z        |d
dggk(  |g dgk(  g      }|j                  t        j                  d      }| j                  |d       t        j                  d      }t        t	        j
                  |t	        j                  ||g      z        |d
dggk(  g      }|j                  t        j                  d      }| j                  |d       t        j                  d      }t        t	        j
                  t	        j                  t	        j                  | j                  | j                  g                  | j                  d|z  k\  | j                  dk(  g      }|j                  t        j                  d      }| j                  |d       t        j                  d      }t        t	        j
                  t	        j                  t	        j                  || j                  z  || j                  z  g                  | j                  dk\  | j                  dk(  g      }|j                  t        j                  d      }| j                  |d       t        j                  d
dgg      j                  }t        t	        j
                  |j                  t	        j                  t	        j                   |      t	        j"                  |      g      z        |dk(  |dk(  g      }| j%                  t&              5 }|j                  t        j                  d       d d d        | j)                  dt+        j,                        v        t/        dt1        j                  dgdgg            }	t/        dt1        j                  dgdgg            }
t	        j                  t	        j                  ||g      t	        j                  ||g      g      }t        t	        j
                  t	        j                  |	|
g      j                  |z        |d
k(  |dk(  g      }|j                          | j                  |j2                  d       y # 1 sw Y   /xY w)Nr   r   r   r    r"   rl   r#   r$   rl   r%   rl   rD  rl   r"   r$   rT   rD  r   r!  ro  r   r  r(  r'   ri  rj  r   r   rM     r)  r$   rG   )r   rm   rU  r   r3   r4   vstackrf   rg   r   r   r(   r+   r)   rw   rP  squaresqrtre   r}  ru   r7   r*  r   nprG   )r-   r   r    r#   r%   r!   ri   r;   r3  r@   qvars_args               r.   test_vstackzTestProblem.test_vstackB  s   V#&V#&V#&V#&JJv"++a"))QF*;&;<Aq6(]9+%'( bff$7vr*JJv"++a"))QF*;&;<Aq6(]O%bff$7vq)JJv"++bffRYY7G-H&IJVVqs]VVr\#$ bff$7vr*JJv"++bffRYYDFF
AJ7O-P&QRVVq[VVr\#$ bff$7vq)KK!R	"$$"++accBIIryy|RWWQZ6P,Q&QR!V"W y) 	3RMMTM2	3<r||,- 	. fBHHqcA3Z$89fBHHrdRD\$:;99YY1v		1a& 124"++biiA&7&9&9H&DE616*,w}}c2	3 	3s   5"SSc                 d
   t        dd      }t        dd      }t        dd      }t        dd      }t        j                  d	      }t        t	        j
                  |t	        j                  |j                  |j                  g      j                  z        |d
dggk(  |g dgk(  g      }|j                  t        j                  d      }| j                  |d       t        j                  d      }t        t	        j
                  |t	        j                  |j                  |j                  g      j                  z        |d
dggk(  g      }|j                  t        j                  d      }| j                  |d       t        j                  d      }t        t	        j
                  t	        j                  t	        j                  | j                  j                  | j                  j                  g                  | j                  d|z  k\  | j                  dk(  g      }|j                  t        j                  d      }| j                  |d       t        d      }t	        j                  | j                  |g      }	t        t	        j
                  |	d   t	        j                  t	        j                  |	|	g            z         | j                  dk\  |dk\  |d   dk(  | j                  d   dk(  g      }|j                  t        j                  d      }| j                  |d       t        j                  d
dgg      j                  }t        t	        j
                  |j                  t	        j                  t	        j                  |      j                  t	        j                   |      j                  g      j                  z        |dk(  |dk(  g      }| j#                  t$              5 }
|j                  t        j                  d       d d d        | j'                  dt)        
j*                        v        t-        dddg      t-        dd d g      }}t	        j                  t	        j                  |d   |d   g      t	        j                  |d   |d   g      g      }t        t	        j
                  t	        j                  ||g      j                  |z        |d
k(  |dk(  g      }|j                          | j                  |j.                  d!       y # 1 sw Y   xY w)"Nr   r   r   r    r  r#   r  r%   r  rl   r"   r  r  r!  ro  r   r(  r'   ri  rj  r   r   rl   r   r   r   r$   r{  rM  r  r   r)  r  r  r  )r   rm   rU  r   r3   r4   hstackrP  rf   rg   r   r   r(   r+   rw   r  r  re   r}  ru   r7   r*  r   rG   )r-   r   r    r#   r%   r!   ri   r;   Dr
  r3  r@   r  r  s                 r.   test_hstackzTestProblem.test_hstacky  s   V#&V#&V#&V#&JJv"++a"))QSS!##J*?*A*A&ABAq6(]9+%'( bff$7vr*JJv"++a"))QSS!##J*?*A*A&ABAq6(]O%bff$7vq)JJv"++bffRYY$&&((7K-L&MNVVqs]VVr\#$ bff$7vr*Vyy$&&!%"++d4j266"))T4L:Q3R&RSVVq[!VQtW\466$<1+<>? bff$7vr*KK!R	"$$"++accBIIryy|~~rwwqz||6T,U,W,W&WX!V"W y) 	3RMMTM2	3<r||,- 	. 1a&)9Qr2h+G199YY!ad|$bii1qt&=>@"++biiA&7&9&9H&DE616*,w}}c2	3 	3s   4"T%%T/c                     | j                  t              5 }t        | j                  dz          ddd       | j	                  t        j                        d       y# 1 sw Y   /xY w)z7Test using a cvxpy expression as an objective.
        r"   Nz/Problem objective must be Minimize or Maximize.)re   r}  r   r#   r5   r7   r*  )r-   r3  s     r.   test_bad_objectivezTestProblem.test_bad_objective  sS     y) 	RDFF1H	R\\*,]^	 	s   AA&c                    t        t        j                  t        j                  | j                              | j                  d d d f   t        j                  ddgg      k\  g      }|j                  t        j                  d      }| j                  |d       | j                  | j                  j                  ddg       t        t        j                  t        j                  | j                              t        j                  ddgg      | j                  j                  z  t        j                  g dg      k\  g      }|j                  t        j                  d      }| j                  j                  }t        d      D cg c].  }d| j                  |df   z  d| j                  |df   z  z   |k\  0 }}t        t        j                  t        j                  | j                              |      }|j                  t        j                  d      }| j                  ||       | j                  | j                  j                  |       t        t        j                  | j                  d   | j                  j                  d	   z
        | j                  ddgdd
ggk(  g      }|j                  t        j                  d      }| j                  |d       t        t        j                  t        j                  | j                              | j                   j                  dk  g      }|j                  t        j                  d      }| j                  |d       t        j                  ddgg      j                  }t        t        j                  t        j                   |j                  dd|j                  z         d               }|j                  t        j                  d      }| j                  |d       t        j                  g dg dg      j                  }t        t        j                  t        j                  t        j                   |dd|z         j                  d d df                     }|j                  t        j                  d      }| j                  |d       t        j                  g dg dg      j                  }t        t        j                  t        j                  t        j"                  |j                        j                  d d df                     }|j                  t        j                  d      }| j                  |d       t        t        j$                  t        j                  | j                              | j                  j                  d d ddf   dk  | j                  j                  d d df   dk(  g      }|j                  t        j                  d      }| j                  |d       | j                  | j                  j                  dg dz         y c c}w )Nrl   r"   r'  r!  r$   )r   rl   r"   r   r  rl   r   rT   ri  rM  )rl   rM  r"   r(  r   r  )r   r3   r4   r   r#   rm   rw   rf   rg   r   rQ  rG   r+   rP  r  r(   r  r  r  )r-   r@   r;   rG   r  r:   result2r!   s           r.   test_transposezTestProblem.test_transpose  sr   BKKtvv/VVD!G_aVH(==>@D1vq)##DFFLL1a&9BKKtvv/[[1a&*TVVXX5i[9QQRTD1EJ1XNq1~$&&A,6!;NNBKKtvv/=''T'2vw/##DFFLL%8BKKttvvxx~ =>VVAA//02D1vq)BKKtvv/DFF7++2B1CDD1vr*KK!R	"$$BKK

1331qss7 ;D ABCD1vq)KKZ0133BKKrzz!QA'>'@'@A'F GHID1vq)KKZ0133BKKryy~'7'71'= >?@D1vq) BKKtvv/$&&((1ac62Ba2GRSUVRV[\I\1]^D1vr*##DFFLL!I+>E Os   
3Yc                 h   t        j                  ddgg      j                  }t        t	        j
                  |j                  | j                  z  |z        | j                  dk\  g      }|j                  t        j                  d      }| j                  |d       t        t	        j
                  | j                  dz        | j                  dk\  g      }|j                  t        j                  d      }| j                  |d       t        t	        j
                  | j                  j                  |z        | j                  dk\  g      }|j                  t        j                  d      }| j                  |d       t        t	        j
                  | j                  j                  | j                  j                  z   |z        | j                  dk\  | j                  dk\  g      }|j                  t        j                  d      }| j                  |d       t        j                  d	      }t        d
      }t	        j                  t	        j
                  t	        j                  ||z              |dk\  g      }|j                  t        j                  d      }| j                  |d       y)z;Test multiplication on the left by a non-constant.
        rl   r"   r'  r!     rT   r(  rz  )rD  r   rD  r   N)rm   rw   rP  r   r3   r4   r(   rf   rg   r   r   r#   r&   rU  r   r   )r-   r!   r@   r;   r(   r#   s         r.   test_multiplication_on_leftz'TestProblem.test_multiplication_on_left  s    KK!Q!##BKKdffq 01DFFaK=AD1vr*BKKq)DFFaK=9D1vq)BKK1-!}=D1vq)BKKDFFHH!4 9:VVq[$&&A+.0D1vq)JJwQKJJr{{266!a%=1AF8<D1vq)r0   c                    t        j                  t        j                  | j                              }| j                  dk(  | j                  dk(  | j                  j                  dk(  | j                  d   dk(  g}t        ||      }|j                  t        j                        }| j                  |d       t        j                  t        j                  t        j                  | j                                    }| j                  | j                  k(  g}t        ||      }|j                  t        j                        }| j                  |d       y )Nr"   r   rc   rT   )r3   r4   r   r#   rP  r   rf   r   rg   r   r  )r-   r8   r:   r@   r;   s        r.   test_redundant_constraintsz&TestProblem.test_redundant_constraints  s    kk"&&.)vv{DFFaKQq	QOC%&vq)kk"&&466!234vv'(C%&vq)r0   c                    t        t        j                  t        j                  | j                              | j                  dk\  g      }|j                  t        j                         | j                  | j                  j                  | j                  j                  j                  d       t        t        j                  t        j                  | j                              | j                  ddgddggk(  g      }|j                  t        j                         | j                  |j                  t        j                         y )Nr"   rc   r$   r   rl   rT   )r   r3   r4   
lambda_maxr(   rf   rg   rQ  rG   rP  r5   r   r   rJ  rN   s     r.   test_sdp_symmetryzTestProblem.test_sdp_symmetry  s    BKKdff 561F	rvv##DFFLL$&&,,..#KBKKdff 56QFQPQFCS9S8TU	rvv1<<0r0   c                    t        j                  | j                  d   | j                  d   z
        }t        |t        j                  | j                        dk  | j                  d   dk(  | j                  d   dk(  | j                  d   dk(  g      }|j                  t         j                        }| j                  |dd	
       y )Nr  r  r  r  r"   r   rc   r   r$   r   )r3   r  r(   r   r  rf   rg   r   )r-   r8   r@   r;   s       r.   test_sdpzTestProblem.test_sdp  s    kk$&&,56C"--/36&&,!+&&,!+&&,!+- . 'vq3r0   c                    | j                   | j                  z
  }t        j                  |      }dt        j                  | j                        z   t        j                  | j                         z   |z   }t        j
                  | j                   | j                  z   d      }t        j
                  |d      }t        t        j                  |      | j                   ddgk\  | j                  ddgk  |dk  g      }|j                  t        j                  d      }| j                  |d	       | j                  | j                   j                  ddg       | j                  | j                  j                  ddg       | j                  |j                  | j                   j                  | j                  j                  z
         | j                  |j                  t        j                  | j                   j                  | j                  j                  z
  t        j                                | j                  |j                  dt        j                  | j                  j                  d
      z   t        j                  | j                   j                  d
      z   t        j                  | j                   j                  | j                  j                  z
  t        j                         z          | j                  |j                  t        j                  | j                   j                  | j                  j                  z   d             | j                  |j                  |       y )NrD  r"   rs  r$   rM  rj  r'  r!  r  rl   )r#   r&   r3   r  rp  rt  r   r4   rf   rg   r   rQ  rG   LAr   rm   inf)r-   diff_expinf_expsum_exp
constr_expr8   r@   r;   s           r.   test_expression_valuesz"TestProblem.test_expression_values%  sB   66DFF?++h'bhhtvv&&$&&)99GCXXdfftvvo3
hhw!$BKK$VV1v%tvv"b'9:?KMD1vr*##DFFLL1a&9##DFFLL2r(;##HNNDFFLL466<<4OPw}}!wwtvv||dffll'BEIIN	Pw}} 277466<<#;;bggdffllTU>VV!wwtvv||dffll'BEIIN O	P 	z//!wwtvv||dffll'BAF	Hsyy&1r0   c                 P   d| j                   _        d| j                   z  }| j                  |j                  d       t        j                  |      }t        |      }|j                  t        j                        }| j                  |d       | j                   j                  J y)z%Test multiplication by zero.
        rl   r   rc   N)	r   rG   r5   r3   r4   r   rf   r   r   )r-   r   r8   r@   r;   s        r.   test_mult_by_zerozTestProblem.test_mult_by_zero<  s     hA&kk#CL,vq)vv||'''r0   c                 
   t        j                  t        j                  | j                  dz              }t	        || j                  dk\  g      }|j                  t         j                        }| j                  |d       t        j                  ddgddgg      }| j                  d|z  z  }t        j                  t        j                  |            }t	        || j                  dk(  g      }|j                  t         j                        }| j                  |d       | j                  |j                  dd	gdd
gz          ddlm} t        j                  |j                        }|j!                  ddg      }t        j                  |      }| j"                  dddf   d|z  z  }t        j                  t        j                  |            }t	        || j"                  dk(  g      }|j                  t         j                        }| j                  |d       | j                  |j                  ddg       ddgddgg}t        j                  |      }| j$                  d|z  z  }t        j                  t        j                  |            }t	        || j$                  dk(  g      }|j                  t         j                        }| j                  |d       | j                  |j                  dd	gdd
gz          y)z'Tests a problem with division.
        rD  rc   rl         ?rM  r"   ri  r   r   N)r3   r4   r  r(   r   rf   r   r   r   rQ  rG   scipy.sparsesparser[  get_matrix_interface	csc_arrayconst_to_matrixr#   r   )r-   r8   r@   r;   r!   r
  sp	interfaces           r.   test_divzTestProblem.test_divH  s\    kk"++dffQh/0C$&&A+',vq)KK"bAr7+,vvr!t}kk"++d+,C$&&A+',vr*##DJJB2s)0CD 	"--bll;	%%q!f-KKNvvag!$kk"++d+,C$&&A+',vr*##DJJB8 Wq"gKKNvvqs|kk"++d+,C$&&A+',vr*##DJJB2s)0CDr0   c                    ddgddgg}t        j                  || j                        }t        j                  t        j                  |            }t        || j                  dk(  g      }|j                  t         j                        }| j                  |d       | j                  |j                  ddgdd	gz          d
dlm} t        j                  |j                        }|j!                  ddg      }t        j                  || j"                  dddf         }t        j                  t        j                  |            }t        || j"                  dk(  g      }|j                  t         j                        }| j                  |d       | j                  |j                  j%                         ddg       ddgddgg}t        j                  || j&                        }t        j                  t        j                  |            }t        || j&                  dk(  g      }|j                  t         j(                        }| j                  |d       | j                  |j                  ddgdd	gz          y)z&Tests problems with multiply.
        rl   rM  r"   ri  rD  rc   r   r  r  r   N)r3   multiplyr(   r4   r  r   rf   r   r   rQ  rG   r  r  r[  r  r  r  r#   toarrayr   rg   )r-   r!   r
  r8   r@   r;   r  r  s           r.   test_multiplyzTestProblem.test_multiplyn  s    Wq"g{{1dff%kk"++d+,C$&&A+',vr*##DJJB2s)0CD 	"--bll;	%%q!f-{{1dffQWo.kk"++d+,C$&&A+',vr*##DJJ$6$6$81b'B Wq"g{{1dff%kk"++d+,C$&&A+''vr*##DJJB2s)0CDr0   c                    | j                  t              5  t        t        j                  t        d                  j                  t        j                         ddd       | j                  t              5  t        t        j                  t        j                  | j                                    j                  t        j                         ddd       | j                  t              5  t        t        j                  | j                              j                  t        j                         ddd       y# 1 sw Y   xY w# 1 sw Y   zxY w# 1 sw Y   yxY w)z@Tests that errors occur when you use an invalid solver.
        Tr   rc   N)re   r   r   r3   r4   r   rf   r   r   r  r(   r   rg   r,   s    r.   test_invalid_solversz TestProblem.test_invalid_solvers  s     {+ 	NBKK 678>>aff>M	N {+ 	MBKKdff 567==QVV=L	M {+ 	=BKK'(..aee.<	= 	=	N 	N	M 	M	= 	=s&   AE:AE1AEE
EE"c                 P   | j                  t              5  t        t        j                  t        j
                  t        j                  d      dz   t        j                  dgg      d                  j                  t        j                         ddd       y# 1 sw Y   yxY w)z@Tests that a SolverError is raised when a solver fails.
        rl   rM  Trc   N)re   r   r   r3   r4   r~  r   r  rw   rf   r   r   r,   s    r.   #test_solver_error_raised_on_failurez/TestProblem.test_solver_error_raised_on_failure  sx     {+ 	BKKR[[^a-?B4&AQSW XYZ``vv a 	 	 	s   A=BB%c                    t         j                  j                  dd      }t        j                  |t         j                  j                  d            }t
        j                  ddift
        j                  g}t
        j                  ddift
        j                  i fg}dddifdg}|||fD ]|  }| j                  t        t        j                  t        j                  t        j                  |t        j                  d            |z
                    j                  |             ~ t
        j                  ddifg}| j                  t              5  t        t        j                  t        j                   t        j                  d      dz   t#        j$                  dgg      d                  j                  |       d	d	d	       d
i id
g dgdgdgdi fgt
        j                  g fgt
        j                  fgg	}|D ]  }| j                  t&              5  t        t        j                  t        j                  t        j                  |t        j                  d            |z
                    j                  |       d	d	d	        | j                  t&              5  t        t        j                  t        j                  t        j                  |t        j                  d            |z
                    j                  t
        j                  gt
        j                         d	d	d	       y	# 1 sw Y   vxY w# 1 sw Y   MxY w# 1 sw Y   y	xY w)aL  
        Tests the solve_solver_path method under various conditions:

        1. Verifies that a SolverError is raised when all solvers fail.
        2. Validates that a solution is returned when any of the solvers succeeds.
        3. Ensures that a ValueError is raised when the inner inputs of the solvers are invalid.

        r|  max_iterrl   osqpr   )solver_pathrM  TNr7   r   )r  rd   )rm   rn   ro   r3   matmulr   r   r   assertIsNotNoner   r4   r   r   rf   re   r   r~  r  rw   
ValueError)r-   r(   r    solvers_with_strsolvers_empty_dictsolvers_wrong_casesolverssolvers_invalid_inner_inputs           r.   test_solve_solver_pathz"TestProblem.test_solve_solver_path  s    LLr2&IIa++B/0 66Jq>2AJJ?VVj^4qzz26FG#j^4jA(*<>PQ 	&G  ryyBKKO<q@A*C "DDIE# EJ E%&	& FFZN+,{+ 	BKKR[[^a-?B4&AQSW XYZ``# a 	 ).bz5"qcB41RSTVQWPX*+&&	{'D# 3 	)G"":. )NN299QB#@1#DEG HHM ' IN I)) )	) z* 	9NN299QB#@1#DEG HHM!" IN I9	9 	9!	 	) )	9 	9s'   A/L7A,M$B
M7MM	Mc                 	   | j                  t        j                  ddd      j                  d       t	        d      }t        j                  ddgddgg      j                  }t        j                  g d	g      j                  }t        j                  ddgd
dgg      j                  }t        j                  |dd      }t        j                  t        j                  ||z              }t        ||dddf   |k(  g      }|j                  t        j                        }| j                  |t        j                  |j                  |                   g d	}	t        j                  | j                  dd      }t        j                  |j                  |	z        }| j                  ddgd
dggk(  g}
t        ||
      }|j                  t        j                        }| j                  |d       | j!                  |j                  g d       | j!                  t        j                  |dd      j                  g d       t        j                  | j"                  dd      }t        j                  ddgddgg      }t        j                  ddgddgd
dgg      }t        j                  t        j                  ||z              }t        || j"                  |k(  g      }|j                  t        j                        }t        j                  |dd      }| j                  ||j                  |      j                                | j!                  |j                  |       t        j                  ddgddgg      j                  }	t        j                  |	| j$                  z  dd      }t        j                  |g d	z        }t        || j$                  dk(  g      }|j                  t        j                        }| j                  |d       | j!                  |j                  d|	z         t        j                  |	| j$                  z  dd      }t        j                  |j                  g d	z        }t        || j$                  dk(  g      }|j                  t        j                        }| j                  |d       | j!                  |j                  d|	z         y)z%Tests problems with reshape.
        rl   r   r   r   rT   rM  r"   ri  rl   r"   r$   rT   r$   r'   Nrc   )rT   rl      rM  ri  r$   rT   rY  rD  r(  r   rf  )r5   r3   r   rG   r   rm   rw   rP  r4   r   r   rf   rg   r   r~   r(   rQ  r+   r   )r-   r#   matvecvec_matr
  r8   r9   r;   r!   r:   C_matreshapeds                r.   test_reshapezTestProblem.test_reshape  s    	AvS9??C QKkkAr7QG,-//kk<.)++++1v1v./11zz!V3/kk"&&t,-sQq$wZ3./0266*vuyy1A'BC zz$&&&4kk$&&1*%vv2r(QF!334sK(266*vr*##DJJ?##BJJtV3$G$M$M~^ zz$&&&4kkAr7QG,-aVaVaV45kk"&&t,-sTVVu_-.266*==c:v(9'>'>'@A##DJJ6 KK!R1b'*+--zz!dff*fC8kk$-.sTVVq[M*266*vr*##DJJ!4zz!dff*fC8kk$&&</0sTVVq[M*266*vr*##DJJ!4r0   c                 <   t        j                  d      }t        j                  t        j                  t        j                  |            t        j
                  |d      dk\  g      }|j                  t         j                  d      }| j                  |d       y)z#Test problems with cumsum.
        rD  r   g-C6r  r!  N)	r3   r   r   r4   r   cumsumrf   rg   r   r-   ttr9   r;   s       r.   test_cumsumzTestProblem.test_cumsum  sn     [[^zz"++bffRj199R+w679266t4vw/r0   c                 f   t        j                  d      }t        j                  t        j                  t        j                  |            t        j
                  |d      t        j                  g d      k  g      }|j                  t         j                  d      }| j                  |d       y)z#Test problems with cummax.
        rD  r   )rl   r"   r$   rT   rD  r'  r!  ro  N)r3   r   r   r  r   cummaxrm   rw   rf   rg   r   r  s       r.   test_cummaxzTestProblem.test_cummax  sx     [[^zz"++bffRj199R+u{{?/KKLN266t4vr*r0   c                 v   g d}t        j                  | j                  d      }t        j                  |j                  |z        }| j                  ddgddggk(  g}t        ||      }|j                  t         j                        }| j                  |d	       | j                  |j                  g d
       y)z!Tests problems with vec.
        r  r   r  rM  ri  r$   rT   rc   r  r  N)r3   r  r(   r4   rP  r   rf   rg   r   rQ  rG   )r-   r!   r
  r8   r:   r9   r;   s          r.   test_veczTestProblem.test_vec  s     vvdffC(kk$&&1*%vv2r(QF!334sK(266*vr*##DJJ?r0   c                 6   t        d      }t        j                  |d         }t        j                  |      dk(  |d   dk(  |d   dk(  |t        dd	      k(  g}t	        ||      }|j                  t        j                  
      }| j                  |dd       y)z"Test a problem with diag.
        r   r   rl   r  333333?r   333333ӿTr   rc   x&4I,?r"   r   N)r   r3   r  diagr   rf   rg   r   r-   r+   r8   r:   r9   r;   s         r.   test_diag_probzTestProblem.test_diag_prob%  s     Vkk!D'"wwqzQw#~w$HV668 sK(266*vx:r0   c           
      V   d}t        j                  t        |dz              j                  ||f      }t	        | dz   |      D ]a  }t        j                  |t        |      z
        }t        j                  t        j                  |            }t        j                  ||      t        j                  t        j                  ||      |      k(  g}t        j                  ||      }|j                  t
        j                  d      }| j                  |t        j                  t        j                  ||                   t        j                  |j                   t        j                  ||      d      sJ t        j                  ||fd	      }	t        j                  t        j                  |	            }t        j                  |	|      t        j                  ||      k(  g}t        j                  ||      }|j                  t
        j                  d      }| j                  |t        j                  t        j                  ||                   t        j                  |	j                   t        j                  t        j                  ||      |      d      rbJ  y )
NrT   r"   rl   r'  r!  g-C6?)atolTrU   )r  r  r   r   r  r3   r   r  r4   r   r
  r   rf   rg   r   allcloserG   )
r-   r  r(   kr#   r8   r:   r9   r;   Xs
             r.   test_diag_offset_problemz$TestProblem.test_diag_offset_problem2  s    IIc!Q$i ((!Q0rAvq! 	NAAAJ'A++bffQi(C771a=BGGBGGAqM1,EEFK::c;/DZZrvv4Z8F""6266"''!Q-+@A;;qww1DAAA QF40A++bffQi(C771a=BGGAqM9:K::c;/DZZrvv4Z8F""6266"''!Q-+@A;;qww1q(AMMM%	Nr0   c                    t        d      }t               }t        j                  |      }t	        ||dk(  |dk\  g      }d|_        |j                  t        j                         | j                  |j                  t        j                         d|_        |j                  t        j                         | j                  |j                  t        j                         y)z'Test presolve with parameters.
        TrU   rl   r   rc   N)r   r   r3   r4   r   rG   rf   r   rg   r5   r   rJ  r   )r-   gammar#   r8   r9   s        r.   test_presolve_parametersz$TestProblem.test_presolve_parametersL  s     &Jkk!nsUaZa01

!%%
 all3

!%%
 aii0r0   c                 
   t               }t               }t               }||z  d|z  ||z
  z  z   }d|_        ||z
  }t        j                  |dz
        }t        t        j                  |      |dk(  g      }| j                  |j                                t        j                         5  t        j                  d       |j                  t        j                         ddd       d|_        t        j                         5  t        j                  d       |j                  t        j                         ddd       | j                  |j                  d       t        t        j                  ||z        |dk(  g      }d|_        t        j                         5  t        j                  d       |j                  t        j                         ddd       d|_        t        j                         5  t        j                  d       |j                  t        j                         ddd       | j                  |j                  dd       y# 1 sw Y   vxY w# 1 sw Y   *xY w# 1 sw Y   xY w# 1 sw Y   NxY w)zDTest that expressions with parameters are updated properly.
        r"   rl   r   ry  Nrc   r   )r   r   rG   r3   r  r   r4   assertFalseis_dppr  r  r  rf   rg   r   )r-   r#   r%   x0xSquaredr  r8   r9   s           r.   test_parameter_expressionsz&TestProblem.test_parameter_expressions\  s    JJ[b51R4R=(  qL ffQUmr{{3'!q&2'$$& 	!!(+JJrvv	 $$& 	&!!(+JJbffJ%	& 	qww* r{{2a4(16(3$$& 	&!!(+JJbffJ%	& $$& 	&!!(+JJbffJ%	& 	tzz1Q7'	 		& 	&	& 	&	& 	&s0   *5I6I 6I-66I9I I*-I69Jc                 \   t        d      }t        j                  |d         }t        j                  |      dk(  |d   dk(  |d   dk(  ||j                  k(  |dz	  g}t        ||      }|j                  t        j                  	      }| j                  |d
d       t        d      }t        j                  |d         }|dk(  |ddgddggz	  g}t        ||      }|j                  t        j                  	      }| j                  |j                  t        j                         t        dd      }t        j                  |d         }|ddgddggz  g}t        ||      }|j                  t        j                  	      }| j                  |j                  t        j                         y)z,Test positive definite constraints.
        r   r   rl   r  r  r   r  r   rc   r	  r"   r   r'   T	symmetricr  N)r   r3   r  r
  rP  r   rf   rg   r   r5   r   r   rJ  r4   rF  r  s         r.   test_psd_constraintsz TestProblem.test_psd_constraints  sy    Vkk!D'"wwqzQw#~w$ACCxAv	
 sK(266*vx:Vkk!D'"AvqaVaV$445sK(266*all3Vt,kk!D'"aVaV,,-sK(266*akk2r0   c                     t         j                  t        v r9t        ddd      }t	        j
                  |d         }|ddgddggz  g}t        ||      }|j                  t         j                        }| j                  |d       |d   j                  j                         }t        ddd      }t        dd	      }t	        j
                  |d         }|ddgddgg|z
  k(  g}t        ||      }|j                  t         j                        }|d   j                  |d   j                  j                  z   dz  }| j                  ||       t        dd
      }t	        j
                  |d         }|ddgddggz  g}t        ||      }|j                  t         j                        }| j                  |dd       |d   j                  }t        dd
      }t        dd	      }t	        j
                  |d         }|ddgddgg|z
  k(  g}t        ||      }|j                  t         j                        }| j                  |d   j                  |       t        dd
      }t	        j
                  |d   |d   z         }|ddgddggz  |dk\  g}t        ||      }|j                  t         j                        }| j                  |dd       |d   j                  }t        dd
      }t        dd	      }t	        j
                  |d   |d   z         }|ddgddgg|z
  k(  |dk\  g}t        ||      }|j                  t         j                        }| j                  |d   j                  |d       y)z+Test the duals of PSD constraints.
        r'   Tr+   )r  r   r  r"   r   rc   r  r  rT   r   r  r  r$   N)r   r   r   r   r3   r  r   rf   r   rE  copyrP  rQ  rg   )	r-   r+   r8   r:   r9   r;   psd_constr_dualr  new_constr_duals	            r.   test_psd_dualszTestProblem.test_psd_duals  sd    88((4c:A++ag&C!Q!Q 001K3,DZZqxxZ0F""61-)!n77<<>O4c:AT*A++ag&C!Q!Q 01 445K3,DZZqxxZ0F*1~88;q>;T;T;V;VVXYYO ''I Vt,kk!D'"aVaV,,-sK(155)vq3%a.33Vt,V&kk!D'"aVaV,q001sK(155)##KN$=$=O Vt,kk!D'AdG+,aVaV,,a1f5sK(155)vq3%a.33Vt,V&kk!D'AdG+,aVaV,q00!q&9sK(155)##KN$=$=+, 	$ 	.r0   c           
         dd l t        d      }t        j                  |      }t	        t        j
                  |      |dk  g      }|j                  t        j                  d       | j                  |j                  d       t	        t        j
                  |      t        j                  |      dk  g      }|j                  t        j                  d       | j                  |j                  ddg       t        d      }| j                  t        t        j                  |       t        d      }t        j                  |      }| j                  |j                  t!        dd	      gd	z         t        d
      }t        j                  |      }| j                  |j                  t!        dd      gdz          j"                  g d      }fd}t        d      }t	        t        j
                  t        j                  ||            t        j                  |      dk  g      }|j                  t        j                  d        j"                  |j                        j%                         }|t        |      z  }| j'                   j(                  |j                  t        j                  t+        |      |      j                               | j'                   j(                  |j                   |||                   | j'                   j(                  ||d             t        d      }t	        t        j
                  t        j                  ||            t        j,                  |      dk  g      }|j                  t        j                  d        j"                  |j                        j%                         } j.                  |t        |      z        }| j'                   j(                  |j                  t        j                  t+        |      |      j                               | j'                   j(                  |j                   |||                   | j'                   j(                  ||d             d} j0                  |      }t        |      }t	        t        j
                  t        j                  |            |dk  g      j                  t        j                          j"                  |j                        j%                         }	| j'                   j(                  |	|d             t        j2                  t5        |      D 
cg c]  }
||
   	 c}
      }t	        t        j
                  t        j                  |            |dk  g      j                  t        j                          j"                  |j                        j%                         }	| j'                   j(                  |	|d             t        j6                  t5        |      D 
cg c]  }
||
   	 c}
      }t	        t        j
                  t        j                  |            |dk  g      j                  t        j                          j"                  |j                        j%                         }	| j'                   j(                  |	|d             y c c}
w c c}
w )Nr   r"   rl   r   r!  r  r   r  r$   r  rD  )gQ?gQ?gq=
ףp?gRQ?g(\?c                      j                   |      t        |      z  } j                   |       }  j                  | |z        S r   )rw   r   r   )r#   r@   r  s     r.   short_geo_meanz1TestProblem.test_geo_mean.<locals>.short_geo_mean  s>    CF"AA2771a4= r0   MbP?rc   )rm   r   r3   geo_meanr   r  rf   rg   r   rG   r   rQ  re   r  assertSequenceEqualwr   rw   flattenru   r  rl  r   r  rU  r  r  r  )r-   r#   r  r9   r  r@   r'  x_truer  xvalr  r%   r  s               @r.   test_geo_meanzTestProblem.test_geo_mean  s   QK{{1~r{{4(16(3

"&&d
+tzz1-r{{4(266!9>*:;

"&&d
+##AGGb"X6V*bkk15VKKN  x1~&6q&89VKKN  x1~&6q&89 BHH./	!
 QKr{{2;;q!#45q	Q7GH

"&&d
+BHHQWW%%'3q6DJJDGQ0G0M0MNODJJq!0DEFAvt45 QKr{{2;;q!#45
a7HI

"&&d
+BHHQWW%%'3q6"DJJDGQ0G0M0MNODJJq!0DEFAvt45 QKBKKN+a1fX6<<BFF<Krxx ((*D&$78IIU1X.qt./BKKN+a1fX6<<BFF<Krxx ((*D&$78IIU1X.qt./BKKN+a1fX6<<BFF<Krxx ((*D&$78 /
 /s   2[7[<c           
      &   dd l }t        dd      } |j                  g d      }dddd	d
dd|j                  fD ]  }t	        t        j                  t        j                  ||            |j                  |z  dk\  g      }|j                  t
        j                  d       ||j                  k(  r |j                  |      t        |      z  }n@|dk(  r |j                  g d      }n&|d|dz
  z  z  |j                  |d|dz
  z  z        z  } |j                  |j                        j                         }| j!                   |j"                  ||d      dj%                  |             | j!                   |j"                  |j                  |j&                  j)                  ||                   | j!                   |j"                  |j&                  j)                  ||      t        j                  ||      j                                y )Nr   r$   r#   r   r  r"   r$   rl   g?g?r"   gףp=
?g@rs  T)rd   r   )r   r   gUUUUUU?r  {Gz?zp = {})rm   r   rw   r  r   r3   r4   rt  rP  rf   r   	ones_liker   r~   rG   r,  ru   r  formatr   r   )r-   r  r#   r   r@   r9   r-  x_algs           r.   
test_pnormzTestProblem.test_pnorm&  s   QS!BHH[! S#q$37 	]A2;;rxxQ'781337a<.IDJJbkk4J8 BFF{%aQ/a!-0S!A#Ya#qs)n(==BHHQWW%--/EOOKBKKvt<hooa>PQOOKBKK

BIINN5!4LMNOOKBKK		ua(@"((5RSBTBZBZ[\!	]r0   c                 &   dd l }t        dd      } |j                  g d      }dD ]  }t        t	        j
                  t	        j                  t	        j                  ||z
                    t	        j                  ||      dk\  g      }|j                  t        j                         | j                   |j                  |j                  d               |j                  g d	      }dD ]  }t        t	        j
                  t	        j                  t	        j                  ||z
                    t	        j                  ||      dk\  g      }|j                  t        j                         | j                  |j                  dd
        y )Nr   r$   r#   r   )g      r"   r$   )rM  r  g333333?ffffffrc   rl   r1  r(  r   )rm   r   rw   r   r3   r4   r   r  rt  rf   r   ru   r  rG   r   )r-   r  r#   r   r@   r9   s         r.   test_pnorm_concavezTestProblem.test_pnorm_concaveA  s'   QS! BHH\"# 	8A2;;rvvbffQqSk':;bhhq!nPQ>Q=RSDJJbkkJ*OOKBKK

A67		8 BHH[!# 	<A2;;rvvbffQqSk':;bhhq!nPQ>Q=RSDJJbkkJ*""4::q";		<r0   c           	         t               }t        t        j                  t        j                  |d      t        j                  |d      z   t        j                  |d      z
              }|j                  t        j                  d       |j                  }| j                  t        j                  d|dz  z  d|dz  z  z
  d|d	z  z  z
        d
k         y )Ng333333?r8  g?r   r!  gffffff?r6  gffffff
gr(  )r   r   r3   r4   powerrf   rg   rG   ru   builtinsr  r-   r#   r9   s      r.   
test_powerzTestProblem.test_powerU  s    Jr{{288As#3bhhq$6G#G"((STVYJZ#Z[\

"&&d
+GGSBYQW%<s1d7{%JKtSTr0   c                    ddl }d}d}|j                  j                  ||      }|j                  j                  d|z        }t        |      }d}||z  }t	        j
                  |d| |      }	t	        j                  |      }
t	        j
                  ||
      }|	 |
z   }|	 |z   }t        t	        j                  t	        j                  |                  }|j                  t        j                         t	        j                  t	        j                  t	        j
                  d| j                                    }t        || j                  dk(  g      }|j                  t        j                        }| j                  |d       y)	z2Test a problem with multiply by a scalar.
        r   Nr   r  r"   r(  rc   rO  )rm   rn   ro   r   r3   r  r   r   r4   r   rf   r   rg   r#   r   )r-   r  rP  Jrvecdythetadelta	loglambdar   b1b2r  r9   r8   r;   s                   r.   test_multiply_by_scalarz#TestProblem.test_multiply_by_scalar\  s)    	yyq!$YY__QqS!5L	KK1Q+VVI[[#rBwrBwr{{266$<01

!%%
 kk"&&Q!789sTVVq[M*266*vq)r0   c                 :   t        j                  t        j                  d            }t        j                  t        j
                  |d            }t        j                  |      }|j                  t         j                         t        |j                         y)z'Test bug with 64 bit integers.
        r"   rl   rc   N)r3   r   rm   r  r4   r   r   rf   rg   r   rG   )r-   r  r  ri   s       r.   
test_int64zTestProblem.test_int64v  s]     KKA'KK1.	**Y'RVV$aggr0   c                 &   t        j                  d      }t        j                  |d   |d   z         }|dd dk\  g}t        j                  ||      }|j	                  t         j
                  d       | j                  |j                  ddg       y)z&Test bug with negative slice.
        r"   r   rl   ri  Nr'  r!  )r3   r   r4   r   rf   rg   rQ  rG   )r-   r#   r  r:   ri   s        r.   test_neg_slicezTestProblem.test_neg_slice  sx     KKNKK!qt,	v{m**Y4RVV.##AGGaV4r0   c                 h   t        j                  d      }t        j                  d      }t        j                  |dd      |z
  }|dk  g}t        j
                  t        j                  |            }t        j                  ||      }|j                  t        j                         | j                  |j                  t        j                  d             t        j                  d      }t        j                  d	      }t        j                  |dd      |z
  }|dk  g}t        j
                  t        j                  |            }t        j                  ||      }|j                  t        j                         | j                  |j                  t        j                  d             y
)z#Test pnorm with axis != 0.
        r"   )r"   r   rt   rl   )r@   axisr   rc   r   )r   r"   N)rm   r  r3   r   rt  r  r   r   rf   r   rQ  rG   zeros)r-   r    r  r
  conr8   r9   s          r.   test_pnorm_axiszTestProblem.test_pnorm_axis  s'    LLOKKg&xxQQ'!+qykkk"&&)$zz#s#

"++
&##DJJA?LLKKg&xxQQ'!+qykkk"&&)$zz#s#

"++
&##DJJB@r0   c                    t        j                  d      }t        j                  t        j                  |      dg      }|j	                  t         j
                         | j                  |j                  d       t        j                  d      }t        j                  t        j                  |      dgdz        }|j	                  t         j
                         | j                  |j                  d       t        j                  t        j                  |      d|k  gdgdz  z         }|j	                  t         j
                         | j                  |j                  d       t        j                  t        j                  |      dgd|k  gz   dgdz  z         }|j	                  t         j
                         | j                  |j                  d       t        j                  t        j                  |      dg      }|j	                  t         j
                         | j                  |j                  t        j                         t        j                  t        j                  |      dgdz        }|j	                  t         j
                         | j                  |j                  t        j                         t        j                  t        j                  |      dgdz  dgz   dgdz  z         }|j	                  t         j
                         | j                  |j                  t        j                         t        j                  t        j                  |      d|k  gdgdz  z   dgz         }|j	                  t         j
                         | j                  |j                  t        j                         t        j                  t        j                  |      dg|dk  gz   dgdz  z         }|j	                  t         j
                         | j                  |j                  t        j                         y	)
z4Test constraints that evaluate to booleans.
        Tr   rc   r   r   *   FiN)r3   r   r   r4   rf   r   r   rG   r5   r   r   rJ  r=  s      r.   test_bool_constrzTestProblem.test_bool_constr  s    KKD!zz"++a.4&1

"++
&qww*KKD!zz"++a.4&)4

"++
&qww*zz"++a.27)tfRi*?@

"++
&qww+zz"++a.4&B!G9*<v{*JK

"++
&qww+zz"++a.5'2

"++
&all3zz"++a.5'"*5

"++
&all3zz"++a.4&)ug*=r	*IJ

"++
&all3zz"++a.27)tfRi*?5'*IJ

"++
&all3 zz"++a.4&AH:*=r	*IJ

"++
&all3r0   c                     t        j                         }| j                  t        d      5  t        j                  t        j
                  |      t        j                  |      g       ddd       y# 1 sw Y   yxY w)z3Test a problem with an invalid constraint.
        z#Problem has an invalid constraint.*N)r3   r   assertRaisesRegexr  r   r4   r   )r-   r#   s     r.   test_invalid_constrzTestProblem.test_invalid_constr  sX     KKM##J$JL 	4JJr{{1~q	{3	4 	4 	4s   >A22A;c                    t        j                  d      }t        j                  t        j                  |            }|j	                  t         j
                         | j                  |j                  d       t        j                  d      }t        j                  t        j                  |            }|j	                  t         j
                         | j                  |j                  d       y)z)Test the pos and neg attributes.
        Tr   rc   r   )negN)	r3   r   r   r4   rf   r   r   rG   r  r=  s      r.   test_poszTestProblem.test_pos  s     KKD!zz"++a.)

"++
&qww*KKD!zz"++a.)

"++
&qww*r0   c                    t        j                  t        j                  d| j                  z  dz         | j                  dk\  g      }t	        j
                  |      }t	        j                  |      }|j                  t         j                  d      }| j                  |d       | j                  |j                         d   j                  d       y	)
z/Test pickling and unpickling problems.
        r"   r$   rl   r'  r!  g      @r   r  N)r3   r   r4   r   pickledumpsloadsrf   rg   r   r>   rG   )r-   r9   prob_strnew_probr;   s        r.   test_picklezTestProblem.test_pickle  s     zz"++ahl366Q;-)<<%<<)rvv48vs+x113A6<<cBr0   c                 t  	 t        d      t        j                  g d      	t        j                  g dg dg dg      t        j                  g dg dg d	gt        j                  
      }t	        j
                  |      }	fd}t        j                  g dg      } ||       j                  j                  j                  |      }t        j                  j                  ||d        ||       j                  j                  |z  }t        j                  j                  ||d       y)zETest problem with sparse int8 matrix.
           issue #809.
        r  rN  )gOw@:?gȿ+Vñ?gjtl?)g
ףp=q@QH      T)rd  gzGh@     `a@)re  rf  g     Z@)rM  rl   r   r   r   r   )r   rM  rl   r   r   r   )r   r   r   rM  rl   r   )dtypec                    t        j                  dt        j                        z  j                  z  z
        }|j	                         sJ t        j
                  dd      }dk\  | | j                  z  k  | j                  z  |k  g}t        j                  ||      }|j                  t        j                         |j                  dk(  sJ |S )Nr  Tr"   )rV   rG   rF   rc   optimal)r3   r4   r~  rP  r  r   r   rf   r   r   r   )r  r8   alphar:   r9   r   r   r  s        r.   make_problemz8TestProblem.test_spare_int8_matrix.<locals>.make_problem  s    ++cBLLA$66q@AC::<<LLA6E7UFaccAg$5qssQw%7GHK::c;/DJJajjJ);;)+++Kr0   )gµg%?gi2);Q=g/ig/i?rF   rT   )decimalN)r   r  rw   int8r  
coo_matrixrG   rP  r~   testingassert_almost_equal)
r-   D_denseD_sparserk  expected_coef
coef_densecoef_sparser   r   r  s
          @@@r.   test_spare_int8_matrixz"TestProblem.test_spare_int8_matrix  s    
 6"HH9:HH,,(* + ((///18:A ==)
	 2"3 4 	WWWYY]]7+



&&}j!&LXggii(*


&&}k1&Mr0   c                    t        j                  d      }t        j                  |ddddf   d      }t        j                  |t	        j
                  dg            }t        j                  t        j                  |            }|j                  t         j                        }t        j                  d      }t        j                  |ddddgf   d      }t        j                  |t	        j
                  dg            }t        j                  t        j                  |            }|j                  t         j                        }| j                  ||       y)z1Test QP code path with special indexing.
        r   Nr   r"   rl   rO  rc   )r3   r   r   QuadFormr  r
  r   r4   rf   rg   r   )r-   r#   r%   r  r9   result1r  s          r.   test_special_indexzTestProblem.test_special_index  s     KKFF1Q!V91%{{1bggqcl+zz"++d+,**BFF*+KKFF1QAY<a({{1bggqcl+zz"++d+,**BFF*+w0r0   c                    d}d}t        j                  |      }t        j                  ||f      }t        j                  |df      }t        j                  |dfd      }||z  |k(  g}t        j
                  dt        j                  |j                  |z        z  t        j                  j                  |      z         }t        j                  |      }	|	j                  t        j                  d      }
t        j
                  dt        j                  |j                  |z        z        }t        j                  ||      }	|	j                  t        j                  d      }| j                  |
|       y	)
z(Test a problem with indicators.
        rD  r"   rl   r#   r   r  r   r!  N)r  r  rU  r3   r   r4   r  rP  
transforms	indicatorr   rf   rg   r   )r-   r  mr  r   r    r#   r:   r  ri   	solution1	solution2s               r.   test_indicatorzTestProblem.test_indicator  s    IIaLGGQFOGGQFOKKAS)1uzlKK		!##'(: :R]]=T=TU`=a ab	**Y'MMTM:	 KK		!##'(: :;	**Y4MMTM:	y)4r0   c                 X   dgg}dgg}t        j                  d      }t        j                  t        j                  ||      d|j                  z  |z  z
        }t        j
                  |      }|j                  t         j                  d       |j                  }d}d}t        j                         }t        j                  ||dz  z  d|z  |z  z
        }t        j
                  |      }|j                  t         j                  d       | j                  |j                  |       y)	z0Test that rmul works with 1x1 matrices.
        g` M0@gi"@r   rN  r"   T)r   N)
r3   r   r4   r~  rP  r   rf   r   rG   r   )r-   r#   r%   r&   r  r9   rz  s          r.   test_rmul_scalar_matsz!TestProblem.test_rmul_scalar_mats3  s     __KKf%KKQ 2QWq[ @A	zz)$

277D
)**KKMKK!Q$Q 23	zz)$

277D
)tzz73r0   c                 (   t        j                  d      }t        j                  d      }t        j                  t        j                  |d      t        j                  |d      g      }t        j                  |d      }t        j
                  |dd      }t        j                  |      }t        j                  t        j                  |      |dk(  |dk(  g      }|j                  t         j                        }| j                  |d	       y
)z+Test reshape of a min with axis=0.
        )rD  r"   r   r  r   rx  rl   r"   rc   r   N)r3   r   r  r  minr   r   r   r  rf   rg   r   )	r-   r#   r%   stacked_flattenedr  reshaped_minimumr8   ri   r;   s	            r.   test_min_with_axiszTestProblem.test_min_with_axisH  s     KKKKIIrvvas';RVVAS=Q&RS&&*3::gvSAff%&**R[[-QQ/?@bff-vr*r0   c                    t        j                  t        j                  d      t        j                  d      dk(  g      }|j	                  t         j
                         | j                  |j                  t         j                         y)zETest a problem with constant values only that is infeasible.
        r   rl   rc   N)	r3   r   r  r   rf   rg   r5   r   rJ  rN   s     r.   test_constant_infeasiblez$TestProblem.test_constant_infeasibleW  sV     JJr{{1~A!(;'<=	rvv2==1r0   c           
         t         j                  j                  d       d}d}t         j                  j                  |      }t         j                  j                  ||      }|j	                  |      dt         j                  j                  |      z  z   }t        d|z        }t         j                  j                  ||      }||xx   dt         j                  j                  |      z  z  cc<   t        j                  |      }t        j                  t        j                  t        j                  t        j                  ||z  |z
                          }	|	j                  t        j                         y	)
zOTest that huber regression works with SCS.
           See issue #1370.
        rl   rD  r"   r2  g{Gz?)r   r   rc   N)r  rn   seedro   r~   r   randintr3   r   r   r4   r   huberrf   rg   )
r-   r  r  r  r(   r    r  idxr#   r9   s
             r.   test_huber_scszTestProblem.test_huber_scs^  s     			qYY__QIIOOAq!EE"Iryyq111qMii*	#"ryyq)))KKNzz"++bffRXXa!eai-@&ABC

"&&
!r0   c                 T   t        j                  d      }t        j                  d      }g }t        j                  d|z  |z        }t        j                  ||      }t        j                  dg      |_        |j                          |j                  t
        j                   k(  sJ y)zUTest a complex rmul expression with a parameter.
           See issue #1555.
        )rl   rl   r"   N)
r3   r   r   r4   r   r  rw   rG   rf   r  )r-   r    rh   r:   r  r9   s         r.   test_rmul_paramzTestProblem.test_rmul_params  s|     KKQKKQ%0	zz)[1hhsm

zzbffW$$$r0   c                    d}t        j                  d|f      }t        j                  |d      }t        j                  t        j                  d      |dk(  g      }|j                          t        j                  d|f      }| j                  |j                  |       t        j                  |df      }t        j                  |d      }t        j                  t        j                  d      |dk(  g      }|j                          t        j                  |df      }| j                  |j                  |       yzVTest the cumsum axis bug with row or column matrix
           See issue #1678
        rD  rl   r   rx  N)
r3   r   r  r   r4   rf   r  rU  rQ  rG   	r-   r  x1expr1r+  expectx2expr2r,  s	            r.   test_cumsum_axiszTestProblem.test_cumsum_axis  s      [[!Q 		"1%

2;;q>EQJ<8!Q##EKK8 [[!Q 		"1%

2;;q>EQJ<8!Q##EKK8r0   c                    d}t        j                  d|f      }t        j                  |d      }t        j                  t        j                  t        j
                  |            |dk  g      }|j                          t        j                  d|f      }| j                  |j                  |       t        j                  |df      }t        j                  |d      }t        j                  t        j                  t        j
                  |            |dk  g      }|j                          t        j                  |df      }| j                  |j                  |       yr  )r3   r   r  r   r  r   rf   r  rU  rQ  rG   r  s	            r.   test_cummax_axiszTestProblem.test_cummax_axis  s      [[!Q 		"1%

2;;rvvbz2UaZLA!Q##EKK8 [[!Q 		"1%

2;;rvvbz2UaZLA!Q##EKK8r0   c                 H   t        j                  d      5 }t        j                  d      }t	        d |D              }t        j
                  t        j                  d      |dk\  g       t        |      dk(  sJ dt        |d	   j                        v sJ d
t        |d	   j                        v sJ 	 ddd       t        j                  d      5 }t        j                  d      }t	        d |D              }t        j
                  t        j                  |             t        |      dk(  sJ dt        |d	   j                        v sJ dt        |d	   j                        v sJ 	 ddd       t        j                  d      5 }t        j                  d      }t        j                  |      }t        j
                  t        j                  d      |dk\  g       t        |      dk(  sJ 	 ddd       y# 1 sw Y   KxY w# 1 sw Y   xY w# 1 sw Y   yxY w)z2Test that a warning is raised for high node count.Trecord)r  r  rN  c              3   2   K   | ]  }t        |        y wr   r   r  r#   s     r.   r  z6TestProblem.test_cp_node_count_warn.<locals>.<genexpr>       &qCF&   r   rl   vectorizingrM  zConstraint #0Nc              3   2   K   | ]  }t        |        y wr   r  r  s     r.   r  z6TestProblem.test_cp_node_count_warn.<locals>.<genexpr>  r  r  	Objective)
r  r  r3   r   r   r   r  rq   r7   message)r-   r+  r   r    r!   s        r.   test_cp_node_count_warnz#TestProblem.test_cp_node_count_warn  s    $$D1 	9Q*-A&A&&AJJr{{1~Qx0q6Q;; C"$6666"c!B%--&8888	9 $$D1 	5Q*-A&A&&AJJr{{1~&q6Q;; C"$6666#aemm"4444	5 $$D1 	Q*-Aq	AJJr{{1~Qx0q6Q;;		 	%	9 	9	5 	5	 	s&   BG?BHA)H?H	HH!c                    t        j                         }t        j                  t        j                  |      |dz  dk  g      }|j	                  dd      }|j                  |       |d   d   t         j                  k(  rt        j                  d	      5 }|j                          t        |d   j                  t              sJ t        |d   j                        t        k(  sJ 	 ddd       t        j                  d	      5 }|j                  t         j                  
       t!        |      dk(  sJ 	 ddd       yy# 1 sw Y   [xY w# 1 sw Y   yxY w)zQTest that a warning is raised when ECOS
           is called by default.
        r"   rl   NF)rd   r   conic_solversr   Tr  rc   )r3   r   r   r  _find_candidate_solvers_sort_candidate_solversECOSr  r  rf   r   r  FutureWarningr7   r   r   rq   )r-   r#   r9   candidate_solversr+  s        r.   test_ecos_warningzTestProblem.test_ecos_warning  s'   
 KKMzz"++a.1a419+6 !888O$$%67_-a0BGG;((5 A

!!A$,,>>>1Q4<<(,@@@@A ((5 #

"++
.1v{"{# # <A A# #s   AE1EEE)returnN)___name__
__module____qualname____doc__r/   r<   rC   rK   rO   r\   r_   rj   r|   r   r   r   r   r   r   r   r   r  r  r  r%  r4  r:  rB  rK  rS  rW  r^  ra  rd  rg  rm  rq  ru  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r/  r6  r9  r>  rH  rJ  rL  rR  rU  rX  r[  rb  rv  r{  r  r  r  r  r  r  r  r  r  r  r   r0   r.   r   r   4   s   ,,&*OR	+>)64&,PK68
+2Z7.$`-$`)"#,X#.+b-R4[E6DND*5N(**I-$XBX4 <FD"+J<0\D@<:$+?\33n33j_.?`*8*142.
($ELE>
=-9^55n0+
@;N41 %8N38:.xI9V]6<(U*45A*(4T4+	C%NN1 5(4*+2"*%9,9,6#r0   r   )9r  r<  r]  r   r  
contextlibr   	fractionsr   ior   rm   r  r  r  r  r   r   r  cvxpyr3   cvxpy.interfacer  r[  cvxpy.settingssettingsr   cvxpy.constraintsr   r   r	   r
   cvxpy.errorr   r   r   cvxpy.expressions.constantsr   r   cvxpy.expressions.variabler   cvxpy.problems.problemr   &cvxpy.reductions.solvers.conic_solversr   3cvxpy.reductions.solvers.conic_solvers.conic_solverr    cvxpy.reductions.solvers.definesr   r   &cvxpy.reductions.solvers.solving_chainr   cvxpy.tests.base_testr   cvxpy.utilities.citationsr   r   r   r0   r.   <module>r     su       
  &           8 8 = = ; / * < K H * 3i"#( i"#r0   