U
    ƒi2eÅ¢  ã                   @   s  d dl m Z  d dlZd dlZd dlmZ d dlZd dlmZm	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mZmZmZ d dl m!Z!m"Z" dd„ Z#e"d	gƒd
d„ ƒZ$e"dgƒdd„ ƒZ%e"dgƒdd„ ƒZ&e"dgƒdd„ ƒZ'e"dgƒdd„ ƒZ(e"dgƒdd„ ƒZ)e"dgƒdd„ ƒZ*e"dgƒdd „ ƒZ+e"d!gƒd"d#„ ƒZ,e"d$gƒd%d&„ ƒZ-e"d'd'd(gƒd)d*„ ƒZ.e"d+gƒd,d-„ ƒZ/d.d/„ Z0d0d1„ Z1d2d3„ Z2d4d5„ Z3ej4 5d6¡e!d7gd8d9d:„ ƒƒZ6d;d<„ Z7d=d>„ Z8e"d?gd@dAdBdC„ ƒZ9e"dDgd@dAdEdF„ ƒZ:e"dGgd@dAdHdI„ ƒZ;e"dJgd@dAdKdL„ ƒZ<dMdN„ Z=dOdP„ Z>dQdR„ Z?dSdT„ Z@dUdV„ ZAdWdX„ ZBe"dYgd@dAdZd[„ ƒZCd\d]„ ZDej4 5d^¡d_d`„ ƒZEdadb„ ZFej4 5d^¡dcdd„ ƒZGej4 5d^¡dedf„ ƒZHe"dggƒdhdi„ ƒZIe"djgd@d^dkdldm„ ƒZJdndo„ ZKdpdq„ ZLdrds„ ZMdtdu„ ZNdvdw„ ZOdxdy„ ZPdzd{„ ZQe
jR Sd|d}d~g¡dd€„ ƒZTdd‚„ ZUdƒd„„ ZVd…d†„ ZWd‡dˆ„ ZXd‰dŠ„ ZYd‹dŒ„ ZZddŽ„ Z[ej4 5d^¡e
jR Sdej\ej]g¡dd‘„ ƒƒZ^d’d“„ Z_d”d•„ Z`d–d—„ Zad˜d™„ Zbdšd›„ Zcdœd„ Zde"džgd7gd@d6dŸd dž„ ƒZee!d7gd8d¡d¢„ ƒZfd£d¤„ ZgdS )¥é    )ÚdatetimeN)ÚSimpleNamespace)Úassert_array_equalÚassert_array_almost_equal)Ú
CollectionÚLineCollectionÚEventCollectionÚPolyCollection)Úcheck_figures_equalÚimage_comparisonc               
   C   sÀ   t  ddddddddg¡} t  d	d
dg¡}d}d}d}d}ddddg}d}d}t| |||||||d}	t ¡ \}
}| |	¡ | d¡ | ||||||||dœ	}| dd¡ | dd¡ ||	|fS )z,Generate the initial collection and plot it.ç        ç      ð?ç       @ç      @g      @g       @g      *@g      5@g      A@g     €K@g     @V@Ú
horizontalé   ç      à?é   r   ÚsolidT)ÚorientationÚ
lineoffsetÚ
linelengthÚ	linewidthÚcolorÚ	linestyleÚantialiasedzEventCollection: default)	Ú	positionsÚextra_positionsr   r   r   r   r   r   r   éÿÿÿÿé   )	ÚnpÚarrayr   ÚpltÚsubplotsÚadd_collectionÚ	set_titleÚset_xlimÚset_ylim)r   r   r   r   r   r   r   r   r   ÚcollÚfigÚaxÚprops© r,   úE/tmp/pip-unpacked-wheel-qhyxngld/matplotlib/tests/test_collections.pyÚgenerate_EventCollection_plot   sD    ù


ø
r.   ZEventCollection_plot__defaultc                  C   sÊ   t ƒ \} }}t||d |d |d |d ƒ tj |d | ¡ ¡ |d | ¡ ksVt‚| ¡ sbt‚|d | 	¡ ksvt‚|d | 
¡ ksŠt‚| ¡ dgksœt‚| ¡ f| ¡ •D ]}tj ||d ¡ q®d S )Nr   r   r   r   ©r   Nr   )r.   Úcheck_segmentsr    Útestingr   Úget_positionsÚget_orientationÚAssertionErrorÚis_horizontalÚget_linelengthÚget_lineoffsetZget_linestyleÚ	get_colorÚ
get_colors)Ú_r(   r+   r   r,   r,   r-   Ú test__EventCollection__get_props=   s    ür;   Z#EventCollection_plot__set_positionsc                  C   st   t ƒ \} }}t |d |d g¡}| |¡ tj || ¡ ¡ t|||d |d |d ƒ |  d¡ |  	dd¡ d S )	Nr   r   r   r   r   zEventCollection: set_positionsr   éZ   )
r.   r    ÚhstackZset_positionsr1   r   r2   r0   r%   r&   ©Úspltr(   r+   Únew_positionsr,   r,   r-   Ú$test__EventCollection__set_positionsW   s    
ý
rA   Z#EventCollection_plot__add_positionsc                  C   s   t ƒ \} }}t |d |d d g¡}| ¡  | |d d ¡ | ¡  tj || ¡ ¡ t|||d |d |d ƒ |  	d¡ |  
dd	¡ d S )
Nr   r   r   r   r   r   zEventCollection: add_positionsr   é#   )r.   r    r=   Úswitch_orientationZadd_positionsr1   r   r2   r0   r%   r&   r>   r,   r,   r-   Ú$test__EventCollection__add_positionse   s     

ÿü
rD   Z&EventCollection_plot__append_positionsc                  C   s€   t ƒ \} }}t |d |d d g¡}| |d d ¡ tj || ¡ ¡ t|||d |d |d ƒ |  d¡ |  	dd	¡ d S )
Nr   r   r   r   r   r   z!EventCollection: append_positionsr   r<   )
r.   r    r=   Zappend_positionsr1   r   r2   r0   r%   r&   r>   r,   r,   r-   Ú'test__EventCollection__append_positionsw   s    

ÿü
rE   Z&EventCollection_plot__extend_positionsc                  C   sˆ   t ƒ \} }}t |d |d dd … g¡}| |d dd … ¡ tj || ¡ ¡ t|||d |d |d ƒ |  d¡ |  	dd	¡ d S )
Nr   r   r   r   r   r   z!EventCollection: extend_positionsr   r<   )
r.   r    r=   Zextend_positionsr1   r   r2   r0   r%   r&   r>   r,   r,   r-   Ú'test__EventCollection__extend_positions‡   s    
ÿü
rF   Z(EventCollection_plot__switch_orientationc                  C   sz   t ƒ \} }}d}| ¡  || ¡ ks(t‚| ¡ r4t‚| ¡ }t|||d |d |ƒ |  d¡ |  dd¡ |  	dd¡ d S )	NÚverticalr   r   z#EventCollection: switch_orientationr   r   r   r   )
r.   rC   r3   r4   r5   r2   r0   r%   r'   r&   )r?   r(   r+   Únew_orientationr@   r,   r,   r-   Ú)test__EventCollection__switch_orientation—   s     ý
rI   Z,EventCollection_plot__switch_orientation__2xc                  C   s€   t ƒ \} }}| ¡  | ¡  | ¡ }|d | ¡ ks8t‚| ¡ sDt‚tj |d |¡ t	|||d |d |d ƒ |  
d¡ dS )zc
    Check that calling switch_orientation twice sets the orientation back to
    the default.
    r   r   r   r   z&EventCollection: switch_orientation 2xN)r.   rC   r2   r3   r4   r5   r    r1   r   r0   r%   r>   r,   r,   r-   Ú,test__EventCollection__switch_orientation_2x¨   s    ürJ   Z%EventCollection_plot__set_orientationc                  C   sx   t ƒ \} }}d}| |¡ || ¡ ks*t‚| ¡ r6t‚t||d |d |d |ƒ |  d¡ |  dd¡ |  dd	¡ d S )
NrG   r   r   r   z EventCollection: set_orientationr   r   r   r   )	r.   Zset_orientationr3   r4   r5   r0   r%   r'   r&   )r?   r(   r+   rH   r,   r,   r-   Ú&test__EventCollection__set_orientation½   s    
ü
rK   Z$EventCollection_plot__set_linelengthc                  C   s`   t ƒ \} }}d}| |¡ || ¡ ks*t‚t||d ||d |d ƒ |  d¡ |  dd¡ d S )Né   r   r   r   zEventCollection: set_linelengthiìÿÿÿé   )r.   Zset_linelengthr6   r4   r0   r%   r'   )r?   r(   r+   Znew_linelengthr,   r,   r-   Ú%test__EventCollection__set_linelengthÎ   s    
ü
rN   Z$EventCollection_plot__set_lineoffsetc                  C   s`   t ƒ \} }}d}| |¡ || ¡ ks*t‚t||d |d ||d ƒ |  d¡ |  dd¡ d S )Ng      Àr   r   r   zEventCollection: set_lineoffsetiúÿÿÿéüÿÿÿ)r.   Zset_lineoffsetr7   r4   r0   r%   r'   )r?   r(   r+   Znew_lineoffsetr,   r,   r-   Ú%test__EventCollection__set_lineoffsetÝ   s    
ü
rP   Z#EventCollection_plot__set_linestyleZ#EventCollection_plot__set_linewidthc                  C   sj   dddgfdddgfdfD ]J\} }}t ƒ \}}}|jf | |iŽ t || ¡|ksTt‚| d| › ¡ qd S )Nr   Údashed)r   )ç      @rR   )r   é   rS   zEventCollection: set_)r.   Úsetr"   Zgetpr4   r%   )ÚpropÚvalueÚexpectedr?   r(   r:   r,   r,   r-   Útest__EventCollection__set_propì   s    

ýrX   ZEventCollection_plot__set_colorc                  C   s\   t ƒ \} }}t ddddg¡}| |¡ | ¡ f| ¡ •D ]}tj ||¡ q:|  d¡ d S )Nr   r   zEventCollection: set_color)	r.   r    r!   Ú	set_colorr8   r9   r1   r   r%   )r?   r(   r:   Z	new_colorr   r,   r,   r-   Ú test__EventCollection__set_colorý   s    
rZ   c           
      C   sÎ   |   ¡ }| ¡ dks(| ¡ dks(|dkr2d}d}n| ¡ dkrHd}d}ntdƒ‚t|ƒD ]p\}}	|	d|f ||d  ks|t‚|	d|f ||d  ks˜t‚|	d|f || ks°t‚|	d|f || ksXt‚qXdS )	zp
    Test helper checking that all values in the segment are correct, given a
    particular set of inputs.
    r   ÚnoneNr   r   rG   z.orientation must be 'horizontal' or 'vertical'r   )Úget_segmentsÚlowerÚ
ValueErrorÚ	enumerater4   )
r(   r   r   r   r   ÚsegmentsZpos1Úpos2ÚiÚsegmentr,   r,   r-   r0     s"    
ÿÿr0   c                  C   s4   t  g ¡} |  t ¡ ¡}t| ¡ tj ¡  ¡ ƒ d S ©N)	ÚmcollectionsÚPathCollectionÚget_datalimÚmtransformsÚIdentityTransformr   Ú
get_pointsÚBboxÚnull)ÚcolZcol_data_limr,   r,   r-   Útest_null_collection_datalim!  s
    
ÿrn   c                  C   sR   t  ¡ } t t ddg¡g¡}|  |¡ | t 	¡ ¡}t
| ¡ tj ¡  ¡ ƒ d S )N©r   r   )r   r   )r"   Úaxesre   rf   ÚmpathÚPathr$   rg   rh   ri   r   rj   rk   rl   )r*   r(   Zcoll_data_limr,   r,   r-   Útest_no_offsets_datalim(  s    
ÿrs   c                  C   sL   t  ¡  t  ¡ } |  ddgddg¡ | jj}|  g g ¡ | jj|ksHt‚d S )Nr   r   )r"   Úfigurerp   ÚscatterÚdataLimÚboundsr4   )r*   rw   r,   r,   r-   Útest_add_collection3  s    rx   Zmpl20Zpng)Ú
extensionsc                 C   sÀ   ddddddddd	d
dddddg}dddddddddddddg}t  ||¡\}}| ¡ }| ¡ }|  ¡ }| d¡ | d¡ d|_| ||¡ | ¡ }| d¡ | d¡ |j||dd d! d S )"Ng¥+ócÒ>gë®`8F×>gq[€;uÝ>gƒy7½/¤â>gÖÿ9Ì—ç>gWÇ!Üí>gÄ-–Iåò>g\p5ê÷>gd‘jDþ>g—y¹´K'?gÈ~Í+»=?gFEAL ®?g|™0j?gÇ÷GKe’?gÞ´=B?r   çš™™™™™¹?g²ï§ÆKÇ?gsh‘í|?Õ?g‡ÙÎ÷Sã?gš™™™™™ñ?r   g…ëQ¸@gÂõ(\@g333333(@g      6@gÍÌÌÌÌÌC@g33333ÓQ@Úlogr   ÚoÚ )ÚmarkerÚls)	r    ÚmeshgridÚflattenr#   Z
set_xscaleZ
set_yscaleZmarginsru   Zplot)Úfig_testÚfig_refZx_valsZy_valsÚxÚyÚax_testÚax_refr,   r,   r-   Útest_collection_log_datalim>  s8    
        þ ÿ



