U
    «Ì0eš,  ã                   @   sŠ  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
 d dlmZ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mZ d d
lmZ d dlmZmZmZmZ d dl m!Z!m"Z"m#Z# d dl$m%Z%m&Z& edƒZ'eddd\Z(Z)edƒ\Z*Z+Z,dd„ Z-dd„ Z.dd„ Z/e#dd„ ƒZ0dd„ Z1dd„ Z2dd „ Z3d!d"„ Z4d#d$„ Z5d%d&„ Z6d'd(„ Z7d)d*„ Z8e"d+d,„ ƒZ9d-d.„ Z:d/d0„ Z;d1d2„ Z<d3d4„ Z=d5S )6é    )ÚFunctionÚLambdaÚexpand)ÚIÚRational)ÚEq)ÚS)ÚSymbolÚsymbols)ÚrfÚbinomialÚ	factorial)ÚAbs)Úsqrt)ÚcosÚsin)Úfactor)ÚrsolveÚrsolve_hyperÚrsolve_polyÚrsolve_ratio)ÚraisesÚslowÚXFAIL)ÚaÚbÚyzn,kT)ÚintegerzC0,C1,C2c                   C   s0  t dddgdtƒdkst‚t dddgdtƒdks4t‚t dtd gttƒdksPt‚t ddgttƒttd t d  ksxt‚t t d tgdtƒtt d ksžt‚t dt d dgdt d tƒdksÆt‚t ddgtd td  tƒttd d  td d  td d	  td	 d	  dtd  d  ks,t‚d S )
Néÿÿÿÿé   r   é   éüÿÿÿé   é   é   é   )r   ÚnÚAssertionErrorÚC0© r)   r)   úC/tmp/pip-unpacked-wheel-_6tpq7m6/sympy/solvers/tests/test_recurr.pyÚtest_rsolve_poly   s    (&(Bÿr+   c                  C   s´   t dtd  td  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   d
t  d gdtƒ} | tdt d  td d  d ks°t‚d S )Néþÿÿÿr$   r    r   r%   é   é   é	   é   é   é   r   )r   r&   r(   r'   )Zsolutionr)   r)   r*   Útest_rsolve_ratio!   s    :" "ÿ ÿr3   c                   C   sÂ  t dddgdtƒttjtjtdƒ  t  ttjtjtdƒ  t   ttjtjtdƒ  t  ttjtjtdƒ  t   fks†t‚t td d dt d dgdtƒtttdƒtƒ tttdƒ tƒ  tttdƒtƒ tttdƒ tƒ  fksøt‚t td t	 dt d dgdtƒtttt	ƒtƒ tttt	ƒ tƒ  tttt	ƒtƒ tttt	ƒ tƒ  fkslt‚t dt td  td  dt  d td gdtƒtt
tƒ tdt   ks¾t‚t td dt d  dtd  d	t  d
  td gdtƒdkst‚t t d ddgdtƒdks&t‚t ddgttƒ ¡ ttd d  td  ksXt‚t ddgdt tƒ ¡ ttd d  td  ksŽt‚t ddgdttd   tƒ ¡ ttd  t ksÄt‚t t dgdtƒ ¡ ttt  ksìt‚t t ddgdtƒ ¡ dt t ttd   tttd    ks2t‚t dddgdtƒ ¡ ttddƒtdƒt d  t  ttddƒtdƒt d  t   ks’t‚t ddt t dt  dgdtƒdks¾t‚d S )Nr   r   r   r#   r    r,   r$   é   é3   é'   )r   r&   r(   r   ÚHalfr   ÚC1r'   r   Úkr   r   r   r   r   r)   r)   r)   r*   Útest_rsolve_hyper'   sH    66þ
 $$þ
 $$þ*  ÿÿ
2  ÿÿ
"266(FBÿ
r:   c                   C   s"   t t td gttƒd k	st‚d S )Nr    )r   r&   r'   r)   r)   r)   r*   Útest_rsolve_ratio_missedO   s    r;   c                    s    t ‡ ‡fdd„ttˆ ƒƒD ƒƒS )z9Compute RHS of recurrence in f(n) with coefficients in c.c                 3   s&   | ]}ˆ | ˆ  tt| ¡ V  qd S )N)Úsubsr&   )Ú.0Úi©ÚcÚfr)   r*   Ú	<genexpr>X   s     z"recurrence_term.<locals>.<genexpr>)ÚsumÚrangeÚlenr?   r)   r?   r*   Úrecurrence_termV   s    rF   c               
   C   s  t t d t d t d t d t t d  dt  dt d   dt d   dt d   dt d   g} d	dgd	d
