o
    *Î®cAf  ã                   @   sÔ  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mZ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mZ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* d dl+m,Z, d dl-m.Z. d dlm/Z/ d dlm0Z0 d dl$m1Z1 d dl2m3Z3m4Z4m5Z5 dd„ Z6dd„ Z7dd„ Z8dd„ Z9dd„ Z:d d!„ Z;d"d#„ Z<d$d%„ Z=d&d'„ Z>d(d)„ Z?d*d+„ Z@d,d-„ ZAd.d/„ ZBe5d0d1„ ƒZCd2d3„ ZDd4d5„ ZEe3d6d7„ ƒZFd8d9„ ZGd:S );é    )ÚProduct)Úexpand_func)ÚMod)ÚMul)Ú
EulerGamma)ÚFloatÚIÚRationalÚnanÚooÚpiÚzoo)ÚEq)ÚS)ÚDummyÚSymbolÚsymbols)ÚffÚrfÚbinomialÚ	factorialÚ
factorial2)Úsqrt)Ú	Piecewise)ÚgammaÚ	polygamma)ÚPoly)ÚO)Úsimplify)Ú	unchanged)ÚArgumentIndexError©Úsubfactorial)Ú
uppergamma)ÚXFAILÚraisesÚslowc                     s  t dƒ\‰ ‰t ddd\} }tdddd}ttˆƒtu sJ ‚tˆ tƒtu s'J ‚ttˆ ˆƒs/J ‚ttdƒdks8J ‚tt dƒdksBJ ‚ttd	ƒtu sKJ ‚tt d
ƒt u sVJ ‚tt d	ƒtu s`J ‚ttdƒtu siJ ‚tt dƒtu ssJ ‚tdtƒdks|J ‚tddt ƒdks‡J ‚ttd|ƒsJ ‚ttˆ tdddƒs›J ‚tdtdddƒdks¨J ‚ttddddtdddƒdksºJ ‚tˆ dƒdksÃJ ‚tˆ dƒˆ ksÌJ ‚tˆ dƒˆ ˆ d  ksÙJ ‚tˆ dƒˆ ˆ d  ˆ d  ksêJ ‚tˆ dƒˆ ˆ d  ˆ d  ˆ d  ˆ d  ksJ ‚tˆ dƒdˆ d  ksJ ‚tˆ dƒdˆ d ˆ d   ks$J ‚tˆ dƒdˆ d ˆ d  ˆ d   ks:J ‚tddƒtdƒksFJ ‚tˆ d dˆ   dƒˆ d dˆ   ˆ d dˆ   d  ksfJ ‚t	tˆ d dˆ   dƒt
ƒswJ ‚tˆ d ˆ  dƒdˆ d ˆ  d ˆ d ˆ  d   ks•J ‚ttˆ d dˆ   ˆ ƒdƒtˆ d dˆ d   dˆ d   dˆ   ˆ ƒks½J ‚t	ttˆ d dˆ   ˆ ƒdƒtƒsÑJ ‚tt‡ ‡fdd„ƒ ttˆ d ˆ  ˆ ƒdƒdˆ d	 dˆ d   d ˆ d   d!ˆ d   d"ˆ d   d#ˆ   d$  ksJ ‚tt‡ ‡fd%d„ƒ tˆ |ƒjd u s#J ‚t| |ƒjd u s.J ‚t| |ƒjdu s9J ‚t| |t ƒjdu sFJ ‚t| |t ƒjdu sSJ ‚tt|ƒjdu s^J ‚d&d'„ }|ˆ |ttƒ |ˆ |ttƒ || |ttƒ |ˆ ˆttƒ |ˆ ˆttƒ tˆ |ƒ t¡tˆ | d |ƒks™J ‚tˆ |ƒ t¡tt|ˆ  ƒtˆ ƒ ˆ dkfd| tdˆ  ƒ t| ˆ  d ƒ dfƒksÈJ ‚td|ƒ t¡t|d ƒd( ksÛJ ‚tˆ |ƒ t¡t|ƒtˆ | d |ƒ ksóJ ‚t| |ƒ t¡tt||  d ƒt| d ƒ | dkfd| t|  ƒ t| |  ƒ dfƒks#J ‚td|ƒ t¡t|d ƒd( ks6J ‚tˆ ˆƒ t¡tˆ ˆƒksFJ ‚tˆ ˆƒ t¡tˆ ˆƒksVJ ‚dd l}dd)lm} tdƒD ]$}d*d+| ¡   ‰ d*d+| ¡   }t|ˆ |ƒtˆ |ƒ ƒd,k s‡J ‚qdd S )-Núx,yún kT©ÚintegerÚm©r*   Únonnegativer   é   é   é   éúÿÿÿéùÿÿÿéÿÿÿÿéûÿÿÿéýÿÿÿÚkFÚx)Únegativer*   é   é   é   é   éþÿÿÿéd   é   é   é   c                      s   t tˆ d dˆ   ˆ ˆƒdƒS )Nr9   r:   ©r   r   © ©r7   ÚyrC   ú_/tmp/pip-target-vg8gfxp4/lib/python/sympy/functions/combinatorial/tests/test_comb_factorials.pyÚ<lambda>G   ó    z$test_rf_eval_apply.<locals>.<lambda>é	   é#   éK   é^   éB   é   c                      s   t tˆ d ˆ  ˆ ˆƒdƒS )Nr:   r=   rB   rC   rD   rC   rF   rG   I   s    c                    sh   t ƒ t ƒ ‰ ‰‡ ‡‡‡fdd„}tddƒD ]}tddƒD ]}ˆ||ƒ|||ƒks0J ˆˆ||fƒ‚qqd S )Nc                    ó   ˆˆ ˆƒ  ˆ¡ ˆ | ˆ|i¡S ©N©ÚrewriteÚsubs©r7   r6   ©ÚaÚbÚnÚorC   rF   rG   T   rH   z3test_rf_eval_apply.<locals>.check.<locals>.<lambda>r4   r;   ©r   Úrange©r7   r6   rY   rX   ÚrÚiÚjrC   rU   rF   ÚcheckR   s   &ÿÿz!test_rf_eval_apply.<locals>.checké   )r   éþÿÿéô  çVçž¯Ò<)r   r   r   r
   r   r   r   r   r   Ú
isinstancer   r   r%   Ú
ValueErrorÚ
is_integerr   r   rR   r   r   ÚrandomÚmpmathr[   Úabs)rX   r6   r+   r`   rh   Ú	mpmath_rfr^   rC   rD   rF   Útest_rf_eval_apply   sŠ   $"4$,@"<P(f((þ&0""þ&  &ýrl   c            	         sØ  t dƒ\‰ ‰t ddd\} }tdddd}ttˆƒtu sJ ‚tˆ tƒtu s'J ‚ttˆ ˆƒs/J ‚ttdƒdks8J ‚tt dƒdksBJ ‚ttd	ƒtu sKJ ‚tt d
ƒt u sVJ ‚tt d	ƒtu s`J ‚ttdƒtu siJ ‚tt dƒtu ssJ ‚tˆ dƒdks|J ‚tˆ dƒˆ ks…J ‚tˆ dƒˆ ˆ d  ks’J ‚tˆ dƒˆ ˆ d  ˆ d  ks£J ‚tˆ dƒˆ ˆ d  ˆ d  ˆ d  ˆ d  ks¼J ‚tˆ dƒdˆ d  ksÉJ ‚tˆ dƒdˆ d ˆ d   ksÚJ ‚tˆ dƒdˆ d ˆ d  ˆ d   ksïJ ‚tddƒtdƒksúJ ‚tdˆ d  dˆ   dƒdˆ d  dˆ   dˆ d  dˆ   d  ks J ‚ttdˆ d  dˆ   dƒtƒs3J ‚tˆ d dˆ   dƒdˆ d dˆ   d ˆ d dˆ   d   ksWJ ‚tt	dˆ d  dˆ   ˆ ƒdƒt	dˆ d  dˆ d   dˆ d   dˆ   ˆ ƒksƒJ ‚ttt	dˆ d  dˆ   ˆ ƒdƒt	ƒs™J ‚t
t‡ ‡fdd„ƒ tt	ˆ d dˆ   ˆ ƒdƒdˆ d dˆ d   dˆ d   dˆ   d  ksÌJ ‚t
t‡ ‡fdd„ƒ tˆ |ƒjd u sáJ ‚t| |ƒjd u sìJ ‚t| |ƒjdu s÷J ‚t| |t ƒjdu sJ ‚t| |t ƒjdu sJ ‚tt|ƒjdu sJ ‚ttˆ ˆ ƒtƒs'J ‚t| | ƒt| ƒks3J ‚d d!„ }|ˆ |ttƒ |ˆ |ttƒ || |ttƒ |ˆ |ttƒ |ˆ ˆttƒ |ˆ ˆttƒ tˆ |ƒ t¡tˆ | d |ƒksuJ ‚tˆ |ƒ t¡ttˆ d ƒt| ˆ  d ƒ ˆ dkfd| t|ˆ  ƒ tˆ  ƒ dfƒks¥J ‚td|ƒ t¡d"td	| ƒ ks¸J ‚t| |ƒ t¡tt| ƒt| |  ƒ | dkfd| t||  d ƒ t|  d ƒ dfƒksèJ ‚td|ƒ t¡d"td| ƒ ksûJ ‚tˆ |ƒ t¡t|ƒtˆ |ƒ ksJ ‚tˆ ˆƒ t¡tˆ ˆƒksJ ‚tˆ ˆƒ t¡tˆ ˆƒks/J ‚dd l}dd#lm} tdƒD ],}d$d%| ¡   ‰ d$d%| ¡   }|ˆ |ƒ}tˆ |ƒ}t|| ƒt|ƒd& k shJ ‚q=d S )'Nr'   r(   Tr)   r+   r,   r   r.   r/   r0   r1   r2   r9   r:   r;   r<   r3   r=   r5   r>   é   é;   rJ   c                      s"   t tdˆ d  dˆ   ˆ ˆƒdƒS )Nr9   r;   ©r   r   rC   rD   rC   rF   rG   ™   s   " z$test_ff_eval_apply.<locals>.<lambda>rA   é1   éN   é(   c                      s   t tˆ d dˆ   ˆ ˆƒdƒS )Nr9   r:   r=   ro   rC   rD   rC   rF   rG   ›   rH   Fc                    sd   t ƒ t ƒ ‰ ‰‡ ‡‡‡fdd„}tddƒD ]}tddƒD ]}ˆ||ƒ|||ƒks.J ˆˆfƒ‚qqd S )Nc                    rO   rP   rQ   rT   rU   rC   rF   rG   ª   rH   z3test_ff_eval_apply.<locals>.check.<locals>.<lambda>r4   r;   rZ   r\   rC   rU   rF   r`   ¨   s   "ÿÿz!test_ff_eval_apply.<locals>.checkéx   )r   rb   rc   rd   )r   r   r   r
   r   r   r   re   r   r   r%   rf   rg   r   r   r   r   rR   r   rh   ri   r[   rj   )	rX   r6   r+   r`   rh   Ú	mpmath_ffr^   rV   rW   rC   rD   rF   Útest_ff_eval_applys   sˆ   "2"*L&HX,R($ þ&(þ&(  

"ûru   c                  C   s¦   t dƒ} tdtddƒƒ d¡}t||  ƒ| dk sJ ‚t dƒ} tdtddƒƒ d¡}t||  ƒ| dk s6J ‚t dƒ} tt d	dƒt d
dƒƒ}t||  ƒ| dk sQJ ‚d S )Nz!6.9109401292234329956525265438452é   r9   r:   é    g€h‰eÖ9€9z!6.8261540131125511557924466355367z!34.007346127440197150854651814225z4.4z2.2)r   r   r	   Úevalfrj   r   )ÚmapleÚusrC   rC   rF   Útest_rf_ff_eval_hiprecÌ   s   r{   c                  C   s\   ddl m}  tdƒ\}}| ||ft||ƒdƒ}tdƒ}|ddƒ}t|| ƒ| dk s,J ‚d S )	Nr   )Úlambdifyr'   ri   z34.007346127440197gš™™™™™@çš™™™™™@rd   )Úsympy.utilities.lambdifyr|   r   r   r   rj   )r|   r7   rE   Úfry   rz   rC   rC   rF   Útest_rf_lambdify_mpmathÚ   s   
r€   c                  C   s`  t dƒ} t ddd}t dddd}t ddd}t d	ddd
}t ddd}t ddd}tdƒtu s2J ‚tdƒdks:J ‚tdƒdksBJ ‚tdƒdksJJ ‚tdƒdksRJ ‚t|ƒjtks[J ‚td| ƒjtksfJ ‚t| ƒjd u soJ ‚t|ƒjd u sxJ ‚t|ƒjsJ ‚t|ƒjd u sˆJ ‚t|ƒjd u s‘J ‚t|ƒjs˜J ‚t| ƒjd u s¡J ‚t|ƒjd u sªJ ‚t|ƒjdu s³J ‚t|ƒjd u s¼J ‚t|ƒjdu sÅJ ‚t|ƒjdu sÎJ ‚t|ƒjdu s×J ‚t| ƒjd u sàJ ‚t|ƒjd u séJ ‚t|ƒjd u sòJ ‚t|d ƒjdu sýJ ‚t|ƒjd u sJ ‚t|ƒjd u sJ ‚t|ƒjd u sJ ‚t|ƒjd u s%J ‚ttƒtu s.J ‚d S )Nr7   rX   Tr)   r6   r,   r]   FÚs©r*   r8   Út©r-   Úu)Ú
nonintegerr=   r   r.   r0   i°  r@   l     L.é   l      X4+¤3\´ZÊ r9   r:   )	r   r   r   Úfuncrg   Úis_positiveÚis_realÚis_compositer   )r7   rX   r6   r]   r   rƒ   r…   rC   rC   rF   Útest_factorialã   sH   rŒ   c                  C   s–  t ddd} d\}}d\}}tt| d ƒ| ƒ| d ksJ ‚tt| d ƒ|  ƒdks+J ‚tt|d dd	|ƒd
ks:J ‚tt|d dd	|ƒd
ksIJ ‚tt|d dd	|ƒ|d ksZJ ‚tt|d dd	|ƒ|d kskJ ‚tt|d dd	|ƒdkszJ ‚tt|d dd	|ƒdks‰J ‚ttddd	|ƒttdƒ|ƒks›J ‚ttddd	|ƒttdƒ|ƒks­J ‚ttddd	dƒtjks»J ‚ttddd	dƒtjksÉJ ‚d S )NÚprT)Úprime)i	Êš;é!Êš;©é…–˜ iU ür.   r3   F©Úevaluater   é2   iÂ-õ2i  i2åø5é™   éÿ   r<   r:   r;   r/   )r   r   r   r   ÚZero)r   ÚpÚqr]   r   rC   rC   rF   Útest_factorial_Mod  s   ""$$ rš   c                      sŽ   t ddd‰ tˆ ƒ ˆ ¡tdˆ  ƒtddˆ  ƒ ksJ ‚tˆ d ƒ ˆ ¡dˆ  tdˆ d  ƒ tddˆ d  ƒ ks<J ‚tt‡ fdd„ƒ d S )	NrX   Tr)   r.   r   r9   c                      s   t ˆ d ƒ d¡S )Nr9   )r   ÚfdiffrC   ©rX   rC   rF   rG   )  s    z%test_factorial_diff.<locals>.<lambda>)r   r   Údiffr   r   r%   r    rC   rC   rœ   rF   Útest_factorial_diff"  s   ÿ(ÿrž   c                  C   s^   t ddd} t| ƒ | dd¡d| t  | d td d td d    t| d ƒ ks-J ‚d S )	NrX   Tr)   r   r:   r.   r9   rA   )r   r   Úseriesr   r   r   rœ   rC   rC   rF   Útest_factorial_series,  s   6ÿr    c                  C   s‚   t ddd} t dddd}t| ƒ t¡t| d ƒksJ ‚tdƒ}t|ƒ t¡ t||d|fƒ¡s2J ‚t| ƒ t¡t| ƒks?J ‚d S )NrX   Tr)   r6   r,   r.   r^   )r   r   rR   r   r   r   Údummy_eq)rX   r6   Ú_irC   rC   rF   Útest_factorial_rewrite3  s   $r£   c                  C   sâ  t ddd} tdƒdksJ ‚tdƒdksJ ‚tdƒdksJ ‚td	ƒd
ks&J ‚t dddd}t dddd}t dddd}t dddd}t dddd}t dddd}t dddd}t dddd}t dddd}	t ddd}
t ddd}t ddd}t dƒ}t ddd}ttd d!„ ƒ ttd"d!„ ƒ ttd#d!„ ƒ t| ƒjd u sŸJ ‚t|d ƒjs¨J ‚t|d ƒjs±J ‚t|d$ ƒjsºJ ‚t|d% ƒjsÃJ ‚t|d& ƒjsÌJ ‚t|ƒjd u sÕJ ‚t|ƒjd u sÞJ ‚t|ƒjd u sçJ ‚t|ƒjd u sðJ ‚t|	ƒjd u sùJ ‚t|
ƒjd u sJ ‚t|ƒjd u sJ ‚t|ƒjd u sJ ‚t|ƒjd u s!J ‚t| ƒjd u s+J ‚t|d ƒjdu s7J ‚t|d ƒjdu sCJ ‚t|d$ ƒjdu sOJ ‚t|d ƒjdu s[J ‚t|d& ƒjdu sgJ ‚t|d ƒjdu ssJ ‚t|ƒjd u s}J ‚t|ƒjd u s‡J ‚t|ƒjd u s‘J ‚t|ƒjd u s›J ‚t|	ƒjd u s¥J ‚t|
ƒjd u s¯J ‚t|ƒjd u s¹J ‚t|ƒjd u sÃJ ‚t|ƒjd u sÍJ ‚t|ƒjd u s×J ‚t|ƒjd u sáJ ‚t|ƒjd u sëJ ‚t|ƒjd u sõJ ‚t|d& ƒjdu sJ ‚t|ƒjdu sJ ‚t|ƒjdu sJ ‚t|ƒjdu sJ ‚t|ƒjd u s)J ‚t|ƒjd u s3J ‚t|ƒjd u s=J ‚t|ƒjd u sGJ ‚t|ƒjdu sQJ ‚t|ƒjd u s[J ‚t|ƒjdu seJ ‚t|ƒjdu soJ ‚d S )'NrX   Tr)   r3   r.   r   r0   éi   r?   i€  Úttr,   Útte©Úevenr-   Útpe)r¨   ÚpositiveÚtto©Úoddr-   ÚtfFÚtfeÚtfoÚftr   ÚfnÚntr„   ÚnfÚnnÚz©Úzeroc                   S   s   t tƒS rP   )r   r   rC   rC   rC   rF   rG   U  ó    z!test_factorial2.<locals>.<lambda>c                   S   s   t tddƒƒS )Nr;   r9   )r   r	   rC   rC   rC   rF   rG   V  s    c                   S   s   t dƒS )Néüÿÿÿ)r   rC   rC   rC   rF   rG   W  r¹   r:   r<   r9   )r   r   r%   rf   rg   r‰   Úis_evenÚis_odd)rX   r¥   r¦   r©   r«   r®   r¯   r°   r±   r   r²   r³   r´   rµ   r¶   rC   rC   rF   Útest_factorial2=  sŠ   r½   c               	   C   sè   t ddd} t| ƒ t¡d| d  tdtt| dƒdƒftdƒttƒ tt| dƒdƒfƒ t| d d ƒ ks8J ‚td|  ƒ t¡d|  t| d ƒ ksMJ ‚td|  d ƒ t¡tdƒd| t	j
   t| tddƒ ƒ ttƒ ksrJ ‚d S )NrX   Tr)   r9   r.   r   r:   )r   r   rR   r   r   r   r   r   r   r   ÚHalfr	   rœ   rC   rC   rF   Útest_factorial2_rewrite‹  s   Pÿ*.ÿr¿   c                  C   s¨
  t dƒ} t ddd}t dddd}t ddd}t dddd	}t d
