U
    iâËdUB  ã                   @   sr  d dl Zd dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ dddœZd	di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dAd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!G d2d3„ d3e
e	ƒZ"d4d5„ Z#d6d7„ Z$G d8d9„ d9e
e	ƒZ%G d:d;„ d;e	ƒZ&G d<d=„ d=e
e	ƒZ'G d>d?„ d?eƒ ƒZ(e)d@k�rne *¡  dS )Bé    N)ÚjitÚnjit)Útypes)ÚTestCaseÚMemoryLeakMixin)Útest_factoryFT)ÚnopythonÚforceobjr   c                    s   ‡ fdd„}|S )Nc                    s   d}ˆ | ƒD ]}||7 }q|S )Ng        © )ÚxÚresÚy©Úgen_funcr
   úT/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_generators.pyÚconsumer   s    
zmake_consumer.<locals>.consumerr
   )r   r   r
   r   r   Úmake_consumer   s    r   c                 c   s   t | ƒD ]
}|V  qd S ©N©Úrange)r   Úir
   r
   r   Úgen1   s    r   c                 c   s2   t | ƒD ]$}|V  t ddƒD ]}|| V  qqd S )Né   é   r   )r   r   Újr
   r
   r   Úgen2   s    r   c                 c   s   | V  | d V  | d V  d S )Ng      ø?ù              ð?r
   ©r   r
   r
   r   Úgen3#   s    
r   c                 c   s"   t dƒD ]}|V  || V  qd S )Nr   r   )r   r   Úzr   r
   r
   r   Úgen4*   s
    r    c                   c   s   d S r   r
   r
   r
   r
   r   Úgen52   s    r!   c                 c   s    | d }|d }|| V  qd S )Nr   é   r
   )ÚaÚbr   r   r
   r
   r   Úgen6:   s    r%   c                 c   s   t | jƒD ]}| | V  q
