§
    ƒÛgµ  ã                   óÄ  — d dl Z d dlmZ d dlmZ d dlm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 d d	lmZ d d
lmZmZmZmZmZ d                     edg¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z ee¦  «        Z  G d„ de¦  «        Z!eee<   e!eee         <   d„ Z"e"eee         <    G d„ de¦  «        Z# G d„ de j$        ¦  «        Z%dS )é    N)Úcontextmanager)Úcached_property)Únjit)ÚerrorsÚcpuÚtyping)ÚTargetDescriptor)ÚTargetConfigurationStack)ÚBasicRetarget)Úoverload)Údispatcher_registryÚCPUDispatcherÚCPUÚtarget_registryÚjit_registryú.Ú	CustomCPUc                   ó   — e Zd ZdZdS )r   zExtend from the CPU target
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úR/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/test_retargeting.pyr   r      s   € € € € € ðð à€Dr   c                   ó,   — e Zd ZdZdZed„ ¦   «         ZdS )Ú_NestedContextNc              #   ó’   K  — | j         | j        f}	 || _         || _        d V — |\  | _         | _        d S # |\  | _         | _        w xY w©N)Ú_typing_contextÚ_target_context)ÚselfÚtyping_contextÚtarget_contextÚ
old_nesteds       r   Únestedz_NestedContext.nested$   sg   è è € àÔ)¨4Ô+?Ð?ˆ
ð	DØ#1ˆDÔ Ø#1ˆDÔ ØˆEˆEˆEà9CÑ6ˆDÔ  $Ô"6Ð"6Ð"6ø¸Ñ6ˆDÔ  $Ô"6ÐCÐCÐCÐCs	   ’5 µA)r   r   r   r    r!   r   r&   r   r   r   r   r       s<   € € € € € Ø€OØ€OàðDð Dñ „^ðDð Dð Dr   r   c                   óŽ   — e Zd Zej        Z e¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
ed„ ¦   «         Zed„ ¦   «         Zd„ ZdS )ÚCustomTargetDescrc                 ó@   — t          j        | j        | j        ¦  «        S r   )r   Ú
CPUContextr#   Ú_target_name©r"   s    r   Ú_toplevel_target_contextz*CustomTargetDescr._toplevel_target_context4   s   € õ Œ~˜dÔ1°4Ô3DÑEÔEÐEr   c                 ó(   — t          j        ¦   «         S r   )r   ÚContextr,   s    r   Ú_toplevel_typing_contextz*CustomTargetDescr._toplevel_typing_context9   s   € õ Œ~ÑÔÐr   c                 ó0   — | j         j        }|�|S | j        S )z5
        The target context for DPU targets.
        )Ú_nestedr!   r-   ©r"   r&   s     r   r$   z CustomTargetDescr.target_context>   ó"   € ð
 ”Ô-ˆØÐØˆMàÔ0Ð0r   c                 ó0   — | j         j        }|�|S | j        S )z5
        The typing context for CPU targets.
        )r2   r    r0   r3   s     r   r#   z CustomTargetDescr.typing_contextI   r4   r   c                 ó8   — | j                              ||¦  «        S )zˆ
        A context manager temporarily replacing the contexts with the
        given ones, for the current thread of execution.
        )r2   r&   )r"   r#   r$   s      r   Únested_contextz CustomTargetDescr.nested_contextT   s   € ð
 Œ|×"Ò" >°>ÑBÔBÐBr   N)r   r   r   r   ÚCPUTargetOptionsÚoptionsr   r2   r   r-   r0   Úpropertyr$   r#   r7   r   r   r   r(   r(   0   sª   € € € € € ØÔ"€GØˆnÑÔ€GàðFð Fñ „_ðFð ð ð  ñ „_ð ð ð1ð 1ñ „Xð1ð ð1ð 1ñ „Xð1ðCð Cð Cð Cð Cr   r(   c                   ó   — e Zd ZeZdS )ÚCustomCPUDispatcherN)r   r   r   Úcustom_targetÚtargetdescrr   r   r   r<   r<   _   s   € € € € € Ø€K€K€Kr   r<   c                  ó@   — d|vsJ ‚d|vsJ ‚t          | dt          i|¤ŽS )NÚtargetÚ_target)r   ÚCUSTOM_TARGET)ÚargsÚkwargss     r   Ú
