o
    iE                     @   s|  d Z ddlZddlZddlZddlmZmZmZm	Z	m
Z
 ddlmZ ddlmZ ddlmZmZmZmZ ddlmZ ddlmZmZmZ dd	lmZmZmZ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)m*Z* ddl+Z+g dZ,ej-.e	e	Z/G dd de+j*Z0G dd de+j*Z1G dd de+j*Z2G dd de+j*Z3G dd de'e+j*Z4G dd de'e*Z5e6dkre+7  dS dS )z"
Unspecified error handling tests
    N)jitnjittypedint64types)errors)	structref)overload	intrinsicoverload_methodoverload_attribute)CompilerBase)TranslateByteCode	FixupArgsIRProcessing)NopythonTypeInferenceDeadCodeEliminationNoPythonBackendNativeLowering)PassManager)_err_reasons)skip_parfors_unsupportedoverride_configSerialMixinskip_unless_cffiskip_unless_scipyTestCase)            c                   @      e Zd Zdd ZdS )TestErrorHandlingBeforeLoweringc              	   C   sh   dd }t tfD ])}| tj}||d W d    n1 s!w   Y  d}| |t|j qd S )Nc                    s   | d   fdd}|S )z return the closure r   c                    s   |   S N xzr$   m/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/numba/tests/test_errorhandling.pyinner'   s   zmTestErrorHandlingBeforeLowering.test_unsupported_make_function_return_inner_func.<locals>.func.<locals>.innerr$   )r&   r*   r$   r'   r)   func#   s   z^TestErrorHandlingBeforeLowering.test_unsupported_make_function_return_inner_func.<locals>.funcr   z%Cannot capture the non-constant value)r   r   assertRaisesr   TypingErrorassertInstr	exception)selfr+   Zpipelineraisesexpectedr$   r$   r)   0test_unsupported_make_function_return_inner_func"   s   zPTestErrorHandlingBeforeLowering.test_unsupported_make_function_return_inner_funcN)__name__
__module____qualname__r4   r$   r$   r$   r)   r"           r"   c                   @   r!   )TestUnsupportedReportingc                 C   sX   t dd }| tj}|  W d    n1 sw   Y  d}| |t|j d S )Nc                   S   s   t g d d S )N)r   r   r   )npZ
asanyarrayr$   r$   r$   r)   r+   7   s   zFTestUnsupportedReporting.test_unsupported_numpy_function.<locals>.funcz4Use of unsupported NumPy function 'numpy.asanyarray'r   r,   r   r-   r.   r/   r0   )r1   r+   r2   r3   r$   r$   r)   test_unsupported_numpy_function5   s   
z8TestUnsupportedReporting.test_unsupported_numpy_functionN)r5   r6   r7   r<   r$   r$   r$   r)   r9   3   r8   r9   c                   @   sX   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	dd Z
dd Zdd ZdS )TestMiscErrorHandlingc                 C   s*   t dd }tjdgtjd}|| d S )Nc                 S   s   d|  S N
   r$   r%   r$   r$   r)   fnI      zHTestMiscErrorHandling.test_use_of_exception_for_flow_control.<locals>.fng      ?)Zdtype)r   r:   arrayZfloat64)r1   r@   ar$   r$   r)   &test_use_of_exception_for_flow_controlD   s   
