U
    L?hÀE  ã                   @   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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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Úconvolution_int)Úraises©ÚxÚyc                     sn  dt ddƒtdƒt ddƒg‰ ddddddg‰dddddg‰d	d
ddg‰dt ddƒt ddƒg} tˆ ˆƒtˆ ˆƒkstt‚tˆ ˆddtˆ ˆddks”t‚tˆ ˆddtˆˆ ddks´t‚tˆ ˆdd … ddtˆdd … ˆ ddksät‚d‰d‰tˆˆˆdtˆˆˆdkst‚tˆˆˆdtˆˆˆdks0t‚tˆˆˆdtˆˆˆdksRt‚tt‡‡‡fdd„ƒ tt‡‡‡fdd„ƒ tˆ ˆddtˆ ˆƒksœt‚tˆ ˆddtˆ ˆƒksºt‚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rXtˆ ˆddd  krXtˆ ˆddks^n t‚tˆ ˆddtˆ ˆƒks|t‚tt‡ ‡fdd„ƒ tt‡‡fdd„ƒ tt‡ ‡‡fd d„ƒ td!gd!gƒt
d!gd!gƒksÜt‚tˆˆƒt
ˆˆƒksöt‚tt ddƒgt ddƒgƒt ddƒgks"t‚tˆ| ƒd"d#t d$d%ƒt d&dƒt d'dƒt d(dƒt d)d%ƒt d*dƒgksjt‚d S )+Né   é   é   é   é	   é   é   é   iŽ  i¬  i  i°  éÿÿÿÿ©Údpsé €;éL  ©Úprimec                      s   t ˆ ˆdˆdS )Nr   ©r    r$   ©r
   © ©ÚbÚdÚqr'   úX/var/www/html/venv/lib/python3.8/site-packages/sympy/discrete/tests/test_convolutions.pyÚ<lambda>"   ó    z"test_convolution.<locals>.<lambda>c                      s   t ˆ ˆdˆdS )Né   r%   r&   r'   r(   r'   r,   r-   #   r.   T)ÚdyadicFc                      s   t ˆ ˆdddS ©Nr   T)r    r0   r&   r'   )r)   r*   r'   r,   r-   (   r.   c                      s   t ˆ ˆˆddS ©NT)r$   r0   r&   r'   )r)   r*   Úpr'   r,   r-   )   r.   c                      s   t ˆ ˆdddS r1   r&   r'   ©Úar)   r'   r,   r-   *   r.   c                      s   t ˆ ˆˆddS r2   r&   r'   )r)   Úcr3   r'   r,   r-   +   r.   )Úsubset©r7   r0   c                      s   t ˆ ˆdddS )NTr8   r&   r'   r4   r'   r,   r-   2   r.   c                      s   t ˆ ˆdddS )NTr/   )r7   r    r&   r'   )r6   r*   r'   r,   r-   3   r.   c                      s   t ˆ ˆdˆdS )NT)r7   r$   r&   r'   )r5   r6   r+   r'   r,   r-   4   r.   r   i÷ÿÿÿé
   éï   é   é"   é    é+   éq   é   )r   r   r
   r   ÚAssertionErrorr   r   Ú	TypeErrorr   r   r   )Úer'   )r5   r)   r6   r*   r3   r+   r,   Útest_convolution   sP      0"""ÿ
þ",  þrD   c               	   C   sª  dt ddƒtdƒt ddƒg} ddddddg}tdddgdddgd	d
tdddgdddgdd
  kr~tdddgdddgƒks„n t‚tdddgdddgdd