d S r   ©r   Úsize©Úarrr   r
   r
   r   Úgen7B   s    r*   r   r"   c                 c   s(   | }| V  |r|V  |r$| | V  d S r   r
   )r   r   r$   Zbbr
   r
   r   Úgen8I   s    r+   c                 c   s   t ƒ  | V  d S r   )Úobjectr   r
   r
   r   ÚgenobjR   s    r-   c                 C   s   dd„ | D ƒS )Nc                 s   s   | ]}|d  V  qdS )r"   Nr
   )Ú.0r   r
   r
   r   Ú	<genexpr>X   s     z(return_generator_expr.<locals>.<genexpr>r
   r   r
   r
   r   Úreturn_generator_exprW   s    r0   c                 c   s   t  | ¡D ]
}|V  q
d S r   )ÚnpZndindex)ÚshapeÚindr
   r
   r   Úgen_ndindex[   s    r4   c                 c   s   | j D ]
}|V  qd S r   )Zflat)r)   Úvalr
   r
   r   Úgen_flat`   s    
r6   c                 c   s   t  | ¡D ]
}|V  q
d S r   )r1   Zndenumerate)r)   Útupr
   r
   r   Úgen_ndenumeratee   s    r8   c                   c   s
   dV  d S )NTr
   r
   r
   r
   r   Úgen_boolj   s    r9   c                   c   s   d V  dV  d S )Nr   r
   r
   r
   r
   r   Úgen_unification_errorn   s    r:   c                  c   s   d} dV  | V } q
d S )Nr   r   r
   )r   r
   r
   r   Ú'gen_optional_and_type_unification_errors   s    r;   c                   c   s   dV  dV  d S )N)r   r"   )r   é   r
   r
   r
   r
   r   Úgen_changing_tuple_type{   s    r=   c                   c   s   dV  dV  dV  d S )Nr   g      @y        33333óP@r
   r
   r
   r
   r   Úgen_changing_number_type�   s    r>   c                   @   sd  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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/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dUdV„ Z-dWS )XÚTestGeneratorsc              	   C   s^   |   t|ƒt|ƒ¡ dd„ |D ƒ}dd„ |D ƒ}|   ||¡ |  t¡� t|ƒ W 5 Q R X d S )Nc                 S   s   g | ]}|‘qS r
   r
   ©r.   r   r
   r
   r   Ú
<listcomp>�   s     z2TestGenerators.check_generator.<locals>.<listcomp>c                 S   s   g | ]}|‘qS r
   r
   r@   r
   r
   r   rA   Ž   s     )ÚassertEqualÚnextÚassertRaisesÚStopIteration)ÚselfÚpygenÚcgenÚexpectedÚgotr
   r
   r   Úcheck_generator‰   s    zTestGenerators.check_generatorc                 K   s8   t }ttjff|Ž|ƒ}|dƒ}|dƒ}|  ||¡ d S ©Né   )r   r   r   Úint32rK   ©rF   ÚkwargsÚpyfuncÚcrrG   rH   r
   r
   r   Ú
check_gen1“   s
    zTestGenerators.check_gen1c                 C   s   | j f tŽ d S r   )rS   Únopython_flags©rF   r
   r
   r   Ú	test_gen1š   s    zTestGenerators.test_gen1c                 C   s   | j f tŽ d S r   )rS   Úforceobj_flagsrU   r
   r
   r   Útest_gen1_objmode�   s    z TestGenerators.test_gen1_objmodec                 K   s8   t }ttjff|Ž|ƒ}|dƒ}|dƒ}|  ||¡ d S rL   )r   r   r   rN   rK   rO   r
   r
   r   Ú
check_gen2    s
    zTestGenerators.check_gen2c                 C   s   | j f tŽ d S r   )rY   rT   rU   r
   r
   r   Ú	test_gen2§   s    zTestGenerators.test_gen2c                 C   s   | j f tŽ d S r   )rY   rW   rU   r
   r
   r   Útest_gen2_objmodeª   s    z TestGenerators.test_gen2_objmodec                 K   s8   t }ttjff|Ž|ƒ}|dƒ}|dƒ}|  ||¡ d S rL   )r   r   r   rN   rK   rO   r
   r
   r   Ú
check_gen3­   s
    zTestGenerators.check_gen3c                 C   s   | j f tŽ d S r   )r\   rT   rU   r
   r
   r   Ú	test_gen3´   s    zTestGenerators.test_gen3c                 C   s   | j f tŽ d S r   )r\   rW   rU   r
   r
   r   Útest_gen3_objmode·   s    z TestGenerators.test_gen3_objmodec                 K   sD   t }ttjfd f|Ž|ƒ}|dddƒ}|dddƒ}|  ||¡ d S )Nr   é   é   é   )r    r   r   rN   rK   rO   r
   r
   r   Ú
check_gen4º   s
    zTestGenerators.check_gen4c                 C   s   | j f tŽ d S r   )rb   rT   rU   r
   r
   r   Ú	test_gen4Á   s    zTestGenerators.test_gen4c                 C   s   | j f tŽ d S r   )rb   rW   rU   r
   r
   r   Útest_gen4_objmodeÄ   s    z TestGenerators.test_gen4_objmodec              	   C   s8   |   ¡ �}tdtŽtƒ W 5 Q R X |  dt|jƒ¡ d S )Nr
   z2Cannot type generator: it does not yield any value)r
   )ÚassertTypingErrorr   rT   r!   ÚassertInÚstrÚ	exception)rF   Úraisesr
   r
   r   Ú	test_gen5Ç   s
    
ÿzTestGenerators.test_gen5c              	   C   sB   t dtŽtƒƒ }|  t|ƒg ¡ |  t¡� t|ƒ W 5 Q R X d S ©Nr
   )r
   )r   rW   r!   rB   ÚlistrD   rE   rC   )rF   rH   r
   r
   r   Útest_gen5_objmodeÍ   s    z TestGenerators.test_gen5_objmodec                 K   sX   t tjfd f|Žtƒ}|ddƒ}g }tdƒD ]}| t|ƒ¡ q.|  |dgd ¡ d S )Nr"   r_   r`   r   é   )r   r   rN   r%   r   ÚappendrC   rB   )rF   rP   rR   rH   Úlr   r
   r
   r   Ú
