o
    *Î®có@  ã                   @   sÄ   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
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m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S )é    )ÚEÚRationalÚpi)Úexp)Úsqrt)ÚSÚsymbolsÚI)ÚconvolutionÚconvolution_fftÚconvolution_nttÚconvolution_fwhtÚconvolution_subsetÚcovering_productÚintersecting_product)Úraises©ÚxÚyc                      sŽ  dt ddƒtdƒt ddƒg‰ g d¢‰g d¢‰g d¢‰tˆ ˆƒtˆ ˆƒks&J ‚tˆ ˆdd	tˆ ˆdd	ks6J ‚tˆ ˆdd	tˆˆ dd	ksFJ ‚tˆ ˆdd … dd	tˆdd … ˆ dd	ks^J ‚d
‰d‰tˆˆˆdtˆˆˆdksrJ ‚tˆˆˆdtˆˆˆdks‚J ‚tˆˆˆdtˆˆˆdks’J ‚tt‡‡‡fdd„ƒ tt‡‡‡fdd„ƒ tˆ ˆddtˆ ˆƒks¶J ‚tˆ ˆddtˆ ˆƒksÄJ ‚tt‡‡fdd„ƒ tt‡‡‡fdd„ƒ tt‡ ‡fdd„ƒ tt‡‡‡fdd„ƒ tˆ ˆddtˆ ˆƒ  krtˆ ˆddd  krtˆ ˆddksJ ‚ J ‚tˆ ˆddtˆ ˆƒks&J ‚tt‡ ‡fdd„ƒ tt‡‡fdd„ƒ tt‡ ‡‡fdd„ƒ d S )Né   é   é   é   ©é	   r   r   é   r   é   )r   r   r   r   é   )iŽ  i¬  i  i°  r   ©Údpsé €;éL  ©Úprimec                      ó   t ˆ ˆdˆdS )Nr   ©r   r#   ©r
   © ©ÚbÚdÚqr'   úM/tmp/pip-target-vg8gfxp4/lib/python/sympy/discrete/tests/test_convolutions.pyÚ<lambda>    ó    z"test_convolution.<locals>.<lambda>c                      r$   )Né   r%   r&   r'   r(   r'   r,   r-   !   r.   T)ÚdyadicFc                      ó   t ˆ ˆdddS ©Nr   T)r   r0   r&   r'   )r)   r*   r'   r,   r-   &   r.   c                      ó   t ˆ ˆˆddS ©NT)r#   r0   r&   r'   )r)   r*   Úpr'   r,   r-   '   r.   c                      r1   r2   r&   r'   ©Úar)   r'   r,   r-   (   r.   c                      r3   r4   r&   r'   )r)   Úcr5   r'   r,   r-   )   r.   )Úsubset©r9   r0   c                      s   t ˆ ˆdddS )NTr:   r&   r'   r6   r'   r,   r-   0   r.   c                      r1   )NTr/   )r9   r   r&   r'   )r8   r*   r'   r,   r-   1   r.   c                      r$   )NT)r9   r#   r&   r'   )r7   r8   r+   r'   r,   r-   2   r.   )	r   r   r
   r   r   r   Ú	TypeErrorr   r   r'   r'   )r7   r)   r8   r*   r5   r+   r,   Útest_convolution   s<     0   
