o
    *Î®c9š  ã                   @   sô  d dl mZ d dlmZ d dlmZ d dlmZ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 d d
lmZ d dl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$ d dl%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQ d dlRmSZSmTZT d dlUmVZV e$d\ZWZXZYZZdd Z[dd Z\dd  Z]d!d" Z^d#d$ Z_d%d& Z`d'd( Zad)d* Zbd+d, Zcd-d. Zdd/d0 Zed1d2 Zfd3d4 Zgd5d6 Zhd7d8 Zid9d: Zjed;d< Zkd=d> Zld?d@ ZmdAdB ZndCdD ZodEdF ZpdGdH ZqdIdJ ZrdKdL ZsdMdN ZtdOdP ZudQdR ZvdSdT ZwdUdV ZxdWdX ZydYdZ Zzd[d\ Z{d]d^ Z|d_d` Z}dadb Z~dcdd Zdedf Zdgdh Zdidj Zedkdl Zdmdn Zdodp Zdqdr Zdsdt Zdudv Zdwdx Zdydz 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dd Zdd  Zd¡S )¢é    )Ú	fuzzy_and)Ú_sympify)Údispatch)ÚXFAILÚraisesÚwarns_deprecated_sympy)ÚQ©ÚAdd)ÚBasic©ÚExpr)ÚFunction©ÚMul)ÚFloatÚIÚRationalÚnanÚooÚpiÚzoo©ÚPow)ÚS)ÚSymbolÚsymbols)ÚexpÚ	exp_polarÚlog)ÚceilingÚfloor)Úsqrt)ÚcosÚsin)ÚAndÚImpliesÚNotÚOrÚXor)ÚReals)Úsimplify)Útrigsimp)Ú
RelationalÚEqualityÚ
UnequalityÚGreaterThanÚLessThanÚStrictGreaterThanÚStrictLessThanÚRelÚEqÚLtÚLeÚGtÚGeÚNeÚis_leÚis_gtÚis_geÚis_ltÚis_eqÚis_neq)ÚIntervalÚ	FiniteSet)Úcombinationszx,y,z,tc                    s  ddl m}  jrjsJ ttt thD ]Š}tj fv rv k kg}tt|dkr9|d dks;J  ksC krEJ |t	 fddsQJ |t	 fdds]J |t	 fddsiJ |t	 fd	dsuJ nE k kg}tt|d
ksJ  k  k k kg}g d¢g d¢g d¢g 
|¡}|dkrµ|d sŽ jjksŽJ n|d s»J   qdS )Nr   )r   é   Fc                      ó    k S ©N© rG   ©ÚaÚbrG   úG/tmp/pip-target-vg8gfxp4/lib/python/sympy/core/tests/test_relational.pyÚ<lambda>*   ó    zrel_check.<locals>.<lambda>c                      ó    kS rF   rG   rG   rH   rG   rK   rL   +   rM   c                      ó    kS rF   rG   rG   rH   rG   rK   rL   ,   rM   c                      ó    kS rF   rG   rG   rH   rG   rK   rL   -   rM   é   )TTFF)FTFT)FFTTT)Úsympy.testing.pytestr   Ú	is_numberÚrangeÚlenÚtyper   ÚNaNÚsetÚ	TypeErrorÚindexÚis_Float)rI   rJ   r   ÚdoÚvÚEÚirG   rH   rK   Ú	rel_check"   s6    ÿýýr`   c                  C   s>   t ttdtttksJ tddd} t| dtju sJ d S )Nú!=ÚpT©Úpositiver   )r-   ÚxÚyr:   r   r   Útrue©rb   rG   rG   rK   Útest_rel_ne?   s   ri   c                  C   s  t ttd} |  tt¡} t| tsJ | jtksJ | jtks!J t ttd} |  tt¡} t| t	s4J | jtks;J | jtksBJ t ttd} |  tt¡} t| t
sUJ | jtks\J | jtkscJ t ttd} |  tt¡} t| tsvJ | jtks}J | jtksJ t ttd} |  tt¡} t| tsJ | jtksJ | jtks¥J ttd} |  td¡tju sµJ |  td¡tju sÀJ d S )Nú==ú>=ú<=ú>ú<r   rD   )r-   re   rf   ÚsubsÚzÚ
isinstancer.   ÚlhsÚrhsr0   r1   r2   r3   r5   r   rg   Úfalse)ÚerG   rG   rK   Útest_rel_subsG   s8   
rv   c                  C   s  t t d  } tt| d}ttt t d  d|ksJ ttt t d  |ks'J tt| d}ttt t d  |ks:J tt| d}ttt t d  |ksMJ tt| d}ttt t d  |ks`J tt| d}ttt t d  |kssJ tt| d}t	tt t d  |ksJ d S )NrQ   rj   rn   rl   rm   rk   ra   )
re   r-   rf   r4   r5   r6   r7   r8   r9   r:   )ru   ÚresrG   rG   rK   Útest_wrappersp   s   rx   c                  C   s>  t ttsJ t  t tt tdksJ W d    n1 s w   Y  tddd} t | dtju s5J t ddtju s?J t ddtju sIJ t t dtju sTJ t t dtju s_J tddtju siJ tddtju ssJ tt dtju s~J tt dtju sJ t ddtju sJ tddtju sJ d S )Nr   rb   Trc   rD   FrG   )r5   re   r   r   r   rt   r:   rg   rh   rG   rG   rK   Ú
test_Eq_Ne   s    ÿry   c                  C   sz   ddl m}  ttd ¡ | td tddksJ ttdd  ttdd  ttd	d  ttd
d  ttdd  d S )Nr   ©ÚPolyrD   ÚZZ)Údomainc                   S   ó   t td ¡ S ©NrD   )r:   re   Úas_polyrG   rG   rG   rK   rL   Š   ó    ztest_as_poly.<locals>.<lambda>c                   S   r~   r   )r9   re   r   rG   rG   rG   rK   rL   §   r   c                   S   r~   r   )r8   re   r   rG   rG   rG   rK   rL   š   r   c                   S   r~   r   )r7   re   r   rG   rG   rG   rK   rL   ©   r   c                   S   r~   r   )r6   re   r   rG   rG   rG   rK   rL   ª   r   )Úsympy.polys.polytoolsr{   r5   re   r   r   ÚAttributeErrorrz   rG   rG   rK   Útest_as_poly¢   s   $r   c                   C   sÜ  t t ktju s	J t t  ktju sJ t dktju sJ t t k tju s%J t t  k tju s/J t dk tju s8J t t ktju sAJ t t  ktju sKJ t dktju sTJ t t ktju s]J t t  ktju sgJ t dktju spJ t  t ktju szJ t  t  ktju sJ t  dktju sJ t  t k tju sJ t  t  k tju s€J t  dk tju s®J t  t ktju sžJ t  t  ktju sÃJ t  dktju sÍJ t  t ktju s×J t  t  ktju sâJ t  dktju sìJ d S r   )r   r   rt   rg   rG   rG   rG   rK   Útest_rel_Infinity­   s0   r   c            
      C   s:  t dddd} t dddd}t dddd}t dddd}| |tf}||t f}|D ]}|dk tju s4J |dktju s=J |dktju sFJ |dktju sOJ |D ]&}||k tju s\J ||ktju seJ ||ktju snJ ||ktju swJ qQ|D ]J}||k tju sJ ||ktju sJ ||ktju sJ ||ktju s J ||k tju s©J ||ktju s²J ||ktju s»J ||ktju sÄJ qzq)|D ]R}|dk tju sÓJ |dktju sÜJ |dktju såJ |dktju sîJ |D ])}	||	k tju sûJ ||	ktju sJ ||	ktju sJ ||	ktju sJ qðqÈd S )	Nre   T)Úextended_positiveÚinfiniterf   rp   )Úextended_negativer   ÚwrD   )r   r   r   rt   rg   )