custom_jitrE   g   s<   € Ø˜6Ð!Ð!Ð!Ð!Ø˜FÐ"Ð"Ð"Ð"Ý�Ð7�}Ð7°Ð7Ð7Ð7r   c                   ó*   — e Zd Zed„ ¦   «         Zd„ ZdS )ÚCustomCPURetargetc                 ó   — t           S r   )rB   r,   s    r   Úoutput_targetzCustomCPURetarget.output_targets   s   € åÐr   c                 óL   —  t          t          ¬¦  «        |j        ¦  «        }|S )N©rA   )r   rB   Úpy_func)r"   Úcpu_dispÚkernels      r   Úcompile_retargetz"CustomCPURetarget.compile_retargetw   s$   € Ø,•�mÐ,Ñ,Ô,¨XÔ-=Ñ>Ô>ˆØˆr   N)r   r   r   r:   rI   rO   r   r   r   rG   rG   r   s<   € € € € € Øðð ñ „Xððð ð ð ð r   rG   c                   óZ   — e Zd Zd„ Zd„ Zed„ ¦   «         Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ ZdS )ÚTestRetargetingc                 óÊ   ‡— t          d¬¦  «        d„ ¦   «         Št           ˆfd„¦   «         }t           d„ ¦   «         }t          ¦   «         | _        t          ¦   «         | _        d S )Nr   rK   c                 ó   — | dz   S )zo
            This has a fixed target to "cpu".
            Cannot be used in CUSTOM_TARGET target.
            é
   r   ©Úxs    r   Úfixed_targetz+TestRetargeting.setUp.<locals>.fixed_target€   s   € ð �r‘6ˆMr   c                 ó    •—  ‰| ¦  «        dz   S )z‹
            This has a flexible target, but uses a fixed target function.
            Cannot be used in CUSTOM_TARGET target.
            éd   r   )rV   rW   s    €r   Úflex_call_fixedz.TestRetargeting.setUp.<locals>.flex_call_fixedˆ   s   ø€ ð  �< ‘?”? SÑ(Ð(r   c                 ó   — | dz   S )zf
            This has a flexible target.
            Can be used in CUSTOM_TARGET target.
            iè  r   rU   s    r   Úflex_targetz*TestRetargeting.setUp.<locals>.flex_target�   s   € ð �t‘8ˆOr   )r   ÚlocalsÚ	functionsrG   Úretarget)r"   rZ   r\   rW   s      @r   ÚsetUpzTestRetargeting.setUp}   sˆ   ø€ õ 
�eÐ	Ñ	Ô	ð	ð 	ñ 
Ô	ð	õ 
ð	)ð 	)ð 	)ð 	)ñ 
Œð	)õ 
ð	ð 	ñ 
Œð	õ  ™œˆŒå)Ñ+Ô+ˆŒˆˆr   c                 ó4   — t          j        | j        ¦  «        S r   )r
   Úswitch_targetr_   r,   s    r   rb   zTestRetargeting.switch_target�   s   € Ý'Ô5°d´mÑDÔDÐDr   c              #   óà   K  — |                       t          j        ¦  «        5 }d V — d d d ¦  «         n# 1 swxY w Y   |                      t          › d�t          |j        ¦  «        ¦  «         d S )Nz != cpu)ÚassertRaisesr   Ú
NumbaErrorÚassertInrB   ÚstrÚ	exception)r"   Úraisess     r   Úcheck_retarget_errorz$TestRetargeting.check_retarget_error    s¦   è è € à×Ò�vÔ0Ñ1Ô1ð 	°VØˆEˆEˆEð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à�Š�Ð/Ð/Ð/µ°VÔ5EÑ1FÔ1FÑGÔGÐGÐGÐGs   ¢3³7º7c                 óŒ   — | j         j                             ¦   «         }|                      |d         |d         z   d¦  «         d S )NÚhitÚmissr   )r_   ÚcacheÚstatsÚassertGreater)r"   ro   s     r   Úcheck_non_empty_cachez%TestRetargeting.check_non_empty_cache¦   sC   € à”Ô#×)Ò)Ñ+Ô+ˆð 	×Ò˜5 œ<¨%°¬-Ñ7¸Ñ;Ô;Ð;Ð;Ð;r   c                 ó,  ‡‡— | j         d         Š| j         d         Št          ˆˆfd„¦   «         } |d¦  «        }|                      |d¦  «         | j        j                             ¦   «         }|                      |t          dd¬¦  «        ¦  «         d S )NrW   r\   c                 ó4   •—  ‰| ¦  «        }  ‰| ¦  «        } | S r   r   ©rV   rW   r\   s    €€r   Úfooz'TestRetargeting.test_case0.<locals>.foo±   ó"   ø€ à�˜Q‘”ˆAØ�˜A‘”ˆAØˆHr   é{   im  r   )rl   rm   )r^   r   ÚassertEqualr_   rn   ro   Údict)r"   ru   Úrro   rW   r\   s       @@r   Ú
test_case0zTestRetargeting.test_case0­   s¨   øø€ Ø”~ nÔ5ˆØ”n ]Ô3ˆå	ð	ð 	ð 	ð 	ð 	ñ 
Œð	ð
 ˆC�‰HŒHˆØ×Ò˜˜OÑ,Ô,Ð,à”Ô#×)Ò)Ñ+Ô+ˆØ×Ò˜¥¨°Ð 3Ñ 3Ô 3Ñ4Ô4Ð4Ð4Ð4r   c                 ó  ‡— | j         d         Št          ˆfd„¦   «         }|                      ¦   «         5   |d¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      |d¦  «         |                      ¦   «          d S )Nr\   c                 ó   •—  ‰| ¦  «        } | S r   r   )rV   r\   s    €r   ru   z'TestRetargeting.test_case1.<locals>.fooÀ   s   ø€ à�˜A‘”ˆAØˆHr   rw   ic  )r^   r   rb   rx   rq   )r"   ru   rz   r\   s      @r   Ú
