
    Ug                        d dl Z d dlZd dl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 eej                            d          gZej        j        Zd Zej                            dd	d
g          ej                            dg d          ej                            dg d          ej                            dddg          d                                                 Zd Zej                            dddg          d             Z ed	dg          ej                            deeg          d                         ZdS )    N)fhtifht	fhtoffset)poch)array_api_compatible)xp_assert_closeskip_xp_backendsc                 \   d }t          j        ddd          }t          j        |d         |d         z            }d}d}d}|                      |||                    }t	          |||||	          }g d
}	|                     |	| j                  }	t          ||	           t          |||          }t	          |||||	          }g d}	|                     |	| j                  }	t          ||	           d}t          |||          }t	          |||||	          }g d}	|                     |	| j                  }	t          ||	           d}t          |||          }t	          |||||	          }g d}	|                     |	| j                  }	t          ||	           d S )Nc                 J    | |dz   z  t          j        | dz   dz            z  S )N      )npexp)rmus     Z/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/fft/tests/test_fftlog.pyfz&test_fht_agrees_with_fftlog.<locals>.f   s'    2a4yAa((          r   r   g333333?        offsetbias)g=lSgl1Z?gpR_g~]
o?g0d@?g?g02u?g7c4Uo?gU/5?gޠ3JgQiIg!m9?g 1g?Jb7?g tj3Bg 	'K?)dtyper   )g Dy?g TIg 94?gB M?gQ89w?gĥ?gZT3%?gz;_x?g9%P?gv@݆gAAY]?gayig;gGI<!?g F\mgH ?g @(LGg?)gU_g0E>y7?g4⬞	F?gR^ء*9g-g?g!a?gR޴ ?gmMUU?g .?g'?eHgZ7ZP?gmܷ`%gCGT?g2Tg҅u>g/&g)gG3>g`4]<]?g[8+?g,8GdP?g
u?g,ח$5?g~}?gra,4?gV?gh`>EgDgyٖ?gP2ZSg͆˝?gܺJ?g[U+@g"%@)r   logspacelogasarrayr   float64r   r   )
xpr   r   dlnr   r   r   aourstheirss
             r   test_fht_agrees_with_fftlogr'      s   ) ) ) 	B2A
&1ad

C	BFD


11Q88A q#r&t444D@ @ @F ZZbjZ11FD&!!! sBT***Fq#r&t444D@ @ @F ZZbjZ11FD&!!! DsBT***Fq#r&t444D@ @ @F ZZbjZ11FD&!!! DsBT***Fq#r&t444D@ @ @F ZZbjZ11FD&!!!!!r   optimalTFr   )r         ?g      r   )r   g?gn@   ?   c                    t           j                            d          }|                    |                    |                     }|                    dd          }|                    dd          }|rt          ||||          }t          |||||          }	t          |	||||          }
t          |
|d	           d S )
N   E3  r   r   initialr   r   gv!>)rtol)
r   randomRandomStater    standard_normaluniformr   r   r   r   )r*   r   r   r(   r"   rngr$   r#   r   Aa_s              r   test_fht_identityr;   [   s    
 )



+
+C


3&&q))**A
++b!

C	R		B ?3F>>>AsBvD111A	abd	3	3	3BB''''''r   c                 b   t           j                            d          }|                     |                    d                    }|                    dd          }d\  }}t          j        d          5 }t          ||||           |r
J d	            	 d d d            n# 1 swxY w Y   d
\  }}t          j        d          5 }t          ||||           |r
J d	            	 d d d            n# 1 swxY w Y   d\  }}t          j
        t                    5 }t          ||||           |s
J d            	 d d d            n# 1 swxY w Y   d
\  }}t          j
        t                    5 }t          ||||           |s
J d            	 d d d            d S # 1 swxY w Y   d S )Nr.   r+   r/   r   )g      r)   T)recordr   z)fht warned about a well-defined transform)g            ?)g      r>   z+fht did not warn about a singular transformz,ifht did not warn about a singular transform)r   r4   r5   r    r6   r7   warningscatch_warningsr   pytestwarnsWarningr   )r"   r8   r$   r#   r   r   r=   s          r   test_fht_special_casesrD   o   s   
)



+
+C


3&&r**++A
++b!

C
 HB		 	-	-	- GAsBT""""FFFFFFFG G G G G G G G G G G G G G G
 HB		 	-	-	- GAsBT""""FFFFFFFG G G G G G G G G G G G G G G
 HB	g		 E&AsBT""""DDDDDDDE E E E E E E E E E E E E E E
 HB	g		 F&QRd####EEEEEEEF F F F F F F F F F F F F F F F F FsH   8 B%%B),B)
 C77C;>C;  EEE6 F$$F(+F(c                 \   t           j                            d          }|                    dd          }|                    d|z
  d          }t          j        dd|           }|                    ||z            }t          j        |d         |d         z            }t          ||d	|
          }t          |||||          }	t          j	        |          |d d d         z  }
|                    d|
z  |z  t          |dz   |z
  dz  |          z            }t          |	|           d S )Nr.   r      r/   r>   r0   r   r   r   r1   r   )r   r4   r5   r7   r   r    r   r   r   r   r   r   )r*   r"   r8   r   gammar   r$   r#   r   r9   kAts               r   test_fht_exactrJ      s   
)



+
+C
 
Q		B KK2s##E
B1A


1e8A
&1ad

CsB%888FAsBvE222A
vq2wA 
QqS5L4AeQ#>#>>	?	?BArr   z,array-likes only supported for NumPy backend)np_onlyreasonsopc                     ddgddggddgddggddgddggg}t           ||dd           ||                     |          dd                     d S )Nr)   g       @)r   r    )r"   rM   xs      r   test_array_likerP      sw     *sCj	!*sCj	!*sCj	!	#A BBq#sOORR

1sC%@%@AAAAAr   )r?   numpyr   rA   scipy.fft._fftlogr   r   r   scipy.specialr   scipy.conftestr   scipy._lib._array_apir   markusefixtures
pytestmarkr	   r'   parametrizer;   rD   rJ   rP    r   r   <module>r[      s         2 2 2 2 2 2 2 2 2 2       / / / / / / 1 1 1 1 1 1"FK$;$;<N$O$OQ
;/ I" I" I"X T5M22#3#3#34400r2h''( ( (' 10 54 32( F F FB r2h''  ('6 $IJL L LT{++B B ,+L LB B Br   