Ë
    èÿæi=5  ã                   ó²   — 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"                  «        yy)é    N)ÚnjitÚjit)ÚTypingErrorÚUnsupportedError)Úir)ÚTestCaseÚIRPreservingTestPipelinec                   óT   — 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y)ÚTestClosurec                 óš   ‡— dŠˆfd„} t        di |¤Ž|«      }| j                   |d«      d«       dŠ| j                   |d«      d«       y )Né
   c                 ó   •— | ‰z   S ©N© ©ÚxÚYs    €úm/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/tests/test_closure.pyÚadd_Yz3TestClosure.run_jit_closure_variable.<locals>.add_Y   ó   ø€ Ø�q‘5ˆLó    é   é   é   ©zi4(i4)©r   ÚassertEqual)ÚselfÚjitargsr   Úc_add_Yr   s       @r   Úrun_jit_closure_variablez$TestClosure.run_jit_closure_variable   sR   ø€ Øˆô	ð +”#Ñ* 'Ñ*¨5Ó1ˆØ×Ñ™ › RÔ(ð ˆØ×Ñ™ › RÕ(r   c                 ó(   — | j                  d¬«       y ©NT)Úforceobj©r!   ©r   s    r   Útest_jit_closure_variablez%TestClosure.test_jit_closure_variable   ó   € Ø×%Ñ%¨tÐ%Õ4r   c                 ó(   — | j                  d¬«       y ©NT©Únopythonr%   r&   s    r   Útest_jit_closure_variable_npmz)TestClosure.test_jit_closure_variable_npm   r(   r   c                 ó   ‡— dŠˆfd„} t        di |¤Ž|«      }| j                   |d«      d«       dŠ t        di |¤Ž|«      }| j                   |d«      d«       dŠ| j                   |d«      d«       | j                   |d«      d«       y )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    Ú	c_add_Y_2r   s        @r   Úrun_rejitting_closurez!TestClosure.run_rejitting_closure"   s“   ø€ Øˆô	ð +”#Ñ* 'Ñ*¨5Ó1ˆØ×Ñ™ › RÔ(ð ˆØ,”CÑ, GÑ,¨UÓ3ˆ	Ø×Ñ™ 1› rÔ*ØˆØ×Ñ™ 1› rÔ*à×Ñ™ › RÕ(r   c                 ó(   — | j                  d¬«       y r#   ©r2   r&   s    r   Útest_rejitting_closurez"TestClosure.test_rejitting_closure4   ó   € Ø×"Ñ"¨DÐ"Õ1r   c                 ó(   — | j                  d¬«       y r*   r4   r&   s    r   Útest_rejitting_closure_npmz&TestClosure.test_rejitting_closure_npm7   r6   r   c                 ón   ‡‡— dŠdŠˆˆfd„} t        di |¤Ž|«      }| j                   |d«      d«       y )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=   Úc_add_Y_mult_Zr   r<   s       @@r   Ú"run_jit_multiple_closure_variablesz.TestClosure.run_jit_multiple_closure_variables:   s=   ù€ ØˆØˆõ	ð 2œÑ1¨Ñ1°,Ó?ˆØ×Ñ™¨Ó*¨BÕ/r   c                 ó(   — | j                  d¬«       y r#   ©r@   r&   s    r   Ú#test_jit_multiple_closure_variablesz/TestClosure.test_jit_multiple_closure_variablesD   ó   € Ø×/Ñ/¸Ð/Õ>r   c                 ó(   — | j                  d¬«       y r*   rB   r&   s    r   Ú'test_jit_multiple_closure_variables_npmz3TestClosure.test_jit_multiple_closure_variables_npmG   rD   r   c                 ó  ‡— d„ } t        di |¤Ž|«      Š‰j                  «        ˆfd„} t        di |¤Ž|«      }|j                  «        | j                  |‰«      5  | j                   |d«      d«       d d d «       y # 1 sw Y   y xY w)Nc                 ó   — | dz  S )Nr   r   )Úas    r   Úmult_10z3TestClosure.run_jit_inner_function.<locals>.mult_10K   s   € Ø�r‘6ˆMr   c                 ó   •—  ‰| dz   «      S ©Né   r   )r   Ú	c_mult_10s    €r   Údo_mathz3TestClosure.run_jit_inner_function.<locals>.do_mathQ   s   ø€ Ù˜Q ™UÓ#Ð#r   r   é2   )z
