
    Ui1                        d dl mZmZmZ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mZ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m Z  d dlZ!d dl"Zd dl#m$Z$ g dZ%g dZ&d	gZ'd
gZ(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1d Z2 G d d          Z3 G d de3          Z4 G d de3          Z5 G d de3          Z6 G d d          Z7 G d d           Z8ej9        :                    e!j;        e!j<        u d!"           G d# d$e8                      Z= G d% d&e8          Z> G d' d(e8          Z? G d) d*          Z@ej9        :                    e!j;        e!j<        u d!"           G d+ d,e@                      ZA G d- d.e@          ZB G d/ d0e@          ZC G d1 d2          ZDej9        :                    e!j;        e!j<        u d!"           G d3 d4eD                      ZE G d5 d6eD          ZF G d7 d8eD          ZG G d9 d:          ZH G d; d<          ZI G d= d>          ZJ G d? d@          ZK G dA dB          ZL G dC dD          ZM G dE dF          ZNej9        O                    dGeeeeeeeeg          dH             ZPej9        O                    dGeeeeeeeeg          dI             ZQej9        O                    dGeeeeg          dJ             ZRdS )K    )assert_assert_equalassert_array_almost_equalassert_array_almost_equal_nulpassert_array_lessassert_allcloseN)raises)ifftfftfftnifftnrfftirfftrfftnirfftnhfftihffthfftnihfftn)	arangearrayasarrayzerosdotexppiswapaxescdoublerand)i    i`  i  )      $   i     c                     d| d| }t          t          j                            | |z
            |t          j                            |           z  |           d S )Nzsize: z  rdt: )r   nplinalgnorm)xyrtolsizerdterr_msgs         }/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/scipy/fft/_pocketfft/tests/test_basic.py_assert_close_in_normr0   &   sT    )t))C))GbinnQU++T")..2C2C-CWMMMMM    c                     t          |  S Nr   )r,   s    r/   randomr4   ,   s    ;r1   c                 `    | j                             d          }|                     |          S )z-Returns the same array with swapped byteorderS)dtypenewbyteorderastype)arrr7   s     r/   swap_byteorderr;   /   s)    I""3''E::er1   c                    t          |           } t          |           }t          |t                    }t	          |           dt
          z  |z  z  }t          |          D ]%}t          t          ||z            |           ||<   &|S Nr7                  @	r   lenr   r   r   r   ranger   r   r)   nr*   wis        r/   
direct_dftrG   4   s}    

AAAawA	
BrE!GA1XX    3qs88Q!Hr1   c                    t          |           } t          |           }t          |t                    }t	          |          dt
          z  |z  z  }t          |          D ](}t          t          ||z            |           |z  ||<   )|S r=   r@   rC   s        r/   direct_idftrI   >   s    

AAAawAq		2b57A1XX " "3qs88Q!!Hr1   c                 t    t          |           } t          | j                  D ]}t          | |          } | S N)axis)r   rB   ndimr   r)   rL   s     r/   direct_dftnrO   H   s=    

Aaf  Hr1   c                 t    t          |           } t          | j                  D ]}t          | |          } | S rK   )r   rB   rM   r
   rN   s     r/   direct_idftnrQ   O   s=    

Aaf  Hr1   c                 ,   t          |           } t          |           }t          |           dt          z  |z  z  }t	          |dz  dz   t
                    }t          |dz  dz             D ]%}t          t          ||z            |           ||<   &|S )Nr?   r!      r>   )	r   rA   r   r   r   r   rB   r   r   )r)   rD   rE   r*   rF   s        r/   direct_rdftrT   V   s    

AAA	
BrE!GAad1fG$$$A1a46]]    3qs88Q!Hr1   c                    t          |           } t          |t                    }t          |dz  dz             D ]<}| |         ||<   |dk    r)d|z  |k     r t	          j        | |                   |||z
  <   =t          |          j        S )Nr>   r!   rS   r   )r   r   r   rB   r&   conjrI   real)r)   rD   x1rF   s       r/   direct_irdftrY   `   s    

A	q	 	 	 B1a46]] $ $!1q55QqS1WWgadmmBqsGr??r1   c                 h    t          t          |           t          | j        dz
                      S )NrS   axes)r   r   rB   rM   r)   s    r/   direct_rdftnr^   j   s)    QeAFQJ//0000r1   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )_TestFFTBasec                 `    d | _         d | _        t          j                            d           d S N  )cdtr-   r&   r4   seedselfs    r/   setup_methodz_TestFFTBase.setup_methodo   s*    
	tr1   c                 ^   t          j        g d| j                  }t          |          }t	          |j        | j                   t          |          }t          ||           t          j        g d| j                  }t          t          |          t          |                     d S )NrS   r!            @      ?rS   r!   rk   y      @       @r>   rS   r!   rk   y      @           )r&   r   rd   r   r   r7   rG   r   rg   r)   r*   y1s       r/   test_definitionz_TestFFTBase.test_definitiont   s    H,,,DH===FFQWdh''']]!!B'''H^^^48444!#a&&A77777r1   c                    t          j        g d| j                  }t          j        g d| j                  }t          ||gd          }t	          |j        | j                   t	          |j        d           t          |d         t          |                     t          |d         t          |                     d S NrS   r!   rk      r>   ru   rD   r!   ru   r   rS   )
r&   r   r-   r   r   r7   rd   shaper   rG   rg   rX   x2r*   s       r/   test_n_argument_realz!_TestFFTBase.test_n_argument_real}   s    Xiiitx000Xiiitx000B!QWdh'''QWU###!!A$z"~~666!!A$z"~~66666r1   c                    t          j        g d| j                  }t          j        g d| j                  }t          ||gd          }t	          |j        | j                   t	          |j        d           t          |d         t          |                     t          |d         t          |                     d S )N)rS   r!   rk   rl   r>   ru   rv   rw   r   rS   )	r&   r   rd   r   r   r7   rx   r   rG   ry   s       r/   _test_n_argument_complexz%_TestFFTBase._test_n_argument_complex   s    Xlll$(333Xlll$(333B!QWdh'''QWU###!!A$z"~~666!!A$z"~~66666r1   c                 H   t          dd          D ]}d|z  }t          j        |          }t          |                    t
                              }t          j                            |          }t          ||           t          |          }t          ||           d S Nr!      )rB   r&   r   r   r9   complexnumpyr   rg   rF   rD   r)   r*   y2s         r/   test_djbfftz_TestFFTBase.test_djbfft   s    q 	, 	,A1A	!AAHHW%%&&Aq!!B%a+++AA%a++++	, 	,r1   c                     t          t          t          g            t          t          t          ddgddggd           d S NrS   r!   )assert_raises
