U
    iâËdÊí  ã                   @   sª  d dl mZ d dlZd dlmZmZmZmZ d dl	m
Z
mZmZmZ d dl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 m!Z!m"Z"m#Z#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0 dZ1G dd„ deeƒZ2eddd�G dd„ deƒƒZ3G dd„ deeƒZ4G dd„ deeƒZ5G dd„ deeƒZ6G dd„ deƒZ7dd„ Z8G dd „ d eƒZ9G d!d"„ d"eƒZ:e;d#k�r¦e <¡  dS )$é    )Ú
namedtupleN)ÚTestCaseÚMemoryLeakMixinÚskip_parfors_unsupportedÚcaptured_stdout)ÚnjitÚtypedÚliteral_unrollÚprange)ÚtypesÚerrorsÚir)Úunittest)Úoverload)ÚPassManagerÚregister_passÚFunctionPassÚAnalysisPass©ÚCompilerBase)Ú	FixupArgsÚTranslateByteCodeÚIRProcessingÚInlineClosureLikesÚSimplifyCFGÚIterLoopCanonicalizationÚLiteralUnrollÚ
PreserveIR)ÚNopythonTypeInferenceÚIRLegalizationÚNoPythonBackendÚPartialTypeInferenceÚNativeLowering)Úcompute_cfg_from_blocksÚflatten_labels)Ú_header_lead©é
   é   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestLiteralTupleInterpretationc                 C   sP   |j |jd  }|jj| }|  t|tjƒ¡ |D ]}|  t|tjƒd¡ q2d S )Nr   únon literal)	Ú	overloadsÚ
signaturesÚfndescÚtypemapÚ
assertTrueÚ
isinstancer   ÚTupleÚLiteral)ÚselfÚfuncÚvarÚcresÚtyZsubty© r8   ú^/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_mixed_tuple_unroller.pyÚcheck   s
    z$TestLiteralTupleInterpretation.checkc                 C   s.   t dd„ ƒ}|  |ƒ | ¡ ¡ |  |d¡ d S )Nc                  S   s   d} | d S )N©é   é   é   r<   r8   ©Úxr8   r8   r9   Úfoo$   s    zDTestLiteralTupleInterpretation.test_homogeneous_literal.<locals>.foor@   ©r   ÚassertEqualÚpy_funcr:   ©r3   rA   r8   r8   r9   Útest_homogeneous_literal#   s    
z7TestLiteralTupleInterpretation.test_homogeneous_literalc                 C   s.   t dd„ ƒ}|  |ƒ | ¡ ¡ |  |d¡ d S )Nc                  S   s   d} | d S )N)r<   r=   r>   Úar>   r8   r?   r8   r8   r9   rA   -   s    zFTestLiteralTupleInterpretation.test_heterogeneous_literal.<locals>.foor@   rB   rE   r8   r8   r9   Útest_heterogeneous_literal,   s    
z9TestLiteralTupleInterpretation.test_heterogeneous_literalc              	   C   sV   t dd„ ƒ}|  |ƒ | ¡ ¡ |  t¡�}|  |d¡ W 5 Q R X |  dt|jƒ¡ d S )Nc                  S   s   d} | d S )N)r<   r=   r>   rG   ù              ð?é   r8   r?   r8   r8   r9   rA   6   s    z<TestLiteralTupleInterpretation.test_non_literal.<locals>.foor@   r*   )	r   rC   rD   ÚassertRaisesÚAssertionErrorr:   ÚassertInÚstrÚ	exception)r3   rA   Úer8   r8   r9   Útest_non_literal5   s    
z/TestLiteralTupleInterpretation.test_non_literalN)Ú__name__Ú
__module__Ú__qualname__r:   rF   rH   rQ   r8   r8   r8   r9   r)      s   		r)   F©Zmutates_CFGZanalysis_onlyc                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚResetTypeInfoZreset_the_type_informationc                 C   s   t  | ¡ d S ©N©r   Ú__init__©r3   r8   r8   r9   rY   F   s    zResetTypeInfo.__init__c                 C   s   d |_ d |_d |_dS )NT)r.   Úreturn_typeÚ	calltypes)r3   Ústater8   r8   r9   Úrun_passI   s    zResetTypeInfo.run_passN)rR   rS   rT   Ú_namerY   r^   r8   r8   r8   r9   rV   B   s   rV   c                   @   st   e Zd Zddd„ZedƒZedƒZeddƒZdd„ Zdd„ Ze	 
d	¡d
d„ ƒZdd„ Ze	 
d	¡dd„ ƒZdd„ ZdS )ÚTestLoopCanonicalisationFc                    s   G ‡ ‡fdd„dt ƒ}|S )Nc                       s   e Zd Z‡ ‡fdd„ZdS )z:TestLoopCanonicalisation.get_pipeline.<locals>.NewCompilerc                    s²   t dƒ}| td¡ | td¡ | td¡ ˆr<| td¡ ˆ rL| td¡ | td¡ ˆrh| td¡ | t	d	¡ | t
d
¡ | td¡ | td¡ | td¡ | ¡  |gS )NZcustom_pipelineúanalyzing bytecodeúprocessing IRz(inline calls to locally defined closureszdo partial typingzCanonicalise loopszSimplify the CFGzresets the type info stateúnopython frontendzensure IR is legalzsave IR for later inspectionúnative loweringúnopython mode backend)r   Úadd_passr   r   r   r!   r   r   rV   r   r   r   r"   r    Úfinalize)r3   Úpm©Úuse_canonicaliserÚuse_partial_typingr8   r9   Údefine_pipelinesU   s(    ÿzKTestLoopCanonicalisation.get_pipeline.<locals>.NewCompiler.define_pipelinesN)rR   rS   rT   rl   r8   ri   r8   r9   ÚNewCompilerS   s   rm   r   )rj   rk   rm   r8   ri   r9   Úget_pipelineR   s    $z%TestLoopCanonicalisation.get_pipelineTc                    sö   ‡ fdd„}|ˆ j ƒ\}}|ˆ jƒ\}}‡ fdd„}|||ƒ ˆ  t|jƒd t|jƒ¡ dd„ }||dƒ}ˆ  t|ƒd	¡ ||dƒ}	ˆ  t|	ƒd	¡ ||d
ƒ}
ˆ  t|
ƒd	¡ ˆ  |d jj|
d jj¡ |j|	d  jd }ˆ  t	|t
jƒ¡ dS )ú- This heavily checks a simple loop transform c                    sP   t | d�dd„ ƒ}d}ˆ  ||ƒ| |¡¡ |j|jd  }|jd }||jfS )N©Zpipeline_classc                 S   s   d}| D ]}||7 }q|S ©Nr   r8   )ÚtupÚaccÚir8   r8   r9   rA   ‚   s    
zQTestLoopCanonicalisation.test_simple_loop_in_depth.<locals>.get_info.<locals>.foor;   r   Úpreserved_ir©r   rC   rD   r+   r,   Úmetadatar-   ©ÚpipelinerA   r@   r6   Úfunc_irrZ   r8   r9   Úget_info�   s    

zDTestLoopCanonicalisation.test_simple_loop_in_depth.<locals>.get_infoc                    s,   t t| jƒƒ}t t|jƒƒ}ˆ  ||¡ d S rW   ©r#   r$   ÚblocksrC   ©rG   ÚbZa_cfgZb_cfgrZ   r8   r9   Úcompare_cfg•   s    zGTestLoopCanonicalisation.test_simple_loop_in_depth.<locals>.compare_cfgr>   c                    s   ‡ fdd„| j  ¡ D ƒS )Nc                    s&   g | ]}t |tjƒr|jˆ kr|‘qS r8   ©r0   r   ÚExprÚop©Ú.0r@   ©rƒ   r8   r9   Ú
<listcomp>¤   s     
ÿzYTestLoopCanonicalisation.test_simple_loop_in_depth.<locals>.find_getX.<locals>.<listcomp>©r\   Úkeys©Úfdrƒ   r8   r†   r9   Ú	find_getX£   s    zETestLoopCanonicalisation.test_simple_loop_in_depth.<locals>.find_getXÚgetiterr<   Úgetitemr   N©ÚLoopIgnoringCompilerÚLoopCanonicalisingCompilerrC   Úlenr\   ÚvalueÚnameÚargsr/   r0   r   Ú	RangeType©r3   r{   Úignore_loops_irÚignore_loops_fndescÚcanonicalise_loops_irÚcanonicalise_loops_fndescr€   rŒ   Úil_getitersÚcl_getitersÚcl_getitemsÚ
range_instr8   rZ   r9   Útest_simple_loop_in_depth~   s(    ÿÿ
ÿ


z2TestLoopCanonicalisation.test_simple_loop_in_depthc                    sö   ‡ fdd„}|ˆ j ƒ\}}|ˆ jƒ\}}‡ fdd„}|||ƒ ˆ  t|jƒd t|jƒ¡ dd„ }||dƒ}ˆ  t|ƒd	¡ ||dƒ}	ˆ  t|	ƒd	¡ ||d
ƒ}
ˆ  t|
ƒd	¡ ˆ  |d jj|
d jj¡ |j|	d  jd }ˆ  t	|t
jƒ¡ dS )z† This checks the transform, when there's no typemap, will happily
        transform a loop on something that's not tuple-like
        c                    sH   t | d�dd„ ƒ}ˆ  |ƒ | ¡ ¡ |j|jd  }|jd }||jfS )Nrp   c                  S   s   d} dD ]}| |7 } q| S ©Nr   r;   r8   ©rs   rt   r8   r8   r9   rA   ½   s    
