o
    ŕ8Va}  ă                   @   s6  d Z ddlmZmZmZmZmZmZmZm	Z	m
Z
mZmZ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mZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 ed\Z9Z:Z;edZ<dd	 Z=d
d Z>dd Z?dd 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' ZLd(d) ZMd*d+ ZNd,d- ZOd.d/ ZPd0d1 ZQd2d3 ZRd4d5 ZSd6d7 ZTd8d9 ZUd:d; ZVd<d= ZWd>d? ZXG d@dA dAeYZZdBdC Z[dDdE Z\dFdG Z]dHdI Z^dJdK Z_dLdM Z`dNdO ZadPS )Qz?Most of these tests come from the examples in Bronstein's book.é    )ÚPolyÚIÚSÚFunctionÚlogÚsymbolsÚexpÚtanÚsqrtÚSymbolÚLambdaÚsinÚNeÚ	PiecewiseÚfactorÚ
expand_logÚcancelÚdiffÚpiÚatanÚRational)Úgcdex_diophantineÚfrac_inÚ
as_poly_1tÚ
derivationÚsplitfactorÚsplitfactor_sqfÚcanonical_representationÚhermite_reduceÚpolynomial_reduceÚresidue_reduceÚresidue_reduce_to_basicÚintegrate_primitiveÚ%integrate_hyperexponential_polynomialÚintegrate_hyperexponentialÚ!integrate_hypertangent_polynomialÚintegrate_nonlinear_no_specialsÚinteger_powersÚDifferentialExtensionÚrisch_integrateÚDecrementLevelÚNonElementaryIntegralÚrecognize_log_derivativeÚrecognize_derivativeÚlaurent_series)Úraises)ÚxÚtÚnuÚzÚaÚyzt:3Úic                   C   s  t ttd dtd   dtd   dt  d ttd td  dt  d ttd d ttd  dt  d d ttd d	td   d
t  d d fksUJ t ttd dt  d	 ttd dt  d ttd tdtddtdt d tddfksJ d S )Né   é   é   é   é   é   é   é   é   é   é
   g;ą;ął?ÚQQŠÚdomaing;ą;ąłżgŘŘÍ?)r   r   r0   Š rE   rE   úB/usr/lib/python3/dist-packages/sympy/integrals/tests/test_risch.pyÚtest_gcdex_diophantine   s   0,˙Dţ:"˙rG   c                   C   s*  t ttd t t ttttt t ttttfksJ t td t t tttt t ttttfks9J t ttd t t tttd tftttt t ttdt t tfksbJ ttdd  t tddt  tdt   dt d  ttddttd tttd tfksJ d S )Nr=   c                   S   s   t td tt t tS )Nr=   )r   r0   r   r1   rE   rE   rE   rF   Ú<lambda>"   s    ztest_frac_in.<locals>.<lambda>r8   T)r   )r   r   r0   r1   r/   Ú