intp(intp))r   Údisable_compileÚassertRefCountr   )r   r   rJ   rO   Ú	c_do_mathrN   s        @r   Úrun_jit_inner_functionz"TestClosure.run_jit_inner_functionJ   s�   ø€ ò	ð 1”CÑ0¨Ñ0°Ó9ˆ	Ø×!Ñ!Ô#ô	$ð 1”CÑ0¨Ñ0°Ó9ˆ	Ø×!Ñ!Ô#à× Ñ  ¨IÕ6Ø×Ñ™Y q›\¨2Ô.÷ 7×6Ñ6ús   ÁB Â B	c                 ó(   — | j                  d¬«       y r#   ©rT   r&   s    r   Útest_jit_inner_functionz#TestClosure.test_jit_inner_functionZ   ó   € Ø×#Ñ#¨TÐ#Õ2r   c                 ó(   — | j                  d¬«       y r*   rV   r&   s    r   Útest_jit_inner_function_npmz'TestClosure.test_jit_inner_function_npm]   rX   r   N)Ú__name__Ú
__module__Ú__qualname__r!   r'   r-   r2   r5   r8   r@   rC   rF   rT   rW   rZ   r   r   r   r   r      s>   „ ò)ò5ò5ò)ò$2ò2ò0ò?ò?ò/ò 3ó3r   r   c                   ód   — 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y)Ú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                 ó\   — d„ }t        |«      }| j                   |d«       |d«      «       y )Nc                 ó*   — d„ } || «       || «      z   S )Nc                 ó   — | | z  S r   r   )r   s    r   ÚinnerzDTestInlinedClosure.test_inner_function.<locals>.outer.<locals>.innerl   ó   € Ø˜1‘u�r   r   ©r   rc   s     r   Úouterz5TestInlinedClosure.test_inner_function.<locals>.outerj   s   € òñ ˜“8™e A›hÑ&Ð&r   r   ©r   r   ©r   rf   Úcfuncs      r   Útest_inner_functionz&TestInlinedClosure.test_inner_functionh   s*   € ò	'ô �U“ˆØ×Ñ™˜r›¡E¨"£IÕ.r   c                 ó\   — d„ }t        |«      }| j                   |d«       |d«      «       y )Nc                 ó:   ‡— | dz   Šˆfd„} || «       || «      z   S )Nr   c                 ó   •— | | z  ‰z   S r   r   ©r   Úys    €r   rc   zQTestInlinedClosure.test_inner_function_with_closure.<locals>.outer.<locals>.innery   s   ø€ Ø˜1‘u˜q‘yÐ r   r   ©r   rc   ro   s     @r   rf   zBTestInlinedClosure.test_inner_function_with_closure.<locals>.outerv   s&   ø€ Ø�A‘ˆAô!ñ ˜“8™e A›hÑ&Ð&r   r   rg   rh   s      r   Ú test_inner_function_with_closurez3TestInlinedClosure.test_inner_function_with_closuret   s*   € ò	'ô �U“ˆØ×Ñ™˜r›¡E¨"£IÕ.r   c                 ó\   — d„ }t        |«      }| j                   |d«       |d«      «       y )Nc                 ó>   ‡— | dz   Šˆfd„} || «      Š‰ || «      z   S )Nr   c                 ó   •— | ‰z  S r   r   rn   s    €r   rc   zSTestInlinedClosure.test_inner_function_with_closure_2.<locals>.outer.<locals>.inner†   ó   ø€ Ø˜1‘u�r   r   rp   s     @r   rf   zDTestInlinedClosure.test_inner_function_with_closure_2.<locals>.outerƒ   s*   ø€ Ø�A‘ˆAôñ �a“ˆAØ‘u˜Q“x‘<Ðr   r   rg   rh   s      r   Ú"test_inner_function_with_closure_2z5TestInlinedClosure.test_inner_function_with_closure_2�   s*   € ò	 ô �U“ˆØ×Ñ™˜r›¡E¨"£IÕ.r   c                 óž   — d}i }t        |j                  «       |«       t        |d   «      }| j                   |d«       |d   d«      «       y )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
        rf   r   )ÚexecÚstripr   r   )r   ÚcodeÚnsri   s       r   Ú"test_inner_function_with_closure_3z5TestInlinedClosure.test_inner_function_with_closure_3�   sL   € ðˆð ˆÜˆT�Z‰Z‹\˜2Ôä�R˜‘[Ó!ˆØ×Ñ™˜r› K B w¡K°£OÕ4r   c                 ó\   — d„ }t        |«      }| j                   |d«       |d«      «       y )Nc                 ó$   ‡ — ˆ fd„} |‰ ‰ z  «      S )Nc                 óP   •‡ — ˆˆ fd„}d}t        ‰ «      D ]  }| ||«      z  }Œ |S )Nc                 ó   •— ‰‰z   | z   S r   r   ©Úzr   ro   s    €€r   Ú	innermostz^TestInlinedClosure.test_inner_function_nested.<locals>.outer.<locals>.inner.<locals>.innermost©   s   ø€ Ø˜q™5 1™9Ð$r   r   ©Úrange)ro   rƒ   ÚsÚir   s   `   €r   rc   zKTestInlinedClosure.test_inner_function_nested.<locals>.outer.<locals>.inner§   s0   ù€ õ%ð �Ü˜qž�AØ™ 1›Ñ%‘Að "à�r   r   re   s   ` r   rf   z<TestInlinedClosure.test_inner_function_nested.<locals>.outer¥   s   ø€ ôñ ˜˜Q™“<Ðr   r   rg   rh   s      r   Útest_inner_function_nestedz-TestInlinedClosure.test_inner_function_nested£   s*   € ò	 ô �U“ˆØ×Ñ™˜r›¡E¨"£IÕ.r   c                 ó.  ‡‡— 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}| j                   ||«       ||«      «       Œ/ | j                  t        «      5 } t	        d¬«      |«      } |«       ddd«       d}| j                  |t        j                  «      «       | j                  t        «      5 } t	        d¬«      |«      } |«       ddd«       d}| j                  |t        |j                  «      «       | j                  t        «      5 } t	        d¬«      |«      } |«       ddd«       d}| j                  |t        |j                  «      «       | j                  t        «      5 } t	        d¬«      |«      } |«       ddd«       d}| j                  |t        |j                  «      «       | j                  t        «      5 } t	        d¬«      |«      } |«       ddd«       d}| j                  |t        |j                  «      «       | j                  t        «      5 } t	        d¬«      |«      } |«       ddd«       d}| j                  |t        |j                  «      «       | j                  t        «      5 } t	        d¬«      |«      } |«        ddd«       d }| j                  |t        |j                  «      «       y# 1 sw Y   �ŒkxY w# 1 sw Y   �ŒxY w# 1 sw Y   �ŒÇxY w# 1 sw Y   �ŒuxY w# 1 sw Y   �Œ#xY w# 1 sw Y   ŒÐxY w# 1 sw Y   Œ~xY w)"z3 Tests the large number of use cases defined below c                 ó@   •— | dk  r| S  ‰| dz
  «       ‰| dz
  «      z   S )Nr:   r   r   )ÚnÚfib3s    €r   rŒ   z4TestInlinedClosure.test_bulk_use_cases.<locals>.fib3º   s*   ø€ à�1ŠuØ�Ù˜˜A™“;¡ a¨!¡e£Ñ,Ð,r   c                 ó   •— ˆfd„} || «      S )z, Test calling recursive function from inner c                 ó   •—  ‰| «      S r   r   )r   rŒ   s    €r   rc   zETestInlinedClosure.test_bulk_use_cases.<locals>.outer1.<locals>.innerÂ   s   ø€ Ù˜A“w�r   r   )r   rc   rŒ   s     €r   Úouter1z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer1À   s   ø€ ôá˜“8ˆOr   c                 ó,   •‡— | dz   Šˆˆfd„} || «      S )z. Test calling recursive function from closure r   c                 ó   •— |  ‰‰«      z   S r   r   )r   rŒ   r‚   s    €€r   rc   zETestInlinedClosure.test_bulk_use_cases.<locals>.outer2.<locals>.innerÊ   s   ø€ Ø™4 ›7‘{Ð"r   r   )r   rc   r‚   rŒ   s     @€r   Úouter2z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer2Æ   s   ù€ à�A‘ˆAõ#á˜“8ˆOr   c                 ó   ‡— ˆfd„Š ‰| «      S )z Test recursive inner c                 ó(   •— | dk  ry ‰| dz
  «       y ©Nr:   r   r   r   re   s    €r   rc   zETestInlinedClosure.test_bulk_use_cases.<locals>.outer3.<locals>.innerÐ   s   ø€ Ø�q’5Øá˜!˜a™%•Lr   r   re   s    @r   Úouter3z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer3Î   s   ø€ ô!ñ
 ˜“8ˆOr   c                 ó,   ‡‡— | dz   Šˆˆfd„Š ‰| «      S )z Test recursive closure r   c                 ó.   •— | ‰z   dk  ry ‰| dz
  «       y r•   r   rp   s    €€r   rc   zETestInlinedClosure.test_bulk_use_cases.<locals>.outer4.<locals>.innerÛ   s   ø€ Ø�q‘5˜1’9Øá˜!˜a™%•Lr   r   rp   s    @@r   Úouter4z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer4×   s   ù€ à�A‘ˆAõ!ñ
 ˜“8ˆOr   c                 ó(   ‡— | dz   Šˆfd„} || «      S )z Test nested closure r   c                 ó6   •‡— ‰| 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‚   ro   s     @€r   Úinner1zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer5.<locals>.inner1æ   s%   ù€ Ø˜‘E˜A‘I�ô!ñ ˜a“y 1‘}Ð$r   r   ©r   rŸ   ro   s     @r   Úouter5z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer5â   s   ø€ à�A‘ˆAô%ñ ˜!“9Ðr   c                 ó(   ‡— | dz   Šˆfd„} || «      S )z. Test closure with list comprehension in body r   c                 óP   •— ‰| z   dz   }t        |«      D �cg c]  }|‘Œ c}S c c}w )Nr:   r„   )r   r‚   Útro   s      €r   rŸ   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer6.<locals>.inner1ô   s,   ø€ Ø˜‘E˜A‘I�Ü#(¨¤8Ó,¡8˜aš 8Ñ,Ð,ùÒ,s   —	#r   r    s     @r   Úouter6z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer6ð   s   ø€ à�A‘ˆAô-ñ ˜!“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                 ó,   •‡— | 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   rc   zETestInlinedClosure.test_bulk_use_cases.<locals>.outer8.<locals>.inner  s   ø€ Ø˜1‘uÐ/Ñ/Ð/r   r   )r   rc   r‚   r¨   s     @€r   Úouter8z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer8  s   ù€ à�A‘ˆAõ0á˜“8ˆOr   c                 ó,   ‡— | dz   Šˆfd„}|} || «      S )z Test closure assignmentr   c                 ó   •— | ‰z   S r   r   r�   s    €r   rc   zETestInlinedClosure.test_bulk_use_cases.<locals>.outer9.<locals>.inner  ru   r   r   )r   rc   Úfr‚   s      @r   Úouter9z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer9
  s   ø€ à�A‘ˆAôàˆAÙ�Q“4ˆKr   c                 ó4   ‡‡— | dz   Šˆfd„Šˆfd„} || «      S )z! Test two inner, one calls other r   c                 ó   •— | ‰z   S r   r   r�   s    €r   rc   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer10.<locals>.inner  ru   r   c                 ó   •—  ‰| «      S r   r   re   s    €r   rž   zGTestInlinedClosure.test_bulk_use_cases.<locals>.outer10.<locals>.inner2  s   ø€ Ù˜Q“x�r   r   )r   rž   rc   r‚   s     @@r   Úouter10z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer10  s"   ù€ à�A‘ˆAôô ñ ˜!“9Ðr   c                 ó   ‡— | dz   Šˆfd„}|S )z return the closure r   c                 ó   •— | ‰z   S r   r   r�   s    €r   rc   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer11.<locals>.inner#  ru   r   r   ©r   rc   r‚   s     @r   Úouter11z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer11  s   ø€ à�A‘ˆAôàˆLr   c                 ó*   ‡— | dz   Šdˆfd„	} || «      S )z closure with kwargr   c                 ó   •— | ‰z   |z   S r   r   ©r   Úkwr‚   s     €r   rc   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer12.<locals>.inner+  ó   ø€ Ø˜1‘u˜r‘zÐ!r   ©é   r   r·   s     @r   Úouter12z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer12'  s   ø€ à�A‘ˆAõ"á˜“8ˆOr   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                 ó,   ‡‡— | dz   Šˆˆfd„} || «      S )z! outer with kwarg used in closurer   c                 ó   •— | ‰z   ‰z   S r   r   r»   s    €€r   rc   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer14.<locals>.inner8  r½   r   r   ©r   r¼   rc   r‚   s    ` @r   Úouter14z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer144  s   ù€ à�A‘ˆAõ"á˜“8ˆOr   c                 ó*   ‡— | dz   Šˆfd„} || |«      S )z# outer with kwarg as arg to closurer   c                 ó   •— | ‰z   |z   S r   r   r»   s     €r   rc   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer15.<locals>.inner@  r½   r   r   rÅ   s      @r   Úouter15z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer15<  s   ø€ à�A‘ˆAô"á˜˜B“<Ðr   c                 ó:   ‡— | dz   Šˆfd„}t         || «      «      S )z( closure is generator, consumed locally r   c              3   ó   •K  — | ‰z   –— y ­wr   r   r�   s    €r   rc   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer16.<locals>.innerH  ó   øè ø€ Ø˜!‘e“ùó   ƒ	)Ú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   –— y ­wr   r   r�   s    €r   rc   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer17.<locals>.innerQ  rÌ   rÍ   r   r·   s     @r   Úouter17z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer17M  s   ø€ à�A‘ˆAôñ ˜“8ˆOr   c                 ó:   ‡— | dz   Šˆfd„} || «      D ]  }|}Œ S )z( closure is generator, consumed in loop r   c              3   ó   •K  — | ‰z   –— y ­wr   r   r�   s    €r   rc   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer18.<locals>.innerZ  rÌ   rÍ   r   )r   rc   r‡   r¤   r‚   s       @r   Úouter18z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer18V  s-   ø€ à�A‘ˆAôñ ˜1–X�Ø‘ð ð ˆHr   c                 ó@   ‡‡— | 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   rc   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   ø€ Ù˜“t˜b‘yÐ r   r   )r   rc   rž   rØ   rÚ   s      @@r   Úouter19z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer19b  s.   ù€ à�Q‘ˆBØ�Q‘ˆBôô!ñ ˜% Ó#Ð#r   c                 ó(   ‡— | dz   Šˆfd„} || «      S )z Test calling numpy in closure r   c                 ó4   •— | t        j                  ‰«      z   S r   )ÚnumpyÚcosr�   s    €r   rc   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer20.<locals>.inners  s   ø€ Øœ5Ÿ9™9 Q›<Ñ'Ð'r   r   r·   s     @r   Úouter20z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer20o  s   ø€ à�A‘ˆAô(á˜“8ˆOr   c                 ó(   ‡— | dz   Šˆfd„} || «      S )z) Test calling numpy import as in closure r   c                 ó4   •— | t        j                  ‰«      z   S r   )Únprß   r�   s    €r   rc   zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer21.<locals>.inner{  s   ø€ Øœ2Ÿ6™6 !›9‘}Ð$r   r   r·   s     @r   Úouter21z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer21w  s   ø€ à�A‘ˆAô%á˜“8ˆOr   c                  ó   — d„ } d} | |Ž  y)z6Test to ensure that unsupported *args raises correctlyc                  ó   — y r   r   )rI   Ú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Ù�Š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¯   Úrefri   ÚvarÚraisesÚmsgr¨   rŒ   s                                @@r   Útest_bulk_use_casesz&TestInlinedClosure.test_bulk_use_cases¶   sR  ù€ ô 