zLTestLoopCanonicalisation.test_transform_scope.<locals>.get_info.<locals>.foor   ru   rv   )ry   rA   r6   rz   rZ   r8   r9   r{   ¼   s    

z?TestLoopCanonicalisation.test_transform_scope.<locals>.get_infoc                    s,   t t| jƒƒ}t t|jƒƒ}ˆ  ||¡ d S rW   r|   r~   rZ   r8   r9   r€   Ï   s    zBTestLoopCanonicalisation.test_transform_scope.<locals>.compare_cfgr>   c                    s   ‡ fdd„| j  ¡ D ƒS )Nc                    s&   g | ]}t |tjƒr|jˆ kr|‘qS r8   r�   r„   r†   r8   r9   r‡   Þ   s     
ÿzTTestLoopCanonicalisation.test_transform_scope.<locals>.find_getX.<locals>.<listcomp>rˆ   rŠ   r8   r†   r9   rŒ   Ý   s    z@TestLoopCanonicalisation.test_transform_scope.<locals>.find_getXr�   r<   rŽ   r   Nr�   r—   r8   rZ   r9   Útest_transform_scope¸   s(    ÿÿ
ÿ


z-TestLoopCanonicalisation.test_transform_scopez-Waiting for pass to be enabled for all tuplesc                    sü   ‡ fdd„}|ˆ j ƒ\}}|ˆ jƒ\}}‡ fdd„}|||ƒ ˆ  t|jƒd t|jƒ¡ dd„ }||dƒ}ˆ  t|ƒd¡ ||dƒ}	ˆ  t|	ƒd¡ ||d	ƒ}
ˆ  t|
ƒd
¡ ˆ  |d
 jj|
d jj¡ |	D ]&}|j| jd }ˆ  t	|t
jƒ¡ qÐdS )zT This heavily checks a typed transformation only impacts tuple
        induced loopsc                    sP   t | d�dd„ ƒ}d}ˆ  ||ƒ| |¡¡ |j|jd  }|jd }||jfS )Nrp   c                 S   s6   d}t dƒD ]$}| D ]}t dƒD ]}|d7 }q qq|S ©Nr   rJ   r>   r<   ©Úrange©rr   rs   rt   ÚyÚjr8   r8   r9   rA   ø   s    zYTestLoopCanonicalisation.test_influence_of_typed_transform.<locals>.get_info.<locals>.foor;   r   rz   rv   rx   rZ   r8   r9   r{   ÷   s    

zLTestLoopCanonicalisation.test_influence_of_typed_transform.<locals>.get_infoc                    s,   t t| jƒƒ}t t|jƒƒ}ˆ  ||¡ d S rW   r|   r~   rZ   r8   r9   r€     s    zOTestLoopCanonicalisation.test_influence_of_typed_transform.<locals>.compare_cfgr>   c                    s   ‡ fdd„| j  ¡ D ƒS )Nc                    s&   g | ]}t |tjƒr|jˆ kr|‘qS r8   r�   r„   r†   r8   r9   r‡     s     
ÿzaTestLoopCanonicalisation.test_influence_of_typed_transform.<locals>.find_getX.<locals>.<listcomp>rˆ   rŠ   r8   r†   r9   rŒ     s    zMTestLoopCanonicalisation.test_influence_of_typed_transform.<locals>.find_getXr�   rŽ   r<   r   N©r�   ÚTypedLoopCanonicalisingCompilerrC   r’   r\   r“   r”   r•   r/   r0   r   r–   ©r3   r{   r˜   r™   rš   r›   r€   rŒ   rœ   r�   rž   r@   rŸ   r8   rZ   r9   Ú!test_influence_of_typed_transformò   s*    ÿÿ
ÿ


z:TestLoopCanonicalisation.test_influence_of_typed_transformc                    sü   ‡ fdd„}|ˆ j ƒ\}}|ˆ jƒ\}}‡ fdd„}|||ƒ ˆ  t|jƒd t|jƒ¡ dd„ }||dƒ}ˆ  t|ƒd¡ ||dƒ}	ˆ  t|	ƒd¡ ||d	ƒ}
ˆ  t|
ƒd
¡ ˆ  |d
 jj|
d jj¡ |	D ]&}|j| jd }ˆ  t	|t
jƒ¡ qÐdS )za This heavily checks a typed transformation only impacts loops with
        literal_unroll markerc                    sP   t | d�dd„ ƒ}d}ˆ  ||ƒ| |¡¡ |j|jd  }|jd }||jfS )Nrp   c                 S   s:   d}t dƒD ](}t| ƒD ]}t dƒD ]}|d7 }q$qq|S r¤   )r¦   r	   r§   r8   r8   r9   rA   6  s    zhTestLoopCanonicalisation.test_influence_of_typed_transform_literal_unroll.<locals>.get_info.<locals>.foor;   r   ru   rv   rx   rZ   r8   r9   r{   5  s    

z[TestLoopCanonicalisation.test_influence_of_typed_transform_literal_unroll.<locals>.get_infoc                    s,   t t| jƒƒ}t t|jƒƒ}ˆ  ||¡ d S rW   r|   r~   rZ   r8   r9   r€   K  s    z^TestLoopCanonicalisation.test_influence_of_typed_transform_literal_unroll.<locals>.compare_cfgr>   c                    s   ‡ fdd„| j  ¡ D ƒS )Nc                    s&   g | ]}t |tjƒr|jˆ kr|‘qS r8   r�   r„   r†   r8   r9   r‡   Z  s     
ÿzpTestLoopCanonicalisation.test_influence_of_typed_transform_literal_unroll.<locals>.find_getX.<locals>.<listcomp>rˆ   rŠ   r8   r†   r9   rŒ   Y  s    z\TestLoopCanonicalisation.test_influence_of_typed_transform_literal_unroll.<locals>.find_getXr�   rŽ   r<   r   Nrª   r¬   r8   rZ   r9   Ú0test_influence_of_typed_transform_literal_unroll1  s*    ÿÿ
ÿ


zITestLoopCanonicalisation.test_influence_of_typed_transform_literal_unrollc                    s^   ‡ fdd„}|ˆ j ƒ\}}|ˆ jƒ\}}‡ fdd„}|||ƒ ˆ  t|jƒd t|jƒ¡ dS )ro   c                    sP   t | d�dd„ ƒ}d}ˆ  ||ƒ| |¡¡ |j|jd  }|jd }||jfS )Nrp   c                 S   s^   d}| D ]:}||7 }| d D ]}|d| 7 }|dkr qq|d8 }q| D ]}||d 8 }qH|S )Nr   )rJ   é   é   r<   r¯   r=   r8   )rr   rs   rt   r©   r8   r8   r9   rA   t  s    
zJTestLoopCanonicalisation.test_lots_of_loops.<locals>.get_info.<locals>.foor;   r   ru   rv   rx   rZ   r8   r9   r{   s  s    

z=TestLoopCanonicalisation.test_lots_of_loops.<locals>.get_infoc                    s,   t t| jƒƒ}t t|jƒƒ}ˆ  ||¡ d S rW   r|   r~   rZ   r8   r9   r€   �  s    z@TestLoopCanonicalisation.test_lots_of_loops.<locals>.compare_cfgé	   N©r�   r‘   rC   r’   r\   ©r3   r{   r˜   r™   rš   r›   r€   r8   rZ   r9   Útest_lots_of_loopso  s    ÿÿ
ÿz+TestLoopCanonicalisation.test_lots_of_loopsc                    s^   ‡ fdd„}|ˆ j ƒ\}}|ˆ jƒ\}}‡ fdd„}|||ƒ ˆ  t|jƒd t|jƒ¡ dS )z( Checks a loop appearing from a closure c                    sP   t | d�dd„ ƒ}d}ˆ  ||ƒ| |¡¡ |j|jd  }|jd }||jfS )Nrp   c                 S   s.   dd„ }d}| D ]}||7 }|||ƒ7 }q|S )Nc                 S   s   d}t | ƒD ]}|d7 }q|S ©Nr   r<   r¥   )Únrs   rt   r8   r8   r9   Úbar¤  s    
zWTestLoopCanonicalisation.test_inlined_loops.<locals>.get_info.<locals>.foo.<locals>.barr   r8   )rr   r·   rs   rt   r8   r8   r9   rA   ¢  s    zJTestLoopCanonicalisation.test_inlined_loops.<locals>.get_info.<locals>.foor;   r   ru   rv   rx   rZ   r8   r9   r{   ¡  s    

z=TestLoopCanonicalisation.test_inlined_loops.<locals>.get_infoc                    s,   t t| jƒƒ}t t|jƒƒ}ˆ  ||¡ d S rW   r|   r~   rZ   r8   r9   r€   ½  s    z@TestLoopCanonicalisation.test_inlined_loops.<locals>.compare_cfgr¯   Nr²   r³   r8   rZ   r9   Útest_inlined_loopsž  s    ÿÿ
ÿz+TestLoopCanonicalisation.test_inlined_loopsN)F)rR   rS   rT   rn   r�   r‘   r«   r    r£   r   Úskipr­   r®   r´   r¸   r8   r8   r8   r9   r`   P   s   
(
::
>>
.r`   c                   @   s:  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Ze 	d¡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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d0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Ze d8d9„ ƒZ!e d:d;„ ƒZ"e d<d=„ ƒZ#d>d?„ Z$d@dA„ Z%dBdC„ Z&dDdE„ Z'dFdG„ Z(dHS )IÚTestMixedTupleUnrollc                 C   s2   t dd„ ƒ}d}|}|  |d|ƒ| d|¡¡ d S )Nc                 S   sV   dddd|d| f}d}t tt|ƒƒƒD ](}||| 7 }|jdk rL|d8 }q( qRq(|S ©	Né   çffffff)@ù              @rJ   r=   r   é   r<   ©r¦   r’   r	   Úreal)ÚidxÚzrG   rs   rt   r8   r8   r9   rA   Ñ  s    

z)TestMixedTupleUnroll.test_01.<locals>.foor±   r=   ©r   rC   rD   ©r3   rA   ÚfÚkr8   r8   r9   Útest_01Ï  s
    