test_case1zTestRetargeting.test_case1½   sÖ   ø€ Ø”n ]Ô3ˆå	ð	ð 	ð 	ð 	ñ 
Œð	ð ×ÒÑ!Ô!ð 	ð 	Ø��C‘”ˆAð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à×Ò˜˜JÑ'Ô'Ð'Ø×"Ò"Ñ$Ô$Ð$Ð$Ð$s   µAÁAÁAc                 ó,  ‡‡— | j         d         Š| j         d         Št          ˆˆfd„¦   «         }|                      ¦   «         5  |                      ¦   «         5   |d¦  «         ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )zK
        The non-nested call into fixed_target should raise error.
        rW   r\   c                 ó4   •—  ‰| ¦  «        }  ‰| ¦  «        } | S r   r   rt   s    €€r   ru   z'TestRetargeting.test_case2.<locals>.fooÑ   rv   r   rw   N©r^   r   rj   rb   )r"   ru   rW   r\   s     @@r   Ú
test_case2zTestRetargeting.test_case2Ê   s2  øø€ ð ”~ nÔ5ˆØ”n ]Ô3ˆå	ð	ð 	ð 	ð 	ð 	ñ 
Œð	ð
 ×&Ò&Ñ(Ô(ð 	ð 	Ø×#Ò#Ñ%Ô%ð ð Ø��C‘”�ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ó6   ÁB	ÁA1Á%B	Á1A5	Á5B	Á8A5	Á9B	Â	BÂBc                 ó,  ‡‡— | j         d         Š| j         d         Št          ˆˆfd„¦   «         }|                      ¦   «         5  |                      ¦   «         5   |d¦  «         ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )zF
        The nested call into fixed_target should raise error
        r\   rZ   c                 ó4   •—  ‰| ¦  «        }  ‰| ¦  «        } | S r   r   ©rV   rZ   r\   s    €€r   ru   z'TestRetargeting.test_case3.<locals>.fooâ   ó$   ø€ à� Ñ"Ô"ˆAØ�˜A‘”ˆAØˆHr   rw   Nr�   )r"   ru   rZ   r\   s     @@r   Ú
test_case3zTestRetargeting.test_case3Û   s3  øø€ ð ”n ]Ô3ˆØœ.Ð):Ô;ˆå	ð	ð 	ð 	ð 	ð 	ñ 
Œð	ð
 ×&Ò&Ñ(Ô(ð 	ð 	Ø×#Ò#Ñ%Ô%ð ð Ø��C‘”�ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	rƒ   c                 ón  ‡‡— | j         d         Š| j         d         Š ‰d¦  «        }|                      |d¦  «         t          ˆˆfd„¦   «         }|                      ¦   «         5  |                      ¦   «         5   |d¦  «         ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )z‚
        Same as case2 but flex_call_fixed() is invoked outside of CUSTOM_TARGET
        target before the switch_target.
        r\   rZ   rw   éé   c                 ó4   •—  ‰| ¦  «        }  ‰| ¦  «        } | S r   r   r†   s    €€r   ru   z'TestRetargeting.test_case4.<locals>.foo÷   r‡   r   N)r^   rx   r   rj   rb   )r"   rz   ru   rZ   r\   s      @@r   Ú
test_case4zTestRetargeting.test_case4ì   sX  øø€ ð
 ”n ]Ô3ˆØœ.Ð):Ô;ˆàˆO˜CÑ Ô ˆØ×Ò˜˜NÑ+Ô+Ð+å	ð	ð 	ð 	ð 	ð 	ñ 
