§
    2@Äjõ<  ã                   óÀ   — d dl Zd dl Z d dlZd dlmZmZ d dlmZmZ d dl	m
Z
 d dlmZmZ  G d„ de¦  «        Z G d„ d	e¦  «        Zed
k    r ej        ¦   «          dS dS )é    N)ÚnjitÚjit)ÚTypingErrorÚUnsupportedError)Úir)ÚTestCaseÚIRPreservingTestPipelinec                   óV   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ ZdS )ÚTestClosurec                 óÀ   ‡— dŠˆfd„} t          di |¤Ž|¦  «        }|                       |d¦  «        d¦  «         dŠ|                       |d¦  «        d¦  «         d S )Né
   c                 ó   •— | ‰z   S ©N© ©ÚxÚYs    €úIC:\Projects\Historical\venv\Lib\site-packages\numba/tests/test_closure.pyÚadd_Yz3TestClosure.run_jit_closure_variable.<locals>.add_Y   ó   ø€ Ø�q‘5ˆLó    úi4(i4)é   é   é   ©r   ©r   ÚassertEqual)ÚselfÚjitargsr   Úc_add_Yr   s       @r   Úrun_jit_closure_variablez$TestClosure.run_jit_closure_variable   s‰   ø€ Øˆð	ð 	ð 	ð 	ð 	ð +•#Ð*Ð* 'Ð*Ð*¨5Ñ1Ô1ˆØ×Ò˜˜ ™œ RÑ(Ô(Ð(ð ˆØ×Ò˜˜ ™œ RÑ(Ô(Ð(Ð(Ð(r   c                 ó2   — |                       d¬¦  «         d S ©NT)Úforceobj©r"   ©r   s    r   Útest_jit_closure_variablez%TestClosure.test_jit_closure_variable   ó   € Ø×%Ò%¨tÐ%Ñ4Ô4Ð4Ð4Ð4r   c                 ó2   — |                       d¬¦  «         d S ©NT©Únopythonr&   r'   s    r   Útest_jit_closure_variable_npmz)TestClosure.test_jit_closure_variable_npm   r)   r   c                 ój  ‡— dŠˆfd„} t          di |¤Ž|¦  «        }|                       |d¦  «        d¦  «         dŠ t          di |¤Ž|¦  «        }|                       |d¦  «        d¦  «         dŠ|                       |d¦  «        d¦  «         |                       |d¦  «        d¦  «         d S )	Nr   c                 ó   •— | ‰z   S r   r   r   s    €r   r   z0TestClosure.run_rejitting_closure.<locals>.add_Y%   r   r   r   r   r   r   é   r   r   )r   r    r   r!   Ú	c_add_Y_2r   s        @r   Úrun_rejitting_closurez!TestClosure.run_rejitting_closure"   sç   ø€ Øˆð	ð 	ð 	ð 	ð 	ð +•#Ð*Ð* 'Ð*Ð*¨5Ñ1Ô1ˆØ×Ò˜˜ ™œ RÑ(Ô(Ð(ð ˆØ,•CÐ,Ð, GÐ,Ð,¨UÑ3Ô3ˆ	Ø×Ò˜˜ 1™œ rÑ*Ô*Ð*ØˆØ×Ò˜˜ 1™œ rÑ*Ô*Ð*à×Ò˜˜ ™œ RÑ(Ô(Ð(Ð(Ð(r   c                 ó2   — |                       d¬¦  «         d S r$   ©r3   r'   s    r   Útest_rejitting_closurez"TestClosure.test_rejitting_closure4   ó   € Ø×"Ò"¨DÐ"Ñ1Ô1Ð1Ð1Ð1r   c                 ó2   — |                       d¬¦  «         d S r+   r5   r'   s    r   Útest_rejitting_closure_npmz&TestClosure.test_rejitting_closure_npm7   r7   r   c                 ó†   ‡‡— dŠdŠˆˆfd„} t          di |¤Ž|¦  «        }|                       |d¦  «        d¦  «         d S )Nr   é   c                 ó   •— | ‰z   ‰z  S r   r   )r   r   ÚZs    €€r   Úadd_Y_mult_ZzDTestClosure.run_jit_multiple_closure_variables.<locals>.add_Y_mult_Z>   s   ø€ Ø˜‘E˜Q‘;Ðr   r   r   é   r   r   )r   r    r>   Úc_add_Y_mult_Zr   r=   s       @@r   Ú"run_jit_multiple_closure_variablesz.TestClosure.run_jit_multiple_closure_variables:   sq   øø€ ØˆØˆð	ð 	ð 	ð 	ð 	ð 	ð 2�Ð1Ð1¨Ð1Ð1°,Ñ?Ô?ˆØ×Ò˜˜¨Ñ*Ô*¨BÑ/Ô/Ð/Ð/Ð/r   c                 ó2   — |                       d¬¦  «         d S r$   ©rA   r'   s    r   Ú#test_jit_multiple_closure_variablesz/TestClosure.test_jit_multiple_closure_variablesD   ó   € Ø×/Ò/¸Ð/Ñ>Ô>Ð>Ð>Ð>r   c                 ó2   — |                       d¬¦  «         d S r+   rC   r'   s    r   Ú'test_jit_multiple_closure_variables_npmz3TestClosure.test_jit_multiple_closure_variables_npmG   rE   r   c                 óX  ‡— d„ } t          di |¤Ž|¦  «        Š‰                     ¦   «          ˆfd„} t          di |¤Ž|¦  «        }|                     ¦   «          |                      |‰¦  «        5  |                       |d¦  «        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nc                 ó   — | dz  S )Nr   r   )Úas    r   Úmult_10z3TestClosure.run_jit_inner_function.<locals>.mult_10K   s   € Ø�r‘6ˆMr   ú