zTestMixedTupleUnroll.test_01c                 C   s2   t dd„ ƒ}d}|}|  |d|ƒ| d|¡¡ d S )Nc                 S   sJ   dddd|d| f}d}t |ƒD ]$}||7 }|jdk r@|d8 }q  qFq |S r»   ©r	   rÁ   )rÂ   rÃ   r@   rs   rG   r8   r8   r9   rA   å  s    

z)TestMixedTupleUnroll.test_02.<locals>.foor±   r=   rÄ   rÅ   r8   r8   r9   Útest_02â  s
    
zTestMixedTupleUnroll.test_02c                 C   s2   t dd„ ƒ}d}|}|  |d|ƒ| d|¡¡ d S )Nc                 S   sr   dddd|d| f}d|d| f}d}t |ƒD ]>}||7 }|jdk rN|d	8 }q.t |ƒD ]}||d
k7 }qV qnq.|S )Nr¼   r½   r¾   rJ   r=   rA   r   r¿   r<   FrÉ   )rÂ   rÃ   r@   r¨   rs   rG   Útr8   r8   r9   rA   ø  s    

z)TestMixedTupleUnroll.test_03.<locals>.foor±   r=   rÄ   rÅ   r8   r8   r9   Útest_03ö  s
    
zTestMixedTupleUnroll.test_03c                 C   sR   t dd„ ƒ}d}t |f¡t ||f¡t |||f¡f}|  ||ƒ| |¡¡ d S )Nc                 S   s"   d}t | ƒD ]}|| ¡ 7 }q|S rq   ©r	   Úsum©rr   rs   rG   r8   r8   r9   rA     s    z)TestMixedTupleUnroll.test_04.<locals>.foor'   ©r   ÚnpÚonesrC   rD   ©r3   rA   r¶   rr   r8   r8   r9   Útest_04  s
    
(zTestMixedTupleUnroll.test_04c                 C   s|   t dd„ ƒ}d}d}t |f¡t ||f¡t |||f¡t ||||f¡t |||||f¡f}|  |||ƒ| ||¡¡ d S )Nc                 S   s    d}t | ƒD ]Ž}|dkr*||d  ¡ 7 }q|dkrD||d  ¡ 7 }q|dkr^||d  ¡ 7 }q|dkrx||d  ¡ 7 }q|d	kr’||d
  ¡ 7 }qtdƒ‚q|S )Nr   rG   r   r<   Úcr=   r¼   r>   r¾   rJ   ZUnreachable)r	   rÎ   ÚRuntimeError©Útup1Útup2rs   rG   r8   r8   r9   rA     s    
z)TestMixedTupleUnroll.test_05.<locals>.foor'   )rG   r   rÕ   r¼   r¾   rÐ   )r3   rA   r¶   rØ   rÙ   r8   r8   r9   Útest_05  s    
$ ÿzTestMixedTupleUnroll.test_05zneeds more clever branch prunec                 C   s*   t dd„ ƒ}d}|  ||ƒ| |¡¡ d S )Nc                 S   s@   d}t j tj¡}t| ƒD ] }|dkr2| |¡ q||7 }q|S )Nr   rG   )r   ÚListZ
empty_listr   Zunicode_typer	   Úappend)rr   rs   Zstr_bufrG   r8   r8   r9   rA   7  s    
z)TestMixedTupleUnroll.test_06.<locals>.foo)rG   r¼   rÄ   )r3   rA   rr   r8   r8   r9   Útest_063  s    

zTestMixedTupleUnroll.test_06c              
   C   sV   t dd„ ƒ}d}t |f¡t ||f¡dddddd	d
dhf}|  ||ƒ| |¡¡ d S )Nc                 S   s"   d}t | ƒD ]}|t|ƒ7 }q|S rq   ©r	   r’   rÏ   r8   r8   r9   rA   G  s    z)TestMixedTupleUnroll.test_07.<locals>.foor'   Ú
ABCDEFGHJIr;   ©r<   rA   r=   r·   r>   rJ   r¯   r°   é   rÐ   rÓ   r8   r8   r9   Útest_07E  s    
 ÿzTestMixedTupleUnroll.test_07c                 C   sL   t dd„ ƒ}dd„ }d}|dƒ|dƒ|dƒf}|  |||ƒ| ||¡¡ d S )	Nc                 S   s\   d}t | ƒD ]J}|dkr(||d ƒ 7 }q|dkr@||d ƒ 7 }q|dkr||d ƒ 7 }q|S )Nr   rG   r   r<   rÕ   r=   ©r	   r×   r8   r8   r9   rA   V  s    z)TestMixedTupleUnroll.test_08.<locals>.fooc                    s   ‡ fdd„}t |ƒS )Nc                      s   ˆ S rW   r8   r8   r?   r8   r9   Úimplc  s    z7TestMixedTupleUnroll.test_08.<locals>.gen.<locals>.impl©r   )r@   rä   r8   r?   r9   Úgenb  s    z)TestMixedTupleUnroll.test_08.<locals>.gen)rG   r   rÕ   r¼   r¾   )rÆ   r<   r=   r>   rÄ   )r3   rA   ræ   rØ   rÙ   r8   r8   r9   Útest_08S  s    
zTestMixedTupleUnroll.test_08c              	   C   sp   t dd„ ƒ}t dd„ ƒ}t dd„ ƒ}t dd„ ƒ}d	}d
}|  tj¡�}|||ƒ W 5 Q R X |  tt|jƒ¡ d S )Nc                 S   sf   d}d}t | ƒD ]L}|dkr*||| 7 }n*|dkr@||| 7 }n|dkrT||| 7 }|d7 }q||fS )Nr   rG   r   rÕ   r<   rã   )rØ   rÙ   rs   rÂ   rG   r8   r8   r9   rA   n  s    
z)TestMixedTupleUnroll.test_09.<locals>.fooc                   S   s   dS ©Nr<   r8   r8   r8   r8   r9   Úfunc1|  s    z+TestMixedTupleUnroll.test_09.<locals>.func1c                   S   s   dS ©Nr=   r8   r8   r8   r8   r9   Úfunc2€  s    z+TestMixedTupleUnroll.test_09.<locals>.func2c                   S   s   dS ©Nr>   r8   r8   r8   r8   r9   Úfunc3„  s    z+TestMixedTupleUnroll.test_09.<locals>.func3)rG   r   rÕ   )rI   r<   r=   ©r   rK   r   ÚTypingErrorrM   r%   rN   rO   )r3   rA   ré   rë   rí   rØ   rÙ   Úraisesr8   r8   r9   Útest_09k  s    



zTestMixedTupleUnroll.test_09c                    sB   dd„ ‰ t ˆ dd�dd„ ƒ}t‡ fdd„ƒ}|  |ƒ | ¡ ¡ d S )	Nc                 S   s8   | dkrdS | dkrdS | dkr$dS | dkr4d|  S d S ©	NÚappler<   Úoranger=   Úbananar>   ì   +# é«¡\r8   ©r“   r8   r8   r9   Údt“  s    z(TestMixedTupleUnroll.test_10.<locals>.dtÚalways©Úinlinec                    sx   t | tjƒrJ| j‰ ˆ dkr$dd„ }n"ˆ dkr6dd„ }nˆ dkrFdd„ }|S t | tjƒrt| j‰ ˆ dkrt‡ fd	d„}|S d S )
Nró   c                 S   s   dS rè   r8   ©Úlir8   r8   r9   rä   ¢  s    z9TestMixedTupleUnroll.test_10.<locals>.ol_dt.<locals>.implrô   c                 S   s   dS rê   r8   rý   r8   r8   r9   rä   ¥  s    rõ   c                 S   s   dS rì   r8   rý   r8   r8   r9   rä   ¨  s    rö   c                    s   dˆ  S ©Nr÷   r8   rý   rø   r8   r9   rä   ®  s    ©r0   r   ÚStringLiteralÚliteral_valueÚIntegerLiteral©rþ   rä   r8   rø   r9   Úol_dt�  s    

z+TestMixedTupleUnroll.test_10.<locals>.ol_dtc                     s"   d} t dƒD ]}| ˆ |ƒ7 } q| S )Nr   )ró   rô   rõ   rö   rã   ©rs   rË   ©rù   r8   r9   rA   ³  s    z)TestMixedTupleUnroll.test_10.<locals>.foo©r   r   rC   rD   ©r3   r  rA   r8   r  r9   Útest_10�  s    


zTestMixedTupleUnroll.test_10c                 C   s"   t dd„ ƒ}|  |ƒ | ¡ ¡ d S )Nc                  S   sd   g } d}t tt|ƒƒƒD ]F}|| }|dkr8|  d¡ q|dkrL|  |¡ q|dkr|  d¡ q| S ©N)ró   rô   rõ   ró   Ú0rô   rõ   ú2.0©r¦   r’   r	   rÜ   ©r@   rÃ   rt   rË   r8   r8   r9   rA   ¾  s    z)TestMixedTupleUnroll.test_11.<locals>.foorÄ   rE   r8   r8   r9   Útest_11¼  s    
zTestMixedTupleUnroll.test_11c                 C   s"   t dd„ ƒ}|  |ƒ | ¡ ¡ d S )Nc                  S   sh   t  ¡ } d}ttt|ƒƒƒD ]F}|| }|dkr<|  d¡ q|dkrP|  |¡ q|dkr|  d¡ q| S r  )r   rÛ   r¦   r’   r	   rÜ   r  r8   r8   r9   rA   Ð  s    z*TestMixedTupleUnroll.test_11a.<locals>.foorÄ   rE   r8   r8   r9   Útest_11aÎ  s    
zTestMixedTupleUnroll.test_11ac                 C   s2   t dd„ ƒ}d}|}|  |d|ƒ| d|¡¡ d S )Nc                 S   st   dddd|d| f}d}t |ƒD ]:}||7 }|jdk r@|d8 }q t |ƒD ]}||7 }qH q\q |d d	k rp|d7 }|S ©
Nr¼   r½   r¾   rJ   r=   r   r¿   r<   é   rÉ   ©rÂ   rÃ   rG   rs   rt   r@   r8   r8   r9   rA   â  s    


