U
    Âmœd×@  ã                
   @   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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dddddddg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(d)d*d+g¡e
jjdeed�gdgd�d,d-„ ƒƒƒZ'e
jjdd.e(e)d/ƒƒd0œgdgd�d1d2„ ƒZ*d3d4„ Z+e
j d5e
j"d6e
jj#ej ,ej-d7 ¡ d8d$�d%�d9g¡e
jjded:d;�gdgd�d<d=„ ƒƒZ.e
j d5e
j"d6e
jj#ej ,ej-d7 ¡ d8d$�d%�d9g¡e
jjded:d;�gdgd�d>d?„ ƒƒZ/e
jj#e j0d@kdAd$�dBdC„ ƒZ1e
j dDdEdFg¡dGdH„ ƒZ2e
j dIddJd:dKdLg¡dMdN„ ƒZ3dOdP„ Z4dQdR„ Z5edSgdT�dUdV„ ƒZ6e
jjdeed�gdgd�dWdX„ ƒZ7e
jjdeed�gdgd�dYdZ„ ƒZ8e
jjdeed�gdgd�d[d\„ ƒZ9d]d^„ Z:dS )_é    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|krxd|d< |f |||dœ|—ŽS )z)Create a simple animation (with options).r   é
   éÿÿÿÿé   c                      s   ˆ   g g ¡ ˆ fS ©N©Úset_data© ©Úliner   úX/home/sam/Atlas/atlas_env/lib/python3.8/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   Úsetup9   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   ÚfinishD   s    zNullMovieWriter.finishN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r3   r5   r7   r   r   r   r   r-   -   s   r-   c                 C   sª   dt jd< d}d}tdd�}tƒ }| j||||d� |jt  d¡ksHt‚|j|ksVt‚|j	|ksdt‚|j
d	ksrt‚| ¡ D ]\}}|j| |kszt‚qz|j| jks¦t‚d S )
NÚautozsavefig.facecolorúunused.nullé2   r   )Zfoo)r/   Úwriterr4   r   r   )r    ÚrcParamsr%   r-   Úsaver   ÚfigureÚAssertionErrorr.   r/   r0   Úitemsr4   r1   Ú_save_count)r,   Úfilenamer/   r4   r?   ÚkÚvr   r   r   Útest_null_movie_writerH   s    


ÿrI   )r   )Zindirectc              	   C   sL   t  ¡ dkrtj ¡  tjf | Ž} tjt	dd�� ~ tj ¡  W 5 Q R X d S )NÚPyPyzAnimation was deleted©Úmatch)
ÚplatformÚpython_implementationr   ÚtestingÚbreak_cyclesr   r(   ÚpytestÚwarnsÚWarning©r,   r   r   r   Útest_animation_delete^   s    
rU   c                  C   s^   G dd„ dt jƒ} t ¡ }d}d}d}d}dg}| ||||ƒ}| ||¡ |j|jksZt‚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   Ú_runm   s    z<test_movie_writer_dpi_default.<locals>.DummyMovieWriter._runN)r8   r9   r:   rV   r   r   r   r   ÚDummyMovieWriterl   s   rW   r=   r   Zunusedr   )r   ZMovieWriterr    rB   r3   r/   rC   )rW   r   rF   ÚfpsÚcodecÚbitrateÚ
extra_argsr?   r   r   r   Útest_movie_writer_dpi_defaultk   s    r\   Únullc                   @   s"   e Zd Zddd„Zedd„ ƒZdS )ÚRegisteredNullMovieWriterNc                 C   s   d S r	   r   )r2   rX   rY   rZ   r[   Ú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:   r`   Úclassmethodrb   r   r   r   r   r^   ~   s   	    ÿ
r^   )Úffmpegú	movie.mp4)Zffmpeg_filere   )Úimagemagickú	movie.gif)Zimagemagick_filerg   )Úpillowrg   )Úhtmlz
movie.html)r]   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_availablerQ   ÚmarkÚskipr   r   r&   )r?   Úoutputrn   Zwriter_classÚframe_formatr   r   r   Úgen_writers›   s    
ÿ
rr   zwriter, frame_format, outputc              	   C   sr   |d k	r|t jd< tjf |Ž}d }d }|dkrB|j d¡ d}d}|  ¡ � |j|d|d||d� W 5 Q R X ~d S )	Nzanimation.frame_formatrd   )g33333³%@gìQ¸…k"@g      Y@Zh264é   iô  )rX   r?   rZ   r/   rY   )r    r@   r   r(   Z_figZset_size_inchesÚas_cwdrA   )Útmpdirr?   rq   rp   r,   r/   rY   r   r   r   Útest_save_animation_smoketest­   s    

