a
    ëÝEbÀ2  ã                
   @   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 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�d/g¡e	jjded0d&�gdgd�d1d2„ ƒƒZ+e	j d+e	jd,e	jj ej )ej*d- ¡ d.d�d�d/g¡e	jjded0d&�gdgd�d3d4„ ƒƒZ,e	jj e j-d5kd6d�d7d8„ ƒZ.e	j d9d:d;g¡d<d=„ ƒZ/e	j d>g d?¢¡d@dA„ ƒZ0dBdC„ Z1dDdE„ Z2dS )Fé    N)ÚPath)Úpyplot)Ú	animationc                    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   ú_/home/ja/django-apps/lartica_env/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ÚplotZset_xlimZ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,   r-   r   r   r   Úsetup7   s
    zNullMovieWriter.setupc                 K   s   || _ |  jd7  _d S )Nr   )Úsavefig_kwargsr.   )r/   r1   r   r   r   Ú
grab_frame>   s    zNullMovieWriter.grab_framec                 C   s   d S r   r   ©r/   r   r   r   ÚfinishB   s    zNullMovieWriter.finishN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r0   r2   r4   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s†J ‚d S )Núunused.nullé2   r   )Zfoo)r,   Úwriterr1   r   r   )r"   r*   Úsaver   r   Úfigurer+   r,   r-   r1   r.   Z
save_count)r)   Úfilenamer,   r1   r;   r   r   r   Útest_null_movie_writerF   s    

ÿr?   )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_deleteX   s    
rK   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   r3   r   r   r   Ú_rung   s    z<test_movie_writer_dpi_default.<locals>.DummyMovieWriter._runN)r5   r6   r7   rL   r   r   r   r   ÚDummyMovieWriterf   s   rM   r9   r   Zunusedr   )r   ZMovieWriterr   r=   r0   r,   )rM   r   r>   ÚfpsÚcodecÚbitrateÚ
extra_argsr;   r   r   r   Útest_movie_writer_dpi_defaulte   s    rR   Únullc                   @   s"   e Zd Zddd„Zedd„ ƒZdS )ÚRegisteredNullMovieWriterNc                 C   s   d S r   r   )r/   rN   rO   rP   rQ   Úmetadatar   r   r   Ú__init__�   s    z"RegisteredNullMovieWriter.__init__c                 C   s   dS )NTr   )Úclsr   r   r   ÚisAvailable…   s    z%RegisteredNullMovieWriter.isAvailable)NNNNN)r5   r6   r7   rV   ÚclassmethodrX   r   r   r   r   rT   x   s
   	  ÿ
rT   )	)Úffmpegú	movie.mp4)Zffmpeg_filer[   )Zavconvr[   )Zavconv_filer[   )Úimagemagickú	movie.gif)Zimagemagick_filer]   )Úpillowr]   )Úhtmlz
movie.html)rS   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_availablerG   ÚmarkÚskipr   r   r#   )r;   Úoutputrd   Zwriter_classÚframe_formatr   r   r   Úgen_writers—   s    
ÿ
rh   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_formatrZ   )g33333³%@gìQ¸…k"@g      Y@Zh264é   iô  )rN   r;   rP   r,   rO   )r   ÚrcParamsr   r%   Z_figZset_size_inchesÚas_cwdr<   )Útmpdirr;   rg   rf   r)   r,   rO   r   r   r   Útest_save_animation_smoketest©   s    

ÿ$rm   r;   rZ   úRequires FFMpeg)Úreasonr`   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 s–J ‚t t¡� ~tj ¡  W d   ƒ qÚ1 sÂ0    Y  n||v sÚJ ‚d S )Nr@   r\   rq   rn   )úanimation.writerzanimation.html)rC   rD   r   rE   rF   r   ÚFFMpegWriterrX   rG   re   r%   r   Ú
rc_contextÚ_repr_html_rH   ÚUserWarning)r;   r_   Zwantr)   r   r   r   Útest_animation_repr_htmlÀ   s"    
þ
ÿ
&*rw   r   )r   c                 C   s   | j dtƒ d� d S )Nr9   ©r;   )r<   r*   rJ   r   r   r   Útest_no_length_framesé   s    ry   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_pathrZ   Úwin32ÚtrueÚwhere)	Úlenr   rb   Ú_registeredÚmplrj   rc   ÚsysrC   )Úbinr   r   r   Útest_movie_writer_registryï   s    

r‚   Úmethod_nameZto_html5_videorr   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sžJ ‚d S )NÚWARNINGzanimation.embed_limitg�íµ ÷Æ°>r   zmatplotlib.animation)	Z	set_levelrk   r   rt   r#   r}   ÚrecordsÚnameÚ	levelname)rƒ   Zcaplogrl   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   )rk   r#   Úlistr   ÚstrÚiterdir)rƒ   rl   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 t|ƒd¡ t 	t
j¡� | d¡ W d  ƒ n1 st0    Y  W d  ƒ n1 s’0    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.:rZ   z#!/bin/sh
[[ $@ -eq 0 ]]
ií  z	test.mpegN)rk   ZsetenvÚosÚenvironr   r‹   Ú
write_textÚchmodrG   ÚraisesÚ
subprocessÚCalledProcessErrorr<   )rl   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ŒJ ‚t	j
 ¡  ˆD ]}|ƒ d u | ksšJ ‚qšd S )Nc                   @   s   e Zd ZdS )z2test_funcanimation_cache_frame_data.<locals>.FrameN)r5   r6   r7   r   r   r   r   ÚFrame0  s   r™   c                      s   ˆ   g g ¡ ˆ fS r   r	   r   r   r   r   r   4  s    z1test_funcanimation_cache_frame_data.<locals>.initc                    s   ˆ   | d | d ¡ ˆ fS )Nr   r   r	   ©Úframer   r   r   r   8  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˜   r9   rx   r   )r   r    r!   r"   r   r%   r*   r<   r}   r   rE   rF   )	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   k  s    z test_draw_frame.<locals>.animateT)Zblit)r   r    r!   rG   r”   ÚRuntimeErrorr   r%   )r¦   r   r'   r   r   r©   r   Útest_draw_frameY  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 s’0    Y  d S )Nc                 S   s   g S r   r   rš   r   r   r   Úupdate{  s    z(test_exhausted_animation.<locals>.updater   F©r   Úrepeatr˜   ztest.gifr^   rx   Ú	exhaustedrA   )r   r    r   r%   Úiterrœ   rk   r<   rG   rH   rv   Ú_start©rl   r   r'   r¬   r)   r   r   r   Útest_exhausted_animationx  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¯   rA   )r   r    r   r%   rG   rH   rv   r±   r²   r   r   r   Útest_no_frame_warningŠ  s    þr´   )3r�   Úpathlibr   rC   r•   r€   rŸ   Únumpyr   rG   Z
matplotlibr   r   r   r   Zfixturer)   ZAbstractMovieWriterr*   r?   rd   Zparametrizer"   rK   rR   rb   ÚregisterrT   ra   rh   rm   r   Zskipifrs   rX   ZImageMagickWriterrw   r°   rœ   ry   r‚   rc   rj   r‰   r�   r†   r—   r¥   r«   r³   r´   r   r   r   r   Ú<module>   s˜   



þÿ
þÿû
ÿ

þýþþýþ

-
