a
    lŗhM#  ć                   @   s  d dl 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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mZmZmZmZmZmZmZmZm Z m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z'm(Z(m)Z) e#dZ*e#dZ+dd Z,dd Z-dd Z.dd Z/dS )é    )ŚRational)ŚEqŚNe)Śsymbols)Śsympify)ŚS)ŚrandomŚchoice)Śsqrt©Ś	randprime©ŚMatrix©Ślinear_eq_to_matrix)
Ś_lpŚ_primal_dualŚUnboundedLPErrorŚInfeasibleLPErrorŚlpminŚlpmaxŚ_mŚ_abcdŚ_simplexŚlinprog)Śimport_module)Śraises)ŚxŚyŚzŚnumpyŚscipyc               
      sR  t dt  dk t dt  dkdt t  dt  dk tdkt dktdkg} t t  dt  }tt||  }\}}|t|| ksJ | |”|ks J | D ]}| |”dks¤J q¤tt  dt  dk t dt   dt  dkdt t  dt  dk tdkt dktdkg} t t  dt  }tt||  }\}}|t|| ksXJ | |”|kslJ | D ]}| |”dkspJ qptt  dt  d	k t dt   dt  d
kdt t  dt  dk tdkt dktdkg} d}t t  dt  | }tt||  }\}}|t|| ks0J | |”|ksDJ | D ]}| |”dksHJ qHtd }\}}	}
}||	 d|
  | dk d| |
 d|  dkd| |	 | dk|d|	  d|
  |  gdd |D   }} tt||  }\}}|t|| ksJ |d|d|	d|
d|difks8J tt  dt  d	k t dt   dt  d
kdt t  dt  dk gdd tt tfD  } t t  dt  }tt|| \}}| |”|ksŅJ | D ]}| |”dksÖJ qÖtt  tdt  d	k t dt   dt  d
kdt t  dt  dkt	t
 fdd tdk t	t fdd tdkt	t fdd tdk t	t
 fdd ttd t	t
 fdd ddd}ttt  tt ttdk g} t}tt||  }\}}|t|| ksJ | |”|ks.J | D ]}| |”dks2J q2d S )Né   é   éž’’’é   é   r   Téū’’’éü’’’é   é
   śx1 x2 x3 x4é   é   c                 S   s   g | ]}|d kqS ©r   © ©Ś.0Śir/   r/   śN/var/www/auris/lib/python3.9/site-packages/sympy/solvers/tests/test_simplex.pyŚ
<listcomp>D   s   ztest_lp.<locals>.<listcomp>g       @g      @c                 S   s   g | ]}|d kqS r.   r/   r0   r/   r/   r3   r4   N   ó    c                      s    t tt t dt   gS )Nr&   )ŚlpŚmaxr   r   r   r/   ©Śr1Śr2Zr3r/   r3   Ś<lambda>Y   r5   ztest_lp.<locals>.<lambda>c                      s   t tt gS ©N©r6   r7   r   r/   ©r9   r/   r3   r;   \   r5   é’’’’c                      s   t tt gS r<   r=   r/   )r9   r:   r/   r3   r;   ^   r5   c                      s   t tt gS r<   r=   r/   r>   r/   r3   r;   b   r5   c                      s   t tt gS r<   r=   r/   r>   r/   r3   r;   f   r5   ē¹?c                    sT   fdd t d| d   fddt|D }t fddD }||fS )	Nc                     s>   t   k rtdS dd tdD \} }t| |tddg S )Nr   c                 S   s   g | ]}t d dqS )r   éČ   r   ©r1   Ś_r/   r/   r3   r4   l   r5   zFtest_lp.<locals>.make_random_problem.<locals>.rand.<locals>.<listcomp>r"   r?   r-   )r   r   Śranger   r	   )Zint1Zint2)Śsparsityr/   r3   Śrandi   s    
z2test_lp.<locals>.make_random_problem.<locals>.randzx1:%sr-   c                    s(   g | ] }t  fd dD   kqS )c                 3   s   | ]}  | V  qd S r<   r/   ©r1   r   ©rF   r/   r3   Ś	<genexpr>o   r5   zBtest_lp.<locals>.make_random_problem.<locals>.<listcomp>.<genexpr>)ŚsumrB   )rF   Ś	variablesr/   r3   r4   o   s   ’z8test_lp.<locals>.make_random_problem.<locals>.<listcomp>c                 3   s   | ]}  | V  qd S r<   r/   rG   rH   r/   r3   rI   q   r5   z7test_lp.<locals>.make_random_problem.<locals>.<genexpr>)r   rD   rJ   )ZnvarZnum_constraintsrE   ŚconstraintsŚ	objectiver/   )rF   rE   rK   r3   Śmake_random_problemh   s    ’z$test_lp.<locals>.make_random_problem)r"   r"   r@   )r   r   r   r6   r7   r   Śsubsr   r
   r   Ś	TypeErrorr   r   r   r   )rL   rM   ŚansZoptimumZargmaxŚconstrŚconstŚvŚx1Śx2Śx3Śx4rN   r/   r8   r3   Śtest_lp   s    $’"




