Ë
    ªehï ã                  ó\  — d dl 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m	Z	m
Z
 d dlm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mZ d d
lmZmZmZmZmZmZ  G d„ d«      Z  G d„ de «      Z! G d„ de «      Z" G d„ de «      Z# G d„ d«      Z$ G d„ de«      Z%dd„Z&dd„Z'd„ Z(d„ Z)dd„Z*y)é    )ÚannotationsN©Úcopy)Ú
UserString)ÚIterableÚSequenceÚMapping)ÚNumber)Údatetime)ÚPlotData)ÚQUAL_PALETTESÚcolor_palette)Ú_check_argumentÚ_version_predatesÚ
desaturateÚlocator_to_legend_entriesÚget_color_cycleÚ	remove_nac                  ó@   — e Zd ZU dZdZded<   dZdZd„ Zd„ Z	d„ Z
d„ Zy)	ÚSemanticMappingz6Base class for mapping data values to plot attributes.Nz
str | NoneÚmap_typec                ó   — || _         y ©N)Úplotter)Úselfr   s     úK/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/seaborn/_base.pyÚ__init__zSemanticMapping.__init__+   s   € ð ˆ�ó    c                óð  — d}t        |«      t        |«      kD  rcdj                  d|› dt        |«      › d�dt        |«      › d�dg«      }t        |t        j                  |«      «      D ��cg c]  \  }}|‘Œ	 }}}nUt        |«      t        |«      kD  r>dj                  d	|› d
t        |«      › d�dt        |«      › d�g«      }|dt        |«       }|rt        j                  |t        d¬«       |S c c}}w )z/Input check when values are provided as a list.Ú ú z
The z list has fewer values (ú)zthan needed (z) and will cycle, which mayz produce an uninterpretable plot.úThe z list has more values (z), which may not be intended.Né   ©Ú
stacklevel)ÚlenÚjoinÚzipÚ	itertoolsÚcycleÚwarningsÚwarnÚUserWarning)r   ÚlevelsÚvaluesÚvariableÚmessageÚ_Úxs          r   Ú_check_list_lengthz"SemanticMapping._check_list_length4   sû   € ð ˆÜˆv‹;œ˜V›Ò$Ø—h‘hØ˜˜
Ð":¼3¸v»;¸-ÀqÐIØ¤ F£˜}Ð,GÐHØ2ð ó ˆGô
 %(¨´	·±ÀÓ0GÓ$H×I™D˜A˜q’aÐIˆFÒIä�‹[œ3˜v›;Ò&Ø—h‘hØ�x�jÐ 7¼¸F»°}ÀAÐFØ¤ F£˜}Ð,IÐJð ó ˆGð ˜LœS ›[Ð)ˆFáÜ�M‰M˜'¤;¸1Õ=àˆùó Js   Á-C2c                ó    — | j                   |   S )z)Apply the mapping to a single data value.©Úlookup_table)r   Úkeys     r   Ú_lookup_singlezSemanticMapping._lookup_singleL   s   € à× Ñ  Ñ%Ð%r   c                óÞ   — t        |t        t        j                  t        j
                  f«      r$|D �cg c]  } | j                  |g|¢­i |¤Ž‘Œ c}S  | j                  |g|¢­i |¤ŽS c c}w )z-Get the attribute(s) values for the data key.)Ú
isinstanceÚlistÚnpÚndarrayÚpdÚSeriesr:   )r   r9   ÚargsÚkwargsÚks        r   Ú__call__zSemanticMapping.__call__P   sg   € ä�cœD¤"§*¡*¬b¯i©iÐ8Ô9ØEHÖIÀÐ'�D×'Ñ'¨Ð;¨DÒ;°FÓ;ÒIÐIà&�4×&Ñ& sÐ<¨TÒ<°VÑ<Ð<ùò Js   ´A*)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r/   r8   r   r5   r:   rE   © r   r   r   r      s3   … Ù@ð
  €HˆjÓð €Fð €Lòòò0&ó=r   r   c                  óJ   ‡ — e Zd ZdZdZdZdZ	 dˆ fd„	Zd„ Zd„ Z	d„ Z
d„ Zˆ xZS )	Ú
HueMappingz9Mapping that sets artist colors according to data values.Nc                ó,  •— t         ‰| �  |«       |j                  j                  dt	        j
                  t        ¬«      «      }t        |t        j                  «      r)d}t        j                  |d¬«       |j                  «       }|j                  «       j                  «       r|�d}t        j                  |d¬«       yy| j                  |||j                   |j"                  d   «      }|dk(  r.t	        j$                  |«      }| j'                  |||«      \  }	}
}}nC|d	k(  rdx}}| j)                  |||«      \  }	}
n#dx}}| j)                  t+        |«      ||«      \  }	}
|| _        || _        |
| _        || _        |	| _        || _        || _        y)
z�Map the levels of the `hue` variable to distinct colors.

        Parameters
        ----------
        # TODO add generic parameters

        Úhue©Údtypez|Numpy array is not a supported type for `palette`. Please convert your palette to a list. This will become an error in v0.14é   r%   Nz?Ignoring `palette` because no `hue` variable has been assigned.ÚnumericÚcategorical)Úsuperr   Ú	plot_dataÚgetr@   rA   Úfloatr<   r>   r?   r,   r-   ÚtolistÚisnaÚallÚinfer_map_typeÚinput_formatÚ	var_typesÚ
to_numericÚnumeric_mappingÚcategorical_mappingr=   Ú
saturationr   r8   Úpaletter/   ÚnormÚcmap)r   r   rc   Úorderrd   rb   ÚdataÚmsgr   r/   r8   re   Ú	__class__s               €r   r   zHueMapping.__init__c   s‹  ø€ ô 	‰Ñ˜Ô!à× Ñ ×$Ñ$ U¬B¯I©I¼EÔ,BÓCˆä�gœrŸz™zÔ*ð5ð ô
 �M‰M˜#¨!Õ,Ø—n‘nÓ&ˆGà�9‰9‹;�?‰?ÔØÐ"ØW�Ü—‘˜c¨aÖ0ð #ð
 ×*Ñ*Ø˜˜w×3Ñ3°W×5FÑ5FÀuÑ5MóˆHð ˜9Ò$ä—}‘} TÓ*�Ø37×3GÑ3GØ˜' 4ó4Ñ0�˜ d©Dð ˜]Ò*à"Ð"��tØ'+×'?Ñ'?Ø˜' 5ó(Ñ$�™ð #Ð"��tØ'+×'?Ñ'?ô ˜“J ¨ó(Ñ$�˜ð )ˆDŒOØ$ˆDŒMØ ,ˆDÔØ"ˆDŒLØ ˆDŒKØˆDŒIØˆD�Ir   c                ó°  — 	 | j                   |   }| j                  dk  rt        || j                  «      }|S # t        $ r” | j                  €Y y	 | j                  |«      }t        j                  j                  |«      rt        j                  }| j                  |«      }n0# t        $ r$}t        j                  |«      rd}n|‚Y d}~nd}~ww xY wY ŒÃw xY w)z@Get the color for a single value, using colormap to interpolate.N)r   r   r   r   é   )r8   ÚKeyErrorrd   r>   ÚmaÚ	is_maskedÚnanre   Ú	TypeErrorÚisnanrb   r   )r   r9   ÚvalueÚnormedÚerrs        r   r:   zHueMapping._lookup_single­   sÁ   € ð	*à×%Ñ% cÑ*ˆEð. �?‰?˜QÒÜ˜u d§o¡oÓ6ˆEàˆøô3 ò 	*à�y‰yÐ ñ $ð
*ØŸ™ 3›�ô —5‘5—?‘? 6Ô*ÜŸV™V�FØŸ	™	 &Ó)‘øô ò Ü—8‘8˜C”=Ø(‘Eà�Iô ûðüð	*ús:   ‚8 ¸CÁB"Á!ACÂ"	CÂ+C
ÃCÃ
CÃCÃCc                ót   — |t         v rd}|S |�d}|S t        |t        t        f«      rd}|S |dk(  rd}|S |}|S )z'Determine how to implement the mapping.rT   rS   Úwide)r   r<   Údictr=   )r   rc   rd   r]   Úvar_typer   s         r   r\   zHueMapping.infer_map_typeÍ   sh   € à”mÑ#Ø$ˆHð ˆð ÐØ ˆHð ˆô ˜¤$¬ Ô.Ø$ˆHð ˆð ˜VÒ#Ø$ˆHð ˆð  ˆHàˆr   c                óÎ  — t        ||«      }t        |«      }t        |t        «      rDt	        |«      t	        |«      z
  }t        |«      rd}t        |j                  |«      «      ‚|}||fS |€0|t        t        «       «      k  rt        d|«      }	n=t        d|«      }	n0t        |t        «      r| j                  ||d«      }	nt        ||«      }	t        t        ||	«      «      }||fS )z5Determine colors when the hue mapping is categorical.z*The palette dictionary is missing keys: {}NÚhuslrc   )Úcategorical_orderr'   r<   rw   ÚsetÚanyÚ
