o
    *Î®cJ  ã                   @   sÌ  d 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mZmZ dd	lmZ dd
lmZmZmZ ddlmZmZ ddlmZ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* ddl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 ddlm5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ dd„ ZAdd„ ZBdd„ ZCdd„ ZDd d!„ ZEd"d#„ ZFd$d%„ ZGd&d'„ ZHd(d)„ ZId*d+„ ZJd,d-„ ZKd.d/„ ZLd0d1„ ZMd2S )3zCTests for tools for manipulating of large commutative expressions. é    )ÚSum)ÚAdd)ÚBasic)ÚDictÚTuple)ÚFunction)ÚMul)ÚIÚRationalÚoo)ÚS)ÚDummyÚSymbolÚsymbols)ÚexpÚlog)ÚrootÚsqrt)ÚcosÚsin)ÚIntegral)ÚO)ÚInterval)Úcollect)Úsimplify)	Údecompose_powerÚFactorsÚTermÚ
_gcd_termsÚ	gcd_termsÚfactor_termsÚ	factor_ncÚ_mask_ncÚ_monotonic_sign)Ú_keep_coeff)Úsub_pre)Úraises)ÚaÚbÚtÚxÚyÚzc                   C   s¢   t tƒtdfks
J ‚t td ƒtdfksJ ‚t tdt  ƒtt dfks&J ‚t tdt d  ƒttd  dfks:J ‚t tttddƒ  ƒttd  dfksOJ ‚d S )Né   é   é   )r   r*   r+   r
   © r0   r0   úF/tmp/pip-target-vg8gfxp4/lib/python/sympy/core/tests/test_exprtools.pyÚtest_decompose_power   s
    (.r2   c               
   C   sø  t ƒ t i ƒ  krt tjƒksJ ‚ J ‚t ƒ  ¡ tju sJ ‚t tdtdttƒdiƒ ¡ td td  ttƒd  ks<J ‚t tjƒt tdiƒksIJ ‚t tj	ƒt tdddiƒksXJ ‚t td tj
 ƒ ¡ td tj
 kslJ ‚t tdtdtdiƒ} t tdtdtdiƒ}|  |¡| |   kršt tdtdtdtdiƒksJ ‚ J ‚|  |¡t| |ƒ  kr¼t tdtdiƒt tdtdiƒfks¿J ‚ J ‚|  |¡| |   krÕt tdtdiƒksØJ ‚ J ‚|  |¡| |   krît tdtdiƒksñJ ‚ J ‚|  d¡| d   krt td	td