ó	-ó 
ð	-ô
	ô	ò	ò		ò	ò	ð Ðô	,ð
 Ðô	ò	ò
	ò	ò	ó	ó
	ó	 ò	"ò	ò
	ò	$ò	ò	ò	ð �V˜V V¨V°VØ�W˜g w°Ø�g˜w¨ð1ˆó ˆCÜ˜“IˆEØˆCØ×Ñ™U 3›Z©¨S«Õ2ð ð ×ÑÔ2Ô3°vØ&”C Ô& vÓ.ˆEÙ�#ŒJ÷ 4ð =ˆØ�‰�cœ3˜v×/Ñ/Ó0Ô1à×ÑÔ2Ô3°vØ&”C Ô& vÓ.ˆEÙ�#ŒJ÷ 4ð =ˆØ�‰�cœ3˜v×/Ñ/Ó0Ô1à×Ñœ{Ô+¨vØ&”C Ô& wÓ/ˆEÙ�#ŒJ÷ ,ð 6ˆØ�‰�cœ3˜v×/Ñ/Ó0Ô1à×ÑÔ/Ô0°FØ&”C Ô& wÓ/ˆEÙ�#ŒJ÷ 1ð >ˆØ�‰�cœ3˜v×/Ñ/Ó0Ô1à×ÑÔ/Ô0°FØ&”C Ô& wÓ/ˆEÙ�#ŒJ÷ 1ð >ˆØ�‰�cœ3˜v×/Ñ/Ó0Ô1à×ÑÔ/Ô0°FØ&”C Ô& wÓ/ˆEÙ�#ŒJ÷ 1ð >ˆØ�‰�cœ3˜v×/Ñ/Ó0Ô1à×ÑÔ/Ô0°FØ&”C Ô& wÓ/ˆEÙŒG÷ 1ð =ˆØ�‰�cœ3˜v×/Ñ/Ó0Õ1÷Q 4Ñ3ú÷ 4Ñ3ú÷ ,Ñ+ú÷ 1Ñ0ú÷ 1Ñ0ú÷ 1Ð0ú÷ 1Ð0úsT   Â:L>ÄMÅ8MÇM%È6M2ÊM?Ë4NÌ>MÍMÍM"Í%M/Í2M<Í?NÎNc                 ó†  — t        t        ¬«      d„ «       }| j                   |dd«      d«       |j                  |j                  d      j
                  d   }g }|j                  j                  «       D ]~  }|j                  D ]m  }t        |t        j                  «      sŒt        |j                  t        j                  «      sŒC|j                  j                  dk(  sŒ]|j                  |«       Œo Œ€ | j                  t        |«      d	«       |D ],  }|j                   j"                  }d
}| j%                  ||«       Œ. y )N)Úpipeline_classc                 ó(   — 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   )rI   rç   rè   s      r   Úfooz<TestInlinedClosure.test_closure_renaming_scheme.<locals>.foo¾  s   € ò!ñ �q“6™3˜q›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º  s  € ô 
Ô5Ô	6ñ	"ó 
7ð	"ð 	×Ñ™˜R › hÔ/ð —-‘- §¡¨qÑ 1Ñ2×;Ñ;¸NÑKˆØˆØ—>‘>×(Ñ(Ö*ˆCØŸœ�Ü˜d¤B§I¡IÕ.Ü! $§*¡*¬b¯h©hÕ7ØŸ:™:×+Ñ+¨qÓ0Ø!ŸL™L¨Õ.ñ	 !ð +ð 	×Ñœ˜U› QÔ'ÛˆAØ—8‘8—=‘=ˆDØ5ˆEØ×Ñ˜T 5Õ)ñ r   c                 ó„   ‡— t         d„ «       Št         ˆfd„«       }t        j                  j                   |«       d«       y )Nc                  ó   — dd„} | S )Nc                 ó   — | |z   S r   r   rn   s     r   rè   z;TestInlinedClosure.test_issue9222.<locals>.foo.<locals>.barâ  rd   r   )gš™™™™™ñ?r   )rè   s    r   rù   z.TestInlinedClosure.test_issue9222.<locals>.fooà  s   € óàˆJr   c                  ó   •—   ‰ «       d«      S rL   r   )rù   s   €r   Úconsumez2TestInlinedClosure.test_issue9222.<locals>.consumeæ  s   ø€ à‘3“5˜“8ˆOr   gffffff@)r   rã   ÚtestingÚassert_allclose)r   r  rù   s     @r   Útest_issue9222z!TestInlinedClosure.test_issue9222Ü  sC   ø€ ô 
ñ	ó 
ð	ô
 
