U
    iâËd£  ã                   @   sP   d dl Z d dlZd dlmZ G dd„ dƒZG dd„ dejƒZedkrLe ¡  dS )é    N)Úcaptured_stdoutc                   @   s   e Zd ZdZddd„ZdS )ÚMatplotlibBlockerz�Blocks 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
   ú_/home/sam/Atlas/atlas_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                       sL   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	‡  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,   r/   r-   Úcolor©r3   r
   r   Úcreate_fractal<   s    

z8DocsExamplesTest.test_mandelbrot.<locals>.create_fractal)éè  iÜ  ©Zdtypeg       Àg      ð?g      ð¿é   )r   Útimeitr"   Zmatplotlib.pylabr#   r$   r   ÚnumpyÚnumbar&   ZzerosZuint8Úprint)r   Útimerr#   r$   Zhave_mplÚnpr&   r;   r6   Ú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[:])z(n),()->(n)c                 S   sz   |d }d}d}t |ƒD ]$}|| | 7 }|d7 }|| ||< qt |t| ƒƒD ](}|| | | ||   7 }|| ||< qLd S )Nr   g        r4   )r+   Úlen)ÚaZ
window_arrÚoutZwindow_widthZasumÚcountr0   r
   r
   r   Ú	move_mean]   s    z7DocsExamplesTest.test_moving_average.<locals>.move_meanr>   r=   é   é
   é   )r   r@   rA   rH   ÚarangeÚfloat64ZreshaperB   )r   rD   rH   rM   Zarrr
   r
   r   Útest_moving_averageV   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)rJ   Úb©rD   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.
                rU   rV   N)r+   rI   rW   )ÚresultrJ   rX   r0   )Ú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.
                r>   ú )ÚendNz{:>5.0f} msc                      s
   ˆˆ ˆŽS r   r
   r
   ©r   Úfuncr   r
   r   Ú<lambda>˜   ó    z?DocsExamplesTest.test_nogil.<locals>.timefunc.<locals>.<lambda>é   rN   )ÚnumberrT   r<   )rB   ÚljustZallcloseÚAssertionErrorÚformatÚmin)ÚcorrectrE   ra   r   r   Úres)rD   rT   r`   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=   )rI   ÚemptyrR   )r   Úlengthr[   )Ú
inner_funcrD   r
   r   ra   Ÿ   s    zDDocsExamplesTest.test_nogil.<locals>.make_singlethread.<locals>.funcr
   )ro   ra   rY   )ro   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=   r4   c                    s    g | ]‰ ‡‡ fd d„ˆD ƒ‘qS )c                    s$   g | ]}|ˆˆ  ˆd  ˆ  … ‘qS )r4   r
   )Ú.0Úarg)Úchunklenr0   r
   r   Ú
<listcomp>±   s     zeDocsExamplesTest.test_nogil.<locals>.make_multithread.<locals>.func_mt.<locals>.<listcomp>.<listcomp>r
   )rq   ©r   rs   )r0   r   rt   ±   s   ÿÿzZDocsExamplesTest.test_nogil.<locals>.make_multithread.<locals>.func_mt.<locals>.<listcomp>c                    s   g | ]}ˆj ˆ |d �‘qS ))r   r   )ÚThread)rq   Úchunk)ro   Ú	threadingr
   r   rt   ´   s   ÿ)rI   rm   rR   r+   ÚstartÚjoin)r   rn   r[   ÚchunksÚthreadsÚthread)ro   rD   Ú
numthreadsrx   ru   r   Úfunc_mt«   s    
ÿÿ

zFDocsExamplesTest.test_nogil.<locals>.make_multithread.<locals>.func_mtr
   )ro   r~   r   )rD   rx   )ro   r~   r   Úmake_multithread¦   s    z5DocsExamplesTest.test_nogil.<locals>.make_multithreadznumpy (1 thread)znumba (1 thread)znumba (%d threads))
r   r\   rx   r?   rT   r@   rA   r&   ÚrandomZrand)r   r&   ZnthreadsÚsizerZ   r]   rl   rp   r€   Zfunc_nbZ
func_nb_mtrJ   rX   rj   r
   )r\   rD   rT   rx   r   Ú
test_nogilp   s.    ÿ
zDocsExamplesTest.test_nogilc              	   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   )rH   Úint64z
(n),()->()c                 S   s4   d}t | jd ƒD ]}|| | | 7 }q||d< d S r   )r+   r5   )r.   r/   rk   Úaccr0   r
   r
   r   ÚgÎ   s    z:DocsExamplesTest.test_guvectorize_scalar_return.<locals>.grd   rN   r>   )	r   rA   rH   r„   r@   rQ   ZassertIsInstanceÚintegerÚassertEqual)r   rH   r„   rD   r†   rJ   r[   r
   r
   r   Útest_guvectorize_scalar_returnÈ   s     


z/DocsExamplesTest.test_guvectorize_scalar_return)r   r   r   r   r   r!   rG   rS   rƒ   r‰   Ú__classcell__r
   r
   r   r   r      s   7Xr   Ú__main__)	r   ZunittestZnumba.tests.supportr   r   ZTestCaser   r   Úmainr
   r
   r
   r   Ú<module>   s   
 N