Œð	ð
 ×&Ò&Ñ(Ô(ð 	ð 	Ø×#Ò#Ñ%Ô%ð ð Ø��C‘”�ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s6   Á%B*Á:BÂB*ÂB	ÂB*ÂB	ÂB*Â*B.Â1B.c                 óÈ  ‡— d„ Št          ‰t          ¬¦  «        d„ ¦   «         }t          ‰d¬¦  «        d„ ¦   «         }t          d„ ¦   «         }t          ˆfd„¦   «         } |d¦  «        }|                      |d	¦  «         |                      ¦   «         5   |d¦  «        }|                      |d
¦  «         ddd¦  «         n# 1 swxY w Y   |                      ¦   «          dS )zA
        Tests overload resolution with target switching
        c                 ó   — d S r   r   rU   s    r   Úoverloaded_funcz3TestRetargeting.test_case5.<locals>.overloaded_func  s   € ØˆDr   )r@   c                 ó   — d„ }|S )Nc                 ó   — dS )Ninõ  r   rU   s    r   ÚimplzRTestRetargeting.test_case5.<locals>.ol_overloaded_func_custom_target.<locals>.impl  ó   € Ø�ur   r   ©rV   r’   s     r   Ú ol_overloaded_func_custom_targetzDTestRetargeting.test_case5.<locals>.ol_overloaded_func_custom_target	  ó   € ðð ð àˆKr   r   c                 ó   — d„ }|S )Nc                 ó   — dS )Ni·z  r   rU   s    r   r’   zHTestRetargeting.test_case5.<locals>.ol_overloaded_func_cpu.<locals>.impl  r“   r   r   r”   s     r   Úol_overloaded_func_cpuz:TestRetargeting.test_case5.<locals>.ol_overloaded_func_cpu  r–   r   c                 ó   — d S r   r   rU   s    r   Úflex_resolve_overloadz9TestRetargeting.test_case5.<locals>.flex_resolve_overload  s   € àˆFr   c                 ó    •— |  ‰| ¦  «        z   S r   r   )rV   r�   s    €r   ru   z'TestRetargeting.test_case5.<locals>.foo  s   ø€ à�� qÑ)Ô)Ñ)Ð)r   rw   i2{  iéõ  N)r   rB   r   rx   rb   rq   )r"   r•   r™   r›   ru   rz   r�   s         @r   Ú
test_case5zTestRetargeting.test_case5  sm  ø€ ð
	ð 	ð 	õ 
�/­-Ð	8Ñ	8Ô	8ð	ð 	ñ 
9Ô	8ð	õ
 
�/¨%Ð	0Ñ	0Ô	0ð	ð 	ñ 
1Ô	0ð	õ
 
ð	ð 	ñ 
Œð	õ 
ð	*ð 	*ð 	*ð 	*ñ 
Œð	*ð ˆC�‰HŒHˆØ×Ò˜˜KÑ(Ô(Ð(à×ÒÑ!Ô!ð 	-ð 	-Ø��C‘”ˆAØ×Ò˜Q Ñ,Ô,Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-ð 	×"Ò"Ñ$Ô$Ð$Ð$Ð$s   Â"CÃCÃ
CN)r   r   r   r`   rb   r   rj   rq   r{   r~   r‚   rˆ   rŒ   r�   r   r   r   rQ   rQ   |   s½   € € € € € ð,ð ,ð ,ð@Eð Eð Eð ðHð Hñ „^ðHð
<ð <ð <ð5ð 5ð 5ð %ð %ð %ðð ð ð"ð ð ð"ð ð ð*#%ð #%ð #%ð #%ð #%r   rQ   )&ÚunittestÚ
contextlibr   Ú	functoolsr   Únumbar   Ú
numba.corer   r   r   Únumba.core.descriptorsr	   Únumba.core.dispatcherr
   Únumba.core.retargetr   Únumba.core.extendingr   Únumba.core.target_extensionr   r   r   r   r   Újoinr   rB   r   Úobjectr   r(   r=   r<   rE   rG   ÚTestCaserQ   r   r   r   ú<module>r«      s{  ðØ €€€Ø %Ð %Ð %Ð %Ð %Ð %Ø %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø :Ð :Ð :Ð :Ð :Ð :Ø -Ð -Ð -Ð -Ð -Ð -Ø )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð ð ð ð ð —’˜( KÐ0Ñ1Ô1€ð	ð 	ð 	ð 	ð 	�ñ 	ô 	ð 	ðDð Dð Dð Dð D�Vñ Dô Dð Dð )Cð )Cð )Cð )Cð )CÐ(ñ )Cô )Cð )CðX "Ð! -Ñ0Ô0€ð ð  ð  ð  ð  ˜-ñ  ô  ð  ð "+€�Ñ Ø6IÐ �O MÔ2Ñ 3ð8ð 8ð 8ð 0:€ˆ_˜]Ô+Ñ ,ð
ð ð ð ð ˜ñ ô ð ðh%ð h%ð h%ð h%ð h%�hÔ'ñ h%ô h%ð h%ð h%ð h%r   