o
    i:\                     @   sn   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 G dd dZ	G dd deZ
ed	kr5e  dS dS )
    N)TestCasecaptured_stdout)IS_WIN32)numpy_versionc                   @   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 )N
matplotlibz/Blocked import of matplotlib for test suite run)ImportError)selffullnamepathtargetmsg r   d/home/ubuntu/transcripts/venv/lib/python3.10/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dd Zdd Z  ZS )DocsExamplesTestc                    s   t  j|i | t | _d S r   )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  s ddlm} zddlm}m} d}W n ty!   d}Y nw 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|
|	  |rn|| |  W d    d S W d    d S 1 syw   Y  d S )Nr   )default_timer)imshowshowTFjitnopythonc                 S   sT   d}t | |}d}t|D ]}|| | }|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y	max_itersiczr   r   r   mandel.   s   
z0DocsExamplesTest.test_mandelbrot.<locals>.mandelc                    s|   |j d }|j d }||  | }|| | }	t|D ]!}
| |
|  }t|D ]}|||	  } |||}||||
f< q&q|S )Nr      )shaper0   )min_xmax_xmin_ymax_yimageitersheightwidthpixel_size_xpixel_size_yr3   r1   r4   r2   colorr9   r   r   create_fractal?   s   

z8DocsExamplesTest.test_mandelbrot.<locals>.create_fractal)  i  dtypeg             ?g         )r   timeitr&   matplotlib.pylabr'   r(   r   numpynumbar*   zerosuint8print)r	   timerr'   r(   have_mplnpr*   rH   r@   ser   rG   r   test_mandelbrot"   s2   
1"z DocsExamplesTest.test_mandelbrotc                 C   s   t  4 dd l}ddlm} |dgddd }|jd|jdd	d
}t| t||d W d    d S 1 s:w   Y  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 }|| ||< q&d S )Nr           r:   )r0   len)a
window_arroutwindow_widthasumcountr6   r   r   r   	move_mean`   s   z7DocsExamplesTest.test_moving_average.<locals>.move_meanrM   rJ      
      )r   rP   rQ   r\   arangefloat64reshaperT   )r	   rW   r\   rf   arrr   r   r   test_moving_averageY   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 d    d S 1 sw   Y  d S )Nr   )repeatr)   r-   i@B c                    s     d|  d|  S )z?
                Control function using Numpy.
                 @皙	@)expr`   brW   r   r   func_np   s   z,DocsExamplesTest.test_nogil.<locals>.func_npz%void(double[:], double[:], double[:])T)r,   nogilc                    s8   t t| D ]} d||  d||   | |< qdS )z6
                Function under test.
                rp   rq   N)r0   r_   rr   )resultr`   rt   r6   )mathr   r   inner_func_nb   s   $z2DocsExamplesTest.test_nogil.<locals>.inner_func_nbc              	      sp   t |ddd  i }| dur || s J || ft dt fdddd	d
d  |S )zM
                Benchmark *func* and print out its runtime.
                rM    )endNz{:>5.0f} msc                      s    i S r   r   r   r   funcr   r   r   <lambda>   s    z?DocsExamplesTest.test_nogil.<locals>.timefunc.<locals>.<lambda>   rg   )numberro   rI   )rT   ljustallcloseformatmin)correctrX   r~   r   r   res)rW   ro   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                     s0   t | d }j|jd} |g| R   |S )Nr   rJ   )r_   emptyrk   )r   lengthrx   )
inner_funcrW   r   r   r~      s   zDDocsExamplesTest.test_nogil.<locals>.make_singlethread.<locals>.funcr   )r   r~   ru   )r   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 ]}|  q3|D ]}|  q<|S )Nr   rJ   r:   c                    s    g | ]  fd dD qS )c                    s$   g | ]}|  d     qS )r:   r   ).0arg)chunklenr6   r   r   
<listcomp>   s   $ zeDocsExamplesTest.test_nogil.<locals>.make_multithread.<locals>.func_mt.<locals>.<listcomp>.<listcomp>r   )r   r   r   )r6   r   r      s
    
zZDocsExamplesTest.test_nogil.<locals>.make_multithread.<locals>.func_mt.<locals>.<listcomp>c                    s   g | ]	}j  |d qS ))r   r   )Thread)r   chunk)r   	threadingr   r   r      s    )r_   r   rk   r0   startjoin)r   r   rx   chunksthreadsthread)r   rW   
numthreadsr   r   r   func_mt   s   


zFDocsExamplesTest.test_nogil.<locals>.make_multithread.<locals>.func_mtr   )r   r   r   )rW   r   )r   r   r   make_multithread   s   z5DocsExamplesTest.test_nogil.<locals>.make_multithreadznumpy (1 thread)znumba (1 thread)znumba (%d threads))
r   ry   r   rN   ro   rP   rQ   r*   randomrand)r	   r*   nthreadssizerv   rz   r   r   r   func_nb
func_nb_mtr`   rt   r   r   )ry   rW   ro   r   r   
test_nogils   s0   
"zDocsExamplesTest.test_nogilc                 C   sT   t   ddlm}m} ||||gdd }W d    d S 1 s#w   Y  d S )Nr   )	vectorizerk   c                 S      | | S r   r   r3   r4   r   r   r   f      z8DocsExamplesTest.test_vectorize_one_signature.<locals>.f)r   rQ   r   rk   )r	   r   rk   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
 |g d}