ValueErrorrE   rE   rE   rF   Útest_frac_in   s   ˙˙("˙2˙rJ   c                   C   sv  t dt t ttttdt  ttttdt  ttfv s J t dt dtd   tttdt dtd   tttdt dtd   ttfv sLJ t dtdd t  tttdtdd  t tttdtdd  t ttfv sxJ t dtdd t  t ttttdtdd  t  ttttdtdd  t  ttfv sŞJ t tjtttdttksšJ d S )Nr8   r9   r=   r   )r   r1   r3   r   r   r   ÚZerorE   rE   rE   rF   Útest_as_poly_1t'   s   $
˙4
˙4
˙<
˙"rL   c                  C   sD  t dtd  td  dtd  dtd   td   dtd  dtd   td   dt dtd   dtd   td   ddt  dtd   t  d dt  t} td	t dtt td  ddt  t  ddt   tgid
}t| |t dtd  td  dtd  dtd   td   dtd  dtd   td   ttdd dtd   dtd   td   dttdd  dtd   td   ddt  dtd   dtd   dt  t  ddtd   dt   tks÷J tt dt|t dtksJ tt tt||jksJ tt td dt t  ddt  dtd    t|t dtd  dt td   ddt  dtd   t  ddt  dtd    tddksaJ td	t dtt dt tt ttgid
}tt tt t t|t tt tt t  t tksJ tt tt t t|ddt dt t tksŽJ td	t dtgid
}tt tt|t dtksÉJ ttd td  |dddddt  td   ksĺJ td	t dtt ttgid
}ttd td  |dddt ddt  td   ksJ ttd |ddtks J d S )Nr7   r>   éü˙˙˙r9   éý˙˙˙r8   r?   r=   ÚDŠÚ	extensioniě˙˙˙r:   r@   é   r;   é   éű˙˙˙r<   é   rA   r   éţ˙˙˙úZZ(x)rC   TŠZcoefficientD)Zbasic)r   r0   r1   r(   r   r   ÚdÚt1ŠÚpÚDErE   rE   rF   Útest_derivation3   sR   T&˙˙˙˙˙@<˙,˙$ţ.ţý
ý 6X
˙*<
˙ 8< r^   c                  C   s  t dtd  td  dtd  dtd   td   dtd  dtd   td   dt dtd   dtd   td   ddt  dtd   t  d dt  td	d
} tdt dtt td  ddt  t  ddt   tgid}t| |t dtd  td  dtd  dtd   td   dtd  dtd   t  dtd   tddt td dt t  ddt  dtd    tddfksĚJ tt tt|t ttt dtfksŕJ t dtd  td  dtd  td   ttd   dtd  td   dtd  td   td  ttd   td  t}tdt dtt dt tgid}t||d	dt tt td  ttd   td  tt td  dtd  td   tfksaJ t||d	dt tt td  ttd   td  tdfft td  dtd  td   tdfffksJ tt dt|t dtt dtfks­J tt dt|t dtdffdfksÂJ d S )Nr7   r>   rM   r9   rN   r8   r?   r=   T)ZfieldrO   rP   éř˙˙˙rU   rW   rC   r:   rX   r   rE   )r   r0   r1   r(   r   r3   r   )r\   r]   ÚrrE   rE   rF   Útest_splitfactorL   s@   T&˙˙˙˙˙@<˙
˙˙4
ţ(~"L
˙X
˙*.ra   c               	   C   s  t dtdttdtd  tgid} tttt tttd t| tdtddtdtddtdtd	dftt t tddttd tffksJJ t dtdtttd d tgid} tttd
 td  td t  d tttd d d t| tdtddttd
 td  td t  d tddttd dtd   dtd   d tddftdtddtdtddffksżJ d S )NrO   r=   r8   rP   r   zZZ[x]rC   úQQ[x]ÚZZr>   r9   r:   r7   rB   )r(   r   r0   r1   r   Šr]   rE   rE   rF   Útest_canonical_representation^   s(   &˙˙˙˙&&˙4,˙ţţre   c               	   C   s  t dtdtttd d tgid} tttt tttd t| tt tddtttddftdtddtdtddftt tddtdtddffksPJ t dtdtttd  tt  dtd td    tgid} tttd td  ttd	   td td
   ttd d  td   td td  t  td d	  tttd td	  td td d  td   td  td	  td d	  t| ttd  d	 tddtd	td  dtd   d	 tddftdtd  td	  t dtd
  dt   tddtdtd  td  td	  dtd   tddfttt d tddtttddffks5J t dtdttdt tgid} tdd
t  td
  dt td   dt dtd   t  td  t}tttd  d	td  td   dtd
  td	   d	td	  td
   td td   t}t||| td
td  t d
t  tddtd
td	  dt td
   dtd  td   d
td
  t  tddftdtddtdtddftdtddtdtddffksôJ tttd  dt  d tddtt td  dt t  t tdd| td
tddttd tddftdtddtdtddftdtddtttddffksHJ tttd  td  ddtd
   td	  td
   dd
td	   td   dt t  t d
td   tddttd	 td  dtd  td
   d tdd| ttd
 t td	  d tddttd
 td
  t tddftdtddtdtddftdtddttd tddffksŰJ ttdd
t  td
  dt td   dt dtd   t  td  ttttd  d	td  td   dtd
  td	   d	td	  td
   td td   t| td
td  t d
t  tddtd
td	  dt td
   dtd  td   d
td
  t  tddftdtddtdtddftdtddtdtddffksJ d S )NrO   r=   r8   rP   rb   rC   r   r>   r7   r9   r:   úZZ(x,nu)rV   é˙˙˙˙rM   rW   é	   rN   )r(   r   r0   r1   r   r2   Šr]   r4   rY   rE   rE   rF   Útest_hermite_reducel   s   &ţ˙@hNţ<40˙"ý