ValueErrorÚformatr   r   r=   r5   r)   )
r   rg   rc   rf   r/   Ún_colorsÚmissingrt   r8   Úcolorss
             r   ra   zHueMapping.categorical_mappingÜ   sÞ   € ô # 4¨Ó/ˆÜ�v“;ˆô �gœtÔ$ä˜&“k¤C¨£LÑ0ˆGÜ�7Œ|ØB�Ü  §¡¨GÓ!4Ó5Ð5à"ˆLð  �|Ð#Ð#ð ˆØœs¤?Ó#4Ó5Ò5Ü*¨4°Ó:‘Fä*¨6°8Ó<‘FÜ˜G¤TÔ*Ø×0Ñ0°¸À)ÓL‘ä& w°Ó9�ä¤ F¨FÓ 3Ó4ˆLà�|Ð#Ð#r   c           
     óˆ  — t        |t        «      r`t        t        |«      «      }t        |«      D �cg c]  }||   ‘Œ	 }}t        j
                  j                  |«      }|j                  «       }�nHt        t        j                  t        |j                  «       «      «      «      }|€dn|}t        |t        j
                  j                  «      r|}nt        |d¬«      }|€t        j
                  j                  «       }n^t        |t        «      rt	        j
                  j                  |Ž }n1t        |t        j
                  j                  «      sd}	t!        |	«      ‚|j#                  «       s) |t        j$                  |j'                  «       «      «       t        t)        | | ||«      «      «      «      }||||fS c c}w )z7Determine colors when the hue variable is quantitative.zch:T)Úas_cmapz6``hue_norm`` must be None, tuple, or Normalize object.)r<   rw   r=   ÚsortedÚmplr‚   ÚListedColormapr   r>   Úsortr   ÚuniqueÚColormapr   Ú	NormalizeÚtupler~   ÚscaledÚasarrayÚdropnar)   )
r   rg   rc   rd   r/   rD   r‚   re   r8   rt   s
             r   r`   zHueMapping.numeric_mappingþ   sQ  € ä�gœtÔ$ô œ& ›/Ó*ˆFÜ*0°«/Ö: Q�g˜a“jÐ:ˆFÐ:Ü—:‘:×,Ñ,¨VÓ4ˆDØ"Ÿ<™<›>ŠLô
 œ"Ÿ'™'¤)¨D¯K©K«MÓ":Ó;Ó<ˆFð  '˜‘e°GˆGä˜'¤3§:¡:×#6Ñ#6Ô7Ø‘ä$ W°dÔ;�ð ˆ|Ü—z‘z×+Ñ+Ó-‘Ü˜D¤%Ô(Ü—z‘z×+Ñ+¨TÐ2‘Ü ¤c§j¡j×&:Ñ&:Ô;ØN�Ü  “oÐ%à—;‘;”=Ù”R—Z‘Z §¡£Ó.Ô/ä¤ F©D±°f³Ó,>Ó ?Ó@ˆLà�| T¨4Ð/Ð/ùòE ;s   ²F?©NNNrk   )rF   rG   rH   rI   rc   rd   re   r   r:   r\   ra   r`   Ú__classcell__©ri   s   @r   rM   rM   X   s=   ø„ ÙCà€Gð €Dð €Dð HIõHòTò@ò $öD)0r   rM   c                  óB   ‡ — e Zd ZdZdZ	 dˆ fd„	Zd„ Zd„ Zd„ Zd„ Z	ˆ xZ
S )	ÚSizeMappingz8Mapping that sets artist sizes according to data values.Nc                ó  •— t         ‰
| �  |«       |j                  j                  dt	        j
                  t        ¬«      «      }|j                  «       j                  «       r¨| j                  |||j                  d   «      }|dk(  r| j                  |||«      \  }}}}	n?|dk(  r| j                  |||«      \  }}d}	n!| j                  t        |«      ||«      \  }}d}	|| _        || _        || _        || _        |	| _        || _        yy)z�Map the levels of the `size` variable to distinct values.

        Parameters
        ----------
        # TODO add generic parameters

        ÚsizerP   rS   rT   N)rU   r   rV   rW   r@   rA   rX   Únotnar}   r\   r^   r`   ra   r=   r   r/   rd   ÚsizesÚ
size_ranger8   )r   r   r˜   rf   rd   rg   r   r/   r8   r™   ri   s             €r   r   zSizeMapping.__init__/  s  ø€ ô 	‰Ñ˜Ô!à× Ñ ×$Ñ$ V¬R¯Y©Y¼UÔ-CÓDˆà�:‰:‹<×ÑÔà×*Ñ*Ø�e˜W×.Ñ.¨vÑ6óˆHð ˜9Ò$à9=×9MÑ9MØ˜% ó:Ñ6�˜ d©Jð ˜]Ò*à'+×'?Ñ'?Ø˜% ó(Ñ$�˜ð "‘
ð (,×'?Ñ'?ô ˜“J  uó(Ñ$�˜ð
 "�
à$ˆDŒMØ ˆDŒKØˆDŒIØˆDŒJØ(ˆDŒOØ ,ˆDÕðQ r   c                óJ   — |�d}|S t        |t        t        f«      rd}|S |}|S )NrS   rT   )r<   rw   r=   )r   rd   r˜   rx   r   s        r   r\   zSizeMapping.infer_map_typeg  s<   € àÐØ ˆHð ˆô ˜¤¤d˜|Ô,Ø$ˆHð ˆð  ˆHàˆr   c                ó*  — 	 | j                   |   }|S # t        $ rv | j                  |«      }t        j                  j                  |«      rt        j                  }| j                  d   |t        j                  | j                  «      z  z   }Y |S w xY w)Nr   )	r8   rl   rd   r>   rm   rn   ro   r™   Úptp)r   r9   rr   rs   s       r   r:   zSizeMapping._lookup_singler  s‚   € ð	JØ×%Ñ% cÑ*ˆEð ˆøô ò 	JØ—Y‘Y˜s“^ˆFÜ�u‰u�‰˜vÔ&ÜŸ™�Ø—O‘O AÑ&¨´"·&±&¸¿¹Ó2IÑ)IÑI‰EØˆð	Jús   ‚ “A;BÂBc                ób  — t        ||«      }t        |t        «      rFt        |«      t        |«      z
  }t	        |«      rd|› �}t        |«      ‚|j                  «       }||fS t        |t        «      r,| j                  ||d«      }t        t        ||«      «      }||fS t        |t        «      rt        |«      dk7  r5d}t        |«      ‚|�d|› �}t        |«      ‚| j                  j                  }t        j                  g |¢t        |«      ‘­Ž d d d…   }t        t        ||«      «      }||fS )Nz(Missing sizes for the following levels: r˜   é   ú'A `sizes` tuple must have only 2 valuesú"Value for `sizes` not understood: éÿÿÿÿ)r{   r<   rw   r|   r}   r~   r   r=   r5   r)   rŒ   r'   r   Ú_default_size_ranger>   Úlinspace)r   rg   r˜   rf   r/   r�   rt   r8   s           r   ra   zSizeMapping.categorical_mapping}  s;  € ä" 4¨Ó/ˆä�eœTÔ"ô ˜&“k¤C¨£JÑ.ˆGÜ�7Œ|Ø@ÀÀ	ÐJ�Ü  “oÐ%Ø Ÿ:™:›<ˆLðZ �|Ð#Ð#ôW ˜œtÔ$ð ×+Ñ+¨F°E¸7ÓCˆEÜ¤ F¨EÓ 2Ó3ˆLðN �|Ð#Ð#ôG ˜%¤Ô'ô �u“: ’?ØC�CÜ$ S›/Ð)àÐ"à:¸5¸'ÐB�Ü  “oÐ%ð Ÿ™×8Ñ8�ô —K‘KÐ4 Ð4¬¨F«Ò4±T°r°TÑ:ˆEÜ¤ F¨EÓ 2Ó3ˆLà�|Ð#Ð#r   c                ó¸  — t        |t        «      rNt        t        j                  t        |«      «      «      }|j                  «       }t        |«      t        |«      f}n‹t        t        j                  t        |j                  «       «      «      «      }t        |t        «      rt        |«      dk7  rd}t        |«      ‚|}n(|�d|› �}t        |«      ‚| j                  j                  }|€t        j                   j#                  «       }nlt        |t        «      rt        j                   j"                  |Ž }n?t        |t        j                   j"                  «      sd|› �}t        |«      ‚t%        |«      }d|_        |j)                  «       s ||«        ||«      }t        |t        «      r|}	n%|\  }
}|
|||
z
  z  z   }t        t+        ||«      «      }	||	||fS )Nrž   rŸ   r    z0Value for size `norm` parameter not understood: T)r<   rw   r=   r>   rˆ   r0   ÚminÚmaxr   r‰   rŒ   r'   r~   r   r¢   r†   r‚   r‹   r   Úclipr�   r)   )r   rg   r˜   rd   r/   Úsize_valuesr™   rt   Úsizes_scaledr8   ÚloÚhis               r   r`   zSizeMapping.numeric_mapping·  s›  € ä�eœTÔ"ô œ"Ÿ'™'¤$ u£+Ó.Ó/ˆFØŸ,™,›.ˆKÜ˜[Ó)¬3¨{Ó+;Ð;‰Jô
 œ"Ÿ'™'¤)¨D¯K©K«MÓ":Ó;Ó<ˆFä˜%¤Ô'ô �u“: ’?ØC�CÜ$ S›/Ð)à"‘
àÐ"à:¸5¸'ÐB�Ü  “oÐ%ð "Ÿ\™\×=Ñ=�
ð ˆ<ä—:‘:×'Ñ'Ó)‰DÜ˜œeÔ$ä—:‘:×'Ñ'¨Ð.‰DÜ˜D¤#§*¡*×"6Ñ"6Ô7ØDÀTÀFÐKˆCÜ˜S“/Ð!ô ˜“:ˆDð ˆŒ	ð �{‰{Œ}Ù�ŒLñ ˜F“|ˆô �eœTÔ"Ø ‰Là‰FˆB�Ø˜¨¨b©Ñ1Ñ1ˆEÜ¤ F¨EÓ 2Ó3ˆLà�| T¨:Ð5Ð5r   ©NNN)rF   rG   rH   rI   rd   r   r\   r:   ra   r`   r‘   r’   s   @r   r”   r”   *  s,   ø„ ÙBà€Dð 59õ6-òp	ò	ò8$ötM6r   r”   c                  ó6   ‡ — e Zd ZdZdZdˆ fd„	Zdd„Zd„ Zˆ xZS )ÚStyleMappingz8Mapping that sets artist style according to data values.rT   c           	     óÔ  •— t         ‰| �  |«       |j                  j                  dt	        j
                  t        ¬«      «      }|j                  «       j                  «       �r…t        |«      dk(  rt        |«      }t        ||«      }| j                  ||t        t        |«      «      d«      }| j                  ||t        t        |«      «      d«      }i }g }|j!                  «       D ]—  \  }	}
