o
    5ήc*@                      @   s0  U d dl mZmZ d dlmZmZmZmZmZ d dl	Z
d dlmZmZmZ d dlZd dlmZ d dlmZmZmZmZmZmZmZmZ eeeddddd	Zd
ZdZdd Zdd Z ej!e"eddd Z#ej!e"eddd Z$ej!e"eddd Z%dd Z&dd Z'dd Z(dYddZ)dYdd Z*dYd!d"Z+dYd#d$Z,ej-.d%e
j/e
j0e
j1gej-.d&eeeegd'd( Z2eeed)e
j3f eee
j4 ee5 f e5f e5f Z6i ee
j7d*fd+ee
j8d*fd,ee
j7d-fdee
j8d-fd.ee
j7d/fdee
j8d/fd.ee
j7d0fd+ee
j8d0fd,ee
j7d*fdee
j8d*fd,ee
j7d-fdee
j8d-fd.ee
j7d/fdee
j8d/fd.ee
j7d0fdee
j8d0fd,ee
j7d*fd+ee
j8d*fd,ee
j7d-fdee
j8d-fd,ee
j7d/fdee
j8d/fd1ee
j7d0fd+ee
j8d0fd,ee
j7d*fdee
j8d*fd,ee
j7d-fdee
j8d-fd,ee
j7d/fdee
j8d/fd,ee
j7d0fdee
j8d0fd,iZ9e6e:d2< e9; < D ].\Z=Z>e=d* e
j7kre>e9e=d  e
j?e=d- f< qe=d* e
j8kre>e9e=d  e5e=d- f< qej-.d3e
j@e
j7e
j8e5gej-.d4g d5G d6d7 d7ZAej-.d3e
j@e
j7e
j8e5gd8d9 ZBej-.d3e
j@e
j7e
j8e5gd:d; ZCej-.d3e
j@e
j7e
j8e5gd<d= ZDej-.d3e
j@e
j7e
j8e5gd>d? ZEej-.d3e
j@e
j7e
j8e5gej-.d4g d5d@dA ZFej-.d3e
j@e
j7e
j8e5gej-.d4g d5dBdC ZGej-.d3e
j@e
j7e
j8e5gdDdE ZHej-.d3e
j@e
j7e
j8e5gdFdG ZIej-.d3e
j@e
j7e
j8e5gej-.d4g d5dHdI ZJej-.dJeeeegej-.d%e
j8e
jKe
j@gej-.dKg dLej-.d4g d5ej-.dMdNdOgej-.dPddQgdRdS ZLG dTdU dUZMej-.dVeeeeeeeegdWdX ZNdS )Z    )joindirname)CallableDictTupleUnionTypeN)assert_array_almost_equalassert_equalassert_allclose)raises)dctidctdstidstdctnidctndstnidstnz..fftpacktests      c                  C   s4   zt jddd} | t dkW S  ty   Y dS w )Ns          ?      z<f16dtype      ?F)np
frombuffer	longfloat	TypeError)one r!   V/tmp/pip-target-vg8gfxp4/lib/python/scipy/fft/_pocketfft/tests/test_real_transforms.pyis_longdouble_binary_compatible   s   r#   c                     s   t t dd } | d ur| S tttd  fddttD } fddttD }tttd}tttd}|d }t|t	ksGJ t
 rStttd	}n	d
d | D }||||||d} | t d< | S )N__reference_dataztest.npzc                       g | ]} d |  qS )zx%dr!   .0iMDATAr!   r"   
<listcomp>#       z&get_reference_data.<locals>.<listcomp>c                    r%   )zy%dr!   r&   r)   r!   r"   r+   $   r,   zfftw_double_ref.npzzfftw_single_ref.npzsizeszfftw_longdouble_ref.npzc                 S   s   i | ]\}}|| tjqS r!   )astyper   r   )r'   kvr!   r!   r"   
<dictcomp>4   s    z&get_reference_data.<locals>.<dictcomp>)FFTWDATA_LONGDOUBLEFFTWDATA_DOUBLEFFTWDATA_SINGLEFFTWDATA_SIZESXY)getattrglobalsr   loadr   fftpack_test_dirrangeMDATA_COUNTlenFFTWDATA_COUNTr#   items)refr6   r7   r3   r4   r5   r2   r!   r)   r"   get_reference_data   s4   
	rB   )paramsc                 C      t  d | j S )Nr5   rB   paramrequestr!   r!   r"   fftwdata_sizeD      rI   c                 C   rD   )Nr6   rE   rG   r!   r!   r"   mdata_xH   rJ   rK   c                 C   s*   t  }|d | j }|d | j }||fS )Nr7   r6   rE   )rH   rA   yxr!   r!   r"   mdata_xyM   s   rN   c                 C      t d|d ||}t t j|}|t jkrt d }n|t jkr)t d }n|t jkr4t d }nt |d| |f  |}|||fS )Nr      r3   r4   r2   z	dct_%d_%d	r   linspacer.   result_typefloat32doublerB   r   
ValueErrortypesizedtrM   datarL   r!   r!   r"   fftw_dct_refU      