|j|	|
 |ddd}|||}	| 	|	|j
 |g d}
|j|	|
 |d	d
d}|j|dd}|j|dd}||}|j|dd}| 	||j
 |g d}
|j||
 | 	||j
 |g d}
|j||
 | 	||j
 |g dg dg dg}
|j||
 | 	||j
 |g dg dg dg}
|j||
 W d    d S 1 sw   Y  d S )Nr   )r   int32int64float32rk   c                 S   r   r   r   r   r   r   r   r      s   z>DocsExamplesTest.test_vectorize_multiple_signatures.<locals>.f   )r   rg   r-   r      rh   r:   )r^   g?g?g333333?g?       @   ri   r-   )axis)r            )r      &   )r   r:   rg   ri   )r-   r   r   rh   )r   r:   ri   r   )r-   	   r   r   )r         r   )r   rQ   r   r   r   r   rk   rP   rj   assertIsInstancendarrayarraytestingassert_array_equallinspaceassert_allcloserl   reduce
accumulate)r	   r   r   r   r   rk   rW   r   r`   rx   r   result1result2result3result4r   r   r   "test_vectorize_multiple_signatures   sZ   





"z3DocsExamplesTest.test_vectorize_multiple_signaturesc           
      C   sT  t   ddlm}m} dd l}||d d  ||d d  fgddd }|d}||d}| ||j |g d}|j	
|| |d	dd
}||d}|||ddg}	|||ddg | ||j |g dg dg}|j	
|| | |	|j |g dg dg}|j	
|	| W d    d S 1 sw   Y  d S )Nr   r\   r   r]   c                 S   (   t | jd D ]
}| | | ||< qd S r   r0   r;   r3   r4   r   r6   r   r   r   g,     z,DocsExamplesTest.test_guvectorize.<locals>.gr   rg   rg   ri   r-   r   r   r   ri   rh   rM   )rh      r   )      r   )         )r   rQ   r\   r   rP   rj   r   r   r   r   r   rl   )
r	   r\   r   rW   r   r`   rx   r   r   r   r   r   r   test_guvectorize&  s*    