re   rf   rp   r   Úinf_setÚninf_setÚinf1Úinf2Úninf1Úninf2rG   rG   rK   Ú!test_infinite_symbol_inequalitiesÊ   sL   
ø
üúr   c                  C   s¬  t ddtju s
J t ddtju sJ tddtju sJ tddtju s(J tddtju s2J tddtju s<J tddtju sFJ tddtju sPJ tddtju sZJ tddtju sdJ tddtju snJ tddtju sxJ tddtju sJ tddtju sJ t t	dtju sJ tt	dtju s J t
tdd  t
tdd  t
tdd  t
tdd  td	d
} tdd
}t t|  t| tju sÔJ d S )Nr   rD   rQ   c                   S   ó
   t tdS ©NrQ   ©r8   r   rG   rG   rG   rK   rL     ó   
 ztest_bool.<locals>.<lambda>c                   S   r   r   ©r9   r   rG   rG   rG   rK   rL     r   c                   S   r   r   ©r6   r   rG   rG   rG   rK   rL   	  r   c                   S   r   r   ©r7   r   rG   rG   rG   rK   rL   
  r   z.000000000000000000001Ú z.0000000000000000000001)r5   r   rg   rt   r:   r6   r7   r8   r9   r   r   rY   r   r   rH   rG   rG   rK   Ú	test_boolö   s.   

 r   c                   C   s\   t tk tt tksJ t tktt tksJ t tktt tks!J t tktt tks,J d S rF   )re   rf   r6   r7   r8   r9   rG   rG   rG   rK   Útest_rich_cmp  s   r   c                  C   s$  ddl m}  | ddd}| ddd}| ddd	}| d
dd}t|d ¡ tju s*J t|d ¡ t|dks8J t|d ¡ tju sDJ t|d ¡ tju sPJ t	|d ¡ tju s\J t|d ¡ tju shJ t|d ¡ t|dksvJ t	|d ¡ tju sJ t
td ¡ t
tdksJ d S )Nr   )r   rb   Trc   Ún)ÚnegativeÚnp)ÚnonpositiveÚnn©ÚnonnegativerD   )Úsympy.core.symbolr   r8   Údoitr   rg   r9   r7   rt   r6   r5   re   )r   rb   r   r   r   rG   rG   rK   Ú	test_doit  s    r€   c                     s  t dtdtdksJ tdtddksJ tdtddks*J tdtdks6J tdtdksBJ tdtddksOJ tdtddks\J tdtdkshJ tdtdkstJ tdtddksJ tdtddksJ tdtdksJ tdtdksŠJ tdtddks³J tdtddksÀJ tdtdksÌJ tdtddksÙJ tdtddksæJ tdtdd	ksóJ tdtdksÿJ tdtddksJ tdtddksJ tdtdd	ks)J tdtdks6J tdtdd
ksDJ tdtddksRJ tdtdks_J tdtdd
ksmJ tdtddks{J tdtdksJ dktdd
ksJ dktddks¢J dktdks®J dktdd
ks»J dktddksÈJ dktdksÔJ tdtddksâJ tdtddksðJ tdt	dksýJ tdtddksJ tdtddksJ tdt	dks&J dktddks3J dktddks@J dkt	dksLJ dktddksYJ dktddksfJ dkt	dksrJ t
dtddksJ t
dtddksJ t
dtdksJ t
dtddks©J t
dtddks·J t
dtdksÄJ dktddksÑJ dktddksÞJ dktdksêJ dktddks÷J dktddksJ dktdksJ tdtddksJ tdtddks,J tdtdks9J tdtddksGJ tdtddksUJ tdtdksbJ dk tddksoJ dk tddks|J dk tdksJ dk tddksJ dk tddks¢J dk tdks®J ddlm}  tdD ]<}	 | ddrÅtdfntdf\}}|| d| | ddrá || d|7   dvrçnq»tt fdd qžtfdddD sJ tfdddD sJ tfdddD sJ tfd dd!D s-J tfd"dd#D s;J tfd$dd%D sIJ d S )&Nre   r   rj   ÚeqrD   éÿÿÿÿra   ú<>Únerk   Úgerl   Úlerm   Úgtrn   Últ)Úrandintéd   iÿÿ  éÿ   )rj   r¥   ra   r§   rš   rk   r©   rl   rª   rm   r«   rn   r¬   z:=z+=z-=z*=z/=z%=c                      s   t d S r   ©r-   rG   ©Úrelation_typere   rG   rK   rL     ó    z%test_new_relational.<locals>.<lambda>c                 3   ó"    | ]}t  d |jdkV  qdS )r   rj   N©r-   Úrel_op©Ú.0Úop©re   rG   rK   Ú	<genexpr>  ó     z&test_new_relational.<locals>.<genexpr>)r¥   rj   c                 3   rŽ   )r   ra   Nrµ   r·   rº   rG   rK   r»     s    ÿ)rš   r§   ra   c                 3   rŽ   )r   rm   Nrµ   r·   rº   rG   rK   r»     rŒ   )r«   rm   c                 3   rŽ   )r   rn   Nrµ   r·   rº   rG   rK   r»     rŒ   )r¬   rn   c                 3   rŽ   )r   rk   Nrµ   r·   rº   rG   rK   r»     rŒ   )r©   rk   c                 3   rŽ   )r   rl   Nrµ   r·   rº   rG   rK   r»     rŒ   )rª   rl   )r   r5   r-   r.   r:   r/   r9   r0   r7   r1   r8   r2   r6   r3   Úsympy.core.randomr­   rT   Úchrr   Ú
ValueErrorÚall)r­   r_   ÚstrtypeÚlengthrG   r±   rK   Útest_new_relational*  sž    
ø
ÿ rÃ   c                     sŽ   t tttttfD ]O} | tt tt	 fdd tt	 fdd tt	 fdd tt	 fdd tt	 fdd tt	 fdd tt	 fdd tt	 fd	d qd S )
Nc                      s   d  S ©Nr   rG   rG   ©ÚrelrG   rK   rL     rM   z,test_relational_arithmetic.<locals>.<lambda>c                      s   d  S r   rG   rG   rÅ   rG   rK   rL     rM   c                      s   d  S r   rG   rG   rÅ   rG   rK   rL     rM   c                      s    d S r   rG   rG   rÅ   rG   rK   rL     rM   c                      ó
   t d S rÄ   r	   rG   rÅ   rG   rK   rL     r   c                      rÇ   r   r   rG   rÅ   rG   rK   rL     r   c                      rÇ   r   r   rG   rÅ   rG   rK   rL     r   c                      s
   t  dS r   r   rG   rÅ   rG   rK   rL     r   )