z<TestMiscErrorHandling.test_use_of_exception_for_flow_controlc              	   C   sd   dd }dd }||fD ]#}|  t}|  W d    n1 s!w   Y  | dt|j qd S )Nc                   S      t d)Ntest_string	Exceptionr$   r$   r$   r)   foo_commentedV   rA   z_TestMiscErrorHandling.test_commented_func_definition_is_not_a_definition.<locals>.foo_commentedc                   S   rE   )z> def docstring containing def might match function definition!rF   rG   r$   r$   r$   r)   foo_docstringZ   rA   z_TestMiscErrorHandling.test_commented_func_definition_is_not_a_definition.<locals>.foo_docstringrF   )r,   rH   r.   r/   r0   )r1   rI   rJ   r+   r2   r$   r$   r)   2test_commented_func_definition_is_not_a_definitionP   s   zHTestMiscErrorHandling.test_commented_func_definition_is_not_a_definitionc                 C   sx   G dd dt }t|ddd }| tj}|tddg W d    n1 s*w   Y  d}| |t|j d S )	Nc                   @   r!   )zFTestMiscErrorHandling.test_use_of_ir_unknown_loc.<locals>.TestPipelinec                 S   sn   d}t |}|td |td |td |td |td |td |td |	  |gS )	NZbad_DCE_pipelinezanalyzing bytecodezfix up argszprocessing IRZDCEznopython frontendznative loweringznopython mode backend)
r   Zadd_passr   r   r   r   r   r   r   finalize)r1   namepmr$   r$   r)   define_pipelinesg   s   zWTestMiscErrorHandling.test_use_of_ir_unknown_loc.<locals>.TestPipeline.define_pipelinesN)r5   r6   r7   rO   r$   r$   r$   r)   TestPipelinef       rP   )Zpipeline_classc                 S   s   dS )Nr   r$   rC   r$   r$   r)   fw      z;TestMiscErrorHandling.test_use_of_ir_unknown_loc.<locals>.fr   r   z File "unknown location", line 0:)	r   r   r,   r   r-   iterr.   r/   r0   )r1   rP   rS   r2   r3   r$   r$   r)   test_use_of_ir_unknown_locd   s   
z0TestMiscErrorHandling.test_use_of_ir_unknown_locc                 C   sZ   |  tj}|  W d    n1 sw   Y  ddg}|D ]}| |t|j qd S )NzThe use of az'in globals, is not supported as globals)r,   r   r-   r.   r/   r0   )r1   r+   r2   r3   exr$   r$   r)   check_write_to_globals   s   z,TestMiscErrorHandling.check_write_to_globalsc                 C      t dd }| | d S )Nc                   S      dt d< d S Nr?   r   )_global_listr$   r$   r$   r)   foo      zMTestMiscErrorHandling.test_handling_of_write_to_reflected_global.<locals>.foor   rX   r1   r]   r$   r$   r)   *test_handling_of_write_to_reflected_global      
z@TestMiscErrorHandling.test_handling_of_write_to_reflected_globalc                 C   rY   )Nc                   S   rZ   r[   )_global_dictr$   r$   r$   r)   r]      r^   zNTestMiscErrorHandling.test_handling_of_write_to_typed_dict_global.<locals>.foor_   r`   r$   r$   r)   +test_handling_of_write_to_typed_dict_global   rb   zATestMiscErrorHandling.test_handling_of_write_to_typed_dict_globalc                 C   s^   t dddd }| tj}|  W d    n1 sw   Y  d}| |t|j d S )NT)Zparallelc                  S   s   t dD ]} qd S r>   )Zprange)ir$   r$   r)   r]      s   zPTestMiscErrorHandling.test_handling_forgotten_numba_internal_import.<locals>.foozC'prange' looks like a Numba internal function, has it been importedr;   )r1   r]   r2   r3   r$   r$   r)   -test_handling_forgotten_numba_internal_import   s   
zCTestMiscErrorHandling.test_handling_forgotten_numba_internal_importc              	   C   sl   dd }d}t ddtfD ]&}| tj}||  W d    n1 s%w   Y  | |t|j qd S )Nc                   S   s   dd t dD  d S )Nc                 s   s    | ]}|V  qd S r#   r$   ).0r&   r$   r$   r)   	<genexpr>   s    zdTestMiscErrorHandling.test_handling_unsupported_generator_expression.<locals>.foo.<locals>.<genexpr>r?   )ranger$   r$   r$   r)   r]      s   zQTestMiscErrorHandling.test_handling_unsupported_generator_expression.<locals>.fooz-The use of yield in a closure is unsupported.T)Zforceobj)r   r   r,   r   ZUnsupportedErrorr.   r/   r0   )r1   r]   r3   decr2   r$   r$   r)   .test_handling_unsupported_generator_expression   s   zDTestMiscErrorHandling.test_handling_unsupported_generator_expressionc                 C   sX   t dd }d}| tj}|  W d    n1 sw   Y  | |t|j d S )Nc                   S   s   t S r#   rR   r$   r$   r$   r)   r]      rT   zCTestMiscErrorHandling.test_handling_undefined_variable.<locals>.fooz"NameError: name 'a' is not definedr;   )r1   r]   r3   r2   r$   r$   r)    test_handling_undefined_variable   s   
z6TestMiscErrorHandling.test_handling_undefined_variableN)r5   r6   r7   rD   rK   rV   rX   ra   rd   r   rf   rk   rl   r$   r$   r$   r)   r=   B   s    
r=   c                   @   s|   e Zd Zdd Zdd Zedd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zedd Zdd ZdS )TestErrorMessagesc                    s   ddd  t  fdd}t fdd}| tj}|  W d    n1 s,w   Y  t|j}| td 	 d	 | | | d S )
NZspecific_reasonc                   S      d S r#   r$   r$   r$   r$   r)   r]         z2TestErrorMessages.test_specific_error.<locals>.fooc                      s
   t  r#   )r   NumbaValueErrorr$   )given_reasonr$   r)   ol_foo      
z5TestErrorMessages.test_specific_error.<locals>.ol_fooc                      
      d S r#   r$   r$   r]   r$   r)   call_foo   rs   z7TestErrorMessages.test_specific_error.<locals>.call_foospecific_errorr   )
r	   r   r,   r   r-   r/   r0   r.   error_reasons
splitlinesr1   rr   rv   r2   excstrr$   )r]   rq   r)   test_specific_error   s   
z%TestErrorMessages.test_specific_errorc                    st   dd  t  dd }t fdd}| tj}|  W d    n1 s(w   Y  t|j}| d| d S )Nc                   S   rn   r#   r$   r$   r$   r$   r)   r]      ro   z2TestErrorMessages.test_no_match_error.<locals>.fooc                   S   rn   r#   r$   r$   r$   r$   r)   rr      rT   z5TestErrorMessages.test_no_match_error.<locals>.ol_fooc                      rt   r#   r$   r$   ru   r$   r)   rv      rs   z7TestErrorMessages.test_no_match_error.<locals>.call_foozNo match)r	   r   r,   r   r-   r/   r0   r.   rz   r$   ru   r)   test_no_match_error   s   

z%TestErrorMessages.test_no_match_errorc                 C   s   t dd }| tj}|  W d   n1 sw   Y  t|j}| td  d | t	j
ddd}d	| d
}| ||| dS )z Checks that the reported source location for an overload is the
        overload implementation source, not the actual function source from the
        target library.c                   S   s   t jd d S )Nchars)r:   ZlinalgZsvdr$   r$   r$   r)   r]      s   zDTestErrorMessages.test_error_function_source_is_correct.<locals>.fooNrw   r   numbar:   z	linalg.pyz'Overload in function 'svd_impl': File: :)r   r,   r   r-   r/   r0   r.   rx   ry   ospathjoinformat)r1   r]   r2   r{   expected_filer3   r$   r$   r)   %test_error_function_source_is_correct   s   

z7TestErrorMessages.test_error_function_source_is_correctc                 C   sd   t dd }| tj}|  W d    n1 sw   Y  t|j}| d| | d| d S )Nc                   S   s   dd S )NrC   r   r$   r$   r$   r$   r)   r]      rA   z<TestErrorMessages.test_concrete_template_source.<locals>.foozOverload of function 'add'	No match.r   r,   r   r-   r/   r0   r.   r1   r]   r2   r{   r$   r$   r)   test_concrete_template_source   s   

z/TestErrorMessages.test_concrete_template_sourcec                 C   X   t dd }| tj}|  W d    n1 sw   Y  t|j}| d| d S )Nc                   S   s   t dS Nr   )lenr$   r$   r$   r)   r]     rA   z<TestErrorMessages.test_abstract_template_source.<locals>.foozOverload of function 'len'r   r   r$   r$   r)   test_abstract_template_source
  s   

z/TestErrorMessages.test_abstract_template_sourcec                 C   r   )Nc                   S   s
   t d S r#   )r:   Zangler$   r$   r$   r)   r]     rs   z<TestErrorMessages.test_callable_template_source.<locals>.fooz6No implementation of function Function(<function angler   r   r$   r$   r)   test_callable_template_source  s   

z/TestErrorMessages.test_callable_template_sourcec                    s   dd  t  dd }t fdd}| tj}|  W d    n1 s(w   Y  t|j}| d| tj	
dd	d
}d| d}| ||| | d| d S )Nc                 S   rn   r#   r$   r%   r$   r$   r)   bar%  ro   zDTestErrorMessages.test_overloadfunction_template_source.<locals>.barc                 S   rn   r#   r$   r%   r$   r$   r)   ol_bar(  rT   zGTestErrorMessages.test_overloadfunction_template_source.<locals>.ol_barc                      s    dS r   r$   r$   r   r$   r)   r]   ,  rA   zDTestErrorMessages.test_overloadfunction_template_source.<locals>.fooz
<numerous>r   testsztest_errorhandling.pyz"Overload of function 'bar': File: r   r   )r	   r   r,   r   r-   r/   r0   ZassertNotInr   r   r   r.   r   )r1   r   r]   r2   r{   r   Zexpected_olr$   r   r)   %test_overloadfunction_template_source#  s    


z7TestErrorMessages.test_overloadfunction_template_sourcec                    s   d dt  fddtfdd}| tj}|  W d    n1 s)w   Y  t|j}| td 	 d | |  | | | | d	| d S )
Nzx must be literalzarray.ndim must be 1c                    sF   t |tjst |jdkrtt||}dd }||fS )Nr   c                 S   rn   r#   r$   )contextZbuilder	signatureargsr$   r$   r)   codegenL  ro   zSTestErrorMessages.test_intrinsic_template_source.<locals>.myintrin.<locals>.codegen)
isinstancer   ZIntegerLiteralr   ZRequireLiteralValuendimrp   Zintp)Z	typingctxr&   arrsigr   )given_reason1given_reason2r$   r)   myintrinB  s   


zBTestErrorMessages.test_intrinsic_template_source.<locals>.myintrinc                     s   t d}  d|  d S )N)r   r   r   )r:   Zzeros)r   )r   r$   r)   call_intrinP  s   
zETestErrorMessages.test_intrinsic_template_source.<locals>.call_intrinrw   r   zIntrinsic in function)
r
   r   r,   r   r-   r/   r0   r.   rx   ry   )r1   r   r2   r{   r$   )r   r   r   r)   test_intrinsic_template_source=  s   
z0TestErrorMessages.test_intrinsic_template_sourcec                 C   l   t tjddd }tdd }| tj}|  W d    n1 s$w   Y  t|j}| 	d| d S )N
isnonsensec                 S   rn   r#   r$   r1   r$   r$   r)   ol_unicode_isnonsensea  rT   zTTestErrorMessages.test_overloadmethod_template_source.<locals>.ol_unicode_isnonsensec                   S   s   d   d S Nabcr   r$   r$   r$   r)   r]   e  r^   zBTestErrorMessages.test_overloadmethod_template_source.<locals>.foo,Overload of function 'ol_unicode_isnonsense')
r   r   UnicodeTyper   r,   r   r-   r/   r0   r.   r1   r   r]   r2   r{   r$   r$   r)   #test_overloadmethod_template_source^     



z5TestErrorMessages.test_overloadmethod_template_sourcec                 C   r   )Nr   c                 S   rn   r#   r$   r   r$   r$   r)   r   r  rT   zWTestErrorMessages.test_overloadattribute_template_source.<locals>.ol_unicode_isnonsensec                   S   s
   dj  d S r   r   r$   r$   r$   r)   r]   v  rs   zETestErrorMessages.test_overloadattribute_template_source.<locals>.foor   )
r   r   r   r   r,   r   r-   r/   r0   r.   r   r$   r$   r)   &test_overloadattribute_template_sourceo  r   z8TestErrorMessages.test_overloadattribute_template_sourcec                    sh   ddl m  t fdd}| tj}|  W d    n1 s"w   Y  t|j}| d| d S )Nr   c_cosc                          d d S NrC   r$   r$   r   r$   r)   r]     r^   zMTestErrorMessages.test_external_function_pointer_template_source.<locals>.foo.Type Restricted Function in function 'unknown')	Znumba.tests.ctypes_usecasesr   r   r,   r   r-   r/   r0   r.   r   r$   r   r)   .test_external_function_pointer_template_source  s   
z@TestErrorMessages.test_external_function_pointer_template_sourcec                    sv   ddl m} |  |j t fdd}| tj}|  W d    n1 s)w   Y  t|j	}| 
d| d S )Nr   )cffi_usecasesc                      r   r   r$   r$   r+   r$   r)   r]     r^   zITestErrorMessages.test_cffi_function_pointer_template_source.<locals>.foor   )Znumba.testsr   initZcffi_cosr   r,   r   r-   r/   r0   r.   )r1   modr]   r2   r{   r$   r   r)   *test_cffi_function_pointer_template_source  s   
z<TestErrorMessages.test_cffi_function_pointer_template_sourcec                 C   s   t jG dd dtj}G dd dt j}t ||ddg | tj}|ddd	 W d    n1 s5w   Y  t	|j
}| d
| d S )Nc                   @   s   e Zd ZdS )z;TestErrorMessages.test_missing_source.<locals>.ParticleTypeN)r5   r6   r7   r$   r$   r$   r)   ParticleType  s    r   c                   @   r!   )z7TestErrorMessages.test_missing_source.<locals>.Particlec                 S   s   t j| |S r#   )r   StructRefProxy__new__)clsposmassr$   r$   r)   r        z?TestErrorMessages.test_missing_source.<locals>.Particle.__new__N)r5   r6   r7   r   r$   r$   r$   r)   Particle  rQ   r   r   r   r   r   )r   r   z#missing a required argument: 'mass')r   registerr   Z	StructRefr   Zdefine_proxyr,   r   r-   r/   r0   r.   )r1   r   r   r2   r{   r$   r$   r)   test_missing_source  s   
z%TestErrorMessages.test_missing_sourceN)r5   r6   r7   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   r$   r$   r)   rm      s     
!
rm   c                   @   r!   )"TestDeveloperSpecificErrorMessagesc              	   C   s   dd }t dd$ | tj}td| W d    n1 s!w   Y  W d    n1 s0w   Y  t|j}| d| d S )Nc                 S   s   |  d d S )N)maxr%   r$   r$   r)   r]     r   zPTestDeveloperSpecificErrorMessages.test_bound_function_error_string.<locals>.fooZDEVELOPER_MODEr   zvoid(int64[:,:])ztoo many positional arguments)r   r,   r   r-   r   r/   r0   r.   r   r$   r$   r)    test_bound_function_error_string  s   
zCTestDeveloperSpecificErrorMessages.test_bound_function_error_stringN)r5   r6   r7   r   r$   r$   r$   r)   r     r8   r   c                   @   s`   e Zd ZdZdd Zejddiddd Zejddidd	d
 Zejddiddd Z	dS )TestCapturedErrorHandlingzjChecks that the way errors are captured changes depending on the env
    var "NUMBA_CAPTURED_ERRORS".
    c                    s   dd  t  dd }t ] tdtj dtfdtjffD ]C\}}td|2 | 	|}t