tdiƒksJ ‚ J ‚| d¡|d   kr(t tdtd
tdiƒks+J ‚ J ‚|  |¡t tdtdiƒks;J ‚|  |¡t tdtdtdtdiƒksOJ ‚t tdtdtdiƒ} t tdtdiƒ}|  |¡t tdtdtdiƒt tdiƒfksyJ ‚t tdƒt ƒ ¡ tdƒt ksŒJ ‚t t ƒt t ƒ ks™J ‚t tjtdƒiƒt tjtjttdƒiƒ t tƒksµJ ‚t ttƒt ƒt ttdƒd  ƒ  krØt ttdƒd iƒksÛJ ‚ J ‚t ttdƒd iƒ ¡ ttdƒd  ksòJ ‚t tdƒt ƒ tdƒt ¡t tdƒtiƒt tdƒtiƒfksJ ‚t ddt d  ƒ tdƒ¡t tdƒdt d iƒt tdƒtjiƒfks;J ‚t tjtddƒiƒt ttjtjtjiƒksSJ ‚t ttjtjtddƒiƒ ¡ tdtddƒ  ksnJ ‚t dƒt tjtjtdƒdiƒksJ ‚t dƒt tjtjtdƒdiƒks”J ‚t dt ƒt tdƒtiƒks¥J ‚t tdƒƒt tjtjtdƒdiƒksºJ ‚t tj
ƒt tdƒtj iƒksÌJ ‚t tddƒƒt tdƒtjtdƒtjiƒksäJ ‚t ttjiƒt tƒksòJ ‚t ddtdiƒt tdƒdtdiƒksJ ‚t tjtddƒiƒ ¡ tksJ ‚tddd}t d|d  ƒt tdƒd|d diƒks5J ‚t tƒt ttjiƒksCJ ‚t tƒ tdƒ¡t tƒt tdƒƒfksYJ ‚t tƒ tj¡t ƒ t tjƒfkslJ ‚ttdd„ ƒ t tƒ tdƒ¡t dt ƒks…J ‚t tƒ tj¡js‘J ‚t tƒ dt ¡jsžJ ‚t ttdƒd  ƒ ¡ tdtdƒ  ksµJ ‚t tƒt tdƒƒ t td ƒksÈJ ‚t tƒ tj¡t tƒks×J ‚t tƒ tj¡jsãJ ‚t tjƒ t¡t tjƒt ƒ fksöJ ‚t tƒ t¡t ƒ t ƒ fksJ ‚t tdiƒt tdiƒ t ƒ ksJ ‚t tƒt ƒ ks"J ‚t tjƒ t¡t tjƒt ƒ fks5J ‚tdt  td }}t |ƒ}| |¡| |¡  kr^t tt ƒt ƒ fksaJ ‚ J ‚| |¡t ƒ kslJ ‚tt }| |¡| |¡  krŠt td ƒt ƒ fksJ ‚ J ‚| |¡t |ƒks™J ‚dt  }}t |ƒ}| |¡| |¡  krºt ƒ t ƒ fks½J ‚ J ‚| |¡t |ƒksÉJ ‚dt dt }}t |ƒ}| |¡| |¡  kr÷t tdƒtiƒt tdƒtiƒfksúJ ‚ J ‚| |¡t ƒ ksJ ‚ttd  }t |ƒ td ¡t ttd iƒt i ƒfks#J ‚t |ƒ td ¡t ttiƒt i ƒfks9J ‚t |ƒ td ¡t ttiƒt tdiƒfksQJ ‚t |ƒ ttd  ¡t ttd iƒt ttiƒfksmJ ‚t |ƒ ttd  ¡t ttiƒt ttiƒfks‡J ‚t |ƒ ttd  ¡t ttiƒt ttd iƒfks£J ‚t |ƒ td ¡t ttd iƒt i ƒfks»J ‚t |ƒ td ¡t ttiƒt i ƒfksÑJ ‚t |ƒ td ¡t ttiƒt tdiƒfkséJ ‚t |ƒ ttd  ¡t ttd iƒt ttiƒfksJ ‚t |ƒ ttd  ¡t ttiƒt ttiƒfksJ ‚t |ƒ ttd  ¡t ttiƒt ttd iƒfks;J ‚t dt d ƒt ddddtdiƒksPJ ‚t tt t ƒt tdtdiƒkscJ ‚t dt td
  ƒt ddtdtdiƒkszJ ‚d S )Nr.   r/   é   r-   éÿÿÿÿé   é   é
   é   é	   é   é   é   é   g      ð¿g      ð?g       Àg       @éþÿÿÿéýÿÿÿÚAF©Úcommutativec                   S   s   t tƒ tj¡S ©N)r   r*   Údivr   ÚZeror0   r0   r0   r1   Ú<lambda>d   s    ztest_Factors.<locals>.<lambda>gš™™™™™É?é   é   i÷ÿÿÿ) r   r   ÚOneÚas_exprr*   r+   r   ÚInfinityr   ÚNegativeInfinityÚHalfr,   r)   ÚmulrD   ÚdivmodÚquoÚremÚpowÚgcdÚlcmÚnormalr   r	   ÚNegativeOner
   r   rE   r&   ÚZeroDivisionErrorÚis_zeroÚis_one)r'   r(   r@   ÚnÚdÚfr0   r0   r1   Útest_Factors&   sÌ   (<(:ÿ22:: (0&(
