o
    jgŔ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                     sT  dt ddtdt ddg g d˘g d˘g d˘dt ddt ddg} t t ks1J t d	d
t d	d
ksAJ t dd
t dd
ksQJ t dd  dd
tdd   dd
ksiJ ddtdtdks}J 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s1J 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saJ tt	ksnJ tt ddgt ddg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 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)   ú^/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/discrete/tests/test_convolutions.pyÚ<lambda>"   ó    z"test_convolution.<locals>.<lambda>c                      r&   )Né   r'   r(   r)   r*   r)   r.   r/   #   r0   T)ÚdyadicFc                      ó   t  dddS ŠNr   T)r!   r2   r(   r)   )r+   r,   r)   r.   r/   (   r0   c                      ó   t  ddS ŠNT)r%   r2   r(   r)   )r+   r,   Úpr)   r.   r/   )   r0   c                      r3   r4   r(   r)   ŠÚar+   r)   r.   r/   *   r0   c                      r5   r6   r(   r)   )r+   Úcr7   r)   r.   r/   +   r0   )ÚsubsetŠr;   r2   c                      s   t  dddS )NTr<   r(   r)   r8   r)   r.   r/   2   r0   c                      r3   )NTr1   )r;   r!   r(   r)   )r:   r,   r)   r.   r/   3   r0   c                      r&   )NT)r;   r%   r(   r)   )r9   r:   r-   r)   r.   r/   4   r0   r   r   r   i÷˙˙˙é
   éď   é   é"   é    é+   éq   é   )
r   r   r
   r   r   r   Ú	TypeErrorr   r   r   )Úer)   )r9   r+   r:   r,   r7   r-   r.   Útest_convolution   sL     0   
˙ţ",ţrG   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   r1   r   ŠÚcycle)é   rL   é   r   r   r   r   iíT i\g  i9w  iL,  iu+  iŔ  iE  i8  r1   iŃN  iŔN  i¤  i;  é/   é   ií  i@  iŹ  iÁ	  iÜ  i		  i;Q é   i¤  iui°  iľÝ  iş˛  i' r#   )r%   rK   r$   )é`   iúB  ih
  éŽ<  é˝  )i#  i  iě  rR   rS   iş?  ix5  z	u v w x yz	p q r s tT)r2   rK   )l   ×PFn	l   \1AHl   Í!)l   ˇ*Ł<ă	l   ËdŻąl   çJE8ÖJě   ×uR!ĺ ě   pj$)r;   rK   )l   ^÷tBě   XOĽ éŔŔrT   rU   ě   šXr¸l   	ę)l   @0ŠoĽ l   |	´?l   X'9ä l   :KŠ>r   )l   2Q#rV   rW   l   x4*ä rU   rX   c                   S   s   t g d˘g d˘ddS )NrH   rI   r   rJ   r(   r)   r)   r)   r.   r/      s    z)test_cyclic_convolution.<locals>.<lambda>)	r   r   r
   Úlenr   ÚZeror   r   Ú
ValueError)r9   r+   ÚuÚvÚwr   r   r7   r-   ÚrÚsÚtr:   r,   r)   r)   r.   Útest_cyclic_convolutionA   s   ˙ţ",$˙
˙$
˙˙
˙ţ
˙
˙6...ý
˙6.ű
˙	
˙&6.ţ
˙ü
˙rb   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   rH   rI   Šr   é   rM   é   é   Šr   r1   r   r   Šr   é   é   rl   r   éü˙˙˙r   r   r   ić˙˙˙é#   é0   iÚ˙˙˙ét   é:   i  éŻ   r1   r   rl   rA   rN   é   é-   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/   ş   ó   
 z&test_convolution_fft.<locals>.<lambda>c                   S   s   t ttgttgS rw   rx   r)   r)   r)   r.   r/   ť   ó    )Úallr   r	   r   r   r   r   r   r   rE   r[   r)   r)   r)   r.   Útest_convolution_fft    s6   0>>˙0"˙8*˙$2˙
