§
    ƒÛg8  ã                   ó¢   — d dl 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 dlmZ  G d„ de j        ¦  «        Zedk    r e j        ¦   «          dS dS )	é    N)Úcontextmanager)Úir)ÚtypesÚtypingÚcallconvÚcpuÚcgutils)Ú
cpu_targetc                   ó:   — e Zd ZdZed„ ¦   «         Zd„ Zd„ Zd„ ZdS )ÚTestCompileCachezœ
    Tests that the caching in BaseContext.compile_internal() works correctly by
    checking the state of the cache when it is used by the CPUContext.
    c              #   ó|  K  — t           j        }t           j        }|                     ¦   «                              d¦  «        }|                     |¦  «        5  t          j        d¦  «        }t          j	        t          j        t          j        ¦  «        }|j                             |j        |j        ¦  «        }t!          j        ||d¦  «        }|j                             |¦  «        }|j        sJ ‚|                     d¦  «        }	t          j        |	¦  «        }
||
||fV — d d d ¦  «         d S # 1 swxY w Y   d S )NÚtestingÚtest_moduleÚtest_fnÚentry)r
   Útyping_contextÚtarget_contextÚcodegenÚcreate_libraryÚpush_code_libraryr   ÚModuler   Ú	signaturer   Úint32Ú	call_convÚget_function_typeÚreturn_typeÚargsr	   Úget_or_insert_functionÚget_argumentsÚis_declarationÚappend_basic_blockÚ	IRBuilder)Úselfr   ÚcontextÚlibÚmoduleÚsigÚ	llvm_fntyÚfunctionr   Úentry_blockÚbuilders              úT/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/test_compile_cache.pyÚ_context_builder_sig_argsz*TestCompileCache._context_builder_sig_args   sj  è è € å#Ô2ˆÝÔ+ˆØ�oŠoÑÔ×.Ò.¨yÑ9Ô9ˆØ×&Ò& sÑ+Ô+ð 	.ð 	.Ý”Y˜}Ñ-Ô-ˆFåÔ"¥5¤;µ´Ñ<Ô<ˆCØÔ)×;Ò;¸C¼OØ<?¼HñFô FˆIåÔ5°f¸iØ6?ñAô AˆHàÔ$×2Ò2°8Ñ<Ô<ˆDØÔ*Ð*Ð*Ð*Ø"×5Ò5°gÑ>Ô>ˆKÝ”l ;Ñ/Ô/ˆGà˜7 C¨Ð-Ð-Ð-Ð-ð	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.ð 	.ð 	.s   ÁCD1Ä1D5Ä8D5c                 óv  — d„ }d„ }|                       ¦   «         5 \  }}}}t          |j        ¦  «        }|                      |dz   t          |j        ¦  «        ¦  «         |                     ||||¦  «         |                      |dz   t          |j        ¦  «        ¦  «         |                     ||||¦  «         |                      |dz   t          |j        ¦  «        ¦  «         |                     ||||¦  «         |                      |dz   t          |j        ¦  «        ¦  «         t          j        t          j        t          j        ¦  «        }|j	         
                    |j        |j        ¦  «        }	t          j        |j        |	d¦  «        }
|j	                             |
¦  «        }|
j        sJ ‚|
                     d¦  «        }t'          j        |¦  «        }|                     ||||¦  «         |                      |dz   t          |j        ¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )	Nc                 ó   — d| z  S )Né   © ©Úis    r,   Útimes2z+TestCompileCache.test_cache.<locals>.times2%   ó   € Ø�Q‘3ˆJó    c                 ó   — | dz  S )Né   r1   r2   s    r,   Útimes3z+TestCompileCache.test_cache.<locals>.times3(   r5   r6   r   é   r0   Ú	test_fn_2r   r8   )r-   ÚlenÚcached_internal_funcÚassertEqualÚcompile_internalr   r   r   Úfloat64r   r   r   r   r	   r   r&   r   r    r!   r   r"   )r#   r4   r9   r$   r+   r'   r   Úinitial_cache_sizeÚsig2Ú