r5   r:   r7   r6   r9   r8   re   rf   r   rY   ©ÚclsrG   rÅ   rK   Útest_relational_arithmetic  s   
÷rÊ   c                   C   sX   t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  d S )Nc                   S   s   t tdkS ©Né   ©Úboolre   rG   rG   rG   rK   rL   £  r³   z-test_relational_bool_output.<locals>.<lambda>c                   S   s   t tdkS rË   rÍ   rG   rG   rG   rK   rL   €  r³   c                   S   s   t tdk S rË   rÍ   rG   rG   rG   rK   rL   ¥  r³   c                   S   s   t tdkS rË   rÍ   rG   rG   rG   rK   rL   Š  r³   c                   S   ó   t ttdS rË   )rÎ   r5   re   rG   rG   rG   rK   rL   §  r   c                   S   rÏ   rË   )rÎ   r:   re   rG   rG   rG   rK   rL   š  r   ©r   rY   rG   rG   rG   rK   Útest_relational_bool_output¡  s   rÑ   c                   C   sv  t tk ttk @ tt tk ttk ksJ t tk ttk B tt tk ttk ks&J t tk  tt tk ks3J t tk ttk ? tt tk ttk ksFJ t tk ttk > tttk t tk ksYJ t tk ttk A tt tk ttk kslJ t	t tk ttk @ tsyJ t	t tk ttk B tsJ t	t tk  t
sJ t	t tk ttk ? tsJ t	t tk ttk > tsªJ t	t tk ttk A ttfs¹J d S rF   )re   rf   rp   Útr%   r(   r'   r&   r)   rq   r0   rG   rG   rG   rK   Útest_relational_logic_symbols«  s   &&&&&"rÓ   c                   C   sì   t dk ¡ tdtddksJ t dk ¡ tdtksJ t dk  ¡ tt dddks,J t dk ¡ tt dks:J tt d ¡ tdksGJ tt d ¡ tt dddtdtdd ks_J t d dk ¡ tt dtdt kstJ d S )Nr   TrQ   é   éþÿÿÿ)re   Úas_setrA   r   r5   rB   r:   rG   rG   rG   rK   Ú!test_univariate_relational_as_setŒ  s    
ÿ.r×   c                   C   sD   t t dk ¡ tdttdt tt dtt d  ks J d S rÄ   )re   rf   rÖ   rA   r   rG   rG   rG   rK   Ú#test_multivariate_relational_as_setÈ  s    ÿrØ   c                   C   s¬   t ttttttksJ t ttttttksJ t ttttttks*J t ttttttks8J t ttttttksFJ t ttttttksTJ d S rF   )	r'   r.   re   rf   r/   r2   r1   r3   r0   rG   rG   rG   rK   Útest_NotÎ  s    rÙ   c                   C   sØ   t tttdddksJ tttdd ¡ tjksJ t tttdddks(J tttdd ¡ tjks6J t tttdddksCJ t t	ttdddksPJ t t
ttdddks]J t tttdddksjJ d S )	NF©ÚevaluatezEq(x, x)zNe(x, x)zx >= xzx <= xzx > xzx < x)Ústrr5   re   r£   r   rg   r:   rt   r9   r7   r8   r6   rG   rG   rG   rK   Útest_evaluate×  s   rÝ   c                    s€   t t fdd t t fdd t t fdd t t fdd t t fdd t t fdd t t fdd t t fd	d d S )
Nc                      rO   rF   rG   rG   rH   rG   rK   rL   ä  rM   z1assert_all_ineq_raise_TypeError.<locals>.<lambda>c                      rP   rF   rG   rG   rH   rG   rK   rL   å  rM   c                      rE   rF   rG   rG   rH   rG   rK   rL   æ  rM   c                      rN   rF   rG   rG   rH   rG   rK   rL   ç  rM   c                      s    kS rF   rG   rG   rH   rG   rK   rL   è  rM   c                      s    kS rF   rG   rG   rH   rG   rK   rL   é  rM   c                      s    k S rF   rG   rG   rH   rG   rK   rL   ê  rM   c                      s    kS rF   rG   rG   rH   rG   rK   rL   ë  rM   rÐ   rH   rG   rH   rK   Úassert_all_ineq_raise_TypeErrorã  s   rÞ   c                 C   s    ddl m} t| |k|sJ t| |k|sJ t| |k |s!J t| |k|s*J t|| k|s3J t|| k|s<J t|| k |sEJ t|| k|sNJ dS )zDAll inequality operations on `a` and `b` result in class Inequality.r   )Ú_InequalityN)Úsympy.core.relationalrß   rq   )rI   rJ   Ú
InequalityrG   rG   rK   Ú%assert_all_ineq_give_class_Inequalityî  s   râ   c                   C   s   t tt d S rF   )rÞ   r   re   rG   rG   rG   rK   Ú'test_imaginary_compare_raises_TypeErrorû  s   rã   c                  C   sp   t ddd} t dddd}| |fD ]}td| qt d}t d	dd
}t ddd}|||fD ]}td| q.d S )Nrf   T©Ú	imaginaryrp   F)ÚcomplexÚextended_realrQ   rÒ   re   ©Úreal©ræ   )r   rÞ   râ   )rf   rp   r   rÒ   re   rG   rG   rK   Útest_complex_compare_not_real   s   ÿrë   c                  C   s&   t ddd} tt|  tt |  d S )Nrf   Trä   )r   rÞ   r   )rf   rG   rG   rK   Ú/test_imaginary_and_inf_compare_raises_TypeError  s   
rì   c                  C   sz   t tdd  tdddd} tddd}tddd	}tt| t|  }td
| t | }td
| t| }td
| d S )Nc                   S   s   dt  dt  k S )NrQ   rÌ   ©r   rG   rG   rG   rK   rL     s    z4test_complex_pure_imag_not_ordered.<locals>.<lambda>re   T)ré   Únonzerorf   rä   rp   rê   rQ   )r   rY   r   rÞ   r   râ   )re   rf   rp   rÒ   rG   rG   rK   Ú"test_complex_pure_imag_not_ordered  s   