rˆ   c                  C   sä   t  ¡ } t d¡t d¡ }}t ddd¡ dd¡ }}t  ||||¡}| | j¡j	dks^t
‚t  ¡  t  ¡ } t ddd¡}t dd	d¡}t ||¡\}}t ¡  d
d¡| j }t j||t |¡t |¡|d | jj	dksàt
‚d S )Né   é
   r   éP   )r   r   g      @g      "@éûÿÿÿrM   éþÿÿÿé   é   é    ©Ú	transform)g      4@g      >@g      .@rR   )r"   rp   r    ÚarangeÚlinspaceÚreshapeZquiverrg   Ú	transDatarw   r4   rt   r€   rh   ÚAffine2DÚ	translateÚsinÚcosrv   )r*   r„   r…   ÚuÚvÚqÚtransr,   r,   r-   Útest_quiver_limitsX  s     rŸ   c                  C   s€   t  ¡ } t ddd¡}t ddd¡}t ||¡\}}t ¡  dd¡| j }t j	||t 
|¡t |¡|d t| jjd	d
d d S )NrŒ   rŠ   rM   r   rŽ   r   r   r‘   )rM   é   rL   é   r   ©Údecimal)r"   rp   r    r”   r€   rh   r—   r˜   r–   Zbarbsr™   rš   r   rv   rw   )r*   r„   r…   rž   r,   r,   r-   Útest_barb_limitsi  s     
ÿr¤   z EllipseCollection_test_image.pngT)Úremove_textc               	   C   sž   t  ¡ \} }t d¡}t d¡}t ||¡\}}t | ¡ | ¡ f¡j}||d  }||d  }t |¡d }	t	j
|||	d||jdd}
| |
¡ | ¡  d S )NrŽ   é   r   rM   r„   r[   )ÚunitsÚoffsetsÚoffset_transformÚ
facecolors)r"   r#   r    r“   r€   ZvstackÚravelÚTZ	ones_likere   ÚEllipseCollectionr–   r$   Úautoscale_view)r)   r*   r„   r…   ÚXÚYZXYZwwÚhhÚaaÚecr,   r,   r-   Útest_EllipseCollectionw  s&    

     þ