ValueErrorr   rf   s    r/   test_invalid_sizesz_TestFFTBase.test_invalid_sizes   s:    j#r***j#1qe}b99999r1   N)	__name__
__module____qualname__rh   rq   r{   r}   r   r    r1   r/   r`   r`   n   sn          
8 8 87 7 77 7 7, , ,: : : : :r1   r`   c                       e Zd Zd ZdS )TestLongDoubleFFTc                 J    t           j        | _        t           j        | _        d S r3   r&   clongdoublerd   
longdoubler-   rf   s    r/   rh   zTestLongDoubleFFT.setup_method       >=r1   Nr   r   r   rh   r   r1   r/   r   r      s#        ! ! ! ! !r1   r   c                       e Zd Zd ZdS )TestDoubleFFTc                 J    t           j        | _        t           j        | _        d S r3   )r&   r   rd   float64r-   rf   s    r/   rh   zTestDoubleFFT.setup_method   s    ::r1   Nr   r   r1   r/   r   r      #            r1   r   c                       e Zd Zd ZdS )TestSingleFFTc                 J    t           j        | _        t           j        | _        d S r3   r&   	complex64rd   float32r-   rf   s    r/   rh   zTestSingleFFT.setup_method       <:r1   Nr   r   r1   r/   r   r      r   r1   r   c                       e Zd Zd Zd ZdS )TestFloat16FFTc                 H   t          j        g dt           j                  }t          |d          }t	          |j        t           j                   t	          |j        d           t          |t          |
                    t           j                                       d S )Nrt   r>   ru   rv   )ru   r&   r   float16r   r   r7   r   rx   r   rG   r9   r   )rg   rX   r*   s      r/   test_1_argument_realz#TestFloat16FFT.test_1_argument_real   s}    Xlll"*555aLLLQWbl+++QWe$$$!!Z		"*0E0E%F%FGGGGGr1   c                    t          j        g dt           j                  }t          j        g dt           j                  }t          ||gd          }t	          |j        t           j                   t	          |j        d           t          |d         t          |
                    t           j                                       t          |d         t          |
                    t           j                                       d S rs   r   ry   s       r/   r{   z#TestFloat16FFT.test_n_argument_real   s    Xlll"*555Xlll"*555RAQWbl+++QWf%%%!!A$
299RZ3H3H(I(IJJJ!!A$
299RZ3H3H(I(IJJJJJr1   N)r   r   r   r   r{   r   r1   r/   r   r      s:        H H HK K K K Kr1   r   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
_TestIFFTBasec                 D    t           j                            d           d S rb   r&   r4   re   rf   s    r/   rh   z_TestIFFTBase.setup_method       
	tr1   c                 Z   t          j        g d| j                  }t          |          }t	          |          }t          |j        | j                   t          ||           t          j        g d| j                  }t          t          |          t	          |                     d S )Nrj   rm   )r&   r   rd   r
   rI   r   r7   r   ro   s       r/   rq   z_TestIFFTBase.test_definition   s    H,,,dh77GG^^QWdh'''!!B'''H^^^TX..!$q''+a..99999r1   c                    t          j        g d| j                  }t          |          }t	          |j        | j                   t          |          }t          ||           t          j        g d| j                  }t	          |j        | j                   t          t          |          t          |                     d S )NrS   r!   rk   ru   rS   r!   rk   ru   rS   r!   rk   ru   rn   r>   )	r&   r   r-   r
   r   r7   rd   rI   r   ro   s       r/   test_definition_realz"_TestIFFTBase.test_definition_real   s    H&&&11GGQWdh'''^^!!B'''H[[[111QWdh'''!$q''+a..99999r1   c                    t          dd          D ]}d|z  }t          j        |          }t          |                    | j                            }t          j                            |                    | j                            }t          ||| j	        | j
                   t          |          }t          ||| j	        | j
                   d S )Nr!   r   )r+   atol)rB   r&   r   r
   r9   rd   r   r   r   r+   r   r   s         r/   r   z_TestIFFTBase.test_djbfft   s    q 	B 	BA1A	!AQXXdh''((A 2 233BAbtytyAAAAQAAbtytyAAAAA	B 	Br1   c                    dD ]}t          |g                              | j                  }t          |g                              | j                  d|z  z   }t          t	          |                    }t	          t          |                    }t          |j        | j                   t          |j        | j                   t          ||           t          ||           d S )N	rS   3   o   d      @         i                 ?)r4   r9   rd   r
   r   r   r7   r   rg   r,   r)   rp   r   s        r/   test_random_complexz!_TestIFFTBase.test_random_complex   s    6 	- 	-Dv%%dh//Av%%dh//"Q$6Ac!ffBT!WWB48,,,48,,,%b!,,,%b!,,,,	- 	-r1   c                 x   dD ]}t          |g                              | j                  }t          t	          |                    }t	          t          |                    }t          |j        | j                   t          |j        | j                   t          ||           t          ||           d S )Nr   )	r4   r9   r-   r
   r   r   r7   rd   r   r   s        r/   test_random_realz_TestIFFTBase.test_random_real   s    6 	- 	-Dv%%dh//Ac!ffBT!WWB48,,,48,,,%b!,,,%b!,,,,	- 	-r1   c                    t           t          z   D ]z}t          j                            d           t          j                            |                              | j                  }t          t          |                    }t          ||| j        || j                   t          t          |                    }t          ||| j        || j                   |dt          j                            |          z  z                       | j                  }t          t          |                    }t          ||| j        || j                   t          t          |                    }t          ||| j        || j                   |d S Nrc   r   )LARGE_COMPOSITE_SIZESLARGE_PRIME_SIZESr&   r4   re   r    r9   r-   r
   r   r0   r+   rd   )rg   r,   r)   r*   s       r/   test_size_accuracyz _TestIFFTBase.test_size_accuracy   s8   ),== 	C 	CDINN4   	t$$++DH55ASVVA!!Q	4BBBDGGA!!Q	4BBBR	t,,,,44TX>>ASVVA!!Q	4BBBDGGA!!Q	4BBBB	C 	Cr1   c                     t          t          t          g            t          t          t          ddgddggd           d S r   )r   r   r
   rf   s    r/   r   z _TestIFFTBase.test_invalid_sizes  :    j$+++j$!A!ur:::::r1   N)r   r   r   rh   rq   r   r   r   r   r   r   r   r1   r/   r   r      s          : : :	: 	: 	:B B B	- 	- 	-- - -C C C ; ; ; ; ;r1   r   z Long double is aliased to double)reasonc                       e Zd Zd ZdS )TestLongDoubleIFFTc                 f    t           j        | _        t           j        | _        d| _        d| _        d S N绽|=)r&   r   rd   r   r-   r+   r   rf   s    r/   rh   zTestLongDoubleIFFT.setup_method  s&    >=				r1   Nr   r   r1   r/   r   r     s#            r1   r   c                       e Zd Zd ZdS )TestDoubleIFFTc                 f    t           j        | _        t           j        | _        d| _        d| _        d S r   )r&   
complex128rd   r   r-   r+   r   rf   s    r/   rh   zTestDoubleIFFT.setup_method  s&    =:				r1   Nr   r   r1   r/   r   r     s#            r1   r   c                       e Zd Zd ZdS )TestSingleIFFTc                 f    t           j        | _        t           j        | _        d| _        d| _        d S )Nh㈵>g-C6?)r&   r   rd   r   r-   r+   r   rf   s    r/   rh   zTestSingleIFFT.setup_method#  s&    <:				r1   Nr   r   r1   r/   r   r   "  s#            r1   r   c                   L    e Zd Zd Zd Zd Zd Zd Z G d d          Zd Z	d	S )
_TestRFFTBasec                 D    t           j                            d           d S rb   r   rf   s    r/   rh   z_TestRFFTBase.setup_method+  r   r1   c                     g dg dfD ]e}t          j        || j                  }t          |          }t	          |          }t          ||           t          |j        | j                   fd S )Nr   )	rS   r!   rk   ru   rS   r!   rk   ru   rn   r>   )	r&   r   r-   r   rT   r   r   r7   rd   )rg   tr)   r*   rp   s        r/   rq   z_TestRFFTBase.test_definition.  s    ***,G,G,GH 	, 	,A$(+++AQAQB%a+++$(++++	, 	,r1   c                     t          dd          D ]Y}d|z  }t          j        |          }t          j                            |          }t	          |          }t          ||           Zd S r   )rB   r&   r   r   r   r   rg   rF   rD   r)   rp   r*   s         r/   r   z_TestRFFTBase.test_djbfft6  sh    q 	, 	,A1A	!AQBQA%a++++	, 	,r1   c                     t          t          t          g            t          t          t          ddgddggd           d S r   )r   r   r   rf   s    r/   r   z _TestRFFTBase.test_invalid_sizes>  r   r1   c                     t          j        d| j                  }t          t          d          5  t          |           d d d            d S # 1 swxY w Y   d S )N
   r>   x must be a real sequencematch)r&   r   rd   r   	TypeErrorr   rg   r)   s     r/   test_complex_inputz _TestRFFTBase.test_complex_inputB  s    HRtx(((9,GHHH 	 	GGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                       e Zd Zd Zd ZdS )_TestRFFTBase.MockSeriesc                 8    t          j        |          | _        d S r3   )r&   r   datarg   r   s     r/   __init__z!_TestRFFTBase.MockSeries.__init__I  s    
4((DIIIr1   c                 z    	 t          | j        |          S # t          $ r}t          d| d          |d }~ww xY w)Nz&'MockSeries' object has no attribute '')getattrr   AttributeError)rg   itemes      r/   __getattr__z$_TestRFFTBase.MockSeries.__getattr__L  sp    Kty$///! K K K$ &C;?&C &C &C D DIJKKs    
:5:N)r   r   r   r   r   r   r1   r/   
MockSeriesr   H  s7        	) 	) 	)	K 	K 	K 	K 	Kr1   r   c                     t          j        g d          }t                              |          }g d}t	          |           t          ||           t          |j        |           d S )N)g      ?g       @g      @g      @g      @r   )r&   r   r   r   r   r   r   )rg   r)   xsexpecteds       r/   test_non_ndarray_with_dtypez)_TestRFFTBase.test_non_ndarray_with_dtypeS  si    H)))**%%a(("??R 	Q!!!RWh'''''r1   N)
r   r   r   rh   rq   r   r   r   r   r   r   r1   r/   r   r   *  s          , , ,, , ,; ; ;  	K 	K 	K 	K 	K 	K 	K 	K	( 	( 	( 	( 	(r1   r   c                       e Zd Zd ZdS )TestRFFTLongDoublec                 J    t           j        | _        t           j        | _        d S r3   r   rf   s    r/   rh   zTestRFFTLongDouble.setup_methoda  r   r1   Nr   r   r1   r/   r   r   ^  s#        ! ! ! ! !r1   r   c                       e Zd Zd ZdS )TestRFFTDoublec                 J    t           j        | _        t           j        | _        d S r3   )r&   r   rd   r   r-   rf   s    r/   rh   zTestRFFTDouble.setup_methodg  s    =:r1   Nr   r   r1   r/   r   r   f  r   r1   r   c                       e Zd Zd ZdS )TestRFFTSinglec                 J    t           j        | _        t           j        | _        d S r3   r   rf   s    r/   rh   zTestRFFTSingle.setup_methodm  r   r1   Nr   r   r1   r/   r  r  l  r   r1   r  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )_TestIRFFTBasec                 D    t           j                            d           d S rb   r   rf   s    r/   rh   z_TestIRFFTBase.setup_methods  r   r1   c                      g d}g d}|d d         }g d}|d d         } fd} |||            |||           d S )N)rS          @      @rl   y      ?       @y      @      @)rS   r	  rl   r	  ru          @            @      r
  rn   )	rS   r	  rl   r	  y      @      @y      @      r
  r  r
  c                 Z   t          t          j        | j                  t	          |                    }t          | t	          |                    }t          |j        j                   t          ||j
                   t          |t          |          j
                   d S )Nr>   rv   )decimal)r   r&   r   rd   rA   rY   r   r7   r-   r   ndecr
   )r)   xrr*   rp   rg   s       r/   _testz-_TestIRFFTBase.test_definition.<locals>._test}  s    bhq111SWW===AaR))B$(+++%aDI>>>>%aR$)DDDDDDr1   r   )rg   rX   x1_1x2_1rz   r  s   `     r/   rq   z_TestIRFFTBase.test_definitionv  s    $$$222"1"X:::"1"X	E 	E 	E 	E 	E 	b$b$r1   c                 n   t          dd          D ]}d|z  }t          j        d|d          dt          j        d|dz   d          z  z   }d|d<   |dz  dk    rt          j        |d                   |d<   t          j                            |          }t          |          }t          ||           d S )Nr!   r   r   r   rS   )rB   r&   r   rW   r   r   r   r   s         r/   r   z_TestIRFFTBase.test_djbfft  s    q 	, 	,A1A	"a##b29Q!Q+?+?&??AAaD1uzz""aBaA%a++++	, 	,r1   c                    dD ]}t          |g                              | j                  }t          t	          |          |          }t	          t          ||dz  dz
                      }t          |j        | j                   t          |j        | j                   t          ||| j	        d|            t          ||| j	        d|            d S )Nr   rv   r!   rS   zsize=)r  r.   )