ó	ó 
ð	ô
 	�
‰
×"Ñ"¡7£9¨gÕ6r   c                 ó*   — t         d„ «       } |«        y )Nc                  ó�   — d} t        d«      D ]1  }t        j                  t        | d«      D �cg c]  }d‘Œ c}«       d} Œ3 y c c}w )Nr   r   r¿   )r…   rã   Úarray)Úrange_startÚ_s     r   Ú_innerz2TestInlinedClosure.test_issue_9577.<locals>._innerð  sA   € àˆKÜ˜1–X�Ü—‘¤U¨;¸Ô%:Ó;Ñ%: š!Ð%:Ñ;Ô<Ø‘ñ ùÚ;s   ®	A
)r   )r   r   s     r   Útest_issue_9577z"TestInlinedClosure.test_issue_9577î  s   € ä	ñ	 ó 
ð	 ñ 	�r   N)r[   r\   r]   Ú__doc__rj   rq   rv   r|   rˆ   ró   r  r  r   Úrun_test_in_subprocessr!  r   r   r   r_   r_   a   sL   „ ñò
/ò/ò/ò5ò(/ò&B2òH *òD7ð$ ×$Ñ$ñó %ñr   r_   Ú__main__)rÞ   rã   ÚunittestÚnumbar   r   Únumba.core.errorsr   r   Ú
numba.corer   Únumba.tests.supportr   r	   r   r_   r[   Úmainr   r   r   Ú<module>r+     sR   ðã Û ã ß ß ;Ý ß BôR3�(ô R3ôjV˜ô Vðr ˆzÒØ€H‡M�M…Oð r   