
    ܙd                         d dl Z d dlZd dlmZ  G d d          Z G d dej                  Zedk    r ej                     dS dS )    N)captured_stdoutc                       e Zd ZdZ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                 4    |dk    rd}t          |          d S )N
matplotlibz/Blocked import of matplotlib for test suite run)ImportError)selffullnamepathtargetmsgs        Flib/python3.11/site-packages/numba/tests/doc_examples/test_examples.py	find_speczMatplotlibBlocker.find_spec   s(    |##CCc""" $#    N)__name__
__module____qualname____doc__r    r   r   r   r   	   s4        N N# # # # # #r   r   c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )DocsExamplesTestc                 `     t                      j        |i | t                      | _        d S r   )super__init__r   _mpl_blocker)r	   argskwargs	__class__s      r   r   zDocsExamplesTest.__init__   s3    $)&)))-//r   c                 P    t           j                            d| j                   d S Nr   )sys	meta_pathinsertr   r	   s    r   setUpzDocsExamplesTest.setUp   s#    Q 122222r   c                 N    t           j                            | j                   d S r   )r"   r#   remover   r%   s    r   tearDownzDocsExamplesTest.tearDown   s!    T./////r   c           	         t                      5  ddlm} 	 ddlm}m} d}n# t          $ r d}Y nw xY wdd l}ddlm	}  |d          d              |d          fd	            }|
                    d
|j                  } |            }	 |dddd|d            |            }
t          |
|	z
             |r ||            |             d d d            d S # 1 swxY w Y   d S )Nr   )default_timer)imshowshowTFjit)nopythonc                     d}t          | |          }d}t          |          D ]1}||z  |z   }|j        |j        z  |j        |j        z  z   dk    r|c S 2d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zs         r   mandelz0DocsExamplesTest.test_mandelbrot.<locals>.mandel+   su     AaLLy)) ! !AA	A!&16/9a??  @ sr   c                     |j         d         }|j         d         }|| z
  |z  }||z
  |z  }	t          |          D ]8}
| |
|z  z   }t          |          D ]}|||	z  z   } |||          }||||
f<   9|S )Nr      )shaper5   )min_xmax_xmin_ymax_yimageitersheightwidthpixel_size_xpixel_size_yr8   r6   r9   r7   colorr>   s                  r   create_fractalz8DocsExamplesTest.test_mandelbrot.<locals>.create_fractal<   s    QA %6 %7u , ,A 1|#33D"6]] , ,$q<'77 &tT5 9 9&+ad,
 r   )  i  dtypeg       g      ?g         )r   timeitr+   matplotlib.pylabr,   r-   r   numpynumbar/   zerosuint8print)r	   timerr,   r-   have_mplnpr/   rM   rF   ser>   s              @r   test_mandelbrotz DocsExamplesTest.test_mandelbrot   s    3	 3	555555!99999999 ! ! ! !!!!!!!S$     S$      HH/rxH@@EAN4dC;;;A!a%LLL ug3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	s-   C!
#C!2C!2B"C!!C%(C%c                 D   t                      5  dd l}ddlm}  |dgd          d             }|                    d|j                                      dd	          }t          |           t           ||d
                     d d d            d S # 1 swxY w Y   d S )Nr   )guvectorizez%void(float64[:], intp[:], float64[:])z(n),()->(n)c                     |d         }d}d}t          |          D ]}|| |         z  }|dz  }||z  ||<   t          |t          |                     D ]!}|| |         | ||z
           z
  z  }||z  ||<   "d S )Nr   g        r@   )r5   len)a
window_arroutwindow_widthasumcountr;   s          r   	move_meanz7DocsExamplesTest.test_moving_average.<locals>.move_mean]   s      *!}|,, * *AAaDLDQJE!E\CFF|SVV44 * *AAaD1Q%5#666D!E\CFF* *r   rQ   rO      
      )r   rT   rU   r`   arangefloat64reshaperX   )r	   r[   r`   ri   arrs        r   test_moving_averagez$DocsExamplesTest.test_moving_averageV   s    	% 	%))))))[AB&( (
* 
*( (
* ))Bbj)1199!R@@C#JJJ))C##$$$-	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   A9BBBc                    t                      5  dd ldd lddlm dd lddlm} d}d}fd} |ddd	          fd
            }fd}fd}fd} ||          }	 |||          }
j        	                    |          }j        	                    |          } |d d|||          } ||d|	||            ||d|z  |
||           d d d            d S # 1 swxY w Y   d S )Nr   )repeatr.   r2   i@B c                 @                         d| z  d|z  z             S )z?
                Control function using Numpy.
                 @皙	@)exp)rc   br[   s     r   func_npz,DocsExamplesTest.test_nogil.<locals>.func_np}   s$     vvcAga/000r   z%void(double[:], double[:], double[:])T)r0   nogilc                     t          t          |                     D ]/}                    d||         z  d||         z  z             | |<   0dS )z6
                Function under test.
                ru   rv   N)r5   rb   rw   )resultrc   rx   r;   maths       r   inner_func_nbz2DocsExamplesTest.test_nogil.<locals>.inner_func_nb   s\     s6{{++ B BA $qtcAaDj)@ A AF1IIB Br   c                 4   t          |                    d          d            i }| "                    ||           sJ || f            t          d                    t	           fddd	                    d