r4   r9   r-   r   r   r   r7   rd   r   r  r   s        r/   r   z_TestIRFFTBase.test_random_real  s    6 	X 	XDv%%dh//AtAww$'''BeA$q&(,,,--B48,,,48,,,%b!TYPTWWWW%b!TYPTWWWWW	X 	Xr1   c           
      H   | j         t          j        k    rd}n| j         t          j        k    rd}t          t
          z   D ]}t          j                            d           t          j                            |          	                    | j                   }t          t          |          t          |                    }t          ||||| j                    t          t          |dt          |          z  dz
                      }t          ||||| j                    d S )Nr   r   rc   r!   rS   )r-   r&   r   r   r   r   r4   re   r    r9   r   r   rA   r0   )rg   r+   r,   r)   r*   s        r/   r   z!_TestIRFFTBase.test_size_accuracy  s    8rz!!DDX##D),== 	> 	>DINN4   	t$$++DH55Ad1ggs1vv&&A!!QdDH===U1a#a&&j1n--..A!!QdDH====	> 	>r1   c                     t          t          t          g            t          t          t          ddgddggd           d S r   )r   r   r   rf   s    r/   r   z!_TestIRFFTBase.test_invalid_sizes  s:    j%,,,j%1Q%1;;;;;r1   N)	r   r   r   rh   rq   r   r   r   r   r   r1   r/   r  r  r  sq            "	, 	, 	,X X X> > >< < < < <r1   r  c                       e Zd Zd ZdS )TestIRFFTLongDoublec                 X    t           j        | _        t           j        | _        d| _        d S Nr   r&   r   rd   r   r-   r  rf   s    r/   rh   z TestIRFFTLongDouble.setup_method      =:			r1   Nr   r   r1   r/   r  r    s#            r1   r  c                       e Zd Zd ZdS )TestIRFFTDoublec                 X    t           j        | _        t           j        | _        d| _        d S r  r  rf   s    r/   rh   zTestIRFFTDouble.setup_method  r  r1   Nr   r   r1   r/   r  r    s#            r1   r  c                       e Zd Zd ZdS )TestIRFFTSinglec                 X    t           j        | _        t           j        | _        d| _        d S )Nrn   )r&   r   rd   r   r-   r  rf   s    r/   rh   zTestIRFFTSingle.setup_method  s    <:			r1   Nr   r   r1   r/   r"  r"    s#            r1   r"  c                   X   e Zd Zd Zd Zej                            dee	z             d             Z