intp(intp)c                 ó    •—  ‰| dz   ¦  «        S ©Né   r   )r   Ú	c_mult_10s    €r   Údo_mathz3TestClosure.run_jit_inner_function.<locals>.do_mathQ   s   ø€ Ø�9˜Q ™UÑ#Ô#Ð#r   r   é2   )rL   )r   Údisable_compileÚassertRefCountr   )r   r    rK   rQ   Ú	c_do_mathrP   s        @r   Úrun_jit_inner_functionz"TestClosure.run_jit_inner_functionJ   s%  ø€ ð	ð 	ð 	ð 1•CÐ0Ð0¨Ð0Ð0°Ñ9Ô9ˆ	Ø×!Ò!Ñ#Ô#Ð#ð	$ð 	$ð 	$ð 	$ð 	$ð 1•CÐ0Ð0¨Ð0Ð0°Ñ9Ô9ˆ	Ø×!Ò!Ñ#Ô#Ð#à× Ò  ¨IÑ6Ô6ð 	/ð 	/Ø×Ò˜Y˜Y q™\œ\¨2Ñ.Ô.Ð.ð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð 	/ð 	/s   Á2 BÂB#Â&B#c                 ó2   — |                       d¬¦  «         d S r$   ©rV   r'   s    r   Útest_jit_inner_functionz#TestClosure.test_jit_inner_functionZ   ó   € Ø×#Ò#¨TÐ#Ñ2Ô2Ð2Ð2Ð2r   c                 ó2   — |                       d¬¦  «         d S r+   rX   r'   s    r   Útest_jit_inner_function_npmz'TestClosure.test_jit_inner_function_npm]   rZ   r   N)Ú__name__Ú
__module__Ú__qualname__r"   r(   r.   r3   r6   r9   rA   rD   rG   rV   rY   r\   r   r   r   r   r      sÈ   € € € € € ð)ð )ð )ð5ð 5ð 5ð5ð 5ð 5ð)ð )ð )ð$2ð 2ð 2ð2ð 2ð 2ð0ð 0ð 0ð?ð ?ð ?ð?ð ?ð ?ð/ð /ð /ð 3ð 3ð 3ð3ð 3ð 3ð 3ð 3r   r   c                   óh   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zej        d
„ ¦   «         Zd„ ZdS )ÚTestInlinedClosurezª
    Tests for (partial) closure support in njit. The support is partial
    because it only works for closures that can be successfully inlined
    at compile time.
    c                 óz   — d„ }t          |¦  «        }|                       |d¦  «         |d¦  «        ¦  «         d S )Nc                 ó6   — d„ } || ¦  «         || ¦  «        z   S )Nc                 ó   — | | z  S r   r   ©r   s    r   ÚinnerzDTestInlinedClosure.test_inner_function.<locals>.outer.<locals>.innerl   ó   € Ø˜1‘u�r   r   ©r   rf   s     r   Úouterz5TestInlinedClosure.test_inner_function.<locals>.outerj   s.   € ðð ð ð �5˜‘8”8˜e˜e A™hœhÑ&Ð&r   r   ©r   r   ©r   ri   Úcfuncs      r   Útest_inner_functionz&TestInlinedClosure.test_inner_functionh   sJ   € ð	'ð 	'ð 	'õ �U‘”ˆØ×Ò˜˜˜r™œ E E¨"¡I¤IÑ.Ô.Ð.Ð.Ð.r   c                 óz   — d„ }t          |¦  «        }|                       |d¦  «         |d¦  «        ¦  «         d S )Nc                 óF   ‡— | dz   Šˆfd„} || ¦  «         || ¦  «        z   S )Nr   c                 ó   •— | | z  ‰z   S r   r   ©r   Úys    €r   rf   zQTestInlinedClosure.test_inner_function_with_closure.<locals>.outer.<locals>.innery   s   ø€ Ø˜1‘u˜q‘yÐ r   r   ©r   rf   rr   s     @r   ri   zBTestInlinedClosure.test_inner_function_with_closure.<locals>.outerv   sB   ø€ Ø�A‘ˆAð!ð !ð !ð !ð !ð �5˜‘8”8˜e˜e A™hœhÑ&Ð&r   r   rj   rk   s      r   Ú test_inner_function_with_closurez3TestInlinedClosure.test_inner_function_with_closuret   sJ   € ð	'ð 	'ð 	'õ �U‘”ˆØ×Ò˜˜˜r™œ E E¨"¡I¤IÑ.Ô.Ð.Ð.Ð.r   c                 óz   — d„ }t          |¦  «        }|                       |d¦  «         |d¦  «        ¦  «         d S )Nc                 óJ   ‡— | dz   Šˆfd„} || ¦  «        Š‰ || ¦  «        z   S )Nr   c                 ó   •— | ‰z  S r   r   rq   s    €r   rf   zSTestInlinedClosure.test_inner_function_with_closure_2.<locals>.outer.<locals>.inner†   ó   ø€ Ø˜1‘u�r   r   rs   s     @r   ri   zDTestInlinedClosure.test_inner_function_with_closure_2.<locals>.outerƒ   sF   ø€ Ø�A‘ˆAðð ð ð ð ð ��a‘”ˆAØ�u�u˜Q‘x”x‘<Ðr   r   rj   rk   s      r   Ú"test_inner_function_with_closure_2z5TestInlinedClosure.test_inner_function_with_closure_2�   sJ   € ð	 ð 	 ð 	 õ �U‘”ˆØ×Ò˜˜˜r™œ E E¨"¡I¤IÑ.Ô.Ð.Ð.Ð.r   c                 óØ   — d}i }t          |                     ¦   «         |¦  «         t          |d         ¦  «        }|                       |d¦  «         |d         d¦  «        ¦  «         d S )Na  
            def outer(x):
                y = x + 1
                z = 0

                def inner(x):
                    nonlocal z
                    z += x * x
                    return z + y

                return inner(x) + inner(x) + z
        ri   r   )ÚexecÚstripr   r   )r   ÚcodeÚnsrl   s       r   Ú"test_inner_function_with_closure_3z5TestInlinedClosure.test_inner_function_with_closure_3�   si   € ðˆð ˆÝˆT�ZŠZ‰\Œ\˜2ÑÔÐå�R˜”[Ñ!Ô!ˆØ×Ò˜˜˜r™œ K B w¤K°¡O¤OÑ4Ô4Ð4Ð4Ð4r   c                 óz   — d„ }t          |¦  «        }|                       |d¦  «         |d¦  «        ¦  «         d S )Nc                 ó*   ‡ — ˆ fd„} |‰ ‰ z  ¦  «        S )Nc                 óZ   •‡ — ˆˆ fd„}d}t          ‰ ¦  «        D ]}| ||¦  «        z  }Œ|S )Nc                 ó   •— ‰‰z   | z   S r   r   ©Úzr   rr   s    €€r   Ú	innermostz^TestInlinedClosure.test_inner_function_nested.<locals>.outer.<locals>.inner.<locals>.innermost©   s   ø€ Ø˜q™5 1™9Ð$r   r   ©Úrange)rr   r†   ÚsÚir   s   `   €r   rf   zKTestInlinedClosure.test_inner_function_nested.<locals>.outer.<locals>.inner§   sW   øø€ ð%ð %ð %ð %ð %ð %ð �Ý˜q™œð &ð &�AØ˜˜ 1™œÑ%�A�AØ�r   r   rh   s   ` r   ri   z<TestInlinedClosure.test_inner_function_nested.<locals>.outer¥   s0   ø€ ðð ð ð ð ð �5˜˜Q™‘<”<Ðr   r   rj   rk   s      r   Útest_inner_function_nestedz-TestInlinedClosure.test_inner_function_nested£   sJ   € ð	 ð 	 ð 	 õ �U‘”ˆØ×Ò˜˜˜r™œ E E¨"¡I¤IÑ.Ô.Ð.Ð.Ð.r   c                 ól  ‡‡— t           ˆfd„¦   «         Šˆfd„}ˆfd„}d„ }d„ }d„ }d„ }dŠˆfd	„}dŠˆfd
