a
     ¬<b %  ã                   @   sZ  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" 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„ Z0dd„ Z1dd „ Z2d!d"„ Z3d#d$„ Z4d%d&„ Z5e"d'd(„ ƒZ6d)d*„ Z7d+S ),é    )Ú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)ÚaÚbÚyzn,kT)ÚintegerzC0,C1,C2c                   C   s,  t g d¢dtƒdksJ ‚t g d¢dtƒdks0J ‚t dtd gttƒdksLJ ‚t ddgttƒttd t d  kstJ ‚t t d tgdtƒtt d ksšJ ‚t dt d dgdt d tƒdksÂJ ‚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)   úo/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/sympy/solvers/tests/test_recurr.pyÚtest_rsolve_poly   s    (&(Bÿr+   c               
   C   s8  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 s4J ‚d S )Néþÿÿÿr$   r    r   r%   é   é   é	   é   é   é   r   éýÿÿÿr   )r   r&   r(   r   ÚHalfÚC2)Zsolutionr)   r)   r*   Útest_rsolve_ratio!   s    :Dÿÿ    ûr6   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 s„J ‚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 sjJ ‚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sVJ ‚t ddgdt tƒ 
¡ ttd d  td  ksŒJ ‚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sêJ ‚t t ddgdtƒ 
¡ dt t ttd   tttd    ks0J ‚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   r4   r   r(   r   Úkr   r   r   r   r   r)   r)   r)   r*   Útest_rsolve_hyper.   s@    66þ
 $$þ
 $$þ.ÿÿ
6ÿÿ
"266(FBÿ
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   ó    z"recurrence_term.<locals>.<genexpr>)ÚsumÚrangeÚlenrA   r)   rA   r*   Úrecurrence_termV   s    rI   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 ]6}|D ],}t||ƒ}| t ¡ršt||t ƒ|ksšJ ‚qšq’dS )zSome bulk-generated tests.r   r    r$   r"   é   é4   é   r#   r,   )r,   r   r   )r   r   r   r   r   N)r&   rI   Zis_polynomialr   )ÚfuncsZcoeffsÚprB   Úqr)   r)   r*   Útest_rsolve_bulk[   s&    8ÿ
ÿ
ÿ ÿÿÿ

rP   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 sâJ ‚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sHJ ‚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sžJ ‚t| t tƒi ƒ|ks¸J ‚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 tƒƒ 	tt¡ƒ¡ ¡ dksRJ ‚t tƒt td ƒ d } t| t tƒt dƒdiƒdt ksJ ‚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sdJ ‚t| t tƒt dƒdiƒdt d tj ks”J ‚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súJ ‚t tƒdt t td ƒ  } t| t tƒƒtttƒ ks6J ‚|  	t t
tt| t tƒƒ 	tt¡ƒ¡ ¡ dkshJ ‚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sVJ ‚|  	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söJ ‚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slJ ‚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sÐJ ‚tt tƒtt td ƒt td ƒ  d  t tƒƒ‰ ‡ fdd„}|tƒt|td ƒ|td ƒ  d   ¡  ¡ dk	sHJ ‚ttd t tƒ t tƒƒd u 	slJ ‚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$   r3   r%   r"   é   ièÿÿÿr   iðÿÿÿé    rL   r/   T)Úfuncc                    s   ˆ   t| ¡S r<   r=   )r@   ©Úsolr)   r*   Ú<lambda>À   rE   ztest_rsolve.<locals>.<lambda>)r   r&   r   r   r4   r   r'   r(   r   r>   r   r:   Zsimplifyr   r   r   r   r   r   Úcancel)rC   ÚhÚgZynÚYr)   rT   r*   Útest_rsolvel   sŒ     ÿ66þ
 *:<2L *2&**22042 2 $.2224:ÿÿ
2@&ÿþ
D&02:$@ÿ
r[   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&   r:   r)   r)   r)   r*   rV   Ì   rE   z$test_rsolve_raises.<locals>.<lambda>c                      s   t ttƒttd ƒ ˆ tƒƒS r]   ©r   r   r&   r)   ©r\   r)   r*   rV   Í   rE   c                      s   t ttƒˆ td ƒ ttƒƒS r]   r^   r)   r_   r)   r*   rV   Î   rE   c                   S   s&   t ttƒttƒttd ƒ  ttƒƒS r]   )r   r   r&   r   r)   r)   r)   r*   rV   Ï   rE   c                      s(   t ttƒttd ƒ ttƒˆ dƒdiƒS )Nr   r   r^   r)   r_   r)   r*   rV   Ð   rE   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*   rV   Ñ   rE   )r   r   Ú
ValueErrorr)   r)   r_   r*   Útest_rsolve_raisesÊ   s    ra   c                  C   s†   t td ƒt td ƒ t tƒd  } t| t tƒƒdt  ttt   ksLJ ‚t| t tƒt dƒdt dƒdiƒddt   t ks‚J ‚d S )Nr    r   r"   r   )r   r&   r   r'   r(   ©rC   r)   r)   r*   Útest_issue_6844Ô   s    $(rc   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ªJ ‚d S )NÚrT)ZpositiveÚtheta)Úrealr    r   )
r	   r   r&   r   r   r'   r   r   r   r(   )rd   re   rC   r)   r)   r*   Útest_issue_18751Ú   s    8Fÿrg   c                	   C   s  t ttd ƒttd ƒ ttd ƒ ttƒ ttƒƒdt t t tt  ksRJ ‚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sÈJ ‚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$   r2   r   r2   r,   )r   r   r&   r'   r(   r5   r   r)   r)   r)   r*   Útest_constant_namingá   s    Rvb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 usšJ ‚d S )Né   r   i  r    iD  r$   i  r"   r#   r%   é   r2   )r   r&   r   rb   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J ‚| 	tdtdtdtdi¡ 
¡ }t|d ƒdk sLJ ‚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(   r5   r>   ZevalfÚabs)rC   rU   ÚexpectedÚer)   r)   r*   Útest_issue_17990ð   s`    <*
ÿ
ÿÿ
ÿÿþ*þý,ÿ
ÿÿ
ÿÿþ*þýý4
ÿÿÿúru   N)8Z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   Z	sympy.abcr   r   r   r&   r:   r'   r(   r5   r+   r6   r;   rI   rP   r[   ra   rc   rg   rh   rk   ru   r)   r)   r)   r*   Ú<module>   s8   (^
	
