
    xKg:\                         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      Z	 G d de      Z
ed	k(  r ej                          yy)
    N)TestCasecaptured_stdout)IS_WIN32)numpy_versionc                       e Zd ZdZddZy)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                 (    |dk(  rd}t        |      y )N
matplotlibz/Blocked import of matplotlib for test suite run)ImportError)selffullnamepathtargetmsgs        j/home/alanp/www/video.onchill/myenv/lib/python3.12/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      s    N#r   r   c                   r     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Z xZS )DocsExamplesTestc                 B    t        |   |i | t               | _        y r   )super__init__r   _mpl_blocker)r   argskwargs	__class__s      r   r   zDocsExamplesTest.__init__   s     $)&)-/r   c                 X    t         j                  j                  d| j                         y Nr   )sys	meta_pathinsertr   r   s    r   setUpzDocsExamplesTest.setUp   s    Q 1 12r   c                 V    t         j                  j                  | j                         y 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}dd l}ddlm	}  |d      d         |d      fd	       }|j                  d
|j                        } |       }	 |dddd|d        |       }
t        |
|	z
         |r |                d d d        y # t        $ r d}Y w xY w# 1 sw Y   y xY w)Nr   )default_timer)imshowshowTFjitnopythonc                     d}t        | |      }d}t        |      D ]D  }||z  |z   }|j                  |j                  z  |j                  |j                  z  z   dk\  sB|c S  y)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.   sd     AaLy)AA	A!&&166/9a?  *
 r   c                     |j                   d   }|j                   d   }|| z
  |z  }||z
  |z  }	t        |      D ]3  }
| |
|z  z   }t        |      D ]  }|||	z  z   } |||      }||||
f<    5 |S )Nr      )shaper9   )min_xmax_xmin_ymax_yimageitersheightwidthpixel_size_xpixel_size_yr<   r:   r=   r;   colorrB   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&+ad + & r   )  i  dtypeg             ?g         )r   timeitr.   matplotlib.pylabr/   r0   r   numpynumbar2   zerosuint8print)r   timerr/   r0   have_mplnpr2   rQ   rJ   serB   s              @r   test_mandelbrotz DocsExamplesTest.test_mandelbrot"   s    5!9 !$    $   HH/rxxH@EA4dC;A!a%Lug   ! ! s.   B9
B(BB9(B63B95B66B99Cc                 
   t               5  dd l}ddlm}  |dgd      d        }|j	                  d|j
                        j                  dd	      }t        |       t         ||d
             d d d        y # 1 sw Y   y xY w)Nr   guvectorizez%void(float64[:], intp[:], float64[:])(n),()->(n)c                     |d   }d}d}t        |      D ]  }|| |   z  }|dz  }||z  ||<    t        |t        |             D ]  }|| |   | ||z
     z
  z  }||z  ||<    y )Nr           rD   )r9   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F - |SV4AAaD1Q%5#666D!E\CF 5r   rV   rS      
      )r   rY   rZ   rf   arangefloat64reshaper]   )r   r`   rf   rq   arrs        r   test_moving_averagez$DocsExamplesTest.test_moving_averageY   su    )AB&(
*(
* ))Bbjj)199!R@C#J)C#$- s   A%A99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                  |      }j                  j                  |      } |d d|||      } ||d|	||        ||d|z  |
||       d d d        y # 1 sw Y   y xY w)Nr   )repeatr1   r6   i@B c                 8    j                  d| z  d|z  z         S )z?
                Control function using Numpy.
                 @皙	@)exp)rk   br`   s     r   func_npz,DocsExamplesTest.test_nogil.<locals>.func_np   s!     vvcAga/00r   z%void(double[:], double[:], double[:])T)r4   nogilc                 ~    t        t        |             D ]%  }j                  d||   z  d||   z  z         | |<   ' y)z6
                Function under test.
                r}   r~   N)r9   rj   r   )resultrk   r   r?   maths       r   inner_func_nbz2DocsExamplesTest.test_nogil.<locals>.inner_func_nb   s?     s6{+A $qtcAaDj)@ AF1I ,r   c                     t        |j                  d      d        i }| j                  ||       s	J || f       t        dj                  t	         fddd            d	z               |S )
zM
                Benchmark *func* and print out its runtime.
                rV    )endz{:>5.0f} msc                        i S r   r   )r    funcr!   s   r   <lambda>z?DocsExamplesTest.test_nogil.<locals>.timefunc.<locals>.<lambda>   s    D$1&1r      rr   )numberr{   rR   )r]   ljustallcloseformatmin)correctra   r   r    r!   resr`   r{   s     ``` r   timefuncz-DocsExamplesTest.test_nogil.<locals>.timefunc   s     aggbks+ D+F+&;;sG4DsGnD4m**3v1!A0G ,HJN,O P Q
