U
    Fvfr4                     @   s^  d 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Zddl	m
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 ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lm Z  dd Z!ej"j#dddd Z$dd Z%dd Z&edgdddd Z'dd Z(dd Z)dd Z*d d! Z+ed"gddd#d$ Z,ed%d&d'd( Z-d)d* Z.d+d, Z/ed-gdd.e0 d/kr|d0ndd1d2d3 Z1ed4gddd5d6 Z2d7d8 Z3ed9gd:d;d<d= Z4d>d? Z5e d@dA Z6ej"7dBdCdDged%d&dEdF Z8dGdH Z9dIdJ Z:edKgdd.dLdMdN Z;e dOdP Z<dQdR Z=e dSdT Z>edUgd&dVdW Z?dS )Xz%
Tests specific to the lines module.
    N)SimpleNamespace)cycler)assert_array_equal)_path)MarkerStyle)Path)image_comparisoncheck_figures_equal)MatplotlibDeprecationWarningc                  C   sH   d\} }t ddgt ddg }}d}tt| ||||dg dS )zTest a problematic case.)i)  i  g     H@g     W@g     @g(\@r   N)nparrayr   mlinesZsegment_hits)ZcxcyxyZradius r   ?/tmp/pip-unpacked-wheel-7vhvci0g/matplotlib/tests/test_lines.pytest_segment_hits   s    r      )Zrerunsc            
      C   s   d} t dd| }t jj| d}t }t }t||}|	d t
tj|jjddd}|| t
tj|jjddd}|| }d}	||	k std	S )
ac  
    GitHub issue #1256 identified a bug in Line.draw method

    Despite visibility attribute set to False, the draw method was not
    returning early enough and some pre-rendering code was executed
    though not necessary.

    Consequence was an excessive draw time for invisible Line instances
    holding a large number of points (Npts> 10**6)
    i r      sizeFr   )numberrepeat   N)r   linspacerandomnormalpltfigureZsubplotr   Line2DZset_visiblemintimeitr   canvasdrawZadd_lineAssertionError)
Nr   r   figaxlZ	t_no_lineZt_invisible_lineZslowdown_factorZslowdown_thresholdr   r   r   test_invisible_Line_rendering%   s    

r*   c                  C   s6   t  \} }tjd |jtjdddgd d S Nr         r   )r   r   )Z
linestylesr   subplotsr   r   seedZcontourZrandnr'   r(   r   r   r   test_set_line_coll_dashQ   s    r3   c               	   C   s   t jtdd tdg  W 5 Q R X t jtdd tg d W 5 Q R X tg g } t t | d W 5 Q R X t t | d W 5 Q R X d S )Nzxdata must be)matchr   zydata must ber   )	pytestraisesRuntimeErrorr   r    Zwarnsr
   Z	set_xdataZ	set_ydataliner   r   r   test_invalid_line_dataY   s    r:   Zline_dashesT)remove_textc                  C   s$   t  \} }|jtdddd d S )N
   r.      	linestylelw)r   r0   plotranger2   r   r   r   test_line_dashesi   s    rC   c                  C   st   t  \} }|jtddd |jtddd |jtddd |jtddd |jtddd | j  d S )Nr<   none)colorrz.3)r   r   r   r   )r   r   r   r   r0   rA   rB   r#   r$   r2   r   r   r   test_line_colorsp   s    rH   c               	   C   s0   t g g } tt | d W 5 Q R X d S NZfoobar)r   r    r5   r6   
ValueErrorZ	set_colorr8   r   r   r   test_valid_colorsz   s    rK   c                  C   sP   t  \} }ddddddddd	d
dg ffD ]}|jtd|d q*| j  d S )N-Zsolid--dashedz-.dashdot:dotted)r   N)r   r   r   r<   )r?   rG   )r'   r(   lsr   r   r   test_linestyle_variants   s         rS   c               	   C   s0   t g g } tt | d W 5 Q R X d S )NZaardvark)r   r    r5   r6   rJ   Zset_linestyler8   r   r   r   test_valid_linestyles   s    rT   zdrawstyle_variants.pngc                  C   sX   t d\} }dddddd g}t|j|D ](\}}|jtd|d |jd	d	d
 q*d S )N   defaultz	steps-mid	steps-prez