z)TestMixedTupleUnroll.test_12.<locals>.foor±   r=   rÄ   rÅ   r8   r8   r9   Útest_12à  s
    
zTestMixedTupleUnroll.test_12c              	   C   sL   t dd„ ƒ}d}|}|  tj¡�}|d|ƒ W 5 Q R X |  dt|jƒ¡ d S )Nc                 S   s²   dddd|d| f}d}t |ƒD ]b}||7 }|jdk r@|d8 }n,t |ƒD ]"}t |ƒD ]}||7 }qT||7 }qHt |ƒD ]}||7 }qtq t |ƒD ]}||7 }qŒ|d d	k r®|d7 }|S r  rÉ   )rÂ   rÃ   rG   rs   rt   r@   r©   r8   r8   r9   rA   ù  s"    




z)TestMixedTupleUnroll.test_13.<locals>.foor±   r=   ú(Nesting of literal_unroll is unsupported©r   rK   r   ÚUnsupportedErrorrM   rN   rO   ©r3   rA   rÆ   rÇ   rð   r8   r8   r9   Útest_13÷  s    
ÿzTestMixedTupleUnroll.test_13c                 C   s"   t dd„ ƒ}|  |ƒ | ¡ ¡ d S )Nc                  S   s"   d} d}t | ƒD ]}||7 }q|S )N©r<   r=   r>   rJ   r   rã   ©r@   rs   rG   r8   r8   r9   rA     s
    
z)TestMixedTupleUnroll.test_14.<locals>.foorÄ   rE   r8   r8   r9   Útest_14  s    
zTestMixedTupleUnroll.test_14c              
   C   sr   t dd„ ƒ}d}t |f¡t ||f¡ddddddd	d
hf}|  tj¡�}||ƒ W 5 Q R X |  dt|jƒ¡ d S )Nc                 S   s"   d}t | ƒD ]}|t|ƒ7 }q|S rq   rÞ   r  r8   r8   r9   rA   '  s    z)TestMixedTupleUnroll.test_15.<locals>.foor¯   rß   r;   rà   r>   rJ   r°   rá   úCannot unify)	r   rÑ   rÒ   rK   r   rï   rM   rN   rO   )r3   rA   r¶   rr   rð   r8   r8   r9   Útest_15$  s    
 ÿzTestMixedTupleUnroll.test_15c                    sB   dd„ ‰ t ˆ dd�dd„ ƒ}t‡ fdd„ƒ}|  |ƒ | ¡ ¡ d S )	Nc                 S   s4   | dkrdS | dkrdS | dkr$dS | dkr0dS d S )	Néè  rG   éÐ  r   é¸  rÕ   é   Údr8   rø   r8   r8   r9   rù   :  s    z(TestMixedTupleUnroll.test_16.<locals>.dtrú   rû   c                 S   s`   t | tjƒr\| j}|dkr$dd„ }n4|dkr6dd„ }n"|dkrHdd„ }n|dkrXd	d„ }|S d S )
Nr   c                 S   s   dS ©NrG   r8   rý   r8   r8   r9   rä   I  s    z9TestMixedTupleUnroll.test_16.<locals>.ol_dt.<locals>.implr!  c                 S   s   dS ©Nr   r8   rý   r8   r8   r9   rä   L  s    r"  c                 S   s   dS ©NrÕ   r8   rý   r8   r8   r9   rä   O  s    r#  c                 S   s   dS ©Nr$  r8   rý   r8   r8   r9   rä   R  s    )r0   r   r  r  ©rþ   r“   rä   r8   r8   r9   r  D  s    


z+TestMixedTupleUnroll.test_16.<locals>.ol_dtc                     s.   d} d}t | d d… ƒD ]}|ˆ |ƒ7 }q|S )N)r   r!  r"  r#  Ú r=   rã   r  r  r8   r9   rA   V  s
    z)TestMixedTupleUnroll.test_16.<locals>.foor  r	  r8   r  r9   Útest_167  s    


zTestMixedTupleUnroll.test_16c                    sB   dd„ ‰ t ˆ dd�dd„ ƒ}t‡ fdd„ƒ}|  |ƒ | ¡ ¡ d S )	Nc                 S   s@   | dkrdS | dkrdS | dkr$dS | dkr0dS | d	kr<d
S d S )Nr   rG   r!  r   r"  rÕ   r#  r$  rÆ   ÚEFFr8   rø   r8   r8   r9   rù   c  s    z(TestMixedTupleUnroll.test_17.<locals>.dtrú   rû   c                 S   s†   t | tjƒr\| j}|dkr$dd„ }n4|dkr6dd„ }n"|dkrHdd„ }n|dkrXd	d„ }|S t | tjƒr‚| j}|d
kr‚dd„ }|S d S )Nr   c                 S   s   dS r%  r8   rý   r8   r8   r9   rä   t  s    z9TestMixedTupleUnroll.test_17.<locals>.ol_dt.<locals>.implr!  c                 S   s   dS r&  r8   rý   r8   r8   r9   rä   w  s    r"  c                 S   s   dS r'  r8   rý   r8   r8   r9   rä   z  s    r#  c                 S   s   dS r(  r8   rý   r8   r8   r9   rä   }  s    rÆ   c                 S   s   dS )Nr,  r8   rý   r8   r8   r9   rä   ƒ  s    )r0   r   r  r  r  r)  r8   r8   r9   r  o  s     


z+TestMixedTupleUnroll.test_17.<locals>.ol_dtc                     s.   d} d}t | dd … ƒD ]}|ˆ |ƒ7 }q|S )N)r   r!  r"  rÆ   r*  r<   rã   r  r  r8   r9   rA   ‡  s
    z)TestMixedTupleUnroll.test_17.<locals>.foor  r	  r8   r  r9   Útest_17`  s    

zTestMixedTupleUnroll.test_17c                 C   s"   t dd„ ƒ}|  |ƒ | ¡ ¡ d S )Nc                  S   s8   d} d}t | d d d… ƒD ]}|d7 }|dk r q4q|S )N)r   r!  r"  r#  iˆ  ip  r   éÿÿÿÿr<   r"  rã   )r@   ÚcountrG   r8   r8   r9   rA   “  s    z)TestMixedTupleUnroll.test_18.<locals>.foorÄ   rE   r8   r8   r9   Útest_18‘  s    
	zTestMixedTupleUnroll.test_18c                 C   s"   t dd„ ƒ}|  |ƒ | ¡ ¡ d S )Nc                  S   sd   d} ddddg}ddg}||f}t  d¡}t jdt jd	�}||||f}t|ƒD ]}| t|ƒ7 } qN| S ©
Nr   r<   r=   r>   rJ   r'   é   r¯   ©Údtype©rÑ   ÚarangerÒ   Ú
complex128r	   r’   ©rs   Úl1Úl2rr   Úa1Úa2rË   r8   r8   r9   rA   ¡  s    
z)TestMixedTupleUnroll.test_19.<locals>.foorÄ   rE   r8   r8   r9   Útest_19Ÿ  s    
zTestMixedTupleUnroll.test_19c                 C   s"   t dd„ ƒ}|  |ƒ | ¡ ¡ d S )Nc                  S   sF   g } t  d¡}t jdt jd�}||f}t|ƒD ]}|  | ¡ ¡ q.| S )Nr2  r¯   r3  )rÑ   r6  rÒ   r7  r	   rÜ   rÎ   )Úlr;  r<  rr   rË   r8   r8   r9   rA   ³  s    
z)TestMixedTupleUnroll.test_20.<locals>.foorÄ   rE   r8   r8   r9   Útest_20°  s    
	zTestMixedTupleUnroll.test_20c                 C   s.   t dd„ ƒ}d}|}|  ||ƒ| |¡¡ d S )Nc                    s0   d‰ ‡ fdd„}d}dD ]}||ƒ | 7 }q|S )N©r  gfffffæ7@y              @é   c                     s   d} t ˆ ƒD ]}| |7 } q| S rq   rã   ©rs   r©   ©r   r8   r9   r·   Å  s    
z6TestMixedTupleUnroll.test_21.<locals>.foo.<locals>.barr   r  r8   ©rÃ   r·   Z	outer_accr@   r8   rC  r9   rA   Á  s    z)TestMixedTupleUnroll.test_21.<locals>.foor±   rÄ   rÅ   r8   r8   r9   Útest_21¿  s
    
zTestMixedTupleUnroll.test_21c                 C   s.   t dd„ ƒ}d}|}|  ||ƒ| |¡¡ d S )Nc                    sD   dddd| d|  f}d‰ ‡ fdd„}d	}t |ƒD ]}||ƒ 7 }q0|S )
Nr¼   r½   r¾   rJ   r=   r@  c                     s   d} t ˆ ƒD ]}| |7 } q| S rq   rã   rB  rC  r8   r9   r·   Ú  s    
z6TestMixedTupleUnroll.test_22.<locals>.foo.<locals>.barr   rã   )rÃ   rG   r·   rs   r@   r8   rC  r9   rA   Õ  s    z)TestMixedTupleUnroll.test_22.<locals>.foor±   rÄ   rÅ   r8   r8   r9   Útest_22Ô  s
    
zTestMixedTupleUnroll.test_22c              	   C   sJ   t dd„ ƒ}d}|}|  tj¡�}||ƒ W 5 Q R X |  dt|jƒ¡ d S )Nc                    s4   d‰ ‡ fdd„}d}t ˆ ƒD ]}||ƒ | 7 }q|S )Nr@  c                     s   d} t ˆ ƒD ]}| |7 } q| S rq   rã   rB  rC  r8   r9   r·   ñ  s    
z6TestMixedTupleUnroll.test_23.<locals>.foo.<locals>.barr   rã   rD  r8   rC  r9   rA   í  s    z)TestMixedTupleUnroll.test_23.<locals>.foor±   r  r  r  r8   r8   r9   Útest_23ë  s    
ÿzTestMixedTupleUnroll.test_23c              	   C   sD   t dd„ ƒ}|  tj¡�}|ƒ  W 5 Q R X d}|  |t|jƒ¡ d S )Nc                  S   s   t dƒD ]} t| ƒ qd S )NZABCDE©r	   Úprintr?   r8   r8   r9   rA   
  s    z)TestMixedTupleUnroll.test_24.<locals>.fooz7argument should be a tuple or a list of constant valuesr  )r3   rA   rð   Úmsgr8   r8   r9   Útest_24  s    