r\   c                 C   rO   )Nr   rP   r3   r4   r2   z	dst_%d_%drQ   rW   r!   r!   r"   fftw_dst_refd   r]   r^   c                 K   s   t j|dd}t|jd D ]}| ||ddf fi |||ddf< qt|jd D ]}| |dd|f fi ||dd|f< q,|S )z0Calculate 2-D reference data from a 1d transformTcopyr   NrP   )r   arrayr<   shape)funcrM   kwargsrowcolr!   r!   r"   ref_2ds   s   **rg   c           	   
   C   s2  t j| dd} t| }|d }t |}d\}}|dkr*t d| }t d| }t|D ]H}td|d D ]}||  || |  t t j| | |  7  < q7||  || d  7  < ||  || |d   |d	 dkrqdnd
 7  < q.|dkr|d  dt d	 9  < ||d   dt d	 9  < |S )z/Calculate textbook definition version of DCT-I.Tr_   rP   )rP      orthor          @r   rh   )r   ra   r>   zerossqrtr<   cospi)	rM   normNMrL   m0mr/   nr!   r!   r"   
naive_dct1}   s"   
22rv   c                 C   s   t j| dd} t| }|d }t |}t|D ]%}t|D ]}||  d| |  t t j|d  |d  |  7  < qq|dkrK|t d| 9 }|S )z/Calculate textbook definition version of DST-I.Tr_   rP   rh   r   ri         ?r   ra   r>   rl   r<   sinro   rm   )rM   rp   rq   rr   rL   r/   ru   r!   r!   r"   
naive_dst1   s   
:rz   c                 C      t j| dd} t| }t |}t|D ]#}t|D ]}||  | | t t j|d  |d  |  7  < qq|dkrG|t d| 9 }|S |d9 }|S )z0Calculate textbook definition version of DCT-IV.Tr_   rw   ri   rj   rh   )r   ra   r>   rl   r<   rn   ro   rm   rM   rp   rq   rL   r/   ru   r!   r!   r"   
naive_dct4      
6r}   c                 C   r{   )z0Calculate textbook definition version of DST-IV.Tr_   rw   ri   rj   rh   rx   r|   r!   r!   r"   
naive_dst4   r~   r   r   	transformc                 C   s6   | dt jd|d }d| t d }t|| d S )N              ?   r   )r   aranger	   )r   r   rL   rM   r!   r!   r"   test_complex   s   r   .rP         rh   r            dec_maprdtrX   rP   rh   r   r   c                   @   s.   e Zd Zdd Zejdg ddd ZdS )TestDCTc           	      C   s\   t |||\}}}t||d}t|j| tt||f }t||dt|d|   d d S NrX           
   rtolatol)r\   r   r
   r   r   r   r   max)	selfr   rX   rI   rM   yrrZ   rL   decr!   r!   r"   test_definition  s
   $zTestDCT.test_definitionrY   )r   r   	          @   c           	      C   s   d}t t||f }tj||}t||d}t|D ]}t|| t|| |d|d q|j}t|d|d}t|D ]}t|d d |f t|d d |f |d|d q:d S )Nrh   r   decimalr   )axisrX   )r   r   r   randomrandnr<   r	   T)	r   r   rX   rY   ntr   rM   rL   jr!   r!   r"   	test_axis  s   &zTestDCT.test_axisN)__name__
__module____qualname__r   pytestmarkparametrizer   r!   r!   r!   r"   r   	  s    r   c                 C   t   t t| df }tj|| d}ttj| }t|ddd}t|dd}t|j| t	||dt
|d|   d d S 	NrP   r   ri   rp   rX   rp   r   r   r   )r   r   r   ra   rS   rT   rv   r
   r   r   r   r   rK   r   rM   rZ   rL   y2r!   r!   r"   test_dct1_definition_ortho$     $r   c                 C   sb   t t j|}t j| d |d}| d }t|ddd}tt|df }t|j| t|||d d S )Nr   r   rP   ri   rh   r   r   )	r   rS   rT   ra   r   r   r
   r   r	   )rN   r   rZ   rM   r   rL   r   r!   r!   r"   test_dct2_definition_matlab0  s   r   c                 C   sd   t j| |d}t t j|}t|ddd}t|ddd}tt|df }t|j| t|||d d S )Nr   ri   rh   r   r   r   )	r   ra   rS   rT   r   r   r
   r   r	   )rK   r   rM   rZ   rL   xir   r!   r!   r"   test_dct3_definition_ortho=  s   r   c                 C   st   t j| |d}t t j|}t|ddd}t|dd}tt|df }t|j| t	||dt 
