o
    à8Va½#  ã                   @   s  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 d dlmZmZmZmZ d dl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%dd„ Z&dd„ Z'dd„ Z(dd„ Z)dd„ Z*dd„ Z+dd„ Z,edd„ ƒZ-d d!„ Z.d"S )#é    )ÚEqÚfactorÚ	factorialÚFunctionÚLambdaÚrfÚSÚsqrtÚsymbolsÚIÚexpandÚbinomialÚRationalÚSymbolÚcosÚsinÚAbs)ÚrsolveÚrsolve_hyperÚrsolve_polyÚrsolve_ratio)ÚraisesÚslow)ÚaÚbÚyzn,kT)ZintegerzC0,C1,C2c                   C   s*  t g d¢dtƒdksJ ‚t g d¢dtƒdksJ ‚t dtd gttƒdks&J ‚t ddgttƒttd t d  ks:J ‚t t d tgdtƒtt d ksMJ ‚t dt d dgdt d tƒdksaJ ‚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“J ‚d S )N©éÿÿÿÿr   é   r   r   r   é   éüÿÿÿé   é   é   é   )r   ÚnÚC0ÚC1© r(   r(   úA/usr/lib/python3/dist-packages/sympy/solvers/tests/test_recurr.pyÚtest_rsolve_poly   s   (&(Bÿr*   c               
   C   s6  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 tjtddt   dtd    tjtddt   dtd    tjtddt   dtd    tjtddt   dtd    fv s™J ‚d S )Néþÿÿÿr#   r   r   r$   é   é   é	   é   é   é   r   éýÿÿÿr   )r   r%   r'   r   ÚHalfÚC2)Zsolutionr(   r(   r)   Útest_rsolve_ratio   s   :Dÿÿ    ûr5   c                   C   s¸  t g d¢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v sBJ ‚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v s{J ‚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v s´J ‚t dt td  td  dt  d td gdtƒtt	tƒ tdt   ksÜJ ‚t td dt d  dtd  d	t  d
  td gdtƒd ksþJ ‚t t d ddgdtƒd ksJ ‚t ddgttƒ 
¡ ttd d  td  ks(J ‚t ddgdt tƒ 
¡ ttd d  td  ksCJ ‚t ddgdttd   tƒ 
¡ ttd  t ks^J ‚t t dgdtƒ 
¡ ttt  ksrJ ‚t t ddgdtƒ 
¡ dt t ttd   tttd    ks•J ‚t g d¢dtƒ 
¡ ttddƒtdƒt d  t  ttddƒtdƒt d  t   ksÄJ ‚t ddt t dt  dgdtƒd u sÚJ ‚d S )Nr   r   r"   r   r+   r   r#   é   é3   é'   r   )r   r   r   )r   r%   r&   r   r3   r	   r'   r   Úkr   r   r   r   r   r(   r(   r(   r)   Útest_rsolve_hyper&   s@   66
þ $$
þ $$
þ.ÿÿ6ÿÿ"266(FB
ÿ0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>P   s   €& z"recurrence_term.<locals>.<genexpr>)ÚsumÚrangeÚlenr>   r(   r>   r)   Úrecurrence_termN   s    rE   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g d
¢g d¢t  dgt d t  d dgg}| D ]}|D ]}t||ƒ}| t ¡rct||t ƒ|kscJ ‚qMqIdS )zSome bulk-generated tests.r   r   r#   r!   é   é4   é   r"   r+   )r+   r   r   )r   r   r   r   r   N)r%   rE   Zis_polynomialr   )ZfuncsZcoeffsÚpr?   Úqr(   r(   r)   Útest_rsolve_bulkS   s,   8ÿ
ÿ
ÿ ÿÿÿ