zTestMixedTupleUnroll.test_24c                 C   s"   t dd„ ƒ}|  |ƒ | ¡ ¡ d S )Nc                  S   s<   t ddddgdfƒ} | }|}g }|D ]}| t|ƒ¡ q$|S )Nr;   )ù               @r¾   r<   r=   Zxyz)r	   rÜ   r’   )ÚvalZalias1Zalias2Zlensr@   r8   r8   r9   rA     s    z)TestMixedTupleUnroll.test_25.<locals>.foorÄ   rE   r8   r8   r9   Útest_25  s    
	zTestMixedTupleUnroll.test_25c                 C   s.   t dd„ ƒ}d}|}|  ||ƒ| |¡¡ d S )Nc           	      S   sv   dddd| d|  f}d}d}d}d}t jt|ƒft jd	�}t|ƒD ]$}||7 }|||< |d
7 }|| }qB|||||fS )Nr¼   r½   r¾   rJ   r=   r   é6   é   r3  r<   )rÑ   Úemptyr’   r7  r	   )	rÃ   rG   rs   r/  Z	untouchedZ	read_onlyZmutatedr@   Úescaper8   r8   r9   rA   (  s    
z)TestMixedTupleUnroll.test_26.<locals>.foor±   )r   ZassertPreciseEqualrD   rÅ   r8   r8   r9   Útest_26#  s
    
zTestMixedTupleUnroll.test_26c                 C   s4   t dd�dd„ ƒ}d}|}|  ||ƒ| |¡¡ d S )NT©Úparallelc                 S   s@   dddd| d|  f}d}t |ƒD ]}tdƒD ]}|d7 }q,q |S )	Nr¼   r½   r¾   rJ   r=   r   r'   r<   ©r	   r
   ©rÃ   rG   rs   r@   rÇ   r8   r8   r9   rA   ?  s    z)TestMixedTupleUnroll.test_27.<locals>.foor±   rÄ   rÅ   r8   r8   r9   Útest_27<  s
    
zTestMixedTupleUnroll.test_27c                 C   s6   t dd�dd„ ƒ}d}|}tj ||ƒ| |¡¡ d S )NTrT  c                 S   s@   dddd| d|  f}d}t |ƒD ]}tdƒD ]}||7 }q,q |S ©Nr¼   r½   r¾   rJ   r=   r   r'   rV  rW  r8   r8   r9   rA   P  s    z)TestMixedTupleUnroll.test_28.<locals>.foor±   )r   rÑ   ÚtestingZassert_allcloserD   rÅ   r8   r8   r9   Útest_28M  s
    
zTestMixedTupleUnroll.test_28c                 C   s4   t dd�dd„ ƒ}d}|}|  ||ƒ| |¡¡ d S )NTrT  c                 S   s@   dddd| d|  f}d}t dƒD ]}t|ƒD ]}||7 }q,q |S rY  )r
   r	   )rÃ   rG   rs   rÇ   r@   r8   r8   r9   rA   c  s    z)TestMixedTupleUnroll.test_29.<locals>.foor±   rÄ   rÅ   r8   r8   r9   Útest_29_  s
    
zTestMixedTupleUnroll.test_29c                 C   s"   t dd„ ƒ}|  |ƒ | ¡ ¡ d S )Nc                     s$   d‰ ‡ fdd„} dd„ t | dƒD ƒS )NéÒ  c                    s*   d}d}t |ƒD ]}||ˆ  7 }q|| fS ©Nr   )r¼   r½   r¾   rJ   rã   ©rË   rs   rG   r@   ©Úconstr8   r9   r·   w  s
    z6TestMixedTupleUnroll.test_30.<locals>.foo.<locals>.barc                 S   s   g | ]}|‘qS r8   r8   r„   r8   r8   r9   r‡   }  s     z=TestMixedTupleUnroll.test_30.<locals>.foo.<locals>.<listcomp>©r<   r=   ©Úmap©r·   r8   r`  r9   rA   s  s    z)TestMixedTupleUnroll.test_30.<locals>.foorÄ   rE   r8   r8   r9   Útest_30q  s    
zTestMixedTupleUnroll.test_30c              	   C   sR   t dd„ ƒ}|  tj¡�}|ƒ  W 5 Q R X |  tt|jƒ¡ |  dt|jƒ¡ d S )Nc                     s$   d‰ ‡ fdd„} dd„ t | dƒD ƒS )Nr]  c                    s*   d}d}t |ƒD ]}||ˆ  7 }q|| fS r^  rã   r_  r`  r8   r9   r·   ‰  s
    z6TestMixedTupleUnroll.test_31.<locals>.foo.<locals>.barc                 S   s   g | ]}|‘qS r8   r8   r„   r8   r8   r9   r‡   �  s     z=TestMixedTupleUnroll.test_31.<locals>.foo.<locals>.<listcomp>)r<   rL  rc  re  r8   r`  r9   rA   …  s    z)TestMixedTupleUnroll.test_31.<locals>.fooÚziprî   ©r3   rA   rð   r8   r8   r9   Útest_31�  s    
zTestMixedTupleUnroll.test_31c                    s2   t dd„ ƒ‰ t ‡ fdd„ƒ}|  |ƒ | ¡ ¡ d S )Nc                 s   s   t | ƒD ]
}|V  qd S rW   rã   ©rG   r@   r8   r8   r9   ræ   ™  s    z)TestMixedTupleUnroll.test_32.<locals>.genc                      s   dd„ ˆ dƒD ƒS )Nc                 S   s   g | ]}|‘qS r8   r8   r„   r8   r8   r9   r‡      s     z=TestMixedTupleUnroll.test_32.<locals>.foo.<locals>.<listcomp>©r<   gffffff@y              @r8   r8   ©ræ   r8   r9   rA   ž  s    z)TestMixedTupleUnroll.test_32.<locals>.foorÄ   rE   r8   rl  r9   Útest_32—  s
    
zTestMixedTupleUnroll.test_32c                 C   s<   t dd„ ƒ}dd„ }||ƒ}||jƒj}|  |ƒ |ƒ ¡ d S )Nc                 s   s   | |ƒV  d S rW   r8   )r4   Úargr8   r8   r9   Úconsumer¨  s    z.TestMixedTupleUnroll.test_33.<locals>.consumerc                    s   t ‡ fdd„ƒ}|S )Nc                     s   dd„ } dd„ ˆ | dƒD ƒS )Nc                 s   s   t | ƒD ]
}|V  qd S rW   rã   rj  r8   r8   r9   ræ   ¯  s    zCTestMixedTupleUnroll.test_33.<locals>.get.<locals>.foo.<locals>.genc                 S   s   g | ]}t |ƒ‘qS r8   )Únextr„   r8   r8   r9   r‡   ²  s     zJTestMixedTupleUnroll.test_33.<locals>.get.<locals>.foo.<locals>.<listcomp>rk  r8   rl  ©Úconsr8   r9   rA   ­  s    z6TestMixedTupleUnroll.test_33.<locals>.get.<locals>.foorå   )rr  rA   r8   rq  r9   Úget¬  s    z)TestMixedTupleUnroll.test_33.<locals>.get)r   rD   rC   )r3   ro  rs  ZcfuncZpyfuncr8   r8   r9   Útest_33¤  s    
	zTestMixedTupleUnroll.test_33c              	   C   sR   t dd„ ƒ}|  tj¡�}|ƒ  W 5 Q R X |  dt|jƒ¡ |  dt|jƒ¡ d S )Nc                  S   sr   d} ddddg}ddg}| d dkr.||f}n&t  d¡}t jdt jd	�}||||f}t|ƒD ]}| t|ƒ7 } q\| S r1  r5  r8  r8   r8   r9   rA   ¼  s    

z)TestMixedTupleUnroll.test_34.<locals>.foozInvalid use ofz&found multiple definitions of variabler  rh  r8   r8   r9   Útest_34º  s    
ÿzTestMixedTupleUnroll.test_34N))rR   rS   rT   rÈ   rÊ   rÌ   rÔ   rÚ   r   r¹   rÝ   râ   rç   rñ   r
  r  r  r  r  r  r  r+  r-  r0  r=  r?  rE  rF  rG  rK  rN  rS  r   rX  r[  r\  rf  ri  rm  rt  ru  r8   r8   r8   r9   rº   Í  sN   
%, )1


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d„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestConstListUnrollc                 C   s"   t dd„ ƒ}|  |ƒ | ¡ ¡ d S )Nc                  S   sN   ddddg} d}t tt| ƒƒƒD ](}|| | 7 }|jdk rD|d8 }q  qJq |S ©Nr¼   r½   r¾   rJ   r   r¿   r<   rÀ   )rG   rs   rt   r8   r8   r9   rA   ×  s    

z(TestConstListUnroll.test_01.<locals>.foorÄ   rE   r8   r8   r9   rÈ   Õ  s    
zTestConstListUnroll.test_01c                 C   s"   t dd„ ƒ}|  |ƒ | ¡ ¡ d S )Nc                  S   sB   ddddg} d}t | ƒD ]$}||7 }|jdk r8|d8 }q q>q|S rw  rÉ   r  r8   r8   r9   rA   è  s    

z(TestConstListUnroll.test_02.<locals>.foorÄ   rE   r8   r8   r9   rÊ   å  s    
zTestConstListUnroll.test_02c                 C   s"   t dd„ ƒ}|  |ƒ | ¡ ¡ d S )Nc                  S   sd   ddddg} ddg}d}t | ƒD ]>}||7 }|jdk r@|d	8 }q t |ƒD ]}||d
k7 }qH q`q |S )Nr¼   r½   r¾   rJ   rA   rA  r   r¿   r<   FrÉ   ©r@   r¨   rs   rG   rË   r8   r8   r9   rA   ø  s    