ddd}t ddd}t ddd}t ddd}t ddd}	t ddd}
t ddd}t dddd}t dddd}tddƒdks`J ‚tddƒdksiJ ‚tddƒdksrJ ‚t||	ƒdks{J ‚t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ks¨J ‚ttjtjƒdks³J ‚tddƒdks¼J ‚tdd ƒd!ksÅJ ‚t|dƒdksÎJ ‚t|dƒdks×J ‚t|dƒdksàJ ‚tt|dƒƒ|ksëJ ‚tt|dƒƒ||d  d ksüJ ‚tt||d ƒƒ||d  d ksJ ‚tt||d ƒƒ|ksJ ‚t|d"ƒjtks)J ‚t|d"ƒjdd#|d" d$ |d d  |d"  ksEJ ‚tt|d"ƒƒ||d  |d  d$ ks[J ‚t||ƒjtksfJ ‚t||d ƒjtkssJ ‚t||d ƒdksJ ‚t||ƒdks‰J ‚t||ƒjtks”J ‚t||ƒjtksŸJ ‚t||ƒjtksªJ ‚t||ƒjtksµJ ‚t||| ƒjtksÂJ ‚t||| ƒjtksÏJ ‚tt||d" ƒƒ||d  |d  d$ ksçJ ‚t||ƒjsðJ ‚t|
|ƒjd u sûJ ‚t| |
ƒjdu sJ ‚ttd%ƒd$ƒd&ksJ ‚td'd(ƒd)ksJ ‚td*d+ƒd,ks&J ‚td-d.ƒd/ks0J ‚td0d1ƒd2ks:J ‚td3d4ƒd5ksDJ ‚t||ƒj	du sOJ ‚tdddd6j	du s\J ‚tdd7dd6j	du siJ ‚tdd8dd6j	du svJ ‚tdd8dd6j	du sƒJ ‚tdddd6j	du sJ ‚tdddd6j	du sJ ‚tdd dd6j	du sªJ ‚t
t
 |
||fD ]}t||ƒdks¾J ‚t||d ƒ|ksÊJ ‚q²tt||ƒtƒs×J ‚tt||d ƒtƒsäJ ‚tt| | ƒtƒsïJ ‚tt| | d ƒtƒsüJ ‚tt| d | ƒƒ| d ksJ ‚tt| | d ƒƒ| ksJ ‚tt| d | d ƒƒ| | d  d ks0J ‚tt| d d | d ƒƒ| d d ksFJ ‚td9d:ƒdksPJ ‚td;d<ƒdksZJ ‚ttd=dƒdƒdksgJ ‚td>d?ƒdksqJ ‚td@td9dƒƒtdAƒdBt
  ks„J ‚tdtd"dƒƒtdCƒd"t
  ks—J ‚td8td9dƒƒtu s¤J ‚t||ƒtu s®J ‚t|
|ƒjtks¹J ‚t|
tdDd$ƒƒdEt|
d ƒ dDtt
ƒ t|
td"dƒ ƒ  ksÛJ ‚ttdFd"ƒtddEƒƒttdGd"ƒƒttddHƒƒttdIdJƒƒ  ksþJ ‚ttd@dƒtd9dƒƒtdKdLƒksJ ‚ttdMd7ƒtd9dEƒƒttdNd7ƒƒttdOdPƒƒttddEƒƒ  ks4J ‚ttdQdEƒtdMd7ƒƒttdRdEƒƒttdNd7ƒƒttdSdPƒƒ  ksWJ ‚tttdTdEƒƒtdt ƒttdUdEƒƒttdVdEƒt ƒ  ksxJ ‚ttdt ƒtdt ƒtdt ƒtddt  ƒ  ks–J ‚td9tƒtu s J ‚ttd9d$ƒtƒttdd$ƒƒttdd$ƒt ƒtdt ƒ  ksÁJ ‚tddt  dd"t  ƒtddt  ƒtdt ƒtdd"t  ƒ  ksçJ ‚ttd7ƒtdd"ƒttdJƒ  ksúJ ‚tdt d" d ƒdMt tdWƒ ksJ ‚ttt|ƒtƒsJ ‚ttd"ddd6ƒd"ks'J ‚tt|ddd6ƒdks5J ‚tt|dCdd6ƒdksCJ ‚tt||ƒƒt||ƒksRJ ‚d S )XNr7   rX   Tr)   Únz)r*   Únonzeror6   Úkp)r*   rª   Úknr‚   r…   )r8   Úvr„   r˜   )rª   r¶   r·   r³   FÚktrV   r,   rW   r   r.   é
   r9   r3   iöÿÿÿr0   iPÓÿÿr:   )rˆ   r/   é   l     Àdl$ k5:@{µn©i?gNq»($Qq	iVXý!R$$ )©ê@ÁuI ø'‹/í(tji,  é/   l    ÷>m¤ÏQ¾%q<9\µc:RÖZŸ[þe[!­_­"…2×tJ iÇ  é+   l   ˜u9QHy¿	<GÕ_XSÞ/vJ
â+k1™C®ïO	 iÐ	  é5   l   Àn+BhÒ˜ah+	¹p½oí5¬<
v°C.díWS¡u Uw%Ôs¦	[ i7  é4   l   ÓLzl#ÑÊµOc’'¡&•WfN'™A>nƒfÚ	óf´D1­úJ‘5kjiá  é3   l   àPaÑtclRb>Ës_81c‚x¿EÔjI
—3ý+€3V&\dy3,Ô¯¢4T41 r’   r;   r5   r2   r4   iéÿÿÿiôÿÿÿé   iÏÿÿÿiÍÿÿÿr@   lýÿÿÿ    @ l   ©FDCms r=   é   r?   rN   é   r<   ék   rA   i±ùÿÿi  € ióÿÿÿiøÿÿÿiãÿÿÿrr   iíÿÿÿiõÿÿÿrp   i§ÿÿÿi¯ÿÿÿéa   é?   )r   r   r   r¾   r   rˆ   Úexpandrg   r   Úis_nonnegativer   re   r	   r   r   r   )r7   rX   rÀ   r6   rÂ   rÃ   r…   rÄ   r˜   r¶   r³   rÅ   rV   rW   Ú_rC   rC   rF   Útest_binomial”  sÊ   "(8,0 ,,&&DF&FFB<BL&("rÖ   c                  C   sˆ   d\} }d}t tdddd| ƒt tddƒ| ƒksJ ‚t tdddd|ƒt tddƒ|ƒks.J ‚t td	d
dd|ƒt td	d
ƒ|ƒksBJ ‚d S )N©i£† r   r‘   id iQ  Fr’   iÒ  i°  éý   éq   )r   r   )r˜   r™   r]   rC   rC   rF   Útest_binomial_Mod  s
   ((,rÚ   c                  C   s–  d\} }d\}}t dƒ\}}}t||ƒ|  |||| i¡tt|| ƒ|ƒks'J ‚t||ƒ|  |d|d|di¡dks;J ‚td|ƒd	  |d
¡dksJJ ‚ttdddd| ƒttddƒ| ƒks^J ‚ttdddd| ƒttddƒ | ƒkssJ ‚ttdddd| ƒttddƒ| ƒks‡J ‚ttdddd|ƒttddƒ|ƒks›J ‚ttdddd|ƒttddƒ|ƒks¯J ‚ttdddd|ƒttddƒ|ƒksÃJ ‚ttdddd|ƒtju sÒJ ‚ttdddd|ƒtju sáJ ‚ttdddd|ƒttddƒ|ƒksõJ ‚ttd d!dd|ƒttd d!ƒ|ƒks
J ‚ttd"d#dd|ƒttd"d#ƒ|ƒksJ ‚ttd$d%dd|ƒttd$d%ƒ|ƒks4J ‚ttd&d#dd|ƒttd&d#ƒ|ƒksIJ ‚d S )'Nr×   r   zn k mr?   r;   rÍ   r<   rI   r0   r9   r.   i@â iõ¨  Fr’   i!Eýÿéí   iË» éî   iÌ» i&  iÃ  iÖÿÿik  i‹Âÿÿij  rÏ   iÚÿÿÿé&   iñ  éw   iÅ  i´  i­d  i  iýÿÿév   iS›ÿÿ)r   r   rS   r   r   r—   )r˜   r™   r]   r   rX   r6   r+   rC   rC   rF   Útest_binomial_Mod_slow  s&   0((*(((((***.rà   c                      s|  t ddd‰t ddd‰ tˆˆ ƒ ˆ¡tddˆ ˆ  ƒ tddˆ ƒ tˆˆ ƒ ks,J ‚tˆd ˆ d ƒ ˆ¡dˆ tddˆd  ˆ d  ƒ tddˆd  ƒ  tˆd ˆ d ƒ ks^J ‚tˆˆ ƒ ˆ ¡tddˆ  ƒ tddˆ ˆ  ƒ tˆˆ ƒ ks~J ‚tˆd ˆ d ƒ ˆ ¡dˆ d  tddˆ d  ƒ tddˆd  ˆ d  ƒ  tˆd ˆ d ƒ ks²J ‚tt‡ ‡fd	d
„ƒ d S )NrX   Tr)   r6   r   r.   r9   r:   c                      s   t ˆˆ ƒ d¡S )Nr:   )r   r›   rC   ©r6   rX   rC   rF   rG   H  s    z$test_binomial_diff.<locals>.<lambda>)r   r   r   r   r%   r    rC   rC   rá   rF   Útest_binomial_diff9  s6   *ÿÿÿÿÿ*ÿÿÿÿÿrâ   c                  C   sÔ   t ddd} t ddd}t dƒ}t| |ƒ t¡t| ƒt|ƒt| | ƒ  ks(J ‚t| |ƒ t¡t| d ƒt|d ƒt| | d ƒ  ksFJ ‚t| |ƒ t¡t| |ƒt|ƒ ksYJ ‚t| |ƒ t¡t| |ƒkshJ ‚d S )NrX   Tr)   r6   r7   r.   )r   r   rR   r   r   r   )rX   r6   r7   rC   rC   rF   Útest_binomial_rewriteK  s   
ÿÿÿ,ÿ&"rã   c                  C   s`   ddl m}  t| td| d ƒ | td| d ƒ  td| d ƒ td| d ƒ d ƒdks.J ‚d S )Nr   ©r7   r.   r9   )Ú	sympy.abcr7   r   r   rä   rC   rC   rF   Útest_factorial_simplify_failX  s   $ÿÿÿÿræ   c                  C   s°  t dd„ tg d¢ƒD ƒƒsJ ‚ttƒtu sJ ‚ttƒtu sJ ‚tdƒdks'J ‚ttdƒs.J ‚tdƒ} t| ƒ t¡t| d d	ƒt	j
 ksEJ ‚td