ý"J^
 H˙ý
˙(ţţ
ýJ
˙˙
˙˙2ý>ţ
üH^ţ H˙ýýrj   c                  C   s   t dtdttdtd  tgid} ttdtt  td  t| tttttt tfks1J ttdt| tdttdtfksEJ d S )NrO   r=   r8   rP   r   )r(   r   r0   r1   r   rd   rE   rE   rF   Útest_polynomial_reduceĄ   s   &˙˙rk   c               	   C   s"  t dtdttdtgid} tdt}ttd td d d  t}ttd d t}d}t||||| tdtd  dtd   dt  d	 tttd
 td  dtd   dtd   t d ttdtd  dtd   tddtdtd  dtd
   d	td   tddgfksJ d S )NrO   r=   rP   é$   r8   rN   r9   r:   rU   r>   r7   rB   rC   )r(   r   r0   r1   r.   )r]   r4   rY   ÚFÚnrE   rE   rF   Útest_laurent_seriesŠ   s   
\N˙˙ro   c                  C   s  t dtdtgid} tdt}ttd td d d  t}t||| dks)J t dtdttdt tgid} tdt}ttd d t}t||| dksRJ tttt ttdt| dksdJ t dtdtttd d tgid} tttttdt| dksJ d S )NrO   r=   rP   rl   r8   FT)r(   r   r1   r-   r0   ri   rE   rE   rF   Útest_recognize_derivative´   s   
"
$&$rp   c                  C   sÖ  t dtd  dt t  dt  td t  t} t dt t ttd   t}tdt dtt ttgid}t| ||tdksBJ tdt dtt dt tgid}tt td tt tt t|dksgJ tt dtt td d t|dks{J tdt dtgid}tt dtt td d t|dksJ tt dtt td t t|dksŽJ tdt dtt td d tgid}tt dtt td d t|dksŐJ tt dtt td t t|dkséJ d S )Nr8   r7   rO   r=   rP   TF)r   r0   r1   r(   r,   r3   )r4   rY   r]   rE   rE   rF   Útest_recognize_log_derivativeÂ   s   2"((((&(,rq   c               	   C   sb  t dtd  t td  t} t td td t  t}tt dtt dt tgtgdd}t| ||tddt td tdd td	d
t ddt t  dtd   dtd   dtd  td   t tt  td  dtd  td   dt td   tdd
fgdfksJ t| ||tddt td tdd td	d
t tdt t  tfgdfksąJ tt dt tt td d t|tddt td d tdd
t dt t t dt  tdd
fgdfksçJ tt dt tt td d t|tdd}|t td d tdd
t tt tfgdfksJ t|d |ttdtt  tdtt  ks2J tdt dtt td  tt  dt	d td    tgid}tt dt	d  td  dtd   t dtd  t  tt td d td d  t|tt tt
j tdd
t td d td d  tdd
fgdfks˘J tdt dtt dtd  tgid}tt dt t d td  tt td dt t  d td  t|tt td tdd tt tt dt  tfgdfks÷J tdt dtt ttgid}tt ttt ttd t|tt td tdd
t ttd tfgdfks/J d S )Nr8   r9   r=   ŠrO   ZTfuncsrP   F)Úinvertr7   rW   rC   r:   zZZ(z, x)TrV   rB   zZZ(z,x)r   rg   rO   rf   )r   r1   r0   r(   r   r    r3   r   r!   r2   r   ZHalfr
   )r4   rY   r]   ZansrE   rE   rF   Útest_residue_reduceÓ   sZ   &P˙˙˙˙ţ˙6˙(<˙*48@: ˙,˙˙
ţ&(˙2
ţ (˙rt   c                  C   sj
  t ddt  td  dtd   td  dtd  t  d td  t} t dt}tt dtt dtd  tt tdtd   tgttttttgdd}t	| ||tdtt tt ttt dtd  dfksrJ t td td td   t t d t t} t	| ||ttt ttt ddfks J t tt} t dt}tt dtt dt t tgttttd gdd}t	| ||dt