ej                            deez             d             Zd Zej                            dee	z             d             Zej                            deez             d             Zd	S )
TestFftnSinglec                 D    t           j                            d           d S rb   r   rf   s    r/   rh   zTestFftnSingle.setup_method  r   r1   c                 4   g dg dg dg}t          t          j        |t          j                            }t	          |j        t          j        k    d           t          j        t          |          t          j                  }t          ||           d S )NrS   r!   rk   ru   rn            	   z-double precision output with single precision)msg)r   r&   r   r   r   r7   r   r   rg   r)   r*   y_rs       r/   rq   zTestFftnSingle.test_definition  s    YYYYYY !RZ(())2<'C	E 	E 	E 	E htAww--&q#.....r1   r,   c                    t           j                            d          }|                    ||f          d|                    ||f          z  z   }t          |j                            t           j                            }t          |j                            t           j                                                t           j                  }t          |j
        t           j                   t          ||d           d S )Nrc   r     r&   r4   default_rngr   rW   r9   r   r   r   r   r7   r   rg   r,   rngr)   rp   r   s         r/   test_size_accuracy_smallz'TestFftnSingle.test_size_accuracy_small  s    i##D))JJd|$$rCJJd|,D,D'DD!&--
++,,!&--
++,,33BLAARXr|,,,&r2t44444r1   c                    t           j                            d          }|                    |df          d|                    |df          z  z   }t          |j                            t           j                            }t          |j                            t           j                                                t           j                  }t          |j
        t           j                   t          ||d           d S )Nrc   rk   r   r3  r4  r6  s         r/   test_size_accuracy_largez'TestFftnSingle.test_size_accuracy_large  s    i##D))JJay!!BT1I)>)>$>>!&--
++,,!&--
++,,33BLAARXr|,,,&r2t44444r1   c                 *   g dg dg dg}t          t          j        |t          j                            }t	          |j        t          j                   t          j        t          |          t          j                  }t          ||           d S )Nr(  r)  r+  )r   r&   r   r   r   r7   r   r   r0  s       r/   test_definition_float16z&TestFftnSingle.test_definition_float16  s~    YYYYYY !RZ(())QWbl+++htAww--&q#.....r1   c                    t           j                            d          }|                    ||f          d|                    ||f          z  z   }t          |j                            t           j                            }t          |j                            t           j                                                t           j                  }t          |j
        t           j                   t          ||d           d S )Nrc   r   g    Ar&   r4   r5  r   rW   r9   r   r   r   r   r7   r   r6  s         r/   test_float16_input_smallz'TestFftnSingle.test_float16_input_small  s    i##D))JJd|$$r#**dD\*B*B'BB!&--
