
    bi7                        d 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 ej                  j                  ej                  e	vd      Zeej                  j#                  dd	d
g       G d d                    Zed        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

    https://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)	FiniteSet)INSTALLED_SOLVERS)solver_test_helperszRequired solver not installed)reason	ineq_formTFc                      e Zd Zedefd       ZdefdZedefd       Zedefd       Zedefd       Z	edefd       Z
edefd       Zedefd	       Zedefd
       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zy)TestFiniteSetr   c           	         t        j                  d      }t        j                  g d      }t        j                  d      }t        j
                  |d   |d   z   d|d   z  z   d|d   z  z
        }t        |d   || 	      }t        |d   || 	      }t        |d   || 	      }t        |d   || 	      }|d   d|d   z  z   d
k  }	d|d   z  d|d   z  z
  dk  }
|d   d|d   z  z
  |d   z   dk\  }|d   |d   z   |d   z   |d   z   dk(  }|df}|df|df|df|df|	df|
df|df|dfg}||fg}t        j                  |||      }|S )z+vec contains a contiguous range of integers   shape        g      @      @r   
   r            r              *@N	cpVariablenparrayarangeMaximizer   STHSolverTestHelper)r   xexpect_xvec	objectiveconstr1constr2constr3constr4constr5constr6constr7constr8obj_pair	con_pairs	var_pairssths                    ]/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/cvxpy/tests/test_valinvec2mixedint.pymake_test_1zTestFiniteSet.make_test_1!   s    KKd#88,-iimKK!qta!A$h 6QqT AB	AaD#;AaD#;AaD#;AaD#;A$QqT/S(ad(Q1X%*A$QqT/AaD(A-A$1+!$qt+r1t$dOdOdOdOdOdOdOdO	
	 M
	 ""8Y	B
    c                     t         j                  |      }|j                  d       |j                  d       |j	                  d       y NGLPK_MIsolverr   )places)r	   r4   solveverify_objectiveverify_primal_values)selfr   r2   s      r3   test_1zTestFiniteSet.test_1A   sB    ''	2			#A&   *r5   c                    t        j                         }t        j                  dg      }t        j                  |      }g d}|dk\  }|dk  }t        |||       }|df}||fg}	|d f|d f|d fg}
t        j                  ||	|
      }|S )N      )rB   r   r         r   r   r   r   r   r   Minimizer   r!   r"   )r   r#   r$   r&   r%   r'   r(   r)   	obj_pairsr1   r0   r2   s               r3   make_test_2zTestFiniteSet.make_test_2G   s    KKM88VH%KKN	u*r'Asi8'	M
	 dOdOdO
	
 ""9iC
r5   c                     t         j                  |       }|j                  d       |j                  d       |j	                  d       y r7   )r	   rG   r<   r=   r>   r   r2   s     r3   test_2zTestFiniteSet.test_2\   B    ''	2			#A&   *r5   c                    t        j                         }t        j                  t        j                  |dz
              }dg}t	        |||       }t        j                  dg      }|df}||fg}|dfg}t        j                  |||      }	|	S )zCase when vec.size==1r   r   r         ?g       @N	r   r   rE   absr   r   r   r!   r"   
r   r#   r&   r%   cons1
expected_xr/   r1   r0   r2   s
             r3   make_test_3zTestFiniteSet.make_test_3c   s     KKMKKq1u.	c!SI6XXrd^
s#
O
	 DM
	 ""8Y	B
r5   c                     t         j                  |       }|j                  d       |j                  d       |j	                  d       y r7   )r	   rS   r<   r=   r>   rI   s     r3   test_3zTestFiniteSet.test_3u   rK   r5   c                    t        j                         }t        j                  t        j                  |dz
              }g d}t	        |||       }t        j                  dg      }|df}||fg}|dfg}t        j                  |||      }	|	S )zCase when vec houses duplicatesr   )r   r   r   r   r   r   r   r   r   r   NrN   rP   s
             r3   make_test_4zTestFiniteSet.make_test_4|   s     KKMKKq1u.	#!SI6XXrd^