„}d„ }	d„ }
d„ }d„ }d"d„}d"d„}d"d„}d„ }d„ }d„ }d„ }d„ }d„ }d„ }|||||||	|
|||||||g}|D ];}t          |¦  «        }d}|                       ||¦  «         ||¦  «        ¦  «         Œ<|                      t          ¦  «        5 } t	          d¬¦  «        |¦  «        } ||¦  «         ddd¦  «         n# 1 swxY w Y   d}|                      |t          |j        ¦  «        ¦  «         |                      t          ¦  «        5 } t	          d¬¦  «        |¦  «        } ||¦  «         ddd¦  «         n# 1 swxY w Y   d}|                      |t          |j        ¦  «        ¦  «         |                      t          ¦  «        5 } t	          d¬¦  «        |¦  «        } ||¦  «         ddd¦  «         n# 1 swxY w Y   d}|                      |t          |j        ¦  «        ¦  «         |                      t          ¦  «        5 } t	          d¬¦  «        |¦  «        } ||¦  «         ddd¦  «         n# 1 swxY w Y   d }|                      |t          |j        ¦  «        ¦  «         |                      t          ¦  «        5 } t	          d¬¦  «        |¦  «        } ||¦  «         ddd¦  «         n# 1 swxY w Y   d }|                      |t          |j        ¦  «        ¦  «         |                      t          ¦  «        5 } t	          d¬¦  «        |¦  «        } ||¦  «         ddd¦  «         n# 1 swxY w Y   d }|                      |t          |j        ¦  «        ¦  «         |                      t          ¦  «        5 } t	          d¬¦  «        |¦  «        } |¦   «          ddd¦  «         n# 1 swxY w Y   d!}|                      |t          |j        ¦  «        ¦  «         dS )#z3 Tests the large number of use cases defined below c                 óN   •— | dk     r| S  ‰| dz
  ¦  «         ‰| dz
  ¦  «        z   S )Nr;   r   r   )ÚnÚfib3s    €r   r�   z4TestInlinedClosure.test_bulk_use_cases.<locals>.fib3º   s4   ø€ à�1ŠuˆuØ�Ø�4˜˜A™‘;”;   a¨!¡e¡¤Ñ,Ð,r   c                 ó$   •— ˆfd„} || ¦  «        S )z, Test calling recursive function from inner c                 ó   •—  ‰| ¦  «        S r   r   )r   r�   s    €r   rf   zETestInlinedClosure.test_bulk_use_cases.<locals>.outer1.<locals>.innerÂ   s   ø€ Ø�t˜A‘w”w�r   r   )r   rf   r�   s     €r   Úouter1z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer1À   s)   ø€ ðð ð ð ð à�5˜‘8”8ˆOr   c                 ó2   •‡— | dz   Šˆˆfd„} || ¦  «        S )z. Test calling recursive function from closure r   c                 ó    •— |  ‰‰¦  «        z   S r   r   )r   r�   r…   s    €€r   rf   zETestInlinedClosure.test_bulk_use_cases.<locals>.outer2.<locals>.innerÊ   s   ø€ Ø˜4˜4 ™7œ7‘{Ð"r   r   )r   rf   r…   r�   s     @€r   Úouter2z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer2Æ   s8   øø€ à�A‘ˆAð#ð #ð #ð #ð #ð #à�5˜‘8”8ˆOr   c                 ó$   ‡— ˆfd„Š ‰| ¦  «        S )z Test recursive inner c                 ó4   •— | dk     rdS  ‰| dz
  ¦  «         d S ©Nr;   r   r   r   rh   s    €r   rf   zETestInlinedClosure.test_bulk_use_cases.<locals>.outer3.<locals>.innerÐ   s&   ø€ Ø�q’5�5Ø˜2à�E˜!˜a™%‘L”L�L�L�Lr   r   rh   s    @r   Úouter3z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer3Î   s+   ø€ ð!ð !ð !ð !ð !ð
 �5˜‘8”8ˆOr   c                 ó2   ‡‡— | dz   Šˆˆfd„Š ‰| ¦  «        S )z Test recursive closure r   c                 ó:   •— | ‰z   dk     rdS  ‰| dz
  ¦  «         d S r˜   r   rs   s    €€r   rf   zETestInlinedClosure.test_bulk_use_cases.<locals>.outer4.<locals>.innerÛ   s*   ø€ Ø�q‘5˜1’9�9Ø˜2à�E˜!˜a™%‘L”L�L�L�Lr   r   rs   s    @@r   Úouter4z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer4×   s:   øø€ à�A‘ˆAð!ð !ð !ð !ð !ð !ð
 �5˜‘8”8ˆOr   c                 ó.   ‡— | dz   Šˆfd„} || ¦  «        S )z Test nested closure r   c                 ó<   •‡— ‰| z   dz   Šˆfd„} || ¦  «        ‰z   S )Nr;   c                 ó   •— | ‰z   S r   r   ©r   r…   s    €r   Úinner2zVTestInlinedClosure.test_bulk_use_cases.<locals>.outer5.<locals>.inner1.<locals>.inner2é   s   ø€ Ø˜q™5�Lr   r   )r   r¡   r…   rr   s     @€r   Úinner1zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer5.<locals>.inner1æ   s>   øø€ Ø˜‘E˜A‘I�ð!ð !ð !ð !ð !ð �v˜a‘y”y 1‘}Ð$r   r   ©r   r¢   rr   s     @r   Úouter5z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer5â   s5   ø€ à�A‘ˆAð%ð %ð %ð %ð %ð �6˜!‘9”9Ðr   c                 ó.   ‡— | dz   Šˆfd„} || ¦  «        S )z. Test closure with list comprehension in body r   c                 óF   •— ‰| z   dz   }d„ t          |¦  «        D ¦   «         S )Nr;   c                 ó   — g | ]}|‘ŒS r   r   )Ú.0Úts     r   ú