rï   c                     sø   t d t d ttfdd  dk sJ tdd tt fdd  j j dk s4J td	d
d} d|  d|  tdd tt fdd  j j dk s\J t d dt  d ttfdd ttfdd dS )ze
    A consequence of pull request #7792 is that `x - y < 0` and `x < y`
    are not synonymous.
    rQ   rÌ   c                      rE   rF   rG   rG   ©re   rf   rG   rK   rL   /  rM   z3test_x_minus_y_not_same_as_x_lt_y.<locals>.<lambda>r   FrÚ   c                      ó      ¡ S rF   ©r£   rG   ©ÚineqrG   rK   rL   3  rM   rÒ   Trä   c                      rñ   rF   rò   rG   ró   rG   rK   rL   :  rM   c                      rE   rF   rG   rG   rð   rG   rK   rL   @  rM   c                      s     dk S rÄ   rG   rG   rð   rG   rK   rL   A  r³   N)r   r   rY   r6   rr   rs   r   )rÒ   rG   )rô   re   rf   rK   Ú!test_x_minus_y_not_same_as_x_lt_y(  s"   rõ   c                  C   s¶   dd l } ttttju sJ ttttju sJ ttjtj	d t
tt f}tt|  |¡tju s2J t|  |¡ttju s?J tt|  |¡tju sLJ t|  |¡ttju sYJ d S )Nr   rÌ   )Úrandomr.   r   r   rt   r/   rg   re   ÚZeroÚOner   r   Úchoice)rö   ÚArG   rG   rK   Útest_nan_equality_exceptionsD  s   rû   c               	   C   s<   t tjtdtjd ttdtt tf	D ]} t| t qd S )Né
   rÌ   gÍÌÌÌÌÌô?)re   r   r÷   rø   r   r   r   rÞ   )ÚqrG   rG   rK   Ú test_nan_inequality_raise_errorsR  s   ,ÿrþ   c                  C   s&   t ttdddfD ]} t| t q	d S )Nrp   Trä   )r   r   r   rÞ   r   )ÚrrG   rG   rK   Útest_nan_complex_inequalitiesY  s   ÿr   c                   C   ó<   t tdd  t tdd  t tdd  t tdd  d S )Nc                   S   s   t dkS rÄ   ©r   rG   rG   rG   rK   rL   a  rM   z4test_complex_infinity_inequalities.<locals>.<lambda>c                   S   s   t dkS rÄ   r  rG   rG   rG   rK   rL   b  rM   c                   S   s   t dk S rÄ   r  rG   rG   rG   rK   rL   c  rM   c                   S   s   t dkS rÄ   r  rG   rG   rG   rK   rL   d  rM   rÐ   rG   rG   rG   rK   Ú"test_complex_infinity_inequalities`  ó   r  c                  C   s  t ttjtjd ttt f} | D ]3}| D ].}t||||kks!J t||||k ks,J t	||||kks7J t