d	 fd
d}W d    n1 sEw   Y  d}| |t|j W d    n1 s_w   Y  q!W d    d S 1 spw   Y  d S )Nc                 S   rn   r#   r$   r%   r$   r$   r)   r     ro   z=TestCapturedErrorHandling.test_error_in_overload.<locals>.barc                 S   s   | j  dd }|S )Nc                 S   rn   r#   r$   r%   r$   r$   r)   impl  ro   zNTestCapturedErrorHandling.test_error_in_overload.<locals>.ol_bar.<locals>.impl)Zsome_invalid_attr)r&   r   r$   r$   r)   r     s   z@TestCapturedErrorHandling.test_error_in_overload.<locals>.ol_barignore	new_style	old_styleZCAPTURED_ERRORSvoid(int64)c                        |  d S r#   r$   r%   r   r$   r)   r]     r^   z=TestCapturedErrorHandling.test_error_in_overload.<locals>.fooz+object has no attribute 'some_invalid_attr')r	   warningscatch_warningssimplefilterr   NumbaPendingDeprecationWarningAttributeErrorr-   r   r,   r   r.   r/   r0   )r1   r   styleZ	err_classr2   r]   r3   r$   r   r)   test_error_in_overload  s*   

"z0TestCapturedErrorHandling.test_error_in_overloadZNUMBA_CAPTURED_ERRORSr   )envvarsc              	      s   t dtj dd  t dd }| tj5}| tj td fdd}W d    n1 s5w   Y  | 	d	t
|j d
 j W d    d S 1 sQw   Y  d S )Nalwaysc                 S   rn   r#   r$   r%   r$   r$   r)   r     ro   zATestCapturedErrorHandling.test_old_style_deprecation.<locals>.barc                 S   rE   NzInvalid attributer   r%   r$   r$   r)   r     rA   zDTestCapturedErrorHandling.test_old_style_deprecation.<locals>.ol_barr   c                    r   r#   r$   r%   r   r$   r)   r]     r^   zATestCapturedErrorHandling.test_old_style_deprecation.<locals>.foozMCode using Numba extension API maybe depending on 'old_style' error-capturingr   )r   r   r   r   r	   ZassertWarnsr,   r-   r   r.   r/   messager1   r   Zwarnsr]   r$   r   r)   test_old_style_deprecation  s   