<listcomp>zZTestInlinedClosure.test_bulk_use_cases.<locals>.outer6.<locals>.inner1.<locals>.<listcomp>ö   s   € Ð,Ð,Ð,˜a˜Ð,Ð,Ð,r   r‡   )r   r…   rr   s     €r   r¢   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer6.<locals>.inner1ô   s*   ø€ Ø˜‘E˜A‘I�Ø,Ð,¥5¨¡8¤8Ð,Ñ,Ô,Ð,r   r   r£   s     @r   Úouter6z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer6ð   s5   ø€ à�A‘ˆAð-ð -ð -ð -ð -ð �6˜!‘9”9Ðr   é	   c                 ó   •— | dz   }| |z   ‰z   S )z) Test use of outer scope var, no closure r   r   )r   r…   Ú_OUTER_SCOPE_VARs     €r   Úouter7z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer7û   s   ø€ à�A‘ˆAØ�q‘5Ð+Ñ+Ð+r   c                 ó2   •‡— | dz   Šˆˆfd„} || ¦  «        S )z+ Test use of outer scope var, with closure r   c                 ó   •— | ‰z   ‰z   S r   r   )r   r®   r…   s    €€r   rf   zETestInlinedClosure.test_bulk_use_cases.<locals>.outer8.<locals>.inner  s   ø€ Ø˜1‘uÐ/Ñ/Ð/r   r   )r   rf   r…   r®   s     @€r   Úouter8z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer8  s8   øø€ à�A‘ˆAð0ð 0ð 0ð 0ð 0ð 0à�5˜‘8”8ˆOr   c                 ó2   ‡— | dz   Šˆfd„}|} || ¦  «        S )z Test closure assignmentr   c                 ó   •— | ‰z   S r   r   r    s    €r   rf   zETestInlinedClosure.test_bulk_use_cases.<locals>.outer9.<locals>.inner  rx   r   r   )r   rf   Úfr…   s      @r   Úouter9z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer9
  s7   ø€ à�A‘ˆAðð ð ð ð àˆAØ�1�Q‘4”4ˆKr   c                 ó:   ‡‡— | dz   Šˆfd„Šˆfd„} || ¦  «        S )z! Test two inner, one calls other r   c                 ó   •— | ‰z   S r   r   r    s    €r   rf   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer10.<locals>.inner  rx   r   c                 ó   •—  ‰| ¦  «        S r   r   rh   s    €r   r¡   zGTestInlinedClosure.test_bulk_use_cases.<locals>.outer10.<locals>.inner2  s   ø€ Ø�u˜Q‘x”x�r   r   )r   r¡   rf   r…   s     @@r   Úouter10z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer10  sO   øø€ à�A‘ˆAðð ð ð ð ð ð  ð  ð  ð  ð �6˜!‘9”9Ðr   c                 ó   ‡— | dz   Šˆfd„}|S )z return the closure r   c                 ó   •— | ‰z   S r   r   r    s    €r   rf   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer11.<locals>.inner#  rx   r   r   ©r   rf   r…   s     @r   Úouter11z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer11  s*   ø€ à�A‘ˆAðð ð ð ð àˆLr   c                 ó0   ‡— | dz   Šdˆfd„	} || ¦  «        S )z closure with kwargr   é   c                 ó   •— | ‰z   |z   S r   r   ©r   Úkwr…   s     €r   rf   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer12.<locals>.inner+  ó   ø€ Ø˜1‘u˜r‘zÐ!r   ©rÀ   r   r½   s     @r   Úouter12z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer12'  s7   ø€ à�A‘ˆAð"ð "ð "ð "ð "ð "à�5˜‘8”8ˆOr   rÀ   c                 ó   — | dz   |z   }|S )z outer with kwarg no closurer   r   rÂ   s      r   Úouter13z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer13/  s   € à�A‘˜‘
