
    
3j\F                        S SK r S SKJr  S SKrS SKrS SKrS SKrS SKrS SKrS SK	r
S SKrS SKrS SKJr  S SKJr  S SKJr  S SKJr  \R*                  " 5       S 5       rS r " S	 S
\R0                  5      rS r\R6                  R9                  S\" \S9/S/S9S 5       rS r\R@                  RC                  S5       " S S\5      5       r"/ SQr#S r$\R6                  R9                  S\$" 5       5      \R6                  R9                  S\" \S9/S/S9S 5       5       r%\R6                  R9                  S\$" 5       5      S 5       r&\R6                  R9                  S\RN                  " S\R6                  RQ                  \RR                  RU                  5       (       + SS9S9\RN                  " S\R6                  RQ                  \RV                  RU                  5       (       + SS9S9/5      \R6                  R9                  S / S!Q5      \R6                  R9                  S\" \S9/S/S9S" 5       5       5       r,\R6                  R9                  SS#\-" \." S$5      5      S%./S/S9S& 5       r/\R6                  RQ                  \R                  S':H  S(S9S) 5       r0\R6                  R9                  S*\RN                  " S+\R6                  RQ                  \R@                  Rc                  \Rd                  S,   5      (       + S-S9S9S./5      \R6                  R9                  S\" S/S09/S/S9S1 5       5       r3\R6                  RQ                  \R                  S':H  S(S9\R6                  RQ                  \Rh                  " S25      SL S3S9S4 5       5       r5\R6                  R9                  S5S6S7/5      S8 5       r6\R6                  R9                  S9/ S:Q5      S; 5       r7S< r8S= r9\" 5       S> 5       r:\R6                  R9                  S\" \S9/S/S9S? 5       r;\R6                  R9                  S\" \S9/S/S9S@ 5       r<\R6                  R9                  S\" \S9/S/S9SA 5       r=SB r>SC r?g)D    N)Path)pyplot)	animation)PillowWriter)check_figures_equalc                 R  ^ [         R                  " 5       u  pUR                  / / 5      u  mUR                  SS5        UR	                  SS5        U4S jnU4S jn[        [        U S0 5      5      nUR                  S[        R                  5      nS	U;  a  S
US	'   U" SXUS.UD6$ )z)Create a simple animation (with options).r   
      c                  .   > T R                  / / 5        T 4$ Nset_datalines   Y/home/wildlama/miniconda3/lib/python3.13/site-packages/matplotlib/tests/test_animation.pyinitanim.<locals>.init       b"u    c                    > [         R                  " SSS5      n[         R                  " X-   5      nTR                  X5        T4$ )Nr   r	   d   )nplinspacesinr   )ixyr   s      r   animateanim.<locals>.animate!   s7    KK2s#FF15Maur   paramklassframes   )figfunc	init_func )
pltsubplotsplotset_xlimset_ylimdictgetattrpopr   FuncAnimation)requestr%   axr   r   kwargsr"   r   s          @r   animr5      s     llnGCGGBOEDKK2KKA ''7B/0FJJw	 7 78EvxAS$A&AAr   c                      [         R                  " [        SS9   [        R                  S     S S S 5        g ! , (       d  f       g = f)NzB'pllow' is not a valid value for writer\. Did you mean: 'pillow'\?matchpllow)pytestraises
ValueErrorr   writersr(   r   r   test_invalid_writerr>   /   s5    	z9
: 	'"
: 
: 
:s	   7
Ac                   *    \ rS rSrSrS rS rS rSrg)NullMovieWriter7   a~  
A minimal MovieWriter.  It doesn't actually write anything.
It just saves the arguments that were given to the setup() and
grab_frame() methods as attributes, and counts how many times
grab_frame() is called.

This class doesn't have an __init__ method with the appropriate
signature, and it doesn't define an isAvailable() method, so
it cannot be added to the 'writers' registry.
c                 B    Xl         X l        X0l        X@l        SU l        g )Nr   )r%   outfiledpiargs_count)selfr%   rC   rD   rE   s        r   setupNullMovieWriter.setupC   s    	r   c                 V    SSK Jn  U" U5        Xl        U =R                  S-  sl        g )Nr   )_validate_grabframe_kwargsr   )matplotlib.animationrK   savefig_kwargsrF   )rG   rM   rK   s      r   
grab_frameNullMovieWriter.grab_frameJ   s!    C">2,qr   c                     g r   r(   rG   s    r   finishNullMovieWriter.finishP   s    r   )rF   rE   rD   r%   rC   rM   N)	__name__
__module____qualname____firstlineno____doc__rH   rN   rR   __static_attributes__r(   r   r   r@   r@   7   s    	r   r@   c                    S[         R                  S'   SnSn[        SS9n[        5       nU R	                  XUUS9  UR
                  [         R                  " S5      :X  d   eUR                  U:X  d   eUR                  U:X  d   eUR                  S	:X  d   eUR                  5        H  u  pVUR                  U   U:X  a  M   e   UR                  U R                  :X  d   eg )
Nautozsavefig.facecolorunused.null2   r   )foo)rD   writerrM   r   r(   )r)   rcParamsr.   r@   saver%   figurerC   rD   rE   itemsrM   rF   _save_count)r5   filenamerD   rM   r_   kvs          r   test_null_movie_writerrh   T   s    (.CLL$%H
Ca[NFIIh+  - ::A&&&>>X%%%::;;" $$&$$Q'1,,, '==D,,,,,r   r5   )r"   )indirectc                 B   [         R                  " 5       S:X  a  [        R                  R	                  5         [
        R                  " S0 U D6n [        R                  " [        SS9   A [        R                  R	                  5         S S S 5        g ! , (       d  f       g = f)NPyPyzAnimation was deletedr7   r(   )
platformpython_implementationr   testingbreak_cyclesr   r1   r:   warnsWarningr5   s    r   test_animation_deleters   j   sf    %%'61 	

!""*T*D	g%<	=


! 
>	=	=s   ' B
Bc                       " S S[         R                  5      n [        R                  " 5       nSnSnSnSnS/nU " X4XV5      nUR	                  X5        UR
                  UR
                  :X  d   eg )Nc                       \ rS rSrS rSrg)7test_movie_writer_dpi_default.<locals>.DummyMovieWriterx   c                     g r   r(   rQ   s    r   _run<test_movie_writer_dpi_default.<locals>.DummyMovieWriter._runy   s    r   r(   N)rT   rU   rV   rW   ry   rY   r(   r   r   DummyMovieWriterrv   x   s    	r   r{   r\   r$   unusedr   )r   MovieWriterr)   rb   rH   rD   )r{   r%   re   fpscodecbitrate
extra_argsr_   s           r   test_movie_writer_dpi_defaultr   w   sj    900 
 **,CH
CEGJc'>F
LL::   r   nullc                   2    \ rS rSr  SS jr\S 5       rSrg)RegisteredNullMovieWriter   Nc                     g r   r(   )rG   r~   r   r   r   metadatas         r   __init__"RegisteredNullMovieWriter.__init__   s    r   c                     g)NTr(   )clss    r   isAvailable%RegisteredNullMovieWriter.isAvailable   s    r   r(   )NNNNN)rT   rU   rV   rW   r   classmethodr   rY   r(   r   r   r   r      s#     6:+/  r   r   ))ffmpeg	movie.mp4)ffmpeg_filer   )imagemagick	movie.gif)imagemagick_filer   )pillowr   )htmlz
movie.html)r   z
movie.nullc               #     #    [          H  u  p[        R                  R                  U 5      (       da  [        R
                  R                  SU  S35      n[        R                  " U S X/S9v   [        R                  " U S [        U5      U/S9v   M  [        R                  U    n[        USS /5       H  nXU4v   X[        U5      4v   M     M     g 7f)Nzwriter 'z' not available on this systemmarkssupported_formats)
WRITER_OUTPUTr   r=   is_availabler:   markskipr!   r   r/   )r_   outputr   writer_classframe_formats        r   gen_writersr      s     '  --f55;;##hvh6T$UVD,,vtV6BB,,vtT&\$HH ((0#L2EvNL..V44 O (s   CCzwriter, frame_format, outputc           	          Ub  U[         R                  S'   [        R                  " S	0 UD6nS nS nUS:X  a  UR                  R                  S5        SnSnUR                  X-  SUSUUS9  Ag )
Nanimation.frame_formatr   g33333%@gQk"@      Y@h264   i  )r~   r_   r   rD   r   r(   )r)   r`   r   r1   _figset_size_inchesra   )tmp_pathr_   r   r   r5   rD   r   s          r   test_save_animation_smoketestr      s     1=-.""*T*D
CE		!!-0IIhR   	r   c           
         [         R                  U   nUb  U[        R                  S'   [        R                  " 5       u  pVS nS nUS:X  a  UR                  S5        SnSnU" 5       n	U	R                  XPU-  U5         U	R                  5         S HE  n
[        R                  " [        SU
< 3S9   U	R                  " S	0 U
[        5       0D6  S S S 5        MG     S S S 5        g ! , (       d  f       Ma  = f! , (       d  f       g = f)
Nr   r   r   r   r   >   rD   formatbbox_inchesz.grab_frame got an unexpected keyword argument r7   r(   )r   r=   r)   r`   r*   r   savingrN   r:   r;   	TypeErrorobject)r   r_   r   r   WriterClassr%   r3   rD   r   test_writerrf   s              r   test_grabframer      s    ##F+K1=-.llnGC
CEM*-K			CF!2C	8 1AJ1%PR &&7!VX7R R 2 
9	8R R	 
9	8s$   <3C3/C!C3!
C0+C33
Dr_   r   Requires FFMpeg)reasonr   r   zRequires ImageMagickz
html, want))noneN)html5z<video width)jshtmlz<script c                 t   [         R                  " 5       S:X  a  [        R                  R	                  5         U S:X  a?  US:X  a9  [
        R                  R                  5       (       d  [        R                  " S5        [
        R                  " S0 UD6n[        R                  " U US.5         UR                  5       nS S S 5        UcH  Ub   e[        R                  " [        5         A[        R                  R	                  5         S S S 5        g X!;   d   eg ! , (       d  f       Na= f! , (       d  f       g = f)Nrk   r   r   r   )animation.writerzanimation.htmlr(   )rl   rm   r   rn   ro   r   FFMpegWriterr   r:   r   r1   r)   
rc_context_repr_html_rp   UserWarning)r_   r   wantr5   s       r   test_animation_repr_htmlr      s    " %%'61 	

!-DGO**6688%& ""*T*D	V+/1 
2!
2 |||\\+&JJ##% '& ||
2 
2
 '&s   ,D' D)
D&)
D7r	   r$   )
save_countr#   c                 4    U R                  S[        5       S9  g )Nr\   r_   )ra   r@   rr   s    r   test_no_length_framesr     s     	IImO$5I6r   
emscriptenz(emscripten does not support subprocessesc                  j   [        [        R                  R                  5      S:  d   eS[        R
                  S'   [        R                  R                  S5      (       a   e[        R                  S:w  a  SOSn U [        R
                  S'   [        R                  R                  S5      (       d   eg )Nr   not_available_ever_xxxxzanimation.ffmpeg_pathr   win32truewhere)	lenr   r=   _registeredmplr`   r   sysrl   )bins    r   test_movie_writer_registryr     s     y  ,,-111,ECLL()  --h7777LLG+&C,/CLL()))(3333r   method_nameto_html5_videor   zanimation writer not installed	to_jshtmlr   )r#   c                 @   UR                  S5        [        R                  " SS05         [        X 5      " 5         S S S 5        [	        UR
                  5      S:X  d   eUR
                  u  nUR                  S:X  a  UR                  S:X  d   eg ! , (       d  f       NZ= f)NWARNINGzanimation.embed_limitgư>r   zmatplotlib.animation)	set_levelr   r   r/   r   recordsname	levelname)r   caplogr5   records       r   test_embed_limitr   &  s     Y	0$7	8"$ 
9v~~!###nnGFKK11  I-/ .- 
9	8s   B
Bz/bin/shzrequires a POSIX OSc                 0   UR                  S[        U 5      SS9  U S-  nUR                  S5        [        R                  " US5        [
        R                  " [        R                  5         UR                  S5        SSS5        g! , (       d  f       g= f)	a  
Test that we correctly raise a CalledProcessError when ffmpeg fails.

To do so, mock ffmpeg using a simple executable shell script that
succeeds when called with no arguments (so that it gets registered by
`isAvailable`), but fails otherwise, and add it to the $PATH.
PATH:)prependr   s   #!/bin/sh
[[ $@ -eq 0 ]]
i  z	test.mpegN)
setenvstrwrite_bytesoschmodr:   r;   
subprocessCalledProcessErrorra   )r   monkeypatchr5   exe_paths       r   test_failing_ffmpegr   7  sn     vs8}c:("H78HHXu	z44	5		+ 
6	5	5s   ,B
Bcache_frame_dataFTc           	        ^
^^ [         R                  " 5       u  pUR                  / / 5      u  m " S S[        5      m
U4S jnU4S jn/ mU
U4S jnSn[        R
                  " XUUU US9n[        5       nUR                  SUS	9  [        T5      S
:X  d   e[        R                  R                  5         T H  n	U	" 5       S L U :w  a  M   e   g )Nc                       \ rS rSrSrg)2test_funcanimation_cache_frame_data.<locals>.FrameiO  r(   N)rT   rU   rV   rW   rY   r(   r   r   Framer   O  s    r   r   c                  .   > T R                  / / 5        T 4$ r   r   r   s   r   r   1test_funcanimation_cache_frame_data.<locals>.initS  r   r   c                 :   > TR                  U S   U S   5        T4$ )Nr   r   r   )framer   s    r   r   4test_funcanimation_cache_frame_data.<locals>.animateW  s     eCj%*-ur   c               3      >#    [        S5       Hi  n [        R                  " SSS5      n[        R                  R	                  S5      nT" XS9nTR                  [        R                  " U5      5        Uv   Mk     g 7f)Nr$   r   r	   r   )r   r   )ranger   r   randomrandappendweakrefref)_r   r   r   r   frames_generateds       r   frames_generator=test_funcanimation_cache_frame_data.<locals>.frames_generator]  s_     qAAr3'A		s#AAOE ##GKK$67K s   A:A=r   )r'   r#   r   r   r\   r   r$   )r)   r*   r+   r.   r   r1   r@   ra   r   r   rn   ro   )r   r%   r3   r   r   r  
MAX_FRAMESr5   r_   fr   r   r   s             @@@r   #test_funcanimation_cache_frame_datar  J  s    llnGCGGBOED   J""34*:4D.8:D
 FIImFI+ A%%%JJ t 0000 r   return_value)Nstringr   )r  artistc                    ^ ^ [         R                  " 5       u  pUR                  / 5      u  mUU 4S jn[        R                  " [
        5         [        R                  " XSSS9  S S S 5        g ! , (       d  f       g = f)Nc                 D   > TR                  SS/SU /5        TS:X  a  T$ T$ )Nr   r   r  r   )r   r   r  s    r   r    test_draw_frame.<locals>.animate  s,    q!fq!f%8#Kr   TF)blitr   )r)   r*   r+   r:   r;   RuntimeErrorr   r1   )r  r%   r3   r   r   s   `   @r   test_draw_framer  z  sU     llnGCGGBKED  
|	$te	
 
%	$	$s   A..
A<c           	      6   [         R                  " 5       u  pS n[        R                  " X[	        [        S5      5      SSS9nUR                  U S-  SS9  [        R                  " [        SS	9   UR                  5         S S S 5        g ! , (       d  f       g = f)
Nc                     / $ r   r(   r   s    r   update(test_exhausted_animation.<locals>.update      	r   r	   Fr#   repeatr   test.gifr   r   	exhaustedr7   )r)   r*   r   r1   iterr   ra   r:   rp   r   _start)r   r%   r3   r  r5   s        r   test_exhausted_animationr    sr    llnGC ""DrOED
 	IIh#HI5	k	5 
6	5	5s   0B


Bc                      [         R                  " 5       u  pS n[        R                  " X/ SSS9n[        R
                  " [        SS9   UR                  5         S S S 5        g ! , (       d  f       g = f)Nc                     / $ r   r(   r  s    r   r  %test_no_frame_warning.<locals>.update  r  r   Fr  r  r7   )r)   r*   r   r1   r:   rp   r   r  )r%   r3   r  r5   s       r   test_no_frame_warningr    sU    llnGC ""BuD
 
k	5 
6	5	5s   A%%
A3c           	      Z  ^^ UR                  5       nUR                  SS[        R                  -  5        UR	                  SS5        [        R
                  " SS[        R                  -  S5      mUR                  / / 5      u  mU4S jnUU4S jn[        R                  " XUSS	S
S9nUR                  U S-  5        UR                  5       nUR                  SS[        R                  -  5        UR	                  SS5        UR                  T[        R                  " TS-   5      5        g )Nr      r
   r   r   c                  .   > T R                  / / 5        T 4$ r   r   r   s   r   r   "test_animation_frame.<locals>.init  r   r   c                 b   > TR                  T[        R                  " TU S-  -   5      5        T4$ )Nr   )r   r   r   )r   r   r   s    r   r   %test_animation_frame.<locals>.animate  s)    aAG,-ur   r$   TF)r'   r#   r  r  r  g{Gz?)add_subplotr,   r   pir-   r   r+   r   r1   ra   r   )	r   fig_testfig_refr3   r   r   r5   r   r   s	          @@r   test_animation_framer*    s    
 
			BKK1ruu9KKA
Aq255y#&AGGBOED ""T!%!D 	IIh#$ 
			BKK1ruu9KKA GGArvva'k"#r   c           	      t   Sn[        [        S5      5      nSU< S[        U5      < S3n[        R                  " [
        [        R                  " U5      S9   [        R                  " S0 0 U EX!S.ED6n S S S 5        U R                  [        U5      :X  d   eU R                  5         g ! , (       d  f       N:= f)	Nr$   r!  %You passed in an explicit save_count=z0 which is being ignored in favor of len(frames)=.r7   r#   r   r(   )listr   r   r:   rp   r   reescaper   r1   rd   
_init_drawr5   r   r#   match_targets       r   ,test_save_count_override_warnings_has_lengthr5    s     J%(^F
0ZM 2v;.	  
k<)@	A&& 
BBB
 
B s6{***OO 
B	As   B))
B7c           	      :   SnSnSU< S3S-   SU< S3-   n[         R                  " [        [        R                  " U5      S9   [
        R                  " S
0 0 U EX!S	.ED6n S S S 5        U R                  U:X  d   eU R                  5         g ! , (       d  f       N1= f)Nr$      r,   z#which is being ignored in favor of frames=r-  r7   r.  r(   )	r:   rp   r   r0  r1  r   r1   rd   r2  r3  s       r   (test_save_count_override_warnings_scalerr:    s    JF
0ZM3-	.6)1	  
k<)@	A&& 
BBB
 
B
 v%%%OO 
B	As   B
Bc           	      N   Sn[        [        S5      5      nSU< SU< S3n[        R                  " [        [
        R                  " U5      S9   [        R                  " S	0 0 U EXS.ED6n S S S 5        U R                  SL d   eU R                  5         g ! , (       d  f       N0= f)
NTr$   r9  ze which we can infer the length of, did not pass an explicit *save_count* and passed cache_frame_data=z.  To avoid a possibly unbounded cache, frame data caching has been disabled. To suppress this warning either pass `cache_frame_data=False` or `save_count=MAX_FRAMES`.r7   )r   r#   Fr(   )r  r   r:   rp   r   r0  r1  r   r1   _cache_frame_datar2  )r5   r   r#   r4  s       r   test_disable_cache_warningr=    s    %(^F6+ (&( )?	?  
k<)@	A&& 
NN+;N
 
B !!U***OO 
B	As   B
B$c                    [         R                  S:X  a  SnO[         R                  S:X  a  SnOSn[        R                  " [        US9   U R                  S[        R                  " 5       S9  S S S 5        g ! , (       d  f       g = f)	Nr   z+\[WinError 3] .*\\\\foo\\\\bar\\\\aardvark'r   z\[Errno 44] .*'/fooz\[Errno 2] .*'/foor7   z+/foo/bar/aardvark/thiscannotreallyexist.mp4r   )r   rl   r:   r;   FileNotFoundErrorra   r   FFMpegFileWriter)r5   	match_strs     r   test_movie_writer_invalid_pathrB    sd    
||wB			%*	)		(		:		?"335 	 	7 
;	:	:s   
$A77
Bc                     [         R                  " 5       u  p[         R                  " SSSSSS9nUR                  U5        UR	                  SS5        UR                  SS5        [        SS9nUR                  U S	S
S9  UR                  SS9  UR                  S   nUR                  5       S   S   S:  d   e[         R                  " U 5        g)zGTest animation exhaustion with transparency using PillowWriter directly)r   r   r   redg      ?)coloralphar   r   )r~   z
unused.gifr   )rD   T)transparentr
         N)r)   r*   	Rectangle	add_patchr,   r-   r   rH   rN   _frames
getextremaclose)r%   r3   rectr_   r   s        r    test_animation_with_transparencyrP  "  s    llnGC==AU#>DLLKK1KK1b!F
LLlL,
$'NN2Ea #c)))IIcNr   )@r   pathlibr   rl   r0  shutilr   r   r   numpyr   r:   
matplotlibr   r   r)   r   rL   r   matplotlib.testing.decoratorsr   fixturer5   r>   AbstractMovieWriterr@   rh   r   parametrizer.   rs   r   r=   registerr   r   r   r   r   r!   skipifr   r   ImageMagickWriterr   r  r   r   r   r   r`   r   whichr   r  r  r  r  r*  r5  r:  r=  rB  rP  r(   r   r   <module>r]     s   	   	   
     $   - = B B4#i33 :-, $T"2!3vhG	" H	"!& F#  $"5" 7G$T"2!3vhG H H$ 7G8 H86 
LL**&&2244$ + &' LLV[[//++7799) 0 +,	$ 	  ( 
 $T"2!3vhG H	 2 
$uQx.12X  
7
7 CLLL0E  G4G4 \\"&++*<*<**3<<8J+KLL/ += +1 2  $a.!1VHE/ F/ CLLL0E  GFLL+t3<QR SG  +eT];,1 <,1^  * 

*" $ $@ $T"2!3vhG H$ $T"2!3vhG H$ $T"2!3vhG H&	7r   