r´   zpolycollection_close.pngc                  C   sN  ddl m}  ddgddgddgddggddgddgddgddggddgddgddgddggddgddgddgddggg}t ¡ }| | |ƒ¡}dd	d
ddg}ttdƒƒ}tj|t	|ƒ dd}| 
d¡ g }g }t||ƒD ]0\}	}
| |	gt	|ƒ ¡ | |
gt	|ƒ ¡ qÚ| |¡ |j||dd | dd¡ | dd¡ | dd¡ d S )Nr   )ÚAxes3Dr   r   r   r   ç      @ÚrÚgÚbr…   ÚkrS   ç      Ð?©r   gffffffæ?)ÚzsZzdirrŽ   r¦   )Zmpl_toolkits.mplot3drµ   r"   rt   Zadd_axesÚlistÚrangere   r	   ÚlenÚ	set_alphaÚzipÚextendrY   Zadd_collection3dZ
set_xlim3dZ
set_zlim3dZ
set_ylim3d)rµ   Z	vertsQuadr)   r*   ÚcolorsZzposZpolyr½   ÚcsÚzÚcr,   r,   r-   Útest_polycollection_close‹  s2    ü
 ÿ

rÈ   z regularpolycollection_rotate.pngc            	      C   sš   t jd d…d d…f \} }t  |  ¡ | ¡ g¡}t  ddt j t|ƒ¡}t ¡ \}}t	||ƒD ].\}}t
jdd||g|jd}|j|dd q^| ¡  d S )	NrŠ   r   r   rŽ   )éd   )ÚsizesÚrotationr¨   r©   T©Zautolim)r    ZmgridZ	transposer   r”   ÚpirÀ   r"   r#   rÂ   re   ÚRegularPolyCollectionr–   r$   r®   )	ÚxxÚyyZ	xy_pointsZ	rotationsr)   r*   ÚxyÚalpharm   r,   r,   r-   Ú!test_regularpolycollection_rotate°  s       þrÓ   zregularpolycollection_scale.pngc                  C   sd   G dd„ dt jƒ} t ¡ \}}dg}tjd g}| |||jd}|j|dd | dd	dd	g¡ d S )
Nc                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )z:test_regularpolycollection_scale.<locals>.SquareCollectionc                    s    t ƒ jddtjd i|—Ž d S )NrŽ   rË   r¶   )rŽ   )ÚsuperÚ__init__r    rÍ   )ÚselfÚkwargs©Ú	__class__r,   r-   rÕ   Ä  s    zCtest_regularpolycollection_scale.<locals>.SquareCollection.__init__c                 S   sJ   | j }d|jj }||jj |jj }||jj |jj }t ¡  	||¡S )z4Return transform scaling circle areas to data space.g      R@)
rp   rt   ÚdpiZbboxÚwidthZviewLimÚheightrh   r—   Zscale)rÖ   r*   Z
pts2pixelsZscale_xZscale_yr,   r,   r-   Úget_transformÇ  s
    zHtest_regularpolycollection_scale.<locals>.SquareCollection.get_transform)Ú__name__Ú
