o
    GZŽh  ã                   @   sü   d dl mZ 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 d dlmZ d dlmZmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ e	dƒ\ZZZeƒ 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 ) é    )ÚAdd)ÚRationalÚooÚpi)ÚS)Úsymbols)ÚexpÚlog)Ú	Piecewise)ÚcosÚsinÚsincÚtan)Úfourier_series)ÚFourierSeries)Úraises)Ú	lru_cachezx y zc                  C   sT   t ttt tfƒ} t td t tfƒ}t tdtdk ftdfƒtt tfƒ}| ||fS )Né   r   T)r   Úxr   r
   ©ÚfoÚfeÚfp© r   úN/var/www/auris/lib/python3.10/site-packages/sympy/series/tests/test_fourier.pyÚ_get_examples   s   $
r   c                  C   s¬  t ƒ \} }}tdt tfƒdksJ ‚tdtdk ftdfƒ tt tf¡ ¡ | ¡ ks,J ‚t| tƒs3J ‚| jtks:J ‚| jtksAJ ‚| j	t tfksKJ ‚|  
d¡dtdt ƒ d ks\J ‚| 
d¡dtdt ƒ d ksmJ ‚| 
d¡dtdt ƒ d ks~J ‚|  t¡dttƒ ks‹J ‚| t¡td d ks˜J ‚| t¡td ks£J ‚|  ¡ dttƒ tdt ƒ dtdt ƒ d  ks¿J ‚| ¡ dttƒ tdt ƒ td d  ks×J ‚| ¡ dttƒ dtdt ƒ d  td  ksñJ ‚| jd d}ddttƒ tdt ƒ g}t|ƒD ]\}}|dkr n|| |ksJ ‚q	d	d
„ }|| dƒ ||dƒ ||dƒ |  ttd ¡| ks?J ‚ttdd„ ƒ ttdd„ ƒ ttdd„ ƒ d S )Né   r   Té   r   éüÿÿÿé	   )Únc                 S   s4   t | ƒD ]\}}|| | ksJ ‚||kr d S qd S ©N)Ú	enumerate)ÚfÚiÚindÚtr   r   r   Ú_check_iter6   s   ÿþz'test_FourierSeries.<locals>._check_iterc                   S   s
   t tdƒS )N)r   r   r   ©r   r   r   r   r   r   Ú<lambda>B   ó   
 z$test_FourierSeries.<locals>.<lambda>c                   S   s   t ttdtfƒS ©Nr   )r   r   r   r   r   r   r   r)   C   s    c                   S   s   t tt dtfƒS r+   )r   r   Úyr   r   r   r   r   r)   D   s    )r   r   r   r
   r   ÚtruncateÚ
isinstancer   ÚfunctionZperiodÚtermr   r   Zas_leading_termr"   Úsubsr   Ú
ValueError)r   r   r   ZfotÚsr$   r&   r'   r   r   r   Útest_FourierSeries   s@   ÿ"""804



r4   c                  C   sÒ   t dtdk ftdfƒ} t| tddfƒ}| d¡dtdt t d ƒ dt  dtdt t d ƒ dtd    ks<J ‚| ¡ dttt d ƒ t ttt ƒt  dttt d ƒ td   tj	 ksgJ ‚d S )Nr   Téþÿÿÿr   r   é   r   )
r
   r   r   r0   r   r   r   r-   r   ÚHalf)Úpr#   r   r   r   Útest_FourierSeries_2G   s   &"
ÿ,ÿÿr9   c                  C   sÊ   t dttk fdƒ} t| tddt fƒ}| d¡dt ttƒ ddt  tdt ƒ  ddt  tdt ƒ  ks:J ‚| d¡dt ttƒ ttd ƒ ddt  tdt ƒ tdt d ƒ  kscJ ‚dS )	zETest if fourier_series approximates discontinuous function correctly.r   )éÿÿÿÿTr   r   r   r6   é   N)r
   r   r   r   r-   r   Zsigma_approximationr   )Zsquare_waver3   r   r   r   Útest_square_waveQ   s   .
ÿ"&ÿr<   c                  C   s¾   t ttdtfƒ} |  d¡td tdt ƒ tdt ƒd  tdt ƒd  ks)J ‚t ttddfƒ} |  d¡tjtdt t ƒt  tdt t ƒdt   tdt t ƒdt   ks]J ‚d S )Nr   r6   r   é   r   r   )r   r   r   r-   r   r   r7   )r3   r   r   r   Útest_sawtooth_wave\   s   2ÿHÿr>   c                     sê  t ƒ \‰ } }|  d¡ td ¡}| ¡ dttƒ tdt ƒ dtd  d  ks*J ‚| t d ¡ ¡ dttƒ dtdt ƒ d  dtdt ƒ d  ksPJ ‚ˆ  d¡}| ¡ dttƒ dtdt ƒ  dtdt ƒ  ksqJ ‚|  d¡ 	d¡}| ¡ dtdt d ƒ tdt d ƒ td d  ks—J ‚|  d¡ t ¡ d¡ 	d¡ d¡}| ¡ d	tdt d ƒ dtd
t d
 ƒ  dt  dtd  d  ksÏJ ‚t