dddgks¬t‚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.t‚t| |dd
t ddƒt ddƒt ddƒt ddƒgksft‚t| |dd
t ddƒt ddƒt ddƒt ddƒt ddƒt dd ƒgks®t‚t| |dd
t| |d	d
tjg ksØt‚d!d"td#ƒd$d%g} td&ƒd'd(d)g}t| |d*d	d+t| |d*dd+  kr4t| |d*d,ks:n t‚t| |d*dd+d-d.d/d0d1gks^t‚t| |d*dd+d2d3d4d0d1d5d6gks†t‚t| |d*dd+t| |d*d,d	g ks°t‚td7ƒ\}}}}}td8ƒ\}}}	}
}|||||g}|||	|
|g}t| |d9dd:d;d<d=gkst‚t| |d9dd:d>d?d@dAdBgks4t‚t||d9dd:|| ||  ||  |	|  |
|  ||  ||  || ||  ||  |	|  |
|  ||  || ||  |	|  |	|  |
|  ||  || ||  |	|  |
|  |
|  ||  gkst‚t||d9dd:|| ||  |	|  |	|  |
|  ||  ||  || ||  |	|  |
|  |
|  ||  || ||  |	|  |
|  || ||  |	|  |
|  || ||  || ||  gksät‚t| |d9ddCdDdEdFdAdBdGdHgkst‚t| dd … |d9ddCdIdJdKdLgks6t‚t| |d dM… d9ddCdNdEdFdOdBdGgksdt‚t||d9ddC|| ||  ||  |	|  |	|  |
|  ||  || ||  ||  |
|  ||  ||  || ||  |	|  ||  gks t‚t||d9ddC|| ||  ||  || ||  |	|  ||  || |	|  |
|  ||  || ||  |	|  |
|  || ||  gks˜t‚tt	dPdQ„ ƒ d S )RNr   r   r   r   r   r   r   r/   r   ©Úcycleé   é   r   iíT i\g  i9w  iL,  iu+  iÀ  iE  i8  iÑN  iÀN  i¤  i;  é/   é   ií  i@  i¬  iÁ	  iÜ  i		  i;Q é   iž¤  iu‘„i°‚  iµÝ  iº²  i'™ r"   )r$   rF   r#   é`   iúB  ih
  i®<  i½  i#  i‚  iì  iº?  ix5  z	u v w x yz	p q r s tT)r0   rF   l   ×PFn	l   \†1AHl   Í!l   ·*£<ã	l   Ëd¯±l   çJE8ÖJl   ×uR!å l   pj$)r7   rF   l   ^÷tBl   XO¥ iŠÀÀl   ¹X™r¸l   	êl   @0©o¥ l   |	´?l   X'9ä l   :K©>†r   l   2Q#l   x4*ä c                   S   s   t dddgdddgddS )	Nr   r   r   r   r   r/   r   rE   r&   r'   r'   r'   r,   r-      r.   z)test_cyclic_convolution.<locals>.<lambda>)
r   r   r
   rA   Úlenr   ZZeror   r   Ú
ValueError)r5   r)   ÚuÚvÚwr   r   r3   r+   ÚrÚsÚtr6   r*   r'   r'   r,   Útest_cyclic_convolutionA   sÖ    ÿþ(,$ÿ
 ÿ$  ÿÿ
ÿ
þ ÿ   ÿÿ
ÿ
   ÿ6...ýÿ
6.ûÿ
	    þ
ÿ
    ÿ6.þÿ
üÿ
rU   c                   C   sì  t dd„ g dgfD ƒƒst‚tdddgdddgƒdd	d
ddgksDt‚tdgdddgƒdddgksdt‚tddgdddgƒddddgksˆt‚tddt  gddt  gƒddt  gks¸t‚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>t‚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št‚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t‚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„t‚td&d'gd(d)d*gƒd+d,d-d.gksªt‚td/d0gd1d2gƒd3d4d5gksÌt‚t	t
d6d7„ ƒ t	td8d7„ ƒ d S )9Nc                 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   r   r/   é   rH   é   é   r   é   é   éüÿÿÿiæÿÿÿé#   é0   iÚÿÿÿét   é:   i  é¯   r   r=   rI   é   é-   r   é   iØ  i_7  i  i±  r;   r   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-   º   r.   z&test_convolution_fft.<locals>.<lambda>c                   S   s   t ttgttgƒS rg   rh   r'   r'   r'   r,   r-   »   r.   )ÚallrA   r   r	   r   r   r   r   r   r   rB   rN   r'   r'   r'   r,   Útest_convolution_fft    s8    ( $0>>ÿ
0"ÿ
8*ÿ
$2 ÿÿ

