U
    -eT                     @   s\   d dl Z d dlZd dlmZ d dlmZ G dd dZG dd dejZe	dkrXe
  dS )	    N)captured_stdout)IS_WIN32c                   @   s   e Zd ZdZdddZdS )MatplotlibBlockerzBlocks the import of matplotlib, so that doc examples that attempt to
    plot the output don't result in plots popping up and blocking testing.Nc                 C   s   |dkrd}t |d S )NZ
matplotlibz/Blocked import of matplotlib for test suite run)ImportError)selffullnamepathtargetmsg r   g/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/numba/tests/doc_examples/test_examples.py	find_spec   s    zMatplotlibBlocker.find_spec)N)__name__
__module____qualname____doc__r   r   r   r   r   r   
   s   r   c                       s|   e Zd Z f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  ZS )DocsExamplesTestc                    s   t  j|| t | _d S N)super__init__r   _mpl_blocker)r   argskwargs	__class__r   r   r      s    zDocsExamplesTest.__init__c                 C   s   t jd| j d S Nr   )sys	meta_pathinsertr   r   r   r   r   setUp   s    zDocsExamplesTest.setUpc                 C   s   t j| j d S r   )r   r   remover   r   r   r   r   tearDown   s    zDocsExamplesTest.tearDownc              	      s   t   ddlm} zddlm}m} d}W n tk
rD   d}Y nX dd l}ddlm	} |dddd	  |dd fd
d}|j
d|jd}| }	|dddd|d | }
t|
|	  |r|| |  W 5 Q R X d S )Nr   )default_timer)imshowshowTFjit)nopythonc                 S   sT   d}t | |}d}t|D ]4}|| | }|j|j |j|j  dkr|  S qdS )z
                Given the real and imaginary parts of a complex number,
                determine if it is a candidate for membership in the Mandelbrot
                set given a fixed number of iterations.
                r   y                      )complexrangerealimag)xyZ	max_itersiczr   r   r   mandel,   s    

z0DocsExamplesTest.test_mandelbrot.<locals>.mandelc                    s|   |j d }|j d }||  | }|| | }	t|D ]B}
| |
|  }t|D ](}|||	  } |||}||||
f< qLq4|S )Nr      )shaper,   )Zmin_xZmax_xZmin_yZmax_yimageZitersheightwidthZpixel_size_xZpixel_size_yr/   r-   r0   r.   colorr4   r   r   create_fractal=   s    

z8DocsExamplesTest.test_mandelbrot.<locals>.create_fractal)  i  dtypeg             ?g         )r   timeitr#   Zmatplotlib.pylabr$   r%   r   numpynumbar'   zerosZuint8print)r   timerr$   r%   Zhave_mplnpr'   r<   r7   ser   r;   r   test_mandelbrot    s*    

z DocsExamplesTest.test_mandelbrotc              	   C   sl   t  \ dd l}ddlm} |dgddd }|jd|jdd	d
}t| t||d W 5 Q R X d S )Nr   guvectorizez%void(float64[:], intp[:], float64[:])(n),()->(n)c                 S   sz   |d }d}d}t |D ]$}|| | 7 }|d7 }|| ||< qt |t| D ](}|| | | ||   7 }|| ||< qLd S )Nr           r5   )r,   len)aZ
window_arroutZwindow_widthZasumcountr1   r   r   r   	move_mean^   s    z7DocsExamplesTest.test_moving_average.<locals>.move_meanrA   r>      
      )r   rC   rD   rM   arangefloat64reshaperF   )r   rH   rM   rT   Zarrr   r   r   test_moving_averageW   s    
z$DocsExamplesTest.test_moving_averagec              	      s   t   dd l dd lddlm dd lddlm} d}d}fdd}|dd	d	d
 fdd}fdd}fdd}fdd}||}	|||}
j	|}j	|}|d d|||}||d|	|| ||d| |
|| W 5 Q R X d S )Nr   )repeatr&   r)   i@B c                    s     d|  d|  S )z?
                Control function using Numpy.
                 @皙	@)exprQ   brH   r   r   func_np~   s    z,DocsExamplesTest.test_nogil.<locals>.func_npz%void(double[:], double[:], double[:])T)r(   Znogilc                    s8   t t| D ]&} d||  d||   | |< qdS )z6
                Function under test.
                r]   r^   N)r,   rP   r_   )resultrQ   ra   r1   )mathr   r   inner_func_nb   s    z2DocsExamplesTest.test_nogil.<locals>.inner_func_nbc              	      sl   t |ddd  }| dk	r<|| s<t|| ft dt fdddd	d