|d|   d d S )	Nr   ri   r   r   r   r   r   r   )r   ra   rS   rT   r   r}   r   r
   r   r   r   )rK   r   rM   rZ   rL   r   r   r!   r!   r"   test_dct4_definition_orthoI  s   $r   c                 C   \   t || |\}}}t||d}tt||f }t|j| t||dt|d|   d d S r   )r\   r   r   r
   r   r   r   r   rI   r   rX   xrr   rZ   rM   r   r!   r!   r"   test_idct_definitionU  
   $r   c                 C   s\   t || |\}}}t||d}tt||f }t|j| t||dt|d|   d d S r   )r^   r   r   r
   r   r   r   r   )rI   r   rX   r   r   rZ   rL   r   r!   r!   r"   r   _  r   r   c                 C   r   r   )r   r   r   ra   rS   rT   rz   r
   r   r   r   r   r!   r!   r"   test_dst1_definition_orthoi  r   r   c                 C   sb   t t| df }tj|| d}ttj| }t|ddd}t|dd}t|j| t	|||d d S )Nr   r   ri   r   r   r   )
r   r   r   ra   rS   rT   r   r
   r   r	   r   r!   r!   r"   test_dst4_definition_orthou  s   r   c                 C   r   r   )r^   r   r   r
   r   r   r   r   r   r!   r!   r"   test_idst_definition  r   r   routinezshape, axis)))r   rk   ))r   rh   r   ))rh   r   rP   overwrite_xTFrp   ri   c           
      C   s   t jd t |t jrt jj| dt jj|   }nt jj| }||}| }| ||d |||d d| j|j	|j
d ||f }	|sOt||d|	 d d S d S )N  r   )r   z%%s(%s%r, %r, axis=%r, overwrite_x=%r)zspurious overwrite in %s)err_msg)r   r   seed
issubdtypecomplexfloatingr   r.   r`   r   r   rb   r
   )
r   r   rb   r   rX   rp   r   rM   x2sigr!   r!   r"   test_overwrite  s   

r   c                   @   s  e Zd ZdZg dZg dZejdZ	dZ
e	je
 Zejdeefeefgejddd	d
d	gdddgddd	gdddggejdeejddgdd Zejdeefeefgejdeejdedd Zejdeefeefgejdeejdedd Zejdeefeefgdd Zejdeegdd Zejdeefeefgejdd	d
d	gdddggd d! ZdS )"Test_DCTN_IDCTNr   r   )Nbackwardri   forwardr   )r   r   zfforward,finverseaxesNrP   )rP   r   )r   r   rP   )rk   r   rk   dct_typerp   ri   c                 C   s6   || j |||d}|||||d}t| j |dd d S )NrX   r   rp      r   )r[   r	   )r   fforwardfinverser   r   rp   tmpr!   r!   r"   test_axes_round_trip  s   
z$Test_DCTN_IDCTN.test_axes_round_tripz
funcn,funcc                 C   s6   || j |d |d}t|| j ||d}t||dd d S )Nr   rX   rp      r   )r[   rg   r	   )r   funcnrc   r   rp   y1r   r!   r!   r"   test_dctn_vs_2d_reference  s   z)Test_DCTN_IDCTN.test_dctn_vs_2d_referencec                 C   s@   t | j||d}||||d}t||||d}t||dd d S )Nr   r   r   )r   r[   rg   r	   )r   r   rc   r   rp   fdatar   r   r!   r!   r"   test_idctn_vs_2d_reference  s   z*Test_DCTN_IDCTN.test_idctn_vs_2d_referencec                 C   s   t tdd || j| jjd dd W d    n1 sw   Y  t tdd || j| jjdd W d    d S 1 s>w   Y  d S )NzBwhen given, axes and shape arguments have to be of the same length)matchr   r   sr   )assert_raisesrV   r[   rb   )r   r   r   r!   r!   r"   test_axes_and_shape  s   "z#Test_DCTN_IDCTN.test_axes_and_shaper   c                 C   s    || j dd d}t|jd d S )N)   r   r   )r[   r
   rb   )r   r   r   r!   r!   r"   
test_shape  s   zTest_DCTN_IDCTN.test_shapec                 C   s8   || j d |dd}||d |dd}t| j || jd d S )Nri   )r   r   rp   r   )r[   r	   r   )r   r   r   r   r   r!   r!   r"   test_shape_is_none_with_axes  s   z,Test_DCTN_IDCTN.test_shape_is_none_with_axes)r   r   r   r   r   normsr   r   RandomStaterstaterb   r   r[   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r!   r!   r"   r     sP    



r   rc   c                 C   s>   t jd}|d}|jd}t| ||| | d S )Nr   r   S)r   r   r   randr   newbyteorderr   r.   )rc   rngrM   
swapped_dtr!   r!   r"   test_swapped_byte_order  s   
r   )N)Oos.pathr   r   typingr   r   r   r   r   numpyr   numpy.testingr	   r
   r   r   r   r   #scipy.fft._pocketfft.realtransformsr   r   r   r   r   r   r   r   __file__r;   r=   r?   r#   rB   fixturer<   rI   rK   rN   r\   r^   rg   rv   rz   r}   r   r   r   	complex64
complex128longcomplexr   ndarrayfloatingint
DecMapTyperU   rT   r   __annotations__r`   r@   r/   r0   
longdoubler   r   r   r   r   r   r   r   r   r   r   float64r   r   r   r!   r!   r!   r"   <module>   s    (
(







(	6





C