llvm_fnty2Ú	function2Úargs2Úentry_block2Úbuilder2s                 r,   Ú
test_cachezTestCompileCache.test_cache$   sË  € ð	ð 	ð 	ð	ð 	ð 	ð ×+Ò+Ñ-Ô-ð '	@ñ 2
Ø�W˜c 4å!$ WÔ%AÑ!BÔ!BÐà×ÒÐ/°!Ñ3Ý  Ô!=Ñ>Ô>ñ@ô @ð @ð ×$Ò$ W¨f°c¸4Ñ@Ô@Ð@Ø×ÒÐ/°!Ñ3Ý  Ô!=Ñ>Ô>ñ@ô @ð @ð
 ×$Ò$ W¨f°c¸4Ñ@Ô@Ð@Ø×ÒÐ/°!Ñ3Ý  Ô!=Ñ>Ô>ñ@ô @ð @ð
 ×$Ò$ W¨f°c¸4Ñ@Ô@Ð@Ø×ÒÐ/°!Ñ3Ý  Ô!=Ñ>Ô>ñ@ô @ð @õ Ô#¥E¤Mµ5´=ÑAÔAˆDØ Ô*×<Ò<¸TÔ=MØ<@¼IñGô GˆJåÔ6°w´~Ø7AÀ;ñPô PˆIàÔ%×3Ò3°IÑ>Ô>ˆEØÔ+Ð+Ð+Ð+Ø$×7Ò7¸Ñ@Ô@ˆLÝ”| LÑ1Ô1ˆHð ×$Ò$ X¨v°t¸UÑCÔCÐCØ×ÒÐ/°!Ñ3Ý  Ô!=Ñ>Ô>ñ@ô @ð @ðM'	@ð '	@ð '	@ñ '	@ô '	@ð '	@ð '	@ð '	@ð '	@ð '	@ð '	@ð '	@øøøð '	@ð '	@ð '	@ð '	@ð '	@ð '	@s   ›HH.È.H2È5H2c                 ór  — d„ }|                       ¦   «         5 \  }}}} |dd¦  «        } |dd¦  «        } |dd¦  «        }t          |j        ¦  «        }	|                     ||||¦  «        }