ÿL.
ÿ(
ÿ06&&"*$0*".,&$.&& $&::4H0,0
ÿ4
ÿ0,0
ÿ4
ÿ*&2r]   c                  C   sX  t dt td  t td  ƒ} t dtd  td  td  ƒ}| t dttdtdiƒttdtdiƒƒks6J ‚|t dttdtdiƒttdiƒƒksJJ ‚|  ¡ dt td  t td  ks^J ‚| ¡ dtd  td  td  ksrJ ‚|  ¡ t tj	d ttdtdiƒttdtdiƒƒksJ ‚| ¡ t tj
ttdiƒttdtdiƒƒks¤J ‚|  |¡| |   krÄt dttdtdiƒttdtdiƒƒksÇJ ‚ J ‚|  |¡| |   kråt dti ƒttdtdtdiƒƒksèJ ‚ J ‚|  d¡| d   kr
t d	ttdtdiƒttdtd
iƒƒksJ ‚ J ‚| d¡|d   kr-t dttd
tdiƒttd
iƒƒks0J ‚ J ‚|  d¡| d   krUt tj	d	 ttdtd
iƒttdtdiƒƒksXJ ‚ J ‚| d¡|d   kr{t tj	d ttd
iƒttd
tdiƒƒks~J ‚ J ‚|  |¡t dttdtdiƒttdiƒƒks–J ‚|  |¡t dttdtdiƒttdtdiƒƒks°J ‚t dt td  t td  ƒ} t dtd  td  td  ƒ}|  |¡t dttdtdtdiƒttdiƒƒksêJ ‚t dt d d ƒt dttd diƒti ƒƒksJ ‚t dt d dt d d  ƒt dttd dtd diƒti ƒƒks*J ‚d S )Nr3   r.   r/   r5   r-   r=   r6   rG   é@   r9   r8   r?   é   )r   r*   r+   r,   r)   r   rJ   Úinvr   rI   rM   rN   rP   rR   rS   rT   )r'   r(   r0   r0   r1   Ú	test_Termš   sB     ,((((ÿ."ÿB"ÿF(ÿ$ÿ04  46"ÿra   c                  C   s  dt d  t d  dt d  d  dt  d t d  t d d  d  dt  d t d  dt d  d   } t| ƒtddƒdt  dt d    dt  dfksPJ ‚tt | ¡ƒtddƒdt  dt d    dt  dfksmJ ‚tddƒdt  dt   dt d    }t| ƒ|ksˆJ ‚t | ¡}tt|ƒƒ|ks—J ‚tt|ƒƒ|ks¡J ‚tt|ƒƒ|ks«J ‚tt	|Ž ƒ|ksµJ ‚tt
t	tdƒdt dt  t  ƒt	tdƒtdƒƒƒƒt
t	tdƒdt t d  ƒt	tdƒtdƒƒƒkséJ ‚ttt dt  tdƒft t t  tt t  fƒƒtt td  tdƒt t t  tdt   iƒksJ ‚tdt  d d dt  d d  ƒdt d d  dt  d  ks>J ‚tdƒdksGJ ‚tdƒdksPJ ‚tt ƒt ksYJ ‚tddt   ƒtddt  dd	ksmJ ‚t dt  dt   }dt  t dt   }t|ƒ|ksŠJ ‚tt|ƒƒt|ƒks—J ‚td
ƒ\}}}}|d |t d   | t d  t |d   }	|dtdƒ d |t   |t d   |t d   f}
|	t |  j|
Ž  t dd¡}tt|t ƒƒtdƒ d tddƒ tt ƒ ks÷J ‚ttjtjgƒdksJ ‚tdt  d gƒdt d dfksJ ‚t t dt    }t|dd|ks*J ‚t d t dt  t  }t|dddt d d dt  t  ksLJ ‚t|dddt d d d t t  ksbJ ‚t|dddt dt   dt  ksvJ ‚t|dddt d dt   t ksŠJ ‚d S )Nr.   r-   r3   r5   rG   r/   r   F©Úevaluatezalpha:4)r   r   r-   ©ÚfractionT)re   Úclear)r*   r   r
   r   Ú	make_argsr   ÚlistÚtupleÚsetr   r   r   r+   r   r   r   r   r   ÚsubsÚseriesr   r   r   rE   )r\   ÚnewfÚargsÚargÚgargÚalphaÚalpha1Úalpha2Úalpha3r'   ÚrepÚsÚeqr0   r0   r1   Útest_gcd_termsÂ   sf   F"ÿ4&ÿ&
