U
    Gvf                     @  s   d dl mZ d dlmZ d dlZd dlZd dlm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlmZ erd dlmZ d dlmZ d dlmZ G d	d
 d
e	ZeeG dd deZeeG dd deZdS )    )annotations)	dataclassN)
MarkMappableMappableBoolMappableFloatMappableStringMappableColorMappableStyleresolve_propertiesresolve_colordocument_properties)TYPE_CHECKING)Any)Artist)Scalec                   @  s8   e Zd Zdd Zdd Zdd Zddd	d
dddZdS )DotBasec                 C  s^   g }i }|d }dd }t |tjjr.||S |D ]&}||krJ||||< |||  q2|S )Nmarkerc                 S  s   |   |  S )N)get_pathZtransformedZget_transform)m r   6/tmp/pip-unpacked-wheel-ir0tye89/seaborn/_marks/dot.pyget_transformed_path#   s    z4DotBase._resolve_paths.<locals>.get_transformed_path)
isinstancemplmarkersZMarkerStyleappend)selfdatapathsZ
path_cacher   r   r   r   r   r   _resolve_paths   s    zDotBase._resolve_pathsc                 C  sh   t | ||}| ||d< |d d |d< t|trB|d  }ndd |d D }|d | |d< |S )	Npath	pointsize   sizer   c                 S  s   g | ]}|  qS r   )	is_filled).0r   r   r   r   
<listcomp>8   s     z/DotBase._resolve_properties.<locals>.<listcomp>fill)r   r    r   dictr%   )r   r   scalesresolvedZfilled_markerr   r   r   _resolve_properties/   s    
zDotBase._resolve_propertiesc           	      C  s   | D ]~\}}}t |d |d g}| ||}tjjf ||d |d |d |d |d |d |jtj d		| j	}|
| qd S )
Nxyr!   r$   	facecolor	edgecolor	linewidth	edgestyle)	offsetsr   sizes
facecolors
edgecolors
linewidths
linestylesZtransOffset	transform)npZcolumn_stackr,   r   collectionsPathCollectionZ	transData
transformsIdentityTransform
artist_kwsZadd_collection)	r   Z	split_genr*   Zorient_r   Zaxr3   Zpointsr   r   r   _plot>   s"    
zDotBase._plotz	list[str]r   zdict[str, Scale]r   )	variablesvaluer*   returnc              
     sl    fdd|D }|  ||}tjjf |d g|d g|d g|d g|d g|d gtj d	| jS )
Nc                   s   i | ]
}| qS r   r   )r&   vrC   r   r   
<dictcomp>[   s      z*DotBase._legend_artist.<locals>.<dictcomp>r!   r$   r/   r0   r1   r2   )r   r4   r5   r6   r7   r8   r9   )r,   r   r;   r<   r=   r>   r?   )r   rB   rC   r*   keyresr   rF   r   _legend_artistW   s    zDotBase._legend_artistN)__name__
__module____qualname__r    r,   rA   rJ   r   r   r   r   r      s   r   c                      s   e Zd ZU dZedddZded< edddZded	< ed
ddZded< edddZ	ded< edddZ
ded< edddZded< edddZded< edddZded< edddZded< edddZded<  fddZ  ZS )Dotz
    A mark suitable for dot plots or less-dense scatterplots.

    See also
    --------
    Dots : A dot mark defined by strokes to better handle overplotting.

    Examples
    --------
    .. include:: ../docstrings/objects.Dot.rst

    oFgroupingr   r      r   r"         ?strokeC0r	   color   alphaTr   r(   ZdependrQ   r0   	edgealphag      ?	edgewidth-r
   r2   c           	        s   t  ||}|d }|d }|d }t||||d< t| |d|}t| |d|}t|sn|d d d f }t||||d< t|}t|trt|d d |d | f}n.tj	|d d d df |d d df | f }||d	< |S )
Nr(   rT   r[   r1    Zedger0      r/   )
superr,   r:   wherer   ZisscalarZsqueezer   tupleZc_)	r   r   r*   r+   ZfilledZmain_strokeZedge_strokeZ
main_colorZ
edge_color	__class__r   r   r,      s     


 .zDot._resolve_properties)rK   rL   rM   __doc__r   r   __annotations__r"   rT   rV   rX   r(   r0   rZ   r[   r2   r,   __classcell__r   r   rb   r   rN   j   s   
rN   c                      s   e Zd ZU dZedddZded< edddZd	ed
< edddZd	ed< edddZ	ded< edddZ
d	ed< edddZded< edddZded< edddZd	ed<  fddZ  ZS )Dotsz
    A dot mark defined by strokes to better handle overplotting.

    See also
    --------
    Dot : A mark suitable for dot plots or less-dense scatterplots.

    Examples
    --------
    .. include:: ../docstrings/objects.Dots.rst

    zscatter.markerF)rcrQ   r   r      rP   r   r"   rS   rT   rU   r	   rV   rW   rX   Tr   r(   rY   	fillcolorg?	fillalphac                   s   t  ||}|d|d< t| |d||d< t| |d||d< |dd |d }t|tr|d	 |d
 |d |d |d  f|d< n,|d d df |d  |d d df< ||d< |S )NrT   r1   r(   r/   r]   r0   r2   )r   Nr   rW   r#   r^   )r_   r,   popr   
setdefaultr   ra   )r   r   r*   r+   Zfcrb   r   r   r,      s    
*$zDots._resolve_properties)rK   rL   rM   rd   r   r   re   r"   rT   rV   rX   r(   rj   rk   r,   rf   r   r   rb   r   rg      s   
rg   )
__future__r   Zdataclassesr   Znumpyr:   Z
matplotlibr   Zseaborn._marks.baser   r   r   r   r   r	   r
   r   r   r   typingr   r   Zmatplotlib.artistr   Zseaborn._core.scalesr   r   rN   rg   r   r   r   r   <module>   s    0O4