a
    s=icH6                  
   @   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
Zd dl
mZ d dl
mZ d dlmZ e	 dd ZG dd	 d	ejZd
d Ze	jjdeedgdgddd Zdd ZejdG dd deZg dZdd Ze	jde e	jjdeedgdgddd Z e	jde	j!de	jj"ej#$  ddde	j!d e	jj"ej%$  d!ddge	jd"g d#e	jjdeedgdgdd$d% Z&e	jjdee'e(d&d'gdgdd(d) Z)d*d+ Z*e	jd,e	j!d-e	jj"ej+ej,d.  d/ddd0ge	jjded1d'gdgdd2d3 Z-e	jd,e	j!d-e	jj"ej+ej,d.  d/ddd0ge	jjded1d'gdgdd4d5 Z.e	jj"e j/d6kd7dd8d9 Z0e	jd:d;d<gd=d> Z1e	jd?g d@dAdB Z2dCdD Z3dEdF Z4edGgdHdIdJ Z5dS )K    N)Path)pyplot)	animation)check_figures_equalc                    s   t  \}}|g g \ |dd |dd  fdd} fdd}tt| d	i }|d
tj	}d|vrxd|d< |f |||d|S )z)Create a simple animation (with options).r   
      c                      s     g g   fS Nset_data liner   p/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/matplotlib/tests/test_animation.pyinit   s    zanim.<locals>.initc                    s.   t ddd}t ||  } ||  fS )Nr   r   d   )nplinspacesinr   )ixyr   r   r   animate   s    zanim.<locals>.animateparamklassframes   )figfunc	init_func)
pltsubplotsplotset_xlimset_ylimdictgetattrpopr   FuncAnimation)requestr   axr   r   kwargsr   r   r   r   anim   s    r,   c                   @   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   )r   outfiledpiargs_count)selfr   r.   r/   r0   r   r   r   setup8   s
    zNullMovieWriter.setupc                 K   s   || _ |  jd7  _d S )Nr   )savefig_kwargsr1   )r2   r4   r   r   r   
grab_frame?   s    zNullMovieWriter.grab_framec                 C   s   d S r	   r   r2   r   r   r   finishC   s    zNullMovieWriter.finishN)__name__
__module____qualname____doc__r3   r5   r7   r   r   r   r   r-   ,   s   r-   c                 C   s   d}d}t dd}t }| j||||d |jtdks>J |j|ksLJ |j|ksZJ |jdkshJ |j	|ksvJ |j
| jksJ d S )Nunused.null2   r   )Zfoo)r/   writerr4   r   r   )r%   r-   saver   r    figurer.   r/   r0   r4   r1   Z
save_count)r,   filenamer/   r4   r>   r   r   r   test_null_movie_writerG   s    

rB   )r   )Zindirectc                 C   sd   t  dkrtj  tjf i | } tjt	dd ~ tj  W d    n1 sV0    Y  d S )NPyPyzAnimation was deletedmatch)
platformpython_implementationr   testingbreak_cyclesr   r(   pytestwarnsWarningr,   r   r   r   test_animation_deleteY   s    
rN   c                  C   s^   G dd dt j} t }d}d}d}d}dg}| ||||}||| |j|jksZJ d S )Nc                   @   s   e Zd Zdd ZdS )z7test_movie_writer_dpi_default.<locals>.DummyMovieWriterc                 S   s   d S r	   r   r6   r   r   r   _runh   s    z<test_movie_writer_dpi_default.<locals>.DummyMovieWriter._runN)r8   r9   r:   rO   r   r   r   r   DummyMovieWriterg   s   rP   r<   r   unusedr   )r   ZMovieWriterr    r@   r3   r/   )rP   r   rA   fpscodecbitrate
extra_argsr>   r   r   r   test_movie_writer_dpi_defaultf   s    rV   nullc                   @   s"   e Zd ZdddZedd ZdS )RegisteredNullMovieWriterNc                 C   s   d S r	   r   )r2   rR   rS   rT   rU   metadatar   r   r   __init__   s    z"RegisteredNullMovieWriter.__init__c                 C   s   dS )NTr   )clsr   r   r   isAvailable   s    z%RegisteredNullMovieWriter.isAvailable)NNNNN)r8   r9   r:   rZ   classmethodr\   r   r   r   r   rX   y   s
   	  
rX   ))ffmpeg	movie.mp4)Zffmpeg_filer_   )imagemagick	movie.gif)Zimagemagick_filera   )pillowra   )htmlz
movie.html)rW   z
movie.nullc                  c   s   t D ]\} }tj| s^tjd|  d}tj| d ||gdV  tj| d t||gdV  qtj|  }t	|dd gD ] }| ||fV  | |t|fV  qvqd S )Nzwriter 'z' not available on this systemZmarksZsupported_formats)
WRITER_OUTPUTr   writersis_availablerJ   markskipr   r   r&   )r>   outputrh   Zwriter_classframe_formatr   r   r   gen_writers   s    

rl   zwriter, frame_format, outputc              	   C   s   |d ur|t jd< tjf i |}d }d }|dkrF|jd d}d}|  & |j|d|d||d W d    n1 sz0    Y  ~d S )	Nzanimation.frame_formatr^   )g33333%@gQk"@g      Y@Zh264   i  )rR   r>   rT   r/   rS   )r    rcParamsr   r(   Z_figZset_size_inchesas_cwdr?   )tmpdirr>   rk   rj   r,   r/   rS   r   r   r   test_save_animation_smoketest   s    