4,ÿ0*
ÿF(,44&
ÿ
ÿ
ÿÿrx   c               	   C   s  t ddd} tdttt  d  dt d ddt    ƒdt t dt  ttdƒtd ƒttdƒtd ƒ  d ks>J ‚tdttt  d  dddt    ƒttdƒddt  tt  t d ƒksgJ ‚tdddt   tdddt     ƒdddt   td  ks‰J ‚ttt|   ƒtd|   ks™J ‚tttt|   ƒƒttd|   ƒks­J ‚tdt d ddt  d  ƒttdƒtd ƒttddƒtd ƒ ksÒJ ‚tttt t dt d   ƒtttd  ttdƒtd ƒ  ksõJ ‚ttttt   t	td tt d    ƒttdt	   td  ksJ ‚t
ttdtfƒ}t|ƒ|ks+J ‚ttd t ƒtd t ks<J ‚ttd t d	d
td t ksOJ ‚ttd t d	dttjtdt  ddkshJ ‚tdƒtdƒ }t|ƒ|ksyJ ‚t|d	dtdƒdtdƒ  ksŒJ ‚tddƒtddƒ }t|d	ddtjd  ddtjd    ks¯J ‚ttt  g}ttd  g}tttfD ]}t||ƒƒ||ƒksÑJ ‚qÂttttt  ƒƒtttd  ƒksèJ ‚ttddƒƒtddƒks÷J ‚dttd d ƒ }t|dddttd d ƒ ksJ ‚t|d	dtdƒttd ƒ ks'J ‚ttdt   dtd d   }t|dd
|ksBJ ‚t|d	d
dksMJ ‚tdtd td   dtd   t ƒtddtd    td  ksrJ ‚tt t ƒt t ksJ ‚tt t ƒtdtt ddks”J ‚tttdtd ƒƒƒtt d ƒks©J ‚tt d ƒt }t|ƒttdtd ddƒt ksÆJ ‚t|dd|ksÑJ ‚ttdt d ƒt ƒt ttddt d ddƒ ksðJ ‚tt
fD ]X}t|ttddfƒƒt|dtddfƒ ksJ ‚t|ttddfƒt ƒtd|dtddfƒ  ks(J ‚t|tt ttd   tddfƒƒt|ttd  tddfƒ ksKJ ‚qôtdtd  d ƒdtd  d ksbJ ‚tdtd  d ƒdtd  d kswJ ‚tdtd  d  td¡ƒdksŠJ ‚d S )Nr@   FrA   r9   r-   r/   r.   r   Trd   )rf   rb   r7   )Úradicalr5   iúÿÿÿrG   r4   )Úsignéüÿÿÿr>   )r   r    r*   r+   r$   r   r'   r   r
   r(   r   r   r   rM   r   r   rI   rh   ri   rj   r   r   r   r   r   rk   )r@   Úirw   ÚansÚcÚeÚFr0   r0   r1   Útest_factor_termsü   s€   .:ÿ&$ÿ&ÿ