s#
O
	 DM
	 ""8Y	B
r5   c                     t         j                  |       }|j                  d       |j                  d       |j	                  d       y r7   )r	   rW   r<   r=   r>   rI   s     r3   test_4zTestFiniteSet.test_4   rK   r5   c           	         t        j                  d      }t        j                  d      }t        j                  |d   |d   z   d|d   z  z   d|d   z  z
        }d|d   z  dz   }d|d   z  dz   }t        ||| 	      }t        |d   || 	      }t        ||| 	      }t        |d   || 	      }	|d   d|d   z  z   d
k  }
d|d   z  d|d   z  z
  dk  }|d   d|d   z  z
  |d   z   dk\  }|d   |d   z   |d   z   |d   z   dk(  }t        j                  g d      }|df}|df|df|df|	df|
df|df|df|dfg}||fg}t        j                  |||      }|S )z<Case when input expression to FiniteSet constraint is affiner   r   r   r   r   r   r      r   r   r   )      @r\   rM   rM   g       @N)	r   r   r   r   r    r   r   r!   r"   )r   r#   r%   r&   expr0expr2r'   r(   r)   r*   r+   r,   r-   r.   rR   r/   r0   r1   r2   s                      r3   make_test_5zTestFiniteSet.make_test_5   s    KKd#iimKK!qta!A$h 6QqT AB	AaD1AaD1E3)<AaD#;E3)<AaD#;A$QqT/S(ad(Q1X%*A$QqT/AaD(A-A$1+!$qt+r1XX./
s#dOdOdOdOdOdOdOdO	
	 
O
	 ""8Y	B
r5   c                     t         j                  |       }|j                  d       |j                  d       |j	                  d       y r7   )r	   r_   r<   r=   r>   rI   s     r3   test_5zTestFiniteSet.test_5   rK   r5   c                 "   t        j                         }t        j                  dg      }t        j                  |      }g d}|dk\  }|dk  }d|z  dz   }t        |||       }|df}	||fg}
|df|df|dfg}t        j                  |	|
|      }|S )	z?vec contains only real quantities + passed expression is affineg      )rB   g      ?gQ@rC   r   r   r   r   NrD   )r   r#   r$   r&   r%   r'   r(   exprr)   rF   r1   r0   r2   s                r3   make_test_6zTestFiniteSet.make_test_6   s     KKM88WI&KKN	!u*r'1uqyD#;(	M
	 dOdOdO
	
 ""9iC
r5   c                     t         j                  |       }|j                  d       |j                  d       |j	                  d       y r7   )r	   rd   r<   r=   r>   rI   s     r3   test_6zTestFiniteSet.test_6   rK   r5   c                    t        j                  d      }t        j                  g d      }t        j                  d      }t        j
                  |d   |d   z   d|d   z  z   d|d   z  z
        }t        ||| 	      }|d   d|d   z  z   d
k  }d|d   z  d|d   z  z
  dk  }|d   d|d   z  z
  |d   z   dk\  }|d   |d   z   |d   z   |d   z   dk(  }	|df}
|df|df|df|df|	dfg}||fg}t        j                  |
||      }|S )z,For testing vectorization of FiniteSet classr   r   r   r   r   r   r   r   r   r   r   r   Nr   )r   r#   r$   r%   r&   r'   r(   r)   r*   r+   r/   r0   r1   r2   s                 r3   make_test_7zTestFiniteSet.make_test_7   sS    KKd#88,-iimKK!qta!A$h 6QqT AB	Asi8A$QqT/S(ad(Q1X%*A$QqT/AaD(A-A$1+!$qt+r1t$dOdOdOdOdO
	 M
	 ""8Y	B
