
    hG                     J	   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 S	\R.                  5      rS
 r\R4                  R7                  S\" \S9/S/S9S 5       rS r\R>                  RA                  S5       " S S\5      5       r!/ SQr"S r#\R4                  R7                  S\#" 5       5      \R4                  R7                  S\" \S9/S/S9S 5       5       r$\R4                  R7                  S\#" 5       5      S 5       r%\R4                  R7                  S\RL                  " S\R4                  RO                  \RP                  RS                  5       (       + SS9S9\RL                  " S\R4                  RO                  \RT                  RS                  5       (       + SS9S9/5      \R4                  R7                  S/ S Q5      \R4                  R7                  S\" \S9/S/S9S! 5       5       5       r+\R4                  R7                  SS"\," \-" S#5      5      S$./S/S9S% 5       r.S& r/\R4                  R7                  S'\RL                  " S(\R4                  RO                  \R>                  Ra                  \Rb                  S)   5      (       + S*S9S9S+/5      \R4                  R7                  S\" S,S-9/S/S9S. 5       5       r2\R4                  R7                  S'\RL                  " S(\R4                  RO                  \R>                  Ra                  \Rb                  S)   5      (       + S*S9S9S+/5      \R4                  R7                  S\" S,S-9/S/S9S/ 5       5       r3\R4                  RO                  \Rh                  " S05      SL S1S9S2 5       r5\R4                  R7                  S3S4S5/5      S6 5       r6\R4                  R7                  S7/ S8Q5      S9 5       r7S: r8S; r9\" S</S=9S> 5       r:\R4                  R7                  S\" \S9/S/S9S? 5       r;\R4                  R7                  S\" \S9/S/S9S@ 5       r<\R4                  R7                  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   Q/var/www/html/env/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 rSrSrS rS rS rSrg)NullMovieWriter/   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%   r:   r;   r<   s        r   setupNullMovieWriter.setup;   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.animationrB   savefig_kwargsr=   )r>   rD   rB   s      r   
grab_frameNullMovieWriter.grab_frameB   s!    C">2,qr   c                     g r   r(   r>   s    r   finishNullMovieWriter.finishH   s    r   )r=   r<   r;   r%   r:   rD   N)	__name__
__module____qualname____firstlineno____doc__r?   rE   rI   __static_attributes__r(   r   r   r7   r7   /   s    	r   r7   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)r;   writerrD   r   r(   )r)   rcParamsr.   r7   saver%   figurer:   r;   r<   itemsrD   r=   _save_count)r5   filenamer;   rD   rV   kvs          r   test_null_movie_writerr_   L   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 deletedmatchr(   )
platformpython_implementationr   testingbreak_cyclesr   r1   pytestwarnsWarningr5   s    r   test_animation_deleterm   b   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>.DummyMovieWriterp   c                     g r   r(   rH   s    r   _run<test_movie_writer_dpi_default.<locals>.DummyMovieWriter._runq   s    r   r(   N)rK   rL   rM   rN   rs   rP   r(   r   r   DummyMovieWriterrp   p   s    	r   ru   rS   r$   unusedr   )r   MovieWriterr)   rY   r?   r;   )ru   r%   r\   fpscodecbitrate
extra_argsrV   s           r   test_movie_writer_dpi_defaultr|   o   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(   )r>   rx   ry   rz   r{   metadatas         r   __init__"RegisteredNullMovieWriter.__init__   s    r   c                     g)NTr(   )clss    r   isAvailable%RegisteredNullMovieWriter.isAvailable   s    r   r(   )NNNNN)rK   rL   rM   rN   r   classmethodr   rP   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   writersis_availableri   markskipr!   r   r/   )rV   outputr   writer_classframe_formats        r   gen_writersr      s     '  --f55;;##6("@ACD,,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                  5          UR                  USUSUUS9  S S S 5        Ag ! , (       d  f       Ag = f)
Nanimation.frame_formatr   g33333%@gQk"@      Y@h264   i  )rx   rV   rz   r;   ry   r(   )r)   rW   r   r1   _figset_size_inchesas_cwdrX   )tmpdirrV   r   r   r5   r;   ry   s          r   test_save_animation_smoketestr      s     1=-.""*T*D
CE		!!-0 
		&b# 	 	 
 		 
 	s   &B
Bc                 V   [         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                  5          U	R                  XSU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        S S S 5        g ! , (       d  f       Mi  = f! , (       d  f       N)= f! , (       d  f       g = f)
Nr   r   r   r   r   >   r;   formatbbox_inchesz.grab_frame got an unexpected keyword argument rc   r(   )r   r   r)   rW   r*   r   r   savingrE   ri   raises	TypeErrorobject)r   rV   r   r   WriterClassr%   r3   r;   ry   test_writerr]   s              r   test_grabframer      s    ##F+K1=-.llnGC
CEM*-K 
S1""$5]]! NqeT  **;a];	  6 2 

 	 21 