rY   c                     s,  ddgddgddgddggg d¢ddggdgg} t t|  dd\}}}}t||| | ddd	gg d
¢fkspJ t||| | dddg d
¢ddgfksJ tg gg dggdgddgg fksĀJ ttt ttd	 kttd	 ktdktdkgd	td	tdifksJ ttt ttd	 ktttd	 tdktdkgd	td	tdifksLJ ttt ttd	 kttd	gd	td	tdifksJ ttttd	gd	td	ifks¦J ttttd	 kttd	 ktdkgdtd	tdifksąJ ttdtd	 kdtd	 kgdtdifksJ ttdtd	 kdtd	 ktdkgdtdifksFJ tttdkttkgdtdtdifksrJ tttdkttt ktdktdkgdtdtdtdifks²J t	d  \t
t fdd t}d  d   }d d	  d  d  } | dkgtd  d	t  d	  dg }|| \}}	||  \}
}||dd   \}}tdd	 dtdd	 dtdd	 gf}t||
|||dd|ksČJ t||dkdkdkdkdkdkdkdkg }|d t|d  ” f|ks(J d S )Nr-   r?   r   )r&   r-   r"   r?   F)Ślistiś’’’r#   r"   )r-   r   r   r   T)Zdualr&   r$   r+   c                      sp   t d d  d  d d d  dk d  d  dkd	  d  d
kgdd  D  S )Né	   r)   r#   é   r&   r"   r   éż’’’r*   r(   c                 S   s   g | ]}|d kqS r.   r/   r0   r/   r/   r3   r4   Ŗ   r5   z2test_simplex.<locals>.<lambda>.<locals>.<listcomp>)r   r/   ©rT   rU   rV   rW   rX   r/   r3   r;   ¦   s   žžžztest_simplex.<locals>.<lambda>r,   r[   )r   r-   ©Śbounds)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rZ   Śvalues)ŚLŚAŚBŚCŚDŚMŚfZcondŚcŚdŚaŚbZaeqZbeqrQ   Zlpansr/   r^   r3   Śtest_simplex   sZ    ü(’
&,’
.’
6$"’
0"
’
,$’
 4($’rm   c                  C   sB  t d } \}}}}ddggdgddggdgf}dd |D \}}}}	t||g||	gg}
