U
    ±Ė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ŚzZ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.   śD/tmp/pip-unpacked-wheel-6t8vlncq/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.   r/   r.   r.   r2   r3   N   s     c                      s    t tt t dt   gS )Nr%   )ŚlpŚmaxr   r   r   r.   ©Śr1Śr2Zr3r.   r2   Ś<lambda>Y   ó    ztest_lp.<locals>.<lambda>c                      s   t tt gS ©N©r4   r5   r   r.   ©r7   r.   r2   r9   \   r:   é’’’’c                      s   t tt gS r;   r<   r.   )r7   r8   r.   r2   r9   ^   r:   c                      s   t tt gS r;   r<   r.   r=   r.   r2   r9   b   r:   c                      s   t tt gS r;   r<   r.   r=   r.   r2   r9   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   ©r0   Ś_r.   r.   r2   r3   l   s     zFtest_lp.<locals>.make_random_problem.<locals>.rand.<locals>.<listcomp>r!   r>   r,   )r   r   Śranger   r	   )Zint1Zint2)Śsparsityr.   r2   Ś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.   ©r0   r   ©rE   r.   r2   Ś	<genexpr>o   s     zBtest_lp.<locals>.make_random_problem.<locals>.<listcomp>.<genexpr>)ŚsumrA   )rE   Ś	variablesr.   r2   r3   o   s   ’z8test_lp.<locals>.make_random_problem.<locals>.<listcomp>c                 3   s   | ]}  | V  qd S r;   r.   rF   rG   r.   r2   rH   q   s     z7test_lp.<locals>.make_random_problem.<locals>.<genexpr>)r   rC   rI   )ZnvarZnum_constraintsrD   ŚconstraintsŚ	objectiver.   )rE   rD   rJ   r2   Śmake_random_problemh   s    ’z$test_lp.<locals>.make_random_problem)r!   r!   r?   )r   r   r   r4   r5   r   ŚAssertionErrorŚsubsr   r
   r   Ś	TypeErrorr   r   r   r   )rK   rL   ŚansZoptimumZargmaxŚconstrŚconstŚvŚx1Śx2Śx3Śx4rM   r.   r6   r2   Śtest_lp   s    $’"




rY   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.   r/   r.   r.   r2   r3   Ŗ   s     z2test_simplex.<locals>.<lambda>.<locals>.<listcomp>)r   r.   ©rT   rU   rV   rW   rX   r.   r2   r9   ¦   s   žžžztest_simplex.<locals>.<lambda>r+   r[   )r   r,   ©Śbounds)r   r   r   rN   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^   r2   Śtest_simplex   sf    
ü,
 ’
&,’
.’
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¦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   r/   r.   r.   r2   r3   æ   s     z$test_lpmin_lpmax.<locals>.<listcomp>r   c                 S   s   g | ]}|d kqS r-   r.   r/   r.   r.   r2   r3   Ā   s     c                 S   s   g | ]}t |qS r.   r   r/   r.   r.   r2   r3   Ę   s     c                 S   s   g | ]}|d kqS r-   r.   r/   r.   r.   r2   r3   É   s     r#   )r   r   r   r   rN   r   )rT   rU   rV   Śy1Śy2rb   rk   rl   ri   rj   Śmrh   rR   rQ   r.   r.   r2   Śtest_lpmin_lpmax¼   s     $ rq   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   ©rk   rl   r.   r.   r2   r9   Š   r:   ztest_linprog.<locals>.<lambda>c                 S   s   t dd t| |D S )Nc                 S   s   g | ]}|  ” qS r.   )Śtolistr/   r.   r.   r2   r3   Ó   s    z2test_linprog.<locals>.<lambda>.<locals>.<listcomp>)Śtupler   rr   r.   r.   r2   r9   Ó   s   ’zx1:4r   r$   r+   r"   r)   r\   c                 S   s   g | ]}|j |j qS r.   )ZltsZgtsr/   r.   r.   r2   r3   Ü   s     z test_linprog.<locals>.<listcomp>r%   r,   r[   c                 S   s   g | ]}|j |j qS r.   ©ŚlhsŚrhsr/   r.   r.   r2   r3   ä   s     c                 S   s   g | ]}|j |j qS r.   ru   r/   r.   r.   r2   r3   ź   s     é   é   )r   Nr`   r>   )r!   r"   r_   )NNr#   )r"   Nr&   )rC   r   r   r   ŚdictŚziprN   r   r   ZHalfŚindex)Zdorg   rT   r   r   r   rh   ri   ZineqŚabrQ   ŚeqZabeqr`   r.   r.   r2   Ś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   r4   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.   r2   Ś<module>   s&   0g;