__module__Ú__qualname__rÕ   rÝ   Ú__classcell__r,   r,   rØ   r-   ÚSquareCollectionÃ  s   râ   ro   r   )rÊ   r¨   r©   TrÌ   r   r   )	re   rÎ   r"   r#   r    rÍ   r–   r$   Zaxis)râ   r)   r*   rÑ   Zcircle_areasZsquaresr,   r,   r-   Ú test_regularpolycollection_scale¿  s      ÿrã   c                  C   sn   t  ¡ \} }|jdgdgdgdd}| jt ¡ | jd tddd}| |¡\}}|sZt	‚t
|d	 dgƒ d S )
Nr   iè  T)Zpicker)rÚ   iE  éð   )r„   r…   Úind)r"   r#   ru   ZsavefigÚioÚBytesIOrÚ   r   Úcontainsr4   r   )r)   r*   rm   Úmouse_eventÚfoundÚindicesr,   r,   r-   Útest_pickingÜ  s    rì   c                  C   sô   t  d¡} | d d …d f | d d d …f  }t ¡ \}}| |¡}| ¡  d\}}| ¡  ||f¡\} }t||| |d}| 	|¡\}	}
|	sŒt
‚t|
d dgƒ d\}}| ¡  ||f¡\} }t||| |d}| 	|¡\}	}
|	sàt
‚t|
d dgƒ d S )NrŽ   ©r   r   ©ÚxdataÚydatar„   r…   rå   r   ©ç      ø?rò   rS   )r    r“   r"   r#   Ú
pcolormeshÚdraw_without_renderingrÝ   r’   r   rè   r4   r   )r„   r¯   r)   r*   Úmeshrï   rð   r…   ré   rê   rë   r,   r,   r-   Útest_quadmesh_containsæ  s"    
 
rö   c                  C   sª   ddgddgg} ddgddgg}t  ¡ \}}| | |dgg¡}| ¡  ddddg}|D ]N}|\}}}	| ¡  ||f¡\} }t||| |d}
| |
¡\}}||	ksVt‚qVd S )	Nr   r   r   )ç      à¿r»   T)r   r»   F)r   r»   T)r   g      Ð¿Trî   )	r"   r#   ró   rô   rÝ   r’   r   rè   r4   )r„   r…   r)   r*   rõ   ZpointsZpointrï   rð   rW   ré   rê   rë   r,   r,   r-   Útest_quadmesh_contains_concaveü  s     ý
rø   c            	      C   s¶   t  d¡} | d d …d f | d d d …f  }t ¡ \}}| |¡}d |_| ¡  d\}}| ¡  ||f¡\} }t	||| |d}| 
|¡d ksŽt‚| t  |j¡¡ t| 
|¡dgƒ d S )NrŽ   rí   rî   r   )r    r“   r"   r#   ró   Z_Arô   rÝ   r’   r   Úget_cursor_datar4   Ú	set_arrayÚonesÚshaper   )	r„   r¯   r)   r*   rõ   rï   rð   r…   ré   r,   r,   r-   Útest_quadmesh_cursor_data  s    
 