ttd tdfksÚJ tt dtt ttgtgdd}t	| ||ttddfksúJ t d	td
  dtd   dtd   dtd   dtd   dt  d t} t d	td
  dtd   dtd   d t}t	| ||ddtt   dd	tdt    tdtdt   ddfksaJ tt dtt ttt tt tgttttttgdd}t	t dt td  tt dt|tdtt ddfks J tt dtt ttt t t tgtttttt gdd}t	t dtd dt td  dt t td  tt dtd td td  dt td  t t|dttt dtd ttd   ddfksJ tt dtt ttgtgdd}t	t td d t tt dt|ddt  td  tt d ddfksLJ t	t dt tt tt|tt  ddfksfJ t	t ttt td t|dt
tdtt  tdfksJ tt dtt dt tt dt t tgtttttd gdd}t	t dtd  dtd   d
td   t td  dt td  dt td
   dt td   dt td   dt td   tt  dtd   dtd
   dtd   dtd   dtd   dtd   t d td   dt td  dt td
   dt td   dt td   dt td   ttd   dt t  dtd   dtd   dtd
   dtd   dtd   dtd   d
td   t d td   dt td  dt td
   dt td   d
t td   dt td   dt td   tt  dtd   dtd   dtd   dtd
   dtd   dtd   dtd   td  dt  t  dt td   dt td
   dt td   dt td   ttd   dtd   dtd
   dtd   dtd   td  td  tt dtd  dtd   d
td   t td  dtd  dtd   dtd
   dtd   dtd   d
td   dtd   t td   dtd  dtd   dtd   dtd
   dtd   dtd   dtd   dtd   td   dtd  dtd   dtd   dtd   d
td
   dtd   td  dtd   t  dtd   dtd   d
td
   td  t|\}}}t|td tt tttd  dtd  d    ksJ ||ft
ttd ttd d  tdfks3J d S )Nr=   r8   r9   rr   rP   Tr   FrS   r:   rA   r>   r?   r7   rU   é   é#   é   rg   iĺ˙˙˙rh   é˘   é   rl   é   r;   iú˙˙˙é   é   r@   )r   rZ   r1   r(   r0   r	   r   r6   r   r$   r+   r   Út0r   )r4   rY   r]   ÚelemZnonelemÚbrE   rE   rF   Útest_integrate_hyperexponentialň   s¤  J
˙
˙
0˙.
˙


˙
˙"N.
>
˙ 
˙@"
˙˙˙6˙,
ţ""$
˙
˙
˙(
˙2V
˙
˙
˙
˙
˙
˙˙˙˙˙N
˙
˙
˙
˙
˙
˙
˙
ţ
ţţţţý.˙˙˙˙
˙
˙
˙
ţ
ţ
ţ
ţţţţűůřřř
ř
ř
ř
	÷
	÷	÷	÷	÷$	˙˙F
˙˙˙˙:
˙
˙
˙˙ţ"
˙
˙
˙˙
˙˙ý
ü
ü
űűű
ň@8r   c                  C   sî  t dtd  t dtd  t  dtd  t  dtd  td   dtd  td   d	td
  td   dtd  td   dtd  td   dtd  td   dtd  td   dtd  td   dtd  td   d	td  td   dtd  td   dtd  td   td td   td td   dtd  td   dtd  td   td  td
  dtd   dtd  t dtd
  td   dtd  td   dtd  td   dtd  td   dtd  td   dtd  td   td td   td   td  dtd  t dtd  t  dtd  t  dtd  td   dtd  td   d	td
  td   dtd  td   dtd  td   dtd  td   dtd  td   dtd  td   dtd  td   d	td  td   dtd  td   dtd  td   dtd  td   dtd  td   dtd  td   dtd  td   dtd   dtd
   dtd   dtd  t dtd
  td   dtd  td   dtd  td   dtd  td   dtd  td   dtd  td   td td   td   t  dtd  t dtd  t  ttd   td td   td  td  dtd  t dtd  td   dtd  td   td td   td    ttdd} tdt dtt dt tt dt t tgid}t| |tt tt td  dt dt  t  tt dt t td  td  tdfksĎJ tdt dtt ttgid}tt dt|tt dtt dtdfksőJ d S ) Niä˙˙˙rw   r:   rU   rh   r<   r8   r?   éT   rA   é   r9   é   r7   r>   é   r;   r_   é8   éF   é   é(   rV   rM   FŠÚexpandrO   r=   rP   Tr   )r   r0   r}   rZ   r3   r(   r#   r[   rE   rE   rF   Ú*test_integrate_hyperexponential_polynomial5  s  D˙˙˙˙ţţţţýýýýýüüüü
ü˙˙˙˙ţţţţüúB˙˙˙˙ţţţţýýýýüüü
ü
ü
ű6˙˙˙˙ţţűůů*˙˙˙6˙˙˙ňđ2
<˙˙ţ˙r   c                  C   s  t d\} }t| t t}t|j|j|tttt|  t|  t	t| dftdfddfks2J t| |t  t}t|j|j|tt|t t|  |t|   t	|t|  dftdfddfksfJ tt| t t}t|j|j|tt| t |  t	| dftdfddfksJ ttt| t  t}t|j|j|t| t d t| t  | d  t	| d dftd d dfddfksĆJ ttd t| t  t}t|j|j|ttd | d  d|  t  d t| t  | d  t	| d dftd d dfddfksJ ttt
 t t
}t|j|j|ttttt
 tt t	ttdft