ÿÿ$ÿ ÿ*
ÿ"&2&2*&& &
ÿ&*(>.6J***r   c                  C   s>   t ddt dd} |  i ¡| ksJ ‚|  tti¡| ksJ ‚d S )Nr.   r-   Frb   )r   r*   Úxreplacer+   )r   r0   r0   r1   Útest_xreplaceF  s   rƒ   c                     sR  t dƒ\} }t ddd}t ddd\}}}dd	lm‰  | d
| d  }ˆ |ƒ| | d |  | |d   ks7J ‚‡ fdd„}|| d
|  ƒ ||| d
  ƒ ||| |  ƒ || | | ƒ ||| | | || |   | ƒ t| | d
dfƒ}|| d
|  ƒ || d
|  | ƒ || d
t|ƒ  ƒ |d
| d ƒ || | | |  | |  ƒ || || d
  ƒ || || |   ƒ || | | | d
  ƒ ||||  |  ƒ ||||d   ƒ || | | | d
  ƒ || || | | |   ƒ ||d
|  |d  ƒ ||| d ƒ ||| || d  ƒ ||| d ||  ƒ ||| || d  ||  ƒ t||||   ƒ|d d
|  ksHJ ‚t||| || |d    ƒ|||| |   | ksgJ ‚|t|ƒ t|ƒ|  }	t|	ƒ|	ks|J ‚ddlm}
 ddlm	} d
| |
||ƒ  }	t|	ƒ|	ksšJ ‚| |
||ƒ | |
||ƒ |
||ƒ  }	||	ƒ| d
|
||ƒ  |
||ƒ ksÂJ ‚d| d|   	¡ d||  ksÕJ ‚t|| ||d
   ƒ|| d
|  ksìJ ‚t|| | || |d
   ƒd
||  || |  ksJ ‚t| d| d  d|    ƒd| |  | d
  ks'J ‚d S )Nzx,yÚkT)Úintegerzn,m,oFrA   r   ©Ú_mexpandr-   r.   c                    s4   ˆ | ƒ}|j s	J ‚t|ƒ}|j sˆ |ƒ|ksJ ‚d S rC   )Úis_Addr!   )r   Úexr\   r†   r0   r1   Úfactor_nc_testV  s   
