o
    à8Va6B  ã                   @   s´   d dl mZmZmZmZ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 )é    )ÚsqrtÚpiÚEÚexpÚRational)Ú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'   úH/usr/lib/python3/dist-packages/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-   .   r.   c                      r1   )NTr/   )r9   r   r&   r'   )r8   r*   r'   r,   r-   /   r.   c                      r$   )NT)r9   r#   r&   r'   )r7   r8   r+   r'   r,   r-   0   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   ZZeror   r   Ú
ValueError)r7   r)   ÚuÚvÚwr   r   r5   r+   ÚrÚsÚtr8   r*   r'   r'   r,   Útest_cyclic_convolution4   sœ   ÿþ",$ÿ
ÿ$
ÿÿ
ÿþ
ÿ
ÿ6...ý
ÿ6.û
ÿ	
ÿ&6.þ
ÿü
ÿrW   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tddƒt  gtd
dƒtddƒt  gƒtddƒttddƒ  tddƒttddƒ  tddƒt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s:J ‚td&d'gg d(¢ƒg d)¢ksJJ ‚td*d+gd,d-gƒg d.¢ksZJ ‚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 rk   rl   r'   r'   r'   r,   r-   ®   ó    )Úallr   r	   r   r   r   r   r   r   r;   rP   r'   r'   r'   r,   Útest_convolution_fft“   s6   0BDÿ0"ÿ8*ÿ$2ÿ
ÿ
ÿ
ÿrp   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   rX   ©r5   r+   rT   r'   r,   rZ   ¹   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“ærs   )iÚE  i,S  iát  i8  )iÞ  iù  ib  i²  i×  i¸  i   )rs   é   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   rq   r'   )rT   r'   r,   r-   Ç   ó    z&test_convolution_ntt.<locals>.<lambda>c                      s   t ttgttgˆ ƒS rk   ©r   r   r   r'   )r+   r'   r,   r-   È   r{   c                      s   t ttˆ ƒS rk   r|   r'   )r5   r'   r,   r-   É   s    )ro   r   r   rP   r;   r'   r'   rr   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td;dƒ  d<ttd=dƒ  td>dƒttd?dƒ  td@dAƒdt  tdBdƒdCdDt  dEdEgkseJ ‚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>   )rf   r[   r]   r\   r   r   r/   r   r   r   r   rh   é=   é   i  é“   i£  é*   )é^   é3   é5   rh   rA   r\   r[   r„   in  é›   iØ  rj   é‡   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   éÌ   é…   ra   i™  é   é8   rf   é(   r   úu v w x y zc                      ó
   t ˆ ˆƒS rk   ©r   r'   r   r'   r,   r-   ò   rm   z'test_convolution_fwht.<locals>.<lambda>c                      s   t ˆˆ ˆ ˆ ƒS rk   r“   r'   ©rQ   rR   r   r   r'   r,   r-   ó   rn   )r   r   r   r	   r   r   r;   )r7   r)   r8   rS   Úzr'   r”   r,   Útest_convolution_fwhtÌ   sF   ,"ÿ&$
ù(	: þ6<ÿ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tddƒ  gtddƒgƒdttddƒ  gks3J ‚dtddƒtdƒddt  g} g d¢}dt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s’J ‚t ||ƒdttddƒ  dttddƒ  dttddƒ  tddƒttddƒ  ddt  dt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tddƒ  d"ttd'd	ƒ  dtd(dƒd	dd)d)gks&J ‚td*ƒ\‰ }}‰}‰t ˆ ||gˆ|gƒˆ ˆ ˆ | |ˆ  |ˆ || gksOJ ‚t ˆ ||ˆg|ˆgƒˆ | ˆ ˆ ||  || |ˆ ˆ|  gkssJ ‚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   é!   é   rj   r   r—   i  r™   r˜   i   i@  rš   éT   rj   r›   é   é¥   éÀ   é€   iÎ  ie  én   i•  iá  i£  é   i{  iï  i  é
   i˜  éi   i   r_   éI   éÄ   r   r‘   c                      r’   rk   )r   r'   ©r   r•   r'   r,   r-     rm   z)test_convolution_subset.<locals>.<lambda>c                      ó   t tddƒˆ ƒS ©Nr   r   )r   r   r'   ©rQ   r'   r,   r-     r.   )r   r   r	   r   r   r   r;   ©r7   r)   r8   rR   rS   r   r'   ©rQ   r   r•   r,   Útest_convolution_subsetö   s@   :*  $
þ(&
ýÿ4
ÿ>*
ÿ
ÿr­   c                     s  t g g ƒg ks	J ‚t g tddƒgƒg ksJ ‚t dttddƒ  gtddƒgƒdttddƒ  gks3J ‚dtddƒtdƒdd	t  g} g d
¢}dt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td"dƒ  td#dƒttd$dƒ  d%ttd&dƒ  d'ttd(dƒ  d)t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td"dƒ  td#dƒttd$dƒ  d.ttd&dƒ  d/ttd(dƒ  d0ttd*dƒ  td1dƒd,t  gks2J ‚t | |d d-… ƒdttddƒ  td2dƒttd3d4ƒ  dd5tdƒ  dtdƒ t d  d6d7tdƒ d  dtdƒ t  ttd8dƒ  gks|J ‚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   rx   rƒ   éH   rj   r‹   r®   ig  r°   é¡   é‚   i  i;
  r²   iŸ  rx   é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  rs   r£   imþÿÿi  ir1  r‘   c                      r’   rk   )r   r'   r§   r'   r,   r-   D  rm   z'test_covering_product.<locals>.<lambda>c                      r¨   r©   )r   r   r'   rª   r'   r,   r-   E  r.   )r   r   r	   r   r   r   r;   r«   r'   r¬   r,   Útest_covering_product  sL   :* 
ý&  
ý$&  ý 80þ*
ÿ:
ÿ
ÿr¾   c               	      s  t g g ƒg ks	J ‚t g tddƒgƒg ksJ ‚t dttddƒ  gtddƒgƒdttddƒ  gks3J ‚dtdƒtddƒdt  ddt  g} g d	¢}dt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s’J ‚t ||ƒtddƒt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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td(d)ƒ  d*dtdƒ  d
tdƒ t  d+t  td,dƒd-t  dgks;J ‚td.ƒ\‰ }}‰}‰t ˆ ||gˆ|gƒˆ ˆ ˆ |  |ˆ  |ˆ  ||  || ddgkslJ ‚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   )rv   rƒ   r‡   rb   é$   éO   r\   r   rt   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’   rk   )r   r'   r§   r'   r,   r-   k  rm   z+test_intersecting_product.<locals>.<lambda>c                      s   t ˆ tddƒƒS )Nr   r   )r   r   r'   rª   r'   r,   r-   l  r.   )r   r   r	   r   r   r   r;   r«   r'   r¬   r,   Útest_intersecting_productH  sD   :&*$&
þ(
ÿ.(
ÿ68ÿ
ÿ2
ÿB
ÿ
ÿrÆ   N)Zsympyr   r   r   r   r   Z
sympy.corer   r   r	   Zsympy.discrete.convolutionsr
   r   r   r   r   r   r   Zsympy.testing.pytestr   Z	sympy.abcr   r   r<   rW   rp   r}   r–   r­   r¾   rÆ   r'   r'   r'   r,   Ú<module>   s    $+_*&,