dftdfks:J ttt
 t tdt
   t
}t|j|j|ttdtt t
 tt dtttt
  tt  dttd   t	dttd  dfdt
 dftdfksJ d S )Nza br   Tr=   r8   r9   )r   r(   r0   r$   ÚfaÚfdr   r   r   r   r5   r3   )r4   r   r]   rE   rE   rF   Ú1test_integrate_hyperexponential_returns_piecewiseT  sf   *˙
˙6˙
˙˙
˙:˙
˙@ţţ*˙˙˙˙˙
ýür   c                  C   sŽ   t d\} }}tdt  d| d  |dt  | dt  td| d  td  ks/J t| ||  | | d  |t| t|  t| | d  t|  ksUJ d S )Nza t sr8   r=   )r   r)   r   r   r   )r4   r1   ÚsrE   rE   rF   Útest_issue_13947r  s   .˙(˙r   c                  C   s  t tdttdt tgtgdd} tttttdt| ttt ddfks*J ttttttt| dtttt tdfksDJ t tdttdt ttdtd  tgtt	t
tt
d gdd} ttttttt| dttttdt  tdfksJ t tdttdt ttdtt  tgtt	t
ttt
gdd} ttttttt| dtttttt tdfksĆJ t tdttdt tgtgdd} tttd td	  d	td  t td   d	td  dt  t  td  t tttd td
  d
td  td	   dtd  td   d
td  t  td  t| dttd  tdttd  tdfksFJ d S )Nr=   rr   rP   rg   Tr   Fr8   r9   r7   r:   )r(   r   r0   r1   r   r"   r+   rZ   Út2r   r6   r}   rd   rE   rE   rF   Útest_integrate_primitivey  sT   
˙.4(
˙˙(
˙˙
˙4˙˙˙˙˙8˙˙˙ţ&ýr   c                  C   sč   t dtdtttd d tgid} tttd tt  d t| tttttd tfks1J t dtdttttd d  tgid} tttd t| tddt  td  ddt  td   ttddt  tfksrJ d S )NrO   r=   r8   rP   r>   r7   )r(   r   r0   r1   r%   r4   rd   rE   rE   rF   Ú&test_integrate_hypertangent_polynomial  s   &˙*>˙r   c                  C   s  t td td  ttd   td td   ttd d  td   td td  t  td d  tt td td  td td d  td   td  td  td d  t} }td}tt dtt td  tt  dtd td    tg|gdd	}t| ||td|td  td d   d d
td  ddtd   d|td     dfksśJ tt ttt dt|dksĆJ d S )Nr8   r>   r7   r9   r=   r:   Zphi_nurr   rP   rM   T)r   F)r   r0   r1   r2   r   r(   r&   r   )r4   rY   Úfr]   rE   rE   rF   Ú$test_integrate_nonlinear_no_specials  s.   J˙˙
˙˙L˙
*˙
˙
T˙˙r   c                   C   sx   t ttd td d ttdd gtd tdftd dfttdd dfgfdtd  dtd  dfgfgks:J d S )Nr8   r=   r9   r:   r7   )r'   r0   r   rE   rE   rE   rF   Útest_integer_powers§  s   $*ţr   c                   C   s  t ttttd  tjttt ttdttdtttttdt t tgtttgttttttttd gg g d˘d ttd gfksJJ t tttdt  tjttd t ttdttdttttgttgttttgg d dgd tgfksJ t ttttd  tjttd t ttdttdtttd tgttgttttd gg d dgd td gfksŔJ t ttttd  tttd   tjtdt t t ttdttdtttttdt t tgtttgttttttttd gg g d˘d ttd gfksJ t ttttd  tttd  d  tjtdt	j
t  t t ttdttdtttttdt t tgtttgttttttttd gg g d˘d ttd gfkssJ t ttttd  ttd td   tjttd t td  ttdttdtttd ttdt t tgtttgttttd ttttd gttd tttfgg d˘d td td gfksßJ t ttttd  ttd td  d  tjtttd d t td  ttdttdtttd ttdt t tgtttgttttd ttttd gttd tttfgg d˘d td td gfksQJ t ttttjttttdttdtttd tgttgttttd gttd tttfgd dgd td gfksJ t ttd tjttttdttdtttd tgttgttttd gg d dgd td gfksĘJ d S )Nr8   r=   ŠNr   r   r   r9   )r(   r   r0   Ú_important_attrsr   rZ   r}   r   r6   r   ZExp1r
   rE   rE   rE   rF   Útest_DifferentialExtension_exp­  s   $˙˙ţ˙0˙˙.*˙˙*,˙˙ţ