check_gen6Ó   s    
zTestGenerators.check_gen6c                 C   s   | j f tŽ d S r   )rq   rT   rU   r
   r
   r   Ú	test_gen6Û   s    zTestGenerators.test_gen6c                 C   s   | j f tŽ d S r   )rq   rW   rU   r
   r
   r   Útest_gen6_objmodeÞ   s    z TestGenerators.test_gen6_objmodec                 K   sT   t }tt tjdd¡ff|Ž|ƒ}t ddd¡}|| ¡ ƒ}||ƒ}|  ||¡ d S )Nr   ÚCé
   ra   )	r*   r   r   ÚArrayZfloat64r1   ÚlinspaceÚcopyrK   )rF   rP   rQ   rR   r)   rG   rH   r
   r
   r   Ú
check_gen7á   s    zTestGenerators.check_gen7c                 C   s   | j f tŽ d S r   )ry   rT   rU   r
   r
   r   Ú	test_gen7é   s    zTestGenerators.test_gen7c                 C   s   | j f tŽ d S r   )ry   rW   rU   r
   r
   r   Útest_gen7_objmodeì   s    z TestGenerators.test_gen7_objmodec                    sN   t ‰tf |Žˆƒ‰ ‡ ‡‡fdd„}|ddƒ |dƒ |dd� |dd	d
� d S )Nc                     s   ˆ  ˆ| |Žˆ | |Ž¡ d S r   )rK   )ÚargsrP   ©ÚcfuncrQ   rF   r
   r   Úcheckó   s    ÿz(TestGenerators.check_gen8.<locals>.checkr"   r   r<   r_   )r   r`   T)r   r$   )r+   r   )rF   Zjit_argsr   r
   r}   r   Ú
check_gen8ï   s    

zTestGenerators.check_gen8c                 C   s   | j dd� d S )NT©r   ©r€   rU   r
   r
   r   Ú	test_gen8ü   s    zTestGenerators.test_gen8c                 C   s   | j dd� d S )NT)r	   r‚   rU   r
   r
   r   Útest_gen8_objmodeÿ   s    z TestGenerators.test_gen8_objmodec                 K   s.   t }td|Ž|ƒ}|ƒ }|ƒ }|  ||¡ d S rk   )r9   r   rK   rO   r
   r
   r   Ú