"z4TestCapturedErrorHandling.test_old_style_deprecationc              	      s   t dtj dd  t dd }t jdd3}| tj td fd	d
}W d    n1 s5w   Y  | j	t
|ddd W d    d S 1 sOw   Y  d S )Nr   c                 S   rn   r#   r$   r%   r$   r$   r)   r     ro   zDTestCapturedErrorHandling.test_old_style_no_deprecation.<locals>.barc                 S   s
   t dr   )r   r-   r%   r$   r$   r)   r     rs   zGTestCapturedErrorHandling.test_old_style_no_deprecation.<locals>.ol_barTrecordr   c                    r   r#   r$   r%   r   r$   r)   r]     r^   zDTestCapturedErrorHandling.test_old_style_no_deprecation.<locals>.foor    There should not be any warningsmsg)r   r   r   r   r	   r   r,   r-   r   assertEqualr   r   r$   r   r)   test_old_style_no_deprecation  s   
"z7TestCapturedErrorHandling.test_old_style_no_deprecationr   c              	      s   t dtj dd  t dd }t jdd2}| t td fd	d
}W d    n1 s4w   Y  | j	t
|ddd W d    d S 1 sNw   Y  d S )Nr   c                 S   rn   r#   r$   r%   r$   r$   r)   r     ro   zATestCapturedErrorHandling.test_new_style_no_warnings.<locals>.barc                 S   rE   r   r   r%   r$   r$   r)   r     rA   zDTestCapturedErrorHandling.test_new_style_no_warnings.<locals>.ol_barTr   r   c                    r   r#   r$   r%   r   r$   r)   r]   #  r^   zATestCapturedErrorHandling.test_new_style_no_warnings.<locals>.foor   r   r   )r   r   r   r   r	   r   r,   r   r   r   r   r   r$   r   r)   test_new_style_no_warnings  s   
"z4TestCapturedErrorHandling.test_new_style_no_warningsN)
r5   r6   r7   __doc__r   r   Zrun_test_in_subprocessr   r   r   r$   r$   r$   r)   r     s    

r   __main__)8r   numpyr:   r   r   r   r   r   r   r   r   Z
numba.corer   Znumba.experimentalr   Znumba.extendingr	   r
   r   r   Znumba.core.compilerr   Znumba.core.untyped_passesr   r   r   Znumba.core.typed_passesr   r   r   r   Znumba.core.compiler_machineryr   Znumba.core.types.functionsr   rx   Znumba.tests.supportr   r   r   r   r   r   Zunittestr\   Dictemptyrc   r"   r9   r=   rm   r   r   r5   mainr$   r$   r$   r)   <module>   s6     z vk