ÿ
ÿ
rj   c                      sŽ  d‰ d‰d‰t ‡ ‡‡fdd„g dgfD ƒƒs0t‚tdgdgˆƒd	gksJt‚tddgd
gˆƒddgksht‚tddddgdddgˆ ƒddddddgks–t‚tddddgdddd gˆƒd!d"d#d$d%d&d'gksÈt‚tdd(d)d*d+gdd	d,dd-gˆ ƒtdd(d)d*d+gdd	d,dd-gˆƒkst‚tdd(d)d*d+gd)d.d/d0d1gˆ ƒtdd(d)d*d+gd)d.d/d0d1gˆƒksTt‚tt‡fd2d3„ƒ tt‡fd4d3„ƒ tt‡ fd5d3„ƒ d S )6Nr!   r"   iÊš;c                 3   s0   | ](}ˆ ˆˆfD ]}t g ||d g kV  qqdS )r#   N©r   rV   ©r3   r+   rR   r'   r,   rX   Æ   s       z'test_convolution_ntt.<locals>.<genexpr>r   r   r   r/   r   r   é   iy}  i ¤  iv  i‘  i„}  rK   iÊT icÇigiO4¸iÁ•1i¼Ûºij¦i9Ü i÷e0 i“æiÚE  i,S  iát  i8  iÞ  iù  ib  i²  i×  i¸  i   é   r\   éb   éC   r   r   éL   é   éN   éE   c                      s   t ddgddgˆ ƒS )Nr   r   r   r   rk   r'   )rR   r'   r,   r-   Ô   r.   z&test_convolution_ntt.<locals>.<lambda>c                      s   t ttgttgˆ ƒS rg   ©r   r   r   r'   )r+   r'   r,   r-   Õ   r.   c                      s   t ttˆ ƒS rg   ru   r'   )r3   r'   r,   r-   Ö   r.   )ri   rA   r   r   rN   rB   r'   r'   rl   r,   Útest_convolution_ntt¾   s2    $    ÿ
ÿÿ
ÿ
rv   c                     sú  t g g ƒg kst‚t g dgƒg ks&t‚t dddgdddgƒddd	d
gksLt‚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s¢t‚dtddƒtdƒtddƒddt  g} dddddd
dg}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Òt‚t ||ƒtd(dƒd)t  td*dƒd+t  td,dƒd-t  td.dƒd/t  d0d1t  td2dƒd3t  td4dƒd5t  td6dƒd7t  gks`t‚t | dd … |ƒtd8dƒtd9 d  d:td; d  td<dƒtd= d  td>d?ƒdt  td@dƒddAt  dBdBgksØt‚tdCƒ\‰ ‰}‰‰}t ˆ ˆgˆˆgƒˆ ˆ ˆˆ  ˆ ˆ ˆˆ  gks$t‚t ˆ ˆ|gˆˆgƒˆ ˆ ˆˆ  ˆ ˆ ˆˆ  |ˆ |ˆ gksjt‚t ˆ ˆ|gˆˆ|gƒˆ ˆ ˆˆ  ||  ˆ ˆ ˆˆ  ˆ | |ˆ  ˆ| |ˆ  gksÊt‚tt‡‡fdDdE„ƒ tt‡ ‡‡‡fdFdE„ƒ d S )GNr   r   r   r   r   r/   r=   rY   r[   rZ   r   r   re   é=   r@   i  é“   i£  é*   é^   é3   é5   rG   in  é›   iØ  r;   é‡   ié  éA   i†  iÄ  iÖ  i¡  éÿ   i"  i	  i\  éá   iÉ  iÝ  iG  i^  i{  i  iÄ  i'  iû  i9  is  iE  i—  é4   iµ  é[   iÊÿÿÿi%  r   éÌ   é…   r_   i™  é   é8   é(   r   úu v w x y zc                      s
   t ˆ ˆƒS rg   ©r   r'   r   r'   r,   r-   ÿ   r.   z'test_convolution_fwht.<locals>.<lambda>c                      s   t ˆˆ ˆ ˆ ƒS rg   rŠ   r'   ©rO   rP   r   r   r'   r,   r-      r.   )r   rA   r   r   r	   r   r   rB   )r5   r)   r6   rQ   Úzr'   r‹   r,   Útest_convolution_fwhtÙ   sX    &,"ÿ&$ù	(  
  þ2   
  ÿ8*ÿ
Bÿ
r   c                     s<  t g g ƒg kst‚t g tddƒgƒg ks,t‚t dtd d  gtddƒgƒdtd d  gksbt‚dtddƒtdƒddt  g} dd	d
ddddg}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s*t‚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®t‚t | |ƒt || ƒksÈt‚t | d d… |ƒdtddƒd
td%dƒdddd&gks t‚t | d d… |ƒdtd d  d"td' d  dtd(dƒddd)d)gksJt‚td*ƒ\‰ }}‰}‰t ˆ ||gˆ|gƒˆ ˆ ˆ | |ˆ  |ˆ || gksœt‚t ˆ ||ˆg|ˆgƒˆ | ˆ ˆ ||  || |ˆ ˆ|  gksät‚t ˆ |gˆ|ˆgƒt ˆ|ˆgˆ |gƒkst‚tt‡‡fd+d,„ƒ tt‡ fd-d,„ƒ d S ).Nr   r   r/   r   r   r   r   é@   éG   é7   rI   é!   é   r;   r   i  i   i@  éT   é   é¥   éÀ   é€   iÎ  ie  én   i•  iá  i£  é   i{  iï  i  r9   i˜  éi   i   r]   éI   éÄ   r   r‰   c                      s
   t ˆ ˆƒS rg   )r   r'   ©r   rŒ   r'   r,   r-   %  r.   z)test_convolution_subset.<locals>.<lambda>c                      s   t tddƒˆ ƒS ©Nr   r   )r   r   r'   ©rO   r'   r,   r-   &  r.   )r   rA   r   r	   r   r   r   rB   ©r5   r)   r6   rP   rQ   r   r'   ©rO   r   rŒ   r,   Útest_convolution_subset  sL    6(    þ$ 
 
 ýÿ
0ÿ
>*ÿ
ÿ
r¢   c                     sò  t g g ƒg kst‚t g tddƒgƒg ks,t‚t dtd d  gtddƒgƒdtd d  gksbt‚dtddƒtdƒdd	t  g} d
ddddddg}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s0t‚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´t‚t | |ƒt || ƒksÎt‚t ||d d.… ƒddt  d d!t  d"td# d  td$dƒtd% d  d/td' d  d0td) d  d1td+ d  td2dƒd-t  gksZt‚t | |d d.… ƒdtd d  td3dƒtd4 d5  dd6tdƒ  dtdƒ t d  d7d8tdƒ d  dtdƒ t  td9 d  gksèt‚td:ƒ\‰ }}‰}‰t ˆ ||gˆ|gƒˆ ˆ ˆ | |ˆ  ||  |ˆ || gksBt‚t ˆ ||ˆg|ˆgƒˆ | ˆ ˆ ||  |ˆ  || |ˆ ˆ|  ˆˆ  gksšt‚t ˆ |gˆ|ˆgƒt ˆ|ˆgˆ |gƒksÈt‚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   rr   r{   éH   r;   rƒ   ig  é¡   é‚   i  i;
  iŸ  é6   i5  i  éÆ   é,   i<  iŽ)  i„  é¾   i¼¦  iây  i%  éJ   i“V  ik  i})  r<   i|` iÈ  r   éo   i%  i­  i7[  iS  i  rm   r9   imþÿÿi  ir1  r‰   c                      s
   t ˆ ˆƒS rg   )r   r'   r   r'   r,   r-   Q  r.   z'test_covering_product.<locals>.<lambda>c                      s   t tddƒˆ ƒS rž   )r   r   r'   rŸ   r'   r,   r-   R  r.   )r   rA   r   r	   r   r   r   rB   r    r'   r¡   r,   Útest_covering_product)  s^    6(   ý   ý$   ý ".þ*ÿ
:ÿ
ÿ
r²   c               	      s–  t g g ƒg kst‚t g tddƒgƒg ks,t‚t dtd d  gtddƒgƒdtd d  gksbt‚dtdƒtddƒdt  ddt  g} d	d
dddddg}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s*t‚t ||ƒtddƒtd d  td dƒd!t  td"dƒtddƒd#dddgkszt‚t | |ƒt || ƒks”t‚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ôt‚t | |d d+… ƒtd,dƒd-tdƒ  dtdƒ t d  td. d/  d0dtdƒ  dtdƒ t  d1t  td2dƒd3t  dgks|t‚td4ƒ\‰ }}‰}‰t ˆ ||gˆ|gƒˆ ˆ ˆ |  |ˆ  |ˆ  ||  || ddgksÞt‚t ˆ ||ˆg|ˆgƒˆ | ˆ ˆ  ||  ||  |ˆ  ˆ|  |ˆ ˆˆ  ddgks>t‚t ˆ |gˆ|ˆgƒt ˆ|ˆgˆ |gƒkslt‚tt‡‡fd5d6„ƒ tt‡ fd7d6„ƒ d S )8Nr   r   r/   r   r   r   r   r   rp   r{   r   r`   é$   éO   rZ   r   rn   rY   éÃ   iC  i^  é²   i  iŽ  iI  i@  r–   iP  r   i)ö i1%  iœE  iB  i@K  i6  r   iý  i®!  i2  i€  iô,  éü   éþÿÿÿéÿÿÿr9   iÍ  rˆ   iÕÿÿÿr   éõ   r“   r‰   c                      s
   t ˆ ˆƒS rg   )r   r'   r   r'   r,   r-   x  r.   z+test_intersecting_product.<locals>.<lambda>c                      s   t ˆ tddƒƒS )Nr   r   )r   r   r'   rŸ   r'   r,   r-   y  r.   )r   rA   r   r	   r   r   r   rB   r    r'   r¡   r,   Útest_intersecting_productU  sj    6&($ 
    þ      ÿ,      ÿ4&  ÿÿ