r   c                       fd}|S )zP
                Run the given function inside a single thread.
                c                  p    t        | d         }j                  |j                        } |g|   |S )Nr   rS   )rj   emptyrv   )r    lengthr   
inner_funcr`   s      r   r   zDDocsExamplesTest.test_nogil.<locals>.make_singlethread.<locals>.func   s8     a\FXXfBJJX?Fv--!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                     t        | d         }j                  |j                        }|f| z   } |z   dz
  z  }t              D cg c]  }| D cg c]  }|||z  |dz   |z    c}  }}}|D cg c]  }j	                  
|       }}|D ]  }	|	j                           |D ]  }	|	j                           |S c c}w c c}}w c c}w )Nr   rS   rD   )r   r    )rj   r   rv   r9   Threadstartjoin)r    r   r   chunklenr?   argchunkschunkthreadsthreadr   r`   
numthreads	threadings             r   func_mtzFDocsExamplesTest.test_nogil.<locals>.make_multithread.<locals>.func_mt   s    a\FXXfBJJX?F"9t+D & 3a 7JFH /4J.?A.?t%# ILs1x<Q(0BC#%.?  A -34,25  )//z/N,2  4") #*") #*!M% A4s   	CC*C6CCr   )r   r   r   r`   r   s   `` r   make_multithreadz5DocsExamplesTest.test_nogil.<locals>.make_multithread   s    
"  r   znumpy (1 thread)znumba (1 thread)znumba (%d threads))
r   r   r   rW   r{   rY   rZ   r2   randomrand)r   r2   nthreadssizer   r   r   r   r   func_nb
func_nb_mtrk   r   r   r   r`   r{   r   s                 @@@@r   
test_nogilzDocsExamplesTest.test_nogils   s    %!HD1 84BB	. (6G)-BJ		t$A		t$At%7!QGGW0'1a@W2X=z1aPi s   B4CCc                 ~    t               5  ddlm}m}  | |||      g      d        }d d d        y # 1 sw Y   y xY w)Nr   )	vectorizerv   c                     | |z   S r   r   r<   r=   s     r   fz8DocsExamplesTest.test_vectorize_one_signature.<locals>.f       1ur   )r   rZ   r   rv   )r   r   rv   r   s       r   test_vectorize_one_signaturez-DocsExamplesTest.test_vectorize_one_signature   s8    0123 4 s   3<c           
         t               5  ddlm}m}m}m}m} dd l} | |||       |||       |||       |||      g      d        }|j                  d      } |||      }	| j                  |	|j                         |j                  g d      }
|j                  j                  |	|
       |j                  ddd      } |||      }	| j                  |	|j                         |j                  g d      }
|j                  j                  |	|
       |j                  d      j!                  d	d
      }|j#                  |d      }|j#                  |d      }|j%                  |      }|j%                  |d      }| j                  ||j                         |j                  g d      }
|j                  j                  ||
       | j                  ||j                         |j                  g d      }
|j                  j                  ||
       | j                  ||j                         |j                  g dg dg dg      }
|j                  j                  ||
       | j                  ||j                         |j                  g dg dg dg      }
|j                  j                  ||
       d d d        y # 1 sw Y   y xY w)Nr   )r   int32int64float32rv   c                     | |z   S r   r   r   s     r   r   z>DocsExamplesTest.test_vectorize_multiple_signatures.<locals>.f   s    
 1ur      )r   rr   r6   r      rs   rD   )ri   g?g?g333333?g?       @   rt   r6   )axis)r            )r      &   )r   rD   rr   rt   )r6   r   r   rs   )r   rD   rt   r   )r6   	   r   r   )r         r   )r   rZ   r   r   r   r   rv   rY   ru   assertIsInstancendarrayarraytestingassert_array_equallinspaceassert_allcloserw   reduce
accumulate)r   r   r   r   r   rv   r`   r   rk   r   r   result1result2result3result4s                  r   "test_vectorize_multiple_signaturesz3DocsExamplesTest.test_vectorize_multiple_signatures   sn   GGeU+eU+113 4	4
 		!Aq!WF !!&"**5hh23GJJ))&': Aq!$Aq!WF !!&"**5hh<=GJJ&&vw7 		"%%a+A
 hhqqh)G hhqqh)G ll1oG
 ll11l-G !!'2::6hh/0GJJ))'7;!!'2::6hh{+GJJ))'7;!!'2::6hh   G
 JJ))'7;!!'2::6hh  G
 JJ))'7;] s   J2KKc                 N   t               5  ddlm}m} dd l} ||d d  ||d d  fgd      d        }|j                  d      } ||d      }| j                  ||j                         |j                  g d      }|j                  j                  ||       |j                  d      j                  dd	      } ||d
      } |||j                  d