ÿrv   r?   rd   úRequires FFMpeg)Úreasonrj   rf   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 |Ž}t | |dœ¡� | ¡ }W 5 Q R X |d kr¢|d ks~t‚t t¡� ~tj ¡  W 5 Q R X n||ks®t‚d S )NrJ   rf   rz   rw   )úanimation.writerzanimation.html)rM   rN   r   rO   rP   r   ÚFFMpegWriterrb   rQ   ro   r(   r    Ú
rc_contextZ_repr_html_rC   rR   ÚUserWarning)r?   ri   Zwantr,   r   r   r   Útest_animation_repr_htmlÄ   s"    
þ
ÿ
r   r   r   )Ú
save_countr   c                 C   s   | j dtƒ d� d S )Nr=   ©r?   )rA   r-   rT   r   r   r   Útest_no_length_framesí   s    r‚   c                  C   s^   t tjjƒdkst‚dtjd< tj d¡r.t‚tj	dkr<dnd} | tjd< tj d¡sZt‚d S )Nr   Znot_available_ever_xxxxzanimation.ffmpeg_pathrd   Úwin32ÚtrueÚwhere)
Úlenr   rl   Ú_registeredrC   Úmplr@   rm   ÚsysrM   )Úbinr   r   r   Útest_movie_writer_registryö   s    

r‹   Úmethod_nameZto_html5_videor{   zanimation writer not installedZ	to_jshtmlr   )r   c              
   C   sz   |  d¡ | ¡ �, t ddi¡� t|| ƒƒ  W 5 Q R X W 5 Q R X t|jƒdksVt‚|j\}|jdkrr|j	dksvt‚d S )NÚWARNINGzanimation.embed_limitg�íµ ÷Æ°>r   zmatplotlib.animation)
Z	set_levelrt   rˆ   r}   r&   r†   ÚrecordsrC   ÚnameÚ	levelname)rŒ   Zcaplogru   r,   Úrecordr   r   r   Útest_embed_limit   s    

 
ÿr’   c              	   C   s@   |  ¡ �. t|| ƒƒ  ttt|ƒƒ ¡ ƒg ks2t‚W 5 Q R X d S r	   )rt   r&   Úlistr   ÚstrÚiterdirrC   )rŒ   ru   r,   r   r   r   Útest_cleanup_temporaries  s    
r–   Úposixzrequires a POSIX OSc              
   C   st   |   ¡ �b | ddtjd  ¡ tt| ƒdƒ}| d¡ t |d¡ t 	t
j¡� | d¡ W 5 Q R X W 5 Q R X 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.:rd   s   #!/bin/sh
[[ $@ -eq 0 ]]
ií  z	test.mpegN)rt   ZsetenvÚosÚenvironr   r”   Úwrite_bytesÚchmodrQ   ÚraisesÚ
subprocessÚCalledProcessErrorrA   )ru   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„}d	}tj||||| |d
�}tƒ }|jd|d� tˆƒdks’t	‚t
j ¡  ˆD ]}	|	ƒ d k| ks t	‚q d S )Nc                   @   s   e Zd ZdS )z2test_funcanimation_cache_frame_data.<locals>.FrameN)r8   r9   r:   r   r   r   r   ÚFrame6  s   r¢   c                      s   ˆ   g g ¡ ˆ fS r	   r
   r   r   r   r   r   :  s    z1test_funcanimation_cache_frame_data.<locals>.initc                    s   ˆ   | d | d ¡ ˆ fS )Nr   r   r
   ©Úframer   r   r   r   >  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_generatorD  s    z=test_funcanimation_cache_frame_data.<locals>.frames_generatorr   )r   r   r¡   r€   r=   r�   r   )r    r!   r"   r%   r   r(   r-   rA   r†   rC   r   rO   rP   )