z(TestConstListUnroll.test_03.<locals>.foorÄ   rE   r8   r8   r9   rÌ   ö  s    
zTestConstListUnroll.test_03c                 C   s"   t dd„ ƒ}|  |ƒ | ¡ ¡ d S )Nc                  S   s`   ddddg} d}d}t | ƒD ]>}||7 }|jdk r<|d8 }qt |ƒD ]}||d	k7 }qD q\q|S )
Nr¼   r½   r¾   rJ   )rA   rA  r   r¿   r<   FrÉ   rx  r8   r8   r9   rA     s    

z(TestConstListUnroll.test_04.<locals>.foorÄ   rE   r8   r8   r9   rÔ   	  s    
zTestConstListUnroll.test_04c                 C   sª   t dd„ ƒ}d}t d¡t d¡g}t |f¡t ||f¡t |||f¡t ||||f¡t |||||f¡f}|  tj¡�}|||ƒ W 5 Q R X d}|  |t|j	ƒ¡ d S )Nc                 S   s2   d}t | ƒD ] }|d dkr||d  ¡ 7 }q|S rµ   rÍ   r×   r8   r8   r9   rA     s
    z(TestConstListUnroll.test_05.<locals>.foor'   z6Invalid use of literal_unroll with a function argument)
r   rÑ   ZzerosrÒ   rK   r   r  rM   rN   rO   )r3   rA   r¶   rØ   rÙ   rð   rJ  r8   r8   r9   rÚ     s    
$ ÿzTestConstListUnroll.test_05c              	   C   s@   t dd„ ƒ}|  tj¡�}|ƒ  W 5 Q R X |  dt|jƒ¡ d S )Nc               
   S   sR   d} t  | f¡t  | | f¡dddddddd	hg}d
}t|ƒD ]}|t|ƒ7 }q<|S )Nr'   rß   r;   rà   r>   rJ   r¯   r°   rá   r   )rÑ   rÒ   r	   r’   )r¶   rr   rs   rG   r8   r8   r9   rA   3  s     ÿz(TestConstListUnroll.test_06.<locals>.fooz&Found non-constant value at position 0r  rh  r8   r8   r9   rÝ   1  s    
	ÿzTestConstListUnroll.test_06c                    sB   dd„ ‰ t ˆ dd�dd„ ƒ}t‡ fdd„ƒ}|  |ƒ | ¡ ¡ d S )	Nc                 S   s8   | dkrdS | dkrdS | dkr$dS | dkr4d|  S d S rò   r8   rø   r8   r8   r9   rù   F  s    z&TestConstListUnroll.test_7.<locals>.dtrú   rû   c                    sx   t | tjƒrJ| j‰ ˆ dkr$dd„ }n"ˆ dkr6dd„ }nˆ dkrFdd„ }|S t | tjƒrt| j‰ ˆ dkrt‡ fd	d„}|S d S )
Nró   c                 S   s   dS rè   r8   rý   r8   r8   r9   rä   U  s    z7TestConstListUnroll.test_7.<locals>.ol_dt.<locals>.implrô   c                 S   s   dS rê   r8   rý   r8   r8   r9   rä   X  s    rõ   c                 S   s   dS rì   r8   rý   r8   r8   r9   rä   [  s    rö   c                    s   dˆ  S rÿ   r8   rý   rø   r8   r9   rä   a  s    r   r  r8   rø   r9   r  P  s    

z)TestConstListUnroll.test_7.<locals>.ol_dtc                     s*   d} t ddddgƒD ]}| ˆ |ƒ7 } q| S )Nr   ró   rô   rõ   rö   rã   r  r  r8   r9   rA   f  s    z'TestConstListUnroll.test_7.<locals>.foor  r	  r8   r  r9   Útest_7C  s    


zTestConstListUnroll.test_7c                 C   s"   t dd„ ƒ}|  |ƒ | ¡ ¡ d S )Nc                  S   sj   g } dddg}t tt|ƒƒƒD ]F}|| }|dkr>|  d¡ q|dkrR|  |¡ q|dkr|  d¡ q| S )Nró   rô   rõ   r  r  r  r  r8   r8   r9   rA   q  s    
z'TestConstListUnroll.test_8.<locals>.foorÄ   rE   r8   r8   r9   Útest_8o  s    
zTestConstListUnroll.test_8c                 C   s2   t dd„ ƒ}d}|}|  |d|ƒ| d|¡¡ d S )Nc                 S   sl   ddddg}d}t |ƒD ]:}||7 }|jdk r8|d8 }qt |ƒD ]}||7 }q@ qTq|d dk rh|d	7 }|S )
Nr¼   r½   r¾   rJ   r   r¿   r<   r  r=   rÉ   r  r8   r8   r9   rA   ƒ  s    


z'TestConstListUnroll.test_9.<locals>.foor±   r=   rÄ   rÅ   r8   r8   r9   Útest_9�  s
    
zTestConstListUnroll.test_9c              	   C   sL   t dd„ ƒ}d}|}|  tj¡�}|d|ƒ W 5 Q R X |  dt|jƒ¡ d S )Nc                 S   s¾   dddd|d| f}ddddg}d}t |ƒD ]b}||7 }|jdk rL|d8 }n,t |ƒD ]"}t |ƒD ]}||7 }q`||7 }qTt |ƒD ]}||7 }q€q,t |ƒD ]}||7 }q˜|d d	k rº|d7 }|S r  rÉ   )rÂ   rÃ   rG   r   rs   rt   r@   r©   r8   r8   r9   rA   š  s$    




z(TestConstListUnroll.test_10.<locals>.foor±   r=   r  r  r  r8   r8   r9   r
  ˜  s    
ÿzTestConstListUnroll.test_10c                 C   s"   t dd„ ƒ}|  |ƒ | ¡ ¡ d S )Nc                  S   s*   ddddg} d}t | ƒD ]}||7 }q|S )Nr<   r=   r>   rJ   r   rã   r  r8   r8   r9   rA   ½  s
    
z(TestConstListUnroll.test_11.<locals>.foorÄ   rE   r8   r8   r9   r  ¹  s    
zTestConstListUnroll.test_11c              	   C   s@   t dd„ ƒ}|  tj¡�}|ƒ  W 5 Q R X |  dt|jƒ¡ d S )Nc                  S   s,   d} dddg}t |ƒD ]}| t|ƒ7 } q|S )Nr   r<   r=   rG   )r	   Úbool)rs   r@   rG   r8   r8   r9   rA   É  s
    
z(TestConstListUnroll.test_12.<locals>.foor  ©r   rK   r   rï   rM   rN   rO   rh  r8   r8   r9   r  Ç  s
    
zTestConstListUnroll.test_12c              	   C   s@   t dd„ ƒ}|  tj¡�}|ƒ  W 5 Q R X |  dt|jƒ¡ d S )Nc                  S   s2   ddddg} d}t | d d… ƒD ]}||7 }q |S )Nr   r!  r"  r#  r   r=   rã   r  r8   r8   r9   rA   Ù  s
    
z(TestConstListUnroll.test_13.<locals>.foozInvalid use of literal_unrollr  rh  r8   r8   r9   r  Ö  s
    
zTestConstListUnroll.test_13c              	   C   s@   t dd„ ƒ}|  tj¡�}|ƒ  W 5 Q R X |  dt|jƒ¡ d S )Nc                  S   s4   ddddg} d}t | ƒD ]}||7 }q|  d¡ |S )Nr   r!  r"  r#  r   r'   )r	   rÜ   r  r8   r8   r9   rA   é  s    

z(TestConstListUnroll.test_14.<locals>.fooz(Unknown attribute 'append' of type Tupler}  rh  r8   r8   r9   r  æ  s    
ÿzTestConstListUnroll.test_14N)rR   rS   rT   rÈ   rÊ   rÌ   rÔ   rÚ   rÝ   ry  rz  r{  r
  r  r  r  r  r8   r8   r8   r9   rv  Ó  s   ,!rv  c                   @   sÈ   e Zd Zdd„ Zdd„ Ze d¡dd„ ƒZe d¡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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d-S ).ÚTestMorec              	   C   s@   t dd„ ƒ}|  tj¡�}|ƒ  W 5 Q R X |  dt|jƒ¡ d S )Nc                  S   s$   d} d}t | | ƒD ]}||7 }q|S )N)r'   r2  r   rã   ©r@   ÚrrG   r8   r8   r9   rA   û  s
    
z2TestMore.test_invalid_use_of_unroller.<locals>.fooz*literal_unroll takes one argument, found 2r  rh  r8   r8   r9   Útest_invalid_use_of_unrollerú  s    
þz%TestMore.test_invalid_use_of_unrollerc              	   C   sB   t dd„ ƒ}|  tj¡�}|dƒ W 5 Q R X |  dt|jƒ¡ d S )Nc                 S   s&   d| g}d}t |ƒD ]}||7 }q|S ©Nr'   r   rã   ©r¨   r@   r€  rG   r8   r8   r9   rA     s
    
z,TestMore.test_non_constant_list.<locals>.foor'   zKFound non-constant value at position 1 in a list argument to literal_unrollr  rh  r8   r8   r9   Útest_non_constant_list
  s    
ýzTestMore.test_non_constant_listz!numba.literally not supported yetc                    s>   ddl m‰ t‡fdd„ƒ‰ ˆ dƒ t‡ fdd„ƒ}|ƒ  d S )Nr   ©Ú	literallyc                    s*   dˆ | ƒg}d}t |ƒD ]}||7 }q|S r‚  rã   rƒ  r…  r8   r9   rA   !  s
    