dg            }	 |||j                  d
dg             | j                  ||j                         |j                  g dg dg      }|j                  j                  ||       | j                  |	|j                         |j                  g dg dg      }|j                  j                  |	|       d d d        y # 1 sw Y   y xY w)Nr   rf   r   rg   c                 T    t        | j                  d         D ]  }| |   |z   ||<    y r$   r9   rE   r<   r=   r   r?   s       r   gz,DocsExamplesTest.test_guvectorize.<locals>.g,  *    qwwqz*AqTAXCF +r   r   rr   rr   rt   r6   r   r   r   rt   rs   rV   )rs      r   )      r   )         )r   rZ   rf   r   rY   ru   r   r   r   r   r   rw   )
r   rf   r   r`   r   rk   r   r   r   r   s
             r   test_guvectorizez!DocsExamplesTest.test_guvectorize&  sl   058UE!H56F& G& 		!Aq!WF !!&"**5hh/GJJ))&': 		!$$Q*A 2hG 288RH-.Ga2r(#$
 !!'2::6hhl;<GJJ))'7;!!'2::6hhl;<GJJ))'7;U s   FFF$c                    t               5  ddlm}m} dd l} ||d d  ||d d  fgd      d        }|j                  d      } ||d      }| j                  ||j                         | j                  |d       d d d        y # 1 sw Y   y xY w)Nr   r   z
(n),()->()c                 b    d}t        | j                  d         D ]  }|| |   |z   z  } ||d<   y r$   r   )r<   r=   r   accr?   s        r   r   z:DocsExamplesTest.test_guvectorize_scalar_return.<locals>.gY  s8    qwwqz*A1Q4!8OC +Ar   r   rr   rV   )	r   rZ   rf   r   rY   ru   r   integerassertEqual)r   rf   r   r`   r   rk   r   s          r   test_guvectorize_scalar_returnz/DocsExamplesTest.test_guvectorize_scalar_returnS  s    058UE!H56E F 		!Aq!WF !!&"**5VR() s   A.BBc                    t               5  dd l}ddlm}m}  |d      d         |d      fd       }|j                  dd	
      }|j                  |      } |||       | j                  ||       d d d        y # 1 sw Y   y xY w)Nr   r2   rf   (n)->(n)c                 N    t        | j                  d         D ]
  }| |   ||<    y r$   r   r<   r   r?   s      r   copyz3DocsExamplesTest.test_guvectorize_jit.<locals>.copyq  &    qwwqz*AqTCF +r   Tr3   c                      | |       y r   r   r<   r   r   s     r   jit_fnz5DocsExamplesTest.test_guvectorize_jit.<locals>.jit_fnv      Qr   r   i4rS   )r   rY   rZ   r2   rf   ru   
zeros_likeassertPreciseEqual)r   r`   r2   rf   r   r<   r   r   s          @r   test_guvectorize_jitz%DocsExamplesTest.test_guvectorize_jitj  s    .$" %" $  
 		!4	(A--"C1cN ##As+- s   A+B  B	c                    t               5  dd l}ddlm}m}  |d      d         |d      fd       }|j                  d      }|j                  d	      }| j                  t              5 } |||       d d d        | j                  d
t        j                               d d d        y # 1 sw Y   7xY w# 1 sw Y   y xY w)Nr   r   r   c                 N    t        | j                  d         D ]
  }| |   ||<    y r$   r   r   s      r   r   z8DocsExamplesTest.test_guvectorize_jit_fail.<locals>.copy  r   r   Tr3   c                      | |       y r   r   r   s     r   r   z:DocsExamplesTest.test_guvectorize_jit_fail.<locals>.jit_fn  r   r   )rD   r   )r   z&Loop and array shapes are incompatible)r   rY   rZ   r2   rf   onesr   assertRaises
ValueErrorassertInstr	exception)	r   r`   r2   rf   r   r<   r   raisesr   s	           @r   test_guvectorize_jit_failz*DocsExamplesTest.test_guvectorize_jit_fail  s    .$" %" $   A((4.C"":.&q# / MMBf../1'   /.! s$   A#B;/
B/9-B;/B8	4B;;Cc                    t               5  ddlm}m} dd l} ||d d  |d d  fgd      d        }|j                  d|j                        } ||      }| j                  ||j                         |j                  g dg dg dg      }|j                  j                  ||       | j                  ||j                         |j                  g dg dg dg      }|j                  j                  ||       |j                  d|j                        } ||      }t        |       | j                  ||j                         |j                  g d	g d	g d	g|j                  
      }|j                  j                  ||       | j                  ||j                         |j                  g dg dg dg      }|j                  j                  ||        ||d d  |d d  fgdd      d        }|j                  d|j                        } ||      }t        |       | j                  ||j                         |j                  g dg dg dg      }|j                  j                  ||       | j                  ||j                         |j                  g dg dg dg      }|j                  j                  ||       d d d        y # 1 sw Y   y xY w)Nr   )rf   rv   z()->()c                     d| d<   d|d<   y N      @r   @r   invalsoutvalss     r   init_valuesz@DocsExamplesTest.test_guvectorize_overwrite.<locals>.init_values  s    q	 