check_gen9  s
    zTestGenerators.check_gen9c                 C   s   | j f tŽ d S r   )r…   rT   rU   r
   r
   r   Ú	test_gen9	  s    zTestGenerators.test_gen9c                 C   s   | j f tŽ d S r   )r…   rW   rU   r
   r
   r   Útest_gen9_objmode  s    z TestGenerators.test_gen9_objmodec                 C   sH   t dd�|ƒ}t dd�t|ƒƒ}t|ƒ}|dƒ}|dƒ}|  ||¡ d S )NTr�   r_   )r   r   ZassertPreciseEqual)rF   r   rH   r~   rQ   rI   rJ   r
   r
   r   Úcheck_consume_generator  s    z&TestGenerators.check_consume_generatorc                 C   s   |   t¡ d S r   )rˆ   r   rU   r
   r
   r   Útest_consume_gen1  s    z TestGenerators.test_consume_gen1c                 C   s   |   t¡ d S r   )rˆ   r   rU   r
   r
   r   Útest_consume_gen2  s    z TestGenerators.test_consume_gen2c                 C   s   |   t¡ d S r   )rˆ   r   rU   r
   r
   r   Útest_consume_gen3  s    z TestGenerators.test_consume_gen3c                 K   sD   t }tt tjd¡ff|Ž|ƒ}d}||ƒ}||ƒ}|  ||¡ d S )Nr"   ©r"   r   )r4   r   r   ZUniTupleÚintprK   )rF   rP   rQ   rR   r2   rG   rH   r
   r
   r   Úcheck_ndindex"  s    zTestGenerators.check_ndindexc                 C   s   | j f tŽ d S r   )rŽ   rT   rU   r
   r
   r   Útest_ndindex*  s    zTestGenerators.test_ndindexc                 C   s   | j f tŽ d S r   )rŽ   rW   rU   r
   r
   r   Útest_ndindex_objmode-  s    z#TestGenerators.test_ndindex_objmodec                 K   s„   t t tjdd¡ff|Ž|ƒ}tjdtjd� d¡}|  ||ƒ||ƒ¡ t t tjdd¡ff|Ž|ƒ}|j}|  ||ƒ||ƒ¡ d S )Nr"   rt   r`   ©ZdtyperŒ   ÚA)	r   r   rv   rN   r1   ÚarangeZreshaperK   ÚT)rF   rQ   rP   rR   r)   ZcrAr
   r
   r   Úcheck_np_flat0  s    zTestGenerators.check_np_flatc                 C   s   | j tftŽ d S r   )r•   r6   rT   rU   r
   r
   r   Útest_np_flat8  s    zTestGenerators.test_np_flatc                 C   s   | j tftŽ d S r   )r•   r6   rW   rU   r
   r
   r   Útest_np_flat_objmode;  s    z#TestGenerators.test_np_flat_objmodec                 C   s   | j tftŽ d S r   )r•   r8   rT   rU   r
   r
   r   Útest_ndenumerate>  s    zTestGenerators.test_ndenumeratec                 C   s   | j tftŽ d S r   )r•   r8   rW   rU   r
   r
   r   Útest_ndenumerate_objmodeA  s    z'TestGenerators.test_ndenumerate_objmodec              	   C   s@   t }|  ¡ �}tdtŽ|ƒ W 5 Q R X d}|  |t|jƒ¡ d S )Nr
   zACan't unify yield type from the following types: complex128, none)r
   )r:   re   r   rT   rf   rg   rh   ©rF   rQ   ri   Úmsgr
   r
   r   Útest_type_unification_errorD  s
    
z*TestGenerators.test_type_unification_errorc              	   C   sH   t }|  ¡ �}tdtŽ|ƒ W 5 Q R X d}|  |tjj t|j	ƒ¡ d S )Nr
   zHCan't unify yield type from the following types: complex128, int%s, none)r
   )
r;   re   r   rT   rf   r   r�   Zbitwidthrg   rh   rš   r
   r
   r   Ú.test_optional_expansion_type_unification_errorM  s
    
z=TestGenerators.test_optional_expansion_type_unification_errorc                 C   s,   t }t|ƒ ƒ}tt|ƒƒ ƒ}|  ||¡ d S r   )r=   rl   r   rB   ©rF   rQ   rI   rJ   r
   r
   r   Útest_changing_tuple_typeV  s    
z'TestGenerators.test_changing_tuple_typec                 C   s,   t }t|ƒ ƒ}tt|ƒƒ ƒ}|  ||¡ d S r   )r>   rl   r   rB   rž   r
   r
   r   Útest_changing_number_type]  s    
z(TestGenerators.test_changing_number_typeN).Ú__name__Ú
__module__Ú__qualname__rK   rS   rV   rX   rY   rZ   r[   r\   r]   r^   rb   rc   rd   rj   rm   rq   rr   rs   ry   rz   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
   r
   r   r?   ˆ   sV   
		r?   c                 c   s   | D ]
}|V  qd S r   r
   )ZaryÚelemr
   r
   r   Únrt_gen0e  s    r¥   c                 c   s$   t | |ƒD ]\}}|V  |V  q
d S r   )Úzip)Zary1Zary2Úe1Úe2r
   r
   r   Únrt_gen1j  s    r©   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestNrtArrayGenc                 C   sf   t }tdd�|ƒ}t d¡}| ¡ }t||ƒƒ}t||ƒƒ}tj ||¡ |  ||¡ |  	||¡ d S )NTr�   ru   )
