o
    i                   
   @   s  d dl Z d dlmZ d dlZd dlZd dlZd dlZd dlZd dl	Z
d dl	mZ d dl	mZ G dd dejZdd Zd	d
 Zdd ZejdG dd deZg dZedd eD 7 Zejdedd Zdd Zdd Zejdejdejjeje
jd  dddd gd!d" Z ejdejdejjeje
jd  dddd gd#d$ Z!ejje j"d%kd&dd'd( Z#ejd)d*d+gd,d- Z$dS ).    NPath)pyplot)	animationc                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	NullMovieWritera  
    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                 G   s"   || _ || _|| _|| _d| _d S )Nr   )figoutfiledpiargs_count)selfr   r   r	   r
    r   Z/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/matplotlib/tests/test_animation.pysetup   s
   
zNullMovieWriter.setupc                 K   s   || _ |  jd7  _d S )N   )savefig_kwargsr   )r   r   r   r   r   
grab_frame"   s   zNullMovieWriter.grab_framec                 C      d S Nr   r   r   r   r   finish&      zNullMovieWriter.finishN)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r      s
    r   c                     s@   t  \}}|g \ dd } fdd}tj||fi | S )Nc                   S   r   r   r   r   r   r   r   init.   r   zmake_animation.<locals>.initc                    s     ddgd| g  fS )Nr   r   set_data)iliner   r   animate1      zmake_animation.<locals>.animate)pltsubplotsplotr   FuncAnimation)kwargsr   axr   r"   r   r    r   make_animation*   s
   r*   c                  C   s   d} t | d}d}d}tdd}t }|j||||d |jtdks&J |j|ks-J |j|ks4J |j	d	ks;J |j
|ksBJ |j| ksIJ d S )
N   framesunused.null2   r   )foo)r	   writerr   r   r   )r*   dictr   saver   r$   figurer   r	   r
   r   r   )
num_framesanimfilenamer	   r   r1   r   r   r   test_null_movie_writer8   s   


r8   c                  C   s^   G dd dt j} t }d}d}d}d}dg}| ||||}||| |j|jks-J d S )Nc                   @   s   e Zd Zdd ZdS )z7test_movie_writer_dpi_default.<locals>.DummyMovieWriterc                 S   r   r   r   r   r   r   r   _runP   r   z<test_movie_writer_dpi_default.<locals>.DummyMovieWriter._runN)r   r   r   r9   r   r   r   r   DummyMovieWriterO   s    r:   r.   r+   unusedr   )r   MovieWriterr$   r4   r   r	   )r:   r   r7   fpscodecbitrate
extra_argsr1   r   r   r   test_movie_writer_dpi_defaultN   s   rA   nullc                   @   s&   e Zd Z		dddZedd ZdS )RegisteredNullMovieWriterNc                 C   r   r   r   )r   r=   r>   r?   r@   metadatar   r   r   __init__j      z"RegisteredNullMovieWriter.__init__c                 C   s   dS )NTr   )clsr   r   r   isAvailablen   rF   z%RegisteredNullMovieWriter.isAvailable)NNNNN)r   r   r   rE   classmethodrH   r   r   r   r   rC   a   s    	
rC   )	)ffmpeg	movie.mp4)ffmpeg_filerK   )avconvrK   )avconv_filerK   )imagemagick	movie.gif)imagemagick_filerP   )pillowrP   )htmlz
movie.html)rB   z
movie.nullc                 C   s   g | ]
\}}|t |fqS r   r   ).0r1   outputr   r   r   
<listcomp>~   s    rV   zwriter, outputc           
   	      s   t j|std|  t \}}|g g \ |dd |	dd d }d }|dkr7|