z2TestMore.test_literally_constant_list.<locals>.foor¼   c                      s   ˆ dƒS ©Nr¼   r8   r8   ©rA   r8   r9   r·   -  s    z2TestMore.test_literally_constant_list.<locals>.bar)Únumbar†  r   ©r3   r·   r8   )rA   r†  r9   Útest_literally_constant_list  s    	z%TestMore.test_literally_constant_listz8inlining of foo doesn't have const prop so y isn't constc                    s4   t dd�dd„ ƒ‰ t ‡ fdd„ƒ}|  |ƒ d¡ d S )Nrú   rû   c                 S   s&   d| g}d}t |ƒD ]}||7 }q|S r‚  rã   rƒ  r8   r8   r9   rA   7  s
    
z.TestMore.test_inlined_unroll_list.<locals>.fooc                      s   ˆ dƒS r‡  r8   r8   rˆ  r8   r9   r·   ?  s    z.TestMore.test_inlined_unroll_list.<locals>.baré   )r   rC   rŠ  r8   rˆ  r9   Útest_inlined_unroll_list5  s
    
z!TestMore.test_inlined_unroll_listc                 C   s<   t dd„ ƒ}|  |dƒ| d¡¡ |  |dƒ| d¡¡ d S )Nc                 S   s&   d| f}d}t |ƒD ]}||7 }q|S r‚  rã   rƒ  r8   r8   r9   rA   F  s
    
z+TestMore.test_unroll_tuple_arg.<locals>.foor¼   ç333333ó?rÄ   rE   r8   r8   r9   Útest_unroll_tuple_argE  s    
zTestMore.test_unroll_tuple_argc                 C   s<   t dd„ ƒ}|  |dƒ| d¡¡ |  |dƒ| d¡¡ d S )Nc                 S   s   d}t | ƒD ]}||7 }q|S rq   rã   r  r8   r8   r9   rA   R  s    
z,TestMore.test_unroll_tuple_arg2.<locals>.foo)r¼   rŽ  rÄ   rE   r8   r8   r9   Útest_unroll_tuple_arg2Q  s    
zTestMore.test_unroll_tuple_arg2c                 C   s"   t dd„ ƒ}|  |ƒ | ¡ ¡ d S )Nc                  S   s2   d} d}t | ƒD ]}|}|}||| | 7 }q|S )N©r'   rŽ  r   rã   )r@   Úoutrt   r©   rÇ   r8   r8   r9   rA   ]  s    z-TestMore.test_unroll_tuple_alias.<locals>.foorÄ   rE   r8   r8   r9   Útest_unroll_tuple_alias\  s    
	z TestMore.test_unroll_tuple_aliasc              	   C   sV   t dd„ ƒ}|  tj¡�}|ƒ  W 5 Q R X |  dt|jƒ¡ d}|  t|jƒ|¡ d S )Nc                  S   s,   d} d}t | ƒD ]}|D ]}||7 }qq|S )N)r‘  )rI   g      @r   rã   )r@   r’  rt   r©   r8   r8   r9   rA   k  s    z.TestMore.test_unroll_tuple_nested.<locals>.foor�   z#.*Tuple\(int[0-9][0-9], float64\).*)r   rK   r   rï   rM   rN   rO   ZassertRegexpMatches)r3   rA   rð   Úrer8   r8   r9   Útest_unroll_tuple_nestedi  s    
z!TestMore.test_unroll_tuple_nestedc              	   C   sH   t dd„ ƒ}tƒ �}|ƒ  W 5 Q R X | ¡  ¡ }|  |ddddg¡ d S )Nc                  S   sZ   i } d| d< d| d< i }d|d< d|d< t | |fƒD ] }| ¡ D ]\}}t||ƒ q@q4d S )	Nr<   rG   r=   r   rÕ   r>   r$  rJ   )r	   ÚitemsrI  )r@   r¨   ÚitrÇ   Úvr8   r8   r9   rA   }  s    z/TestMore.test_unroll_tuple_of_dict.<locals>.fooza 1zb 2z3 cz4 d)r   r   ÚgetvalueÚ
splitlinesrC   )r3   rA   ÚstdoutÚlinesr8   r8   r9   Útest_unroll_tuple_of_dict{  s    

þz"TestMore.test_unroll_tuple_of_dictc                    s6   t ddddgƒ‰ t‡ fdd„ƒ}|  |ƒ | ¡ ¡ d S )NÚABCrG   r   rÕ   c                     s*   ˆ dddƒ} d}t | ƒD ]}||7 }q|S )Nr<   rL  ç333333@r   rã   ©Úabcr’  rt   ©rž  r8   r9   rA   •  s
    
z-TestMore.test_unroll_named_tuple.<locals>.foo©r   r   rC   rD   rE   r8   r¢  r9   Útest_unroll_named_tuple’  s    z TestMore.test_unroll_named_tuplec                 C   sB   t ddddgƒ}tdd„ ƒ}|ddd	ƒ}|  ||ƒ| |¡¡ d S )
Nrž  rG   r   rÕ   c                 S   s   d}t | ƒD ]}||7 }q|S rq   rã   ©r@   r’  rt   r8   r8   r9   rA   ¢  s    
z1TestMore.test_unroll_named_tuple_arg.<locals>.foor<   rL  rŸ  r£  ©r3   rž  rA   r¡  r8   r8   r9   Útest_unroll_named_tuple_argŸ  s
    
z$TestMore.test_unroll_named_tuple_argc                    s6   t ddddgƒ‰ t‡ fdd„ƒ}|  |ƒ | ¡ ¡ d S )Nrž  rG   r   rÕ   c                     s*   ˆ dddƒ} d}t | ƒD ]}||7 }q|S )Nr<   r=   r>   r   rã   r   r¢  r8   r9   rA   °  s
    
z0TestMore.test_unroll_named_unituple.<locals>.foor£  rE   r8   r¢  r9   Útest_unroll_named_unituple­  s    z#TestMore.test_unroll_named_unituplec                 C   sB   t ddddgƒ}tdd„ ƒ}|ddd	ƒ}|  ||ƒ| |¡¡ d S )
Nrž  rG   r   rÕ   c                 S   s   d}t | ƒD ]}||7 }q|S rq   rã   r¥  r8   r8   r9   rA   ½  s    
z4TestMore.test_unroll_named_unituple_arg.<locals>.foor<   r=   r>   r£  r¦  r8   r8   r9   Útest_unroll_named_unituple_argº  s
    
z'TestMore.test_unroll_named_unituple_argc                 C   s"   t dd„ ƒ}|  |ƒ | ¡ ¡ d S )Nc                  S   s   d} t tƒD ]}| |7 } q| S rq   )r	   Ú	_X_GLOBAL©r’  rt   r8   r8   r9   rA   Ê  s    
z.TestMore.test_unroll_global_tuple.<locals>.foorÄ   rE   r8   r8   r9   Útest_unroll_global_tupleÈ  s    
z!TestMore.test_unroll_global_tuplec                    s*   d‰ t ‡ fdd„ƒ}|  |ƒ | ¡ ¡ d S )Nr&   c                     s   d} t ˆ ƒD ]}| |7 } q| S rq   rã   r«  r?   r8   r9   rA   Ö  s    
z/TestMore.test_unroll_freevar_tuple.<locals>.foorÄ   rE   r8   r?   r9   Útest_unroll_freevar_tupleÓ  s    z"TestMore.test_unroll_freevar_tuplec                    sF   t dd„ ƒ}t dd„ ƒ}||f‰ t ‡ fdd„ƒ}|  |ƒ | ¡ ¡ d S )Nc                   S   s   dS rè   r8   r8   r8   r8   r9   rG   à  s    z.TestMore.test_unroll_function_tuple.<locals>.ac                   S   s   dS rê   r8   r8   r8   r8   r9   r   ä  s    z.TestMore.test_unroll_function_tuple.<locals>.bc                     s    d} t ˆ ƒD ]}| |ƒ 7 } q| S rq   rã   )r’  rÆ   r?   r8   r9   rA   ê  s    z0TestMore.test_unroll_function_tuple.<locals>.foorÄ   )r3   rG   r   rA   r8   r?   r9   Útest_unroll_function_tupleß  s    

z#TestMore.test_unroll_function_tuplec              	   C   s„   t dd„ ƒ}dd„ tdƒD ƒ}tƒ � |  ||ƒ| |¡¡ W 5 Q R X tƒ �}||ƒ W 5 Q R X | ¡  ¡ }|  |dddd	g¡ d S )
Nc                 S   sL   d}d}dd„ | D ƒ}d}t |ƒD ] }||| 7 }|d7 }t|ƒ q"||fS )Nr   c                 S   s   g | ]}|‘qS r8   r8   )r…   rG   r8   r8   r9   r‡   ù  s     zCTestMore.test_unroll_indexing_list.<locals>.foo.<locals>.<listcomp>)rG   é   gq=
×£pÍ?Nr<   rH  )Úcontrt   rs   Znormal_listZheter_tupleÚitemr8   r8   r9   rA   õ  s    
z/TestMore.test_unroll_indexing_list.<locals>.fooc                 S   s   g | ]}|‘qS r8   r8   )r…   r©   r8   r8   r9   r‡     s     z6TestMore.test_unroll_indexing_list.<locals>.<listcomp>rJ   rG   Z25z0.23ÚNone)r   r¦   r   rC   rD   r™  rš  )r3   rA   Údatar›  rœ  r8   r8   r9   Útest_unroll_indexing_listó  s    
 