r¥   r   r1   r“   rx   rl   ÚtestingÚassert_equalrB   ÚassertRefCountEqual)rF   rG   rH   Úpy_aryÚc_aryÚpy_resÚc_resr
   r
   r   Útest_nrt_gen0q  s    
zTestNrtArrayGen.test_nrt_gen0c           	      C   s”   t }tdd�|ƒ}t d¡}|d }| ¡ }| ¡ }t|||ƒƒ}t|||ƒƒ}tj ||¡ tj ||¡ |  ||¡ |  	||¡ |  	||¡ d S )NTr�   ru   éd   )
r©   r   r1   r“   rx   rl   r«   r¬   rB   r­   )	rF   rG   rH   Zpy_ary1Zpy_ary2Zc_ary1Zc_ary2r°   r±   r
   r
   r   Útest_nrt_gen1€  s    
zTestNrtArrayGen.test_nrt_gen1c                 C   s   |   ¡  |  ¡  dS )a2  
        Issue #1163 is observed when two generator with NRT object arguments
        is ran in sequence.  The first one does a invalid free and corrupts
        the NRT memory subsystem.  The second generator is likely to segfault
        due to corrupted NRT data structure (an invalid MemInfo).
        N)r²   r´   rU   r
   r
   r   Útest_combine_gen0_gen1”  s    z&TestNrtArrayGen.test_combine_gen0_gen1c           	   	   C   s®   t }tdd�|ƒ}t d¡}| ¡ }||ƒ}||ƒ}t|ƒ}t|ƒ}|  t¡� t|ƒ}W 5 Q R X |  t¡� t|ƒ}W 5 Q R X ~~tj 	||¡ |  
||¡ |  ||¡ dS )z/
        Test cleanup on StopIteration
        Tr�   r   N)r¥   r   r1   r“   rx   rC   rD   rE   r«   r¬   rB   r­   )	rF   rG   rH   r®   r¯   Úpy_iterÚc_iterr°   r±   r
   r
   r   Útest_nrt_gen0_stop_iterationž  s"    
z,TestNrtArrayGen.test_nrt_gen0_stop_iterationc                 C   sV   t }tdd�|ƒ}t d¡}| ¡ }||ƒ}||ƒ}~~tj ||¡ |  ||¡ dS )zj
        Test cleanup for a initialized but never iterated (never call next())
        generator.
        Tr�   r   N)r¥   r   r1   r“   rx   r«   r¬   r­   )rF   rG   rH   r®   r¯   r¶   r·   r
   r
   r   Útest_nrt_gen0_no_iter¼  s    
z%TestNrtArrayGen.test_nrt_gen0_no_iterN)r¡   r¢   r£   r²   r´   rµ   r¸   r¹   r
   r
   r
   r   rª   p  s
   
rª   c                   @   s*   e Zd Zdd„ Zejdd„ ƒZdd„ ZdS )ÚTestNrtNestedGenc           
      C   sœ   dd„ }dd„ }t  d¡}| ¡ }||ƒ|ƒ\}}tdd�|tdd�|ƒƒƒ}||ƒ\}}	|  ||¡ |  ||¡ |  |	|¡ t j ||¡ |  ||¡ d S )Nc                 s   s   t | jƒD ]
}| V  q
d S r   r&   r(   r
   r
   r   Úgen0×  s    z2TestNrtNestedGen.test_nrt_nested_gen.<locals>.gen0c                    s   ‡ fdd„}|S )Nc                    s(   t  | ¡}ˆ | ƒD ]}|| }q|| fS r   )r1   Z
zeros_like)r)   Úoutr   ©r»   r
   r   r   Ü  s    

zCTestNrtNestedGen.test_nrt_nested_gen.<locals>.factory.<locals>.gen1r
   ©r»   r   r
   r½   r   ÚfactoryÛ  s    z5TestNrtNestedGen.test_nrt_nested_gen.<locals>.factoryru   Tr�   )	r1   r“   rx   r   ÚassertIsNotÚassertIsr«   r¬   r­   )