r   )rt   rt   )rE   rT   )r  r  r  )r  r  r  )ri   ri   ri   rS   )r  )writable_argsc                     d| d<   d|d<   y r
  r   r  s     r   r  z@DocsExamplesTest.test_guvectorize_overwrite.<locals>.init_values  s      q	 
r   )r   rZ   rf   rv   rY   r[   r   r   r   r   r   r   r]   )r   rf   rv   r`   r  r  r  r   s           r   test_guvectorize_overwritez+DocsExamplesTest.test_guvectorize_overwrite  s   271:wqz23X>! ?! XXF"**X=F
 "&)G !!&"**5hh ! "G JJ))&':!!'2::6hh ! "G JJ))'7; XXF"**X=F "&)G &M !!&"**5hh  &(ZZ  1G JJ))&':!!'2::6hh ! "G JJ))'7; !*gaj)*)
!
! XXF"**X=F "&)G &M !!&"**5hh ! "G JJ))&':!!'2::6hh ! "G JJ))'7;M s   J<KKc                    t               5  ddlm} |d        } |dd      }t        |j                         | j                  |d       t        rt        dk  rdg}nd	g}nd
g}| j                  |j                  |        |dd      }t        |j                         | j                  |d       t        rt        dk  rddg}n	d	dg}nd
dg}| j                  |j                  |        |dd      }t        |j                         | j                  |d       t        rt        dk  rddg}n	d	dg}nd
dg}| j                  |j                  |       |d        }t         |dd             t         |dd             t        |j                         dg}| j                  |j                  |       d d d        y # 1 sw Y   y xY w)Nr   )r   c                     | |z  S r   r   r   s     r   r   z2DocsExamplesTest.test_vectorize_dynamic.<locals>.f  r   r   rt   r6   r   )rr   r   zll->qqq->qll->lrU   r   dd->drD   c                     | |z  S r   r   )rk   r   s     r   r   z2DocsExamplesTest.test_vectorize_dynamic.<locals>.gD  r   r   g      @rr   )r   rZ   r   r]   typesr   r   r   )r   r   r   r   r   r   s         r   test_vectorize_dynamicz'DocsExamplesTest.test_vectorize_dynamic  s   ' 
 qVF !''N VR( 6)&iG&iG")QWWg. r"XF !''N VS) 6)&0G&0G"G,QWWg. qWF !''N VS) 6)&0G&0G"G,QWWg.   !Br(O !Aa&M !''N iGQWWg._ s   F'F;;Gc                    t               5  ddlm} dd l} |d      d        }|j	                  d|j
                        }d}|j                  |      } ||||       t        |j                         |j                  g d      }|j                  j                  ||       t        rd	g}nd
g}| j                  |j                  |       |j	                  d|j                        }d}|j                  |      } ||||       t        |j                         t        rd	dg}nd
dg}| j                  |j                  |       |j	                  d|j
                        }d}|j                  |      } ||||       t        |       |j                  g d      }|j                  j                  ||       d d d        y # 1 sw Y   y xY w)Nr   re   rg   c                 T    t        | j                  d         D ]  }| |   |z   ||<    y r$   r   r   s       r   r   z4DocsExamplesTest.test_guvectorize_dynamic.<locals>.g[  r   r   r   rS   rs   )rs   r   r   r   r   r  r  g@r  rr   r   )r   rZ   rf   rY   ru   r   r   r]   r  r   r   r   r   r   double)r   rf   r`   r   r<   r=   r   r   s           r   test_guvectorize_dynamicz)DocsExamplesTest.test_guvectorize_dynamicU  s   )'& (& 		!288	,AA--"CaCL!''N hh34GJJ))#w7")")QWWg. 		!299	-AA--"CaCL
 !''N "G,"G,QWWg. 		!288	,AA--"CaCL#J hh/GJJ))#w7u s   F.GG)r   r   r   r   r)   r,   rc   ry   r   r   r   r   r   r   r  r  r  r  __classcell__)r"   s   @r   r   r      sY    0304n%4UQpO<b+<Z).,21.g<RP/d;8r   r   __main__)r%   unittestnumba.tests.supportr   r   numba.core.configr   numba.np.numpy_supportr   r   r   r   mainr   r   r   <module>r'     sI      9 & 0# #z	8x z	8z zHMMO r   