|                      |	dz   t          |j        ¦  «        ¦  «         |                     ||||¦  «        }|                      |	dz   t          |j        ¦  «        ¦  «         |                     ||||¦  «        }|                      |	dz   t          |j        ¦  «        ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zP
        Caching must not mix up closures reusing the same code object.
        c                 ó   ‡— ˆfd„}|S )Nc                 ó   •— ‰| z   S ©Nr1   )ÚzÚys    €r,   Úfz?TestCompileCache.test_closures.<locals>.make_closure.<locals>.fY   s   ø€ Ø˜1‘u�r6   r1   )ÚxrN   rO   s    ` r,   Úmake_closurez4TestCompileCache.test_closures.<locals>.make_closureX   s!   ø€ ðð ð ð ð àˆHr6   r:   r0   N)r-   r<   r=   r?   r>   )r#   rQ   r$   r+   r'   r   Úclo11Úclo12Úclo22rA   Úres1Úres2Úres3s                r,   Útest_closureszTestCompileCache.test_closuresT   sË  € ð	ð 	ð 	ð
 ×+Ò+Ñ-Ô-ð 	@ñ 2
Ø�W˜c 4ð !�L  AÑ&Ô&ˆEØ �L  AÑ&Ô&ˆEØ �L  AÑ&Ô&ˆEÝ!$ WÔ%AÑ!BÔ!BÐØ×+Ò+¨G°U¸CÀÑFÔFˆDØ×ÒÐ/°!Ñ3Ý  Ô!=Ñ>Ô>ñ@ô @ð @à×+Ò+¨G°U¸CÀÑFÔFˆDØ×ÒÐ/°!Ñ3Ý  Ô!=Ñ>Ô>ñ@ô @ð @ð ×+Ò+¨G°U¸CÀÑFÔFˆDØ×ÒÐ/°!Ñ3Ý  Ô!=Ñ>Ô>ñ@ô @ð @ð!	@ð 	@ð 	@ñ 	@ô 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@øøøð 	@ð 	@ð 	@ð 	@ð 	@ð 	@s   ˜DD,Ä,D0Ä3D0c                 óp  ‡‡‡— d„ Št          j        t          j        t          j        ¦  «        Šˆˆˆfd„}|                      ¦   «         5 \  }Š}}t          j        d|¦  «        }t          j        d|¦  «        }|                     |¬¦  «        }|                     |¬¦  «        }|                     |¬¦  «        }	t          |j	        ¦  «        }
|  
                    |
dz   t          |j	        ¦  «        ¦  «          ||¦  «         |  
                    |
dz   t          |j	        ¦  «        ¦  «          ||¦  «         |  
                    |
dz   t          |j	        ¦  «        ¦  «          ||	¦  «         |  
                    |
dz   t          |j	        ¦  «        ¦  «         d	d	d	¦  «         d	S # 1 swxY w Y   d	S )
zA
        Caching must not mix up different error models.
        c                 ó   — d| z  S )Ng      ð?r1   )rP   s    r,   Úinvz.TestCompileCache.test_error_model.<locals>.invt   s   € Ø˜‘7ˆNr6   c                 ó2   •— |                       ‰‰‰¦  «        S rL   )Úcompile_subroutine)r$   r+   r[   Úinv_sigs    €€€r,   Úcompile_invz6TestCompileCache.test_error_model.<locals>.compile_invy   s   ø€ Ø×-Ò-¨g°s¸GÑDÔDÐDr6   ÚpythonÚnumpy)Úerror_modelr   r:   r0   N)r   r   r   r@   r-   r   Úcreate_error_modelÚ	subtargetr<   r=   r>   )r#   r_   r$   r'   r   Úpy_error_modelÚnp_error_modelÚpy_context1Úpy_context2Ú
np_contextrA   r+   r[   r^   s              @@@r,   Útest_error_modelz!TestCompileCache.test_error_modelp   s[  øøø€ ð	ð 	ð 	õ Ô"¥5¤=µ%´-Ñ@Ô@ˆð	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð ×+Ò+Ñ-Ô-ð 	@ñ 2
Ø�W˜c 4å%Ô8¸À7ÑKÔKˆNÝ%Ô8¸À'ÑJÔJˆNà!×+Ò+¸Ð+ÑGÔGˆKØ!×+Ò+¸Ð+ÑGÔGˆKØ ×*Ò*°~Ð*ÑFÔFˆJå!$ WÔ%AÑ!BÔ!BÐð ×ÒÐ/°!Ñ3Ý  Ô!=Ñ>Ô>ñ@ô @ð @ð ˆK˜Ñ$Ô$Ð$Ø×ÒÐ/°!Ñ3Ý  Ô!=Ñ>Ô>ñ@ô @ð @àˆK˜Ñ$Ô$Ð$Ø×ÒÐ/°!Ñ3Ý  Ô!=Ñ>Ô>ñ@ô @ð @ð ˆK˜
Ñ#Ô#Ð#Ø×ÒÐ/°!Ñ3Ý  Ô!=Ñ>Ô>ñ@ô @ð @ð1	@ð 	@ð 	@ñ 	@ô 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@øøøð 	@ð 	@ð 	@ð 	@ð 	@ð 	@s   ÁEF+Æ+F/Æ2F/N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r-   rH   rX   rj   r1   r6   r,   r   r   
   sr   € € € € € ðð ð
 ð.ð .ñ „^ð.ð&.@ð .@ð .@ð`@ð @ð @ð8%@ð %@ð %@ð %@ð %@r6   r   Ú__main__)ÚunittestÚ
contextlibr   Úllvmliter   Ú
numba.corer   r   r   r   r	   Únumba.core.registryr
   ÚTestCaser   rk   Úmainr1   r6   r,   ú<module>rw      sÒ   ðØ €€€Ø %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð Ð Ð à <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø *Ð *Ð *Ð *Ð *Ð *ðK@ð K@ð K@ð K@ð K@�xÔ(ñ K@ô K@ð K@ð\ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr6   