rý   c                  C   s|   ddddg} t  ¡ \}}| | | t d¡¡}| ¡  d\}}| ¡  ||f¡\} }t||| |d}t	| 
|¡t d¡ƒ d S )Nr   r   ©r¦   r¦   rñ   rî   é	   )r"   r#   ró   r    rû   rô   rÝ   r’   r   r   rù   )r„   r)   r*   rõ   rï   rð   r…   ré   r,   r,   r-   Ú)test_quadmesh_cursor_data_multiple_points%  s    r   c                   C   s0   t jdddgdddgdddgfd t  ¡  d S )Nr   r   r   r   r   )r   )r"   ru   Údrawr,   r,   r,   r-   Útest_linestyle_single_dashes1  s    $r  zsize_in_xy.pngc                  C   s`   t  ¡ \} }d\}}}d}ddg}tj|||d||jd}| |¡ | dd¡ | dd¡ d S )N)©rŠ   rŠ   rŠ   r   r  )rL   rL   rÑ   )r§   r¨   r©   r   r    )r"   r#   re   r­   r–   r$   r&   r'   )r)   r*   ZwidthsZheightsZanglesÚcoordsÚer,   r,   r-   Útest_size_in_xy6  s    
    þ
r  c                 C   s”   dddg}| j dddg|d }}| j dd	d
g|d}| j dddg|d}| j dddg|d}t|d t|d t|d t|d t|d d S )Né   é   é   ÚredZblueZgreen)Úindexr   r   r¦   r   rQ   ZdashdotTF)Ú
edgecolors)rª   )Ú
linewidths)Z
linestyles)Zantialiaseds)ZSeriesr   )Úpdr  r³   ZfcZlwr   r²   r,   r,   r-   Útest_pandas_indexingG  s    




r  Údefaultc                  C   sœ   t  g ¡} |  ddg¡ |  dddg¡ |  ¡ dgd ks>t‚|  ¡ dddgd ksXt‚|  dddg¡ |  ¡ dgd ks~t‚|  ¡ dddgk ¡ s˜t‚d S )Nú-r   r   r¦   r/   r¡   )re   rf   Zset_linestylesZset_linewidthsZget_linestylesr4   Zget_linewidthsÚall©rm   r,   r,   r-   Útest_lslw_bcastX  s    
r  c               	   C   s.   t ƒ } tjtdd |  d¡ W 5 Q R X d S )Nz"Do not know how to convert 'fuzzy'©ÚmatchZfuzzy)r   ÚpytestÚraisesr^   Zset_linestyle©rÇ   r,   r,   r-   Útest_set_wrong_linestylef  s    r  c                  C   s<   t jg dd} |  ¡ dkst‚|  d¡ |  ¡ dks8t‚d S )NÚround)ZcapstyleZbutt)re   rf   Zget_capstyler4   Úset_capstyler  r,   r,   r-   Útest_capstylel  s    
r  c                  C   s<   t jg dd} |  ¡ dkst‚|  d¡ |  ¡ dks8t‚d S )Nr  )Z	joinstyleÚmiter)re   rf   Zget_joinstyler4   Úset_joinstyler  r,   r,   r-   Útest_joinstylet  s    
r   zcap_and_joinstyle.pngc                  C   sÔ   t  ¡ \} }| ddg¡ | ddg¡ t dddg¡}t dgdgdgg¡t dddgg¡ }t d¡}||d d …d d …df< ||d d …d d …d	f< t|d
ddgd}| d¡ | 	d¡ | 
|¡ | d¡ d S )Nr÷   rò   ç      @r   r   r   )r¦   r¦   r   r   r   rŠ   rL   rM   r¼   r  r  z2Line collection with customized caps and joinstyle)r"   r#   r&   r'   r    r!   Úzerosr   r  r  r$   r%   )r)   r*   r„   ZysZsegsZline_segmentsr,   r,   r-   Útest_cap_and_joinstyle_image|  s    (



r#  zscatter_post_alpha.png)r¥   Ústylec                  C   s6   t  ¡ \} }|jtdƒtdƒtdƒd}| d¡ d S )NrS   r  rz   )r"   r#   ru   r¿   rÁ   )r)   r*   Úscr,   r,   r-   Útest_scatter_post_alpha  s    r&  c                  C   s˜  t  d¡} | d }t d¡\}\}}|j| | | |d}|j| | | d}| |¡ t ¡  t| ¡ d d …df |ƒ t| ¡ d d …df |ƒ t d¡\}\}}|j| | dddd	d
g|d}|j| | d|d}t ¡  t| ¡ d d …df |ƒ t| ¡ d d …df |ƒ t d¡\}\}}|j| | dddd	d
gd}| |¡ |j| | dd}| |¡ t ¡  t| ¡ d d …df |ƒ t| ¡ d d …df |ƒ d S )NrS   r   )rÇ   rÒ   r  r   r·   r¸   r¹   rÇ   Úm)r   rÒ   )r   )	r    r“   r"   r#   ru   rÁ   r  r   Úget_facecolors)r„   rÒ   r)   Úax0Úax1Zsc0Zsc1r,   r,   r-   Útest_scatter_alpha_array˜  s.    



r+  c                  C   s|  t j d¡ t j dd¡\} }t j d¡}t jjdddd}t jjdddd}t ¡ \}}|j| |||dd	dd
}|jdd\}}t	|ƒdks’t
‚|dddddgks¨t
‚t  dd„ |D ƒ¡}	| t  d¡d ¡}
t|	|
ƒ |j||dd}|jdd\}}t	|ƒdkst
‚|j||dd}|jdddd\}}tdd„ |D ƒƒsHt
‚tdd„ |D ƒƒs`t
‚|j||dd}|jddd d!d"„ d#\}}d$d„ |D ƒ}t  t  |t¡d ¡}t||ƒ |j||d%d}tjjdd&ddd'd%dd(d&dgd)}|j|d\}}t	|ƒt	|ƒkst
‚d*dd+d,g}|j|ddd-\}}d.d„ |D ƒ|dd … ksPt
‚||||fD ]}| |¡ q\|j ¡  d S )/Né!N,r   rŠ   r   rS   )Úsizei,  Zjetr|   )rÇ   ÚsÚcmapr~   r  z{x:g})ÚfmtÚ0Ú1Ú2Ú3Ú4c                 S   s   g | ]}|  ¡ ‘qS r,   )r8   ©Ú.0Úliner,   r,   r-   Ú
<listcomp>Â  s     z7test_pathcollection_legend_elements.<locals>.<listcomp>rŽ   r   )Úlocrÿ   )ÚnumrÊ   r   r
  )rU   rÒ   r   c                 s   s   | ]}|  ¡ d kV  qdS )r   N)Z	get_alphar6  r,   r,   r-   Ú	<genexpr>Ì  s     z6test_pathcollection_legend_elements.<locals>.<genexpr>c                 s   s   | ]}|  ¡ d kV  qdS )r
  N)Zget_markerfacecolorr6  r,   r,   r-   r<  Í  s     z{x:.2f}c                 S   s   d|  S )Nr   r,   )r„   r,   r,   r-   Ú<lambda>Ñ  ó    z5test_pathcollection_legend_elements.<locals>.<lambda>)rU   r;  r0  Úfuncc                 S   s   g | ]}|  ¡ ‘qS r,   ©Zget_markersizer6  r,   r,   r-   r9  Ò  s     r¦   r‰   r!  r¡   )ZnbinsZmin_n_ticksZstepsr   g33333³K@i  )r;  rU   r0  c                 S   s   g | ]}t |ƒ‘qS r,   )Úfloat)r7  Úlr,   r,   r-   r9  Þ  s     )r    ÚrandomÚseedZrandÚrandintr"   r#   ru   Úlegend_elementsrÀ   r4   r!   r/  r“   r   Zlegendr  ÚsqrtrA  r   ÚmplZtickerZMaxNLocatorZ
add_artistÚcanvasr  )r„   r…   rÇ   r.  r)   r*   r%  ÚhrB  rÄ   Zcolors2Úl1Úh2Zlab2Úl2Úl3ZactsizesZlabeledsizesÚl4r:  Úh5Zlab5ÚlevelsÚh6Zlab6r,   r,   r-   Ú#test_pathcollection_legend_elementsµ  sN    

ÿ