r5   c                     t         j                  |       }|j                  d       |j                  d       |j	                  d       y r7   )r	   rh   r<   r=   r>   rI   s     r3   test_7zTestFiniteSet.test_7   rK   r5   c                 b   t        j                         }t        j                  |      }t        j                  dt	        j
                  d            }t        |||       g}t        j                  ||      }|j                  t         j                         t	        j                  |j                  d      sJ t	        j
                  d      dz   |_        t        j                  ||      }|j                  t         j                         t	        j                  |j                  d      sJ y )N)r[   r[   )valuer   r9   r   r   )r   r   r    	Parameterr   r   r   Problemr<   r8   allcloserl   r   r#   r&   set_valsconstraintsproblems         r3   test_8zTestFiniteSet.test_8   s     KKMKKN	<<BIIaL9 H	BC**Y4RZZ({{177A&&&1)**Y4RZZ({{177A&&&r5   c                 L   t        j                         }t        j                  |      }t        t	        d            }t        |||       g}t        j                  ||      }|j                  t         j                         t        j                  |j                  d      sJ y )Nr[   r   r9   r   r   r   r    setranger   rn   r<   r8   r   ro   rl   rp   s         r3   test_9zTestFiniteSet.test_9  st     KKMKKN	uQx= H	BC**Y4RZZ({{177A&&&r5   c                 ,   t        j                         }t        j                  |      }ddh}t        |||       g}t        j                  ||      }|j                  t         j                         t        j                  |j                  d      sJ y )Nr   r   r   r9   
r   r   r    r   rn   r<   r8   r   ro   rl   rp   s         r3   test_10zTestFiniteSet.test_10  sp     KKMKKN	q6 H	BC**Y4RZZ({{177A&&&r5   c                    d}t        j                  |      }t        j                  t        j                  |            }h d}t	        |||       g}t        j
                  ||      }|j                  t         j                         t        j                  |j                  t        j                  |      t        |      z        sJ y )Nr   r      r   r   r   r   r9   )r   r   r    sumr   rn   r<   r8   r   ro   rl   onesmaxr   r   r#   r&   rq   rr   rs   s          r3   test_11zTestFiniteSet.test_11#  s     KKKKq	*	 H	BC**Y4RZZ({{177BGGEN3x=$@AAAr5   c                     t        j                         }t        j                  |      }h d}t        j                  t
        d      5  t        |||        d d d        y # 1 sw Y   y xY w)Nr   zmust be affinematchr   )r   r   rO   pytestraises