ÿþr<   c               	   C   s^  dt ddƒtdƒt ddƒg} g d¢}tg d¢g d¢dd	tg d¢g d¢dd	  kr6tg d¢g d¢ƒks9J ‚ J ‚tg d¢g d¢dd	g d
¢ksJJ ‚t ddƒt ddƒt ddƒt ddƒt ddƒg} t ddƒt ddƒt ddƒt ddƒg}t| |dd	t| |t| ƒt|ƒ d d	ksŠJ ‚t| |dd	t ddƒt ddƒt ddƒt ddƒgks¥J ‚t| |dd	t ddƒt ddƒt ddƒt ddƒt dd ƒt d!d"ƒgksÈJ ‚t| |dd	t| |dd	tjg ksÜJ ‚d#d$td%ƒd&d'g} td(ƒd)d*d+g}t| |d,dd-t| |d,dd-  krt| |d,d.ksJ ‚ J ‚t| |d,dd-g d/¢ksJ ‚t| |d,dd-g d0¢ks,J ‚t| |d,dd-t| |d,d.dg ksAJ ‚td1ƒ\}}}}}td2ƒ\}}}	}
}|||||g}|||	|
|g}t| |d3dd4g d5¢kspJ ‚t| |d3dd4g d6¢ksJ ‚t||d3dd4|| ||  ||  |	|  |
|  ||  ||  || ||  ||  |	|  |
|  ||  || ||  |	|  |	|  |
|  ||  || ||  |	|  |
|  |
|  ||  gksìJ ‚t||d3dd4|| ||  |	|  |	|  |
|  ||  ||  || ||  |	|  |
|  |
|  ||  || ||  |	|  |
|  || ||  |	|  |
|  || ||  || ||  gksWJ ‚t| |d3dd7g d8¢ksfJ ‚t| dd … |d3dd7g d9¢ksyJ ‚t| |d d:… d3dd7g d;¢ksŒJ ‚t||d3dd7|| ||  ||  |	|  |	|  |
|  ||  || ||  ||  |
|  ||  ||  || ||  |	|  ||  gksÚJ ‚t||d3dd7|| ||  ||  || ||  |	|  ||  || |	|  |
|  ||  || ||  |	|  |
|  || ||  gks&J ‚ttd<d=„ ƒ d S )>Nr   r   r   r   r   ©r   r   r   ©r   r   r/   r   ©Úcycle)é   rA   é   r   r   r   r   iíT i\g  i9w  iL,  iu+  iÀ  iE  i8  r/   iÑN  iÀN  i¤  i;  é/   é   ií  i@  i¬  iÁ	  iÜ  i		  i;Q é   iž¤  iu‘„i°‚  iµÝ  iº²  i'™ r!   )r#   r@   r"   )é`   iúB  ih
  é®<  é½  )i#  i‚  iì  rG   rH   iº?  ix5  z	u v w x yz	p q r s tT)r0   r@   )l   ×PFn	l   \†1AHl   Í!)l   ·*£<ã	l   Ëd¯±l   çJE8ÖJì   ×uR!å ì   pj$)r9   r@   )l   ^÷tBì   XO¥ éŠÀÀrI   rJ   ì   ¹X™r¸l   	ê)l   @0©o¥ l   |	´?l   X'9ä l   :K©>†éÿÿÿÿ)l   2Q#rK   rL   l   x4*ä rJ   rM   c                   S   s   t g d¢g d¢ddS )Nr=   r>   rN   r?   r&   r'   r'   r'   r,   r-   ’   s    z)test_cyclic_convolution.<locals>.<lambda>)	r   r   r
   Úlenr   ÚZeror   r   Ú
ValueError)r7   r)   ÚuÚvÚwr   r   r5   r+   ÚrÚsÚtr8   r*   r'   r'   r,   Útest_cyclic_convolution6   sœ   ÿþ",$ÿ
ÿ$
ÿÿ
ÿþ
ÿ
ÿ6...ý
ÿ6.û
ÿ	
ÿ&6.þ
ÿü
ÿrX   c                   C   sÊ  t dd„ g dgfD ƒƒsJ ‚tg d¢g d¢ƒg d¢ksJ ‚tdgg d¢ƒg d¢ks+J ‚tddgg d¢ƒg d	¢ks:J ‚tdd
t  gd
dt  gƒddt  gksRJ ‚tdd
t  ddt  ddt d  gtd
dƒdt d  gƒtddƒtd d  tddƒtd d  tddƒtd d  gks”J ‚ttddƒtddƒgtddƒtddƒtd
dƒgƒtddƒtddƒtddƒtddƒgksÁJ ‚ttddƒtd
dƒtddƒgtd
dƒtddƒtddƒgƒtd
dƒtddƒtd d!ƒtd"d#ƒtdd$ƒgksöJ ‚ttttd
ƒgtdƒdt dt gƒtdƒt dtdƒt  tt ttd%ƒ  tdƒ td
ƒt d td
ƒtd%ƒ gks5J ‚td&d'gg d(¢ƒg d)¢ksEJ ‚td*d+gd,d-gƒg d.¢ksUJ ‚tt	d/d0„ ƒ tt
d1d0„ ƒ d S )2Nc                 s   s,    | ]}d D ]}t g ||dg kV  qqdS ))Nr   r   N)r   ©Ú.0r   r   r'   r'   r,   Ú	<genexpr>–   s   €* z'test_convolution_fft.<locals>.<genexpr>r   r=   r>   )r   é   rB   é   é   )r   r/   r   r   )r   é   é   r_   r   éüÿÿÿr   r   r   iæÿÿÿé#   é0   iÚÿÿÿét   é:   i  é¯   r/   r   r_   é    rC   é   é-   r   é   iØ  i_7  i  i±  é   rN   i	  ic  )iÉ  i±  i› )iYr¼ i|/ai¾°Xl   ñXŸ iùÃ i˜DÝioiêià )l   ÷"„$l   ÿm2„I l   èPüq^$c                   S   s
   t ttƒS ©N©r   r   r   r'   r'   r'   r,   r-   ¯   ó   
 z&test_convolution_fft.<locals>.<lambda>c                   S   s   t ttgttgƒS rl   rm   r'   r'   r'   r,   r-   °   ó    )Úallr   r	   r   r   r   r   r   r   r;   rQ   r'   r'   r'   r,   Útest_convolution_fft•   s6   0>>ÿ0"ÿ8*ÿ$2ÿ