t|
d \}}t||dd | d d D  }|d|d|difks¦J |ddgddggddgddggdgf}d	d |D \}}}}	t||g||	gg}
t|
d \}}t||d
d | dd  D  }|d|d|difks>J d S )Nzx1 x2 y1 y2r-   r?   r"   c                 S   s   g | ]}t |qS r/   r   r0   r/   r/   r3   r4   æ   r5   z$test_lpmin_lpmax.<locals>.<listcomp>r   c                 S   s   g | ]}|d kqS r.   r/   r0   r/   r/   r3   r4   Ā   r5   c                 S   s   g | ]}t |qS r/   r   r0   r/   r/   r3   r4   Ę   r5   c                 S   s   g | ]}|d kqS r.   r/   r0   r/   r/   r3   r4   É   r5   r$   )r   r   r   r   r   )rT   rU   rV   Śy1Śy2rb   rk   rl   ri   rj   Śmrh   rR   rQ   r/   r/   r3   Śtest_lpmin_lpmax¼   s     $ rq   c                  C   s  t dD ]@} | sdd }ndd }td }\}}}|| d|  }|||d }d| d|  d|  d	kd	| | d
|  dk|dk|dk|dkg}|dd |D |}	td d ddtd	d gf}
t|||
d tt||
d fksöJ t|g|	¢R  |
ksJ |d7 }|||d }t|d|  dg}|dd |D |}dtdd  ddtdd
 gf}
t||| |
d tt||
d fksJ t|g|	¢|¢R  |
d d |
d fksĢJ || tjkg}|dd |D |}dtd
d  dtdd tdd gf}
t||| |
d tt||
d fksHJ t|g|	¢|¢R  |
d d |
d fksvJ ddd tjfg}dddtjgf}
t|||tjkg |
d tt||
d fksĢJ t|g|	¢R d|i|
d d |
d fksüJ t|g|	¢R d| 	|”|d ii|
d d |
d fks:J || tjkg}qtdggg g ddddgfkspJ tdgg g ddddgfksJ tdgddddgfks°J tddgddggdgddiddddgfksāJ tddgddggdgddiddddgfksJ d S )Nr"   c                 S   s
   t | |S r<   r   ©rk   rl   r/   r/   r3   r;   Š   r5   ztest_linprog.<locals>.<lambda>c                 S   s   t dd t| |D S )Nc                 S   s   g | ]}|  ” qS r/   )Śtolistr0   r/   r/   r3   r4   Ó   s   z2test_linprog.<locals>.<lambda>.<locals>.<listcomp>)Śtupler   rr   r/   r/   r3   r;   Ó   s   ’zx1:4r   r%   r,   r#   r*   r\   c                 S   s   g | ]}|j |j qS r/   )ZltsZgtsr0   r/   r/   r3   r4   Ü   r5   z test_linprog.<locals>.<listcomp>r&   r-   r[   c                 S   s   g | ]}|j |j qS r/   ©ŚlhsŚrhsr0   r/   r/   r3   r4   ä   r5   c                 S   s   g | ]}|j |j qS r/   ru   r0   r/   r/   r3   r4   ź   r5   é   é   )r   Nr`   r?   )r"   r#   r_   )NNr$   )r#   Nr'   )
rD   r   r   r   ŚdictŚzipr   r   ZHalfŚindex)Zdorg   rT   r   r   r   rh   ri   ZineqŚabrQ   ŚeqZabeqr`   r/   r/   r3   Śtest_linprogĶ   s\    
ž ("..*..’0"’
$"
’

’r   N)0Zsympy.core.numbersr   Zsympy.core.relationalr   r   Zsympy.core.symbolr   Zsympy.core.sympifyr   Zsympy.core.singletonr   Zsympy.core.randomr   r	   Z(sympy.functions.elementary.miscellaneousr
   Zsympy.ntheory.generater   Zsympy.matrices.denser   Zsympy.solvers.solvesetr   Zsympy.solvers.simplexr   r6   r   r   r   r   r   r   r   r   r   Zsympy.external.importtoolsr   Zsympy.testing.pytestr   Z	sympy.abcr   r   r   Śnpr!   rY   rm   rq   r   r/   r/   r/   r3   Ś<module>   s&   0g;