˙.*˙˙ţ
˙.(˙".ý
˙20˙˙ý
˙,:˙
˙,$˙˙r   c                   C   s~  t ttttd  tdtd  dt   tjtttd  ttd td  t  ttdttdttdt ttdtd  tddgtttgttttttttd gg g d˘d ttd gfkshJ t tt tt tjttt ttdttdttdt ttdt t tgtttgttttttt	tt gt	ttt tt fgg d˘d ttt gfks˝J d S )Nr=   r8   Fr   )Nr   r   ŠNr   r   )
r(   r   r0   r   r   r}   rZ   r   r6   r   rE   rE   rE   rF   Útest_DifferentialExtension_logÓ  s*   20˙&ü˙(˙˙ý˙r   c                   C   s˘  t ttt tjttt ttdttdttdt tttd t tgtttgttttttt	tt gt	ttt tt fgg d˘d ttt gfksSJ t ttt
 tjtt
t ttdttdttdt tgttgttttgt
tt ttt
 fgd dgd tgfksJ t ttttjttttdttdttdt tgttgttttgttd tttfgd dgd tgfksĎJ d S )Nr=   r   r   r8   )r(   r   r0   r   r   r}   rZ   r   r6   r   r5   r
   rE   rE   rE   rF   Ú!test_DifferentialExtension_symlogá  s0   ,˙˙˙&*ţ˙0,ţ˙,,ţ˙r   c                   C   s2  t tttt tddjttt ttdttdttdt ttttgtttgtt	tt	tt	tt	gg g d˘d ttgfksDJ t tttt tddjttt ttdttdtttttdt tgtttgtt	tt	tt	tt	gg g d˘d ttgfksJ t tt  ttd  tt  tt t  tddjt tt  ttd  tt  tt t  tddj  krtdt ttd   t tttttdttdt ttdt t tgtttgtt	tt	tt	ttt	 gtttt tt fgg d˘d ttt gfksJ  J d S )	Nr   ŠZhandle_firstr=   r   r   )Nr   r   r8   rg   )
r(   r   r0   r   r   r   r}   rZ   r   r6   rE   rE   rE   rF   Ú'test_DifferentialExtension_handle_firstń  s>   (˙"ţ˙$˙"ţ˙,˙,˙
ý$.6ýür   c                      s˛  t tttt tdd  jtttt ksJ  jtt ks#J  jtks*J  jg d˘ks3J  j	dks:J  j
dksAJ  jt  krQ j j
 ksTJ  J  jtdt t  kri j j
 kslJ  J tt fdd   Ą   j
d	ksJ  jt  kr j j
 ksJ  J  jttt  krŚ j j
 ksŠJ  J  j	dks°J   Ą   j
d
ksťJ  jt  krŃ j j
   krŃ jksÔJ  J  jtdt  krç j j
 ksęJ  J  j	dksńJ tt fdd   Ą    Ą   j