d  |S )zM
                Benchmark *func* and print out its runtime.
                rA    )endNz{:>5.0f} msc                      s
    S r   r   r   r   funcr   r   r   <lambda>       z?DocsExamplesTest.test_nogil.<locals>.timefunc.<locals>.<lambda>   rU   )numberr\   r=   )rF   ljustZallcloseAssertionErrorformatmin)correctrI   rj   r   r   res)rH   r\   ri   r   timefunc   s    

  z-DocsExamplesTest.test_nogil.<locals>.timefuncc                    s    fdd}|S )zP
                Run the given function inside a single thread.
                c                     s.   t | d }j|jd} |f|   |S )Nr   r>   )rP   emptyrY   )r   lengthrd   )
inner_funcrH   r   r   rj      s    zDDocsExamplesTest.test_nogil.<locals>.make_singlethread.<locals>.funcr   )rx   rj   rb   )rx   r   make_singlethread   s    z6DocsExamplesTest.test_nogil.<locals>.make_singlethreadc                    s    fdd}|S )z
                Run the given function inside *numthreads* threads, splitting
                its arguments into equal-sized chunks.
                c                     s   t  d }j|jd}|f   | d   fddtD }fdd|D }|D ]}|  qf|D ]}|  qx|S )Nr   r>   r5   c                    s    g | ]  fd dD qS )c                    s$   g | ]}|  d     qS )r5   r   ).0arg)chunklenr1   r   r   
<listcomp>   s     zeDocsExamplesTest.test_nogil.<locals>.make_multithread.<locals>.func_mt.<locals>.<listcomp>.<listcomp>r   )rz   r   r|   )r1   r   r}      s   zZDocsExamplesTest.test_nogil.<locals>.make_multithread.<locals>.func_mt.<locals>.<listcomp>c                    s   g | ]}j  |d qS ))r	   r   )Thread)rz   chunk)rx   	threadingr   r   r}      s   )rP   rv   rY   r,   startjoin)r   rw   rd   chunksthreadsthread)rx   rH   
numthreadsr   r~   r   func_mt   s    


zFDocsExamplesTest.test_nogil.<locals>.make_multithread.<locals>.func_mtr   )rx   r   r   )rH   r   )rx   r   r   make_multithread   s    z5DocsExamplesTest.test_nogil.<locals>.make_multithreadznumpy (1 thread)znumba (1 thread)znumba (%d threads))
r   re   r   rB   r\   rC   rD   r'   randomZrand)r   r'   Znthreadssizerc   rf   ru   ry   r   Zfunc_nbZ
func_nb_mtrQ   ra   rs   r   )re   rH   r\   r   r   
test_nogilq   s.    
zDocsExamplesTest.test_nogilc              	   C   s>   t  . ddlm}m} ||||gdd }W 5 Q R X d S )Nr   )	vectorizerY   c                 S   s   | | S r   r   r/   r0   r   r   r   f   s    z8DocsExamplesTest.test_vectorize_one_signature.<locals>.f)r   rD   r   rY   )r   r   rY   r   r   r   r   test_vectorize_one_signature   s    z-DocsExamplesTest.test_vectorize_one_signaturec              	   C   s$  t   ddlm}m}m}m}m} dd l}|||||||||||||gdd }|d}|||}	| 	|	|j
 |dddddd	g}
|j|	|
 |dd
d}|||}	| 	|	|j
 |ddddddg}
|j|	|
 |ddd}|j|dd}|j|d
d}||}|j|d
d}| 	||j
 |ddddg}
|j||
 | 	||j
 |dddg}
|j||
 | 	||j
 |dd
ddgdddd	gddddgg}
|j||
 | 	||j
 |dd
ddgddddgddddgg}
|j||
 W 5 Q R X d S )Nr   )r   int32int64float32rY   c                 S   s   | | S r   r   r   r   r   r   r      s    z>DocsExamplesTest.test_vectorize_multiple_signatures.<locals>.f   rU   r)      rV   r5   rO   g?g?g333333?g?       @   rW   )Zaxis            &   	         )r   rD   r   r   r   r   rY   rC   rX   assertIsInstancendarrayarraytestingassert_array_equalZlinspaceZassert_allcloserZ   reduce
accumulate)r   r   r   r   r   rY   rH   r   rQ   rd   rs   result1result2Zresult3Zresult4r   r   r   "test_vectorize_multiple_signatures   sX    












z3DocsExamplesTest.test_vectorize_multiple_signaturesc           
   	   C   sN  t  < ddlm}m} dd l}||d d  ||d d  fgddd }|d}||d}| ||j |ddd	dd