2ÿ
Bÿ
ÿ
r»   c                   C   sR  t dgdgƒdgkst‚t ddgdgƒdgks2t‚t dddgdddgƒddd	d
dgksZt‚t dgdddgƒdddgkszt‚t ddgdddgƒddddgksžt‚t ddddgdddgƒddddddgksÊt‚t ddddgddddgƒddddddgksøt‚t ddddddddgddddddddd g	ƒd!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0gksNt‚d S )1Nr   r   r   r   r   r   r/   rY   rH   rZ   r[   r   r\   r]   r9   éûÿÿÿiÎÿÿÿéU   r_   iÔÿÿÿr   r¸   i«þÿÿi¹ÿÿÿr¹   r>   éW   rm   iY  i²ÿÿÿiùÿÿÿi§ÿÿÿiWùÿÿié÷ÿÿi”öÿÿiöïÿÿií2þÿiÒÙÿÿiŽe  i¥  i…  ióyÿÿiK  iÖ—  im  i¼  i¬îÿÿiÁáÿÿ)r   rA   r'   r'   r'   r,   Útest_convolution_int|  s*    ( $,.þ      ÿýr¿   N)#Zsympy.core.numbersr   r   r   Z&sympy.functions.elementary.exponentialr   Z(sympy.functions.elementary.miscellaneousr   Z
sympy.corer   r   r	   Zsympy.discrete.convolutionsr
   r   r   r   r   r   r   r   Zsympy.testing.pytestr   Z	sympy.abcr   r   rD   rU   rj   rv   r   r¢   r²   r»   r¿   r'   r'   r'   r,   Ú<module>   s   (5_*&,'