dks
J  jt  kr j j
 ksJ  J  jtdt t  kr6 j j
 ks9J  J  j	dksAJ   dĄdgksLJ   dĄdgksWJ d S )Nr   r   )Úbaser   Ú	primitiver    rg   r=   c                      ó      Ą S ŠN)Úincrement_levelrE   rd   rE   rF   rH     ó    z6test_DifferentialExtension_all_attrs.<locals>.<lambda>rV   rN   r   c                      rĄ   r˘   )Údecrement_levelrE   rd   rE   rF   rH     r¤   r   r8   )r(   r   r0   r   r   Znewfr}   rZ   ÚcasesÚcaseÚlevelr1   ÚTrY   r   rO   r/   rI   rĽ   rŁ   ÚindicesrE   rE   rd   rF   Ú$test_DifferentialExtension_all_attrs  s:   &0&,2,*4rŤ   c               
   C   s2  t tdd  tdtdttttgid} | jd d tdttttgttgd d d d fks/J | jtttks9J | jtks@J | jdksGJ | j	ddgksPJ | jtksWJ | j
dks^J ttdttttgd dgd tgd	d} | jd d tdttttgttgd d d dgd tgfksJ t td
d  d S )Nc                   S   s   t dttgidS )NrŠ   rP   )r(   r0   r1   rE   rE   rE   rF   rH   ,  s    z;test_DifferentialExtension_extension_flag.<locals>.<lambda>rO   r=   rP   rg   r   r   )rO   ZextsZextargsc                   S   s   t  S r˘   )r(   rE   rE   rE   rF   rH   ;  s    )r/   rI   r(   r   r0   r1   r   rY   r¨   rŚ   r§   rd   rE   rE   rF   Ú)test_DifferentialExtension_extension_flag+  s$    
˙
˙ 
˙rŹ   c                   C   sr  t tttt tjtttt tddtdtddtdtddtttddgttgtt	tt	gg d dgd tgfks>J t
tdd  t dt tjttttdttdtttdt tgttgtt	tt	td gtttd dt fgd dgd ttd gfksJ t ttttd	  tjtd
t ttd	ttdttd	t tgttgtt	tt	d	 gg d gg dgtd	 gf
td
t ttdttdttdt tgttgtt	tt	gg d dgd tgffv sďJ t tjtjtdttdttdtgtgg g d gd gfksJ t ttt tĄtjttttdttdtgtgg g d gd gfks7J d S )Nz
ZZ[sin(y)]rC   r=   rc   r   c                   S   s   t tttS r˘   )r(   r   r0   rE   rE   rE   rF   rH   D  s    z1test_DifferentialExtension_misc.<locals>.<lambda>rA   r8   r9   r   r   )r(   r   r5   r   r0   r   r   r}   r   r6   r/   ÚNotImplementedErrorr   r   rK   r	   r   ZrewriterE   rE   rE   rF   Útest_DifferentialExtension_misc>  s6     ţ˙04ţ˙0&˙0˙
ý,
˙,˙rŽ   c                  C   sN  dt t d dt dt  dt td   dt t  d  t dt td  dt   } t| tjtddt  t ttddt  dtd   dtd   ttdtttttdd	t  dtd    ddt  td   t td
dgtttgttt tttt dtd  dt  gg g d˘d tdtd  dt  gfksĽJ d S )Nl   ˝Fś3 iëźhi ar9   i ?#r8   r=   rA   rR   zZZ(t0)rC   r   )	r   r0   r(   r   r   r}   rZ   r   r6   )r   rE   rE   rF   Ú$test_DifferentialExtension_RothsteinT  s>   ˙
˙˙˙
˙
˙
˙˙4˙˙˙,ű˙rŻ   c                   @   s   e Zd ZdZdS )Ú_TestingExceptionz"Dummy Exception class for testing.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rE   rE   rE   rF   r°   a  s    r°   c               	   C   s<  t ttttd  t} | jdksJ | jtksJ | jtt	t	d  tks)J | j
dks0J t| y | jdks<J | jt	ksCJ | jtt	t	ksMJ | j
dksTJ t| ' | jdks`J | jtksgJ | jtdtksqJ | j
dksxJ W d    n1 sw   Y  | jdksJ | jt	ksJ | jtt	t	ksJ | j
dksŚJ W d    n1 s°w   Y  | jdksźJ | jtksĂJ | jtt	t	d  tksŃJ | j
dksŘJ zt|  t1 săw   Y  W td tyő   Y nw | jdksýJ | jtksJ | jtt	t	d  tksJ | j
dksJ d S )	Nr=   rg   r    rV   r   rN   r   zDid not raise.)r(   r0   r   r   r¨   r1   rZ   rY   r   r}   r§   r*   r°   ÚAssertionErrorrd   rE   rE   rF   Útest_DecrementLevelf  sJ   

