a
    þ
þdÂ  ã                   @   sê   d dl Z d dlmZ d dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlZzd dlZW n ey~   dZY n0 zd dlZW n ey¢   dZY n0 e edu d¡G dd	„ d	eƒƒZG d
d„ dejƒZedkræe ¡  dS )é    N)ÚStringIO)Úcompile_isolatedÚFlags)Útypes)Únjit)Úoverride_configÚTestCasez#please install the 'jinja2' packagec                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Ze edu d¡d	d
„ ƒZ	dS )ÚTestAnnotationc                 C   sP   dd„ }t |tjtjgƒ}|j}tƒ }| |¡ | ¡ }| ¡  |  d|¡ dS )z4
        Ensures template.html is available
        c                 S   s   |}t | ƒD ]}||7 }q|S ©N©Úrange)ÚnÚaÚsÚi© r   úe/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/numba/tests/test_annotations.pyÚfoo   s    
z3TestAnnotation.test_exercise_code_path.<locals>.foor   N)	r   r   Úint32Útype_annotationr   Úhtml_annotateÚgetvalueÚcloseÚassertIn)Úselfr   ÚcresÚtaÚbufÚoutputr   r   r   Útest_exercise_code_path   s    
z&TestAnnotation.test_exercise_code_pathc                    s†   dd„ ‰ ‡ fdd„}t ƒ }d|_d|_t|tjg|d}|j}tƒ }| |¡ | 	¡ }| 
¡  |  d|¡ |  d|¡ |  d	|¡ d
S )zM
        Ensures that lifted loops are handled correctly in obj mode
        c                 S   s   | S r
   r   )Úxr   r   r   Úbar2   s    zDTestAnnotation.test_exercise_code_path_with_lifted_loop.<locals>.barc                    sD   d}t | ƒD ]}|| }qt | ƒD ]}|| }q"| r@|ˆ | ƒ }|S )Ng        r   )r    Úhr   Úk©r!   r   r   r   5   s    

zDTestAnnotation.test_exercise_code_path_with_lifted_loop.<locals>.fooT)Úflagsr!   r   Z
LiftedLoopN)r   Zenable_pyobjectZenable_loopliftr   r   Zintpr   r   r   r   r   r   )r   r   r%   r   r   r   r   r   r$   r   Ú(test_exercise_code_path_with_lifted_loop-   s    
z7TestAnnotation.test_exercise_code_path_with_lifted_loopc           	      C   sH  t jdd„ ƒ}t dtj¡}tjf}| |¡ |j| }tƒ }|j	 
|¡ | ¡ }| ¡  |  | d¡d¡ d}|  | | |¡¡d¡ | jtt ||¡ƒdd||f d tjf}| |¡ |j| }tƒ }|j	 
|¡ | ¡ }| ¡  |  | d¡d	¡ |  | | |¡¡d¡ |  | | |¡¡d¡ |  tt ||¡ƒd	¡ d
S )zW
        Test some format and behavior of the html annotation with lifted loop
        c                 S   s$   t ƒ  d}t| ƒD ]}||7 }q|S )Nr   )Úobjectr   )r    Úzr   r   r   r   ÚudtS   s
    
z=TestAnnotation.test_html_output_with_lifted_loop.<locals>.udtz<td class="lifted_tag">\s*\s*<details>\s*<summary>\s*<code>\s*[0-9]+:\s*[&nbsp;]+for i in range\(x\):  # this line is tagged\s*zFunction name: udté   z!with signature: {} -&gt; pyobjectz%s not found in %s)Úmsgé   N)ÚnumbaZjitÚreÚcompileÚ	MULTILINEr   Úint64Z	overloadsr   r   r   r   r   ÚassertEqualÚcountÚformatÚlenÚfindallÚfloat64)	r   r)   Zre_lifted_tagZsig_i64r   r   r   ZsigfmtZsig_f64r   r   r   Ú!test_html_output_with_lifted_loopO   s<    
ù



ÿ