ˆAØˆHr   c                 ó2   ‡‡— | dz   Šˆˆfd„} || ¦  «        S )z! outer with kwarg used in closurer   c                 ó   •— | ‰z   ‰z   S r   r   rÂ   s    €€r   rf   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer14.<locals>.inner8  rÄ   r   r   ©r   rÃ   rf   r…   s    ` @r   Úouter14z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer144  s8   øø€ à�A‘ˆAð"ð "ð "ð "ð "ð "à�5˜‘8”8ˆOr   c                 ó0   ‡— | dz   Šˆfd„} || |¦  «        S )z# outer with kwarg as arg to closurer   c                 ó   •— | ‰z   |z   S r   r   rÂ   s     €r   rf   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer15.<locals>.inner@  rÄ   r   r   rË   s      @r   Úouter15z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer15<  s5   ø€ à�A‘ˆAð"ð "ð "ð "ð "à�5˜˜B‘<”<Ðr   c                 óH   ‡— | dz   Šˆfd„}t           || ¦  «        ¦  «        S )z( closure is generator, consumed locally r   c              3   ó   •K  — | ‰z   V — d S r   r   r    s    €r   rf   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer16.<locals>.innerH  ó   øè è € Ø˜!‘e�����r   )Úlistr½   s     @r   Úouter16z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer16D  s;   ø€ à�A‘ˆAðð ð ð ð õ ˜˜˜a™œ‘>”>Ð!r   c                 ó.   ‡— | dz   Šˆfd„} || ¦  «        S )z  closure is generator, returned r   c              3   ó   •K  — | ‰z   V — d S r   r   r    s    €r   rf   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer17.<locals>.innerQ  rÒ   r   r   r½   s     @r   Úouter17z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer17M  s4   ø€ à�A‘ˆAðð ð ð ð ð �5˜‘8”8ˆOr   c                 ó<   ‡— | dz   Šˆfd„} || ¦  «        D ]}|}Œ|S )z( closure is generator, consumed in loop r   c              3   ó   •K  — | ‰z   V — d S r   r   r    s    €r   rf   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer18.<locals>.innerZ  rÒ   r   r   )r   rf   rŠ   r©   r…   s       @r   Úouter18z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer18V  sJ   ø€ à�A‘ˆAðð ð ð ð ð �U˜1‘X”Xð ð �Ø��àˆHr   c                 óF   ‡‡— | dz   Š| dz   Šˆfd„}ˆfd„} ||| ¦  «        S )z# closure as arg to another closure r   r;   c                 ó   •— | ‰z   S r   r   )r   Úz1s    €r   rf   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer19.<locals>.innerg  s   ø€ Ø˜2‘v�r   c                 ó    •—  | |¦  «        ‰z   S r   r   )rµ   r   Úz2s     €r   r¡   zGTestInlinedClosure.test_bulk_use_cases.<locals>.outer19.<locals>.inner2j  s   ø€ Ø�q˜‘t”t˜b‘yÐ r   r   )r   rf   r¡   rÝ   rß   s      @@r   Úouter19z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer19b  s\   øø€ à�Q‘ˆBØ�Q‘ˆBðð ð ð ð ð!ð !ð !ð !ð !ð �6˜% Ñ#Ô#Ð#r   c                 ó.   ‡— | dz   Šˆfd„} || ¦  «        S )z Test calling numpy in closure r   c                 ó2   •— | t          j        ‰¦  «        z   S r   )ÚnumpyÚcosr    s    €r   rf   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer20.<locals>.inners  s   ø€ Ø�5œ9 Q™<œ<Ñ'Ð'r   r   r½   s     @r   Úouter20z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer20o  s2   ø€ à�A‘ˆAð(ð (ð (ð (ð (à�5˜‘8”8ˆOr   c                 ó.   ‡— | dz   Šˆfd„} || ¦  «        S )z) Test calling numpy import as in closure r   c                 ó2   •— | t          j        ‰¦  «        z   S r   )Únprä   r    s    €r   rf   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer21.<locals>.inner{  s   ø€ Ø�2œ6 !™9œ9‘}Ð$r   r   r½   s     @r   Úouter21z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer21w  s2   ø€ à�A‘ˆAð%ð %ð %ð %ð %à�5˜‘8”8ˆOr   c                  ó   — d„ } d} | |Ž  dS )z6Test to ensure that unsupported *args raises correctlyc                 ó   — d S r   r   )rJ   Úbs     r   ÚbarzDTestInlinedClosure.test_bulk_use_cases.<locals>.outer22.<locals>.bar�  s   € Ø�r   )r   r;   Nr   ©rí   r   s     r   Úouter22z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer22  s%   € ðð ð àˆAØˆC�ˆGˆGˆGˆGr   r   Tr,   Nz,Unsupported use of cell variable encounteredz%Cannot capture the non-constant valuez-The use of yield in a closure is unsupported.z,Calling a closure with *args is unsupported.rÅ   )
r   r   ÚassertRaisesÚNotImplementedErrorr   ÚassertInÚstrÚ	exceptionr   r   )r   r’   r•   r™   rœ   r¤   r«   r¯   r²   r¶   rº   r¾   rÆ   rÈ   rÌ   rÏ   rÔ   r×   rÚ   rà   rå   ré   rï   rµ   Úrefrl   ÚvarÚraisesÚmsgr®   r�   s                                @@r   Útest_bulk_use_casesz&TestInlinedClosure.test_bulk_use_cases¶   s  øø€ õ 
ð	-ð 	-ð 	-ð 	-ñ 
Œð	-ð
	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð		ð 		ð 		ð	ð 	ð 	ð	ð 	ð 	ð Ðð	,ð 	,ð 	,ð 	,ð 	,ð
 Ðð	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð
	ð 
	ð 
	ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð 	ð
	ð 	ð 	ð 	ð	 ð 	 ð 	 ð 	 ð	"ð 	"ð 	"ð	ð 	ð 	ð
	ð 
	ð 
	ð	$ð 	$ð 	$ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð �V˜V V¨V°VØ�W˜g w°Ø�g˜w¨ð1ˆð ð 	3ð 	3ˆCÝ˜‘I”IˆEØˆCØ×Ò˜U˜U 3™ZœZ¨¨¨S©¬Ñ2Ô2Ð2Ð2ð ×ÒÕ2Ñ3Ô3ð 	°vØ&•C Ð&Ñ&Ô& vÑ.Ô.ˆEØˆE�#‰JŒJˆJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð =ˆØ�Š�c�3˜vÔ/Ñ0Ô0Ñ1Ô1Ð1à×ÒÕ2Ñ3Ô3ð 	°vØ&•C Ð&Ñ&Ô& vÑ.Ô.ˆEØˆE�#‰JŒJˆJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð =ˆØ�Š�c�3˜vÔ/Ñ0Ô0Ñ1Ô1Ð1à×Ò�{Ñ+Ô+ð 	¨vØ&•C Ð&Ñ&Ô& wÑ/Ô/ˆEØˆE�#‰JŒJˆJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 6ˆØ�Š�c�3˜vÔ/Ñ0Ô0Ñ1Ô1Ð1à×ÒÕ/Ñ0Ô0ð 	°FØ&•C Ð&Ñ&Ô& wÑ/Ô/ˆEØˆE�#‰JŒJˆJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð >ˆØ�Š�c�3˜vÔ/Ñ0Ô0Ñ1Ô1Ð1à×ÒÕ/Ñ0Ô0ð 	°FØ&•C Ð&Ñ&Ô& wÑ/Ô/ˆEØˆE�#‰JŒJˆJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð >ˆØ�Š�c�3˜vÔ/Ñ0Ô0Ñ1Ô1Ð1à×ÒÕ/Ñ0Ô0ð 	°FØ&•C Ð&Ñ&Ô& wÑ/Ô/ˆEØˆE�#‰JŒJˆJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð >ˆØ�Š�c�3˜vÔ/Ñ0Ô0Ñ1Ô1Ð1à×ÒÕ/Ñ0Ô0ð 	°FØ&•C Ð&Ñ&Ô& wÑ/Ô/ˆEØˆE‰GŒGˆGð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð =ˆØ�Š�c�3˜vÔ/Ñ0Ô0Ñ1Ô1Ð1Ð1Ð1s~   Ã%D Ä DÄDÅ%F Æ FÆFÇ%H È HÈHÉ%J Ê JÊJË%L Ì LÌLÍ%N Î NÎNÏ$O?Ï?PÐPc                 ól  — t          t          ¬¦  «        d„ ¦   «         }|                       |dd¦  «        d¦  «         |j        |j        d                  j        d         }g }|j                             ¦   «         D ]j}|j        D ]`}t          |t          j        ¦  «        rDt          |j        t          j        ¦  «        r%|j        j        dk    r|                     |¦  «         ŒaŒk|                      t          |¦  «        d	¦  «         |D ]&}|j        j        }d
}|                      ||¦  «         Œ'd S )N)Úpipeline_classc                 ó4   — d„ } || ¦  «         ||¦  «        fS )Nc                 ó   — d}d}||z   | z   S )Né   r   r   r„   s      r   rí   zITestInlinedClosure.test_closure_renaming_scheme.<locals>.foo.<locals>.barÀ  s   € Ø�Ø�Ø˜1‘u˜q‘yÐ r   r   )rJ   rì   rí   s      r   Úfooz<TestInlinedClosure.test_closure_renaming_scheme.<locals>.foo¾  s-   € ð!ð !ð !ð �3�q‘6”6˜3˜3˜q™6œ6�>Ð!r   r   é   )é   é#   r   Úpreserved_irrþ   r;   zclosure__locals__bar_v[0-9]+.x)r   r	   r   Ú	overloadsÚ
signaturesÚmetadataÚblocksÚvaluesÚbodyÚ
isinstancer   ÚAssignÚvalueÚConstÚappendÚlenÚtargetÚnameÚassertRegex)	r   rÿ   Úfunc_irÚstoreÚblkÚstmtrŠ   r  Úregexs	            r   Útest_closure_renaming_schemez/TestInlinedClosure.test_closure_renaming_schemeº  sL  € õ 
Õ5Ð	6Ñ	6Ô	6ð	"ð 	"ñ 
7Ô	6ð	"ð 	×Ò˜˜˜R ™œ hÑ/Ô/Ð/ð ”- ¤¨qÔ 1Ô2Ô;¸NÔKˆØˆØ”>×(Ò(Ñ*Ô*ð 	/ð 	/ˆCØœð /ð /�Ý˜d¥B¤IÑ.Ô.ð /Ý! $¤*­b¬hÑ7Ô7ð /Øœ:Ô+¨qÒ0Ð0Ø!ŸLšL¨Ñ.Ô.Ð.øð	/ð 	×Ò�˜U™œ QÑ'Ô'Ð'Øð 	*ð 	*ˆAØ”8”=ˆDØ5ˆEØ×Ò˜T 5Ñ)Ô)Ð)Ð)ð	*ð 	*r   c                 óœ   ‡— t           d„ ¦   «         Št           ˆfd„¦   «         }t          j                              |¦   «         d¦  «         d S )Nc                  ó   — dd„} | S )Nçš™™™™™ñ?c                 ó   — | |z   S r   r   rq   s     r   rí   z;TestInlinedClosure.test_issue9222.<locals>.foo.<locals>.barâ  rg   r   )r  r   )rí   s    r   rÿ   z.TestInlinedClosure.test_issue9222.<locals>.fooà  s   € ðð ð ð àˆJr   c                  ó*   •—   ‰ ¦   «         d¦  «        S rN   r   )rÿ   s   €r   Úconsumez2TestInlinedClosure.test_issue9222.<locals>.consumeæ  s   ø€ à�3�3‘5”5˜‘8”8ˆOr   gffffff@)r   rè   ÚtestingÚassert_allclose)r   r  rÿ   s     @r   Útest_issue9222z!TestInlinedClosure.test_issue9222Ü  si   ø€ õ 
ð	ð 	ñ 
Œð	õ
 