ValueErrorr   )r   r#   x_absrq   s       r3   test_non_affine_exceptionz'TestFiniteSet.test_non_affine_exception/  sQ     KKMq	]]:-=> 	<eX;	< 	< 	<s   	A!!A*c                    d}t        j                  |      }t        j                  t        j                  |            }h d}t	        |||       |t        j                  d      j                  |      k  g}t        j                  ||      }|j                  t         j                         t        j                  |j                  t        j                  ddgddgg            sJ y )	Nr~   >   r   r   r   r   r   r9   r   r   r   )r   r   r    r   r   r   r   reshapern   r<   r8   ro   rl   r   r   s          r3   test_independent_entriesz&TestFiniteSet.test_independent_entries8  s    KKKKq	*	 H	BBIIaL00779**Y4RZZ({{177BHHq!fq!f-=$>???r5   c                    t        j                  d      }t        j                  d      }t        j                  ||z        }dh}t        |||       |dk  g}t        j                  ||      }|j                  dt         j                         t        j                  |j                  d      sJ t        j                  |j                  d      sJ h d}t        |||       |dk  g}t        j                  ||      }|j                  dt         j                         t        j                  |j                  d      sJ t        j                  |j                  d      sJ y	)
zTest FiniteSet used in a GP.Tposr   r   r   gpr:   r   r   Nr{   r   r#   yr&   rq   rr   rs   s          r3   test_gpzTestFiniteSet.test_gpD  s    KKD!KKD!KK!$	3 H	BAFK**Y4bjj1{{177A&&&{{177A&&&  H	BAFK**Y4bjj1{{177A&&&{{177A&&&r5   c                    t        j                  d      }t        j                  d      }t        j                  ||z        }h d}t        ||z  ||       |dk(  g}t        j                  ||      }|j                  dt         j                  d       t        j                  |j                  d      sJ t        j                  |j                  d      sJ |j                  dt         j                  d       t        j                  |j                  d      sJ t        j                  |j                  d      sJ y	)
z%Test FiniteSet applied to a monomial.Tr   r   r   r   )r   r:   
ignore_dppr   r   r:   enforce_dppNr{   r   s          r3   test_monomialzTestFiniteSet.test_monomialZ  s     KKD!KKD!KK!$	 1h)Da1fM**Y4bjjTB{{177A&&&{{177A&&& 	bjjdC{{177A&&&{{177A&&&r5   c                    t        j                  d      }t        j                  d      }t        j                  ||z        }h d}t        |||       |dk  g}t        j                  ||      }t        j                  t         j                  j                  d      5  |j                  dt         j                         d	d	d	       d
dh}t        |||       |dk  g}t        j                  ||      }t        j                  t         j                  j                  d      5  |j                  dt         j                         d	d	d	       ddh}t        j                  dd      }t        ||z  |z  ||       |dk  g}t        j                  ||      }t        j                  t         j                  j                  d      5  |j                  dt         j                  d       d	d	d	       t        j                  ddg d      }t        |||       |dk  g}t        j                  ||      }t        j                  t         j                  j                  d      5  |j                  dt         j                         d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   XxY w# 1 sw Y   xY w# 1 sw Y   y	xY w)z-Test FiniteSet used in a GP with invalid set.Tr   >   r   r   r   r   r   r   zdoes not follow DGPr   r   Nznot DGPg      ?)r   rl   znot DPPr   r   )r   r   r   )r   r   r    r   rn   r   r   errorDGPErrorr<   r8   rm   DPPError)r   r#   r   r&   rq   rr   rs   params           r3   test_invalid_gpzTestFiniteSet.test_invalid_gpm  s*    KKD!KKD!KK!$	 H	BAFK**Y4]]288,,4IJ 	6MMT"**M5	6 7 H	BAFK**Y4]]288,,I> 	6MMT"**M5	6 8Q/ !E'E!18yQSTXYSYZ**Y4]]288,,I> 	HMMT"**$MG	H
 <<t9= H	BAFK**Y4]]288,,4IJ 	6MMT"**M5	6 	6/	6 	6	6 	6	H 	H	6 	6s0   !"J'"J
#J,'"J8JJ),J58KN)__name__
__module____qualname__staticmethodboolr4   r@   rG   rJ   rS   rU   rW   rY   r_   ra   rd   rf   rh   rj   rt   ry   r|   r   r   r   r   r   r    r5   r3   r	   r	      sg    t  >+ + t  ( +$ + + t  " +$ + + t  " +$ + + t  B +$ + + t  , +$ + + t  2 +$ + + '$ ' ' '$ ' ' '4 ' ' 	B4 	B 	B <T < < 	@D 	@ 	@ '4 ' '* ' ' '$ !64 !6 !6r5   r	   c                  H   t        j                         } t        j                  |       }t        t	        d            }t        | |      g}t        j                  ||      }|j                  t         j                         t        j                  | j                  d      sJ y )Nr[   r9   r   rv   )r#   r&   rq   rr   rs   s        r3   test_default_argumentr     sp    
AAI58}HQ)*KjjK0GMMM$;;qww"""r5   )__doc__numpyr   r   cvxpyr   cvxpy.constraintsr    cvxpy.reductions.solvers.definesr   cvxpy.testsr   r!   markskipifr8   solver_installedparametrizer	   r   r   r5   r3   <module>r      s        ' > 2;;%%JJ''0O &  
 tUm4o6 o6 5 o6d # #r5   