ÿ rS  c               	   C   s:   t  ddddg¡} t| ƒ}t j | t  ddddg¡¡ d S )Nr¦   r   r   rŠ   )r    r!   r   r1   r   )Zarrr(   r,   r,   r-   Útest_EventCollection_nosortæ  s    rT  c                  C   s  t jdt jd ddd¡} t| ƒ}tt| ƒƒ}t|jƒt|jƒksFt‚t	|j|jƒD ]0\}}t  
|j|j¡spt‚t  
|j|j¡sTt‚qTt jdtd}dd„ | D ƒ|d d …< t|ƒ}t|jƒt|jƒksÊt‚t	|j|jƒD ]0\}}t  
|j|j¡sôt‚t  
|j|j¡sØt‚qØd S )Nr‹   )ZdtyperŠ   rŽ   r   c                 S   s   g | ]}t d d„ |D ƒƒ‘qS )c                 s   s   | ]}t |ƒV  qd S rd   ©Útuple)r7  r…   r,   r,   r-   r<  ÷  s     z=test_collection_set_verts_array.<locals>.<listcomp>.<genexpr>rU  ©r7  r„   r,   r,   r-   r9  ÷  s     z3test_collection_set_verts_array.<locals>.<listcomp>)r    r“   Údoubler•   r	   r¾   rÀ   Z_pathsr4   rÂ   Úarray_equalZ	_verticesÚ_codesÚemptyÚobject)ZvertsZcol_arrZcol_listZapÚlpZverts_tupleZcol_arr_tupleZatpr,   r,   r-   Útest_collection_set_verts_arrayí  s    r^  c               	   C   sb   t dƒ•} tƒ }| | ¡ tjtdd | d¡ W 5 Q R X d| d< t | | ¡ ¡ 	¡ s^t
‚d S )NrŠ   z^Image data of dtyper  Zwrong_inputé-   rS   )r¿   r   rú   r  r  Ú	TypeErrorr    Ú	not_equalÚ	get_arrayÚanyr4   )ÚvalsrÇ   r,   r,   r-   Útest_collection_set_arrayÿ  s    

re  c                  C   sž   dddg} d}t  t  | d¡t  d|gt| ƒ¡g¡}| t| ƒddg¡}t ¡ \}}t 	|j
|j¡}| t||d¡ |jddd	 t j | ¡ d
dg¡ d S )Nr   r   rŽ   çš™™™™™É?r   r‘   TF)ZscalexZscaleyr   r¶   )r    Úcolumn_stackÚrepeatÚtilerÀ   r•   r"   r#   rh   Zblended_transform_factoryr–   Ú	transAxesr$   r   r®   r1   Úassert_allcloseÚget_xlim)ÚarÜ   Zxy_pairsZ	line_segsÚfr*   rž   r,   r,   r-   Útest_blended_collection_autolim  s    
&ro  c                  C   sH   t  ¡ \} }| dd¡ tj | ¡ ddg¡ tj | ¡ ddg¡ d S )Nr   g¸…ëQ¸®¿g¸…ëQ¸®?)r"   r#   ru   r    r1   rk  Úget_ylimrl  )r)   r*   r,   r,   r-   Útest_singleton_autolim  s    rq  ztransform, expected)r–   )r÷   g      @)rj  )gffffff@gš™™™™™	@c                 C   sV   t  ¡ \}}|jddt|| ƒd | dd¡ tj | ¡ |¡ tj | ¡ |¡ d S )Nr   r‘   r¦   )	r"   r#   ru   Úgetattrr    r1   rk  rp  rl  )r’   rW   r)   r*   r,   r,   r-   Útest_autolim_with_zeros$  s
    	rs  c               	   C   s²  t  d¡} t  d¡}t j d¡}t ¡ \}}| | ||¡}tjtt	 
d¡d | | dd¡¡ W 5 Q R X t  d¡ d	¡}tjtt	 
d
¡d | |¡ W 5 Q R X tjtt	 
d¡d | | ¡ ¡ W 5 Q R X t  d¡}tjtt	 
d¡d | |¡ W 5 Q R X t  d¡}tjtt	 
d¡d | |¡ W 5 Q R X t  d¡}tjtt	 
d¡d | |¡ W 5 Q R X t  d¡} t  d¡}t j d¡}t ¡ \}}|j| ||dd}d S )Nr  r‰   )é   rŠ   zuFor X (11) and Y (8) with flat shading, A should have shape (7, 10, 3) or (7, 10, 4) or (7, 10) or (70,), not (10, 7)r  rŠ   rt  é6   )r¡   rÿ   ztFor X (11) and Y (8) with flat shading, A should have shape (7, 10, 3) or (7, 10, 4) or (7, 10) or (70,), not (6, 9)zsFor X (11) and Y (8) with flat shading, A should have shape (7, 10, 3) or (7, 10, 4) or (7, 10) or (70,), not (54,))rÿ   r¡   r¦   zwFor X (11) and Y (8) with flat shading, A should have shape (7, 10, 3) or (7, 10, 4) or (7, 10) or (70,), not (9, 6, 3))rÿ   r¡   rŽ   zwFor X (11) and Y (8) with flat shading, A should have shape (7, 10, 3) or (7, 10, 4) or (7, 10) or (70,), not (9, 6, 4))rt  rŠ   r   zxFor X (11) and Y (8) with flat shading, A should have shape (7, 10, 3) or (7, 10, 4) or (7, 10) or (70,), not (7, 10, 2)Úgouraud©Zshading)r    r“   rC  r"   r#   ró   r  r  r^   ÚreÚescaperú   r•   r«   rû   ©r„   r…   rÆ   r)   r*   r(   r,   r,   r-   Ú"test_quadmesh_set_array_validation4  sL    


ÿ

ÿ

ÿ


ÿ


ÿ


ÿ


r{  c                  C   sd   dddg} dddg}t jdd}t  | |¡\}}t |||¡}t  |j|jg¡j}t| ¡ |ƒ d S )Nr   r   r   rŽ   r¡   )r   r   )rü   )	r    rû   r€   r"   ró   Ústackr¬   r   Zget_coordinates)r„   r…   rÆ   rÏ   rÐ   r(   r  r,   r,   r-   Útest_quadmesh_get_coordinatesd  s    