z0TestAnnotation.test_html_output_with_lifted_loopNz%please install the 'pygments' packagec                 C   sr   t jdd„ ƒ}|ddƒ |jdd |  t¡}|jddd W d   ƒ n1 sR0    Y  |  d	t|jƒ¡ d S )
Nc                 S   s   | |fS r
   r   )r    Úyr   r   r   r   Ž   s    z-TestAnnotation.test_pretty_print.<locals>.foor*   r,   T)Úprettyzshould be None)r:   Úfilez$`file` must be None if `pretty=True`)r-   r   Úinspect_typesÚassertRaisesÚ
ValueErrorr   ÚstrÚ	exception)r   r   Zraisesr   r   r   Útest_pretty_print‹   s    

,ÿz TestAnnotation.test_pretty_print)
Ú__name__Ú
__module__Ú__qualname__r   r&   r8   ÚunittestÚskipIfÚpygmentsrA   r   r   r   r   r	      s
   "<r	   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestTypeAnnotationc                 C   s4   t |ƒD ]\}}||v r|  S qtd |¡ƒ‚d S )Nzcan't find {!r})Ú	enumerater>   r4   )r   ÚlinesÚpatr   Úlnr   r   r   Ú
findpatlocŸ   s    
zTestTypeAnnotation.findpatlocc                 C   s   t ƒ }| |¡ | ¡  ¡ S r
   )r   r<   r   Ú
splitlines)r   ÚfuncZstrbufr   r   r   Úgetlines¥   s    
zTestTypeAnnotation.getlinesc                 C   sn   t jdd„ ƒ}|ddƒ |  |¡}|  |d¡}|  |d¡}|  |d¡}|  |d¡}|  ||¡ |  ||¡ d S )	Nc                 S   s   | | S r
   r   )ZappleorangeZberrycherryr   r   r   r   «   s    z+TestTypeAnnotation.test_delete.<locals>.foor*   r,   z&appleorange = arg(0, name=appleorange)z&berrycherry = arg(1, name=berrycherry)zdel appleorangezdel berrycherry)r-   r   rP   rM   Ú
assertLess)r   r   rJ   ÚsaÚsbZeaZebr   r   r   Útest_deleteª   s    


zTestTypeAnnotation.test_deletec                 C   s¢   t d|ƒ4 tdd„ ƒ}d}||ƒ}|  ||¡ W d   ƒ n1 sD0    Y  |  |¡}|  |d¡}|  |d¡}|  |d¡}|  |d¡}	|  |d	¡}
||||	|
fS )
NZEXTEND_VARIABLE_LIFETIMESc                 S   s   | }|S r
   r   )r   Úbr   r   r   r   ¿   s    z/TestTypeAnnotation._lifetimes_impl.<locals>.fooé
   za = arg(0, name=a)zb = azcast(value=b)zdel azdel b)r   r   r2   rP   rM   )r   Úextendr   r    rU   rJ   rR   rS   Úcast_retÚdelaÚdelbr   r   r   Ú_lifetimes_impl½   s    
*
z"TestTypeAnnotation._lifetimes_implc                 C   sJ   | j dd\}}}}}|  ||¡ |  ||¡ |  ||¡ |  ||¡ d S )Nr   ©rW   ©r[   rQ   ZassertGreater©r   rR   rS   rX   rY   rZ   r   r   r   Útest_delete_standard_lifetimesÓ   s
    z1TestTypeAnnotation.test_delete_standard_lifetimesc                 C   sJ   | j dd\}}}}}|  ||¡ |  ||¡ |  ||¡ |  ||¡ d S )Nr*   r\   r]   r^   r   r   r   Útest_delete_extended_lifetimesæ   s
    z1TestTypeAnnotation.test_delete_extended_lifetimesN)	rB   rC   rD   rM   rP   rT   r[   r_   r`   r   r   r   r   rH      s   rH   Ú__main__)r.   Úior   r-   Znumba.core.compilerr   r   Z
numba.corer   r   Znumba.tests.supportr   r   rE   Zjinja2ÚImportErrorrG   rF   r	   rH   rB   Úmainr   r   r   r   Ú<module>   s*   

 ]