z                       |S )zM
                Benchmark *func* and print out its runtime.
                rQ    )endNz{:>5.0f} msc                        i S r   r   )r   funcr   s   r   <lambda>z?DocsExamplesTest.test_nogil.<locals>.timefunc.<locals>.<lambda>   s    DD$1&11 r      rj   )numberrs   rN   )rX   ljustallcloseformatmin)correctr\   r   r   r   resr[   rs   s     ``` r   timefuncz-DocsExamplesTest.test_nogil.<locals>.timefunc   s     aggbkks++++ dD+F++&;;sG44DDsGnDDDm**3vv111111!A0G 0G 0G ,H ,HJN,O P P Q Q Q
r   c                       fd}|S )zP
                Run the given function inside a single thread.
                c                  |    t          | d                   }                    |j                  } |g| R   |S )Nr   rO   )rb   emptyrn   )r   lengthr|   
inner_funcr[   s      r   r   zDDocsExamplesTest.test_nogil.<locals>.make_singlethread.<locals>.func   sF     a\\FXXfBJX??FJv-----!Mr   r   )r   r   r[   s   ` r   make_singlethreadz6DocsExamplesTest.test_nogil.<locals>.make_singlethread   s)    " " " " " "
 r   c                       fd}|S )z
                Run the given function inside *numthreads* threads, splitting
                its arguments into equal-sized chunks.
                c                  J    t           d                   }                    |j                  }|f z    |	z   dz
  	z   fdt          	          D             }
fd|D             }|D ]}|                                 |D ]}|                                 |S )Nr   rO   r@   c                 0    g | ]fd D             S )c                 6    g | ]}|z  d z   z           S )r@   r   ).0argchunklenr;   s     r   
<listcomp>zeDocsExamplesTest.test_nogil.<locals>.make_multithread.<locals>.func_mt.<locals>.<listcomp>.<listcomp>   s<     % % %s1x<Q(0B#BC % % %r   r   )r   r;   r   r   s    @r   r   zZDocsExamplesTest.test_nogil.<locals>.make_multithread.<locals>.func_mt.<locals>.<listcomp>   sV     A A A)*% % % % %#% % % A A Ar   c                 >    g | ]}                     |           S ))r   r   )Thread)r   chunkr   	threadings     r   r   zZDocsExamplesTest.test_nogil.<locals>.make_multithread.<locals>.func_mt.<locals>.<listcomp>   s<     4 4 4#(  )//z/NN 4 4 4r   )rb   r   rn   r5   startjoin)r   r   r|   chunksthreadsthreadr   r   r[   
numthreadsr   s   `     @r   func_mtzFDocsExamplesTest.test_nogil.<locals>.make_multithread.<locals>.func_mt   s     a\\FXXfBJX??F"9t+D & 3a 7JFHA A A A A.3J.?.?A A AF4 4 4 4 4,24 4 4G") ' '") & &!Mr   r   )r   r   r   r[   r   s   `` r   make_multithreadz5DocsExamplesTest.test_nogil.<locals>.make_multithread   s4    
" " " " " " " "  r   znumpy (1 thread)znumba (1 thread)znumba (%d threads))
r   r}   r   rR   rs   rT   rU   r/   randomrand)r	   r/   nthreadssizery   r~   r   r   r   func_nb
func_nb_mtrc   rx   r   r}   r[   rs   r   s                 @@@@r   
test_nogilzDocsExamplesTest.test_nogilp   s;    T	Q T	QKKK%%%%%%!!!!!!HD1 1 1 1 1 S84  B B B B B     	 	 	 	 	     . ('66G))-BBJ	t$$A	t$$Aht%7!QGGGHW0'1a@@@HW2X=z1aPPPiT	Q T	Q T	Q T	Q T	Q T	Q T	Q T	Q T	Q T	Q T	Q T	Q T	Q T	Q T	Q T	Q T	Q T	Qs   CC''C+.C+c                 b   t                      5  ddlm}m} dd l} ||d d          ||d d          fgd          d             }|                    d          } ||d          }|                     ||j                   |                     |d           d d d            d S # 1 swxY w Y   d S )Nr   )r`   int64z
(n),()->()c                 j    d}t          | j        d                   D ]}|| |         |z   z  }||d<   d S r!   )r5   rA   )r8   r9   r   accr;   s        r   gz:DocsExamplesTest.test_guvectorize_scalar_return.<locals>.g   sD    qwqz** $ $A1Q4!8OCCAr   r   rj   rQ   )	r   rU   r`   r   rT   rm   assertIsInstanceintegerassertEqual)r	   r`   r   r[   r   rc   r|   s          r   test_guvectorize_scalar_returnz/DocsExamplesTest.test_guvectorize_scalar_return   s'    	) 	)00000000[58UE!!!H56EE  FE 		!AQq!WWF !!&"*555VR((()	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   BB$$B(+B()r   r   r   r   r&   r)   r^   rq   r   r   __classcell__)r   s   @r   r   r      s        0 0 0 0 03 3 30 0 04 4 4n% % %4UQ UQ UQp) ) ) ) ) ) )r   r   __main__)	r"   unittestnumba.tests.supportr   r   TestCaser   r   mainr   r   r   <module>r      s    


  / / / / / /# # # # # # # #J) J) J) J) J)x( J) J) J)Z zHMOOOOO r   