s<   7D
3D	=C7	D	&D7
DD		
D	D
D(rV   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)Nrb   r   r   r   )animation.writerzanimation.htmlr(   )re   rf   r   rg   rh   r   FFMpegWriterr   ri   r   r1   r)   
rc_context_repr_html_rj   UserWarning)rV   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 )NrS   rV   )rX   r7   rl   s    r   test_no_length_framesr     s     	IImO$5I6r   c                  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mplrW   r   sysre   )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        UR                  5          [        R                  " SS05         [	        X05      " 5         S S S 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       Nb= f! , (       d  f       Nk= f)NWARNINGzanimation.embed_limitgư>r   zmatplotlib.animation)		set_levelr   r   r   r/   r   recordsname	levelname)r   caplogr   r5   records        r   test_embed_limitr   $  s     Y	^^4d;<D&( = 
 v~~!###nnGFKK11  I-/ .- =< 
s"   B9B(B9(
B6	2B99
Cc                     UR                  5          [        X 5      " 5         [        [        [	        U5      5      R                  5       5      / :X  d   e S S S 5        g ! , (       d  f       g = fr   )r   r/   listr   striterdir)r   r   r5   s      r   test_cleanup_temporariesr   6  sG     
"$DV%--/0B666 
s   AA
A+z/bin/shzrequires a POSIX OSc                    U R                  5          UR                  SS[        R                  S   -   5        [	        [        U 5      S5      nUR                  S5        [        R                  " US5        [        R                  " [        R                  5         UR                  S5        SSS5        SSS5        g! , (       d  f       N= f! , (       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.
PATHz.:r   s   #!/bin/sh
[[ $@ -eq 0 ]]
i  z	test.mpegN)r   setenvosenvironr   r   write_byteschmodri   r   
subprocessCalledProcessErrorrX   )r   monkeypatchr5   exe_paths       r   test_failing_ffmpegr   C  s     
64"**V*<#<=FX.;<
5!]]:889IIk" : 

 :9 
s$   BCB<+C<
C
	C
C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>.FrameiZ  r(   N)rK   rL   rM   rN   rP   r(   r   r   Framer   Z  s    r   r   c                  .   > T R                  / / 5        T 4$ r   r   r   s   r   r   1test_funcanimation_cache_frame_data.<locals>.init^  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>.animateb  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_generatorh  s_     qAAr3'A		s#AAOE ##GKK$67K s   A:A=r   )r'   r#   r   r   rS   r   r$   )r)   r*   r+   r.   r   r1   r7   rX   r   r   rg   rh   )r   r%   r3   r   r   r   
MAX_FRAMESr5   rV   fr   r   r   s             @@@r   #test_funcanimation_cache_frame_datar  U  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+   ri   r   RuntimeErrorr   r1   )r  r%   r3   r   r   s   `   @r   test_draw_framer    sU     llnGCGGBKED  
|	$te	
 
%	$	$s   A..
A<c           	         [         R                  " 5       u  pS n[        R                  " X[	        [        S5      5      SSS9nU R                  5          UR                  SSS9  S S S 5        [        R                  " [        SS	9   UR                  5         S S S 5        g ! , (       d  f       NA= f! , (       d  f       g = f)
Nc                     / $ r   r(   r   s    r   update(test_exhausted_animation.<locals>.update      	r   r	   Fr#   repeatr   test.gifr   r   	exhaustedrc   )r)   r*   r   r1   iterr   r   rX   ri   rj   r   _startr   r%   r3   r  r5   s        r   test_exhausted_animationr    s    llnGC ""DrOED
 
		*X	. 
 
k	5 
6	5 
 
6	5s   B B1 
B.1
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  rc   )r)   r*   r   r1   ri   rj   r   r  r  s        r   test_no_frame_warningr    sU    llnGC ""BuD
 
k	5 
6	5	5s   A%%
A3png)
extensionsc           	        ^^ 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                  5          UR                  S5        S S 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 ! , (       d  f       N}= f)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   r   rX   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 
		* 
 
			BKK1ruu9KKA GGArvva'k"# 
s   :E
E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)=.rc   r#   r   r(   )r   r   r   ri   rj   r   reescaper   r1   r[   
_init_drawr5   r   r#   match_targets       r   ,test_save_count_override_warnings_has_lengthr6    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/  rc   r0  r(   )	ri   rj   r   r1  r2  r   r1   r[   r3  r4  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$   r:  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`.rc   )r   r#   Fr(   )r  r   ri   rj   r   r1  r2  r   r1   _cache_frame_datar3  )r5   r   r#   r5  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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'z\[Errno 2] .*'/foorc   z+/foo/bar/aardvark/thiscannotreallyexist.mp4r   )r   re   ri   r   FileNotFoundErrorrX   r   FFMpegFileWriter)r5   	match_strs     r   test_movie_writer_invalid_pathrC  #  sS    
||wC	)		(		:		?"335 	 	7 
;	:	:s   $A  
A.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   )rx   z
unused.gifr   )r;   T)transparentr
         N)r)   r*   	Rectangle	add_patchr,   r-   r   r?   rE   _frames
getextremaclose)r%   r3   rectrV   r   s        r    test_animation_with_transparencyrQ  -  s    llnGC==AU#>DLLKK1KK1b!F
LLlL,
$'NN2Ea #c)))IIcNr   )@r   pathlibr   re   r1  shutilr   r   r   numpyr   ri   
matplotlibr   r   r)   r   rC   r   matplotlib.testing.decoratorsr   fixturer5   AbstractMovieWriterr7   r_   r   parametrizer.   rm   r|   r   registerr   r   r   r   r   r!   skipifr   r   ImageMagickWriterr   r  r   r   r   r   rW   r   r   whichr   r  r  r  r  r,  r6  r;  r>  rC  rQ  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< H<> 
LL**&&2244$ + &' LLV[[//++7799) 0 +,	$ 	  ( 
 $T"2!3vhG H	 2 
$uQx.12X  
7
74 \\"&++*<*<**3<<8J+KLL/ += +1 2  $a.!1VHE/ F/ \\"&++*<*<**3<<8J+KLL/ += +1 2  $a.!1VHE7 F7 FLL+t3<QR# S#" +eT];,1 <,1^  * 

*$ ($ )$B $T"2!3vhG H$ $T"2!3vhG H$ $T"2!3vhG H&7r   