ð	ð 	ð 	ð 	ñ 
Œð	õ
 	Œ
×"Ò" 7 7¡9¤9¨gÑ6Ô6Ð6Ð6Ð6r   c                 ó:   — t           d„ ¦   «         } |¦   «          d S )Nc                  óŠ   — d} t          d¦  «        D ]0}t          j        d„ t          | d¦  «        D ¦   «         ¦  «         d} Œ1d S )Nr   r   c                 ó   — g | ]}d ‘ŒS )r   r   )r¨   Ú_s     r   rª   zFTestInlinedClosure.test_issue_9577.<locals>._inner.<locals>.<listcomp>ô  s   € Ð;Ð;Ð; ˜!Ð;Ð;Ð;r   rÀ   )rˆ   rè   Úarray)Úrange_startr%  s     r   Ú_innerz2TestInlinedClosure.test_issue_9577.<locals>._innerð  sV   € àˆKÝ˜1‘X”Xð  ð  �Ý”Ð;Ð;¥U¨;¸Ñ%:Ô%:Ð;Ñ;Ô;Ñ<Ô<Ð<Ø��ð ð  r   )r   )r   r(  s     r   Útest_issue_9577z"TestInlinedClosure.test_issue_9577î  s,   € å	ð	 ð 	 ñ 
Œð	 ð 	ˆ‰Œˆˆˆr   c                 ó8  — t           d„ ¦   «         }|                      t          ¦  «        5 } |¦   «          d d d ¦  «         n# 1 swxY w Y   d}|                      |t	          |j        ¦  «        ¦  «         t           d„ ¦   «         }|                      t          ¦  «        5 } |d¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |t	          |j        ¦  «        ¦  «         t           d„ ¦   «         }|                       |¦   «         d¦  «         d S )Nc                  ó*   ‡— dŠˆfd„}  | ¦   «          ‰S )Nr   c                  ó   •— dŠ dŠ d S ©Nr   r;   r   re   s   €r   rí   zKTestInlinedClosure.test_issue_10379.<locals>.reassign_nonlocal.<locals>.bar  s   ø€ à�Ø���r   r   rî   s    @r   Úreassign_nonlocalz>TestInlinedClosure.test_issue_10379.<locals>.reassign_nonlocalý  s3   ø€ àˆAðð ð ð ð ð
 ˆC‰EŒEˆEØˆHr   z!Reassigning the nonlocal variablec                 ó.   ‡ ‡— dŠˆ ˆfd„} |¦   «          ‰S )Nr   c                  ó   •— dŠ‰ rdŠd S d S r-  r   )Úcondr   s   €€r   rí   zLTestInlinedClosure.test_issue_10379.<locals>.reassign_in_branch.<locals>.bar  s#   ø€ à�Øð Ø�A�A�Aðð r   r   )r1  rí   r   s   ` @r   Úreassign_in_branchz?TestInlinedClosure.test_issue_10379.<locals>.reassign_in_branch  s9   øø€ àˆAðð ð ð ð ð ð ˆC‰EŒEˆEØˆHr   Fc                  ó*   ‡— dŠˆfd„}  | ¦   «          ‰S )Nr   c                  ó   •— dŠ d S )Nr   r   re   s   €r   rí   zNTestInlinedClosure.test_issue_10379.<locals>.assign_nonlocal_once.<locals>.bar&  s   ø€ à���r   r   rî   s    @r   Úassign_nonlocal_oncezATestInlinedClosure.test_issue_10379.<locals>.assign_nonlocal_once"  s3   ø€ àˆAðð ð ð ð ð ˆC‰EŒEˆEØˆHr   r   )r   rð   r   rò   ró   rô   r   )r   r.  r÷   rø   r2  r5  s         r   Útest_issue_10379z#TestInlinedClosure.test_issue_10379ù  s°  € õ 