t#        |
t$        j&                  j(                  «      st$        j&                  j)                  |
«      }
|
j+                  «       j-                  |
j/                  «       «      ||	<   |j1                  |
j3                  «       «       Œ™ t        |«      rt5        |«      sd}t7        |«      ‚i }|D ]-  }i ||<   |r||   ||   d<   ||   ||   d<   |sŒ#||   ||   d<   Œ/ || _        || _        y	y	)
z‘Map the levels of the `style` variable to distinct values.

        Parameters
        ----------
        # TODO add generic parameters

        ÚstylerP   r   ÚmarkersÚdashesz+Filled and line art markers cannot be mixedÚmarkerÚpathN)rU   r   rV   rW   r@   rA   rX   r—   r}   Úvariable_typer=   r{   Ú_map_attributesÚunique_markersr'   Úunique_dashesÚitemsr<   r†   r±   ÚMarkerStyleÚget_pathÚtransformedÚget_transformÚappendÚ	is_filledr[   r~   r/   r8   )r   r   r±   r²   rf   rg   r/   ÚpathsÚfilled_markersrD   Úmrt   r8   r9   ri   s                 €r   r   zStyleMapping.__init__  sÇ  ø€ ô 	‰Ñ˜Ô!à× Ñ ×$Ñ$ W¬b¯i©i¼eÔ.DÓEˆà�:‰:‹<×ÑÕô ˜TÓ" jÒ0Ü˜D“z�ô ' t¨UÓ3ˆFà×*Ñ*Ø˜¤´°F³Ó!<¸ióˆGð ×)Ñ)Ø˜¤¬c°&«kÓ :¸HóˆFð
 ˆEØˆNØŸ™›ò 5‘��1Ü! !¤S§[¡[×%<Ñ%<Ô=ÜŸ™×/Ñ/°Ó2�AØŸ:™:›<×3Ñ3°A·O±OÓ4EÓF��a‘Ø×%Ñ% a§k¡k£mÕ4ð	5ô �>Ô"¬3¨~Ô+>ØC�Ü  “oÐ%àˆLØò >�Ø$&�˜SÑ!ÙØ29¸#±,�L Ñ% hÑ/Ø05°c±
�L Ñ% fÑ-ÚØ28¸±+�L Ñ% hÒ/ð>ð !ˆDŒKØ ,ˆDÕðY r   c                óP   — |€| j                   |   }|S | j                   |   |   }|S )z(Get attribute(s) for a given data point.r7   )r   r9   Úattrrr   s       r   r:   zStyleMapping._lookup_singleG  s:   € àˆ<Ø×%Ñ% cÑ*ˆEð ˆð ×%Ñ% cÑ*¨4Ñ0ˆEØˆr   c                ó^  — |du rt        t        ||«      «      }|S t        |t         «      r0t        |«      t        |«      z
  }|rd|› d|› �}t	        |«      ‚|}|S t        |t
        «      r*| j                  |||«      }t        t        ||«      «      }|S |rd|› d|› �}t	        |«      ‚i }|S )z5Handle the specification for a given style attribute.TzThese `z` levels are missing values: zThis `z` argument was not understood: )rw   r)   r<   r|   r~   r   r5   )r   Úargr/   ÚdefaultsrÄ   r8   r�   rt   s           r   r¶   zStyleMapping._map_attributesO  sÓ   € à�$‰;Ü¤ F¨HÓ 5Ó6ˆLð  Ðô ˜œTÔ"Ü˜&“k¤C¨£HÑ,ˆGÙØ ˜vÐ%BÀ7À)ÐL�Ü  “oÐ%ØˆLð Ðô ˜œXÔ&Ø×)Ñ)¨&°#°tÓ<ˆCÜ¤ F¨CÓ 0Ó1ˆLð Ðñ Ø˜4˜&Ð ?À¸uÐEˆCÜ˜S“/Ð!àˆLàÐr   r¬   r   )	rF   rG   rH   rI   r   r   r:   r¶   r‘   r’   s   @r   r®   r®     s   ø„ ÙBð €Hõ8-ótör   r®   c                  óö   — e Zd ZdZdddddœZdddœZdZdi fd	„Zed
„ «       Z	ed„ «       Z
di fd„Zd d„Zd!d„Zd"d„Zd"d„Z	 d ddddddœd„Zed„ «       Zd„ Z	 	 d#d„Zd„ Zd$d„Z	 d"d„Zd„ Zd„ Zd„ Zd„ Zd#d„Zy)%ÚVectorPlotterz2Base class for objects underlying *plot functions.ú@indexú@valuesú@columns)r4   ÚyrO   r°   ©r4   rÍ   )rk   rž   Nc                óŠ   — i | _         dddœ| _        | j                  ||«       dD ]  }||v sŒ t        | d|› �«      «        Œ y )NFrÎ   ©rO   r–   r°   Úmap_)Ú_var_levelsÚ_var_orderedÚassign_variablesÚgetattr)r   rg   Ú	variablesÚvars       r   r   zVectorPlotter.__init__r  sW   € àˆÔð
 #(¨eÑ4ˆÔØ×Ñ˜d IÔ.ð
 ,ò 	.ˆCØ�iÒØ+”˜  S E˜lÓ+Õ-ñ	.r   c                óH   — t        ddht        | j                  «      z  «      S )z.Return True at least one of x or y is defined.r4   rÍ   )Úboolr|   rÖ   )r   s    r   Úhas_xy_datazVectorPlotter.has_xy_dataƒ  s!   € ô �S˜#�J¤ T§^¡^Ó!4Ñ4Ó5Ð5r   c                ó–   — | j                   D ]/  }t        | d|› d�d«      x}€Œ|j                  | j                  |<   Œ1 | j                  S )a4  Property interface to ordered list of variables levels.

        Each time it's accessed, it updates the var_levels dictionary with the
        list of levels in the current semantic mappers. But it also allows the
        dictionary to persist, so it can be used to set levels by a key. This is
        used to track the list of col/row levels using an attached FacetGrid
        object, but it's kind of messy and ideally fixed by improving the
        faceting logic so it interfaces better with the modern approach to
        tracking plot variables.

        r3   Ú_mapN)rÖ   rÕ   r/   rÒ   )r   r×   Úmap_objs      r   Ú
var_levelszVectorPlotter.var_levelsˆ  sU   € ð —>‘>ò 	7ˆCÜ" 4¨1¨S¨E°¨¸Ó=Ð=�ÑJØ(/¯©�× Ñ  Ò%ð	7ð ×ÑÐr   c           	     ób  — |j                  dd«      }|j                  dd«      }|€ |€d| _         | j                  |fi |¤Ž\  }}n+d| _        t        ||«      }|j                  }|j
                  }|| _        || _        |D �ci c]  }|t        ||   |dv rdnd¬	«      “Œ c}| _	        | S c c}w )
z;Define plot variables, optionally using lookup from `data`.r4   NrÍ   rv   ÚlongÚxyrS   rT   )Úboolean_type)
rW   r]   Ú_assign_variables_wideformr   ÚframeÚnamesrV   rÖ   rµ   r^   )	r   rg   rÖ   r4   rÍ   rä   rå   rV   Úvs	            r   rÔ   zVectorPlotter.assign_variablesš  sÌ   € à�M‰M˜#˜tÓ$ˆØ�M‰M˜#˜tÓ$ˆàˆ9˜˜Ø &ˆDÔØ:˜4×:Ñ:¸4ÑMÀ9ÑM‰LˆE‘5ð
 !'ˆDÔÜ   yÓ1ˆIØ—O‘OˆEØ—O‘OˆEàˆŒØˆŒð ö
ð
 ð	 Œ}Ø�a‘Ø*+¨t©)™Y¸ôñ ò
ˆŒð ˆùò
s   ÂB,c                óð  — |j                  «       D ��cg c]
  \  }}|€Œ	|‘Œ }}}t        |«      r>t        |«      dkD  rdnd}d|› d�}|dj                  d„ |D «       «      z  }t	        |«      ‚|du xs t        |«       }t        |t        «      r|j                  «       }	n.t        j                  t        j                  |t        ¬	«      «      }	t        d