ÿ
ÿ
ÿrq   c                      s:  d‰ d‰d‰t ‡ ‡‡fdd„g dgfD ƒƒsJ ‚tdgdgˆƒd	gks%J ‚tddgd
gˆƒddgks4J ‚tg d¢g d¢ˆ ƒg d¢ksDJ ‚tg d¢g d¢ˆƒg d¢ksTJ ‚tg d¢g d¢ˆ ƒtg d¢g d¢ˆƒksjJ ‚tg d¢g d¢ˆ ƒtg d¢g d¢ˆƒks€J ‚tt‡fdd„ƒ tt‡fdd„ƒ tt‡ fdd„ƒ d S )Nr    r!   iÊš;c                 3   s2    | ]}ˆ ˆˆfD ]}t g ||d g kV  q	qdS )r"   N©r   rY   ©r5   r+   rU   r'   r,   r[   »   s   €0 z'test_convolution_ntt.<locals>.<genexpr>r   r   r   r/   r   r   é   )iy}  i ¤  iv  i‘  )i„}  rE   iÊT )icÇigiO4¸iÁ•1i¼Ûºij¦)i9Ü i÷e0 i“ært   )iÚE  i,S  iát  i8  )iÞ  iù  ib  i²  i×  i¸  i   )rt   é   r_   éb   éC   )r   r/   r   r   r   )r_   éL   é   éN   éE   c                      s   t ddgddgˆ ƒS )Nr   r   r   r   rr   r'   )rU   r'   r,   r-   É   ó    z&test_convolution_ntt.<locals>.<lambda>c                      s   t ttgttgˆ ƒS rl   ©r   r   r   r'   )r+   r'   r,   r-   Ê   r|   c                      s   t ttˆ ƒS rl   r}   r'   )r5   r'   r,   r-   Ë   s    )rp   r   r   rQ   r;   r'   r'   rs   r,   Útest_convolution_ntt³   s&   $ ÿÿÿr~   c                     sæ  t g g ƒg ks	J ‚t g dgƒg ksJ ‚t g d¢g d¢ƒg d¢ks"J ‚t tddƒtddƒtdd	ƒgd
dtddƒgƒtddƒtddƒtddƒtddƒgksMJ ‚dtdd	ƒtd	ƒtddƒddt  g} g d¢}d	dt  ddt  d	tddƒdg}t | |ƒdtd	ƒ d dt  dtd	ƒ tddƒ dt  dtd	ƒ tddƒ dt  dtd	ƒ tddƒ dtd	ƒ d  d!t  td"dƒd#t  d$td	ƒ td%dƒ d&t  d'td	ƒ td(dƒ d)t  gksßJ ‚t ||ƒtd*d
ƒd+t  td,dƒd-t  td.d
ƒd/t  td0d	ƒd1t  d2d3t  td4dƒd5t  td6d
ƒd7t  td8dƒd9t  gks&J ‚t | d	d … |ƒtd:dƒtd; d  d<td= d  td>dƒtd? d  td@dAƒdt  tdBdƒdCdDt  dEdEgksbJ ‚tdFƒ\‰ ‰}‰‰}t ˆ ˆgˆˆgƒˆ ˆ ˆˆ  ˆ ˆ ˆˆ  gksˆJ ‚t ˆ ˆ|gˆˆgƒˆ ˆ ˆˆ  ˆ ˆ ˆˆ  |ˆ |ˆ gks«J ‚t ˆ ˆ|gˆˆ|gƒˆ ˆ ˆˆ  ||  ˆ ˆ ˆˆ  ˆ | |ˆ  ˆ| |ˆ  gksÛJ ‚tt‡‡fdGdH„ƒ tt‡ ‡‡‡fdIdH„ƒ d S )JNr   r=   r>   )rg   r\   r^   r]   r   r   r/   r   r   r   r   ri   é=   é   i  é“   i£  é*   )é^   é3   é5   ri   rA   r]   r\   r…   in  é›   iØ  rk   é‡   rƒ   ié  éA   r„   i†  r\   iÄ  iÖ  i¡  éÿ   rA   i"  i	  r]   i\  éá   iÉ  iÝ  iG  i^  i{  i  iÄ  i'  iû  i9  is  iE  i—  é4   iµ  é[   iÊÿÿÿi%  rN   éÌ   é…   rb   i™  é   é8   rg   é(   r   úu v w x y zc                      ó
   t ˆ ˆƒS rl   ©r   r'   r   r'   r,   r-   ô   rn   z'test_convolution_fwht.<locals>.<lambda>c                      s   t ˆˆ ˆ ˆ ƒS rl   r”   r'   ©rR   rS   r   r   r'   r,   r-   õ   ro   )r   r   r   r	   r   r   r;   )r7   r)   r8   rT   Úzr'   r•   r,   Útest_convolution_fwhtÎ   sF   ,"ÿ&$