ð		ð 		ñ 
Œð		ð ×ÒÕ/Ñ0Ô0ð 	 °FØÐÑÔÐð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 à1ˆØ�Š�c�3˜vÔ/Ñ0Ô0Ñ1Ô1Ð1õ 
ð
	ð 
	ñ 
Œð
	ð ×ÒÕ/Ñ0Ô0ð 	&°FØÐ˜uÑ%Ô%Ð%ð	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&øøøð 	&ð 	&ð 	&ð 	&à�Š�c�3˜vÔ/Ñ0Ô0Ñ1Ô1Ð1õ 
ð	ð 	ñ 
Œð	ð 	×ÒÐ-Ð-Ñ/Ô/°Ñ3Ô3Ð3Ð3Ð3s#   «AÁAÁ	AÂ!B9Â9B=Ã B=N)r]   r^   r_   Ú__doc__rm   rt   ry   r   r‹   rù   r  r!  r   Úrun_test_in_subprocessr)  r6  r   r   r   ra   ra   a   sÉ   € € € € € ðð ð
/ð 
/ð 
/ð/ð /ð /ð/ð /ð /ð5ð 5ð 5ð(/ð /ð /ð&B2ð B2ð B2ðH *ð  *ð  *ðD7ð 7ð 7ð$ Ô$ðð ñ %Ô$ðð44ð 44ð 44ð 44ð 44r   ra   Ú__main__)rã   rè   ÚunittestÚnumbar   r   Únumba.core.errorsr   r   Ú
numba.corer   Únumba.tests.supportr   r	   r   ra   r]   Úmainr   r   r   ú<module>r@     s	  ðà Ð Ð Ð Ø €€€à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø Ð Ð Ð Ð Ð Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BðR3ð R3ð R3ð R3ð R3�(ñ R3ô R3ð R3ðjL4ð L4ð L4ð L4ð L4˜ñ L4ô L4ð L4ð^ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   