++,,!&--
++,,33BLAARXr|,,,&r2s33333r1   c                    t           j                            d          }|                    |df          d|                    |df          z  z   }t          |j                            t           j                            }t          |j                            t           j                                                t           j                  }t          |j
        t           j                   t          ||d           d S )Nrc   rk   r   g    >Ar>  r6  s         r/   test_float16_input_largez'TestFftnSingle.test_float16_input_large   s    i##D))JJay!!Bszz4)'<'<$<<!&--
++,,!&--
++,,33BLAARXr|,,,&r2s33333r1   N)r   r   r   rh   rq   pytestmarkparametrizeSMALL_COMPOSITE_SIZESSMALL_PRIME_SIZESr8  r   r   r:  r<  r?  rA  r   r1   r/   r%  r%    s         	/ 	/ 	/ [V%:=N%NOO5 5 PO5 [V%:=N%NOO5 5 PO5/ / / [V%:=N%NOO4 4 PO4 [V%:=N%NOO4 4 PO4 4 4r1   r%  c                   J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )TestFftnc                 D    t           j                            d           d S rb   r   rf   s    r/   rh   zTestFftn.setup_method  r   r1   c                 X   g dg dg dg}t          |          }t          |t          |                     t          d          }t          t          |          t          |                     t          d          }t          t          |          t          |                     d S )Nr(  r)  r+        rn   ru   rk   rL  )r   r   rO   r4   rg   r)   r*   s      r/   rq   zTestFftn.test_definition  s    YYYYYY GG!![^^4448!$q'';q>>:::=!!!$q'';q>>:::::r1   c                 B   g dg dg dg}g dg dg dg}g dg dg d	g}g dg dg dg}g dg dg dg}g dg dg d	g}g d
g dg dg}g dg dg dg}g dg dg dg}	g dg dg dg}
g dg dg dg}g dg dg dg}g dg dg dg}g dg dg dg}g dg dg dg}g d
g dg dg}g dg dg dg}g dg dg dg}|||	g}|
||g}|||g}|||g}|||g}t          |||g          }t          t          |          t          |d                     t          t          |          t          |d                     t          t          |d          t          |d                      t          |d!          }t          t          |d"d#          t          |                     t          |d$          }t          t          t          |d"d#          d"d%          t          |                     t          |d&          }t          t          t          |d"d#          d#d%          t          |                     t          |d'          }t          t          |d%d#          t          |                     t          |d(          }t          t          |d%d"          t          |                     t          |d)          }t          t          |          |d*                    t          t          |          |d+                    t          t          |          |d,                    t          |d-          }t          t          |          |d*                    t          t          |          |d+                    t          t          |          |d,                    t          |d.          }t          t          |d d d d d*f                   |d d d d d*f                    t          t          |d d d d d+f                   |d d d d d+f                    t          t          |d d d d d,f                   |d d d d d,f                    t          |d/          }t          t          |d d d*d d f                   |d d d*d d f                    t          t          |d d d+d d f                   |d d d+d d f                    t          t          |d d d,d d f                   |d d d,d d f                    t          |d0          }t          t          |          t          |d*         d%d"                     t          t          |          t          |d+         d%d"                     t          t          |          t          |d,         d%d"                     t          |d1          }t          t          |          t          |d d d*d d f         d"d%                     t          t          |          t          |d d d+d d f         d"d%                     t          t          |          t          |d d d,d d f         d"d%                     t          |d2          }t          t          |          t          |d d d d d*f         d"d%                     t          t          |          t          |d d d d d+f         d"d%                     t          t          |	          t          |d d d d d,f         d"d%                     t          |d3          }t	          d4          D ]G}t	          d4          D ]5}t          t          |||d d f                   |||d d f                    6Ht          |d5          }t	          d4          D ]G}t	          d4          D ]5}t          t          ||d d |f                   ||d d |f                    6Ht          |d6          }t	          d4          D ]G}t	          d4          D ]5}t          t          |d d ||f                   |d d ||f                    6Ht          |d7          }t          ||           d S )8Nr(  r)  r+  )r         )   r      )         )   rL     )         )   rM     )rS   r   rX  )ru   rS  rZ  )r,  rU  r]  )r!   rQ  rL  )rn   r   r[  )r-  rV  rM  )rk   rR  rY  )r*  rT  r\  )r.  rW  r^  )rS   ru   r,  )r   rS  rU  )rX  rZ  r]  )r!   rn   r-  )rQ  r   rV  )rL  r[  rM  )rk   r*  r.  )rR  rT  rW  )rY  r\  r^  )r  r[   r   rS   r!   )r   r!   )r   r  )r!   rS   r   r  r_  )r!   r   rS   r`  )rS   r!   r   )rS   r   r!   )r   r!   rS   r`  r  r   rS   r!   rS   r!   r_  r`  )r_  r  r  r`  )r  r_  )r`  r_  r  rk   r`  r   r   )r   r   r   r   rB   r   )rg   plane1plane2plane3	ki_plane1	ki_plane2	ki_plane3	jk_plane1	jk_plane2	jk_plane3	kj_plane1	kj_plane2	kj_plane3	ij_plane1	ij_plane2	ij_plane3	ik_plane1	ik_plane2	ik_plane3	ijk_space	ikj_space	jik_space	jki_space	kij_spacer)   r*   rF   js                               r/   test_axes_argumentzTestFftn.test_axes_argument  s
   )))))) ,,,,,,  ,,,,,,  YY!\\!\\#	 YY!\\!\\#	 YY!\\!\\#	 ![[ [[ [["	 ![[ [[ [["	 ![[ [[ [["	 YY!\\<<<1	YY!\\<<<1	YY!\\<<<1	YYYYYY 	 "\\!\\!\\#	 "\\!\\!\\#	 ![[ [[ [["	 ![[ [[ [["	 ![[ [[ [["	 	95		95		95		95		95	666*++!$q''"&q|"<"<"<	> 	> 	>!$q''4	+B+B+BCCC!$qv"6"6"6QW8M8M8MNNN###!(1b""5"5tIGGG###!(8Ar2+>+>B"G"G"&y//	3 	3 	3###!(8Ar2+>+>B"G"G"&y//	3 	3 	3###!(1b""5"5tIGGG###!(1b""5"5tIGGG"""!$v,,!555!$v,,!555!$v,,!555   !$v,,!555!$v,,!555!$v,,!555"""!$qAAAqz"2"2AaaaAgJ???!$qAAAqz"2"2AaaaAgJ???!$qAAAqz"2"2AaaaAgJ???"""!$qAqqqz"2"2AaaaAAAgJ???!$qAqqqz"2"2AaaaAAAgJ???!$qAqqqz"2"2AaaaAAAgJ???"""!$y//8AaD"b3I3IJJJ!$y//8AaD"b3I3IJJJ!$y//8AaD"b3I3IJJJ"""!$y//"*1QQQ111W:r2">">	@ 	@ 	@!$y//"*1QQQ111W:r2">">	@ 	@ 	@!$y//"*1QQQ111W:r2">">	@ 	@ 	@ """!$y//"*1QQQ1W:r2">">	@ 	@ 	@!$y//"*1QQQ1W:r2">">	@ 	@ 	@!$y//"*1QQQ1W:r2">">	@ 	@ 	@ q 	G 	GA1XX G G)#a1aaaj//1Q111W:FFFFGq 	G 	GA1XX G G)#a111aj//1Q1W:FFFFGq 	G 	GA1XX G G)#a1aj//1QQQ1W:FFFFG !!Q'''''r1   c                     g dg dg}g dg dg dg dg}t          |d          }t          |t          |                     t          |d          }t          |t          |d d	                              d S )