"z!DocsExamplesTest.test_guvectorizec                 C   s   t  A ddlm}m} dd l}||d d  ||d d  fgddd }|d}||d}| ||j | |d W d    d S 1 sGw   Y  d S )	Nr   r   z
(n),()->()c                 S   s4   d}t | jd D ]
}|| | | 7 }q	||d< d S r   r   )r3   r4   r   accr6   r   r   r   r   Y  s   z:DocsExamplesTest.test_guvectorize_scalar_return.<locals>.gr   rg   rM   )	r   rQ   r\   r   rP   rj   r   integerassertEqual)r	   r\   r   rW   r   r`   rx   r   r   r   test_guvectorize_scalar_returnS  s    


"z/DocsExamplesTest.test_guvectorize_scalar_returnc                    s   t  ? dd l}ddlm}m} |ddd  |dd fdd	}|jd
dd}||}||| | || W d    d S 1 sEw   Y  d S )Nr   r*   r\   (n)->(n)c                 S   $   t | jd D ]}| | ||< qd S r   r   r3   r   r6   r   r   r   copyq     z3DocsExamplesTest.test_guvectorize_jit.<locals>.copyTr+   c                        | | d S r   r   r3   r   r   r   r   jit_fnv     z5DocsExamplesTest.test_guvectorize_jit.<locals>.jit_fnr   i4rJ   )r   rP   rQ   r*   r\   rj   
zeros_likeassertPreciseEqual)r	   rW   r*   r\   r   r3   r   r   r   r   test_guvectorize_jitj  s   


"z%DocsExamplesTest.test_guvectorize_jitc              	      s   t  U dd l}ddlm}m} |ddd  |dd fdd	}|d
}|d}| t}||| W d    n1 sBw   Y  | 	dt
|j W d    d S 1 s[w   Y  d S )Nr   r   r   c                 S   r   r   r   r   r   r   r   r     r   z8DocsExamplesTest.test_guvectorize_jit_fail.<locals>.copyTr+   c                    r   r   r   r   r   r   r   r     r   z:DocsExamplesTest.test_guvectorize_jit_fail.<locals>.jit_fn)r:   r   )r   z&Loop and array shapes are incompatible)r   rP   rQ   r*   r\   onesr   assertRaises
ValueErrorassertInstr	exception)r	   rW   r*   r\   r   r3   r   raisesr   r   r   test_guvectorize_jit_fail  s    


"z*DocsExamplesTest.test_guvectorize_jit_failc                 C   sJ  t   ddlm}m} dd l}||d d  |d d  fgddd }|jd|jd}||}| ||j |g dg dg dg}|j	
|| | ||j |g d	g d	g d	g}|j	
|| |jd|jd}||}t| | ||j |jg d
g d
g d
g|jd}|j	
|| | ||j |g d	g d	g d	g}|j	
|| ||d d  |d d  fgddddd }|jd|jd}||}t| | ||j |g dg dg dg}|j	
|| | ||j |g d	g d	g d	g}|j	
|| W d    d S 1 sw   Y  d S )Nr   )r\   rk   z()->()c                 S      d| d< d|d< d S N      @r   @r   invalsoutvalsr   r   r   init_values  s   z@DocsExamplesTest.test_guvectorize_overwrite.<locals>.init_values)ri   ri   )r;   rK   )r   r   r   )r   r   r   )r^   r^   r^   rJ   )r   )writable_argsc                 S   r   r   r   r   r   r   r   r     s   )r   rQ   r\   rk   rP   rR   r   r   r   r   r   r   rT   )r	   r\   rk   rW   r   r   r   r   r   r   r   test_guvectorize_overwrite  s   


$z+DocsExamplesTest.test_guvectorize_overwritec                 C   s  t   ddlm} |dd }|dd}t|j | |d tr.tdk r*d	g}nd
g}ndg}| |j| |dd}t|j | |d trXtdk rSd	dg}n	d
dg}nddg}| |j| |dd}t|j | |d trtdk r~d	dg}n	d
dg}nddg}| |j| |dd }t|dd t|dd t|j dg}| |j| W d    d S 1 sw   Y  d S )Nr   )r   c                 S   s   | | S r   r   r   r   r   r   r     r   z2DocsExamplesTest.test_vectorize_dynamic.<locals>.fri   r-   r   )rg   r   zll->qqq->qll->lrL   r   dd->dr:   c                 S   s   | | S r   r   rs   r   r   r   r   D  r   z2DocsExamplesTest.test_vectorize_dynamic.<locals>.gg      @rg   )r   rQ   r   rT   typesr   r   r   )r	   r   r   rx   r   r   r   r   r   test_vectorize_dynamic  sN   












"z'DocsExamplesTest.test_vectorize_dynamicc                 C   sf  t   ddlm} dd l}|ddd }|jd|jd}d}||}|||| t|j |	g d	}|j
|| trDd
g}ndg}| |j| |jd|jd}d}||}|||| t|j trod
dg}nddg}| |j| |jd|jd}d}||}|||| t| |	g d}|j
|| W d    d S 1 sw   Y  d S )Nr   r[   r]   c                 S   r   r   r   r   r   r   r   r   [  r   z4DocsExamplesTest.test_guvectorize_dynamic.<locals>.gr   rJ   rh   )rh   r   r   r   r   r   r   g@r   rg   r   )r   rQ   r\   rP   rj   r   r   rT   r   r   r   r   r   r   double)r	   r\   rW   r   r3   r4   r   r   r   r   r   test_guvectorize_dynamicU  sB   






"z)DocsExamplesTest.test_guvectorize_dynamic)r   r   r   r   r#   r%   rZ   rn   r   r   r   r   r   r   r   r   r   r  __classcell__r   r   r   r   r      s     7X
Q-iRr   __main__)r   unittestnumba.tests.supportr   r   numba.core.configr   numba.np.numpy_supportr   r   r   r   mainr   r   r   r   <module>   s   
     