˙
˙
˙r|   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   rc   Šr7   r-   r_   r)   r.   re   Ć   s   0 z'test_convolution_ntt.<locals>.<genexpr>r   r   r   r1   r   r   é   )iy}  i ¤  iv  i  )i}  rP   iĘT )icÇigiO4¸iÁ1iźŰşijŚ)i9Ü i÷e0 ićr   )iÚE  i,S  iát  i8  )iŢ  iů  ib  i˛  i×  i¸  i   )r   é   rl   éb   éC   )r   r1   r   r   r   )rl   éL   é   éN   éE   c                      s   t ddgddg S )Nr   r   r   r   r}   r)   )r_   r)   r.   r/   Ô   ó    z&test_convolution_ntt.<locals>.<lambda>c                      s   t ttgttg S rw   Šr   r   r   r)   )r-   r)   r.   r/   Ő   r   c                      s   t tt S rw   r   r)   )r7   r)   r.   r/   Ö   s    )r{   r   r   r[   rE   r)   r)   r~   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   rH   rI   )rA   rg   ri   rh   r   r   r1   r   r   r   r   ru   é=   rD   i  é   iŁ  é*   )é^   é3   é5   ru   rL   rh   rg   r   in  é   iŘ  r?   é   r   ié  éA   r   i  rg   iÄ  iÖ  iĄ  é˙   rL   i"  i	  rh   i\  éá   iÉ  iÝ  iG  i^  i{  i  iÄ  i'  iű  i9  is  iE  i  é4   iľ  é[   iĘ˙˙˙i%  r   éĚ   é   ro   i  é   é8   rA   é(   r   úu v w x y zc                      ó
   t  S rw   Šr   r)   r   r)   r.   r/   ˙   ry   z'test_convolution_fwht.<locals>.<lambda>c                      s   t    S rw   r   r)   Šr\   r]   r   r   r)   r.   r/      rz   )r   r   r   r	   r   r   rE   )r9   r+   r:   r^   Ú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sJ 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   r1   r   r   r   r   )é@   éG   é7   rN   é!   é   r?   r   r˘   i  r¤   rŁ   i   i@  rĽ   éT   r?   rŚ   é   éĽ   éŔ   é   iÎ  ie  én   i  iá  iŁ  é   i{  iď  i  r=   i  éi   i   rm   éI   éÄ   r   r   c                      r   rw   )r   r)   Šr   r    r)   r.   r/   %  ry   z)test_convolution_subset.<locals>.<lambda>c                      ó   t tdd S ŠNr   r   )r   r   r)   Šr\   r)   r.   r/   &  r0   )r   r   r	   r   r   r   rE   Šr9   r+   r:   r]   r^   r   r)   Šr\   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   r1   r   r   r   r   r   r   )éB   éQ   é_   é1   é%   éY   r   r   éH   r?   r   r¸   ig  rş   éĄ   é   i  i;
  rź   i  r   é6   r˝   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  r   r=   imţ˙˙i  ir1  r   c                      r   rw   )r   r)   rą   r)   r.   r/   Q  ry   z'test_covering_product.<locals>.<lambda>c                      r˛   rł   )r   r   r)   r´   r)   r.   r/   R  r0   )r   r   r	   r   r   r   rE   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sJ 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   r1   r   r   r   r   r   )r   r   r   rp   é$   éO   rh   r   r   rg   éĂ   iC  i^  é˛   i  i  iI  i@  rŞ   iP  r   i)ö i1%  iE  iB  i@K  i6  r   iý  iŽ!  i2  i  iô,  éü   éţ˙˙˙é˙˙˙r=   iÍ  r   iŐ˙˙˙rŁ   éő   r§   r   c                      r   rw   )r   r)   rą   r)   r.   r/   x  ry   z+test_intersecting_product.<locals>.<lambda>c                      s   t  tddS )Nr   r   )r   r   r)   r´   r)   r.   r/   y  r0   )r   r   r	   r   r   r   rE   rľ   r)   rś   r.   Útest_intersecting_productU  sD   6&($&
ţ(
˙,(
˙48˙
˙2
˙B
˙
˙rĐ   c                   C   sč   t dgdgdgksJ t ddgdgdgksJ t g d˘g d˘g d˘ks(J t dgg d˘g d˘ks6J t ddgg d˘g d˘ksEJ t g d	˘g d
˘g d˘ksTJ t g d˘g d˘g d˘kscJ t g d˘g d˘g d˘ksrJ d S )Nr   r   rH   rI   rf   rj   r   rk   )r=   éű˙˙˙r   r   )rŃ   r1   r   )iÎ˙˙˙éU   ro   iÔ˙˙˙rm   rl   )r   r   r   r   )r   r   r   r   )r   r   r   rÍ   r   r   )iŤţ˙˙rŃ   r   r   iš˙˙˙rÎ   rB   éW   )	r   r1   r   r   iY  rl   i˛˙˙˙iů˙˙˙i§˙˙˙)iWů˙˙ié÷˙˙iö˙˙iöď˙˙ií2ţ˙iŇŮ˙˙ie  iĽ  i  ióy˙˙iK  iÖ  im  iź  iŹî˙˙iÁá˙˙)r   r)   r)   r)   r.   Útest_convolution_int|  s   ţý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   r   Úsympy.testing.pytestr   Ú	sympy.abcr   r   rG   rb   r|   r   rĄ   rˇ   rÇ   rĐ   rÔ   r)   r)   r)   r.   Ú<module>   s     (5_*&,'