Nr(  r)  rS   r!   rk   r   ru   rn   r*  r   r   r   r   r   ru   ru   s)rk   ru   r  )r   r   rg   small_xlarge_x1r*   s       r/   test_shape_argumentzTestFftn.test_shape_argument  s    9999 LL LL LL LL"
 F###!!T(^^444F###!!T(3B3-%8%899999r1   c                 J   g dg dg dg}t          g dg dg dg dg          }t          |dd	
          }t          |t          |                     t          |dd
          }t          |t          t          t          |dd                    dd                     d S )Nr(  r)  r+  r  r  )r,  r-  r.  r   r  r  rb  r  r\   re  r  r`  )r   r   r   r   r  s       r/   test_shape_axes_argumentz!TestFftn.test_shape_axes_argument  s    999999 ,,,&,,&,,&,,( ) ) F222!!T(^^444F222!!X(B++,,b"&6 &6 	7 	7 	7 	7 	7r1   c                    t           j                            d          }t          |dd          }t          |t	          |dd                     t           j                            d          }t          |dd          }t          |t	          |d	d                     t           j                            d
          }t          |dd          }t          |t           j                            |dd                     d S )N)r   rn   rk   r,  rf  )r-  )r\   r  r  r-  )rL   rD   rg  r`  ru   ru   r!   rd  r-  r-  )r   r4   r   r   r   rO  s      r/   test_shape_axes_argument2z"TestFftn.test_shape_axes_argument2  s    L..$'''!!Sq%9%9%9::: L..$'''!!Sq%9%9%9::: L	**V,,,!!"')..V."L"L	N 	N 	N 	N 	Nr1   c                     t          d          }t          t          d          5  t          |d           d d d            d S # 1 swxY w Y   d S )Nr  z)shape requires more axes than are presentr   )r-  r-  r!   rS   r  )r   r   r   r   r   s     r/   test_shape_argument_morez!TestFftn.test_shape_argument_more  s    ):!LN N N 	$ 	$l####	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   AA	A	c                    t          t          d          5  t          g g           d d d            n# 1 swxY w Y   t          t          d          5  t          ddgddggd           d d d            d S # 1 swxY w Y   d S Nz4invalid number of data points \(\[1, 0\]\) specifiedr   z5invalid number of data points \(\[4, -3\]\) specifiedrS   r!   )ru   r_  )r   r   r   rf   s    r/   r   zTestFftn.test_invalid_sizes  s#   :"67 7 7 	 	 "JJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 :"78 8 8 	, 	, 1a&1a&!7+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,   488A99A= A=c                     t           j                            d          }t          t          |g           |d           d S N)r!   r!   r!   r[   gHz>r   )r   r4   r   r   r   s     r/   test_no_axeszTestFftn.test_no_axes  s?    L((QR(((!$777777r1   c                     t          j        d          }t          |dd          }t           j                            |dd          }t	          ||           dS )z-FFT returns wrong result with axes parameter.r  r  rd  r  N)r   onesr   r   r   r0  s       r/   test_regression_244zTestFftn.test_regression_244  sV     Jy!!f8,,,innQ&xn883r1   N)r   r   r   rh   rq   r  r  r  r  r  r   r  r  r   r1   r/   rH  rH    s          ; ; ;D( D( D(L: : :7 7 7N N N"$ $ $	, 	, 	,8 8 8         r1   rH  c                   :   e Zd ZdZdZd Zej                            de	j
        e	j        dfe	j        e	j        dfg          d             Zej                            dddg          ej                            dg d	          d
                         Zd Zd ZdS )	TestIfftnNc                 D    t           j                            d           d S rb   r   rf   s    r/   rh   zTestIfftn.setup_method  r   r1   dtype,cdtype,maxnlpr3    c                    t           j                            d          }t          j        g dg dg dg|          }t	          |          }t          |j        |           t          |t          |          |           |                    d          }t          t	          |          t          |          |           |                    d          }t          t	          |          t          |          |           d S Nrc   r(  r)  r+  r>   rK  rN  )	r&   r4   r5  r   r   r   r7   r   rQ   rg   r7   cdtypemaxnlpr7  r)   r*   s          r/   rq   zTestIfftn.test_definition       i##D))Hiiiiiii!(-/ / / !HHQWf%%%&q,q//6BBBJJx  &uQxxa&IIIJJ}%%&uQxxa&IIIIIr1   r  r,   rS   r!   r       r   \   c                 T   t           j                            d          }|                    ||g          d|                    ||g          z  z   }t          t	          t          |                    ||           t          t          t	          |                    ||           d S r   )r&   r4   r5  r   r   r   )rg   r  r,   r7  r)   s        r/   r   zTestIfftn.test_random_complex  s     i##D))JJd|$$rCJJd|,D,D'DD&uT!WW~~q&AAA&tE!HH~~q&AAAAAr1   c                    t          t          d          5  t          g g           d d d            n# 1 swxY w Y   t          t          d          5  t          ddgddggd           d d d            d S # 1 swxY w Y   d S r  )r   r   r   rf   s    r/   r   zTestIfftn.test_invalid_sizes  s#   :"67 7 7 	 	 2$KKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 :"78 8 8 	- 	- Aq6Aq6"G,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-r  c                     t           j                            d          }t          t          |g           |d           d S r  )r   r4   r   r   r   s     r/   r  zTestIfftn.test_no_axes  s?    L((ab)))14888888r1   )r   r   r   r7   r  rh   rB  rC  rD  r&   r   r   r   r   rq   r   r   r  r   r1   r/   r  r    s        EF   [2!z2=$?!z2<>@A AJ JA AJ [Xd|44[V%;%;%;<<B B =< 54B	- 	- 	-9 9 9 9 9r1   r  c                      e Zd ZdZdZd Zej                            de	j
        e	j        dfe	j        e	j        dfg          d             Zej                            dg d          d	             Zej                            d