r}  c                  C   s<  t  d¡} t  d¡}t  d¡ d¡}t ¡ \}}| | |t  |j¡¡}| |¡ |j	 
¡  t  | ¡ |¡snt‚| t  d¡¡ |j	 
¡  t  | ¡ t  d¡¡s¢t‚t  d¡ d¡}t ¡ \}}|j| |t  |j¡dd}| |¡ |j	 
¡  t  | ¡ |¡st‚| t  d¡¡ |j	 
¡  t  | ¡ t  d¡¡s8t‚d S )NrŽ   rÿ   rþ   é   )rŽ   rŽ   rv  rw  )r    r“   r•   r"   r#   ró   rû   rü   rú   rI  r  rY  rb  r4   rz  r,   r,   r-   Útest_quadmesh_set_arrayp  s(    







r  c                  C   s®   t  ¡ \} }tjd }tjjddd}|jdgg||d}| j ¡  t	 
| ¡ dd d …f ||dƒƒ¡slt‚d\|_|_| j ¡  t	 
| ¡ dd d …f ||dƒƒ¡sªt‚d S )NZplasmar   r   )ÚvminÚvmax)r/  Únorm)r   r   )r"   r#   rH  Z	colormapsrÄ   Z	Normalizeró   rI  r  r    rY  r(  r4   r€  r  )r)   r*   r/  r‚  r(   r,   r,   r-   Útest_quadmesh_vmin_vmaxŽ  s    

(
rƒ  c            
      C   s,  t  d¡} t  d¡}t  d¡ d¡}|| ¡  }| ¡ }t d¡\}\}}|j| |||d}| | ||¡}	|	 |¡ t 	¡  t
| ¡ d d …df |ƒ t
|	 ¡ d d …df |ƒ t d¡\}\}}|j| |||d}| | ||¡}	|	 |¡ t 	¡  t
| ¡ d d …df |ƒ t
|	 ¡ d d …df |ƒ d S )NrŽ   rÿ   rþ   r   )rÒ   r   )r    r“   r•   Úmaxr«   r"   r#   ró   rÁ   r  r   r(  )
r„   r…   rÆ   rÒ   Z
alpha_flatr)   r)  r*  Zcoll1Zcoll2r,   r,   r-   Útest_quadmesh_alpha_arrayž  s&    



r…  c               	   C   sV   t  ¡ \} }| t d¡ d¡¡}tjtdd | 	ddg¡ | 
¡  W 5 Q R X d S )Nr  )r¦   rŽ   z^Data array shaper  r   ç333333ã?)r"   r#   ró   r    r“   r•   r  r  r^   rÁ   Úupdate_scalarmappable)r)   r*   Úpcr,   r,   r-   Útest_alpha_validation¶  s
    r‰  c                  C   sª   t j d¡ t j d¡} t j d¡}dt j d¡ }d| }ddddg}t ¡ \}}|j| ||d	}|jd
|dd„ d\}}	dd„ |D ƒ}
dd„ |
D ƒ}
t|
|dd dS )z|
    Ensure legend markers scale appropriately when label and size are
    inversely related.
    Here label = 5 / size
    r,  é2   r   rS   rf  gš™™™™™Ù?r†  gš™™™™™é?©r.  rÊ   c                 S   s   d|  S )NrS   r,   r‹  r,   r,   r-   r=  Ð  r>  z=test_legend_inverse_size_label_relationship.<locals>.<lambda>)rU   r;  r?  c                 S   s   g | ]}|  ¡ ‘qS r,   r@  rW  r,   r,   r-   r9  Ô  s     z?test_legend_inverse_size_label_relationship.<locals>.<listcomp>c                 S   s   g | ]}d |d  ‘qS )rS   r   r,   rW  r,   r,   r-   r9  Õ  s     r¢   N)r    rC  rD  r"   r#   ru   rF  r   )r¯   r°   ÚCÚSZlegend_sizesr)   r*   r%  ZhandlesÚlabelsZhandle_sizesr,   r,   r-   Ú+test_legend_inverse_size_label_relationship¿  s       ÿ
r  Úpcfuncc                 C   sŽ  t  d¡ dd¡}| |ddd}| ¡  t | ¡ ¡}| ¡ | | 	¡ ¡ƒ}t 
| ¡ d¡s`t‚| |ƒ}| d¡ | d¡ | ¡  t 
| ¡ d¡s˜t‚t 
| ¡ ddddgg¡s¶t‚| d	¡ | ¡  t 
| ¡ dddd	gg¡sæt‚| d ¡ | ¡  t 
| ¡ ddddgg¡st‚| d ¡ | ¡  t 
| ¡ |¡s@t‚| d ¡ | ¡  t 
| ¡ |¡sht‚t 
| ¡ d¡s~t‚| d ¡ | ¡  t 
| ¡ d¡s¦t‚t 
| ¡ |¡s¼t‚| | 	¡ ¡ | ¡  t 
| ¡ |¡sèt‚t 
| ¡ d¡sþt‚| |d
dd}| ¡  t 
| ¡ |¡s*t‚t 
| ¡ ddddgg¡sJt‚| |d
t  d¡d}| ¡  t 
| ¡ |¡s|t‚t 
| ¡ ddddgg¡sœt‚| d ¡ | ¡  t 
| ¡ t  d¡¡sÊt‚t 
| ¡ ddddgg¡sêt‚| |d
t  d¡d}| ¡  t 
| ¡ |¡st‚t 
| ¡ ddddgg¡s<t‚| d ¡ | ¡  t 
| ¡ t  d¡¡sjt‚t 
| ¡ ddddgg¡sŠt‚d S )Nr  r¦   rŽ   r
  r[   )r  rª   r   r   r   )r   r   r   )r   r   r   )r  r¦   )r  rŽ   )r    r“   r•   r‡  ÚmcolorsZto_rgba_arrayZ_get_default_facecolorZget_cmapr‚  r«   Ú
same_colorÚget_edgecolorr4   Zset_facecolorZset_edgecolorÚget_facecolorrÁ   rú   rû   )r  rÆ   rˆ  Zface_defaultZmappedr,   r,   r-   Útest_color_logicÚ  sj    



 


  
  
r•  c               	   C   s”   t d dddddddgd} |  ¡ d dks.t‚t |  ¡ d¡sBt‚|  ¡ dksRt‚t |  ¡ ddddgg¡spt‚t d d d} t |  ¡ d¡st‚d S )	Ngš™™™™™@r·   r¦   r   r   )r   Z	edgecolorZzorderrª   )Z	facecolorr[   )r   Zget_linewidthr4   r‘  r’  r“  Z
get_zorderr”  )Úlcr,   r,   r-   Útest_LineCollection_args   s     
ÿr—  c               	   C   s†   t  d¡ dd¡} t | ¡}tjtdd | | ¡ | 	¡  W 5 Q R X t 
| ¡}| | ¡ | 	¡  t  d¡ ddd¡} | | ¡ d S )Nr  r¦   rŽ   z^Collections can only mapr  é$   )r    r“   r•   r"   Úpcolorr  r  r^   rú   r‡  ró   )rÆ   rˆ  r,   r,   r-   Útest_array_wrong_dimensions.  s    



rš  c                  C   sB   t  t  ddd¡d¡j} t| gƒ}| ¡ \}t  | |k¡s>t‚d S )Nr   r   é   )r   r   )r    ri  r”   r¬   r   r\   r  r4   )r`   r–  Zreadbackr,   r,   r-   Útest_get_segments<  s    

