
    bi@#                     B    d dl Zd dlmZ d dlZd dlmZ  G d de      Zy)    N)BaseTestc                       e Zd ZddZddZddZddZddZddZddZ	dd	Z
dd
ZddZddZddZddZddZddZddZddZy)TestDgpNc                 v   t        j                  dd      }t        j                  dd      }||z  }| j                  |j                                | j                  |j	                                | j                  |j                                ||z  }| j                  |j                                | j                  |j	                                | j                  |j                                |dz  }| j                  |j                                | j                  |j	                                | j                  |j                                |dz  }| j                  |j                                 | j                  |j	                                 | j                  |j                                 y )N Tpos      @g      cvxpyVariable
assertTrueis_dgpis_log_log_convexis_log_log_concave)selfxyprods       O/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/cvxpy/tests/test_dgp.pytest_productzTestDgp.test_product	   s?   NN24(NN24(1u&..01//12&..01//12&..01//12DKKM)*D22445D33556    c                    t        j                         }t        j                         }||z  }| j                  |j                                 | j                  |j	                                 | j                  |j                                 t        j                  dd      }||z  }| j                  |j                                 | j                  |j	                                 | j                  |j                                 y )Nr   Tr   r   )r   r   r   r   zs        r   4test_product_with_unconstrained_variables_is_not_dgpz<TestDgp.test_product_with_unconstrained_variables_is_not_dgp    s    NNNN1uDKKM)*D22445D33556NN24(1uDKKM)*D22445D33556r   c                    t        j                  d      }t        j                  d      }||z  }| j                  |j                                d|z  |z  d|z  |z  z   }||z  }| j                  |j                                |d|z  |dz  z  z  }| j                  |j	                                | j                  |j                                | j                  |j                                |d|z  |z   z  }| j                  |j	                                | j                  |j                                | j                  |j                                y )NTr   r
   333333?      @皙)r   r   r   is_log_log_affiner   assertFalser   r   )r   r   r   div
posynomials        r   test_divisionzTestDgp.test_division.   s   NNt$NNt$!e--/01Wq[37Q;.
!e--/0C!GaDk12--/0//12

%C!GaK(..01//12&r   c                    t        j                  d      }t        j                  d      }||z   }| j                  |j                                | j                  |j	                                | j                  |j                                 d|z  |z  d|z  |z  z   }| j                  |j                                | j                  |j	                                y NTr   r
   r   r   r   r   r   exprr#   s        r   test_addzTestDgp.test_addC   s    NNt$NNt$1u&..01D335561Wq[37Q;.

))+,
4467r   c                    t        j                         }t        j                  d      }||z   }| j                  |j                                 | j                  |j	                                 | j                  |j                                 d|z  |z  d|z  |z  z   }| j                  |j                                 | j                  |j	                                 | j                  |j                                 y r&   r   r'   s        r   0test_add_with_unconstrained_variables_is_not_dgpz8TestDgp.test_add_with_unconstrained_variables_is_not_dgpO   s    NNNNt$1uDKKM)*D22445D335561Wq[37Q;.
J--//0J88::;J99;;<r   c                 4   t        j                  d      }t        j                  d      }t        j                  d      }d|dz  z  |dz  z  |dz  z  }| j                  |j                                | j                  |j	                                | j                  |j                                |dz  }| j                  |j                                 | j                  |j	                                 | j                  |j                                 y )NTr   r
   皙?r            r   )r   r   r   r   monomials        r   test_monomialszTestDgp.test_monomials\   s    NNt$NNt$NNt$!s(#aDk1A!H<)*22453356DHOO--.H66889H7799:r   c                    t        j                  d      }t        j                  d      }t        j                  d      }d|dz  z  |dz  z  |dz  z  }d|z  |z  d|z  |z  z   }||z  }t        j                  |||      }| j                  |j	                                | j                  |j                                | j                  |j                                 ||z  }| j                  |j	                                | j                  |j                                | j                  |j                                 ||z  |z   }| j                  |j	                                | j                  |j                                y )NTr   r
   r-   r   r.   r   )r   r   maximumr   r   r   r   r   r   r   r   r0   r#   another_posynomialr(   s           r   test_maximumzTestDgp.test_maximumj   sB   NNt$NNt$NNt$!s(#aDk1A!H<1Wq[37Q;.
