U
    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t| |”|ks t| D ]}| |”dks¤t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sXt| |”|kslt| D ]}| |”dkspt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s0t| |”|ksDt| D ]}| |”dksHtqHtd }\}}	}
}||	 d|
  | dk d| |
 d|  dkd| |	 | dk|d|	  d|
  |  gdd |D   }} tt||  }\}}|t|| kst|d|d|	d|
d|difks8t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Ņt| D ]}| |”dksÖt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t| |”|ks.t| D ]}| |”dks2tq2d S )Né   é   éž’’’é   é   r   Téū’’’éü’’’é   é
   śx1 x2 x3 x4é   é   c                 S   s   g | ]}|d kqS ©r   © ©Ś.0Śir/   r/   śR/var/www/html/venv/lib/python3.8/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   s     c                      s    t tt t dt   gS )Nr&   )ŚlpŚmaxr   r   r   r/   ©Śr1Śr2Zr3r/   r3   Ś<lambda>Y   ó    ztest_lp.<locals>.<lambda>c                      s   t tt gS ©N©r5   r6   r   r/   ©r8   r/   r3   r:   \   r;   é’’’’c                      s   t tt gS r<   r=   r/   )r8   r9   r/   r3   r:   ^   r;   c                      s   t tt gS r<   r=   r/   r>   r/   r3   r:   b   r;   c                      s   t tt gS r<   r=   r/   r>   r/   r3   r:   f   r;   ē¹?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   s     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   s     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   s     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   r5   r6   r   ŚAssertionErrorŚsubsr   r
   r   Ś	TypeErrorr   r   r   r   )rL   rM   ŚansZoptimumZargmaxŚconstrŚconstŚvŚx1Śx2Śx3Śx4rN   r/   r7   r3   Śtest_lp   s    $’"




rZ   c                     s8  ddgddgddgddggddddgddggdgg} t t|  dd\}}}}t||| | dd	dgddddgfksxtt||| | d
ddddddgddgfksØttg gg dggdgddgg fksĪt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t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sXtttt ttd kttdgdtdtdifkstttttdgdtdifks²tttttd kttd ktdkgdtdtdifksģtttdtd kdtd kgdtdifkstttdtd kdtd ktdkgdtdifksRttttdkttkgdtdtdifks~t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¾t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Ōtt||dkdkdkdkdkdkdkdkg }|d t|d  ” f|ks4td S )Nr-   r?   r   r&   r"   F)Ślistiś’’’r#   T)Zdualr$   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   Ŗ   s     z2test_simplex.<locals>.<lambda>.<locals>.<listcomp>)r   r/   ©rU   rV   rW   rX   rY   r/   r3   r:   ¦   s   žžžztest_simplex.<locals>.<lambda>r,   r\   )r   r-   ©Śbounds)r   r   r   rO   r   r   r   r   r   r   r   r   r   r   r   r   r[   Śvalues)ŚLŚAŚBŚCŚDŚMŚfZcondŚcŚdŚaŚbZaeqZbeqrR   Zlpansr/   r_   r3   Śtest_simplex   sf    
ü,
 ’
&,’
.’
6$"’
0"
’
,$’
 4(     ’rn   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¦t|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>td S )Nzx1 x2 y1 y2r-   r?   r"   c                 S   s   g | ]}t |qS r/   r   r0   r/   r/   r3   r4   æ   s     z$test_lpmin_lpmax.<locals>.<listcomp>r   c                 S   s   g | ]}|d kqS r.   r/   r0   r/   r/   r3   r4   Ā   s     c                 S   s   g | ]}t |qS r/   r   r0   r/   r/   r3   r4   Ę   s     c                 S   s   g | ]}|d kqS r.   r/   r0   r/   r/   r3   r4   É   s     r$   )r   r   r   r   rO   r   )rU   rV   rW   Śy1Śy2rc   rl   rm   rj   rk   Śmri   rS   rR   r/   r/   r3   Śtest_lpmin_lpmax¼   s     $ rr   c                  C   s
  t dD ]2} | 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ött|f|	 |
kst|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tt|f|	| |
d d |
d fksĘt|| 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sBtt|f|	| |
d d |
d fkslt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Ātt|f|	d|i|
d d |
d fksštt|f|	d| 
|”|d ii|
d d |
d fks,t|| tj	kg}qtdggg g ddddgfksbttdgg g ddddgfksttdgddddgfks¢ttddgddggdgddiddddgfksŌttddgddggdgddiddddgfkstd S )Nr"   c                 S   s
   t | |S r<   r   ©rl   rm   r/   r/   r3   r:   Š   r;   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   rs   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   Ü   s     z test_linprog.<locals>.<listcomp>r&   r-   r\   c                 S   s   g | ]}|j |j qS r/   ©ŚlhsŚrhsr0   r/   r/   r3   r4   ä   s     c                 S   s   g | ]}|j |j qS r/   rv   r0   r/   r/   r3   r4   ź   s     é   é   )r   Nra   r?   )r"   r#   r`   )NNr$   )r#   Nr'   )rD   r   r   r   ŚdictŚziprO   r   r   ZHalfŚindex)Śdorh   rU   r   r   r   ri   rj   ZineqŚabrR   ŚeqZabeqra   r/   r/   r3   Śtest_linprogĶ   sb    
  ž (".**.* ’. ’
$"
’

’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   r5   r   r   r   r   r   r   r   r   r   Zsympy.external.importtoolsr   Zsympy.testing.pytestr   Z	sympy.abcr   r   r   Śnpr!   rZ   rn   rr   r   r/   r/   r/   r3   Ś<module>   s&   0g;