||||kksBJ qqttjtjd ttt fD ]6}tt |ddt |kks`J tt |ddt |k ksmJ t	t |ddt |kkszJ t
t |ddt |kksJ qQttjtjd ttt fD ]6}t|t dd|t kks€J t|t dd|t k ks±J t	|t dd|t kksŸJ t
|t dd|t kksËJ qdS )zAUsing the operator and functional forms should give same results.rÌ   FrÚ   N)re   rf   r   r÷   rø   r   r   r8   r6   r9   r7   )rú   rI   rJ   rG   rG   rK   Ú"test_inequalities_symbol_name_sameg  s&   üür  c                      sž   t tjtjd tttddfD ]J tt fdd tt fdd tt fdd tt fdd tt fdd tt fd	d tt fd
d tt fdd qdS )zUsing the operator and functional forms should give same results.
    With complex non-real numbers, both should raise errors.
    rÌ   rD   c                      ó
   t  tS rF   r   rG   ©rI   rG   rK   rL     r   z<test_inequalities_symbol_name_same_complex.<locals>.<lambda>c                      s    t kS rF   rí   rG   r  rG   rK   rL     rM   c                      r  rF   r   rG   r  rG   rK   rL     r   c                      s    t k S rF   rí   rG   r  rG   rK   rL     rM   c                      r  rF   r   rG   r  rG   rK   rL     r   c                      s    t kS rF   rí   rG   r  rG   rK   rL     rM   c                      r  rF   r   rG   r  rG   rK   rL     r   c                      s    t kS rF   rí   rG   r  rG   rK   rL     rM   N)	re   r   r÷   rø   r   r   r   r   rY   rG   rG   r  rK   Ú*test_inequalities_symbol_name_same_complex  s   "ør  c                     sv   ddl m} m}m}m} dttjtjd t	t
ttt ttddf
D ] || ||fD ]tt fdd q*q"d S )Nr   ©r«   r¬   r©   rª   ÚfoorÌ   rD   c                      s
    S rF   rG   rG   ©rI   Úbarr¹   rG   rK   rL     r   z6test_inequalities_cant_sympify_other.<locals>.<lambda>)Úoperatorr«   r¬   r©   rª   re   r   r÷   rø   r   r   r   r   r   r   r   rY   r	  rG   r  rK   Ú$test_inequalities_cant_sympify_other  s   ,ÿÿr  c                  C   s   ddl m}  td| d}tt|tt|ddksJ ttt t|i¡}|tt|ddks/J tt| 	¡ }|tt|ddksAJ d S )Nr   )ÚWildrb   rÈ   FrÚ   )
r¢   r  r   r8   re   r6   rf   ro   r9   r£   )r  rb   ru   rG   rG   rK   Ú test_ineq_avoid_wild_symbol_flip  s   r  c                  C   s   t d} t| |  d¡sJ t| |  d¡sJ t| |  ¡ s!J t| dtt| jdtt| jd ks8J tdD ]}tt| |}t|}|| k t|| k ksUJ q<| |  k t| |  k ksfJ t| jdt| jd }|| ksxJ || k r~J || ksJ || krJ |dksJ t	d} tt|  d¡}t| |s€J t	d} tt|  d	¡}t| |sžJ t
ttdd tdd  dt ju sÎJ d S )
Nz?6506833320952669167898688709329/5070602400912917605986812821504rü   é   é   r   é   r   rQ   é   )r   r`   r   r   rÜ   rb   rý   rT   r   r"   r5   r   r#   r$   rg   )rI   r_   rÿ   ÚfÚisarG   rG   rK   Útest_issue_8245ª  s.   . 0r  c                  C   s\   t ddd} tt | sJ tt | tju sJ tt|  s!J tt|  tju s,J d S )Nrb   Tr    )r   r6   r   r9   r   rt   r8   r7   rh   rG   rG   rK   Útest_issue_8449Ê  s
   r  c                  C   s  t ttd  tt  t d tk tdkksJ t ttd  tt  t d tk tdkks0J t tttd  tt  t d k tdk ksHJ td\} }|  | | |  dk  ¡ | |kksaJ td}||  |  || |   dk  ¡ }|| |kks~J tjtk }t ||jksJ t |dd|jksJ t dtt	dd  dt  dt   ddtd  dt  dt    dk tj
u sÂJ ttt  ¡ tttksÐJ ttd d  ¡ ttdksàJ ttd t  ¡ tj
ksîJ tdt d t  ¡ ttdksJ tdt d	  ¡ ttdksJ tdd tdd  d }t|t d  ¡ tjks/J ttt  ¡ tttks>J ttd d  ¡ ttdksOJ ttd t  ¡ tjks^J tdt d t  ¡ ttdksqJ tdt d	  ¡ ttdksJ t|t d  ¡ tj
ksJ ttt  ¡ tttks J ttd d  ¡ ttdks±J ttd t  ¡ tj
ksÀJ tdt d t  ¡ ttdksÓJ tdt d	  ¡ ttdksäJ t|t d  ¡ tjksóJ ttd
  ¡ ttd
ksJ tt d
  ¡ ttdksJ ttd  ¡ ttdks!J tt d  ¡ ttd
