U
    d»{jH6  ã                
   @   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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ee'e(d.ƒƒd/�gdgd�d0d1„ ƒZ)d2d3„ Z*e	j d4e	j!d5e	jj"ej +ej,d6 ¡ d7d$�d%�d8g¡e	jjded9d/�gdgd�d:d;„ ƒƒZ-e	j d4e	j!d5e	jj"ej +ej,d6 ¡ d7d$�d%�d8g¡e	jjded9d/�gdgd�d<d=„ ƒƒZ.e	jj"e j/d>kd?d$�d@dA„ ƒZ0e	j dBdCdDg¡dEdF„ ƒZ1e	j dGddHd9dIdJg¡dKdL„ ƒZ2dMdN„ Z3dOdP„ Z4edQgdR�dSdT„ ƒZ5dS )Ué    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   ú^/var/www/html/bwave/python/venv/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   Ú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>t‚|j|ksLt‚|j|ksZt‚|j	dksht‚|j
|ksvt‚|j| jks†t‚d S )Núunused.nullé2   r   )Zfoo)r/   Úwriterr4   r   r   )r%   r-   Úsaver   r    ÚfigureÚAssertionErrorr.   r/   r0   r4   r1   Z
save_count)r,   Úfilenamer/   r4   r>   r   r   r   Útest_null_movie_writerG   s    

ÿrC   )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_deleteY   s    
rO   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   Ú_runh   s    z<test_movie_writer_dpi_default.<locals>.DummyMovieWriter._runN)r8   r9   r:   rP   r   r   r   r   ÚDummyMovieWriterg   s   rQ   r<   r   Zunusedr   )r   ZMovieWriterr    r@   r3   r/   rA   )rQ   r   rB   Ú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_availablerK   ÚmarkÚskipr   r   r&   )r>   Úoutputrh   Zwriter_classÚframe_formatr   r   r   Úgen_writers–   s    
ÿ
rl   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_formatr^   )g33333³%@gìQ¸…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 |Ž}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 )NrD   r`   ru   rr   )úanimation.writerzanimation.html)rG   rH   r   rI   rJ   r   ÚFFMpegWriterr\   rK   ri   r(   r    Ú
rc_contextZ_repr_html_rA   rL   ÚUserWarning)r>   rc   Zwantr,   r   r   r   Útest_animation_repr_html¿   s"    
þ
ÿ
rz   r   )r   c                 C   s   | j dtƒ d� d S )Nr<   ©r>   )r?   r-   rN   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_pathr^   Úwin32ÚtrueÚwhere)
Úlenr   rf   Ú_registeredrA   Úmplrn   rg   ÚsysrG   )Úbinr   r   r   Útest_movie_writer_registryî   s    

r…   Úmethod_nameZto_html5_videorv   zanimation writer not installedZ	to_jshtmlr   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_levelro   r‚   rx   r&   r€   ÚrecordsrA   ÚnameÚ	levelname)r†   Zcaplogrp   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	   )ro   r&   Úlistr   ÚstrÚiterdirrA   )r†   rp   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.:r^   s   #!/bin/sh
[[ $@ -eq 0 ]]
ií  z	test.mpegN)ro   ZsetenvÚosÚenvironr   rŽ   Úwrite_bytesÚchmodrK   Ú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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   Ú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€   rA   r   rI   rJ   )	r›   r   r*   r   r   r¦   r,   r>   Úfr   )rœ   r¥   r   r   Ú#test_funcanimation_cache_frame_data)  s"    
þ
r¨   Úreturn_valueÚstring)rª   Úartistc              	      sP   t  ¡ \}}| g ¡\‰ ‡ ‡fdd„}t t¡� tj||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   i  s    z test_draw_frame.<locals>.animateT)Úblit)r    r!   r"   rK   r—   ÚRuntimeErrorr   r(   )r©   r   r*   r   r   r­   r   Útest_draw_frameW  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   Úupdatey  s    z(test_exhausted_animation.<locals>.updater   F©r   Úrepeatr›   útest.gifrb   r{   Ú	exhaustedrE   )r    r!   r   r(   ÚiterrŸ   ro   r?   rK   rL   ry   Ú_start©rp   r   r*   r±   r,   r   r   r   Útest_exhausted_animationv  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µ   rE   )r    r!   r   r(   rK   rL   ry   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(   ro   r?   r   )rp   Zfig_testZfig_refr*   r   r   r,   r   r½   r   Útest_animation_frame—  s*        þ
r¿   )6r“   Úpathlibr   rG   r˜   rƒ   r¢   Únumpyr   rK   Z
matplotlibr‚   r   r    r   Zmatplotlib.testing.decoratorsr   Zfixturer,   ZAbstractMovieWriterr-   rC   rh   Zparametrizer%   rO   rV   rf   ÚregisterrX   re   rl   rq   r   Zskipifrw   r\   ZImageMagickWriterrz   r¶   rŸ   r|   r…   rg   rn   rŒ   r�   r‰   rš   r¨   r°   r¹   rº   r¿   r   r   r   r   Ú<module>   sÄ   


ù 
þÿ 
þÿû
ýÿ

þýþþýþ

-ö