z&test_factor_nc.<locals>.factor_nc_test)Ú
Commutator)Úfactorr>   )
r   Úsympy.core.functionr‡   r   r   r!   Úsympy.physics.secondquantr‹   Úsympy.polys.polytoolsrŒ   )r*   r+   r„   rZ   ÚmÚor   rŠ   rv   rw   r‹   rŒ   r0   r†   r1   Útest_factor_ncL  sX   ($ *>&*&.><r’   c                  C   s\   t dƒ\} }| | }||d d|  d|    }tt|ƒƒ| | d| | d   ks,J ‚d S )Nza br.   r>   r/   )r   r    r%   )r'   r(   Úapbrw   r0   r0   r1   Útest_issue_6360Ž  s   ,r”   c                  C   s>   t ddd} ttt| ƒ ƒtt t| ƒ ƒ }| ¡ sJ ‚d S )Nr'   T)Úreal)r   r   r	   r   r   r   )r'   r)   r0   r0   r1   Útest_issue_7903•  s   "r–   c                  C   sn   t ddtd\} }t dƒ\}}t| |ƒ||ƒ ||ƒ| |ƒ  ƒ\}}}| ¡ D ]}|jr/J ‚q(|jr5J ‚d S )NzF, GF)rB   Úclszx, y)r   r   r"   ÚvaluesÚis_commutativerX   )r€   ÚGr*   r+   ÚexprÚdummiesÚ_Úvr0   r0   r1   Útest_issue_8263š  s   *rŸ   c                  C   s  t } tdƒ}| |ƒd u sJ ‚| | ƒd u sJ ‚| tddƒdks"J ‚| tdddƒdks.J ‚| tddƒdks9J ‚| tddd	ƒd
ksEJ ‚| tdddƒdksQJ ‚| tdddƒdks]J ‚| tddddƒdksjJ ‚| tdddƒdksvJ ‚| tdddƒdks‚J ‚| tddƒdksJ ‚| tddƒdks˜J ‚| tddƒdks£J ‚| tddd ƒjs¯J ‚| tdddd ƒjs¼J ‚| tddd ƒd u sÉJ ‚| tddd ƒd u sÖJ ‚| tdddd ƒjsãJ ‚| tddd ƒjsïJ ‚| tdd d ƒd u sýJ ‚| tddd d ƒjsJ ‚| tdd d ƒjsJ ‚| tdd d ƒjs(J ‚| tddd d ƒjs7J ‚| tdd d ƒd u sFJ ‚tdd}| |d ƒjsUJ ‚| |d tdƒ|  d ƒjsgJ ‚tdd}| |d  ƒjswJ ‚tdd}| d| ƒjs†J ‚| ||d  ƒjs’J ‚tdd}| ||d  ƒjs£J ‚tdd}| d| ƒjs²J ‚tdd}| || d  ƒjsÄJ ‚tddd}tddd}| d| | ƒjsÜJ ‚| d|d  | ƒd u sëJ ‚| |d | d ƒjsùJ ‚| |d  | d ƒjsJ ‚d S )Nr*   T)Úprimer.   )r    Úoddr/   )Ú	compositer3   )r¢   r¡   r9   )Úpositiver…   r-   )r£   ÚevenF)r£   r¤   r    )Únegativer…   r4   )r¥   r¤   r>   )Úzeror   )Únonnegative)Únonpositive)r£   )r¥   )r#   r   r   Úis_positiveÚis_nonnegativeÚis_nonpositiveÚis_negativer   )r€   r*   ÚpÚqr0   r0   r1   Útest_monotonic_sign¢  s`   
$




"r¯   c                  C   sÖ   ddl m}  tdƒ}t|d |ddfƒ}t|d || ddƒfƒ}tdƒ}| ||i¡}| ||i¡}| ¡ | ¡ ks<J ‚t|d |ddfƒ}t|d || dƒfƒ}tdƒ}| ||i¡}| ||i¡}||ksiJ ‚d S )Nr   )ÚRanger*   r-   r9   r7   r'   )Úsympy.sets.fancysetsr°   r   r   r‚   Údoit)r°   r*   Ús1Ús2r'   Úr1Úr2r0   r0   r1   Útest_issue_17256Ø  s   r·   c                  C   s6   ddl m}  | dddƒ}t|d dƒ|d ksJ ‚d S )Nr   )ÚMatrixSymbolÚXr.   )r   r   r-   )Ú"sympy.matrices.expressions.matexprr¸   r   )r¸   ÚMr0   r0   r1   Útest_issue_21623é  s   r¼   N)NÚ__doc__Úsympy.concrete.summationsr   Úsympy.core.addr   Úsympy.core.basicr   Úsympy.core.containersr   r   r   r   Úsympy.core.mulr   Úsympy.core.numbersr	   r
   r   Úsympy.core.singletonr   Úsympy.core.symbolr   r   r   Ú&sympy.functions.elementary.exponentialr   r   Ú(sympy.functions.elementary.miscellaneousr   r   Ú(sympy.functions.elementary.trigonometricr   r   Úsympy.integrals.integralsr   Úsympy.series.orderr   Úsympy.sets.setsr   Úsympy.simplify.radsimpr   Úsympy.simplify.simplifyr   Úsympy.core.exprtoolsr   r   r   r   r   r    r!   r"   r#   r$   Úsympy.simplify.cse_optsr%   Úsympy.testing.pytestr&   Ú	sympy.abcr'   r(   r)   r*   r+   r,   r2   r]   ra   rx   r   rƒ   r’   r”   r–   rŸ   r¯   r·   r¼   r0   r0   r0   r1   Ú<module>   sH    , t(:JB6