ks1J ttt  ¡ tttks@J ttd d  ¡ ttdksQJ ttd t  ¡ tjks`J tdt d t  ¡ ttdkssJ tdt d	  ¡ ttdksJ t|t d  ¡ tjksJ ttd
  ¡ ttd
ks¢J tt d
  ¡ ttdks²J ttd  ¡ ttdksÁJ tt d  ¡ ttd
ksÑJ ttt  ¡ tttksàJ ttd d  ¡ ttdksñJ ttd t  ¡ tj
ks J tdt d t  ¡ ttdksJ tdt d	  ¡ ttdks$J t|t d  ¡ tj
ks3J ttd
  ¡ ttd
ksBJ tt d
  ¡ ttdksRJ ttd  ¡ ttdksaJ tt d  ¡ ttd
ksqJ ttt  ¡ tttksJ ttd d  ¡ ttdksJ ttd t  ¡ tjks J tdt d t  ¡ ttdks³J tdt d	  ¡ ttdksÄJ t|t d  ¡ tj
ksÓJ ttd
  ¡ ttd
ksâJ tt d
  ¡ ttdksòJ ttd  ¡ ttdksJ tt d  ¡ ttd
ksJ tdtd }t |t dktj
u s'J t |t d| t  dktj
u s;J t |t t dt ktj
u sMJ d S )NrD   rŠ   zq rr   rQ   )ÚratiorÌ   é   rÔ   rÕ   )r+   re   rf   r   r"   r   rø   Ú	canonicalr   r   rt   r5   r#   r$   rg   r:   r9   r7   r8   r6   r   r   )rý   rÿ   Úroot2Úequationrp   ÚmrG   rG   rK   Útest_simplify_relationalÒ  s   000&"
$ÿÿÿ &""&""&"  "&"  "&"  "&"  ((r  c                  C   sn  t d\} }}}td}t|d t||d  ||  | d |¡s%J t|| ||k d¡dks4J t||d t||dd¡|d|d ksNJ t|d| t|d|d¡|d|d kshJ t||d t|d|d¡|d|d ksJ t|d| t||dd¡|d|d ksJ t| | t||d¡dks¬J t|d|d t|d|dd¡|d|d ksÊJ ||k  ||kd¡dksØJ ||k  ||kd¡dksæJ ||k  ||k d¡dksôJ ||k  ||k d¡dksJ ||dk  ||dk d¡|d|d ksJ |d|k  |d|k d¡|d|d ks5J d S )	Nzw:zr  rD   TFrQ   rÌ   rÔ   )r   r   r5   Úequals)r   re   rf   rp   r  rG   rG   rK   Útest_equals,  s    24444 <26r!  c                   C   s    t tk jtt kksJ t tkjtt kksJ tt tddjttt ddks'J tt tddjttt ddks8J t tkjtt kksCJ t tkjtt k ksNJ d S )NFrÚ   )re   rf   Úreversedr5   r:   rG   rG   rG   rK   Útest_reversed?  s   ""r#  c                  C   s  dd t t tk t d dkt dk tdt kt d t  t ktddddfD } dd | D | ks2J dd | D | ks=J td	d
 | D rHJ dd | D } dd | D | ksZJ dd | D | kseJ tdd
 | D rpJ ttt k t tkjtju sJ d S )Nc                 S   ó   g | ]}|j qS rG   ©r  ©rž   r_   rG   rG   rK   Ú
<listcomp>I  ó    z"test_canonical.<locals>.<listcomp>rQ   rÌ   FrÚ   c                 S   r$  rG   r%  r&  rG   rG   rK   r'  Q  r(  c                 S   ó   g | ]}|j jqS rG   ©r"  r  r&  rG   rG   rK   r'  R  ó    c                 s   ó"    | ]}|j jo|jj V  qd S rF   ©rr   Ú	is_Numberrs   r&  rG   rG   rK   r»   S  rŒ   z!test_canonical.<locals>.<genexpr>c                 S   s$   g | ]}|j j|j|jd djqS )FrÚ   )r"  Úfuncrs   rr   r  r&  rG   rG   rK   r'  U  s   $ c                 S   r$  rG   r%  r&  rG   rG   rK   r'  V  r(  c                 S   r)  rG   r*  r&  rG   rG   rK   r'  W  r+  c                 s   r,  rF   r-  r&  rG   rG   rK   r»   X  rŒ   )	re   rf   rp   r   r8   Úanyr5   r  rg   )ÚcrG   rG   rK   Útest_canonicalH  s    


ú"r2  c                  C   s   t ddd} | tk| t k  krdksJ  J t d} | t| ks%J | t| k dks/J | t| ks7J | t| kdksAJ d S )Nre   Trè   F)r   r   r!   r    rº   rG   rG   rK   Útest_issue_8444_nonworkingtests\  s   &r3  c                  C   sÐ   t d} t| t| t| t| ddksJ t| t| t| t| ddks(J t| t| t| t| ddks:J t| t| t| t| ddksLJ t ddd}|t|kdks\J |t|k dksfJ d S )Nre   FrÚ   r_   T)Úinteger)r   r8   r!   r9   r6   r    r7   )re   r_   rG   rG   rK   Útest_issue_8444_workingtestsh  s   $$$$r5  c                  C   sR   t dd tdd  d } | jdu sJ d| t  }tt|dtju s'J d S )NrD   rQ   Fr   )r#   r$   Úis_comparabler   r+   r5   r   rt   )Údru   rG   rG   rK   Útest_issue_10304s  s   r8  c                  C   sR   t ddtd t  } ttttd  |   td t¡tttt |  ks'J d S )NrD   r  rÔ   rÌ   )r   rp   rf   r5   re   r   Úreplace)r7  rG   rG   rK   Útest_issue_18412z  s   <r:  c                  C   s  t d} t ddd}t ddd}t ddd}t dddd}t d	dd
d}t ddd
d}t dddd}t dddd}t dddd}	t ddd}
t dd
dd}tdd|  d  djtu s]J tdd|  d  d | tj¡tju srJ tdd| d  dtju sJ tjtj}}t|||u sJ t||||fvr||ks¡J td| d| ||fvr²||ksŽJ t|||u sœJ t||	|u sÆJ tdtt	  tt	 |u sÕJ ttt	 dtt	  |u säJ tdtt	  dtt	  |u sõJ tdtt	  dt|  |u sJ tdtt	  d| |u sJ tt
tdtt	  |u s'J tt
t	|u s1J tddd}tddd}t|t |||fvsKJ t|||u sUJ t||||fvrd||ksfJ tt
t	|u spJ t|| d|u s|J t|| d|u sJ t|| d|u sJ t|
| d|u r¥|
| dks§J t
t
 ks¯J tt
t
 |u sºJ tt	t	 |u sÅJ t|| ||fvsÒJ t||d  dtju sáJ t ddd}t|d| tju sôJ t ddd}t||d  d|u sJ d S ) Nre   ÚinfT)Úfinite)r   r   Úinfx)r   rç   zinf~xFzinf~x2Úinfp)r   r   Úinfp1Úinfn)r   r   rp   )ÚzeroÚnz)rA  r<  rD   rQ   rÿ   rè   r_   rä   r   Úo)Úoddrb   rc   )r   r5   r/  ro   r   ÚComplexInfinityrg   rt   r   r   r   r"   r   )re   Úfinr;  r   r=  ÚinfnxÚinfnx2r>  r?  r@  rA  rî   ÚTÚFrÿ   r_   rC  rb   rG   rG   rK   Útest_issue_10401  s^    * &"$  "& rK  c                   C   sL   t dddks	J t dddksJ t dddksJ t dddks$J d S )NTF)r5   rG   rG   rG   rK   Útest_issue_10633œ  s   rL  c                  C   s:   t d} tt| tdksJ tt| t dksJ d S )Nre   z	Eq(x, oo)z
Eq(x, -oo))r   rÜ   r5   r   rº   rG   rG   rK   Útest_issue_10927Ä  s   rM  c               	   C   s0  t d} | tk tju sJ | tktju sJ td}t|dtddtd|   d| dtd|  d     }|dktju sCJ dd	 td
dD g d¢ksSJ dD ]}t |¡}tt |tseJ t|tslJ qUtt d
¡t d¡szJ dd	 tddD g ksJ dd	 tddD g ksJ d S )Nz%905502432259640373/288230376151711744rQ   rü   é   rÔ   rD   r   c                 S   s8   g | ]}t t |¡tk rtt t |d  ¡k r|qS )rD   ©r   r   r   )rž   rb   rG   rG   rK   r'  Ú  s
    ÿ
þz1test_issues_13081_12583_12534.<locals>.<listcomp>r  é2   )r  é   é   é!   é%   é+   é0   )r  é   rW  c                 S   s(   g | ]}t t |¡t |¡kr|qS rG   rO  r&  rG   rG   rK   r'  è  ó   ( é   c                 S   s(   g | ]}t  |¡tt  |¡k r|qS rG   )r   r   r   r&  rG   rG   rK   r'  ê  rX  )	r   r   r   rt   rg   r"   rT   r   r`   )rÿ   r]   Úur_   rG   rG   rK   Útest_issues_13081_12583_12534Ê  s    @þ
 r[  c                  C   sŒ   ddl m}  tttt dtt  d}| ¡ | ttttt dtt  dtks.J ttd ttd  tt d}| ¡ | tttdtt td  tt dtks\J d S )Nr   )ÚConditionSetrÌ   rQ   )	Úsympy.sets.conditionsetr\  r5   re   r#   r$   rÖ   r*   r"   )r\  Úresult1Úresult2rG   rG   rK   Útest_issue_18188ì  s
   2">r`  c                  C   sj   t h} ttfD ]+}tjtjfD ]}|t tj}|j| ksJ |jj| ks&J q|t djt ks2J qd S r   )	re   r5   r:   r   rg   rt   Úbinary_symbolsr"  rX   )Úansr  rÒ   r¥   rG   rG   rK   Útest_binary_symbolsô  s   ûrc  c                      sV   dD ]&t jtdk tttfD ] dddtt jfD ]tt fdd qqqd S )N)rn   rl   rm   rk   rD   g¹?l        c                      s   t  S rF   r°   rG   ©rJ   r¹   r]   rG   rK   rL     r³   ztest_rel_args.<locals>.<lambda>)	r   rg   re   r%   rf   rÒ   rø   r   rY   rG   rG   rd  rK   Útest_rel_argsþ  s   ÿÿÿre  c                  C   s²   t tt tt } |  t¡dt ksJ | jtd djtttt fks%J | jtddjtttt fks6J dD ]}t td|d t¡tksHJ t dt|d t¡tksVJ q8d S )NrQ   rÚ   F)TFNr   )r5   re   rf   Úrewriter
   Úargs)r¥   ru   rG   rG   rK   Útest_Equality_rewrite_as_Add  s   ""þrh  c                  C   s2   t ttt  td tt  } t| dksJ d S )NrQ   F)r:   re   rf   r+   r  rG   rG   rK   Útest_issue_15847  s   ri  c                  C   s    t tt} | jtttksJ ttt} | jt ttksJ ttt tt } | jttt tt ks5J t tttttfD ]}|ttjj|ttksMJ q=d S rF   )	r5   re   rf   Únegatedr:   r9   r6   r8   r7   ©r¥   r  rG   rG   rK   Útest_negated_property  s   