rœ  c                  C   s~   t  ¡ } dg}tj|d}tj|dd}tj|d}| d¡ | | ¡j}| | ¡j}| | ¡j}||ksnt‚||kszt‚d S )Nr   )rÊ   r  )rÊ   r¨   )rh   ri   re   ZCircleCollectionÚset_offsetsrg   rw   r4   )ÚidentityrÊ   rl   ÚinitÚlateZnull_boundsZinit_boundsZlate_boundsr,   r,   r-   Útest_set_offsets_lateE  s    
r¡  c                  C   sT   t  ¡  dd¡} tj| d}t ¡ }| | ¡ | | ¡   krJ| ¡ ksPn t‚d S )Nr   )r©   )rh   r—   Úskewre   r   Zset_offset_transformZget_offset_transformr4   )r¢  rŸ  r   r,   r,   r-   Útest_set_offset_transformZ  s
    
r£  c                  C   s¶   t  ddd¡} t  | ¡}| t  dd¡ t  d¡ }t ||¡}| ¡ }| t	t
||ƒƒ¡ t j || ¡ ¡ t ¡ \}}| ||¡}| ¡ }| t	t
||ƒƒ¡ t j || ¡ ¡ d S )Nr   rŠ   rS   é   rJ  z
2021-11-29)r    r”   r™   Ztimedelta64Z
datetime64r"   ru   Úget_offsetsr  r¾   rÂ   r1   rk  r#   )r„   r…   Údr%  Zoff0r)   r*   r,   r,   r-   Útest_set_offset_unitsd  s    
r§  Útest_check_masked_offsets)Zbaseline_imagesry   r¥   r$  c                  C   s”   t ddddddƒt ddddddƒt ddddddƒt dddddd	ƒt dddddd
ƒg} tjjdddddgdddddgd}t ¡ \}}| | |¡ d S )Niæ  r  rL   rŽ   é1   é4   é5   ru  é7   é8   r   r   r¦   rS   r   ©Úmask)r   r    Úmar!   r"   r#   ru   )Z
unmasked_xZmasked_yr)   r*   r,   r,   r-   r¨  x  s    û$c                 C   s¦   t jjdddddgdddddgd}t  dd¡}| ¡ }| ||¡}| t j ||g¡¡ | g ¡ | 	g ¡ |  ¡ }| dddgdddg¡ | g ¡ | 	g ¡ d S ©	Nr   r   r¦   rŽ   rS   r   r®  r¡   )
r    r°  r!   r“   Zadd_subplotru   r  rg  Z
set_xticksZ
set_yticks)rƒ   r‚   r„   r…   r†   Úscatr‡   r,   r,   r-   Útest_masked_set_offsets‹  s    $


r³  c                  C   sª   t jjdddddgdddddgd} t  dd¡}t ¡ \}}| | |¡}t j | |g¡}| |¡ t	| 
¡ t|ƒƒsxt‚t  | |g¡}| |¡ t	| 
¡ t|ƒƒs¦t‚d S r±  )r    r°  r!   r“   r"   r#   ru   rg  r  Ú
isinstancer¥  Útyper4   )r„   r…   r)   r*   r²  Zmasked_offsetsZunmasked_offsetsr,   r,   r-   Útest_check_offsets_dtypeœ  s    $

r¶  )hr   ræ   rx  Útypesr   Znumpyr    Znumpy.testingr   r   r  Z
matplotlibrH  Zmatplotlib.pyplotZpyplotr"   Zmatplotlib.collectionsÚcollectionsre   Zmatplotlib.colorsrÄ   r‘  Zmatplotlib.pathÚpathrq   Zmatplotlib.transformsZ
transformsrh   r   r   r   r	   Zmatplotlib.testing.decoratorsr
   r   r.   r;   rA   rD   rE   rF   rI   rJ   rK   rN   rP   rX   rZ   r0   rn   rs   rx   r$  Úcontextrˆ   rŸ   r¤   r´   rÈ   rÓ   rã   rì   rö   rø   rý   r   r  r  r  r  r  r  r   r#  r&  r+  rS  rT  r^  re  ro  rq  ÚmarkZparametrizers  r{  r}  r  rƒ  r…  r‰  r  r™  ró   r•  r—  rš  rœ  r¡  r£  r§  r¨  r³  r¶  r,   r,   r,   r-   Ú<module>   sð   (









ý

	



$










 ÿ
1þ
0	
D	
  ÿ