€ýþrK   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v sqJ ‚t| t tƒddgƒ|ksJ ‚t| t tƒdddœƒ|ksŽJ ‚t| t tƒt dƒdt dƒdiƒ|ks¢J ‚tt tƒt td ƒ t td ƒ t tƒddgƒ|ks¾J ‚ttt tƒt td ƒt td ƒ ƒt tƒddgƒ|ksÛJ ‚|  	t t
tt| t tƒƒ 	tt¡ƒ¡ ¡ dksóJ ‚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=J ‚t| t tƒg ƒ|ksJJ ‚t| t tƒi ƒ|ksWJ ‚t| t tƒddgƒ|ksfJ ‚t| t tƒdddœƒ|ksvJ ‚t| t tƒt dƒdt dƒdiƒ|ks‹J ‚|  	t t
tt| t tƒƒ 	tt¡ƒ¡ ¡ dks¤J ‚t tƒt td ƒ d } t| t tƒt dƒdiƒdt ksÃJ ‚t| t tƒt dƒdiƒdt d ksØJ ‚t| t tƒt dƒdt dƒdiƒd u síJ ‚|  	t t
tt| t tƒƒ 	tt¡ƒ¡ ¡ dksJ ‚dt td ƒ t tƒ d } t| t tƒt dƒdiƒdt  d tj ks-J ‚t| t tƒt dƒdiƒdt d tj ksEJ ‚t| t tƒt dƒdiƒddt  d tj ks_J ‚|  	t t
tt| t tƒƒ 	tt¡ƒ¡ ¡ dksxJ ‚t tƒdt t td ƒ  } t| t tƒƒtttƒ ks–J ‚|  	t t
tt| t tƒƒ 	tt¡ƒ¡ ¡ dks¯J ‚t tƒdt t td ƒ  d } t| t tƒƒd u sËJ ‚dt td ƒ dt t tƒ t  } t| t tƒt dƒdiƒdtd  t ksôJ ‚t| t tƒt dƒdiƒdtd  t d ksJ ‚t| t tƒt dƒdiƒdtd  t d ks&J ‚|  	t t
tt| t tƒƒ 	tt¡ƒ¡ ¡ dks?J ‚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svJ ‚t| t tƒt dƒdt d	ƒdiƒt td  td  dt  ks˜J ‚|  	t t
tt| t tƒƒ 	tt¡ƒ¡ ¡ dks±J ‚ttt td ƒtt tƒ ƒt tƒt dƒtiƒ ¡ tt ksÑJ ‚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  ks	J ‚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scJ ‚tt tƒtt td ƒt td ƒ  d  t tƒƒtttd  d ƒd t t  tttd  d ƒ d t t     ¡ dks¦J ‚ttd t tƒ t tƒƒd u s¸J ‚ttd t tƒ td t td ƒ  td t td ƒ  t tƒƒd u sÞJ ‚tt tƒt td ƒ dt  dt  t tƒƒdt t dt d  dt d	  ks
J ‚d S )Nr   r   r"   r   )r   r   r#   r2   r$   r!   é   ièÿÿÿr   iðÿÿÿé    rH   r.   T)Úfunc)r   r%   r	   r   r3   r   r&   r'   r   r;   r   r9   Zsimplifyr   r   r   r   r   r   )r@   ÚhÚgZynÚsolr(   r(   r)   Útest_rsolved   s–    ÿ66
þ(8:0L *2&**22042 2 $.2224:ÿ
ÿ2@&ÿ
þD&00 "ÿÿ
þ$@
ÿ\rR   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 rT   ©r   r   r%   r(   ©rS   r(   r)   rU   Å   rV   c                      s   t ttƒˆ td ƒ ttƒƒS rT   rW   r(   rX   r(   r)   rU   Æ   rV   c                   S   s&   t ttƒttƒttd ƒ  ttƒƒS rT   )r   r   r%   r	   r(   r(   r(   r)   rU   Ç   s   & c                      s(   t ttƒttd ƒ ttƒˆ dƒdiƒS )Nr   r   rW   r(   rX   r(   r)   rU   È   s   ( 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)   rU   É   s   . )r   r   Ú
ValueErrorr(   r(   rX   r)   Útest_rsolve_raisesÂ   s   rZ   c                  C   s†   t td ƒt td ƒ t tƒd  } t| t tƒƒdt  ttt   ks&J ‚t| t tƒt dƒdt dƒdiƒddt   t ksAJ ‚d S )Nr   r   r!   r   )r   r%   r   r&   r'   ©r@   r(   r(   r)   Útest_issue_6844Ì   s   $(:r\   c               	   C   s°   t d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sVJ ‚d S )NÚrT)ÚrealZpositiveÚtheta)r^   r   r   )
r   r   r%   r   r   r&   r   r   r   r'   )r]   r_   r@   r(   r(   r)   Útest_issue_18751Ò   s   8Fÿr`   c                	   C   sŒ  t ttd ƒttd ƒ ttd ƒ ttƒ ttƒƒdt t t tt  ks)J ‚t ttd ƒdttd ƒ  dttd ƒ  ttƒ ttƒƒ ¡ tdt  dt t t  dt t td   ksdJ ‚t ttƒdttd ƒ  dttd ƒ  dttd ƒ  ttƒg d¢ƒddt  t d ks”J ‚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ÄJ ‚d S )Nr#   r   r   r   r"   r!   )r   r#   r1   r   r1   r+   )r   r   r%   r&   r'   r4   r   r(   r(   r(   r)   Útest_constant_namingÙ   s   Rv`dra   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 usMJ ‚d S )Né   r   i  r   iD  r#   i  r!   r"   r$   é   r1   )r   r%   r   r[   r(   r(   r)   Útest_issue_15751â   s   „rd   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J ‚| 	tdtdtdtdi¡ 
¡ }t|d ƒdk s&J ‚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   r'   r4   r;   ZevalfÚabs)r@   rQ   ZexpectedÚer(   r(   r)   Útest_issue_17990è   s`   <*
ÿ
ÿÿ
ÿÿþ*þý,ÿ
ÿÿ
ÿÿþ*þýý4
ÿÿÿúrm   N)/Zsympyr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   Zsympy.solvers.recurrr   r   r   r   Zsympy.testing.pytestr   r   Z	sympy.abcr   r   r   r%   r9   r&   r'   r4   r*   r5   r:   rE   rK   rR   rZ   r\   r`   ra   rd   rm   r(   r(   r(   r)   Ú<module>   s(   L (^
	
