§
    µ³ÙgÂ  ã                   ó  — 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                             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ej        j        d„ ¦   «         Zej                             dddg¦  «        d„ ¦   «         Z ed	d¬¦  «        ej                             deeg¦  «        d„ ¦   «         ¦   «         Zej                             dddg¦  «        d„ ¦   «         ZdS )é    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}|                       |||¦  «        ¦  «        }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     úQ/granary/edev/quantum/lib/python3.11/site-packages/scipy/fft/tests/test_fftlog.pyÚfz&test_fht_agrees_with_fftlog.<locals>.f   s'   € Ø�2�a‘4‰y�œ  A¡  a¡™œÑ(Ð(ó    éüÿÿÿé   é   r   r   g333333Ó?ç        ©ÚoffsetÚbias)gÿÐ=lS¿gá–l¾1£Z?gp¢Rßð_¿gœ~]’
o?g€°0d±@?g–Åíº…œ?g0¨2†u¹?g7c4UoÝ?gUËû�/5Ô?gÀÞ 3²ßJ¿g QÊi©«I¿g!m¿ÞÃ9?g áä®1¿g?ˆàJÇb7?g »tj3B¿g šÂ	'K?©Údtype©r   )g  Dy‡Ó?g ò¾T Iã¾g Ýí9¥4?g°B ûÖúM?gÈQº89Êw?g�ÀÄ¥™š?gZøT3%Á?gz;_x˜ÛÞ?g9%PÔúÑ?gv@žÀ‹Ý†¿gA”AÊÙY]?gayiìég;¿gGÁI<!?g FÌÚ\m¿gÿH¬žÒ ?g @(ÙLGü¾gš™™™™™é?)gáÿ×Uê_Àg0E>y7äÅ?g4â¬ž	F»?gR^Ø¡*9ª¿g¤-ägÑÿš?gÁ“Ó!a‘?gRÃèÞ´ À?gÍmžMUUÞ?g¨ å ð.Ò?g'?£eH�¿gŸZ7ZòÇP?gâmÜ·`�%¿gCGÎïT?gçž2œTà¾gÒ…°ýêuÀ>gå/”&ô®¾gš™™™™™é¿)göGãË3Øâ>g`4]<]?g[8„²ÛÖ+?g,8GédŠP?g¢°¢
¦u?g›,×—$5™?g~„}ç£¿?grƒa,‹4Þ?gœV—�°„Ò?gh¸`>E‘¿gDgôyÙ–?g¸P2�ZSŽ¿gÍ†ŽË�©Å?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à
�
Š
�1�1�Q˜‘8”8ÑÔ€Aõ ˆq�#�r &¨tÐ4Ñ4Ô4€Dð@ð @ð @€Fð �ZŠZ˜ b¤jˆZÑ1Ô1€FÝ�D˜&Ñ!Ô!Ð!õ �s˜B TÐ*Ñ*Ô*€FÝˆq�#�r &¨tÐ4Ñ4Ô4€Dð@ð @ð @€Fð �ZŠZ˜ b¤jˆZÑ1Ô1€FÝ�D˜&Ñ!Ô!Ð!ð €DÝ�s˜B TÐ*Ñ*Ô*€FÝˆq�#�r &¨tÐ4Ñ4Ô4€Dð@ð @ð @€Fð �ZŠZ˜ b¤jˆZÑ1Ô1€FÝ�D˜&Ñ!Ô!Ð!ð €DÝ�s˜B TÐ*Ñ*Ô*€FÝˆq�#�r &¨tÐ4Ñ4Ô4€Dð@ð @ð @€Fð �ZŠZ˜ b¤jˆZÑ1Ô1€FÝ�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¸Ð>Ñ>Ô>ˆåˆAˆs�B˜v¨DÐ1Ñ1Ô1€AÝ	ˆa��b ¨dÐ	3Ñ	3Ô	3€Bå�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 )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ð
 �H€BˆÝ	Ô	 ¨Ð	-Ñ	-Ô	-ð G°ÝˆAˆs�B˜TÐ"Ñ"Ô"Ð"ØÐFÐFÐFÑFÔFÐFÐFðGð Gð Gñ Gô Gð Gð Gð Gð Gð Gð Gøøøð Gð Gð Gð Gð
 �H€BˆÝ	Ô	 ¨Ð	-Ñ	-Ô	-ð G°ÝˆAˆs�B˜TÐ"Ñ"Ô"Ð"ØÐFÐFÐFÑFÔFÐFÐFðGð Gð Gñ Gô Gð Gð Gð Gð Gð Gð Gøøøð Gð Gð Gð Gð �H€BˆÝ	Œ•gÑ	Ô	ð E &ÝˆAˆs�B˜TÐ"Ñ"Ô"Ð"ØÐDÐDÐDÑDÔDÐDÐDðEð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð Eð �H€BˆÝ	Œ•gÑ	Ô	ð F &ÝˆQ��R˜dÐ#Ñ#Ô#Ð#ØÐ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 )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ð �KŠK˜˜2™˜sÑ#Ô#€Eå
Œ�B˜˜1ÑÔ€AØ
�
Š
�1�e‘8ÑÔ€Aå
Œ&��1”�a˜”d‘Ñ
Ô
€Cå�s˜B¨°%Ð8Ñ8Ô8€FåˆAˆs�B˜v¨EÐ2Ñ2Ô2€Aå
Œˆv‰Œ�q˜˜˜2˜”wÑ€Að 
�Š�Q�q‘S˜5‘L¥4¨¨A©¨e©°Q©¸Ñ#>Ô#>Ñ>Ñ	?Ô	?€Bå�A�rÑÔÐÐÐ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¦  «         ||                      |¦  «        dd¦  «        ¦  «         d S )Nr-   g       @)r   r$   )r&   rQ   Úxs      r   Útest_array_likerT   ³   sw   € ð �ˆ*�s˜C�jÐ	!Ø�ˆ*�s˜C�jÐ	!Ø�ˆ*�s˜C�jÐ	!ð	#€Aõ �B�B�q˜#˜s‘O”O R R¨¯
ª
°1©¬°s¸CÑ%@Ô%@ÑAÔAÐAÐAÐAr   é€   é�   c                 ó²  ‡ — ‰                       d¦  «        }t          |¦  «        }d}t          j        dd|¦  «        }t	          j        |d         |d         z  ¦  «        }t          |dt          j        d¦  «        z  |¬¦  «        }‰                       ||j        ¬	¦  «        }t	          j        |¦  «        | 	                    |d
¬¦  «        z  }ˆ fd„}	 |	||¦  «        }
t          |
|||¬¦  «        } |	||¦  «        }‰                      ‰                      ||z
  |z  ¦  «        ¦  «        }t          |‰                       d¦  «        d         ¦  «         d S )Nr-   r   iùÿÿÿr   r   iúÿÿÿé
   )r6   r   r   r3   )Úaxisc                 óN   •— | |dz   z  ‰                      | dz   dz  ¦  «        z  S r   )r   )rS   r   r&   s     €r   r   ztest_gh_21661.<locals>.fÇ   s*   ø€ Ø�2˜‘6‰{˜2Ÿ6š6 1 a¡4 %¨¡'™?œ?Ñ*Ð*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   ¼   sI  ø€ à
�*Š*�S‰/Œ/€CÝ˜cÑ"Ô"€GØ	€BÝ
Œ�B˜˜1ÑÔ€AÝ
Œ(�1�Q”4˜!˜Aœ$‘;Ñ
Ô
€CÝ�s B­¬°©¬¡O¸Ð;Ñ;Ô;€FØ
�
Š
�1˜CœIˆ
Ñ&Ô&€AÝŒ�ÑÔ˜7Ÿ<š<¨°˜<Ñ3Ô3Ñ3€Að+ð +ð +ð +ð +ð ˆ!ˆAˆr‰(Œ(€CÝ�#�s˜r¨&Ð1Ñ1Ô1€GØ
ˆ!ˆAˆr‰(Œ(€CØ�fŠf�R—V’V˜W s™]¨cÑ1Ñ2Ô2Ñ3Ô3€GÝ�7˜BŸJšJ xÑ0Ô0°Ô4Ñ5Ô5Ð5Ð5Ð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      sN  ðØ €€€Ø €€€à Ð Ð Ð Ø €€€à 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø Ð Ð Ð Ð Ð à /Ð /Ð /Ð /Ð /Ð /Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ Rà" F¤K×$;Ò$;Ð<NÑ$OÔ$OÐQ€
Ø”;Ô/Ð ðI"ð I"ð I"ðX „×Ò˜ T¨5 MÑ2Ô2Ø„×Ò˜Ð#3Ð#3Ð#3Ñ4Ô4Ø„×Ò˜   Ñ0Ô0Ø„×Ò˜˜r 2˜hÑ'Ô'ð(ð (ñ (Ô'ñ 1Ô0ñ 5Ô4ñ 3Ô2ð(ð$ „Ôð Fð  Fñ Ôð FðF „×Ò˜˜r 2˜hÑ'Ô'ðð ñ (Ô'ðð6 Ð˜$ØGðIñ Iô Ià„×Ò˜  T˜{Ñ+Ô+ðBð Bñ ,Ô+ñIô IðBð „×Ò˜˜s C˜jÑ)Ô)ð6ð 6ñ *Ô)ð6ð 6ð 6r   