þz"TestMore.test_unroll_indexing_listc                    sP   t  d¡t  d¡t  d¡f‰ddlm‰  t‡ ‡fdd„ƒ}|  |ƒ | ¡ ¡ d S )N)r<   )r<   r<   )r<   r<   r<   r   rã   c                     s    d} ˆ ˆƒD ]}| |j 7 } q| S rq   )Úndimr«  ©Zfreevar_unrollÚmixedr8   r9   rA     s    z.TestMore.test_unroller_as_freevar.<locals>.foo)rÑ   rÒ   r‰  r	   r   rC   rD   rE   r8   r¶  r9   Útest_unroller_as_freevar  s
    z!TestMore.test_unroller_as_freevarc                 C   s   t dƒdd„ ƒ}d S )Nz(Tuple((int64, float64)),)c                 S   s$   t | ƒD ]}qd}|dkr d}qd S )Nr<   r   rã   )rr   rË   r@   r8   r8   r9   rA      s
    zCTestMore.test_unroll_with_non_conformant_loops_present.<locals>.foorå   rE   r8   r8   r9   Ú-test_unroll_with_non_conformant_loops_present  s    z6TestMore.test_unroll_with_non_conformant_loops_presentc                    sJ   t jddgddgd�}t|jj ¡ ƒ‰ t‡ fdd„ƒ}|  ||ƒd¡ d S )	Nrb  ©r=   r>   )r;  Úf8)r<  r»  r3  c                    s,   d}t ˆ ƒD ]}|t | | ¡ ¡  }q|S rq   ©r	   rÑ   ÚabsrÎ   ©ZarrÚresrÇ   ©Úfieldsr8   r9   rA   .  s    z>TestMore.test_literal_unroll_legalize_var_names01.<locals>.fooç       @©rÑ   ÚarrayÚtupler4  rÁ  r‰   r   rC   ©r3   ÚtestrA   r8   rÀ  r9   Ú(test_literal_unroll_legalize_var_names01)  s
    z1TestMore.test_literal_unroll_legalize_var_names01c                    sJ   t jddgddgd�}t|jj ¡ ƒ‰ t‡ fdd„ƒ}|  ||ƒd¡ d S )	Nrb  rº  )za1[0]r»  )za2[1]r»  r3  c                    s,   d}t ˆ ƒD ]}|t | | ¡ ¡  }q|S rq   r¼  r¾  rÀ  r8   r9   rA   =  s    z>TestMore.test_literal_unroll_legalize_var_names02.<locals>.foorÂ  rÃ  rÆ  r8   rÀ  r9   Ú(test_literal_unroll_legalize_var_names027  s    
ÿz1TestMore.test_literal_unroll_legalize_var_names02N)rR   rS   rT   r�  r„  r   r¹   r‹  r�  r�  r�  r“  r•  r�  r¤  r§  r¨  r©  r¬  r­  r®  r´  r¸  r¹  rÈ  rÉ  r8   r8   r8   r9   r~  ù  s.   

r~  c                    s$   t ddd�G ‡ fdd„dtƒƒ}|S )zg Returns a compiler pass that captures the mutation state reported
    by the pass used in the argumentFTrU   c                       s.   e Zd Zd” j Z” Zdd„ Z‡ fdd„ZdS )zcapture.<locals>.ResultCapturerz
capture_%sc                 S   s   t  | ¡ d S rW   rX   rZ   r8   r8   r9   rY   O  s    z(capture.<locals>.ResultCapturer.__init__c                    s&   ˆ ƒ   |¡}|j di ¡}||ˆ < |S )NÚmutation_results)r^   rw   Ú
setdefault)r3   r]   ÚresultrÊ  ©Ú	real_passr8   r9   r^   R  s    z(capture.<locals>.ResultCapturer.run_passN)rR   rS   rT   r_   Z
_real_passrY   r^   r8   rÍ  r8   r9   ÚResultCapturerJ  s   
rÏ  )r   r   )rÎ  rÏ  r8   rÍ  r9   ÚcaptureG  s    
rÐ  c                   @   s   e Zd ZdZdd„ ZdS )ÚCapturingCompilerz? Simple pipeline that wraps passes with the ResultCapturer passc                    sr   t dƒ‰ ‡ fdd„}|tdƒ |tdƒ |tdƒ |tdƒ |tdƒ |td	ƒ |td
ƒ |tdƒ ˆ  	¡  ˆ gS )NzCapturing Compilerc                    s   ˆ   t| ƒ|¡S rW   )rf   rÐ  )r@   r¨   ©rh   r8   r9   rf   a  s    z4CapturingCompiler.define_pipelines.<locals>.add_passra   zfix up argsrb   zhandles literal_unrollrc   z$ensure IR is legal prior to loweringrd   re   )
r   r   r   r   r   r   r   r"   r    rg   )r3   rf   r8   rÒ  r9   rl   ^  s    




ÿ

z"CapturingCompiler.define_pipelinesN)rR   rS   rT   Ú__doc__rl   r8   r8   r8   r9   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 )ÚTestLiteralUnrollPassTriggeringc                 C   s@   t td�dd„ ƒ}|ƒ  |j|jd  }|  |jd t ¡ d S )Nrp   c                  S   s   d} dD ]}| |7 } q| S r¡   r8   r¢   r8   r8   r9   rA   z  s    
zLTestLiteralUnrollPassTriggering.test_literal_unroll_not_invoked.<locals>.foor   rÊ  ©r   rÑ  r+   r,   ÚassertFalserw   r   ©r3   rA   r6   r8   r8   r9   Útest_literal_unroll_not_invokedy  s
    
z?TestLiteralUnrollPassTriggering.test_literal_unroll_not_invokedc                 C   s@   t td�dd„ ƒ}|ƒ  |j|jd  }|  |jd t ¡ d S )Nrp   c                  S   s   d} t dƒD ]}| |7 } q| S r¡   rã   r¢   r8   r8   r9   rA   †  s    
zKTestLiteralUnrollPassTriggering.test_literal_unroll_is_invoked.<locals>.foor   rÊ  )r   rÑ  r+   r,   r/   rw   r   r×  r8   r8   r9   Útest_literal_unroll_is_invoked…  s
    
z>TestLiteralUnrollPassTriggering.test_literal_unroll_is_invokedc                    sH   t ‰ ttd�‡ fdd„ƒ}|ƒ  |j|jd  }|  |jd t ¡ d S )Nrp   c                     s   d} ˆ dƒD ]}| |7 } q| S r¡   r8   r¢   ©Úaliasr8   r9   rA   ”  s    
zUTestLiteralUnrollPassTriggering.test_literal_unroll_is_invoked_via_alias.<locals>.foor   rÊ  )r	   r   rÑ  r+   r,   r/   rw   r   r×  r8   rÚ  r9   Ú(test_literal_unroll_is_invoked_via_alias‘  s    zHTestLiteralUnrollPassTriggering.test_literal_unroll_is_invoked_via_aliasc                 C   s@   t td�dd„ ƒ}|ƒ  |j|jd  }|  |jd t ¡ d S )Nrp   c                   S   s   d S rW   r8   r8   r8   r8   r9   rA      s    zVTestLiteralUnrollPassTriggering.test_literal_unroll_assess_empty_function.<locals>.foor   rÊ  rÕ  r×  r8   r8   r9   Ú)test_literal_unroll_assess_empty_functionŸ  s
    
zITestLiteralUnrollPassTriggering.test_literal_unroll_assess_empty_functionc                 C   sT   d}i }t |i |ƒ ttd�|d ƒ}|ƒ  |j|jd  }|  |jd t ¡ d S )Nzdef foo():
	passrp   rA   r   rÊ  )Úexecr   rÑ  r+   r,   rÖ  rw   r   )r3   rÆ   r>  rA   r6   r8   r8   r9   Ú"test_literal_unroll_not_in_globals¨  s    zBTestLiteralUnrollPassTriggering.test_literal_unroll_not_in_globalsc              	   C   sj  d}i }t |i |ƒ ttd�|d ƒ}|  tj¡�}|ƒ  W 5 Q R X |  dt|jƒ¡ i }t |dt	i|ƒ ttd�|d ƒ}|ƒ  |j
|jd  }|  |jd t ¡ ddlm} d	}i }t ||ƒi |ƒ ttd�|d
 ƒ}|ƒ  |j
|jd  }|  |jd t ¡ ddlm} d}i }t ||ƒi |ƒ ttd�|d
 ƒ}|ƒ  |j
|jd  }|  |jd t ¡ d S )Nz1def foo():
	for x in literal_unroll((1,)):
		passrp   rA   z$Untyped global name 'literal_unroll'r	   r   rÊ  )Údedentzó
            def gen():
                from numba import literal_unroll
                def foo():
                    for x in literal_unroll((1,)):
                        pass
                return foo
            bar = gen()
            r·   a  
            def gen():
                from numba import literal_unroll as something_else
                def foo():
                    for x in something_else((1,)):
                        pass
                return foo
            bar = gen()
            )rÞ  r   rÑ  rK   r   rï   rM   rN   rO   r	   r+   r,   r/   rw   r   Útextwraprà  )r3   rÆ   r>  rA   rð   r6   rà  r8   r8   r9   Ú&test_literal_unroll_globals_and_locals±  s>    ÿ		zFTestLiteralUnrollPassTriggering.test_literal_unroll_globals_and_localsN)	rR   rS   rT   rØ  rÙ  rÜ  rÝ  rß  râ  r8   r8   r8   r9   rÔ  w  s   		rÔ  Ú__main__)=Úcollectionsr   ÚnumpyrÑ   Znumba.tests.supportr   r   r   r   r‰  r   r   r	   r
   Z
numba.corer   r   r   Znumba.testingr   Znumba.core.extendingr   Znumba.core.compiler_machineryr   r   r   r   Znumba.core.compilerr   Znumba.core.untyped_passesr   r   r   r   r   r   r   r   Znumba.core.typed_passesr   r   r    r!   r"   Znumba.core.ir_utilsr#   r$   Znumba.core.types.functionsr%   rª  r)   rV   r`   rº   rv  r~  rÐ  rÑ  rÔ  rR   Úmainr8   r8   r8   r9   Ú<module>   sL   ((
            (  Pq