r¡   r   r*   r   r   r¬   Z
MAX_FRAMESr,   r?   Úfr   )r¢   r«   r   r   Ú#test_funcanimation_cache_frame_data1  s&    
ý
r®   Úreturn_valueÚstring)r°   Úartistc              	      sR   t  ¡ \}}| g ¡\‰ ‡ ‡fdd„}t t¡� tj||ddd� W 5 Q R X 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   s  s    z test_draw_frame.<locals>.animateTF)Úblitr¡   )r    r!   r"   rQ   r�   ÚRuntimeErrorr   r(   )r¯   r   r*   r   r   r³   r   Útest_draw_framea  s    	   ÿr¶   c              	   C   sx   t  ¡ \}}dd„ }tj||ttdƒƒddd�}|  ¡ � |jddd� W 5 Q R X tj	t
d	d
�� | ¡  W 5 Q R X d S )Nc                 S   s   g S r	   r   r£   r   r   r   Úupdate…  s    z(test_exhausted_animation.<locals>.updater   F©r   Úrepeatr¡   útest.gifrh   r�   Ú	exhaustedrK   )r    r!   r   r(   Úiterr¥   rt   rA   rQ   rR   r~   Ú_start©ru   r   r*   r·   r,   r   r   r   Útest_exhausted_animation‚  s      
 þ
r¿   c              	   C   sN   t  ¡ \}}dd„ }tj||g ddd�}tjtdd�� | ¡  W 5 Q R X d S )Nc                 S   s   g S r	   r   r£   r   r   r   r·   —  s    z%test_no_frame_warning.<locals>.updateFr¸   r»   rK   )r    r!   r   r(   rQ   rR   r~   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 5 Q R X |  ¡ }| 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{®Gáz¤?)Zadd_subplotr#   r   Úpir$   r   r"   r   r(   rt   rA   r   )ru   Zfig_testZfig_refr*   r   r   r,   r   rÃ   r   Útest_animation_frame£  s*        þ
rÅ   c              	   C   sz   d}t tdƒƒ}d|›dt|ƒ›d�}tjtt |¡d�� tj	f | ||dœ–Ž} W 5 Q R X | j
t|ƒksnt‚|  ¡  d S )Nr   rÂ   ú%You passed in an explicit save_count=z0 which is being ignored in favor of len(frames)=Ú.rK   ©r   r€   )r“   r¥   r†   rQ   rR   r~   ÚreÚescaper   r(   rE   rC   Ú
_init_draw©r,   r€   r   Úmatch_targetr   r   r   Ú,test_save_count_override_warnings_has_lengthÅ  s    ÿÿrÎ   c              	   C   st   d}d}d|›d�d d|›d� }t jtt |¡d�� tjf | ||d	œ–Ž} W 5 Q R X | j|ksht‚|  	¡  d S )
Nr   é   rÆ   ú z#which is being ignored in favor of úframes=rÇ   rK   rÈ   )
rQ   rR   r~   rÉ   rÊ   r   r(   rE   rC   rË   rÌ   r   r   r   Ú(test_save_count_override_warnings_scalerØ  s    
ÿ
þÿÿrÒ   c              	   C   sr   d}t tdƒƒ}d|›d|›d�}tjtt |¡d�� tjf | ||dœ–Ž} W 5 Q R X | j	dksft
‚|  ¡  d S )	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`.rK   )r¡   r   F)r¼   r¥   rQ   rR   r~   rÉ   rÊ   r   r(   Z_cache_frame_datarC   rË   )r,   r¡   r   rÍ   r   r   r   Útest_disable_cache_warningë  s    ÿÿrÓ   c              	   C   sP   t jdkrt d¡}n
t d¡}tjt|d�� | jdt 	¡ d� W 5 Q R X d S )Nrƒ   z7[WinError 3] The system cannot find the path specified:z*[Errno 2] No such file or directory: '/foorK   z+/foo/bar/aardvark/thiscannotreallyexist.mp4r�   )
r‰   rM   rÉ   rÊ   rQ   r�   ÚFileNotFoundErrorrA   r   ZFFMpegFileWriter)r,   Z	match_strr   r   r   Útest_movie_writer_invalid_pathÿ  s    

ÿrÕ   );r™   Úpathlibr   rM   rÉ   rž   r‰   r¨   Únumpyr   rQ   Z
matplotlibrˆ   r   r    r   Zmatplotlib.testing.decoratorsr   Zfixturer,   ZAbstractMovieWriterr-   rI   rn   Zparametrizer%   rU   r\   rl   Úregisterr^   rk   rr   rv   r   Zskipifr|   rb   ZImageMagickWriterr   r¼   r¥   r‚   r‹   rm   r@   r’   r–   r�   r    r®   r¶   r¿   rÀ   rÅ   rÎ   rÒ   rÓ   rÕ   r   r   r   r   Ú<module>   sØ   


ù 
þÿ 
þÿû
ýý

þýþþýþ

/ö


!


