
    e!h                        d dl Z 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mZmZ eej"                  j%                  d      gZej"                  j(                  Zd Zej"                  j-                  dd	d
g      ej"                  j-                  dg d      ej"                  j-                  dg d      ej"                  j-                  dddg      d                             Zej"                  j0                  d        Zej"                  j-                  dddg      d        Z ed	d      ej"                  j-                  deeg      d               Zej"                  j-                  dddg      d        Zy)    N)fhtifht	fhtoffset)poch)array_api_compatible)xp_assert_closexp_assert_lessarray_namespaceskip_xp_backendsc                    d }t        j                  ddd      }t        j                  |d   |d   z        }d}d}d}| j                   |||            }t	        |||||	      }g d
}	| j                  |	| j
                        }	t        ||	       t        |||      }t	        |||||	      }g d}	| j                  |	| j
                        }	t        ||	       d}t        |||      }t	        |||||	      }g d}	| j                  |	| j
                        }	t        ||	       d}t        |||      }t	        |||||	      }g d}	| j                  |	| j
                        }	t        ||	       y )Nc                 L    | |dz   z  t        j                  | dz   dz        z  S N      )npexp)rmus     c/var/www/html/diagnosisapp-backend/venv/lib/python3.12/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


1Q8A q#r&t4D@F ZZbjjZ1FD&! sBT*Fq#r&t4D@F ZZbjjZ1FD&! DsBT*Fq#r&t4D@F ZZbjjZ1FD&! DsBT*Fq#r&t4D@F ZZbjjZ1FD&!r   optimalTFr   )r         ?g      r   )r   g?gn@   ?   c                 H   t         j                  j                  d      }|j                  |j	                  |             }|j                  dd      }|j                  dd      }|rt        ||||      }t        |||||      }	t        |	||||      }
t        |
|d	       y )
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1A	abd	3BB'r   c                    t         j                  j                  d      }| j                  |j	                  d            }|j                  dd      }d\  }}t        j                  d      5 }t        ||||       |rJ d	       	 d d d        d
\  }}t        j                  d      5 }t        ||||       |rJ d	       	 d d d        d\  }}t        j                  t              5 }t        ||||       |sJ d       	 d d d        d
\  }}t        j                  t              5 }t        ||||       |sJ d       	 d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   bxY w# 1 sw Y   y xY w)Nr2   r/   r3   r   )g      r-   T)recordr!   z)fht warned about a well-defined transform)g            ?)g      rB   z+fht did not warn about a singular transformz,ifht did not warn about a singular transform)r   r8   r9   r$   r:   r;   warningscatch_warningsr   pytestwarnsWarningr   )r&   r<   r(   r'   r   r   rA   s          r   test_fht_special_casesrH   s   s   
))



+C


3&&r*+A
++b!
C
 HB		 	 	- GAsBT"FFFz6G
 HB		 	 	- GAsBT"FFFz6G HB	g	 E&AsBT"DDDvE HB	g	 F&QRd#EEEvF F)G GG GE EF Fs0   -E*E*E%*E1EE"%E.1E:c                    t         j                  j                  d      }|j                  dd      }|j                  d|z
  d      }t        j                  dd|       }|j                  ||z        }t        j                  |d   |d   z        }t        ||d	|
      }t        |||||      }	t        j                  |      |d d d   z  }
|j                  d|
z  |z  t        |dz   |z
  dz  |      z        }t        |	|       y )Nr2   r      r3   rB   r4   r   r   r   r5   r   )r   r8   r9   r;   r"   r$   r#   r   r   r   r   r   )r.   r&   r<   r   gammar   r(   r'   r   r=   kAts               r   test_fht_exactrN      s    
))



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


1e8A
&&1ad
CsB%8FAsBvE2A
vq2wA 
QqS5L4AeQ#>>	?BArr   z,array-likes only supported for NumPy backend)np_onlyreason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       || j                  |      dd             y )Nr-   g       @)r   r$   )r&   rQ   xs      r   test_array_likerT      s`     *sCj	!*sCj	!*sCj	!	#A Bq#sOR

1sC%@Ar         c                 T     j                  d      }t        |      }d}t        j                  dd|      }t	        j
                  |d   |d   z        }t        |dt        j
                  d      z  |      } j                  ||j                  	      }t	        j                  |      |j                  |d
      z  } fd}	 |	||      }
t        |
|||      } |	||      } j                   j                  ||z
  |z              }t        | j                  d      d          y )Nr-   r   ir   r   i
   )r6   r   r   r3   )axisc                 F    | |dz   z  j                  | dz   dz        z  S r   )r   )rS   r   r&   s     r   r   ztest_gh_21661.<locals>.f   s(    26{2661a4%'?**r   )r   r   g `m3*pC )r$   r
   r   r"   mathr#   r   r    r   flipr   maxabsr	   )r&   r.   onexp_testr   r   r'   r   rL   r   a_rfht_vala_krel_errs   `             r   test_gh_21661rf      s    
**S/Cc"G	B
B1A
((1Q4!A$;
CsBO;F


1CII
&A7<<<33A+ Ar(C#sr&1G
Ar(CffRVVWs]c123G7BJJx045r   )rC   r\   numpyr   rE   scipy.fft._fftlogr   r   r   scipy.specialr   scipy.conftestr   scipy._lib._array_apir   r	   r
   markusefixtures
pytestmarkr   r+   parametrizer?   thread_unsaferH   rN   rT   rf   r[   r   r   <module>rq      s       2 2  / R R"FKK$;$;<N$OQ
;;// I"X T5M2#340r2h'( ( 1 5 3($  F  FF r2h' (6 $GIT{+B ,IB sCj)6 *6r   