'*4}}Xz3EF&..01D33556D &..01D33556D 4'&..01r   c                 d   t        j                  d      }t        j                  d      }t        j                  d      }d|dz  z  |dz  z  |dz  z  }d|z  |z  d|z  |z  z   }||z  }t        j                  |d|z  d|z        }| j                  |j	                                | j                  |j                                 | j                  |j                                d|z  |z  }| j                  |j	                                | j                  |j                                 | j                  |j                                |d	z  }| j                  |j	                                | j                  |j                                 | j                  |j                                y )
NTr   r
   r-   r   r.   r         )r   r   minimumr   r   r   r   r4   s           r   test_minimumzTestDgp.test_minimum   sa   NNt$NNt$NNt$!s(#aDk1A!H<1Wq[37Q;.
'*4}}Xq:~q;M7MN&D22445//12J$&&D22445//12qy&D22445//12r   c                     t        j                  d      }| j                  |j                                | j	                  d|z  j                                y )N      ?r/   )r   Constantr   r   r!   r   r   s     r   test_constantzTestDgp.test_constant   s;    NN3
#$q&*+r   c                 ^   t        j                  dd      }g d}t        j                  ||      }| j                  |j	                                | j                  |j                                | j                  |j                                | j                  |j                                y )Nr.   Tr   )r8   r9   g      ?)r   r   geo_meanr   r   r    r   r   r   r   prB   s       r   test_geo_meanzTestDgp.test_geo_mean   sy    NN1$'>>!Q')*224522453356r   c                 z   t        j                  dd      }t        j                  dg      }t        j                  ||      }| j                  |j                                t        j                  t        j                  |      |dk(  g      }|j                          | j                  |j                  d       y )Nr8   Tr   r9   )r   r   nparrayrB   r   r   ProblemMaximizesolveassertEqualvalue)r   r   rD   rB   probs        r   test_geo_mean_scalar1zTestDgp.test_geo_mean_scalar1   s    NN1$'HHaSM>>!Q')*}}NN8$!VH
 	

Q'r   c                     t        j                  d      }t        j                  dg      }t        j                  ||      }| j                  |j                                y )NTr   r9   )r   r   rG   rH   rB   r   r   rC   s       r   test_geo_mean_scalar2zTestDgp.test_geo_mean_scalar2   sB    NNt$HHaSM>>!Q')*r   c           
      v   t        j                  d      }t        j                  t        j                  t        j                  |d         t        j                  |d d       z         t        j
                  |      dk(  g      }|j                          t        j                  t        j                  t        j                  |d d       t        j                  |d d       z         t        j
                  |      dk(  g      }|j                          t        j                  t        j                  t        j                  |d         t        j                  |d d       z         t        j
                  |      dk(  g      }|j                          | j                  |j                  |j                  d       y )Nr9   r   r8      )
r   r   rI   Minimizeinv_prodsumrK   inv_posassertAlmostEqualrM   )r   r   prob1prob2prob3s        r   test_inv_prodzTestDgp.test_inv_prod   s9   NN1NN5>>!A$/%..2A2GGHYYq\Q
 	 NN5>>!BQ%05>>!BQ%3HHIYYq\Q
 	NN5==1."11FFGYYq\Q
 	u{{EKK;r   c                     t        j                  dd      }| j                  t        |      j	                                y )Nr9   Tr   )r   r   r   rV   r   r?   s     r   test_builtin_sumzTestDgp.test_builtin_sum   s+    NN1$'A0023r   c                    t        j                  dd      }t        j                  d      }| j                  t              5 }t        j                  ||       d d d        | j                  t        j                        dk(         t        j                  d      }t        j                  d      }| j                  t              5 }t        j                  ||       d d d        | j                  t        |j                        dk(         t        j                  dd      }t        j                  d	      }t        j                  ||      }| j                  |j                                | j                  |j                                | j                  |j                                | j                  |j                                | j                  |j                                | j                  |j                  d
             | j                  t        j                  | |      j!                  d
             t        j                  dd      }t        j"                  ddgddgg      }t        j                  ||      }| j                  |j                                | j                  |j                                | j                  |j                                | j                  |j                                | j%                  |j                  d
             | j%                  |j!                  d
             y # 1 sw Y   xY w# 1 sw Y   uxY w)Nr9   Tr   )r9   r9   z*gmatmul(A, X) requires that A be constant.)rS   r9   z*gmatmul(A, X) requires that X be positive.r.   )rS   r.   r   )r9   r.          @r/   g        r   )r   r   assertRaises	Exceptiongmatmulr   str	exceptionrG   onesr   r    r   r   	is_nonnegis_incris_decrrH   r!   )r   r   Acmrc   s        r   test_gmatmulzTestDgp.test_gmatmul   so   NN1$'NN6"y) 	 RMM!Q	 BLL)DE 	F NN1GGFOy) 	 RMM!Q	 BLL)DE 	F NN1$'GGFO--1%()113411342245))+,*+qb!,44Q78NN6t,HHr3i"b*+--1%()113411342245+,+,?	  	 	  	 s   MMMMc                     t        j                  d      }| j                  |dz  j                                | j	                  |dz  j                                y )NTr   r8   )r   r   r   rg   r!   	is_nonposr?   s     r   test_power_signzTestDgp.test_power_sign   sD    NNt$A((*+!Q$))+,r   c                     t        j                  t        j                  t	        j
                  ddgg                  }| j                  |j                                y )Nr=   r`   )r   r>   sp	csc_arrayrG   rH   r!   is_log_log_constant)r   sparse_matrixs     r    test_sparse_constant_not_allowedz(TestDgp.test_sparse_constant_not_allowed   s?    r||BHHsCj\4J'KL::<=r   )returnN)__name__
__module____qualname__r   r   r$   r)   r+   r1   r6   r;   r@   rE   rO   rQ   r\   r^   rl   ro   ru   r   r   r   r   r      sX    7.7'*
8=;2*3,,
7
(+<.4"-H-
>r   r   )	numpyrG   scipy.sparsesparserq   r   cvxpy.tests.base_testr   r   r   r   r   <module>r~      s       *s>h s>r   