d d}d	} fd
d} fdd}|   t j|||dd}	|	j|d|d||d W d    d S 1 sgw   Y  d S )Nz(writer '%s' not available on this systemr   
   r   rJ   )g33333%@gQk"@g      Y@h264c                           g g   fS r   r   r   r    r   r   r         z+test_save_animation_smoketest.<locals>.initc                    s.   t ddd}t ||  } ||  fS )Nr   rW   d   )nplinspacesinr   )r   xyr    r   r   r"      s   z.test_save_animation_smoketest.<locals>.animater+   )	init_funcr-      i  )r=   r1   r?   r	   r>   )r   writersis_availablepytestskipr$   r%   r&   set_xlimset_ylimset_size_inchesas_cwdr'   r3   )
tmpdirr1   rU   r   r)   r	   r>   r   r"   r6   r   r    r   test_save_animation_smoketest   s(   

"rm   c                   C   s"   t ttddjdt d d S )Nr+   r,   r.   r1   )r*   iterranger3   r   r   r   r   r   test_no_length_frames   s   
rq   c                  C   s^   t tjjdks
J dtjd< tjdrJ tjdkrdnd} | tjd< tjds-J d S )Nr   not_available_ever_xxxxzanimation.ffmpeg_pathrJ   win32truewhere)	lenr   rd   _registeredmplrcParamsre   sysplatform)binr   r   r   test_movie_writer_registry   s   

r}   method_nameto_html5_videozanimation.writerzanimation writer not installed)reason)marks	to_jshtmlc              	   C   s   | d | ( tddi ttdd|   W d    n1 s%w   Y  W d    n1 s4w   Y  t|jdksBJ |j\}|jdkrP|j	dksRJ d S )NWARNINGzanimation.embed_limitgư>r   r,   zmatplotlib.animation)
	set_levelrk   rx   
rc_contextgetattrr*   rv   recordsname	levelname)r~   caplogrl   recordr   r   r   test_embed_limit   s   


r   c                 C   s\   |    ttdd|   ttt| g ksJ W d    d S 1 s'w   Y  d S )Nr   r,   )rk   r   r*   listr   striterdir)r~   rl   r   r   r   test_cleanup_temporaries   s   
"r   posixzrequires a POSIX OSc              	   C   s   |   L |ddtjd   tt| d}|d tt|d t	t
j t d W d   n1 s;w   Y  W d   dS W d   dS 1 sSw   Y  dS )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.:rJ   z#!/bin/sh
[[ $@ -eq 0 ]]
i  z	test.mpegN)rk   setenvosenvironr   r   
write_textchmodrf   raises
subprocessCalledProcessErrorr*   r3   )rl   monkeypatchexe_pathr   r   r   test_failing_ffmpeg   s   
	
"r   cache_frame_dataFTc           	         s   t  \}}|g g \G dd dt fdd}fdd}g  fdd}tj||||| d	}t }|jd
|d tdksFJ D ]}| d u | ksSJ qHd S )Nc                   @   s   e Zd ZdS )z2test_funcanimation_cache_frame_data.<locals>.FrameN)r   r   r   r   r   r   r   Frame   s    r   c                      rZ   r   r   r   r    r   r   r      r[   z1test_funcanimation_cache_frame_data.<locals>.initc                    s     | d | d   fS )Nr`   ra   r   )framer    r   r   r"      r#   z4test_funcanimation_cache_frame_data.<locals>.animatec                  3   sP    t dD ] } tddd}tjd} ||d}t| |V  qd S )Nr+   r   rW   r\   )r`   ra   )rp   r]   r^   randomrandappendweakrefref)_r`   ra   r   )r   frames_generatedr   r   frames_generator   s   z=test_funcanimation_cache_frame_data.<locals>.frames_generator)rb   r-   r   r.   rn   r+   )	r$   r%   r&   r2   r   r'   r   r3   rv   )	r   r   r)   r   r"   r   r6   r1   fr   )r   r   r!   r   #test_funcanimation_cache_frame_data   s"   
r   )%r   pathlibr   r   rz   r   numpyr]   rf   
matplotlibrx   r   r$   r   AbstractMovieWriterr   r*   r8   rA   rd   registerrC   WRITER_OUTPUTmarkparametrizerm   rq   r}   paramskipifre   ry   r   r   r   r   r   r   r   r   r   <module>   s`    

#