ù(	: þ2:ÿ8*
ÿB
ÿr—   c                     s*  t g g ƒg ks	J ‚t g tddƒgƒg ksJ ‚t dtd d  gtddƒgƒdtd d  gks1J ‚dtddƒtdƒddt  g} g d¢}dtd d  ddt  dtddƒd	g}t | |ƒd
tddƒdd
tdƒ  dtdƒ tddƒ dt  ddddtdƒ  dtdƒ d dt  gksJ ‚t ||ƒdtd d  dtd d  dtd d  tddƒtd d  ddt  dtd  d  d!d"t  td#dƒd$t  gksÐJ ‚t | |ƒt || ƒksÜJ ‚t | d d… |ƒd
tddƒdtd%dƒdddd&gks÷J ‚t | d d… |ƒdtd d  d"td' d	  dtd(dƒd	dd)d)gksJ ‚td*ƒ\‰ }}‰}‰t ˆ ||gˆ|gƒˆ ˆ ˆ | |ˆ  |ˆ || gksEJ ‚t ˆ ||ˆg|ˆgƒˆ | ˆ ˆ ||  || |ˆ ˆ|  gksiJ ‚t ˆ |gˆ|ˆgƒt ˆ|ˆgˆ |gƒks€J ‚tt‡‡fd+d,„ƒ tt‡ fd-d,„ƒ d S ).Nr   r   r/   r   r   r   r   )é@   éG   é7   rC   é!   é   rk   r   r˜   i  rš   r™   i   i@  r›   éT   rk   rœ   é   é¥   éÀ   é€   iÎ  ie  én   i•  iá  i£  é   i{  iï  i  é
   i˜  éi   i   r`   éI   éÄ   r   r’   c                      r“   rl   )r   r'   ©r   r–   r'   r,   r-     rn   z)test_convolution_subset.<locals>.<lambda>c                      ó   t tddƒˆ ƒS ©Nr   r   )r   r   r'   ©rR   r'   r,   r-     r.   )r   r   r	   r   r   r   r;   ©r7   r)   r8   rS   rT   r   r'   ©rR   r   r–   r,   Útest_convolution_subsetø   s@   6(  $
þ$"
ýÿ0
ÿ>*
ÿ
ÿr®   c                     sâ  t g g ƒg ks	J ‚t g tddƒgƒg ksJ ‚t dtd d  gtddƒgƒdtd d  gks1J ‚dtddƒtdƒdd	t  g} g d
¢}dtd d  ddt  dtddƒdg}t | |ƒdtddƒddtdƒ  dtdƒ d dt  dtddƒddtdƒ  dtdƒ tddƒ dt  gks’J ‚t ||ƒddt  dd t  d!td" d  td#dƒtd$ d  d%td& d  d'td( d  d)td* d  td+dƒd,t  gksÓJ ‚t | |ƒt || ƒksßJ ‚t ||d d-… ƒddt  dd t  d!td" d  td#dƒtd$ d  d.td& d  d/td( d  d0td* d  td1dƒd,t  gks%J ‚t | |d d-… ƒdtd d  td2dƒtd3 d4  dd5tdƒ  dtdƒ t d  d6d7tdƒ d  dtdƒ t  td8 d  gkslJ ‚td9ƒ\‰ }}‰}‰t ˆ ||gˆ|gƒˆ ˆ ˆ | |ˆ  ||  |ˆ || gks™J ‚t ˆ ||ˆg|ˆgƒˆ | ˆ ˆ ||  |ˆ  || |ˆ ˆ|  ˆˆ  gksÅJ ‚t ˆ |gˆ|ˆgƒt ˆ|ˆgˆ |gƒksÜJ ‚tt‡‡fd:d;„ƒ tt‡ fd<d;„ƒ d S )=Nr   r   r/   r   r   r   r   r   r   )éB   éQ   é_   é1   é%   éY   ry   r„   éH   rk   rŒ   r¯   ig  r±   é¡   é‚   i  i;
  r³   iŸ  ry   é6   r´   i5  i  éÆ   é,   i<  iŽ)  i„  é¾   i¼¦  iây  i%  éJ   i“V  ik  i})  é"   i|` iÈ  rN   éo   i%  i­  i7[  iS  i  rt   r¤   imþÿÿi  ir1  r’   c                      r“   rl   )r   r'   r¨   r'   r,   r-   F  rn   z'test_covering_product.<locals>.<lambda>c                      r©   rª   )r   r   r'   r«   r'   r,   r-   G  r.   )r   r   r	   r   r   r   r;   r¬   r'   r­   r,   Útest_covering_product  sL   6( 
ý"
ý$"ý6.þ*
ÿ:
ÿ
ÿr¿   c               	      s„  t g g ƒg ks	J ‚t g tddƒgƒg ksJ ‚t dtd d  gtddƒgƒdtd d  gks1J ‚dtdƒtddƒdt  ddt  g} g d	¢}dtd d  dd
t  dtddƒdg}t | |ƒdtdƒ tddƒ dt  dtdƒ d dt  tddƒdt  ddt  ddddgksJ ‚t ||ƒtddƒtd d  tddƒdt  tddƒtddƒddddgks¶J ‚t | |ƒt || ƒksÂJ ‚t |dd … |d d… ƒtddƒtd  d  td!dƒd"t  td#dƒtd$dƒddddgksñJ ‚t | |d d%… ƒtd&dƒd'tdƒ  dtdƒ t d  td( d)  d*dtdƒ  d
tdƒ t  d+t  td,dƒd-t  dgks5J ‚td.ƒ\‰ }}‰}‰t ˆ ||gˆ|gƒˆ ˆ ˆ |  |ˆ  |ˆ  ||  || ddgksfJ ‚t ˆ ||ˆg|ˆgƒˆ | ˆ ˆ  ||  ||  |ˆ  ˆ|  |ˆ ˆˆ  ddgks–J ‚t ˆ |gˆ|ˆgƒt ˆ|ˆgˆ |gƒks­J ‚tt‡‡fd/d0„ƒ tt‡ fd1d0„ƒ d S )2Nr   r   r/   r   r   r   r   r   )rw   r„   rˆ   rc   é$   éO   r]   r   ru   r\   éÃ   iC  i^  é²   i  iŽ  iI  i@  r    iP  r   i)ö i1%  iœE  iB  i@K  i6  rN   iý  i®!  i2  i€  iô,  éü   éþÿÿÿiÿÿÿr¤   iÍ  r‘   iÕÿÿÿr™   éõ   r   r’   c                      r“   rl   )r   r'   r¨   r'   r,   r-   m  rn   z+test_intersecting_product.<locals>.<lambda>c                      s   t ˆ tddƒƒS )Nr   r   )r   r   r'   r«   r'   r,   r-   n  r.   )r   r   r	   r   r   r   r;   r¬   r'   r­   r,   Útest_intersecting_productJ  sD   6&($&
þ(
ÿ,(
ÿ48ÿ
ÿ2
ÿB
ÿ
ÿrÇ   N)!Úsympy.core.numbersr   r   r   Ú&sympy.functions.elementary.exponentialr   Ú(sympy.functions.elementary.miscellaneousr   Ú
sympy.corer   r   r	   Úsympy.discrete.convolutionsr
   r   r   r   r   r   r   Úsympy.testing.pytestr   Ú	sympy.abcr   r   r<   rX   rq   r~   r—   r®   r¿   rÇ   r'   r'   r'   r,   Ú<module>   s    $+_*&,