
    bi                     N    d Z ddlZddlZddlZddlmZ ddlm	Z	  G d de	      Z
y)a+  
Copyright, the CVXPY authors

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)SCS)BaseTestc                   X     e Zd Zd	deddf fdZd	deddf fdZd
dZd
dZd
dZ xZ	S )TestParamConeProgplacesreturnNc                 2    t         t        |   |||       y N)r   )superr   assertItemsAlmostEqualselfabr   	__class__s       [/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/cvxpy/tests/test_param_cone_prog.pyr   z(TestParamConeProg.assertItemsAlmostEqual   s    =a6=R    c                 2    t         t        |   |||       y r
   )r   r   assertAlmostEqualr   s       r   r   z#TestParamConeProg.assertAlmostEqual   s    8Af8Mr   c                    t        j                  d      }|j                  |i}t        j                  t        j                  t        j
                  |                  }|dt        j                  gk  g}t        j                  ||      }|j                  t         j                        \  }}}|t         j                  j                     }t               }	|	j                  |ddi       d   }
|j                  |
|      }|j                  |      }| j!                  |j"                  |
j"                         ||j                     D ]  }| j%                  t'        ||k(               ! |j)                  t         j                         | j+                  |j,                  ||j                            t        j.                  t	        |            }t        j
                  |      dk\  |ddgk  g}t        j                  ||      }|j                  t         j                        \  }}}|t         j                  j                     }t               }	|	j                  |ddi       d   }
|j                  |
|      }|j                  |      }| j!                  |j"                  |
j"                         ||j                     D ]  }| j%                  t'        ||k(               ! | j+                  |j                  |      |
       |j)                  t         j                         | j+                  |j,                  ||j                            y )	N      solverF
warm_startverbosesolver_optsxactive_varsr   )cpVariableidMaximizesumlogmatheProblemget_problem_datar   settings
PARAM_PROBsolve_via_datasplit_solutionsplit_adjointassertEqualshape
assertTrueanysolver   valueMinimize)r   r   var_dictobjconstrproblemdata_param_cone_progr   raw_solution	sltn_dictadjointr6   s                 r   test_log_problemz"TestParamConeProg.test_log_problem"   s   KKNDD!9kk"&&+,466{"#**S&)--RVV-<
ar{{556,,UEr - CCFH#22h 3 0	!//	:(:(:;qtt_ 	3EOOC 012	3 	bff##AGGYqtt_= kk#a&!&&)q.!1v+.**S&)--RVV-<
ar{{556,,UEr - CCFH#22h 3 0	!//	:(:(:;qtt_ 	3EOOC 012	3##)))4l	D 	RVV$##AGGYqtt_=r   c           	         t        j                  dd      }|j                  |i}t        j                  t        j                  |d   d            }t        j
                  |      t        j                  d      k(  g}t        j                  ||      }|j                  t         j                        \  }}}|t         j                  j                     }t               }	|	j                  |ddi 	      d
   }
|j                  |
|      }| j                  ||j                     j                   |j                          ||j                     }|j#                  |      }| j                  |j                   |
j                          | j%                  t'        |d   |k(               | j%                  t'        |d   |k(               | j%                  t'        t        j(                  d|d   z  |                   | j%                  t'        t        j(                  d|d   z  |                   |j+                  t         j                  d       | j-                  |j.                  |       y)zTest PSD variable.
        )r   r   T)PSD)r   r   
   r   r   Fr   r   r    )r   r   )r   r   )r   r   gh㈵>)r   epsN)r"   r#   r$   r%   minimumdiagnponesr*   r+   r   r,   r-   r.   r/   r1   r2   r0   r3   r4   iscloser5   r   r6   )r   sr8   r9   constr;   r<   r=   r>   r   r?   r@   
sltn_valuerA   s                 r   test_psd_varzTestParamConeProg.test_psd_varM   s    KKD)DD!9kk"**QtWb12rwwqz)***S%(--RVV-<
ar{{556,,UEr - CCFH#22h 3 0	144..8qtt_
!//	:(:(:;Jt,789Jt,789BJJq:d+;';WEFGBJJq:d+;';WEFGRVV.##AGGZ8r   c                    t               }d |_        d|_        d}t        j                  d      j                  d      }t        j                  d||g      }t        j                  t        j                  t        j                  |                  }|j                  |      \  }}}|t        j                  j                     }|j                  J |j                  J t               }d	 |_        d
|_        d}t        j                  d      j                  d      }t        j                  d||g      }t        j                  t        j                  t        j                  |                  }|j                  |      \  }}}|t        j                  j                     }t        j                   |j                  |k(        sJ t        j
                  |j                  dd      }	t        j                   |	|k(        sJ y)z=Test that lower and upper bounds on variables are propagated.c                       y)Nz Custom SCS, no bounded variables rR   r   r   <lambda>z3TestParamConeProg.test_var_bounds.<locals>.<lambda>m       r   Fi   )   r   )boundsr   Nc                       y)NzCustom SCS, bounded variablesrR   rR   r   r   rS   z3TestParamConeProg.test_var_bounds.<locals>.<lambda>|   rT   r   TF)order)r   nameBOUNDED_VARIABLESrI   arangereshaper"   r#   r*   r7   r&   r+   r,   r-   lower_boundsupper_boundsall)
r   solver_instancer_   r`   r   r;   r<   r=   r>   param_upper_bounds
             r   test_var_boundsz!TestParamConeProg.test_var_boundsi   s    %I,1)yy|++F3KKl'CD**R[[34--_-E
ar{{556++333++333 %F,0)yy|++F3KKl'CD**R[[34--_-E
ar{{556vvo22lBCCCJJ'C'CVSVWvv'<7888r   )r   )r   N)
__name__
__module____qualname__intr   r   rB   rO   rd   __classcell__)r   s   @r   r   r      s?    S3 St SNc N$ N)>V989r   r   )__doc__r(   numpyrI   cvxpyr"   0cvxpy.reductions.solvers.conic_solvers.scs_conifr   cvxpy.tests.base_testr   r   rR   r   r   <module>ro      s)       @ *o9 o9r   