t‡ fdd„ƒ t
t‡ fdd„ƒ t
t‡ fdd„ƒ t
t‡ fdd„ƒ d S )Nr:   r   r6   r   r;   r=   r   r   iðÿÿÿé   c                      s
   ˆ   t¡S r!   )Úshiftr   r   ©r   r   r   r)   x   r*   z0test_FourierSeries__operations.<locals>.<lambda>c                      s   ˆ   ttƒ¡S r!   )Úshiftxr   r   r   rA   r   r   r)   y   ó    c                      s   ˆ   tt ¡S r!   )Úscaler   r,   r   rA   r   r   r)   z   rC   c                      s   ˆ   td ¡S )Nr   )Úscalexr   r   rA   r   r   r)   {   rC   )r   rD   r@   r   r-   r   r   r   rE   rB   r   r2   )r   r   ZfesZfosZfxÚflr   rA   r   Útest_FourierSeries__operationse   s(   40
ÿ
8<$,ÿ
ÿrG   c                  C   s|   t ƒ \} }}|   ¡ dttƒ tdt ƒ dtdt ƒ d  ks#J ‚|  ¡ dttƒ tdt ƒ td d  ks<J ‚d S )Nr5   r   r   r6   )r   r-   r   r   r   r   r   r   r   r   Útest_FourierSeries__neg~   s   :6rH   c                     s
  t ƒ \‰ } }ˆ ˆ  ˆ  d¡ksJ ‚ˆ ˆ  dksJ ‚|  |  |  d¡ks%J ‚ˆ |   ¡ dttƒ tdt ƒ dttƒ  tdt ƒ td d  ksKJ ‚ˆ |   ¡ dttƒ tdt ƒ dttƒ  tdt ƒ td d  ksqJ ‚tˆ d tƒszJ ‚t	t
‡ fdd„ƒ d S )	Nr   r   r5   r6   r   r   c                      s   ˆ t ttddfƒ S )Nr   r   r(   r   rA   r   r   r)   “   s    z.test_FourierSeries__add__sub.<locals>.<lambda>)r   rD   r-   r   r   r   r   r.   r   r   r2   )r   r   r   rA   r   Útest_FourierSeries__add__sub…   s   8

ÿ8

ÿrI   c                   C   s„  t ttƒƒ d¡ttƒksJ ‚t ttƒttƒ ttƒ ttt fƒ ¡ ttƒttƒ ttƒ ks2J ‚t ttƒd ƒ t	¡dt
dt ƒ d dt
dt ƒ d  t
dt ƒd  td	dƒ ks`J ‚t ttƒd ƒ ¡ dt
dt ƒ d dt
dt ƒ d  td	dƒ ks…J ‚t tdt d ƒt
dt d ƒ ƒ t	¡tdƒ tdt ƒ tdt ƒt
dƒ  t
dƒt
dt ƒ  tdƒt
dt ƒ  ksÅJ ‚t ttƒt
tƒttƒ  ƒ t	¡dttƒ ksÞJ ‚t t
tt ƒtd
dfƒ t	¡t
tt ƒksõJ ‚t t
dt t d ƒtdt t ƒttt ƒ  td
dfƒ t	¡ttt ƒ tdt t ƒ tdƒtdt t ƒ  t
dƒt
dt t ƒ  ks@J ‚d S )Nr   r=   iñÿÿÿr   é    r   r6   é   r;   r:   )r   r   r   r-   r	   r,   r   Úzr   r   r   r   r   r   r   r   r   Útest_FourierSeries_finite–   s(   FJ
ÿ8
ÿPÿ
ÿ2.\ÿÿrM   N)'Zsympy.core.addr   Zsympy.core.numbersr   r   r   Zsympy.core.singletonr   Zsympy.core.symbolr   Z&sympy.functions.elementary.exponentialr   r	   Z$sympy.functions.elementary.piecewiser
   Z(sympy.functions.elementary.trigonometricr   r   r   r   Zsympy.series.fourierr   r   Zsympy.testing.pytestr   Ú	functoolsr   r   r,   rL   r   r4   r9   r<   r>   rG   rH   rI   rM   r   r   r   r   Ú<module>   s,    
/
	