rF   r»   r¿   Úpy_arrÚc_arrr°   Úpy_oldÚc_genr±   Úc_oldr
   r
   r   Útest_nrt_nested_genÕ  s    	
z$TestNrtNestedGen.test_nrt_nested_genc                 C   s†   dd„ }dd„ }t  d¡}| ¡ }||ƒ|ƒ}tdd�|tdd�|ƒƒƒ}||ƒ}|  ||¡ |  ||¡ |  ||¡ |  ||¡ d S )Nc                 s   s
   | V  d S r   r
   )r)   r
   r
   r   r»   ú  s    z8TestNrtNestedGen.test_nrt_nested_gen_refct.<locals>.gen0c                    s   ‡ fdd„}|S )Nc                    s   ˆ | ƒD ]
}|  S d S r   r
   )r)   r¼   r½   r
   r   r   þ  s    zITestNrtNestedGen.test_nrt_nested_gen_refct.<locals>.factory.<locals>.gen1r
   r¾   r
   r½   r   r¿   ý  s    z;TestNrtNestedGen.test_nrt_nested_gen_refct.<locals>.factoryru   Tr�   )r1   r“   rx   r   rÀ   rÁ   r­   )rF   r»   r¿   rÂ   rÃ   rÄ   rÅ   rÆ   r
   r
   r   Útest_nrt_nested_gen_refctø  s    
z*TestNrtNestedGen.test_nrt_nested_gen_refctc                 C   sL   dd„ fdd„}|ƒ }|t dd�ƒ}t|dƒƒ}t|dƒƒ}|  ||¡ dS )	z/
        Test nesting three generators
        c                 S   s   | S r   r
   r   r
   r
   r   Ú<lambda>  ó    z?TestNrtNestedGen.test_nrt_nested_nopython_gen.<locals>.<lambda>c                    s0   | dd„ ƒ‰| ‡fdd„ƒ‰ | ‡ fdd„ƒ}|S )Nc                 s   s,   t |ƒD ]}| | V  | |  |7  < qd S r   r   )r#   Únr   r
   r
   r   Úfoo  s    
zKTestNrtNestedGen.test_nrt_nested_nopython_gen.<locals>.factory.<locals>.fooc                 3   sB   t  | ¡}ˆ || ƒD ]}|d V  qt|jƒD ]}|| V  q.d S )Nr"   )r1   r“   r   r'   )rË   r#   r   )rÌ   r
   r   Úbar  s
    
zKTestNrtNestedGen.test_nrt_nested_nopython_gen.<locals>.factory.<locals>.barc                 3   s   ˆ | ƒD ]}|| V  qd S r   r
   )rË   r   )rÍ   r
   r   Úcat$  s    zKTestNrtNestedGen.test_nrt_nested_nopython_gen.<locals>.factory.<locals>.catr
   )ZdecorrÎ   r
   )rÍ   rÌ   r   r¿     s    
z>TestNrtNestedGen.test_nrt_nested_nopython_gen.<locals>.factoryTr�   ru   N)r   rl   rB   )rF   r¿   Úpy_genrÅ   r°   r±   r
   r
   r   Útest_nrt_nested_nopython_gen  s    z-TestNrtNestedGen.test_nrt_nested_nopython_genN)r¡   r¢   r£   rÇ   ÚunittestZexpectedFailurerÈ   rÐ   r
   r
   r
   r   rº   Ô  s   #