dgd
ddd
dgt  dgt d t  d dgg}| D ]z}|D ]p}t||ƒ}| t ¡rÎt||t ƒ|ksÎt‚| t ¡r¢t|ƒdkr¢t||t ƒ t	t
dƒdddgƒ¡ ¡ |ks¢t‚q¢qšdS )zSome bulk-generated tests.r   r    r$   r"   é   é4   é   r#   r,   r   zC:3r   N)r&   rF   Zis_polynomialr   r'   Zis_hypergeometricrE   r   r<   Úzipr
   r   )ÚfuncsZcoeffsÚpr@   Úqr)   r)   r*   Útest_rsolve_bulk[   s*    8ÿ
ÿ
ÿ(ÿÿÿ

rN   c                   C   s@   t td t d dgttd t d  t d tƒtks<t‚d S )Nr    rI   r   )r   r&   r'   r)   r)   r)   r*   Útest_rsolve_0_sol_homogeneousl   s    rO   c               	   C   sä	  t td ƒt td ƒ t tƒ } tdƒtjtjtdƒ  t  tdƒtjtjtdƒ  t   }t| t tƒƒttjtjtdƒ  t  ttjtjtdƒ  t   ttjtjtdƒ  t  ttjtjtdƒ  t   fksât‚t| t tƒddgƒ|ksþt‚t| t tƒdddœƒ|kst‚t| t tƒt dƒdt dƒdiƒ|ksHt‚tt tƒt td ƒ t td ƒ t tƒddgƒ|ks‚t‚tt	t tƒt td ƒt td ƒ ƒt tƒddgƒ|ks¾t‚|  
t ttt| t tƒƒ 
tt¡ƒ¡ ¡ dksðt‚td t td ƒ td dt  d t td ƒ  dt td  t tƒ  } tttƒ tdt   }dttƒ ddt   }t| t tƒƒ|ks„t‚t| t tƒg ƒ|ksžt‚t| t tƒi ƒ|ks¸t‚t| t tƒddgƒ|ksÖt‚t| t tƒdddœƒ|ksöt‚t| t tƒt dƒdt dƒdiƒ|ks t‚|  
t ttt| t tƒƒ 
tt¡ƒ¡ ¡ dksRt‚t tƒt td ƒ d } t| t tƒt dƒdiƒdt kst‚t| t tƒt dƒdiƒdt d ksºt‚t| t tƒt dƒdt dƒdiƒd ksät‚|  
t ttt| t tƒƒ 
tt¡ƒ¡ ¡ dkst‚dt td ƒ t tƒ d } t| t tƒt dƒdiƒdt  d tj ksdt‚t| t tƒt dƒdiƒdt d tj ks”t‚t| t tƒt dƒdiƒddt  d tj ksÈt‚|  
t ttt| t tƒƒ 
tt¡ƒ¡ ¡ dksút‚t tƒdt t td ƒ  } t| t tƒƒtttƒ ks6t‚|  
t ttt| t tƒƒ 
tt¡ƒ¡ ¡ dksht‚t tƒdt t td ƒ  d } t| t tƒƒd ks t‚dt td ƒ dt t tƒ t  } t| t tƒt dƒdiƒdtd  t ksòt‚t| t tƒt dƒdiƒdtd  t d ks$t‚t| t tƒt dƒdiƒdtd  t d ksVt‚|  
t ttt| t tƒƒ 
tt¡ƒ¡ ¡ dksˆt‚td td  t td ƒ td td  t tƒ  } t| t tƒt dƒdt d	ƒd
iƒttd  td  ksöt‚t| t tƒt dƒdt d	ƒdiƒt td  td  dt  ks:t‚|  
t ttt| t tƒƒ 
tt¡ƒ¡ ¡ dkslt‚tt	t td ƒtt tƒ ƒt tƒt dƒtiƒ ¡ tt ks¬t‚tt tƒtt td ƒ  t tƒt dƒttƒtt  t dƒttt  iƒ ¡ ttd d  tttƒ t   ks t‚dtd  dt  d t td ƒ d	td  dt  d t tƒ  } t| t tƒt dƒtdt d dƒiƒ}ddt  t dt d d  dt d  d }tt|ddƒ|ksÔt‚tt tƒtt td ƒt td ƒ  d  t tƒƒ}t|ƒdk	st‚ttd t tƒ t tƒƒd k	s<t‚ttd t tƒ td t td ƒ  td t td ƒ  t tƒƒd k	sˆt‚tt tƒt td ƒ dt  dt  t tƒƒdt t dt d  dt d	  k	sàt‚d S )Nr    r   r#   r   )r   r   r$   éýÿÿÿr%   r"   é   ièÿÿÿr   iðÿÿÿé    rI   r/   T)Úfuncz@C0*((-sqrt(1 - a**2) - 1)/a)**n + C1*((sqrt(1 - a**2) - 1)/a)**n)r   r&   r   r   r7   r   r(   r8   r'   r   r<   r   r9   Zsimplifyr   r   r   r   r   r   Ústr)rA   ÚhÚgZynÚsolr)   r)   r*   Útest_rsolver   sŽ     ÿ66þ
 *:<2L *2&**22042 2 $.2224:  ÿÿ