eeg          d             Zej                            d
eeg          d             Zd ZdS )	TestRfftnNc                 D    t           j                            d           d S rb   r   rf   s    r/   rh   zTestRfftn.setup_method"  r   r1   r  r3  r  c                    t           j                            d          }t          j        g dg dg dg|          }t	          |          }t          |j        |           t          |t          |          |           |                    d          }t          t	          |          t          |          |           |                    d          }t          t	          |          t          |          |           d S r  )	r&   r4   r5  r   r   r   r7   r   r^   r  s          r/   rq   zTestRfftn.test_definition%  r  r1   r,   r  c                     t           j                            d          }|                    ||g          }t          t	          t          |          |j                  |d           d S )Nrc   r   r  )r&   r4   r5  r   r   r   rx   )rg   r,   r7  r)   s       r/   test_randomzTestRfftn.test_random7  sY    i##D))JJd|$$uQxx1115AAAAAAr1   funcc                     t          t          d          5   |g g           d d d            n# 1 swxY w Y   t          t          d          5   |ddgddggd           d d d            d S # 1 swxY w Y   d S r  r   r   rg   r  s     r/   r   zTestRfftn.test_invalid_sizes=  s'   :"67 7 7 	 	 D"JJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 :"78 8 8 	, 	, D1a&1a&!7+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   044A11A58A5c                 ~    t          t          d          5   |g g            d d d            d S # 1 swxY w Y   d S )Nz#at least 1 axis must be transformedr   r[   r  r  s     r/   r  zTestRfftn.test_no_axesI  s    :!FH H H 	 	D"	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   266c                     t          t          d          5  t          t          j        dt          j                             d d d            d S # 1 swxY w Y   d S )Nr   r   r   r>   )r   r   r   r&   r   r   rf   s    r/   r   zTestRfftn.test_complex_inputO  s    9,GHHH 	4 	4"(2R\222333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   .AAA)r   r   r   r7   r  rh   rB  rC  rD  r&   r   r   r   r   rq   r  r   r   r   r  r   r   r1   r/   r  r    s4       EF   [2!z2=$?!z2<>@A AJ JA AJ [V%;%;%;<<B B =<B
 [VeV_55	, 	, 65	, [VeV_55  65
4 4 4 4 4r1   r  c                       e Zd Zd ZdS )	FakeArrayc                 ,    || _         |j        | _        d S r3   )_data__array_interface__r   s     r/   r   zFakeArray.__init__U  s    
#'#;   r1   N)r   r   r   r   r   r1   r/   r  r  T  s#        < < < < <r1   r  c                       e Zd Zd ZddZdS )
FakeArray2c                     || _         d S r3   r  r   s     r/   r   zFakeArray2.__init__[  s    


r1   Nc                     | j         S r3   r  )rg   r7   copys      r/   	__array__zFakeArray2.__array__^  s
    zr1   )NN)r   r   r   r   r  r   r1   r/   r  r  Z  s7               r1   r  c                      e Zd ZdZej        ej        ej        gZeej	        ej
        ej        gz   Zg dZd Zd Zej                            de          ej                            de          ej                            ddd	g          ej                            d
g d          d                                                 Zej                            de          ej                            de          ej                            ddd	g          ej                            d
g d          d                                                 Zd Zej                            de          ej                            ddd	g          ej                            d
g d          d                                     ZdS )TestOverwritez4Check input overwrite behavior of the FFT functions.)r-  rU  r  c                     |                                 }d t          t          fD ]S} | ||          |||           |j         d|j         |j        d|d|d|d}	|st          ||d|	 	           Td S )
Nc                     | S r3   r   r]   s    r/   <lambda>z&TestOverwrite._check.<locals>.<lambda>l  s    q r1   )overwrite_x(z, z, axis=z, overwrite_x=)zspurious overwrite in )r.   )r  r  r  r   r7   rx   r   )
rg   r)   routinefftsizerL   r  should_overwriterz   fakesigs
             r/   _checkzTestOverwrite._checkj  s    VVXX [)Z8 	L 	LDGDDHHgtEEEE& B B B!' B Bw B BB B1<B B BC# LR,JS,J,JKKKK	L 	Lr1   c                    t           j                            d           t          j        |t           j                  r+t          j        j        | dt          j        j        | z  z   }nt          j        j        | }|                    |          }|o||v o|||         k    }	|                     ||||||	           d S )Nrc   r   r  r  )r&   r4   re   