üń
˙ý˙rś   c                  C   s2  t ttt tttt ksJ t tttddttt  d tt t d  ks.J t ddtd   td  dtd  tdtd    td ttd  dtd  ttd   ttd   ttttd  tttd dtd    ksJ t dtdksJ tttt d } t | t}|ttttt  d  ttd t ttt  t ksˇJ tt	|t|  dksÄJ tdt
 d tdt
 d  t
 tddt
  d tddt
  d  t
  }t |t
}|tdt
 tddt
   d tdt
 tddt
   d  ttt t
d  dt
 tdt
   tt  dt
d  dt
   t
 ks9J ttt	|t
| dd	dksKJ t ttt ttd tt d td d  ksgJ t ttt
 ttttt
  tt
  ksJ t tttttttt td  ksJ d S )
NT)Zrewrite_complexr8   r=   r7   r9   r   rg   )Zforce)r)   r}   r   r0   r   r   r+   r   r   r   r5   r   r   r
   )Ze1Zans1Ze2Zans2rE   rE   rF   Útest_risch_integrate  s.   ":46˙˙*ţ
@P
@D˙$804rˇ   c                   C   sV   t dtt dtdt   tdt  tdtdt  dtdt   ks)J d S )NiÄ˙˙˙g3333333@r7   g333333ŔrU   g      (@r>   )r)   r   r0   rE   rE   rE   rF   Útest_risch_integrate_floatş  s   Vr¸   c                   C   sh   t tttd ttsJ t ttt tt ttsJ t ttt t t tttĄts2J d S )Nr8   )Ú
isinstancer)   r   r0   r+   r   r}   ZsubsrE   rE   rE   rF   Útest_NonElementaryIntegralž  s    ,rş   c                  C   s6   t tt t} | ttt tksJ t| tsJ d S r˘   )r)   r0   r+   rš   )r4   rE   rE   rF   Útest_xtothexĹ  s   rť   c                  C   s"   t ttt } }| |ksJ d S r˘   )r(   r   r0   )ZDE1ZDE2rE   rE   rF   Ú#test_DifferentialExtension_equalityË  s   rź   c                  C   sN   t tdtd  tttd d  t} t| dksJ t| dks%J d S )Nr8   r=   ao  DifferentialExtension(dict([('f', exp(2*x**2) + log(exp(x**2) + 1)), ('x', x), ('T', [x, t0, t1]), ('D', [Poly(1, x, domain='ZZ'), Poly(2*x*t0, t0, domain='ZZ[x]'), Poly(2*t0*x/(t0 + 1), t1, domain='ZZ(x,t0)')]), ('fa', Poly(t1 + t0**2, t1, domain='ZZ[t0]')), ('fd', Poly(1, t1, domain='ZZ')), ('Tfuncs', [Lambda(i, exp(i**2)), Lambda(i, log(t0 + 1))]), ('backsubs', []), ('exts', [None, 'exp', 'log']), ('extargs', [None, x**2, t0 + 1]), ('cases', ['base', 'exp', 'primitive']), ('case', 'primitive'), ('t', t1), ('d', Poly(2*t0*x/(t0 + 1), t1, domain='ZZ(x,t0)')), ('newf', t0**2 + t1), ('level', -1), ('dummy', False)]))zËDifferentialExtension({fa=Poly(t1 + t0**2, t1, domain='ZZ[t0]'), fd=Poly(1, t1, domain='ZZ'), D=[Poly(1, x, domain='ZZ'), Poly(2*x*t0, t0, domain='ZZ[x]'), Poly(2*t0*x/(t0 + 1), t1, domain='ZZ(x,t0)')]}))r(   r   r0   r   ÚreprÚstrrd   rE   rE   rF   Ú#test_DifferentialExtension_printingĐ  s   *	rż   N)br´   Zsympyr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Zsympy.integrals.rischr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   Zsympy.testing.pytestr/   Z	sympy.abcr0   r1   r2   r3   r4   r5   r}   rZ   r   r6   rG   rJ   rL   r^   ra   re   rj   rk   ro   rp   rq   rt   r   r   r   r   r   r   r   r   r   r   r   r   rŤ   rŹ   rŽ   rŻ   Ú	Exceptionr°   rś   rˇ   r¸   rş   rť   rź   rż   rE   rE   rE   rF   Ú<module>   sV    \h 5C	&$,(