rº   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestGeneratorWithNRTc                 C   s`   t dd�dd„ ƒ}t|dƒƒ}|  t|ƒd¡ t d¡}d|dd…< |D ]}tj ||¡ qHdS )	z9
        Missing environment for returning array
        Tr�   c                 s   s.   t | ƒD ] }t d¡}d|d d …< |V  qd S )Nr   é   )r   r1   Úempty)rË   r   Zvecr
   r
   r   Úrandom_directions:  s    
z?TestGeneratorWithNRT.test_issue_1254.<locals>.random_directionsr_   r   rÓ   N)r   rl   rB   Úlenr1   rÔ   r«   r¬   )rF   rÕ   ÚoutputsÚexpectrJ   r
   r
   r   Útest_issue_12545  s    

z$TestGeneratorWithNRT.test_issue_1254c                    s”   dd„ ‰t dd�ˆƒ‰ tˆdddƒƒ}tˆ dddƒƒ}|  ||¡ ‡fdd	„}t dd�‡ fd
d„ƒ}d}dd|f}||ƒ}||ƒ}tj ||¡ dS )zM
        Double-free for locally allocated, non escaping NRT objects
        c                 s   s&   t  | ||¡}|d V  |d V  d S )Nr   r   )r1   rw   )ÚrminÚrmaxÚnrr#   r
   r
   r   rÏ   N  s    
z4TestGeneratorWithNRT.test_issue_1265.<locals>.py_genTr�   éþÿÿÿr"   r³   c                    s@   | \}}}t j|t jd�}tˆ |||ƒƒD ]\}}|||< q*|S ©Nr‘   ©r1   rÔ   Z
complex128Ú	enumerate©r|   rÚ   rÛ   rÜ   Zpointsr   Úc)rÏ   r
   r   Ú	py_driverZ  s
    

z7TestGeneratorWithNRT.test_issue_1265.<locals>.py_driverc                    s@   | \}}}t j|t jd�}tˆ |||ƒƒD ]\}}|||< q*|S rÞ   rß   rá   )rÅ   r
   r   Úc_driverb  s
    

z6TestGeneratorWithNRT.test_issue_1265.<locals>.c_driveréÿÿÿÿN)r   rl   rB   r1   r«   r¬   )rF   r°   r±   rã   rä   rË   Zpatchesr
   )rÅ   rÏ   r   Útest_issue_1265I  s    
z$TestGeneratorWithNRT.test_issue_1265c                    sF   d‰t ‡fdd„ƒ‰ t ‡ fdd„ƒ‰t ‡fdd„ƒ}|  |ƒ ˆ¡ dS )	z-
        Incorrect return data model
        l   ï>[= c                   3   s
   ˆ V  d S r   r
   r
   )Úmagicr
   r   Ú	generatorz  s    z7TestGeneratorWithNRT.test_issue_1808.<locals>.generatorc                      s   ˆ ƒ S r   r
   r
   )rè   r
   r   Úget_generator~  s    z;TestGeneratorWithNRT.test_issue_1808.<locals>.get_generatorc                     s   d} ˆ ƒ D ]}| |7 } q
| S )Nr   r
   )r¼   r   )ré   r
   r   Úmain‚  s    

z2TestGeneratorWithNRT.test_issue_1808.<locals>.mainN)r   rB   )rF   rê   r
   )rè   ré   rç   r   Útest_issue_1808t  s    z$TestGeneratorWithNRT.test_issue_1808N)r¡   r¢   r£   rÙ   ræ   rë   r
   r
   r
   r   rÒ   4  s   +rÒ   c                	   @   s<   e Zd Zejdejejejgejejddd… gdd�Z	dS )ÚTestGeneratorModelNr   F)r   Z
yield_typeZ	arg_typesZstate_typesZhas_finalizer)
r¡   r¢   r£   r   Ú	GeneratorrN   Zint64Zfloat32r�   Zfe_typer
   r
   r
   r   rì   �  s
   

ýrì   Ú__main__)r   r"   F)+Únumpyr1   rÑ   Znumbar   r   Z
numba.corer   Znumba.tests.supportr   r   Znumba.core.datamodel.testingr   rW   rT   r   r   r   r   r    r!   r%   r*   r+   r-   r0   r4   r6   r8   r9   r:   r;   r=   r>   r?   r¥   r©   rª   rº   rÒ   rì   r¡   rê   r
   r
   r
   r   Ú<module>   sH   


	 ^d`Y