ÿrl  c                  C   sP  t tt} | jt t t ksJ ttt} | jtt t ks"J ttt tt } | jtt t tt ks:J t tttttfD ]}|ttjj|ttksRJ qBt tttttfD ]}|t tjj|t tksmJ q[t tttttfD ]}|tt jj|tt ksJ qvt tttttfD ]}|t t jj|t t ks¥J qd S rF   )	r5   re   rf   Úreversedsignr:   r9   r7   r8   r6   rk  rG   rG   rK   Útest_reversedsign_property%  s   

""&ÿrn  c                  C   sì   t tttttfD ]} | ttjj	| ttj	jksJ qt tttttfD ]} | t tjj	| t tj	jks7J q#t tttttfD ]} | tt jj	| tt j	jksTJ q@t tttttfD ]} | t t jj	| t t j	jkssJ q]d S rF   )
r5   r:   r9   r8   r7   r6   re   rf   r"  rm  )r  rG   rG   rK   Ú#test_reversed_reversedsign_property<  s   "&&
ÿÿro  c                  C   s°   dd } dd }| |t t k | |t t k | |tt t  | |tt t  | |tt k  | |tdt  t  dtd   d k  tt kjt tkksVJ d S )Nc                 S   s(   t | dD ]\}}|j|jksJ qd S r   )rC   r  )ÚlistofformsÚform1Úform2rG   rG   rK   Útest_different_formsL  s   ÿz5test_improved_canonical.<locals>.test_different_formsc                 S   s   | | j | j| j jgS rF   )r"  rm  )ÚexprrG   rG   rK   Úgenerate_formsP  s   
ÿz/test_improved_canonical.<locals>.generate_formsé   rQ   é   )re   rf   r5   r:   r   r  )rs  ru  rG   rG   rK   Útest_improved_canonicalK  s   *rx  c                  C   sf   t d\} }}tt| ||tddd}tt| ||tddd}|j|jks)J |j|jks1J d S )Nza b crD   rQ   rÌ   rÔ   rv  r  )r   r5   rB   r:   r  r"  )rI   rJ   r1  rú   ÚBrG   rG   rK   Útest_set_equality_canonical^  s
   rz  c                  C   s¢   t dt tdt } }t| |}t||ksJ tt| | td}t|ts,J | ttd ¡t	j
