a
    t@8b  ã                   @   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   ú>lib/python3.9/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sXJ ‚t| tƒsfJ ‚| jtkstJ ‚| jtks‚J ‚| j	t tfks–J ‚|  
d¡dtdt ƒ d ks¸J ‚| 
d¡dtdt ƒ d ksÚJ ‚| 
d¡dtdt ƒ d ksüJ ‚|  t¡dttƒ ksJ ‚| t¡td d ks4J ‚| t¡td ksLJ ‚|  ¡ 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r6 qL|| |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   s2   t | ƒD ]$\}}|| | ks J ‚||kr q.qd S ©N)Ú	enumerate)ÚfÚiZ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   r)   c                   S   s   t tt dtfƒS r*   )r   r   Úyr   r   r   r   r   r(   D   r)   )r   r   r   r
   r   ÚtruncateÚ
isinstancer   ZfunctionZperiodÚtermr   r   Zas_leading_termr"   Zsubsr   Ú
ValueError)r   r   r   ZfotÚsr$   r%   r&   r   r   r   Útest_FourierSeries   sD    
ÿÿ""":26



r1   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sxJ ‚| ¡ dttt d ƒ t ttt ƒt  dttt d ƒ td   tj	 ksÎJ ‚d S )Nr   Téþÿÿÿr   r   é   r   )
r
   r   r   r.   r   r   r   r,   r   ÚHalf)Úpr#   r   r   r   Útest_FourierSeries_2G   s    &"ÿ
,ÿÿr6   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stJ ‚| d¡dt ttƒ ttd ƒ ddt  tdt ƒ tdt d ƒ  ksÆJ ‚dS )	zETest if fourier_series approximates discontinuous function correctly.r   )éÿÿÿÿTr   r   r   r3   é   N)r
   r   r   r   r,   r   Zsigma_approximationr   )Zsquare_waver0   r   r   r   Útest_square_waveQ   s    .ÿ
"&ÿr9   c                  C   s¾   t ttdtfƒ} |  d¡td tdt ƒ tdt ƒd  tdt ƒd  ksRJ ‚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   r3   r   é   r   r   )r   r   r   r,   r   r   r4   )r0   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sTJ ‚| t d ¡ ¡ dttƒ dtdt ƒ d  dtdt ƒ d  ks J ‚ˆ  d¡}| ¡ dttƒ dtdt ƒ  dtdt ƒ  ksâJ ‚|  d¡ 	d¡}| ¡ dtdt d ƒ tdt d ƒ td d  ks0J ‚|  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 )Nr7   r   r3   r   r8   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   r>   r   r   r(   y   r)   c                      s   ˆ   tt ¡S r!   )Úscaler   r+   r   r>   r   r   r(   z   r)   c                      s   ˆ   td ¡S )Nr   )Úscalexr   r   r>   r   r   r(   {   r)   )r   r@   r=   r   r,   r   r   r   rA   r?   r   r/   )r   r   ZfesZfosZfxZflr   r>   r   Útest_FourierSeries__operationse   s(    40ÿ

8>$,ÿÿrB   c                  C   s|   t ƒ \} }}|   ¡ dttƒ tdt ƒ dtdt ƒ d  ksFJ ‚|  ¡ dttƒ tdt ƒ td d  ksxJ ‚d S )Nr2   r   r   r3   )r   r,   r   r   r   r   r   r   r   r   Útest_FourierSeries__neg~   s    :rC   c                     s
  t ƒ \‰ } }ˆ ˆ  ˆ  d¡ks"J ‚ˆ ˆ  dks2J ‚|  |  |  d¡ksJJ ‚ˆ |   ¡ dttƒ tdt ƒ dttƒ  tdt ƒ td d  ks–J ‚ˆ |   ¡ dttƒ tdt ƒ dttƒ  tdt ƒ td d  ksâJ ‚tˆ d tƒsôJ ‚t	t
‡ fdd„ƒ d S )	Nr   r   r2   r3   r   r   c                      s   ˆ t ttddfƒ S )Nr   r   r'   r   r>   r   r   r(   “   r)   z.test_FourierSeries__add__sub.<locals>.<lambda>)r   r@   r,   r   r   r   r   r-   r   r   r/   )r   r   r   r>   r   Útest_FourierSeries__add__sub…   s    8
ÿ
8
ÿ
rD   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sdJ ‚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   r3   é   r8   r7   )r   r   r   r,   r	   r+   r   Úzr   r   r   r   r   r   r   r   r   Útest_FourierSeries_finite–   s(    FJÿ
8ÿPÿÿ40\ÿÿrH   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+   rG   r   r1   r6   r9   r;   rB   rC   rD   rH   r   r   r   r   Ú<module>   s*   
/
	