steps-poststeps  Z	drawstyle)r   r   )ZxlimZylim)r   r0   zipflatrA   rB   set)r'   axsZdssr(   Zdsr   r   r   test_drawstyle_variants   s
    r_   )png)
extensionsc                 C   sT   |   }td}||d | |  }t dd}|j||||j d d S )NrY   g     @@        )Z	transform)add_subplotr   arangerA   mtransformsZAffine2D	translateZ	transData)fig_reffig_testr(   r   tr   r   r   test_no_subslice_with_transform   s    
rj   c               	   C   s0   t g g } tt | d W 5 Q R X d S rI   )r   r    r5   r6   rJ   set_drawstyler8   r   r   r   test_valid_drawstyles   s    rl   c                  C   s   t ddt j d} t | }t \}}|| |\}|d t|	 j
dt|  d ksdt|d t|	 j
t| kstd S )Nr   r   r<   rW   r   rV   )r   r   pisinr   r0   rA   rk   lenget_pathverticesr%   )r   r   r'   r(   r9   r   r   r   test_set_drawstyle   s    

"
rr   Zline_collection_dashesZmpl20)aarch64ppc64les390xg?)r;   styleZtolc                  C   s6   t  \} }tjd |jtjdddgd d S r+   r/   r2   r   r   r   test_set_line_coll_dash_image   s    rw   zmarker_fill_styles.pngc                  C   s   t dddgdddddtdddgg} d}tddg}tdd	g}t \}}td
D ]^\}}ttjj	D ]H\}}	t
| }
|j|d | || d|d   |d||	|	d|
|
dd qrq^|ddg |ddg d S )Nr   r   gz#ff0000cmr   Z
lightgreen	   zov^<>8sp*hHDdPXr<         ?r   r,   r=   )	markerZ
markersizeZmarkerfacecoloralt	fillstylelabelZ	linewidthrE   ZmarkeredgecolorZmarkeredgewidthg      @   )	itertoolscycler   r   r   r0   	enumerater   r    Z
fillStylesnextrA   Zset_ylimZset_xlim)colorsZaltcolorr   r   r'   r(   jr}   ifsrE   r   r   r   test_marker_fill_styles   s.     
r   c                  C   sD   t jdddgtddddd\} |  dks0t|  dks@td	S )
z=Test that markerfacecolor does not override fillstyle='none'.r   r   r   orD   )r~   red)r}   ZmarkerfacecolorN)r   rA   r   Zget_fillstyler%   Zget_markerfacecolor)r)   r   r   r   test_markerfacecolor_fillstyle   s
    r   Zscaled_linesrV   )rv   c            	      C   s   t dd} t \}}dddg}ttjd }tt||D ]L\}\}}t dddD ]0}|j	| |t 
d	 d
|  f||d| qXq>d S )Nr       rN   rQ   rO   axes.prop_cycler|   r<   2   皙?r>   )r   r   r   r0   r   
matplotlibrcParamsr   r[   rA   Zones)	thr'   r(   Zlins_stylesr   r   rR   Zstyr@   r   r   r   test_lw_scaling   s    
r   c                  C   s   t tdddgstt tdtjdgs6tt ddgtjgd  ddg r\tdtjj } t	
tjg|  t|  d S )Nr   r   r   r=   d   r   )r   Zis_sorted_and_has_non_nanr   r   r%   nanr   r    Z_subslice_optim_min_sizer   rA   rB   )nr   r   r   test_is_sorted_and_has_non_nan   s
    &r   c                 C   s>   |   ddgd |  jdddgdddgdddgd d S )Nr   r   z-or   	markevery)r0   steprA   rh   rg   r   r   r   test_step_markers   s    r   parentr   axesc              
      sH  t jd t ddd}t jt|}d dddddgdd	gtdd
dt t||dk ddg	}dddddddddg	}|dkr|d d }|d d }fdd}fdd}nD|dkrt	ddj
t	ddj
 fd d} fd!d}|D ]}	||||	d" q|D ].}	t t|	tt}