ddd}tdddd}tddd}tdddd}tdddd}tddd}tddd}tddd}tdƒ}	tdddd}
tdddd}t|ƒjs’J ‚t|ƒjd u s›J ‚t|ƒjd u s¤J ‚t|ƒjd u s­J ‚t|ƒjd u s¶J ‚t|ƒjd u s¿J ‚t|ƒjd u sÈJ ‚t|ƒjd u sÑJ ‚t|	ƒjd u sÚJ ‚t|ƒjsáJ ‚t|ƒjd u sêJ ‚t|ƒjd u sóJ ‚t|ƒjd u süJ ‚t|ƒjd u sJ ‚t|ƒjd u sJ ‚t|ƒjd u sJ ‚t|ƒjd u s$J ‚t|	ƒjd u s.J ‚t|ƒjd u s8J ‚t|ƒjd u sBJ ‚t|
ƒjdu sLJ ‚t|ƒjdu sVJ ‚d S )Nc                 s   s     | ]\}}t |ƒ|kV  qd S rP   r!   )Ú.0r^   ÚansrC   rC   rF   Ú	<genexpr>a  s   € z$test_subfactorial.<locals>.<genexpr>)
r.   r   r.   r9   rI   é,   i	  i>  iñ9  ix	 rÏ   l   n7e% &U}8 r}   r7   r.   r3   r¥   Tr,   r®   Fr)   r±   r   r³   r„   r´   Úter§   Útor¬   )ÚallÚ	enumerater"   r   r
   r   r   rR   r#   r   ÚExp1rg   rÔ   r»   r¼   )r7   r¥   r®   Útnr±   r   r²   r³   r´   rµ   rë   rì   rC   rC   rF   Útest_subfactorial`  sT   
ÿ&rñ   N)HÚsympy.concrete.productsr   Úsympy.core.functionr   Úsympy.core.modr   Úsympy.core.mulr   Ú
sympy.corer   Úsympy.core.numbersr   r   r	   r
   r   r   r   Úsympy.core.relationalr   Úsympy.core.singletonr   Úsympy.core.symbolr   r   r   Ú(sympy.functions.combinatorial.factorialsr   r   r   r   r   Ú(sympy.functions.elementary.miscellaneousr   Ú$sympy.functions.elementary.piecewiser   Ú'sympy.functions.special.gamma_functionsr   r   Úsympy.polys.polytoolsr   Úsympy.series.orderr   Úsympy.simplify.simplifyr   Úsympy.core.exprr   r    r"   r#   Úsympy.testing.pytestr$   r%   r&   rl   ru   r{   r€   rŒ   rš   rž   r    r£   r½   r¿   rÖ   rÚ   rà   râ   rã   ræ   rñ   rC   rC   rC   rF   Ú<module>   sR    $ZY	-

N	w