issubdtypecomplexfloatingrandnr9   r  )
rg   r  r7   rx   rL   overwritable_dtypesr  r  r   r  s
             r/   	_check_1dzTestOverwrite._check_1dt  s    
	t= 233 	+9?E*R	0G-GGDD9?E*D{{5!!' 7 %)< <7 '5; 6 	 	D'7D +%5 	 	7 	7 	7 	7 	7r1   r7   r  r  TFz
shape,axes))rU  r  )rU  r!   r   )r!   rU  rS   c           	          t           j        t           j        t           j        f}|                     t
          ||||||           |                     t          ||||||           d S r3   )r&   r   r   r   r  r   r
   rg   r7   r  r  rx   r\   overwritables          r/   test_fft_ifftzTestOverwrite.test_fft_ifft  sj     r|DsE5$	- 	- 	-tUE4	- 	- 	- 	- 	-r1   c           	          | j         }|                     t          ||||||           |                     t          ||||||           d S r3   )real_dtypesr  r   r   r  s          r/   test_rfft_irfftzTestOverwrite.test_rfft_irfft  s`     'ueUD,	- 	- 	-tUE4	- 	- 	- 	- 	-r1   c                 D  
 t           j                            d           t          j        t           j                  r+t          j        j        | dt          j        j        | z  z   }nt          j        j        | }|                              }
fd
d fd} 
 ||                    D ]c}	|                     |||	| |||	|                     |j        dk    r0|                     |j	        ||	| ||j	        |	|                     dd S )Nrc   r   c              3      K   t          |           dk    rdV  d S | d         dz  | d         | d         dz  fD ] } | dd                    D ]
}|f|z   V  !d S )Nr   r   r!   rS   )rA   )shpr  restfftshape_iters      r/   r  z2TestOverwrite._check_nd_one.<locals>.fftshape_iter  s      3xx1}}a&!)SVSVAX6 * *A -c!""g 6 6 * * dTk))))** *r1   c                 N    || S t          t          j        | |                    S r3   )tupler&   take)rx   r\   s     r/   
part_shapez/TestOverwrite._check_nd_one.<locals>.part_shape  s&    |RWUD11222r1   c                      | j         |          }o-t          j        |          t          j        |          k    ov S r3   )rx   r&   prod)r   rx   r\   r  r7   r  r  r  s       r/   r  z5TestOverwrite._check_nd_one.<locals>.should_overwrite  sI    
4:t,,A 5GENNbgajj05!446r1   r  rS   )
r&   r4   re   r  r  r  r9   r  rM   T)rg   r  r7   rx   r\   r  r  r   r  fftshaper  r  s     `  ``   @@r/   _check_nd_onezTestOverwrite._check_nd_one  s   
	t= 233 	+9?E*R	0G-GGDD9?E*D{{5!!	* 	* 	* 	* 	*	3 	3 	3	6 	6 	6 	6 	6 	6 	6 	6 &jj&=&=>> 		9 		9HKKgx$/)9)9$$)O)O  Q Q Q y1}}DFGXt(3-=-= $$.8 .8  9 9 9		9 		9r1   ))r  N)r  rh  )r  rh  )r  rS   )r-  rU  N)r  r   rS   )r-  rU  r!   r  )r  rc  )r  rh  )r  r  )r  )r!   )r  N)r  ra  c                     t           j        t           j        t           j        f}|                     t
          |||||           |                     t          |||||           d S r3   )r&   r   r   r   r  r   r   )rg   r7   r  rx   r\   r  s         r/   test_fftn_ifftnzTestOverwrite.test_fftn_ifftn  sj      r|D4t\&	( 	( 	(5%l&	( 	( 	( 	( 	(r1   N)r   r   r   __doc__r&   r   r   r   r  r   r   r   dtypesfftsizesr  r  rB  rC  rD  r  r  r  r  r   r1   r/   r  r  c  s;       >>:rz2=9KBL"-HHF{{HL L L7 7 7  [Wf--[Y11[]T5M::[\ ,: ,: ,: ; ;- -; ; ;: 21 .-- [Wk22[Y11[]T5M::[\ ,: ,: ,: ; ;- -; ; ;: 21 32-&9 &9 &9P [Wf--[]T5M::[\ ,E ,E ,E F F( (F F ;: .-( ( (r1   r  r  c                     t          j        dt                    }t          t          d          5   | |d           d d d            d S # 1 swxY w Y   d S )Nr   r>   zBInvalid norm value 'o', should be "backward", "ortho" or "forward"r   o)r(   )r&   r   floatr   r   )r  r)   s     r/   test_invalid_normr    s     		"E"""A	zA
B 
B 
B   	QS                 s   AAAc                     t           j                            d          }|                    d          d|                    d          z  z   }t	           | t          |                     | |                     d S )Nrc   r   r   r&   r4   RandomStater    r   r;   r  r7  r)   s      r/   test_swapped_byte_order_complexr    sl     )


%
%CrCHHRLL((ADD**++TT!WW55555r1   c                     t           j                            d          }|                    d          }t	           | t          |                     | |                     d S )Nrc   r   r  r  s      r/   test_swapped_byte_order_realr	    sV    
)


%
%CADD**++TT!WW55555r1   )Snumpy.testingr   r   r   r   r   r   rB  r	   r   scipy.fft._pocketfftr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   	numpy.fftnumpy.randomr    r   rE  r   rF  r0   r4   r;   rG   rI   rO   rQ   rT   rY   r^   r`   r   r   r   r   r   rC  skipifr   r   r   r   r   r   r   r   r  r  r  r  r"  r%  rH  r  r  r  r  r  rD  r  r  r	  r   r1   r/   <module>r     s  , , , , , , , , , , , , , , , ,  * * * * * *> > > > > > > > > > > > > > > > > > > > > > > > > > > >& & & & & & & & & & & & & & & & & & & & & &                 
    	   
N N N    
               1 1 1-: -: -: -: -: -: -: -:`! ! ! ! ! ! ! !    L       L   K K K K K K K K&J; J; J; J; J; J; J; J;Z BMRZ/=  ? ?      ? ?    ]       ]   2( 2( 2( 2( 2( 2( 2( 2(h BMRZ/=  ? ?! ! ! ! ! ! !? ?!    ]       ]   ;< ;< ;< ;< ;< ;< ;< ;<B BMRZ/=  ? ?    .  ? ?    n       n   >4 >4 >4 >4 >4 >4 >4 >4B`  `  `  `  `  `  `  ` F.9 .9 .9 .9 .9 .9 .9 .9`34 34 34 34 34 34 34 34l< < < < < < < <       w( w( w( w( w( w( w( w(t #tT5!%ueV"= > > > > #tT5#(&$"? @ @6 6@ @6 %u!=>>6 6 ?>6 6 6r1   