||||
d" qd S )#N*   r   r         )r   r=   r=      r<   r   r|   333333?)r   g?Z11111111111111Z10001000100010Z00100001000010Z01000100000100Z10000000000001Z00000101010000Z01110001110110Z11011011011110Z01010011011101r   c                   s     tj| |d|d d S Nr   r}   r   
add_artistr   r    r   r   r   )rh   r   r   add_test  s    z test_markevery.<locals>.add_testc                   s     tj| |d|d d S r   r   r   )rg   r   r   add_ref  s    ztest_markevery.<locals>.add_refr   r   c                   s   t  j| |d|d d S Nz-gDr   r   rA   r   )axs_testr   r   r   %  s    c                   s   t  j| |d|d d S r   r   r   )axs_refr   r   r   (  s    r   )r   r   r1   r   Zrandro   slicerd   iterr0   r\   r   listZastypeintbool)rh   rg   r   r   r   Z
cases_testZ	cases_refr   r   Zcasemer   )r   r   rg   rh   r   test_markevery  sB     
     r   c               	   C   sL   t  } | tjddgddgddd tt | j	  W 5 Q R X d S )Nr   r   r   r|   r   )
r   r   r   r   r    r5   r6   rJ   r#   r$   )r'   r   r   r   .test_markevery_figure_line_unsupported_relsize3  s     r   c                  C   s   t  \} }|jdddgtdd\}| j  | dks@t|d | j  |td | j  t	
ddgd	dgd
dgg}|jd	ddgt|dd\}|jd
dd	g|dd\}t| j|j t| j|j d S )Nr   r   r   D)r}   sr   r   r   r      )r}   ms)r   r0   rA   r   r#   r$   Z
get_markerr%   Z
set_markerr   Z_create_closedr   rq   )r'   r(   r9   Z	triangle1Zline2Zline3r   r   r   test_marker_as_markerstyle:  s    



r   zstriped_line.png)r;   rv   c               	   C   sf   t jd} t \}}|j| jdddddddd	 |j| jddd
dddddd |jdd d S )Ni!N,   r   ZorangeZbluerM   r=    )rE   gapcolorr?   r@   r   r   Zblack)r   )r   r=   r   r   r|   )rE   r   r?   r@   r   alpha)Zhandlelength)r   r   Zdefault_rngr   r0   rA   uniformZlegend)rng_r(   r   r   r   test_striped_linesN  s         r   c                 C   sB   |   jddgdddgd |  jddgddddddgd d S )Nr   r   r   )Zdashes)rc   rA   r   r   r   r   test_odd_dashesY  s    r   c                  C   s  t  \} }t| jjd | jjd d d}|jddgddgdd\}||\}}|r\t|jddgddgddd	\}||\}}|stt	|d
 dg |jddgddgdd\}||\}}|rt|
d ||\}}|stt	|d
 dg d S )Nr      )r   r   r   r   T)pickerr,   )r   Z
pickradiusind)r   r0   r   ZbboxwidthheightrA   containsr%   r   Zset_pickradius)r'   r(   Zmouse_eventZl0foundindicesl1l2r   r   r   test_picking_  s$    
r   c                 C   sb   t ddd}|  ||d\}td|d d < |d | jdddgdddgddd d S )	Nr   rU   r   z.-r   rX   r   rZ   )r   rd   rc   rA   rB   rk   )rh   rg   ri   r)   r   r   r   test_input_copyy  s
    
r   r`   c                 C   s   ddddddgddgt d	d
ddddddg}tjd }|tddt|}tdd}d|d  }| }t|D ]"\}}	|j|| d|	|| d qtt	||dt
jd< |  }
t|D ]\}}|
|| d qdS )z*Test that we can set markevery prop_cycle.N   )r-   r         r-   r   r   r      r   r   r   g      ?)rb   r   )g?r   Zjetg?g?r   r=   r   zo-)r   rE   r   )r   mplZ	colormapsr   r   ro   rc   r   rA   r   r   r   )rh   rg   ZcasesZcmapr   r   r   r^   r   r   r(   r   r   r   r   test_markevery_prop_cycle  s*    
    
r   )@__doc__r   platformr"   typesr   r   Znumpyr   Znumpy.testingr   r5   r   r   r   Zmatplotlib.lineslinesr   Zmatplotlib.markersr   Zmatplotlib.pathr   Zmatplotlib.pyplotZpyplotr   Zmatplotlib.transformsZ
transformsre   Zmatplotlib.testing.decoratorsr   r	   Zmatplotlib._api.deprecationr
   r   markZflakyr*   r3   r:   rC   rH   rK   rS   rT   r_   rj   rl   rr   machinerw   r   r   r   r   r   Zparametrizer   r   r   r   r   r   r   r   r   r   r   r   <module>   s   

+





  




,