2@&ÿ þ
D&02$@ÿ
rX   c                      sl   t dƒ‰ ttdd„ ƒ tt‡ fdd„ƒ tt‡ fdd„ƒ ttdd„ ƒ tt‡ fdd„ƒ ttdd„ ƒ d S )	NÚxc                   S   s   t ttƒttd ƒ ttƒƒS ©Nr   )r   r   r&   r9   r)   r)   r)   r*   Ú<lambda>Ñ   ó    z$test_rsolve_raises.<locals>.<lambda>c                      s   t ttƒttd ƒ ˆ tƒƒS rZ   ©r   r   r&   r)   ©rY   r)   r*   r[   Ò   r\   c                      s   t ttƒˆ td ƒ ttƒƒS rZ   r]   r)   r^   r)   r*   r[   Ó   r\   c                   S   s&   t ttƒttƒttd ƒ  ttƒƒS rZ   )r   r   r&   r   r)   r)   r)   r*   r[   Ô   r\   c                      s(   t ttƒttd ƒ ttƒˆ dƒdiƒS )Nr   r   r]   r)   r^   r)   r*   r[   Õ   r\   c                   S   s.   t ttƒttd ƒ dt  ttƒ ttƒƒS )Nr   r    )r   r   r&   r   r)   r)   r)   r*   r[   Ö   r\   )r   r   Ú
ValueErrorr)   r)   r^   r*   Útest_rsolve_raisesÏ   s    r`   c                  C   s’   t td ƒt td ƒ t tƒd  } t| t tƒƒdt d  t t dt  t  ksZt‚t| t tƒt dƒdt dƒdiƒddt  t ksŽt‚d S )Nr    r   r"   r   )r   r&   r   r8   r(   r'   ©rA   r)   r)   r*   Útest_issue_6844Ù   s    $6rb   c               	   C   s®   t ddd} t ddd}ttƒd|  t|ƒ ttd ƒ  | d ttd ƒ  }t|ttƒƒt| t|ƒttt|ƒƒ   t  t	| t|ƒttt|ƒƒ   t   ksªt
‚d S )NÚrT)ZpositiveÚtheta)Úrealr    r   )r	   r   r&   r   r   r(   r   r   r   r8   r'   )rc   rd   rA   r)   r)   r*   Útest_issue_18751ß   s    8Fÿrf   c                	   C   s’  t ttd ƒttd ƒ ttd ƒ ttƒ ttƒƒdt t t tt  ksRt‚t ttd ƒdttd ƒ  dttd ƒ  ttƒ ttƒƒ ¡ dt t dt t t  dt t td   ksÈt‚t ttƒdttd ƒ  dttd ƒ  dttd ƒ  ttƒdddgƒddt  t d ks,t‚t ttd ƒdttd ƒ  dttƒ  ttƒtdƒdtdƒdtdƒd	iƒd	t dt  ksŽt‚d S )
Nr$   r    r   r   r#   r"   r2   r   r,   )r   r   r&   r8   r(   ÚC2r'   r   r)   r)   r)   r*   Útest_constant_namingç   s    Rvdrh   c                  C   sž   t 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
 ƒ  dt td ƒ  t td ƒ } t| t tƒƒd k	sšt‚d S )Né   r   i  r    iD  r$   i  r"   r#   r%   é   r2   )r   r&   r   r'   ra   r)   r)   r*   Útest_issue_15751ñ   s    „rk   c               
   C   sP  dt tƒ dt td ƒ  dt td ƒ  dt td ƒ  } t| t tƒƒ}tdd	tdƒd   d
 ddtdƒt  ddtdƒ  tdƒd    dtdƒt   ddtdƒ  tdƒd   d  dtdƒt  ddtdƒ  tdƒd    t  tdd	tdƒd   d
 ddtdƒt  ddtdƒ  tdƒd    dtdƒt   ddtdƒ  tdƒd   d  dtdƒt  ddtdƒ  tdƒd    t   tdd	tdƒd   d
ddtdƒ  tdƒd    tdƒd  ddtdƒ  tdƒd  d  t   }||kst	‚| 
tdtdtdtdi¡ ¡ }t|d ƒdk sLt	‚d S )Niöÿÿÿr"   r   r%   r    é.   r$   éV   r.   éE   iôÿÿÿr   iln iÜ  iÍ#  i‰^  éý   i  iÕÿÿÿé   éŠ   gYÈB²À?g‚vIhÂ%<=)r   r&   r   r(   r   r   r   r8   rg   r'   r<   ZevalfÚabs)rA   rW   ÚexpectedÚer)   r)   r*   Útest_issue_17990÷   s`    <*
ÿ
ÿÿ
ÿÿþ*þý,ÿ
ÿÿ
ÿÿþ*þýý4
ÿÿÿúru   c               	   C   s   t dƒ} | td ƒ| td ƒ | td ƒ | tƒ }t|| tƒƒdt t t tt  ks^t‚| td ƒd| td ƒ  d| td ƒ  | tƒ }t|| tƒƒdt t dtd  t t  dtd  t td   ksÜt‚t| tƒd| td ƒ  d| td ƒ  d| td ƒ  | tƒ| dƒd| dƒd| dƒd	iƒddt  t d ksRt‚t| tƒd| td ƒ  t | tƒ| dƒdiƒddt  t d ksœt‚d S )
Nr   r$   r    r   r   r#   r"   r   r2   )r   r&   r   r8   r(   rg   r'   )r   ÚeqZeq2r)   r)   r*   Útest_issue_8697  s    ,*46ÿ8 ÿÿ
rw   c                  C   sò   t tƒt td ƒ dt td ƒ  dt  } t| t tƒƒdt t dt t  t tddƒ ksdt‚t| t tƒt dƒdt dƒdiƒdt  d ddt   t tddƒ ks°t‚tdt tƒ t td ƒ t d t tƒƒdt t t ksît‚d S )Nr   r    r   r#   r   r,   )r   r&   r   r(   r8   r   r'   ra   r)   r)   r*   Útest_diofantissue_294  s    ,86ÿÿ
rx   c                  C   sú  t dƒ} tt| tƒd| td ƒ t ƒ| tƒƒdt t t d ksHt‚tt| td ƒd| tƒ td  d ƒ| tƒƒdt t td  dt  d ksœt‚tt| td ƒd| tƒ td  d ƒ| tƒ| dƒdiƒddt  d td  dt  d ksþt‚tt| tƒd| td ƒ dtd   ƒ| tƒƒdt t dtd   dt  d	 ksXt‚tt| tƒd| td ƒ td  ƒ| tƒƒdt t td  dt  d
 ksªt‚tt| tƒd| td ƒ t ƒ| tƒ| dƒdiƒddt  t d ksöt‚d S )NrA   r    r   r"   r   rj   r$   rI   r.   r%   )r   r   r   r&   r(   r'   ra   r)   r)   r*   Útest_issue_15553   s    @TbZRry   N)>Zsympy.core.functionr   r   r   Zsympy.core.numbersr   r   Zsympy.core.relationalr   Zsympy.core.singletonr   Zsympy.core.symbolr	   r
   Z(sympy.functions.combinatorial.factorialsr   r   r   Z$sympy.functions.elementary.complexesr   Z(sympy.functions.elementary.miscellaneousr   Z(sympy.functions.elementary.trigonometricr   r   Zsympy.polys.polytoolsr   Zsympy.solvers.recurrr   r   r   r   Zsympy.testing.pytestr   r   r   Z	sympy.abcr   r   r   r&   r9   r(   r8   rg   r+   r3   r:   r;   rF   rN   rO   rX   r`   rb   rf   rh   rk   ru   rw   rx   ry   r)   r)   r)   r*   Ú<module>   sD   (
]