u s9J ttttd t td  dt	j
u sOJ d S )NrQ   rN  rD   )r$   re   r#   r5   r,   r"   rq   ro   r   r   rg   )Úsr1  r¥   ÚchangedrG   rG   rK   Útest_trigsimph  s   
0r}  c                   C   s  t dt td  d dt  ¡ t td tdd ttd  tddfv s)J tdt td  d  dt  ¡ t td tdd ttd  tddfv sSJ td d td d  dt  dtd  k ¡ td dt  dktd  dt  dkfv sJ d S )NrÌ   rD   rÔ   rQ   éýÿÿÿ)r9   re   r+   r   r7   rG   rG   rG   rK   Ú'test_polynomial_relation_simplificationv  s   RTbr  c                  C   sR  t tt tt  ¡ t tdksJ tt t t t  ¡ ttdks&J tdt t dt t d  ¡ dks;J dt t dt t d k ¡ dksOJ dt t dt t d k  ¡ dkscJ dt t dt t d k  ¡ dkswJ td\} }}}}}}t| | | d|  d| | |  ¡ t| | | | | | ks§J d S )Nr   rQ   rÌ   FTza b c d e f g)r9   re   rf   r+   r7   r5   r   r6   )rI   rJ   r1  r7  ru   r  ÚgrG   rG   rK   Ú0test_multivariate_linear_function_simplification|  s   $(*(((Nr  c                   C   s(   t ttd ¡ t ttdksJ d S rÄ   )r5   r#   re   r+   rG   rG   rG   rK   Útest_nonpolymonial_relations  s   (r  c                   C   r  )Nc                   S   ó   t t t S rF   )r;   r   rG   rG   rG   rK   rL     r   ztest_18778.<locals>.<lambda>c                   S   r  rF   )r<   r   rG   rG   rG   rK   rL     r   c                   S   r  rF   )r=   r   rG   rG   rG   rK   rL     r   c                   S   r  rF   )r>   r   rG   rG   rG   rK   rL     r   rÐ   rG   rG   rG   rK   Ú
test_18778  r  r  c                     st   ddl m}  G  fddd|  t dd ddsJ t ddtddu s+J t dd dds8J dS )	zc

    This test exists to ensure backwards compatibility.
    The method to use is _eval_is_eq
    r   r   c                       s$   e Zd Z fddZ fddZdS )ztest_EvalEq.<locals>.PowTestc                    s   t   t|t|¡S rF   ©r   Ú__new__r   ©rÉ   Úbaser   ©ÚPowTestrG   rK   r    ó   z$test_EvalEq.<locals>.PowTest.__new__c                    sH   t |  kr t | kr"| jd |jd ko| jd |jd kS d S d S ©Nr   rD   )rV   rg  ©rr   rs   r  rG   rK   Ú_eval_Eq  s   (ÿz%test_EvalEq.<locals>.PowTest._eval_EqN)Ú__name__Ú
__module__Ú__qualname__r  r  rG   r  rG   rK   r    s    r  rÌ   rÔ   Nrw  )Úsympy.core.exprr   r?   r   r@   r   rG   r  rK   Útest_EvalEq  s
   r  c                     s,  t ttt t¡t t¡@ du sJ t ttt t¡t t¡@ t t¡@ t t¡ @ du s/J t ttt t¡t t¡@ t t¡@ t t¡@ du sKJ t tt	 tt	 t t¡t t¡@ du saJ t dtt	  dtt	  t t¡t t¡@ du s{J t tt
dt t¡dsJ t tt
dt t¡ ddu sJ t tt
dt t¡ddu sªJ ttt
dt t¡ddu sºJ ttt
dt t¡ dsÉJ ttt
dt t¡ds×J G dd dt t   fdd} t  d	d
 d	d
s÷J t  d	d
td
d u sJ t d	d
 d	dsJ d S )NFrD   r   )Úassumptionsc                   @   ó   e Zd Zdd ZdS )ztest_is_eq.<locals>.PowTestc                 S   ó   t  | t|t|¡S rF   r  r  rG   rG   rK   r  ·  r  z#test_is_eq.<locals>.PowTest.__new__N©r  r  r  r  rG   rG   rG   rK   r  ¶  ó    r  c                    óP   t |  kr$t | kr&tt| jd |jd t| jd |jd gS d S d S r  )rV   r   r?   rg  r  r  rG   rK   Ú_eval_is_eqº  ó   0ÿztest_is_eq.<locals>._eval_is_eqrÌ   rÔ   rw  )r?   re   rf   r   r   r<  rç   r   r   r   r   rA  rî   r@   r   r   r   )r  rG   r  rK   Ú
test_is_eq¥  s"   $:8,4"   r  c                     sÎ   t ttdt t¡du sJ t ttdt t¡du sJ G dd dt t   fdd} t  dd	 dd
s>J t dd	 dd
sKJ t	 dd
 dd	sXJ t
 dd
 dd	seJ d S )Nr   TFc                   @   r  )ztest_is_ge_le.<locals>.PowTestc                 S   r  rF   r  r  rG   rG   rK   r  Ë  r  z&test_is_ge_le.<locals>.PowTest.__new__Nr  rG   rG   rG   rK   r  Ê  r  r  c                    r  r  )rV   r   r=   rg  r  r  rG   rK   Ú_eval_is_geÎ  r  z"test_is_ge_le.<locals>._eval_is_gerÌ   é	   rQ   )r=   re   r   r   r¡   r   r   r   r<   r;   r>   )r  rG   r  rK   Útest_is_ge_leÄ  s   r  c                  C   sì   t tfD ]} | td}|j|j  kr|ksJ  J qttd}|jttdks+J |j|ks2J ttd}|jttdksAJ |j|ksHJ ttd}|jttdksWJ |j|ks^J ttd}|jttdksmJ |j|kstJ d S r   )	r5   r:   re   ÚstrictÚweakr8   r9   r6   r7   )r/  r¥   rG   rG   rK   Útest_weak_strictÙ  s   
"



r¢  N)Úsympy.core.logicr   Úsympy.core.sympifyr   Úsympy.multipledispatchr   rR   r   r   r   Úsympy.assumptions.askr   Úsympy.core.addr
   Úsympy.core.basicr   r  r   Úsympy.core.functionr   Úsympy.core.mulr   Úsympy.core.numbersr   r   r   r   r   r   r   Úsympy.core.powerr   Úsympy.core.singletonr   r¢   r   r   Ú&sympy.functions.elementary.exponentialr   r   r   Ú#sympy.functions.elementary.integersr    r!   Ú(sympy.functions.elementary.miscellaneousr"   Ú(sympy.functions.elementary.trigonometricr#   r$   Úsympy.logic.boolalgr%   r&   r'   r(   r)   Ú
sympy.setsr*   Úsympy.simplify.simplifyr+   Úsympy.simplify.trigsimpr,   rà   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   Úsympy.sets.setsrA   rB   Ú	itertoolsrC   re   rf   rp   rÒ   r`   ri   rv   rx   ry   r   r   r   r   r   r€   rÃ   rÊ   rÑ   rÓ   r×   rØ   rÙ   rÝ   rÞ   râ   rã   rë   rì   rï   rõ   rû   rþ   r   r  r  r  r  r  r  r  r  r!  r#  r2  r3  r5  r8  r:  rK  rL  rM  r[  r`  rc  re  rh  ri  rl  rn  ro  rx  rz  r}  r  r  r  r  r  r  r  r¢  rG   rG   rG   rK   Ú<module>   sŸ    $X),j

	 Z	
>"