$rq   r>   r^   Requires FFMpeg)reasonrd   r`   zRequires ImageMagickz
html, want))noneN)html5z<video width)Zjshtmlz<script c                 C   s   t  dkrtj  | dkr:|dkr:tj s:t	d tj
f i |}t| |d | }W d    n1 sx0    Y  |d u r|d u sJ tt ~tj  W d    q1 s0    Y  n||v sJ d S )NrC   r`   ru   rr   )animation.writerzanimation.html)rF   rG   r   rH   rI   r   FFMpegWriterr\   rJ   ri   r(   r    
rc_context_repr_html_rK   UserWarning)r>   rc   Zwantr,   r   r   r   test_animation_repr_html   s"    


&*r{   r   )r   c                 C   s   | j dt d d S )Nr<   r>   )r?   r-   rM   r   r   r   test_no_length_frames   s    r}   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sZJ d S )Nr   Znot_available_ever_xxxxzanimation.ffmpeg_pathr^   win32truewhere)	lenr   rf   _registeredmplrn   rg   sysrF   )binr   r   r   test_movie_writer_registry   s    

r   method_nameZto_html5_videorv   zanimation writer not installedZ	to_jshtmlr   c              	   C   s   | d | J tddi t||   W d    n1 sD0    Y  W d    n1 sb0    Y  t|jdks~J |j\}|jdkr|jdksJ d S )NWARNINGzanimation.embed_limitgư>r   zmatplotlib.animation)	Z	set_levelro   r   rx   r&   r   recordsname	levelname)r   Zcaplogrp   r,   recordr   r   r   test_embed_limit   s    

H
r   c                 C   sT   |  8 t||   ttt| g ks2J W d    n1 sF0    Y  d S r	   )ro   r&   listr   striterdir)r   rp   r,   r   r   r   test_cleanup_temporaries
  s    
r   posixzrequires a POSIX OSc              	   C   s   |    |ddtjd   tt| d}|d t|d t	t
j |d W d   n1 sp0    Y  W d   n1 s0    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.:r^   s   #!/bin/sh
[[ $@ -eq 0 ]]
i  z	test.mpegN)ro   Zsetenvosenvironr   r   write_byteschmodrJ   raises
subprocessCalledProcessErrorr?   )rp   Zmonkeypatchr,   Z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sJ t	j
  D ]}| d u | ksJ qd S )Nc                   @   s   e Zd ZdS )z2test_funcanimation_cache_frame_data.<locals>.FrameN)r8   r9   r:   r   r   r   r   Frame.  s   r   c                      s     g g   fS r	   r
   r   r   r   r   r   2  s    z1test_funcanimation_cache_frame_data.<locals>.initc                    s     | d | d   fS )Nr   r   r
   framer   r   r   r   6  s    z4test_funcanimation_cache_frame_data.<locals>.animatec                  3   sN   t dD ]@} tddd}tjd} ||d}t| |V  qd S )Nr   r   r   r   )r   r   )ranger   r   randomZrandappendweakrefref)_r   r   r   )r   frames_generatedr   r   frames_generator<  s    z=test_funcanimation_cache_frame_data.<locals>.frames_generator)r   r   r   r<   r|   r   )r    r!   r"   r%   r   r(   r-   r?   r   r   rH   rI   )	r   r   r*   r   r   r   r,   r>   fr   )r   r   r   r   #test_funcanimation_cache_frame_data)  s"    

r   return_value)Nstringr   )r   artistc                    sd   t  \}}|g \  fdd}tt  tj||dd W d    n1 sV0    Y  d S )Nc                    s(     ddgd| g dkr  S S d S )Nr   r   r   r
   r   r   r   r   r   r   i  s    z test_draw_frame.<locals>.animateT)blit)r    r!   r"   rJ   r   RuntimeErrorr   r(   )r   r   r*   r   r   r   r   test_draw_frameW  s
    	r   c                 C   s   t  \}}dd }tj||ttdddd}|   |jddd W d    n1 s\0    Y  tj	t
d	d
 |  W d    n1 s0    Y  d S )Nc                 S   s   g S r	   r   r   r   r   r   updatey  s    z(test_exhausted_animation.<locals>.updater   Fr   repeatr   test.gifrb   r|   	exhaustedrD   )r    r!   r   r(   iterr   ro   r?   rJ   rK   rz   _startrp   r   r*   r   r,   r   r   r   test_exhausted_animationv  s    
,r   c                 C   sb   t  \}}dd }tj||g ddd}tjtdd |  W d    n1 sT0    Y  d S )Nc                 S   s   g S r	   r   r   r   r   r   r     s    z%test_no_frame_warning.<locals>.updateFr   r   rD   )r    r!   r   r(   rJ   rK   rz   r   r   r   r   r   test_no_frame_warning  s    r   Zpng)
extensionsc                    s   |  }|ddtj  |dd tddtj d|g g \  fdd} fdd	}tj|||d
ddd}| 	  |
d W d    n1 s0    Y  |  }|ddtj  |dd |td  d S )Nr      r   r   r   c                      s     g g   fS r	   r
   r   r   r   r   r     s    z"test_animation_frame.<locals>.initc                    s      t| d    fS )Nr   )r   r   r   r   r   r   r   r   r     s    z%test_animation_frame.<locals>.animater   TF)r   r   r   r   r   g{Gz?)Zadd_subplotr#   r   pir$   r   r"   r   r(   ro   r?   r   )rp   Zfig_testZfig_refr*   r   r   r,   r   r   r   test_animation_frame  s"    
(r   )6r   pathlibr   rF   r   r   r   numpyr   rJ   Z
matplotlibr   r   r    r   Zmatplotlib.testing.decoratorsr   Zfixturer,   ZAbstractMovieWriterr-   rB   rh   Zparametrizer%   rN   rV   rf   registerrX   re   rl   rq   r   Zskipifrw   r\   ZImageMagickWriterr{   r   r   r}   r   rg   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   









-

