U
    9%eUB                     @   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
   Z/var/www/html/Darija-Ai-API/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        33333P@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_driverN)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