g}|j	
|| |d
dd}||d}|||ddg}	|||ddg | ||j |dddgdddgg}|j	
|| | |	|j |dddgdddgg}|j	
|	| W 5 Q R X d S )Nr   rM   r   rN   c                 S   s(   t | jd D ]}| | | ||< qd S r   r,   r6   r/   r0   rt   r1   r   r   r   g*  s    z,DocsExamplesTest.test_guvectorize.<locals>.grm   rU   rW   r)   r   rV   rA      r         r            )r   rD   rM   r   rC   rX   r   r   r   r   r   rZ   )
r   rM   r   rH   r   rQ   rd   rs   r   r   r   r   r   test_guvectorize$  s(    
 



z!DocsExamplesTest.test_guvectorizec              	   C   s   t  v ddlm}m} dd l}||d d  ||d d  fgddd }|d}||d}| ||j | |d W 5 Q R X d S )	Nr   r   z
(n),()->()c                 S   s4   d}t | jd D ]}|| | | 7 }q||d< d S r   r   )r/   r0   rt   accr1   r   r   r   r   W  s    z:DocsExamplesTest.test_guvectorize_scalar_return.<locals>.grm   rU   rA   )	r   rD   rM   r   rC   rX   r   integerassertEqual)r   rM   r   rH   r   rQ   rd   r   r   r   test_guvectorize_scalar_returnQ  s     


z/DocsExamplesTest.test_guvectorize_scalar_returnc              	   C   sV  t  D ddlm}m} dd l}||d d  |d d  fgddd }|jd|jd}||}| ||j |dddgdddgdddgg}|j	
|| | ||j |d	d	d	gd	d	d	gd	d	d	gg}|j	
|| |jd|jd}||}t| | ||j |jd
d
d
gd
d
d
gd
d
d
gg|jd}|j	
|| | ||j |d	d	d	gd	d	d	gd	d	d	gg}|j	
|| ||d d  |d d  fgddddd }|jd|jd}||}t| | ||j |dddgdddgdddgg}|j	
|| | ||j |d	d	d	gd	d	d	gd	d	d	gg}|j	
|| W 5 Q R X d S )Nr   )rM   rY   z()->()c                 S   s   d| d< d|d< d S N      @r   @r   invalsoutvalsr   r   r   init_valuesn  s    z@DocsExamplesTest.test_guvectorize_overwrite.<locals>.init_values)rW   rW   )r6   r?   r   r   rO   r>   )r   )Zwritable_argsc                 S   s   d| d< d|d< d S r   r   r   r   r   r   r     s    )r   rD   rM   rY   rC   rE   r   r   r   r   r   r   rF   )r   rM   rY   rH   r   r   r   rs   r   r   r   test_guvectorize_overwriteh  s~    


z+DocsExamplesTest.test_guvectorize_overwritec              	   C   s>  t  , ddlm} |dd }|dd}t|j | |d trNdg}nd	g}| |j| |d
d}t|j | |d trddg}nd	dg}| |j| |dd}t|j | |d trddg}nd	dg}| |j| |dd }t|dd t|dd t|j dg}| |j| W 5 Q R X d S )Nr   )r   c                 S   s   | | S r   r   r   r   r   r   r     s    z2DocsExamplesTest.test_vectorize_dynamic.<locals>.frW   r)   r   zll->qll->lr@   r   dd->dr5   c                 S   s   | | S r   r   r`   r   r   r   r   	  s    z2DocsExamplesTest.test_vectorize_dynamic.<locals>.gg      @rU   )r   rD   r   rF   typesr   r   )r   r   r   rd   rs   r   r   r   r   test_vectorize_dynamic  s@    











z'DocsExamplesTest.test_vectorize_dynamicc              	   C   s^  t  L ddlm} dd l}|ddd }|jd|jd}d}||}|||| t|j |	dd	d
ddg}|j
|| trdg}ndg}| |j| |jd|jd}d}||}|||| t|j trddg}nddg}| |j| |jd|jd}d}||}|||| t| |	dddddg}|j
|| W 5 Q R X d S )Nr   rL   rN   c                 S   s(   t | jd D ]}| | | ||< qd S r   r   r   r   r   r   r      s    z4DocsExamplesTest.test_guvectorize_dynamic.<locals>.grm   r>   rV   r   r   r   r   zqq->qr   g@r   rU   rW   r)   r   )r   rD   rM   rC   rX   r   Z
zeros_likerF   r   r   r   r   r   r   double)r   rM   rH   r   r/   r0   rt   rs   r   r   r   test_guvectorize_dynamic  s@    







z)DocsExamplesTest.test_guvectorize_dynamic)r   r   r   r   r    r"   rK   r[   r   r   r   r   r   r   r   r   __classcell__r   r   r   r   r      s   7X
Q-iIr   __main__)r   ZunittestZnumba.tests.supportr   Znumba.core.configr   r   ZTestCaser   r   mainr   r   r   r   <module>   s   
    H