„ |	D «       «       }
|rt        j                  «       }i }||fS |
r¯t        j                  |«      j                  «       }|j                   |j"                  j                   dœ}i }i }dD ]G  }|| j$                  v sŒ| j$                  |   }t'        ||dd «      ||<   || j$                  |      ||<   ŒI t        j                  |«      }||fS t        |t(        «      r<i }t+        |«      D ]*  \  }}t'        |d|«      }t        j                  |«      ||<   Œ, |}t        |t,        «      r6|j                  «       D ��ci c]  \  }}|t        j                  |«      “Œ }}}t        j                  |d¬«      }|j                  «       D ��cg c]  \  }}t/        |«      dk(  sŒ|‘Œ }}}||   }dddœ}d| j0                  j                  «       v }|rqd|d<   	 |j2                  j4                  }|j2                  j6                  }|j2                  j9                  d«      |_        d}|j"                  j=                  «       |d<    |j>                  di |¤Ž}|rrt        j@                  |d   «      |d<   | j0                  j                  «       D ]  \  }}||   ||<   Œ i }| j0                  j                  «       D ]$  \  }}t'        ||dd «      }t'        |dd«      ||<   Œ& |tC        |«         }||fS c c}}w c c}}w c c}}w # t:        $ r d}Y Œîw xY w)a5  Define plot variables given wide-form data.

        Parameters
        ----------
        data : flat vector or collection of vectors
            Data can be a vector or mapping that is coerceable to a Series
            or a sequence- or mapping-based collection of such vectors, or a
            rectangular numpy array, or a Pandas DataFrame.
        kwargs : variable -> data mappings
            Behavior with keyword arguments is currently undefined.

        Returns
        -------
        plot_data : :class:`pandas.DataFrame`
            Long-form data object mapping seaborn variables (x, y, hue, ...)
            to data vectors.
        variables : dict
            Keys are defined seaborn variables; values are names inferred from
            the inputs (or None when no name can be determined).

        Nrk   Úsr    zThe following variablez) cannot be assigned with wide-form data: z, c              3  ó(   K  — | ]
  }d |› d �–— Œ y­w)ú`NrK   ©Ú.0ræ   s     r   ú	<genexpr>z;VectorPlotter._assign_variables_wideform.<locals>.<genexpr>Ò  s   è ø€ Ò8¨!˜q   1œXÑ8ùs   ‚rP   c              3  ón   K  — | ]-  }t        |t        «      xr t        |t        t        f«       –— Œ/ y ­wr   )r<   r   ÚstrÚbytesrë   s     r   rí   z;VectorPlotter._assign_variables_wideform.<locals>.<genexpr>Ý  s5   è ø€ ò 
àô �qœ(Ó#ÒG¬J°q¼3Ä¸,Ó,GÐ(GÓGñ
ùs   ‚35)rË   rÊ   rÎ   ÚnameTr   rS   rÌ   rË   )Úvar_nameÚ
value_namerÊ   Úid_varsFrK   )"r¹   r}   r'   r(   r~   r<   rw   r0   r>   Ú
atleast_1drŽ   Úobjectr@   Ú	DataFramerA   r   rñ   ÚindexÚflat_structurerÕ   r   Ú	enumerater	   rµ   Úwide_structureÚcolumnsÚ
categoriesÚorderedÚadd_categoriesÚAttributeErrorÚ	to_seriesÚmeltÚCategoricalr=   )r   rg   rC   rD   ræ   Úassignedrè   rt   Úemptyr0   ÚflatrV   rÖ   Ú	flat_datarå   r×   rÄ   Ú	data_dictÚir9   ÚvalÚ	wide_dataÚnumeric_colsÚmelt_kwsÚ	use_indexÚorig_categoriesÚorig_orderedÚcategory_columnsÚobjs                                r   rã   z(VectorPlotter._assign_variables_wideform·  s  € ð. #)§,¡,£.×B™$˜!˜Q°A±M’AÐBˆÑBÜˆxŒ=Ü˜8“} qÒ(‘¨bˆAØ*¨1¨#Ð-VÐWˆCØ�4—9‘9Ñ8¨xÔ8Ó8Ñ8ˆCÜ˜S“/Ð!ð ˜�Ò-¤C¨£I ˆô �dœDÔ!Ø—[‘[“]‰Fä—]‘]¤2§:¡:¨d¼&Ô#AÓBˆFÜñ 
àô
ó 
ð 
ˆñ
 ô Ÿ™›ˆIØˆIðz ˜)Ð#Ð#ñw ô
 Ÿ	™	 $›×,Ñ,Ó.ˆIà$Ÿ>™>Ø#Ÿ/™/×.Ñ.ñˆEð
 ˆIØˆIà!ò E�Ø˜$×-Ñ-Ò-Ø×.Ñ.¨sÑ3�DÜ%,¨Y¸¸Q¸R¸Ó%A�I˜c‘NØ%*¨4×+>Ñ+>¸sÑ+CÑ%D�I˜c’Nð	Eô Ÿ™ YÓ/ˆIðN ˜)Ð#Ð#ô} ˜$¤Ô)Ø�	Ü'¨›oò 4‘F�A�sÜ! # v¨qÓ1�Cô &(§Y¡Y¨s£^�I˜c’Nð	4ð !�ô ˜$¤Ô(Ø<@¿J¹J»L×I±°°S˜œRŸY™Y s›^Ñ+ÐI�ÑIô Ÿ™ T°Ô5ˆIð (Ÿo™oÓ/÷Ù�a˜´=ÀÓ3CÀyÓ3P’ðˆLñ ð " ,Ñ/ˆIð %/¸iÑHˆHØ  D×$7Ñ$7×$>Ñ$>Ó$@Ð@ˆIÙØ&.�˜Ñ#ð,Ø&/×&7Ñ&7×&BÑ&B�OØ#,×#4Ñ#4×#<Ñ#<�LØ(1×(9Ñ(9×(HÑ(HÈÓ(R�IÔ%ð (,Ð$Ø&/§o¡o×&?Ñ&?Ó&A�	˜(Ñ#à&˜	Ÿ™Ñ2¨Ñ2ˆIáÑ-Ü(*¯©°yÀÑ7LØ7FØ7Có)E�	˜*Ñ%ð
 "×0Ñ0×6Ñ6Ó8ò 1‘	��TØ!*¨4¡�	˜#’ð1ð ˆIØ!×0Ñ0×6Ñ6Ó8ò <‘	��TÜ˜i¨¨a¨b¨Ó2�Ü!(¨¨f°dÓ!;�	˜#’ð<ð
 "¤$ y£/Ñ2ˆIà˜)Ð#Ð#ùók CùóH Jùóøô &ò -Ø',Ò$ð-ús/   ”
OŸOÈ OÉ,O!ÊO!Ê8AO' Ï'O5Ï4O5c                ó0   — t        | ||||«      }|| _        y r   )rM   Ú_hue_map)r   rc   rf   rd   rb   Úmappings         r   Úmap_huezVectorPlotter.map_hueE  s   € Ü˜T 7¨E°4¸ÓDˆØˆ�r   c                ó.   — t        | |||«      }|| _        y r   )r”   Ú	_size_map)r   r˜   rf   rd   r  s        r   Úmap_sizezVectorPlotter.map_sizeI  s   € Ü˜d E¨5°$Ó7ˆØ ˆ�r   c                ó.   — t        | |||«      }|| _        y r   )r®   Ú
_style_map)r   r±   r²   rf   r  s        r   Ú	map_stylezVectorPlotter.map_styleM  s   € Ü˜t W¨f°eÓ<ˆØ!ˆ�r   FT)ÚreverseÚfrom_comp_dataÚby_facetÚallow_emptyr�   c             #  ó‚  K  — |€g }n/t        |t        «      r|g}nt        |t        «      rt        |«      }|r7ddh}|j	                  |t        | j                  «      t        |«      z
  z  «       |D �cg c]  }|| j                  v sŒ|‘Œ }}|r| j                  }	n| j                  }	|r|	j                  «       }	| j                  j                  «       }
|rËddht        |«      z  D ]¸  }| j                  |   j                  d   }| j                  |   dk(  rQ| j                  |   r|j!                  |
|   «      |
|<   ŒXt#        j$                  |	|   j'                  «       «      |
|<   Œ‚|j)                  «       j*                  } ||j!                  |
|   «      «      |
|<   Œº |rã|	j-                  |ddd¬	«      }g }|D ](  }|
j/                  |«      }|j1                  |€g n|«       Œ* t3        j4                  |Ž }|rt7        t        |«      «      }|D ]q  }t9        |«      d
k(  rt;        t<        d«      r|d   n|}	 |j?                  |«      }|jD                  r|sŒItG        tI        ||«      «      }||j                  «       f–— Œs yi |	j                  «       f–— yc c}w # t@        $ r |	jB                  g    }Y Œow xY w­w)a  Generator for getting subsets of data defined by semantic variables.

        Also injects "col" and "row" into grouping semantics.

        Parameters
        ----------
        grouping_vars : string or list of strings
            Semantic variables that define the subsets of data.
        reverse : bool
            If True, reverse the order of iteration.
        from_comp_data : bool
            If True, use self.comp_data rather than self.plot_data
        by_facet : bool
            If True, add faceting variables to the set of grouping variables.
        allow_empty : bool
            If True, yield an empty dataframe when no observations exist for
            combinations of grouping variables.
        dropna : bool
            If True, remove rows with missing data.

        Yields
        ------
        sub_vars : dict
            Keys are semantic names, values are the level of that semantic.
        sub_data : :class:`pandas.DataFrame`
            Subset of ``plot_data`` for this combination of semantic values.

        NÚcolÚrowr4   rÍ   r   rT   F)rˆ   Úas_indexÚobservedrk   z2.2.0)%r<   rï   rŒ   r=   Úextendr|   rÖ   Ú	comp_datarV   r�   rÞ   r   Ú
convertersÚilocr^   rÓ   Úconvert_unitsr>   rˆ   r‰   r½   Ú	transformÚgroupbyrW   r¾   r*   ÚproductÚreversedr'   r   r@   Ú	get_grouprl   Úlocr  rw   r)   )r   Úgrouping_varsr  r  r  r   r�   Ú
facet_varsr×   rg   r/   ÚaxisÚ	converterr+  Úgrouped_dataÚgrouping_keysr9   Ú	iter_keysÚpd_keyÚdata_subsetÚsub_varss                        r   Ú	iter_datazVectorPlotter.iter_dataQ  s¿  è ø€ ðF Ð Ø‰MÜ˜¤sÔ+Ø*˜O‰MÜ˜¤uÔ-Ü  Ó/ˆMñ Ø ˜ˆJØ× Ñ ØœS §¡Ó0´3°}Ó3EÑEÑEôð
 )6ÖO ¸ÀÇÁÒ9NšÐOˆÐOáØ—>‘>‰Dà—>‘>ˆDáØ—;‘;“=ˆDà—‘×%Ñ%Ó'ˆÙØ˜c˜
¤S¨Ó%7Ñ7ò T�Ø ŸO™O¨DÑ1×6Ñ6°qÑ9�	Ø—>‘> $Ñ'¨=Ò8Ø×(Ñ(¨Ò.ð
 (1×'>Ñ'>¸vÀd¹|Ó'L˜˜tšô (*§w¡w¨t°D©z×/@Ñ/@Ó/BÓ'C˜˜tšà )× 7Ñ 7Ó 9× CÑ C�IÙ#,¨Y×-DÑ-DÀVÈDÁ\Ó-RÓ#S�F˜4’LðTñ" àŸ<™<Ø E°EÀEð (ó ˆLð ˆMØ$ò A�Ø—j‘j “o�Ø×$Ñ$¨3¨;¡R¸CÕ@ðAô "×)Ñ)¨=Ð9ˆIÙÜ$¤T¨)£_Ó5�	à ò 3�ô " #›h¨!šmÔ0AÄ"ÀgÔ0N�C˜’FÐTWð ð/Ø".×"8Ñ"8¸Ó"@�Kð ×$Ò$©[Øä¤ M°3Ó 7Ó8�à × 0Ñ 0Ó 2Ð2Ó2ñ'3ð. �d—i‘i“k�/Ó!ùòG Pøôf  ò /ð
 #'§(¡(¨2¡,’Kð/üs>   ‚A2J?Á4JÂJÂF.J?È;J!ÉAJ?Ê!J<Ê9J?Ê;J<Ê<J?c           	     óB  — t        | d«      s| j                  S t        | d«      �sï| j                  j                  d¬«      j                  ddgdd¬	«      }d
D �]²  }|| j                  vrŒg }| j                  |   j                  | j                  |   d¬«      }|D �]%  \  }}|j                  |j                  t        j                  t        j                   g«      t        j                  «      }|j                  «       }|| j                  v r!||j                  | j                  |   «         }t        j                  |j!                  |«      «      j#                  t$        «      }|j'                  «       j(                  }|j+                  t        j,                   ||«      |j.                  |j0                  ¬«      «       �Œ( |rt        j2                  |«      }	nt        j,                  t$        |¬«      }	|j5                  d||	«       �Œµ || _        | j6                  S )zFDataframe with numeric x and y, after unit conversion and log scaling.ÚaxÚ
_comp_dataF)Údeepr4   rÍ   rk   Úignore)r3  ÚerrorsÚyx©rˆ   ©rñ   )rQ   rñ   r   )ÚhasattrrV   r   ÚdroprÖ   r,  r(  ÚmaskÚisinr>   Úinfro   r�   rÞ   r@   r_   r*  ÚastyperX   r½   r+  r¾   rA   rø   rñ   ÚconcatÚinsertr>  )
r   r'  r×   ÚpartsÚgroupedr4  ÚorigÚcompr+  Úcomp_cols
             r   r'  zVectorPlotter.comp_dataÈ  sº  € ô �t˜TÔ"ð
 —>‘>Ð!ä�t˜\Õ*ð —‘ß‘˜5�Ó!ß‘�s˜C�j q°�Ó:ð ð ó 3�Ø˜dŸn™nÑ,Øà�ØŸ.™.¨Ñ-×5Ñ5°d·o±oÀcÑ6JÐQVÐ5ÓW�Ø'.ó 
Y‘O�I˜tØŸ9™9 T§Y¡Y´·±¼¿¹¸Ð/@Ó%AÄ2Ç6Á6ÓJ�DØŸ;™;›=�DØ˜dŸo™oÑ-ð  $ D§I¡I¨d¯o©o¸cÑ.BÓ$CÑD˜ÜŸ=™=¨×)@Ñ)@ÀÓ)FÓG×NÑNÌuÓU�DØ )× 7Ñ 7Ó 9× CÑ C�IØ—L‘L¤§¡©9°T«?¸D¿J¹JÈTÏYÉYÔ!WÖXð
Yñ Ü!Ÿy™y¨Ó/‘Hä!Ÿy™y¬u¸3Ô?�HØ× Ñ   C¨Ö2ð+3ð. (ˆDŒOà�‰Ðr   c                óP  — |j                  dd«      }|j                  dd«      }|�|�| j                  j                  ||f   S |�| j                  j                  |   S |�| j                  j                  |   S | j                  €| j                  j                  S | j                  S )z>Return an Axes object based on existence of row/col variables.r#  Nr"  )rW   ÚfacetsÚ	axes_dictr=  )r   r:  r#  r"  s       r   Ú	_get_axeszVectorPlotter._get_axesõ  s˜   € à�l‰l˜5 $Ó'ˆØ�l‰l˜5 $Ó'ˆØˆ?˜s˜Ø—;‘;×(Ñ(¨#¨s¨Ñ4Ð4Øˆ_Ø—;‘;×(Ñ(¨Ñ-Ð-Øˆ_Ø—;‘;×(Ñ(¨Ñ-Ð-Ø�W‰Wˆ_Ø—;‘;—>‘>Ð!à—7‘7ˆNr   c                óÜ  — ddl m} t        ||«      rsd| _        || _        |j
                  j                  «       }|j                  �|j                  | j                  d<   |j                  �+|j                  | j                  d<   n|| _        d| _        |g}t        d«      j                  | j                  «      }|€g d¢}nt        |t        «      r|g}|D ],  }| j                  |   }||vsŒd|› d	|› d
|› d�}	t        |	«      ‚ dddœ}
i | _        |D �]é  }dddœ|   }t#        j$                  | j&                  j(                  |t*        ¬«      }t-        | j                  d|› �d«      }|du s||
|   k(  r t-        |d   |› d�«      |j.                  dd nÒ|du rP| j1                  «       D ]<  \  }}| j3                  |«      }t-        ||› d�«      |j.                  |j(                  <   Œ> n~t-        | j                  |› d�«      }t5        |«      D ]W  \  }}|dk(  r|dfnd|f}t-        | j                  j
                  |   |› d�«      }||j.                  | j&                  |   |k(  <   ŒY || j                   |<   | j&                  |   j7                  | j                   |   d¬«      }|D ]U  \  }}| j                  |   dk(  r-| j8                  |   r| j                  |   }nd}t;        ||«      }|j=                  |«       ŒW �Œì |€dx}}n	 |\  }}tA        d||f«      D ]9  \  }}|sŒ	|D ],  }t-        |d|› d�«      }|du r |dd¬«       Œ" |d|d¬«       Œ. Œ; | j                  j?                  dd«      dk(  r#|D ]  }|jB                  jE                  d«       Œ yy# t        $ rG | j                  j?                  d«      dk(  r|nd}| j                  j?                  d«      dk(  r|nd}Y ŒÜw xY w)a�  Associate the plotter with an Axes manager and initialize its units.

        Parameters
        ----------
        obj : :class:`matplotlib.axes.Axes` or :class:'FacetGrid`
            Structural object that we will eventually plot onto.
        allowed_types : str or list of str
            If provided, raise when either the x or y variable does not have
            one of the declared seaborn types.
        log_scale : bool, number, or pair of bools or numbers
            If not False, set the axes to use log scaling, with the given
            base or defaulting to 10. If a tuple, interpreted as separate
            arguments for the x and y axes.

        rk   )Ú	FacetGridNr"  r#  rá   ©rS   r   rT   r#   z variable is z, but one of z is requiredrÎ   rÍ   r4   )rø   rñ   rQ   Ú_shareTr   r3  FÚ_namesrC  rT   rS   Úset_ÚscaleÚlogrG  )Únonpositive)Úbaser^  )#ÚaxisgridrW  r<   r=  rS  ÚaxesÚflattenÚ	col_namesrÞ   Ú	row_namesr|   ÚintersectionrÖ   rï   r^   rp   r(  r@   rA   rV   rø   rö   rÕ   r0  r;  rU  rú   r,  rÓ   r{   Úupdate_unitsrW   r)   ÚyaxisÚset_inverted)r   r  Úallowed_typesÚ	log_scalerW  Úax_listÚaxis_variablesr×   rx   rt   Ú	facet_dimÚ	other_varr4  Úshare_stateÚ	axes_varsÚ	axes_datar=  rå   r	  ÚlevelÚidxr3  rN  Ú	seed_datarf   ÚscalexÚscaleyr\  Ú	set_scales                                r   Ú_attachzVectorPlotter._attach  s0  € õ* 	(Ü�c˜9Ô%ØˆDŒGØˆDŒKØ—h‘h×&Ñ&Ó(ˆGØ�}‰}Ð(Ø),¯©�—‘ Ñ&Ø�}‰}Ð(Ø),¯©�—‘ Ò&àˆDŒGØˆDŒKØ�eˆGô ˜T›×/Ñ/°·±Ó?ˆð Ð ÚB‰MÜ˜¤sÔ+Ø*˜OˆMà!ò 	%ˆCØ—~‘~ cÑ*ˆHØ˜}Ò,à˜3˜%˜}¨X¨J°mØ$�o \ð3ð ô   “nÐ$ð	%ð   eÑ,ˆ	àˆŒØ!ó ,	2ˆCØ!¨Ñ,¨SÑ1ˆIäŸ	™	¨¯©×(<Ñ(<À3ÌfÔUˆIÜ! $§+¡+°¸°u¨~¸tÓDˆKð
 ˜dÑ" k°Y¸yÑ5IÒ&IÜ#*¨7°1©:¸#¸¸d°|Ó#D�	—‘™aÑ ð  %Ñ'Ø04·±Ó0@ò SÑ,˜	 9Ø!Ÿ^™^¨IÓ6˜Ü9@ÀÈÀuÈDÀ\Ó9R˜	Ÿ™ i§o¡oÒ6ñSô $ D§K¡K°K°=ÀÐ1GÓH�EÜ$-¨eÓ$4ò S™˜˜5Ø(3°uÒ(<˜q !™fÀ1ÀaÀ&˜Ü& t§{¡{×'7Ñ'7¸Ñ'<ÀÀÀT¸lÓK˜ØNR˜	Ÿ™ d§n¡n°[Ñ&AÀUÑ&JÒKðSð $-ˆD�O‰O˜CÑ ð —n‘n SÑ)×1Ñ1°$·/±/À#Ñ2FÈUÐ1ÓSˆGØ(/ò 2Ñ$�	˜9Ø—>‘> #Ñ&¨-Ò7Ø×(Ñ(¨Ò-Ø $§¡°Ñ 4™à $˜Ü 1°)¸UÓ C�IØ×&Ñ& yÕ1ò2ðK,	2ðb ÐØ#Ð#ˆF‘VðVØ!*‘�˜ô ˜t f¨fÐ%5Ó6ò 	I‰KˆD�%ÚØ!ò I�BÜ '¨¨d°4°&¸Ð,>Ó ?�IØ ‘}Ù! %°VÖ<á! %¨eÀÖHñIð	Ið �>‰>×Ñ˜c 4Ó(¨MÒ9Øò ,�Ø—‘×%Ñ% dÕ+ñ,ð :øô ò VØ&*§n¡n×&8Ñ&8¸Ó&=ÀÒ&J™ÐPU�Ø&*§n¡n×&8Ñ&8¸Ó&=ÀÒ&J™ÐPU’ðVús   Ì	N ÎAO+Ï*O+c                óÔ  — | j                   €†| j                  j                  j                  D �cg c]  }t	        ||› d�«      ‘Œ }}|D �ch c]  }|j                  «       ’Œ }}t        |«      dkD  rd}t        |«      ‚|d   j                  «       }n't	        | j                   |› d�«      j                  «       }|j                  |j                  «       j                  fS c c}w c c}w )zDReturn a function implementing the scale transform (or its inverse).r3  rk   z=Cannot determine transform with mixed scales on faceted axes.r   )r=  rS  ra  r  rÕ   Ú	get_scaler'   ÚRuntimeErrorr½   r+  Úinverted)r   r3  r=  Ú	axis_listÚscalesrt   Útransform_objs          r   Ú_get_scale_transformsz#VectorPlotter._get_scale_transforms�  sÏ   € à�7‰7ˆ?Ø>B¿k¹k×>NÑ>N×>SÑ>SÖT¸œ ¨ v¨T ]Õ3ÐTˆIÐTØ3<Ö=¨4�d—n‘nÕ&Ð=ˆFÐ=Ü�6‹{˜QŠð V�Ü" 3Ó'Ð'Ø% a™L×6Ñ6Ó8‰Mô $ D§G¡G°¨v°T¨]Ó;×IÑIÓKˆMà×&Ñ&¨×(>Ñ(>Ó(@×(JÑ(JÐJÐJùò# UùÚ=s   ¯C ÁC%c                óz  — |j                  «       sMt        d„ |j                  «       D «       «      }|j                  | j                  j                  d|«      |¬«       |j                  «       sNt        d„ |j                  «       D «       «      }|j                  | j                  j                  d|«      |¬«       yy)zCAdd axis labels if not present, set visibility to match ticklabels.c              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wr   ©Úget_visible©rì   Úts     r   rí   z1VectorPlotter._add_axis_labels.<locals>.<genexpr>¬  ó   è ø€ ÒJ°˜AŸM™MŸOÑJùó   ‚r4   )Úvisiblec              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wr   rƒ  r…  s     r   rí   z1VectorPlotter._add_axis_labels.<locals>.<genexpr>¯  r‡  rˆ  rÍ   N)	Ú
get_xlabelr}   Úget_xticklabelsÚ
set_xlabelrÖ   rW   Ú
get_ylabelÚget_yticklabelsÚ
set_ylabel)r   r=  Ú	default_xÚ	default_yÚ	x_visibleÚ	y_visibles         r   Ú_add_axis_labelszVectorPlotter._add_axis_labels¥  s�   € ð �}‰}ŒÜÑJ°R×5GÑ5GÓ5IÔJÓJˆIØ�M‰M˜$Ÿ.™.×,Ñ,¨S°)Ó<ÀiˆMÔPØ�}‰}ŒÜÑJ°R×5GÑ5GÓ5IÔJÓJˆIØ�M‰M˜$Ÿ.™.×,Ñ,¨S°)Ó<ÀiˆMÕPð r   c                ó  ‡ ‡‡— ‰ j                   }t        |t        «      r|dvrd}t        |«      ‚|du rd}g Ši Š|€i n|j	                  «       }|€i n|j	                  «       }ˆ fd„dD «       D �ch c]  }|�|’Œ }	}t        |	«      dk7  rd	n|	j                  «       }t        d
dddd	d	¬«      }
ˆˆfd„}|€dddgddœ}|j                  «       D ]+  \  }}‰ j                  |||||
||j                  |«      «       Œ- i }g }|j                  dd
«      €|j                  d«       ‰D �]C  }|\  }}‰|   }i }g ‰ j                  ¢|¢|j                  «       D ��cg c]  }|D ]  }|‘Œ Œ c}}¢}|D ]  }||v sŒ||   ||<   Œ  |dd|iddi|¥|¥¤Ž}t        t        d«      r¢t        |t        j                  j                   «      r|j#                  |«       n}t        |t        j$                  j&                  «      r|j)                  |«       nGt        |t        j*                  j,                  «      r#|j/                  |«       n|j1                  |«       |||<   |j3                  |«       �ŒF |‰ _        |‰ _        |‰ _        yc c}w c c}}w )z>Add labeled artists to represent the different plot semantics.)ÚautoÚbriefÚfullz7`legend` must be 'auto', 'brief', 'full', or a boolean.Tr—  Nc              3  óV   •K  — | ]   }‰j                   j                  |d «      –— Œ" y ­wr   )rÖ   rW   )rì   ræ   r   s     €r   rí   z0VectorPlotter.add_legend_data.<locals>.<genexpr>Ç  s"   øè ø€ ÒK¨QˆT�^‰^×Ñ  4×(ÑKùs   ƒ&)rÐ   rk   r    FÚwr   )r‰  Úcolorrè   Ú	linewidthr³   r²   c                ó€   •— | |f}|‰v r ‰|   j                   di |¤Ž y ‰j                  |«       t        di |¤Ž‰|<   y )NrK   )Úupdater¾   rw   )rò   Úval_nameÚkwsr9   ÚkeysÚ
legend_kwss       €€r   rŸ  z-VectorPlotter.add_legend_data.<locals>.updateÏ  sG   ø€ à˜HÐ$ˆCØ�jÑ Ø&�
˜3‘×&Ñ&Ñ-¨Ó-à—‘˜CÔ Ü"&¡+¨¡+�
˜3’r   rœ  r�  rè   Úlabelz.2z3.5.0rK   )Úlegendr<   rï   r~   r   r'   Úpoprw   r¹   Ú_update_legend_datarW   Ú_legend_attributesr0   r   r†   ÚlinesÚLine2DÚadd_lineÚpatchesÚPatchÚ	add_patchÚcollectionsÚ
CollectionÚadd_collectionÚ
add_artistr¾   Úlegend_titleÚlegend_dataÚlegend_order)r   r=  ÚfuncÚ
common_kwsÚattrsÚsemantic_kwsÚ	verbosityrt   ÚtitleÚtitlesÚ	title_kwsrŸ  r×   rå   r´  rµ  r9   r3   r¤  r¡  Ú	level_kwsÚ	var_attrsrÄ   Ú	use_attrsÚartistr¢  r£  s   `                        @@r   Úadd_legend_datazVectorPlotter.add_legend_data²  sÁ  ú€ ð —K‘Kˆ	Ü�i¤Ô%¨)Ð;TÑ*TØKˆCÜ˜S“/Ð!Ø˜$ÑØˆIàˆØˆ
Ø%Ð-‘R°:·?±?Ó3Dˆ
Ø)Ð1‘r°|×7HÑ7HÓ7Jˆó LÐ2JÔKö
ØàÐ ò ð
ˆð 
ô
 ˜&“k QÒ&‘¨F¯J©J«LˆÜØ ¨°Q¸rÈ"ô
ˆ	õ	.ð ˆ=Ø#¨k¸3Ð-?È$ÑOˆEØŸ+™+›-ò 	‰JˆC�Ø×$Ñ$Ø˜˜Y¨¨y¸%À×AQÑAQÐRUÓAVõð	ð
 ˆØˆð �>‰>˜' 5Ó)Ð1Ø�N‰N˜7Ô#àó 	%ˆCà‰HˆAˆuØ˜S‘/ˆCØˆIðØ×(Ñ(ðàðð )5×(;Ñ(;Ó(=×T˜9È)ÒTÀ$’$ÐT�$ÓTðˆIð
 "ò 0�Ø˜3’;Ø&)¨$¡i�I˜d’Oð0ñ ÑT ÐT¨'°4Ð)S¸:Ð)SÈÐ)SÑTˆFÜ ¤ gÔ.Ü˜f¤c§i¡i×&6Ñ&6Ô7Ø—K‘K Õ'Ü ¬¯©×(9Ñ(9Ô:Ø—L‘L Õ(Ü ¬¯©×(BÑ(BÔCØ×%Ñ% fÕ-à—‘˜fÔ%Ø%ˆK˜ÑØ×Ñ Ö$ð1	%ð4 "ˆÔØ&ˆÔØ(ˆÕùò{
ùóR Us   Á0JÅJ
c           
     óX  — d}t        | d|› d�d«      }	|	€y|	j                  dk(  xr& |dk(  xs |dk(  xr t        |	j                  «      |kD  }
|
rÏt	        |	j
                  t        j                  j                  «      r!t        j                  j                  |¬«      }n t        j                  j                  |¬	«      }t        |	j                  «      t        |	j                  «      f}t        ||| j                  |   j!                  «       j"                  «      \  }}n|	j                  €g x}}n|	j                  x}}|sB| j$                  j'                  |d«      �& || j$                  |   d
f| j$                  |   fi |¤Ž |€i n|}t)        ||«      D ]‰  \  }}|€Œ	 |	|«      }t	        |t*        «      r|D �ci c]  }||“Œ }}n|�||i}|j-                  |j/                  «       D ��ci c]  \  }}||v sŒ|||   “Œ c}}«        || j$                  |   |fi |¤Ž Œ‹ yc c}w c c}}w )z1Generate legend tick values and formatted labels.r$   r3   rÜ   NrS   r˜  r—  )Únumticks)Únbinsr»  )rÕ   r   r'   r/   r<   rd   r†   r‚   ÚLogNormÚtickerÚ
LogLocatorÚMaxNLocatorr¥   r¦   r   rV   Úinfer_objectsrQ   rÖ   rW   r)   r=   rŸ  r¹   )r   rŸ  r×   rº  r»  r½  Ú
attr_namesÚother_propsÚbrief_ticksÚmapperr˜  ÚlocatorÚlimitsr/   Úformatted_levelsrr  Úformatted_levelrÄ   rñ   rD   ræ   s                        r   r§  z!VectorPlotter._update_legend_data  s!  € ð ˆÜ˜  3 % t˜}¨dÓ3ˆØˆ>Øà—‘ 9Ñ,ò 
Ø˜Ñ ò JØ˜VÑ#ÒH¬¨F¯M©MÓ(:¸[Ñ(Hð 	ñ Ü˜&Ÿ+™+¤s§z¡z×'9Ñ'9Ô:ÜŸ*™*×/Ñ/¸Ð/ÓE‘äŸ*™*×0Ñ0°{Ð0ÓC�Ü˜Ÿ™Ó'¬¨V¯]©]Ó);Ð;ˆFÜ'@Ø˜ §¡°Ñ!4×!BÑ!BÓ!D×!JÑ!Jó(Ñ$ˆFÑ$ð �]‰]Ð"Ø(*Ð*ˆFÑ%à(.¯©Ð5ˆFÐ%á˜Ÿ™×+Ñ+¨C°Ó6ÐBÙ�D—N‘N 3Ñ'¨Ð1°4·>±>À#Ñ3FÑTÈ)ÒTà'Ð/‘b°[ˆä&)¨&Ð2BÓ&Cò 	EÑ"ˆE�?ØÑ Ù˜e“}�Ü˜j¬$Ô/Ø3=Ö>¨4˜D $™JÐ>�DÑ>ØÐ+Ø&¨Ð-�DØ—‘°[×5FÑ5FÓ5H×W©T¨Q°ÈEÐUVÊJ˜Q  %¡™[ÓWÔXÙ�t—~‘~ cÑ*¨OÑD¸tÓDñ	Eùò ?ùó Xs   Æ9
H!Ç*H&Ç7H&c                ó   — t         ‚r   ©ÚNotImplementedError©r   r3  rB   rC   s       r   Úscale_nativezVectorPlotter.scale_native:  s
   € ô "Ð!r   c                ó   — t         ‚r   rÔ  rÖ  s       r   Úscale_numericzVectorPlotter.scale_numeric@  ó
   € ô
 "Ð!r   c                ó   — t         ‚r   rÔ  rÖ  s       r   Úscale_datetimezVectorPlotter.scale_datetimeG  rÚ  r   c                óÎ  — t        dddg|«       || j                  vr-d| j                  |<   d| j                  |<   d| j                  |<   | j                  |   dk(  r"| j                  j	                  |d¬	«      | _        | j                  |   j                  «       }|duxs |j                  j                  d
k(  | j                  |<   t        j                  t        ||«      |¬«      }|�#|j                  |«      }|j                  |«      }n*|j                  t        «      }|j                  t        «      }|| j                  |<   d| j                  |<   || j                  |<   | S )aš  
        Enforce categorical (fixed-scale) rules for the data on given axis.

        Parameters
        ----------
        axis : "x" or "y"
            Axis of the plot to operate on.
        order : list
            Order that unique values should appear in.
        formatter : callable
            Function mapping values to a string representation.

        Returns
        -------
        self

        r3  r4   rÍ   NrT   r    rS   Ú	mergesort)ÚkindÚcategoryrD  )r   rÖ   r^   rV   Úsort_valuesr�   rQ   rñ   rÓ   r@   ÚIndexr{   ÚmaprJ  rï   rÞ   )r   r3  rf   Ú	formatterÚcat_datas        r   Úscale_categoricalzVectorPlotter.scale_categoricalN  sL  € ôT 	˜  c 
¨DÔ1ð �t—~‘~Ñ%Ø#'ˆD�N‰N˜4Ñ Ø#0ˆD�N‰N˜4Ñ Ø#%ˆD�N‰N˜4Ñ ð �>‰>˜$Ñ 9Ò,Ø!Ÿ^™^×7Ñ7¸À;Ð7ÓOˆDŒNð —>‘> $Ñ'×.Ñ.Ó0ˆð #(¨tÐ"3Ò"X°x·~±~×7JÑ7JÈjÑ7Xˆ×Ñ˜$ÑÜ—‘Ô*¨8°UÓ;À$ÔGˆð Ð Ø—|‘| IÓ.ˆHØ—I‘I˜iÓ(‰Eà—‘¤sÓ+ˆHØ—L‘L¤Ó%ˆEð !&ˆ�‰˜Ñð  -ˆ�‰�tÑð  (ˆ�‰�tÑàˆr   r   r�   r¬   )NN)r    r    )rF   rG   rH   rI   rû   rù   r¢   r   ÚpropertyrÚ   rÞ   rÔ   rã   r  r  r  r;  r'  rU  rx  r€  r•  rÂ  r§  r×  rÙ  rÜ  ræ  rK   r   r   rÉ   rÉ   h  sú   „ Ù<ð ˜I¨jÀ:ñ€Nð $¨)Ñ4€NàÐà ¨Bó .ð" ñ6ó ð6ð ñ ó ð ð" %)°Bó ó:L$ó\ ó!ó"ð
 !ðu"à eØ 5°ôu"ðn ñ*ó ð*òXð$ Øó	G,òVKó,Qð CGóP)òd/Eòl"ò"ò"ô[r   rÉ   c                  ó,   ‡ — e Zd ZdZdZˆ fd„Zd„ Zˆ xZS )ÚVariableTypezØ
    Prevent comparisons elsewhere in the library from using the wrong name.

    Errors are simple assertions because users should not be able to trigger
    them. If that changes, they should be more verbose.

    rX  c                óN   •— || j                   v sJ |«       ‚t        ‰| �	  |«       y r   )ÚallowedrU   r   )r   rg   ri   s     €r   r   zVariableType.__init__·  s'   ø€ Ø�t—|‘|Ñ#Ð) TÓ)Ð#Ü‰Ñ˜Õr   c                óJ   — || j                   v sJ |«       ‚| j                  |k(  S r   )rë  rg   )r   Úothers     r   Ú__eq__zVariableType.__eq__»  s(   € Ø˜Ÿ™Ñ$Ð+ eÓ+Ð$Ø�y‰y˜EÑ!Ð!r   )rF   rG   rH   rI   rë  r   rî  r‘   r’   s   @r   ré  ré  ¬  s   ø„ ñð 3€Gôö"r   ré  c                ón  — t        j                  | «      } t        | j                  t         j                  «      rt        d«      S t        j                  | «      j                  «       rt        d«      S | j                  «       } t        j                  «       5  t        j                  dt        t        f¬«       	 t        j                  | ddg«      j                  «       rt        |«      cddd«       S 	 ddd«       t         j"                  j$                  j'                  | «      rt        d«      S t         j"                  j$                  j)                  | «      rt        d«      S d	„ } || «      rt        d«      S d
„ } || «      rt        d«      S t        d«      S # t         $ r Y Œ²w xY w# 1 sw Y   Œ·xY w)a+  
    Determine whether a vector contains numeric, categorical, or datetime data.

    This function differs from the pandas typing API in two ways:

    - Python sequences or object-typed PyData objects are considered numeric if
      all of their entries are numeric.
    - String or mixed-type data are considered categorical even if not
      explicitly represented as a :class:`pandas.api.types.CategoricalDtype`.

    Parameters
    ----------
    vector : :func:`pandas.Series`, :func:`numpy.ndarray`, or Python sequence
        Input data to test.
    boolean_type : 'numeric' or 'categorical'
        Type to use for vectors containing only 0s and 1s (and NAs).

    Returns
    -------
    var_type : 'numeric', 'categorical', or 'datetime'
        Name identifying the type of data in the vector.
    rT   rS   r@  )Úactionrà  r   rk   Nr   c                ó6   — | D ]  }t        |t        «      rŒ y y©NFT)r<   r
   ©r4   Úx_is     r   Úall_numericz"variable_type.<locals>.all_numeric  s#   € Øò 	ˆCÜ˜c¤6Õ*Ùð	ð r   c                óV   — | D ]$  }t        |t        t        j                  f«      rŒ$ y yrò  )r<   r   r>   Ú
datetime64ró  s     r   Úall_datetimez#variable_type.<locals>.all_datetime  s,   € Øò 	ˆCÜ˜c¤H¬b¯m©mÐ#<Õ=Ùð	ð r   )r@   rA   r<   rQ   ÚCategoricalDtyperé  rZ   r[   r�   r,   Úcatch_warningsÚsimplefilterÚFutureWarningÚDeprecationWarningr>   rH  rp   ÚapiÚtypesÚis_numeric_dtypeÚis_datetime64_dtype)Úvectorrâ   rõ  rø  s       r   rµ   rµ   À  sp  € ô. �Y‰Y�vÓ€Fô �&—,‘,¤× 3Ñ 3Ô4Ü˜MÓ*Ð*ô 
‡w�wˆvƒ×ÑÔÜ˜IÓ&Ð&ð �]‰]‹_€Fô 
×	 Ñ	 Ó	"ñ 
Ü×ÑØ¤}Ô6HÐ&Iõ	
ð	Ü�w‰w�v  1˜vÓ&×*Ñ*Ô,Ü# LÓ1÷
ñ 
ð
 -÷
ô 
‡v�v‡|�|×$Ñ$ VÔ,Ü˜IÓ&Ð&ä	‡v�v‡|�|×'Ñ'¨Ô/Ü˜JÓ'Ð'òñ �6ÔÜ˜IÓ&Ð&òñ �FÔÜ˜JÓ'Ð'ô ˜Ó&Ð&øôM ò 	ñ ð	ú÷
ð 
ús0   Â"F+Â:0FÃ4F+Æ	F(Æ%F+Æ'F(Æ(F+Æ+F4c                ó„  — | €dn
t        | «      }|€dn
t        |«      }d}d}| €bt        |«      j                  d«      r%t        j                  |j                  dd«      «       |r |dk7  rt        |j                  dd«      «      ‚y	|€bt        |«      j                  d
«      r%t        j                  |j                  dd	«      «       |r |dk7  rt        |j                  dd	«      «      ‚yt        |«      j                  d
«      s|d	k(  r#|r |dk7  rt        |j                  dd«      «      ‚y	t        |«      j                  d«      s|dk(  r#|r |dk7  rt        |j                  dd	«      «      ‚y|�dt        |«      › d�}t        |«      ‚|dk7  r|dk(  ry|dk7  r|dk(  ry	|dk(  r|dk7  ry|rd||fvrd}t        |«      ‚y	)aa  Determine how the plot should be oriented based on the data.

    For historical reasons, the convention is to call a plot "horizontally"
    or "vertically" oriented based on the axis representing its dependent
    variable. Practically, this is used when determining the axis for
    numerical aggregation.

    Parameters
    ----------
    x, y : Vector data or None
        Positional data vectors for the plot.
    orient : string or None
        Specified orientation. If not None, can be "x" or "y", or otherwise
        must start with "v" or "h".
    require_numeric : bool
        If set, raise when the implied dependent variable is not numeric.

    Returns
    -------
    orient : "x" or "y"

    Raises
    ------
    ValueError: When `orient` is an unknown string.
    TypeError: When dependent variable is not numeric, with `require_numeric`

    Nz.{} orientation requires numeric `{}` variable.z0{} orientation ignored with only `{}` specified.ÚhÚ
HorizontalrÍ   rS   ÚVerticalr4   ræ   z5`orient` must start with 'v' or 'h' or be None, but `z` was passed.rT   z7Neither the `x` nor `y` variable appears to be numeric.)	rµ   rï   Ú
startswithr,   r-   r   rp   Úreprr~   )	r4   rÍ   ÚorientÚrequire_numericÚx_typeÚy_typeÚnonnumeric_dv_errorÚsingle_var_warningrt   s	            r   Úinfer_orientr    sß  € ð: �Y‰T¤M°!Ó$4€FØ�Y‰T¤M°!Ó$4€FàJÐØKÐà€yÜˆv‹;×!Ñ! #Ô&Ü�M‰MÐ,×3Ñ3°LÀ#ÓFÔGÙ˜v¨Ò2ÜÐ/×6Ñ6°zÀ3ÓGÓHÐHØà	
ˆÜˆv‹;×!Ñ! #Ô&Ü�M‰MÐ,×3Ñ3°JÀÓDÔEÙ˜v¨Ò2ÜÐ/×6Ñ6°|ÀSÓIÓJÐJØä	ˆV‹×	Ñ	 Ô	$¨°#ªÙ˜v¨Ò2ÜÐ/×6Ñ6°zÀ3ÓGÓHÐHØä	ˆV‹×	Ñ	 Ô	$¨°#ªÙ˜v¨Ò2ÜÐ/×6Ñ6°|ÀSÓIÓJÐJØà	Ð	ðÜ˜“L�> ð0ð 	ô ˜‹oÐà	�=Ò	  V¨}Ò%<Øà	�9Ò	 ¨9Ò!4Øà	�9Ò	 ¨9Ò!4Øá	˜Y¨v°vÐ.>Ñ>ØGˆÜ˜‹nÐð r   c                óÀ  ‡— g d¢}d}t        |«      | k  rÅt        j                  ddg|«      }t        j                  ddg|«      }t        j                  t	        t        |«      dd ddd…   t        |«      dd «      Ž }|D ]B  }t        |«      Št        t        j                  ˆfd„|D «       Ž «      }|j                  |«       ŒD |dz  }t        |«      | k  rŒÅ|d|  S )	a²  Build an arbitrarily long list of unique dash styles for lines.

    Parameters
    ----------
    n : int
        Number of unique dash specs to generate.

    Returns
    -------
    dashes : list of strings or tuples
        Valid arguments for the ``dashes`` parameter on
        :class:`matplotlib.lines.Line2D`. The first spec is a solid
        line (``""``), the remainder are sequences of long and short
        dashes.

    )r    )rR   ç      ø?)rk   rk   )é   ç      ô?r  r  )é   rk   rk   rk   r  r  rR   rk   r¡   Nc              3  ó&   •K  — | ]  }|‰f–— Œ
 y ­wr   rK   )rì   ÚsegÚgaps     €r   rí   z unique_dashes.<locals>.<genexpr>š  s   øè ø€ Ò*J¸#¨C°¬:Ñ*Jùs   ƒ)	r'   r*   Úcombinations_with_replacementÚchainr)   r=   r¥   rŒ   r¾   )	Únr²   ÚpÚaÚbÚsegment_listÚsegmentsÚspecr  s	           @r   r¸   r¸   o  sé   ø€ ò$€Fð 	
€AÜ
ˆf‹+˜Š/ô ×3Ñ3°Q¸°I¸qÓAˆÜ×3Ñ3°Q¸°F¸AÓ>ˆô !—‘¬Ü�‹G�A�bˆM™$˜B˜$ÑÜ�‹G�A�bˆMó)
ð ˆð %ò 	 ˆHÜ�h“-ˆCÜœŸ™Ó*JÀÔ*JÐKÓLˆDØ�M‰M˜$Õð	 ð
 	
ˆQ‰ˆô% ˆf‹+˜‹/ð( �"�1ˆ:Ðr   c                óÀ   — g d¢}d}t        |«      | k  rFd|dz   z  dz  }|j                  |dz   d|f|dz   d|f|ddf|ddfg«       |dz  }t        |«      | k  rŒF|d|  S )aW  Build an arbitrarily long list of unique marker styles for points.

    Parameters
    ----------
    n : int
        Number of unique marker specs to generate.

    Returns
    -------
    markers : list of string or tuples
        Values for defining :class:`matplotlib.markers.MarkerStyle` objects.
        All markers will be filled.

    )	ÚoÚX)rR   r   é-   ÚP)rR   r   r   )rR   rk   r   ú^)rR   rk   r$  ræ   r  ih  rk   rž   r   N)r'   r&  )r  r±   rè   r  s       r   r·   r·   ¢  s’   € ò 
€Gð 	
€AÜ
ˆg‹,˜Ò
Ø�1�q‘5‰M˜AÑˆØ�‰Ø�‰U�A�qˆMØ�‰U�A�qˆMØ��1ˆIØ��1ˆIð	
ô 	ð 	
ˆQ‰ˆô ˆg‹,˜Ó
ð �2�Aˆ;Ðr   c                óf  — |€Jt        | d«      r| j                  }n	 | j                  j                  }t        t
        j                  |«      }t        |«      S # t        t        f$ rI t        j                  | «      j                  «       }t        | «      dk(  rt        j                  |«      }Y Œ|w xY w)aÔ  Return a list of unique data values.

    Determine an ordered list of levels in ``values``.

    Parameters
    ----------
    vector : list, array, Categorical, or Series
        Vector of "categorical" values
    order : list-like, optional
        Desired order of category levels to override the order determined
        from the ``values`` object.

    Returns
    -------
    order : list
        Ordered list of category levels not including null values.

    rý   rS   )rE  rý   Úcatrp   r   r@   rA   r‰   rµ   r>   rˆ   ÚfilterÚnotnullr=   )r  rf   s     r   r{   r{   Ð  s–   € ð& €}Ü�6˜<Ô(Ø×%Ñ%‰Eð+ØŸ
™
×-Ñ-�ô ”r—z‘z 5Ó)ˆÜ�‹;Ðøô œ~Ð.ò +äŸ	™	 &Ó)×0Ñ0Ó2�ä  Ó(¨IÒ5ÜŸG™G E›N�Eùð+ús   �A ÁAB0Â/B0)rS   )NNNTr   )+Ú
__future__r   r,   r*   r   r¯  r   Úcollections.abcr   r   r	   Únumbersr
   r   Únumpyr>   Úpandasr@   Ú
matplotlibr†   Úseaborn._core.datar   Úseaborn.palettesr   r   Úseaborn.utilsr   r   r   r   r   r   r   rM   r”   r®   rÉ   ré  rµ   r  r¸   r·   r{   rK   r   r   ú<module>r4     s«   ðÝ "Û Û Ý Ý "ß 7Ñ 7Ý Ý ã Û Û å '÷÷÷ ÷8=ñ 8=ôvO0�ô O0ôdZ6�/ô Z6ôz[�?ô [÷BAñ AôH"�:ô "ó(Y'óxPòf0òf+ô\!r   