Ë
    ªehÜ ã            #       ó´  — d dl mZ d dlmZ d dl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 d dlmZ d d	lmZ d dlmZ d d
lmZmZ d dlmZmZm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- d dl.m/Z/ d dl0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7m8Z8 g d¢Z9 G d„ de«      Z: G d„ de:«      Z; e<d—i d ed«      “d ed«      “d ed«      “d ed«      “d  ed!«      “d" ed#«      “d$ ed%«      “d& ed'«      “d( ed)«      “d* ed+«      “d, ed-«      “d. ed/«      “d0 ed1«      “d2 ed3«      “d4 ed5«      “d6 ed7«      “d8 ed9«      “d: ed;«      “d< ed=«      “d> ed?«      “d@ edA«      “dB edC«      “dD edE«      “dF edG«      “dH edI«      “dJ edK«      “dL edM«      “dN edO«      “dP edQ«      “dR edS«      “dT edU«      “dV edW«      “dX edY«      “dZ ed[«      “d\ ed]«      “d^ ed_«      “ŽZ=e=j}                  e8«       	 d˜ddddddddd`dadbdcd dddbddddedddbddfœdg„Z?  edh«      j€                  d—i e=¤Že?_A        	 d˜ddddddddd`dadidedcdbd ddbdjdkdldmdndeddddedbeeedddoœ!dp„ZB  edq«      j€                  d—i e=¤ŽeB_A        	 d˜ddddddddd`dadbdcd dddrdsdtdudadddeddbedddddvœdw„ZC  edx«      j€                  d—i e=¤ŽeC_A        	 d˜ddddddadeddddyed dddeddbddzœd{„ZD  ed|«      j€                  d—i e=¤ŽeD_A        	 d˜ddddddeddddydd dddeddbdudd}œd~„ZE  ed«      j€                  d—i e=¤ŽeE_A        	 d˜dddddd€d�d‚ddddddd`daddcdbd ddeddbd deeeddƒœd„„ZF  ed…«      j€                  d—i e=¤ŽeF_A        	 d˜dddddd€d�d‚ddddddeededdedd ddbdeeeedd†œd‡„ZG  edˆ«      j€                  d—i e=¤ŽeG_A        	 d˜ddddddddd`dadd‰dcdbd ddeddbddŠœd‹„ZH  edŒ«      j€                  d—i e=¤ŽeH_A        	 d˜dddddd�d€d�d‚dddddddddydmddeddddddbdadadadededŽœ!d�„ZI  ed�«      j€                  d—i e=¤ŽeI_A         G d‘„ d’«      ZJ ed“d”«      ZK G d•„ d–«      ZLy)™é    )Ú
namedtuple)ÚdedentN)Ú
rgb_to_hls)Úpartial)Únormalize_kwargs)ÚPatchCollection)ÚMarkerStyle)Ú	Rectangle)ÚdefaultÚ
deprecated)ÚVectorPlotterÚinfer_orientÚcategorical_order)ÚKDE)Úutils)Ú
desaturateÚ_check_argumentÚ_draw_figureÚ_default_colorÚ_get_patch_legend_artistÚ_get_transform_functionsÚ_scatter_legend_artistÚ_version_predates)Úgroupby_apply_include_groups)ÚEstimateAggregatorÚLetterValuesÚWeightedAggregator)Úlight_palette)Ú	FacetGridÚ_facet_docs)	ÚcatplotÚ	stripplotÚ	swarmplotÚboxplotÚ
violinplotÚ	boxenplotÚ	pointplotÚbarplotÚ	countplotc                   óì   ‡ — e Zd ZddddœZddiZdgZdi dddddfˆ fd	„	Zd"d
„Zd„ Zd„ Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd#d„Zd$d„Zed„ «       Zd„ Zd„ Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd „ Zd!„ Zˆ xZ S )%Ú_CategoricalPlotterz@columnsú@values©ÚxÚyÚhuer/   ÚcolorNFÚautoc                 óÌ  •— t         ‰| �  ||¬«       | j                  dk(  rñ|dv rí| j                  j	                  dddœ¬«      | _        t        | j                  «      }| j                  j                  dd «      }	| j                  j                  dd «      }
| j                  j                  dd «      }| j                  j                  dd «      }d|v r|	| j                  d<   || j                  d<   d|v r|
| j                  d<   || j                  d<   | j                  dk(  rHd| j                  v r:|�8| j                  j                  dd	¬
«       | j                  j                  d«       t        | j                  j                  dd «      | j                  j                  dd «      |d¬«      | _        || _        | j                  sy | j                  | j                  vrKd | j                  | j                  <   d| j                  | j                  <   d| j                  | j                  <   t        | j                  | j                     |«      }|| j                   | j                  <   y )N)ÚdataÚ	variablesÚwide)Úhr/   r/   r.   ©r.   r/   ©Úcolumnsr0   é   ©ÚaxisF)r.   r/   ÚorientÚrequire_numericÚcategoricalÚ )ÚsuperÚ__init__Úinput_formatÚ	plot_dataÚrenameÚsetr5   ÚpopÚ	var_typesÚdropr   Úgetr>   ÚlegendÚhas_xy_datar   Ú
var_levels)Úselfr4   r5   Úorderr>   r?   r1   rL   Úorig_variablesÚorig_xÚorig_yÚorig_x_typeÚorig_y_typeÚ
cat_levelsÚ	__class__s                 €úQ/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/seaborn/categorical.pyrC   z_CategoricalPlotter.__init__8   s  ø€ ô 	‰Ñ˜d¨iÐÔ8ð ×Ñ Ò&¨6°ZÑ+?Ø!Ÿ^™^×2Ñ2ÀÈ3Ñ;OÐ2ÓPˆDŒNÜ  §¡Ó0ˆNØ—^‘^×'Ñ'¨¨TÓ2ˆFØ—^‘^×'Ñ'¨¨TÓ2ˆFØŸ.™.×,Ñ,¨S°$Ó7ˆKØŸ.™.×,Ñ,¨S°$Ó7ˆKØ�nÑ$Ø&,�—‘˜sÑ#Ø&1�—‘˜sÑ#Ø�nÑ$Ø&,�—‘˜sÑ#Ø&1�—‘˜sÑ#ð ×Ñ Ò'Ø˜Ÿ™Ñ'ØÐ!à�N‰N×Ñ ¨AÐÔ.Ø�N‰N×Ñ˜uÔ%ô #Ø�n‰n× Ñ   dÓ+Ø�n‰n× Ñ   dÓ+ØØ!ô	
ˆŒð ˆŒð ×ÒØð
 �;‰;˜dŸn™nÑ,Ø*.ˆD�N‰N˜4Ÿ;™;Ñ'Ø*7ˆD�N‰N˜4Ÿ;™;Ñ'Ø*,ˆD�N‰N˜4Ÿ;™;Ñ'ô ' t§~¡~°d·k±kÑ'BÀEÓJˆ
Ø'1ˆ�‰˜Ÿ™Ò$ó    c                 ó,  — |du xs |du}|rÈd| j                   vrº|r¸d| _        | j                  | j                     | j                  d<   | j                   | j                     | j                   d<   d| j                  d<   | j
                  | j                     }t        |t        «      r||j                  «       D ��ci c]  \  }}t        |«      |“Œ }}}nOd| j                   v r8| j                  d   | j                  | j                     k(  j                  «       }nd}|| _        d| j                   v rZ|€X|�Vt        |t        «      st        j                  j                  |«      }d|› �}d|› d�}	t        j                  |	t         d	¬
«       ||fS c c}}w )a  Implement backwards compatibility for hue parametrization.

        Note: the force_hue parameter is used so that functions can be shown to
        pass existing tests during refactoring and then tested for new behavior.
        It can be removed after completion of the work.

        Nr0   Tr@   Fzdark:zf

Setting a gradient palette using color= is deprecated and will be removed in v0.14.0. Set `palette='z'` for the same effect.
é   ©Ú
stacklevel)r5   Ú_redundant_huerE   r>   rI   rN   Ú
isinstanceÚdictÚitemsÚstrÚallÚmplÚcolorsÚto_hexÚwarningsÚwarnÚFutureWarning)
rO   r1   ÚpaletteÚ	hue_orderÚ	force_hueÚdefault_behaviorÚkÚvÚ	redundantÚmsgs
             rX   Ú_hue_backcompatz#_CategoricalPlotter._hue_backcompat†   sw  € ð$ ! D˜=Ò?¨G¸4Ð,?ÐÙ˜ d§n¡nÑ4Ñ9IØ"&ˆDÔØ$(§N¡N°4·;±;Ñ$?ˆD�N‰N˜5Ñ!Ø$(§N¡N°4·;±;Ñ$?ˆD�N‰N˜5Ñ!Ø$1ˆD�N‰N˜5Ñ!ØŸ™¨¯©Ñ4ˆIô ˜'¤4Ô(Ø18·±³×A©¨¨Aœ3˜q›6 1™9ÐA�ÒAð ˜Ÿ™Ñ&Ø!Ÿ^™^¨EÑ2°d·n±nÀTÇ[Á[Ñ6QÑQ×VÑVÓX‘	à!�	Ø"+ˆDÔð
 �D—N‘NÑ" w ¸5Ð;LÜ˜e¤SÔ)ÜŸ
™
×)Ñ)¨%Ó0�Ø˜e˜W�oˆGð5Ø5<°IÐ=VðXð ô �M‰M˜#œ}¸Õ;à˜	Ð!Ð!ùó- Bs   Â;Fc                 ó$  — d| j                   v�r |�þd| j                  › d�}t        j                  |t        d¬«       d| _        | j                  | j                     | j                  d<   | j                   j                  | j                  «      | j                   d<   | j                  j                  | j                  «      | j                  d<   | j                  j                  | j                  «      }| j                  j                  dd«       |S )z?Provide one cycle where palette= implies hue= when not providedr0   Nzf

Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `z@` variable to `hue` and set `legend=False` for the same effect.
r[   r\   F)r5   r>   rg   rh   ri   rL   rE   rK   rI   rN   Ú_var_levelsrH   )rO   rj   rk   rq   s       rX   Ú_palette_without_hue_backcompatz3_CategoricalPlotter._palette_without_hue_backcompat»   sÝ   € à˜Ÿ™Ò&¨7Ð+>ð?Ø?C¿{¹{¸mð LIðIð ô
 �M‰M˜#œ}¸Õ;àˆDŒKØ$(§N¡N°4·;±;Ñ$?ˆD�N‰N˜5Ñ!Ø$(§N¡N×$6Ñ$6°t·{±{Ó$CˆD�N‰N˜5Ñ!Ø$(§N¡N×$6Ñ$6°t·{±{Ó$CˆD�N‰N˜5Ñ!àŸ™×+Ñ+¨D¯K©KÓ8ˆIØ×Ñ× Ñ  ¨Ô-àÐrY   c                 ó4  — |t         urPt        j                  d   dz  |z  }|dz  }|dz  }d}t        j                  |d¬«       |j                  |||¬«       |t         ur8d	}|s|d
z  }|j                  d¬«       |dz  }t        j                  |d¬«       yy)zGProvide two cycles where scale= and join= work, but redirect to kwargs.úlines.linewidthçÍÌÌÌÌÌü?ç      è?é   zÆ

The `scale` parameter is deprecated and will be removed in v0.15.0. You can now control the size of each plot element using matplotlib `Line2D` parameters (e.g., `linewidth`, `markersize`, etc.).
r[   r\   )Ú	linewidthÚmarkeredgewidthÚ
markersizezD

The `join` parameter is deprecated and will be removed in v0.15.0.z@ You can remove the line between points with `linestyle='none'`.rA   )Ú	linestyleú
N)r   rd   ÚrcParamsrg   rh   Úupdate)rO   ÚscaleÚjoinÚkwargsÚlwÚmewÚmsrq   s           rX   Ú_point_kwargs_backcompatz,_CategoricalPlotter._point_kwargs_backcompatÏ   s²   € àœ
Ñ"Ü—‘Ð/Ñ0°3Ñ6¸Ñ>ˆBØ�s‘(ˆCØ�a‘ˆBðð ô �M‰M˜#¨!Õ,Ø�M‰M B¸ÈˆMÔKà”zÑ!ðUð ñ ØØVñ�ð —‘¨�Ô+Ø�4‰KˆCÜ�M‰M˜#¨!Ö,ð "rY   c                 ó†   ‡— ˆfd„}|�
 |dd|«        |dd|«       |€ d}d}t        j                  |t        d¬	«       ‰|fS )
zFProvide two cycles where existing signature-level err_kws are handled.c                 ó~   •— |t         u ry d|› d|›d�}d| › d|› d�}t        j                  |t        d¬«       |‰|<   y )	Nz
err_kws={'z': ú}z

The `zA` parameter is deprecated. And will be removed in v0.15.0. Pass `z` instead.
é   r\   ©r   rg   rh   ri   )ÚnameÚkeyÚvalÚsuggestrq   Úerr_kwss        €rX   Údeprecate_err_paramzD_CategoricalPlotter._err_kws_backcompat.<locals>.deprecate_err_paramï   sZ   ø€ Ø”jÑ ØØ# C 5¨¨C¨7°"Ð5ˆGà˜D˜6ð "%Ø%, I¨\ð;ð ô �M‰M˜#œ}¸Õ;ØˆG�CŠLrY   Úerrcolorr1   Úerrwidthr{   r   zi

Passing `capsize=None` is deprecated and will be removed in v0.15.0. Pass `capsize=0` to disable caps.
r[   r\   )rg   rh   ri   )rO   r’   r”   r•   Úcapsizer“   rq   s    `     rX   Ú_err_kws_backcompatz'_CategoricalPlotter._err_kws_backcompatí   sZ   ø€ ô		ð ÐÙ 
¨G°XÔ>Ù˜J¨°XÔ>àˆ?ØˆGðBð ô �M‰M˜#œ}¸Õ;à˜ÐÐrY   c                 ó¼   — |t         ur$|}d|›d�}t        j                  |t        d¬«       |t         ur%|}d| › d�}t        j                  |t        d¬«       ||fS )ú1Provide two cycles of backcompat for scale kwargsz\

The `scale` parameter has been renamed and will be removed in v0.15.0. Pass `density_norm=z` for the same effect.r[   r\   z`

The `scale_hue` parameter has been replaced and will be removed in v0.15.0. Pass `common_norm=r�   )rO   r‚   Ú	scale_hueÚdensity_normÚcommon_normrq   s         rX   Ú_violin_scale_backcompatz,_CategoricalPlotter._violin_scale_backcompat  s}   € àœ
Ñ"Ø ˆLð2Ø27°Ð:PðRð ô �M‰M˜#œ}¸Õ;àœJÑ&Ø#ˆKð1Ø5>°°Ð?UðWð ô �M‰M˜#œ}¸Õ;à˜[Ð(Ð(rY   c                 óp   — |t         ur-|}t        d|›d�«      }t        j                  |t        d¬«       |S )zGProvide two cycles of backcompat for violin bandwidth parameterization.z{

                The `bw` parameter is deprecated in favor of `bw_method`/`bw_adjust`.
                Setting `bw_method=zŽ`, but please see docs for the new parameters
                and update your code. This will become an error in seaborn v0.15.0.
            r[   r\   )r   r   rg   rh   ri   )rO   ÚbwÚ	bw_methodrq   s       rX   Ú_violin_bw_backcompatz)_CategoricalPlotter._violin_bw_backcompat  sE   € à”ZÑØˆIÜð $à$& 6ð *ðó ˆCô
 �M‰M˜#œ}¸Õ;ØÐrY   c                 ó|   — |t         ur3|}d|›�}|dk(  r|dz  }n|dz  }t        j                  |t        d¬«       |S )r™   zl

The `scale` parameter has been renamed to `width_method` and will be removed in v0.15. Pass `width_method=Úareaz<, but note that the result for 'area' will appear different.z for the same effect.r[   r\   r�   )rO   r‚   Úwidth_methodrq   s       rX   Ú_boxen_scale_backcompatz+_CategoricalPlotter._boxen_scale_backcompat(  sZ   € àœ
Ñ"Ø ˆLð@Ø@E¸yðJð ð ˜ŠØÐUÑU‘àÐ.Ñ.�Ü�M‰M˜#œ}¸Õ;àÐrY   c                 óú  — |dk(  r!d}t        j                  |t        d¬«       d}n|�|t        u rd}|dk7  r|S |j                  €$|€yt
        j                  j                  |«      g}nD|j                  j                  «       D �cg c]!  }t
        j                  j                  |«      ‘Œ# }}t        j                  |d¬«      }|D �cg c]  }t        |dd Ž d	   ‘Œ }	}t        |	«      d
z  }
|
|
|
fS c c}w c c}w )zBAllow a color to be set automatically using a basis of comparison.ÚgrayzkUse "auto" to set automatic grayscale colors. From v0.14.0, "gray" will default to matplotlib's definition.r[   r\   r2   Nr   r<   r;   g333333ã?)rg   rh   ri   r   Úlookup_tablerd   re   Úto_rgbÚvaluesÚnpÚuniquer   Úmin)rO   r1   Ú
base_colorÚhue_maprq   ÚbasisÚcÚunique_colorsÚrgbÚ
light_valsÚlums              rX   Ú_complement_colorz%_CategoricalPlotter._complement_color8  sû   € à�FŠ?ðCð ô �M‰M˜#œ}¸Õ;Ø‰EØˆ]˜e¤wÑ.ØˆEà�FŠ?ØˆLà×ÑÐ'ØÐ!ØÜ—Z‘Z×&Ñ& zÓ2Ð3‰Eà3:×3GÑ3G×3NÑ3NÓ3PÖQ¨a”S—Z‘Z×&Ñ& qÕ)ÐQˆEÐQÜŸ	™	 %¨aÔ0ˆØ9FÖG°#”j # b q 'Ð*¨1Ó-ÐGˆ
ÐGÜ�*‹o Ñ"ˆØ�S˜#ˆÐùò	 RùâGs   Â&C3Ã	C8c                 ó&  — |t         u r|j                  ||«      }d| j                  v rY| j                  j                  }t        |t        «      r!t        ||«      D ��ci c]  \  }}||“Œ
 }}}|S |D �ci c]  }||“Œ }}|S d|i}|S c c}}w c c}w )zFSupport pointplot behavior of modifying the marker/linestyle with hue.r0   N)r   rH   r5   Ú_hue_mapÚlevelsr_   ÚlistÚzip)	rO   rŽ   ÚvalueÚfallbackÚplot_kwsr¹   rn   ro   Úmappings	            rX   Ú_map_prop_with_huez&_CategoricalPlotter._map_prop_with_hueR  s¡   € à”GÑØ—L‘L  xÓ0ˆEà�D—N‘NÑ"Ø—]‘]×)Ñ)ˆFÜ˜%¤Ô&Ü,/°¸Ó,>×?¡D A q˜1˜a™4Ð?�Ñ?ð ˆð	 .4Ö4¨˜1˜e™8Ð4�Ð4ð ˆð ˜U�mˆGàˆùó @ùâ4s   ÁBÁ4
Bc           	      ón  — | j                   |   dk7  ry| j                  |   j                  ryt         t	        |d|› d�«      «       «      }|dk(  r3|j
                  j                  d«       |j                  d|dz
  d¬	«       y|j                  j                  d«       |j                  |dz
  dd¬	«       y)
z0Set ticks and limits for a categorical variable.r@   NÚget_Úticksr.   Fg      à¿ç      à?)r2   )
rI   rE   ÚemptyÚlenÚgetattrÚxaxisÚgridÚset_xlimÚyaxisÚset_ylim)rO   Úaxr=   Úns       rX   Ú_adjust_cat_axisz$_CategoricalPlotter._adjust_cat_axisb  s¤   € ð �>‰>˜$Ñ =Ò0Øð
 �>‰>˜$Ñ×%Ò%Øô Ð/”˜˜d 4 &¨Ð.Ó/Ó1Ó2ˆà�3Š;Ø�H‰H�M‰M˜%Ô Ø�K‰K˜˜Q ™V¨$ˆKÕ/à�H‰H�M‰M˜%Ô à�K‰K˜˜B™ ¨$ˆKÕ/rY   c                 ó*  — t        | j                  ddht        | j                  «      z  «      }d| j                  v rW| j                  |   j                  «       }| j                  g |¢d‘   j                  «       }|j                  |j                  k7  S y)z3Return True when use of `hue` would cause overlaps.ÚcolÚrowr0   F)rº   r>   rG   r5   rE   Úvalue_countsÚsize)rO   Úgroupersr>   Úpaireds       rX   Ú_dodge_neededz!_CategoricalPlotter._dodge_needed�  s€   € ä˜Ÿ™ e¨UÐ3´c¸$¿.¹.Ó6IÑIÓJˆØ�D—N‘NÑ"Ø—^‘^ HÑ-×:Ñ:Ó<ˆFØ—^‘^Ð$6 hÐ$6°Ð$6Ñ7×DÑDÓFˆFØ—;‘; &§+¡+Ñ-Ð-ØrY   c                 ó6  — d| j                   vry| j                  j                  j                  |d   «      }t	        | j                  j                  «      }|dxx   |z  cc<   |d   |z  }|d   |z  |d   dz  z   |dz  z
  }|| j
                  xx   |z  cc<   y)z0Apply a dodge transform to coordinates in place.r0   NÚwidthrz   )r5   r¸   r¹   ÚindexrÆ   r>   )rO   Úkeysr4   Úhue_idxrÎ   Ú
full_widthÚoffsets          rX   Ú_dodgez_CategoricalPlotter._dodgeŠ  sš   € à˜Ÿ™Ñ&ð Ø—-‘-×&Ñ&×,Ñ,¨T°%©[Ó9ˆÜ�—‘×$Ñ$Ó%ˆØˆW‹˜Ñ‹à˜'‘] QÑ&ˆ
Ø�g‘ Ñ(¨4°©=¸1Ñ+<Ñ<¸zÈA¹~ÑMˆØˆT�[‰[Ó˜VÑ#ÔrY   c                 ó  — |D ]…  }t        ||d   «      \  }}|| j                  k(  rBd|v r>|d   dz  } |||   |z
  «      |d<    |||   |z   «      |d   j                  «       z
  |d<   dD ]  }|› |› �x}	|v sŒ |||	   «      ||	<   Œ Œ‡ y)z=Undo scaling after computation so data are plotted correctly.r   rÙ   rz   Úedge)rA   r­   ÚmaxN)r   r>   Úto_numpy)
rO   rÍ   r4   ÚvarsÚvarÚ_ÚinvÚhwÚsufrÑ   s
             rX   Ú_invert_scalez!_CategoricalPlotter._invert_scale™  s¸   € àò 	/ˆCÜ-¨b°#°a±&Ó9‰FˆAˆsØ�d—k‘kÒ! g°¡oØ˜'‘] QÑ&�Ù" 4¨¡9¨r¡>Ó2��V‘Ù # D¨¡I°¡NÓ 3°d¸6±l×6KÑ6KÓ6MÑ M��W‘Ø)ò /�Ø!˜U 3 %˜=Ð(�C¨TÒ1Ù # D¨¡I£�D˜’Iñ/ñ	/rY   c                 ó  — | j                   dk(  r| j                   xr | j                  dk7  }nt        | j                   «      }|rH| j	                  ||||¬«       |j                  «       \  }}|r|j                  | j                  ¬«       y y y )Nr2   r6   )Úsemantic_kws)Útitle)rL   r^   rD   ÚboolÚadd_legend_dataÚget_legend_handles_labelsÚlegend_title)rO   rÍ   ÚfuncÚ
common_kwsrì   Úshow_legendÚhandlesræ   s           rX   Ú_configure_legendz%_CategoricalPlotter._configure_legend¥  s‡   € Ø�;‰;˜&Ò Ø"×1Ñ1Ð1ÒQ°d×6GÑ6GÈ6Ñ6Q‰Kä˜tŸ{™{Ó+ˆKÙØ× Ñ   T¨:ÀLÐ ÔQØ×5Ñ5Ó7‰JˆG�QÙØ—	‘	 × 1Ñ 1�	Õ2ð ð rY   c                 ó  — | j                   | j                     dk(  ryt        j                  | j                  | j                     «      }t        |«      dkD  r*t        j                  t        j                  |«      «      }|S d}|S )zCReturn unit of width separating categories on native numeric scale.r@   r;   )rI   r>   r«   r¬   Ú	comp_datarÆ   ÚnanminÚdiff)rO   Úunique_valuesÚnative_widths      rX   Ú_native_widthz!_CategoricalPlotter._native_width°  sr   € ð �>‰>˜$Ÿ+™+Ñ&¨-Ò7Øô Ÿ	™	 $§.¡.°·±Ñ"=Ó>ˆÜˆ}Ó Ò!ÜŸ9™9¤R§W¡W¨]Ó%;Ó<ˆLð Ðð ˆLØÐrY   c                 ó&  — d}d| j                   v r€| j                  j                  �jt        | j                  j                  «      }|r4||z  }t	        j
                  d||z
  |«      }||j                  «       z  }|S t	        j                  |«      }|S )z3Return offsets for each hue level for dodged plots.Nr0   r   )r5   r¸   r¹   rÆ   r«   ÚlinspaceÚmeanÚzeros)rO   rÙ   ÚdodgeÚoffsetsÚn_levelsÚ
each_widths         rX   Ú_nested_offsetsz#_CategoricalPlotter._nested_offsets¿  s†   € àˆØ�D—N‘NÑ" t§}¡}×';Ñ';Ð'GÜ˜4Ÿ=™=×/Ñ/Ó0ˆHÙØ" XÑ-�
ÜŸ+™+ a¨°Ñ);¸XÓF�Ø˜7Ÿ<™<›>Ñ)�ð ˆô Ÿ(™( 8Ó,�ØˆrY   c                 óš  — d| j                   z  }| j                  ||«      }|du rd}nt        |«      }d| j                  v r:|r8| j                  j
                  �"|t        | j                  j
                  «      z  }|| j                   z  }t        t        j                  j                  | |­¬«      }| j                  g}	|r|	j                  d«       | j                  }
dx}}d|v r.t        |d   «      j                  «       s|j!                  dd «       | j#                  |	dd¬	«      D �]  \  }}| j%                  |«      }
|�H|dk7  j'                  «       r5||d   j)                  | j                  j
                  j*                  «         }t        |«      d
kD  r |t        |«      ¬«      nd}|| j                     |z   |z   }||| j                  <   | j-                  |
|«        |
j.                  |d   |d   fd|i|¤Ž}d| j                  v sŒå|j1                  | j	                  |d   «      «       �Œ
 | j3                  |
t4        |¬«       y )Nçš™™™™™é?Tgš™™™™™¹?r0   )ÚlowÚhighr   ÚmarkerÚ	edgecolor©Úfrom_comp_dataÚallow_emptyr;   )rÔ   r.   r/   r1   )ró   )rý   r  Úfloatr5   r¸   r¹   rÆ   r   r«   ÚrandomÚuniformr>   ÚappendrÍ   r	   Ú	is_filledrH   Ú	iter_dataÚ	_get_axesÚanyÚmaprÚ   rê   ÚscatterÚset_facecolorsrö   r   )rO   Újitterr  r1   r¾   rÙ   r  ÚjlimÚjittererÚ	iter_varsrÍ   Ú
dodge_moveÚjitter_moveÚsub_varsÚsub_dataÚadjusted_dataÚpointss                    rX   Úplot_stripsz_CategoricalPlotter.plot_stripsÒ  s'  € ð �T×'Ñ'Ñ'ˆØ×&Ñ& u¨eÓ4ˆà�T‰>Ø‰Dä˜“=ˆDØ�D—N‘NÑ"¡u°·±×1EÑ1EÐ1QØ”C˜Ÿ™×,Ñ,Ó-Ñ-ˆDØ�×"Ñ"Ñ"ˆÜœ2Ÿ9™9×,Ñ,°4°%¸t¸eÔDˆà—[‘[�Mˆ	ÙØ×Ñ˜UÔ#à�W‰WˆØ#$Ð$ˆ
�[à�xÑ¬°H¸XÑ4FÓ(G×(QÑ(QÔ(SØ�L‰L˜ dÔ+à"&§.¡.°Ø@DØ=Að #1ó #Có 	FÑˆH�hð —‘ Ó)ˆBàÐ"¨°1©×'9Ñ'9Ô';Ø$ X¨e¡_×%8Ñ%8¸¿¹×9MÑ9M×9SÑ9SÓ%TÑU�
ä:=¸h»-È!Ò:K™(¬¨H«Õ6ÐQRˆKà$ T§[¡[Ñ1°JÑ>ÀÑLˆMØ$1ˆH�T—[‘[Ñ!Ø×Ñ˜r 8Ô,à�R—Z‘Z ¨¡¨x¸©}ÑVÀEÐVÈXÑVˆFØ˜Ÿ™Ò&Ø×%Ñ% d§m¡m°H¸U±OÓ&DÖEð#	Fð& 	×Ñ˜rÔ#9ÀhÐÕOrY   c                 ó�  •‡ ‡‡— d‰ j                   z  }‰ j                  ||«      }‰ j                  g}|r|j                  d«       ‰ j                  Ši }d}	d|v r.t        |d   «      j                  «       s|j                  dd «       ‰ j                  |dd¬«      D �]  \  }
}‰ j                  |
«      Š|�5||d   j                  ‰ j                  j                  j                  «         }	|j                  s|‰ j                     |	z   |‰ j                  <   ‰ j                  ‰|«        ‰j                   |d   |d	   fd
|i|¤Ž}d‰ j"                  v r#|j%                  ‰ j                  |d   «      «       |j                  rŒæ||‰|‰ j                     j&                  d   f<   �Œ	 t)        |‰ j                  |¬«      Š|j+                  «       D ]J  \  \  Š}}|j-                  «       j.                  d   dkD  sŒ*|dœˆˆˆˆ fd„
}|j1                  |«      |_        ŒL t5        ‰j6                  «       ‰ j9                  ‰t:        |«       y )Nr  r0   r   r  r  Tr  r.   r/   r1   )rÙ   r>   Úwarn_threshr;   )Úcenterc                óp  •—  ‰| |«       ‰	j                   dk(  rd}‰j                  «       }n‰j                  «       }d}‰	j                  ‰	j                      dk(  }‰j	                  | j                  ‰j                  «      «       |s|s|r‰j                  ||¬«       t        | j                  | �+  |«       y )Nr/   Fr@   ©ÚscalexÚscaley)r>   Úget_autoscaley_onÚget_autoscalex_onrI   Úupdate_datalimÚget_datalimÚ	transDataÚautoscale_viewrB   rW   Údraw)
r$  Úrendererr(  r+  r,  Úfixed_scalerW   rÍ   ÚbeeswarmrO   s
         €€€€rX   r3  z-_CategoricalPlotter.plot_swarms.<locals>.draw4  s¤   ø€ á˜V VÔ,à—{‘{ cÒ)Ø!&˜Ø!#×!5Ñ!5Ó!7™à!#×!5Ñ!5Ó!7˜Ø!&˜ð #'§.¡.°·±Ñ"=ÀÑ"N�KØ×%Ñ% f×&8Ñ&8¸¿¹Ó&FÔGÙ&©F±fØ×)Ñ)°ÀÐ)ÔGä˜&×*Ñ*¨FÑ8¸ÕBrY   )rý   r  r>   r  rÍ   r	   r  rH   r  r  r  r¸   r¹   rÚ   rÅ   rê   r  r5   r  ÚilocÚBeeswarmra   Úget_offsetsÚshapeÚ__get__r3  r   Úfigurerö   r   )rO   r  r1   r'  r¾   rÙ   r  r  Úpoint_collectionsr  r!  r"  r$  r(  r3  rÍ   r6  rW   s   `              @@€rX   Úplot_swarmsz_CategoricalPlotter.plot_swarms  s*  û€ ð �T×'Ñ'Ñ'ˆØ×&Ñ& u¨eÓ4ˆà—[‘[�Mˆ	ÙØ×Ñ˜UÔ#à�W‰WˆØÐØˆ
à�xÑ¬°H¸XÑ4FÓ(G×(QÑ(QÔ(SØ�L‰L˜ dÔ+à"&§.¡.°Ø@DØ=Að #1ó #Có 	PÑˆH�hð —‘ Ó)ˆBàÐ"Ø$ X¨e¡_×%8Ñ%8¸¿¹×9MÑ9M×9SÑ9SÓ%TÑU�
à—>’>Ø(0°·±Ñ(=À
Ñ(J�˜Ÿ™Ñ%à×Ñ˜r 8Ô,à�R—Z‘Z ¨¡¨x¸©}ÑVÀEÐVÈXÑVˆFØ˜Ÿ™Ñ&Ø×%Ñ% d§m¡m°H¸U±OÓ&DÔEà—>“>ØIOÐ! 2 x°·±Ñ'<×'AÑ'AÀ!Ñ'DÐ"EÓFð'	Pô*  %°·±ÈÔUˆØ$5×$;Ñ$;Ó$=ò 	3Ñ ‰LˆR�˜&Ø×!Ñ!Ó#×)Ñ)¨!Ñ,¨qÓ0à5;÷ Cñ Cð, #Ÿl™l¨6Ó2�•ð3	3ô6 	�R—Y‘YÔØ×Ñ˜rÔ#9¸8ÕDrY   c                 óx  ‡
— dg}dddœ| j                      }t        j                  j                  fˆ
fd„	}|s|€t        j                  d   }‰
j                  dt        j                  d   «      }‰
j                  d	‰
j                  d
d«      «       |rt        j                  j                  nt        j                  j                  } |d|«       |d«       |d«       |d«       |d«      dœ}|d   j                  dd«       |d   j                  dd«       |d   j                  d|	«       | j                  }| j                  |dd¬«      D �]Å  \  }}| j                  |«      }|j                  | j                   «      |   }t        || j                      j                  «       j                  t         «      «      }|D ��cg c]  \  }}|j#                  «       ‘Œ }}}t%        j&                  t        j(                  j+                  |||¬«      «      }|| j,                  z  }t%        j&                  | j                   |d|i«      }|r| j/                  ||«       |r|dxx   d|z
  z  cc<   ‰
j1                  dd|d   z  «      }| j3                  ||«       t5        ||«      \  }}dD ]  } |||   «      ||<   Œ |d   j7                  |«      |d<    t9        |d| j                   › d�«      «       d k(  }d|v r| j;                  |d   «      n|} |r/| |d!œ|d   ¥}!d"|i|d   ¥}"d"|i|d   ¥}#d#|i|d   ¥}$d"|i|d   ¥}%n-d"| i|d   ¥}!d"| i|d   ¥}"d"| i|d   ¥}#d#| i|d   ¥}$d"| i|d   ¥}%|�|!|"|#|%fD ]  }&|&j                  d$|«       Œ t=        d0|j?                  d%«      || j                      |r|d   nd&|| j                   dk(  d|!|"|#|$|%d'œtA        t        d(«      ri nd|i¤Ž}'i |'¥‰
¥}( |jB                  d0i |(¤Ž})ddgjE                  | j                   «      }*|�sÝtG        |j?                  d%«      «      D �]¿  \  }+},|,d)   }-|,d)   |,d   z   }.|)d*   r«|)d*   |+   }|r%|jI                  «       jJ                  jL                  }/n|jO                  «       }/|-|/|*   d&<   |-|/|*   d+d  |.|/|*   dd+ |s|jQ                  |/«       |jS                  tU        jV                  |/«      | j                   dk(  | j                   dk(  ¬,«       |)d-   rA|)d-   |+   jY                  «       jL                  }0|-|.f|0|*   d d  |)d-   |+   jQ                  |0«       |)d.   s�Œt5        || j                   «      \  }1}2|)d.   d/|+z  d/|+z  d/z    D ]  }3 |2 |1|,| j                      «      ||+   d/z  z
  «      }- |2 |1|,| j                      «      ||+   d/z  z   «      }.|3jY                  «       jL                  }0|-|.f|0|*   d d  |3jQ                  |0«       Œ� �ŒÂ |j[                  t]        |)«      «       �ŒÈ t_        |«      }4| ja                  ||4!«       y c c}}w )1Nr0   r/   r.   r8   c                 óB   •— t        ‰j                  | › d�i «      |«      S )NÚprops)r   rH   )ÚelementÚartistr¾   s     €rX   Ú	get_propsz1_CategoricalPlotter.plot_boxes.<locals>.get_props`  s"   ø€ Ü# H§L¡L°G°9¸EÐ1BÀBÓ$GÈÓPÐPrY   rw   Ú	bootstrapzboxplot.bootstrapÚshownotchesÚnotchFÚboxÚmedianÚwhiskerÚflierÚcap)rH  rI  rJ  rK  rL  Úsolid_capstyleÚbuttr}   Tr  )ÚwhisrE  rÙ   r;   Ú	capwidthsrÄ   )r   ÚmedÚq1Úq3ÚciloÚcihiÚwhisloÚwhishiÚfliersrÂ   r‚   Úlinear©Ú	facecolorr  r1   Úmarkeredgecolorr{   Úrecordsr   )ÚbxpstatsÚ	positionsÚwidthsÚpatch_artistÚvertÚmanage_ticksÚboxpropsÚmedianpropsÚwhiskerpropsÚ
flierpropsÚcappropsz3.6.0rá   Úboxesr[   ©ÚupdatexÚupdateyÚmediansÚcapsrz   © )1r>   rd   ÚlinesÚLine2Dr€   rH   Ú
setdefaultÚpatchesr
   rÍ   r  r  ÚgroupbyÚsortedr¬   Úastyper  rã   ÚpdÚ	DataFrameÚcbookÚboxplot_statsrý   rß   rK   rê   r   r  rÇ   r¸   r`   Úto_dictr   ÚbxprÚ   Ú	enumerateÚget_pathÚverticesÚTÚget_dataÚset_datar/  r«   Ú	transposeÚ
get_xydataÚadd_containerÚBoxPlotContainerr   rö   )5rO   rÙ   r  ÚgapÚfillrO  r1   Ú	linecolorr{   Ú	fliersizer¾   r  Ú	value_varrD  rE  Ú
box_artistrA  rÍ   r!  r"  Úgroupedr_  ræ   r.   Ú
value_dataÚstatsÚ
orig_widthr4   Úcapwidthrç   ÚstatÚlinear_orient_scaleÚ	maincolorrd  re  rf  rg  rh  Ú	prop_dictÚdefault_kwsÚboxplot_kwsÚartistsÚori_idxÚirH  Úp0Úp1Ú	box_vertsÚvertsÚf_fwdÚf_invÚlineÚlegend_artists5             `                                          rX   Ú
plot_boxesz_CategoricalPlotter.plot_boxesO  sÐ  ø€ ð �Gˆ	Ø CÑ(¨¯©Ñ5ˆ	ä&)§i¡i×&6Ñ&6õ 	Qñ ˜	Ð)ÜŸ™Ð%6Ñ7ˆIØ—L‘L ¬c¯l©lÐ;NÑ.OÓPˆ	Ø×Ñ˜M¨8¯<©<¸ÀÓ+GÔHá.2”S—[‘[×*Ò*¼¿	¹	×8HÑ8Hˆ
á˜U JÓ/Ù Ó)Ù  Ó+Ù˜wÓ'Ù˜UÓ#ñ
ˆð 	ˆh‰×"Ñ"Ð#3°VÔ<ØˆiÑ×#Ñ#Ð$4°fÔ=Øˆg‰×!Ñ! ,°	Ô:à�W‰Wˆà"&§.¡.°Ø@DØ=Bð #1ó #Dó o	8ÑˆH�hð —‘ Ó)ˆBà×&Ñ& t§{¡{Ó3°IÑ>ˆGÜ˜x¨¯©Ñ4×;Ñ;Ó=×DÑDÄUÓKÓLˆIØ3:×;©4¨1¨a˜!Ÿ*™*�,Ð;ˆJÑ;Ü—L‘L¤§¡×!8Ñ!8¸È$ØCLð "9ó "Nó OˆEð  ×!3Ñ!3Ñ3ˆJÜ—<‘< §¡¨i¸À*Ð MÓNˆDÙØ—‘˜H dÔ+ÙØ�W“  S¡Ñ(“Ø—|‘| K°°t¸G±}Ñ1DÓEˆHà×Ñ˜r 4Ô(Ü-¨b°)Ó<‰FˆAˆsØWò /�Ù! %¨¡+Ó.��d’ð/à# H™o×1Ñ1°#Ó6ˆE�(‰Oà"H¤'¨"°°T·[±[°MÀÐ.GÓ"HÓ"JÈhÑ"VÐà:?À8Ñ:K˜Ÿ™ h¨u¡oÔ6ÐQVˆIÙà!*¸ñØFKÈEÁlð�ð  '¨	ÐE°U¸8±_ÐE�Ø '¨ÐG°e¸IÑ6FÐG�Ø/°ÐM¸eÀG¹nÐM�
Ø# YÐ?°%¸±,Ð?‘à# YÐ?°%¸±,Ð?�Ø&¨	ÐE°U¸8±_ÐE�Ø '¨ÐG°e¸IÑ6FÐG�Ø/°ÐM¸eÀG¹nÐM�
Ø# YÐ?°%¸±,Ð?�àÐ$Ø"*¨K¸ÀxÐ!Pò A�IØ×(Ñ(¨°iÕ@ðAô ð ØŸ™ yÓ1Ø˜tŸ{™{Ñ+á(;�t˜G’}ÀØ!Ø—[‘[ CÑ'Ø"Ø!Ø'Ø)Ø%Ø!ñô  ,¬C°Ô9‘BØ% xÐ0ñ#ˆKð( 6˜[Ð5¨HÐ5ˆKØ�b—f‘fÑ+˜{Ñ+ˆGð ˜C�j×&Ñ& t§{¡{Ó3ˆGâ&Ü'¨¯©°YÓ(?Ó@ó "1‘F�A�sØ˜V™�BØ˜V™ s¨7¡|Ñ3�Bà˜wÒ'Ø%,¨WÑ%5°aÑ%8˜
ÙØ(2×(;Ñ(;Ó(=×(FÑ(F×(HÑ(H™Ià(2×(;Ñ(;Ó(=˜IØ02˜	 'Ñ*¨1Ñ-Ø13˜	 'Ñ*¨1¨2Ð.Ø24˜	 'Ñ*¨1¨QÐ/Ù#à&×/Ñ/°	Ô:Ø×)Ñ)ÜŸL™L¨Ó3Ø$(§K¡K°3Ñ$6Ø$(§K¡K°3Ñ$6ð *ô ð ˜yÒ)Ø '¨	Ñ 2°1Ñ 5× @Ñ @Ó B× DÑ D˜Ø,.°¨F˜˜g™¡qÐ)Ø 	Ñ*¨1Ñ-×6Ñ6°uÔ=à˜v”Ü'?ÀÀDÇKÁKÓ'P™˜˜uØ$+¨F¡O°A¸±E¸!¸a¹%À!¹)Ð$Dò 1˜DÙ!&¡u¨S°·±Ñ-=Ó'>ÀÈ!ÁÈqÁÑ'PÓ!Q˜BÙ!&¡u¨S°·±Ñ-=Ó'>ÀÈ!ÁÈqÁÑ'PÓ!Q˜BØ$(§O¡OÓ$5×$7Ñ$7˜EØ02°B°˜E '™N©1Ð-Ø ŸM™M¨%Õ0ò1ð;"1ðH ×ÑÔ-¨gÓ6Ö7ð_o	8ôb 1°Ó6ˆØ×Ñ˜r =°(Õ;ùóU <s   ÇX6c           	      óö	  — | j                   dg}dddœ| j                      }t        |	|
|«      }g d¢}t        d||«       |€|ni |¥|¥}|€i n|j                  «       }|€i n|j                  «       }|€,|rdt        j
                  d   z  }nt        j
                  d   }| j                  }| j                  |d	d
¬«      D �]ã  \  }}| j                  |«      }t        || j                   «      \  }}t        ||«      \  }} |||   «      }|d   dz  dz
  }|d   }t        j                  | j                   || j                      gd|| j                  z  gi«      }|r| j                  ||«       |r|dxx   d|z
  z  cc<   |d   }|dz
  |d   z
  j                  t        «      } |dk(  r|dz   }!n<|dk(  rd| z  }!n1|dk(  r,||d   dz
  k  }"d| |"z
  z  t!        j"                  |d   «      z  }!|| j                      j%                  «       }#!|!j'                  «       z  |d   j%                  «       z  }$ ||«      }% ||#|$dz  z
  «      }& ||dd  «       ||d d «      z
  }' ||#|$dz  z   «       ||#|$dz  z
  «      z
  }(d|v r| j)                  |d   «      n|})d|rdn|)dœ}*|rt+        |)d	¬«      }+ |+d| dz   dz  z  «      },n|)},g }-t-        |«      D ]V  }.| j                   dk(  r|&|.   |%|.   f}/|(|.   |'|.   }1}0n|%|.   |&|.   f}/|'|.   |(|.   }1}0|-j/                  t1        |/|0|1«      «       ŒX |r|,|dœ}2nd|,dœ}2i |2¥d|i¥|¥}3|j3                  t5        |-fi |3¤Žd
¬«       |j7                  t!        j8                  |%|%g«      | j                   dk(  | j                   dk(  ¬«       |d   }4|d   j%                  «       dz  }5| j                   dk(  r ||#|5z
  |#|5z   g«       ||4|4g«      }7}6n ||4|4g«       ||#|5z
  |#|5z   g«      }7}6|r|n|)d d!|z  d"œ}8 |j:                  |6|7fi i |8¥|¥¤Ž |s�Œc ||d#   «      }t!        j<                  t?        |«       ||| j                      j%                  «       «      «      }9| j                   dk(  r|9|fn||9f\  }6}7 |j@                  |6|7fi i |*¥d$d%i¥|¥¤Ž �Œæ |jC                  | j                   dk(  | j                   dk(  ¬&«       tE        |«      }:i |¥||d'œ¥};| jG                  ||:|;«       y )(Nr0   r/   r.   r8   )ÚexponentialrY  r£   r¤   rÄ   rw   TFr  rn   rz   r;   rª   rÙ   r¹   rY  r¥  r£   éÿÿÿÿÚnonez.45rZ  )Úas_cmapr[   )Ú
facecolorsÚ
edgecolorsr{   ©Úautolimrj  rI  rN  ç      ô?)r1   rM  r{   rX  Úsé   r*  ©r{   r  )$r>   r   r   Úcopyrd   r€   rÍ   r  r  r   rw  rx  rý   rß   rv  r  r«   rú   Úitemrâ   r¸   r   Úranger  r
   Úadd_collectionr   r/  Úcolumn_stackÚplotÚfullrÆ   r  r2  r   rö   )<rO   rÙ   r  r‡  rˆ  r1   r‰  r{   r¤   Úk_depthÚoutlier_propÚtrust_alphaÚ
showfliersÚbox_kwsÚ	flier_kwsÚline_kwsr¾   r  r‹  Ú	estimatorÚwidth_method_optionsrÍ   r!  r"  ræ   Úinv_oriÚinv_valÚlv_datarÎ   ÚvalsÚpos_datar¹   ÚexponentÚ
rel_widthsÚtailsr(  r`  Úbox_valsÚbox_posÚbox_heightsÚ
box_widthsr”  Úflier_colorsÚcmapÚ	boxcolorsÚboxenrš  ÚxyÚwr7   Ú
box_colorsÚcollection_kwsrQ  rè   r.   r/   r–  Úposr¢  ró   s<                                                               rX   Úplot_boxensz_CategoricalPlotter.plot_boxensë  sÁ  € ð( —[‘[ %Ð(ˆ	Ø CÑ(¨¯©Ñ5ˆ	ä  ¨,¸ÓDˆ	â@ÐÜ˜Ð(<¸lÔKà%˜o‘(Ð3J°hÐ3JÀ'Ð3JˆØ#Ð+‘B°·±Ó1Aˆ	Ø!Ð)‘2¨x¯}©}«ˆàÐÙØ¤#§,¡,Ð/@Ñ"AÑA‘	äŸL™LÐ):Ñ;�	à�W‰Wˆà"&§.¡.°Ø@DØ=Bð #1ó #Dó ]	KÑˆH�hð —‘ Ó)ˆBÜ1°"°d·k±kÓB‰JˆAˆwÜ1°"°iÓ@‰JˆAˆwñ   ¨Ñ 3Ó4ˆGØ˜‘˜qÑ  1Ñ$ˆAØ˜8Ñ$ˆDä—|‘|Ø—‘˜h t§{¡{Ñ3Ð4Ø˜% $×"4Ñ"4Ñ4Ð5ð%ó ˆHñ Ø—‘˜H hÔ/ÙØ˜Ó! Q¨¡WÑ,Ó!ð ˜XÑ&ˆFØ ™
 W¨S¡\Ñ1×9Ñ9¼%Ó@ˆHØ˜xÒ'Ø# a™Z‘
Ø Ò.Ø (™]‘
Ø Ò'Ø '¨#¡,°Ñ"2Ñ3�Ø 8¨eÑ#3Ñ4´r·w±w¸wÀxÑ?PÓ7QÑQ�
à˜dŸk™kÑ*×/Ñ/Ó1ˆFØ *§.¡.Ó"2Ñ2°X¸gÑ5F×5KÑ5KÓ5MÑMˆFá˜t“}ˆHÙ˜f v°¡zÑ1Ó2ˆGÙ! $ q r (Ó+©g°d¸3¸B°iÓ.@Ñ@ˆKÙ  ¨&°1©*Ñ!4Ó5¹ÀÈÐRSÉÑ@SÓ8TÑTˆJà:?À8Ñ:K˜Ÿ™ h¨u¡oÔ6ÐQVˆIà#¹4±%ÀYñˆLñ Ü$ Y¸Ô=�Ù  ¨°1©¸Ñ'9Ñ!:Ó;‘	à%�	àˆEÜ˜1“Xò 2�Ø—;‘; #Ò%Ø! !™* h¨q¡kÐ2�BØ& q™M¨;°q©>�q‘Aà" 1™+ w¨q¡zÐ2�BØ'¨™N¨J°q©M�q�AØ—‘œY r¨1¨aÓ0Õ1ð2ñ Ø,5ÀYÑO‘
à,2À)ÑL�
àN 
ÐN¨K¸ÑNÀgÐNˆNØ×Ñœo¨eÑF°~ÑFÐPUÐÔVØ×ÑÜ—‘ ¨8Ð 4Ó5ØŸ™ sÑ*ØŸ™ sÑ*ð ô ð ˜(Ñ#ˆCØ˜'Ñ"×'Ñ'Ó)¨AÑ-ˆBØ�{‰{˜cÒ!Ù ¨¡¨V°b©[Ð9Ó:¹GÀSÈ#ÀJÓ<O�1‘á  S˜zÓ*©G°V¸b±[À&È2Á+Ð4NÓ,O�1�á&*™°	Ø"(Ø! IÑ-ñˆKð
 ˆB�G‰G�A�qÑ8Ð7˜{Ð7¨hÐ7Ò8ó Ù˜w xÑ0Ó1�Ü—g‘gœc $›i©°¸$¿+¹+Ñ1F×1KÑ1KÓ1MÓ)NÓO�Ø&*§k¡k°SÒ&8˜˜T‘{¸tÀS¸k‘��1Ø�—
‘
˜1˜aÑJÐ#I lÐ#I°C¸Ñ#I¸yÐ#IÔJð{]	Kð~ 	×Ñ §¡°Ñ!3¸D¿K¹KÈ3Ñ<NÐÔOä0°Ó6ˆØP˜ÐP¨iÀiÒPˆ
Ø×Ñ˜r =°*Õ=rY   c                 óö  ‡ — ‰ j                   dg}dddœ‰ j                      }g d¢}t        d||	d¬«       t        d	g d
¢|
«       |€,|rdt        j                  d   z  }nt        j                  d   }|	�^|	j	                  d«      rM|j                  d|dz  «      }|j                  d|dz  «      }|j                  d‰ j                   dk(  rdnd«      }t        dHi |¤Ž}‰ j                  }g }‰ j                  |dd¬«      D ]�  \  }}|j                  dd«      |d<   |j                  ||g «      }d|v r‰ j                  |d   «      n|}|s|}d}t        |||¬«      }|j                  |‰ j                      ||   |d   ||   i |¥|¥|‰ j                  |«      dœ«       ŒŸ ˆ fd„}|D �cg c]  } ||d    «      ‘Œ }}|r„t        j                   |D � cg c]  } | d   j#                  «       ‘Œ c} «      }!t        j                   |D � cg c]  } t%        | d!   «      ‘Œ c} «      }"|D �#ci c]  }#|#|!“Œ }$}#|D �#ci c]  }#|#|"“Œ }%}#nÒt'        j(                  «       5  t'        j*                  d"d#«       |D �#� ci c]E  }#|#t        j                   |D � cg c]#  }  || d    «      |#k(  r| d   j#                  «       ‘Œ% c} «      “ŒG }$}#} d d d «       |D �#� ci c]@  }#|#t        j                   |D � cg c]  }  || d    «      |#k(  rt%        | d!   «      ‘Œ  c} «      “ŒB }%}#} |‰ j,                  z  }&|D �]î  }t/        j0                  d$t#        t%        |d%   «      d«      «      }'t/        j2                  ‰ j                   |d&   ||d%   d|d   d'|&i|'¬(«      }(|r‰ j5                  |d    |(«       |r|(d'xx   d|z
  z  cc<    ||d    «      })|(d'   d)z  }*|d   j#                  «       }+t        j6                  |+«      rd},nC|
d*k(  r|(d   $|)   z  },n2|
d+k(  r t%        |d!   «      }-|(d   |+z  |-|%|)   z  z  },n|
d'k(  r|(d   |+z  },,|*z  |rd)ndz  },d‰ j8                  vrd$n-‰ j                  j:                  j=                  |d    d   «      d)z  }.|r|.r|*|,|*z
  fn|,|*z
  |*f}/n|,|,f}/|d,   }t?        |d«      \  }0}1t?        |d«      \  }0}2|1|2dœ‰ j                      }3|1|2dœ|   }4|d-   d.   }t        j6                  |+«      rŠ|(‰ j                      j@                  d$   }5|d!   jC                  «       }6‰ j                   dk(  r|5|/d$   z
  |5|/d   z   g|6|6g}8}7n|6|6g|5|/d$   z
  |5|/d   z   g}8}7|jE                   |1|7«       |2|8«      ||¬/«       �ŒQ|jF                  |jH                  dœ‰ j                      }9 |9 |4|(|   «       |3|(‰ j                      |/d$   z
  «       |3|(‰ j                      |/d   z   «      fi |d-   ¤Ž |d!   }:‰ j                   |d&   d'|&i};|r‰ j5                  |d    |;«       |r|;d'xx   d|z
  z  cc<   |	€�Œ|	j	                  d0«      r¤t        jJ                  |;‰ j                      gt%        |:«      z  «      }5|r|5|.rd1nd|;d'   z  d)z  z  }5‰ j                   dk(  r|5|:fn|:|5f\  }7}8|||d)z  d)z  |d-   j                  d2d)«      dz   d3œ|¥}< |jL                   |1|7«       |2|8«      fi |<¤Ž �Œº|	j	                  d4«      �r%t        jN                  |:|(|   |(‰ j                      |/d$   z
  «      }=t        jN                  |:|(|   |(‰ j                      |/d   z   «      }>t        jP                   |3|=«       |3|>«      g«      }?t        jP                   |4|:«       |4|:«      g«      }@t        jP                  |?|@g«      jS                  d)dd$«      }A‰ j                   dk(  rAd d …d d …d d d1…f   }A||d)z  d/œ|¥}<t        jT                  jV                  Afi |<¤Ž}B|jY                  |Bd¬5«       �Œñ|	j	                  d6«      �r4t        jZ                  |:g d7¢«      }Ct        jN                  |C|(|   |(‰ j                      |/d$   z
  «      }=t        jN                  |C|(|   |(‰ j                      |/d   z   «      }>t        jP                   |3|=«       |3|>«      g«      }?t        jP                   |4|C«       |4|C«      g«      }@t        jP                  |?|@g«      jS                  d)d$d«      }A‰ j                   dk(  rAd d …d d d1…d d …f   }Ag d8¢}Dt]        A«      D ]"  \  }E}F||D|E   d9œ|¥}< |jD                  |Fi |<¤Ž Œ$ �Œ7|	j	                  d«      s�ŒJt        j^                  ja                  |:«      d$   }Ct        jJ                  |;‰ j                      «      }5|r|5|.rd1nd|;d'   z  d)z  z  }5|5|5g|5|5g|5gf}5Cd:   |Cd;   g|Cd<   |Cd=   g|Cd>   gf}6‰ j                   dk(  r|5|6c\  }G}H}I\  }J}K}Ln|6|5c\  }G}H}I\  }J}K}L|rm|.rdnd1z  d?z  d)z  }M‰ j                   dk(  rMd$fnd$M f\  }N}O|jb                  t        jd                  jg                  |N|O|jh                  jj                  «      z   }Pn|jb                  }P|Pd@œ|¥dAi¥}Q |jD                   |1G«       |2J«      fi |Q¤Ž |QdA<    |jD                   |1H«       |2K«      fi |Q¤Ž |dBz  |dCz  |PdDœ|¥dEdE|dFœ¥}R |jD                   |1I«       |2L«      fi |R¤Ž �Œñ tm        |«      }Si |¥||dGœ¥}T‰ jo                  ||S|T«       y c c}w c c} w c c} w c c}#w c c}#w c c} w c c} }#w # 1 sw Y   �Œ¦xY wc c} w c c} }#w )INr0   r/   r.   r8   )rH  ÚquartÚstickÚpointNÚinnerT)Úprefixr›   )r£   ÚcountrÙ   r­  zpatch.linewidthrw   rH  Ú	box_widthg      @Ú
whis_widthr[   r  ræ   ú|Fr  Úweightsr;   Úweightr§  )r[  r  r{   Údensity)ÚpositionÚobservationsrã  Úsupportr„   r!  rÍ   c                 óH   •— t        ˆfd„| j                  «       D «       «      S )Nc              3   óL   •K  — | ]  \  }}|‰j                   k7  sŒ||f–— Œ y ­w©N)r>   )Ú.0rn   ro   rO   s      €rX   ú	<genexpr>zH_CategoricalPlotter.plot_violins.<locals>.vars_to_key.<locals>.<genexpr>¾  s$   øè ø€ ÒQ¡D A qÀÀTÇ[Á[Ó@P˜!˜QœÑQùs   ƒ$›	$)Útuplera   )r!  rO   s    €rX   Úvars_to_keyz5_CategoricalPlotter.plot_violins.<locals>.vars_to_key½  s   ø€ ÜÓQ¨H¯N©NÓ,<ÔQÓQÐQrY   r!  rå  Úignorez All-NaN (slice|axis) encounteredr   ræ  rä  rÙ   )rÚ   rz   r£   rÝ  rÍ   r„   r  )r1   r{   rÚ  r¦  Úzorder)r1   r  r®  rï  rÙ  r«  rØ  )r¯  é2   éK   )©r­  ry   )g      @r;   rò  )r1   r{   ÚdashesrV  rW  rR  rS  rQ  éH   )r1   Ú	transformr{   g333333ó?é   )r  r}   r|   rõ  rÒ  )r\  Úmarkerfacecolorr1   r°  ro  )8r>   r   rd   r€   Ú
startswithrH   r   rÍ   r  rK   Ú
_transformr¸   r`   r  r  r«   Únanmaxrâ   rÆ   rg   Úcatch_warningsÚfilterwarningsrý   rw  Ú
RangeIndexrx  rß   Úisnanr5   r¹   rÚ   r   r7  r   r¶  Úfill_betweenxÚfill_betweenÚarrayr  ÚinterpÚstackrƒ  ÚcollectionsÚLineCollectionr´  Ú
percentiler}  ry  rz  r1  Ú
transformsÚScaledTranslationr<  Údpi_scale_transr   rö   )UrO   rÙ   r  r‡  Úsplitr1   rˆ  r‰  r{   rÛ  r›   rœ   Úkde_kwsÚ	inner_kwsr¾   r  r‹  Úinner_optionsrÞ  rß  r  ÚkderÍ   Úviolin_datar!  r"  Ú	stat_datar”  r–  rí  ÚviolinÚ	norm_keysro   Úcommon_max_densityÚcommon_max_countr�   Úmax_densityÚ	max_countÚ
real_widthrÚ   r4   Únorm_keyrè   Úpeak_densityÚspanrÝ  Ú
right_sider  ræ   ÚinvxÚinvyÚinv_posrÂ  rÕ  r�   r.   r/   Ú	plot_funcÚobsÚpos_dictÚkwsÚpos0Úpos1Úpos_ptsÚval_ptsÚsegmentsrp  r�  ró  rš  ÚsegmentÚx0Úx1Úx2Úy0Úy1Úy2rÞ   ÚdxÚdyÚtransr¾  Údot_kwsr¢  ró   sU   `                                                                                    rX   Úplot_violinsz _CategoricalPlotter.plot_violinsx  s¢  ø€ ð$ —[‘[ %Ð(ˆ	Ø CÑ(¨¯©Ñ5ˆ	â@ˆÜ˜ °¸dÕCÜ˜Ò(BÀLÔQàÐÙØ ¤3§<¡<Ð0AÑ#BÑB‘	äŸL™LÐ):Ñ;�	àÐ ×!1Ñ!1°%Ô!8Ø!Ÿ™ k°9¸s±?ÓCˆIØ"Ÿ™ |°YÀ±]ÓCˆJØ—]‘] 8°D·K±KÀ3Ò4F©SÈCÓPˆFä‰n�G‰nˆØ�W‰WˆØˆð #'§.¡.°Ø@DØ=Bð #1ó #Dò 	ÑˆH�hð "*§¡¨i¸Ó!;ˆH�XÑØŸ™ x°¸BÓ?ˆIà:?À8Ñ:K˜Ÿ™ h¨u¡oÔ6ÐQVˆIÙØ%�	Ø"�	ÜØ#Ø#Ø#ôˆKð ×ÑØ$ T§[¡[Ñ1Ø (¨Ñ 3Ø$ YÑ/Ø$ YÑ/Ø5˜[Ð5¨HÐ5Ø$Ø—n‘n XÓ.ñ õ ð#	ô8	Rð DOÖO¸‘[ ¨
Ñ!3Õ4ÐOˆ	ÐOÙÜ!#§¡ÈÖ+TÀ1¨A¨i©L×,<Ñ,<Õ,>Ò+TÓ!UÐÜ!Ÿy™yÈ+Ö)VÀQ¬#¨a°Ñ.?Õ*@Ò)VÓWÐØ>GÖH°s˜3Ð 2Ñ2ÐHˆKÐHØ:CÖD°3˜Ð.Ñ.ÐDˆIÑDä×(Ñ(Ó*ñ ä×'Ñ'¨Ð2TÔUð
 #,÷	ð ð œŸ™Ø4?ö$Ø/0Ù& q¨¡}Ó5¸Ò<ð ˜)™×(Ñ(Õ*ò$ó ñ ð�ñ ÷ð (÷	ð ð ”R—Y‘YØ4?ö Ø/0Ù" 1 Z¡=Ó1°SÒ8ô ˜˜.Ñ)Õ*ò ó ñ ðˆIñ ð ˜T×/Ñ/Ñ/ˆ
ð "ó l	7ˆFä—M‘M !¤S¬¨V°IÑ->Ó)?ÀÓ%CÓDˆEÜ—<‘<Ø—‘˜V JÑ/Ø˜6 )Ñ,Ø˜6 )Ñ,Ø˜ð	!ð
 ôˆDñ Ø—‘˜F :Ñ.°Ô5ÙØ�W“  S¡Ñ(“ñ # 6¨*Ñ#5Ó6ˆHØ�g‘ Ñ"ˆBØ! )Ñ,×0Ñ0Ó2ˆLÜ�x‰x˜Ô%Ø‘Ø Ò'Ø˜I‘¨°XÑ)>Ñ>‘Ø Ò(Ü˜F >Ñ2Ó3�Ø˜I‘¨Ñ5¸ÀÈ8ÑATÑ9TÑU‘Ø Ò(Ø˜I‘¨Ñ5�Ø˜"‘9¡U¡°Ñ2ˆDð  $§.¡.Ñ0‘Ø—]‘]×)Ñ)×/Ñ/°°zÑ0BÀ5Ñ0IÓJÈQÑNð ñ Ù-7˜2˜t b™y™/¸dÀR¹iÈ¸_‘à ˜*�à˜‘ˆBÜ.¨r°3Ó7‰GˆAˆtÜ.¨r°3Ó7‰GˆAˆtØ  tÑ,¨T¯[©[Ñ9ˆGØ  tÑ,¨YÑ7ˆGà˜xÑ(¨Ñ5ˆIô �x‰x˜Ô%Ø˜4Ÿ;™;Ñ'×,Ñ,¨QÑ/�Ø˜^Ñ,×1Ñ1Ó3�Ø—;‘; #Ò%Ø '¨!¡*Ñ,¨c°G¸A±JÑ.>Ð?À#ÀsÀ�q‘Aà ˜:¨¨g°a©jÑ(8¸#ÀÈÁ
Ñ:JÐ'K�q�AØ—‘™˜Q›¡ a£°	ÀY�ÔOÙð !×.Ñ.°R·_±_ÑEÀdÇkÁkÑRˆIÙÙ˜˜Y™Ó(Ù˜˜TŸ[™[Ñ)¨G°A©JÑ6Ó7Ù˜˜TŸ[™[Ñ)¨G°A©JÑ6Ó7ñð ˜Ñ"ò	ð ˜Ñ(ˆCØŸ™ V¨JÑ%7¸À*ÐMˆHÙØ—‘˜F :Ñ.°Ô9ÙØ˜Ó! a¨#¡gÑ.Ó!ð ˆ}Ùà×!Ñ! 'Ô*Ü—h‘h ¨¯©Ñ 5Ð6¼¸S»ÑAÓB�ÙØ¡*™B°!°xÀÑ7HÑHÈ1ÑLÑL�CØ%)§[¡[°CÒ%7˜˜S‘z¸cÀ3¸Z‘��1à&Ø!*Ø# a™-¨AÑ-Ø$ XÑ.×2Ñ2°8¸QÓ?À!ÑCñ	ð
  ð�ð �—
‘
™4 ›7¡D¨£GÑ3¨sÔ3à×!Ñ! 'Õ*Ü—y‘y  d¨9¡o°t¸D¿K¹KÑ7HÈ7ÐSTÉ:Ñ7UÓV�Ü—y‘y  d¨9¡o°t¸D¿K¹KÑ7HÈ7ÐSTÉ:Ñ7UÓV�ÜŸ(™(¡G¨D£M±7¸4³=Ð#AÓB�ÜŸ(™(¡G¨C£L±'¸#³,Ð#?Ó@�ÜŸ8™8 W¨gÐ$6Ó7×AÑAÀ!ÀQÈÓJ�Ø—;‘; #Ò%Ø'ªª1©d°¨d¨
Ñ3�Hà&Ø!*¨Q¡ñð  ð�ô
 Ÿ™×6Ñ6°xÑGÀ3ÑG�Ø×!Ñ! %°Ð!Ö7à×!Ñ! 'Õ*ÜŸ™ cª<Ó8�Ü—y‘y ¨¨Y©¸¸d¿k¹kÑ9JÈWÐUVÉZÑ9WÓX�Ü—y‘y ¨¨Y©¸¸d¿k¹kÑ9JÈWÐUVÉZÑ9WÓX�ÜŸ(™(¡G¨D£M±7¸4³=Ð#AÓB�ÜŸ(™(¡G¨E£N±G¸E³NÐ#CÓD�ÜŸ8™8 W¨gÐ$6Ó7×AÑAÀ!ÀQÈÓJ�Ø—;‘; #Ò%Ø'ª©4¨R¨4²¨
Ñ3�HÚ=�Ü"+¨HÓ"5ò -‘J�A�wà!*Ø%.Ø"(¨¡)ñð $ð	�Cð �B—G‘G˜WÐ,¨Ó,ò-ð ×!Ñ! %Ö(ÜŸ	™	×/Ñ/°Ó4°QÑ7�Ü—h‘h˜x¨¯©Ñ4Ó5�ÙØ¡*™B°!°xÀÑ7HÑHÈ1ÑLÑL�CØ˜C�j 3¨ *¨s¨eÐ3�à˜8‘_ e¨H¡oÐ6Ø˜4‘[ %¨¡+Ð.Ø˜5‘\�Nð�ð
 —;‘; #Ò%Ø14°cÐ.‘L�R˜˜R¡, 2 r©2à14°cÐ.‘L�R˜˜R¡, 2 r¨2áÙ#-™a°2¸ÑBÀRÑGÈ!ÑK�FØ,0¯K©K¸3Ò,>˜f a™[ÀQÈÈÀL‘F�B˜ØŸL™L¬3¯>©>×+KÑ+KØ˜B §	¡	× 9Ñ 9ó,ñ ‘Eð ŸL™L�Eà&Ø!&ñð  ðð   ñ	�ð �—‘™˜R›¡$ r£(Ñ7¨hÒ7Ø(1�˜Ñ%Ø�—‘™˜R›¡$ r£(Ñ7¨hÒ7à$Ø"+¨c¡/Ø'0°1¡}Ø!&ñ		ð
  ð	ð (+Ø'*Ø&ò	�ð �—‘™˜R›¡$ r£(Ñ6¨gÔ6ðYl	7ô\ 1°Ó6ˆØQ˜ÐQ¨yÀyÒQˆ
Ø×Ñ˜r =°*Õ=ùòU Pùâ+TùÚ)VùÚHùÚDùò$ùó÷ñ üò ùósf   Æ(l?ÇmÈm	È%
mÈ5
mÉm#É2mÊ(mÊ3	mÊ<m#Ëm5Ë%#m0Ì	m5ímím#í#m-í0m5c	           	      óÊ  — dddœ| j                      }	dg}
t        |t        j                  j                  «      }|j                  dt        j                  d   dz  «       |j                  d|d   d	z  «       |j                  d
|d   t        j                  dt        j                  z  «      z  «       | j                  d|d|«      }| j                  d|d|«      }| j                  | j                      }| j                  | j                      dk(  r|t        | j                  | j                      j                  «       «      }t        | j                  | j                      j!                  «       «      }t#        ||dz   «      D �cg c]  }|‘Œ }}| j$                  j&                  €dnt)        | j$                  j&                  «      }|du rd|z  }| j*                  }| j-                  |
dd¬«      D �].  \  }}| j/                  |«      }t1        || j                   › d�«      }t3        || j                   «      \  }} ||j5                  |«      «      }|j6                  r|nq |j9                  | j                   «      j:                  ||	fi t=        d«      ¤Žj?                  tA        jB                  || j                   ¬«      «      jE                  «       }|r`| j$                  j&                  jG                  |d   «      }||dz
  z  }| dz  ||z  z   }|| j                   xx   || jH                  z  z  cc<   | jK                  ||«       |jM                  «       }|jO                  ||jQ                  d«         ||jQ                  d«         d|v r| j%                  |d   «      n|¬«        |jR                  |d   |d   fi |¤Ž\  }|jM                  «       }|jU                  «       }dD ]  }|j                  |||   «       Œ |jV                  €�Œ| jY                  ||||«       �Œ1 t[        t        j                  j                  g g «      } d||dœi}!| j]                  || |!«       y c c}w )Nr/   r.   r8   r0   r{   rw   rx   r|   ry   r}   rz   r  Úor~   ú-r@   r;   r   Tgš™™™™™™?r  r=   F)rŽ   )r  r~   r1   )r1   r{   Úalpharï  )r  r~   )/r>   r   rd   rp  rq  rr  r€   r«   ÚsqrtÚpirÀ   rN   rI   Úintrø   r­   râ   r³  r¸   r¹   rÆ   rÍ   r  r  rÇ   r   Úconvert_unitsrÅ   rt  Úapplyr   Úreindexrw  ÚIndexÚreset_indexrÚ   rý   rê   r±  r�   rK   r¶  Ú
propertiesÚerror_methodÚplot_errorbarsr   rö   )"rO   Ú
aggregatorÚmarkersÚ
linestylesr  r1   r–   r’   r¾   Úagg_varr  Úbase_positionsÚmin_cat_valÚmax_cat_valrš  Ún_hue_levelsrÍ   r!  r"  Úori_axisrõ  ræ   r_  Úagg_datarÜ   Ú	step_sizerÞ   Úsub_kwsr¡  Úsub_err_kwsÚ
line_propsÚpropr¢  rì   s"                                     rX   Úplot_pointsz_CategoricalPlotter.plot_pointsŒ  sù  € ð  #Ñ& t§{¡{Ñ3ˆØ�Gˆ	ä# H¬c¯i©i×.>Ñ.>Ó?ˆØ×Ñ˜K¬¯©Ð6GÑ)HÈ3Ñ)NÔOØ×ÑÐ-¨x¸Ñ/DÀtÑ/KÔLØ×Ñ˜L¨(°;Ñ*?Ä"Ç'Á'È!ÌbÏeÉeÉ)ÓBTÑ*TÔUà×)Ñ)¨(°G¸SÀ(ÓKˆØ×,Ñ,¨[¸*ÀcÈ8ÓTˆ
àŸ™¨¯©Ñ5ˆØ�>‰>˜$Ÿ+™+Ñ&¨-Ò7Ü˜dŸn™n¨T¯[©[Ñ9×=Ñ=Ó?Ó@ˆKÜ˜dŸn™n¨T¯[©[Ñ9×=Ñ=Ó?Ó@ˆKÜ).¨{¸KÈ!¹OÓ)LÖM AšaÐMˆNÐMà ŸM™M×0Ñ0Ð8‘q¼cÀ$Ç-Á-×BVÑBVÓ>WˆØ�D‰=Ø˜<Ñ'ˆEà�W‰Wˆà"&§.¡.°Ø@DØ=Að #1ó #Có '	HÑˆH�hð —‘ Ó)ˆBä˜r d§k¡k ]°$Ð#7Ó8ˆHÜ3°B¸¿¹ÓD‰LˆI�qÙ! (×"8Ñ"8¸Ó"HÓIˆIØ#+§>¢>‘xð�ß‘˜Ÿ™Ó%ß‘�z 7ñSä.JÈ5Ó.QñS÷ ‘œŸ™ )°$·+±+Ô>Ó?ß‘“ð ñ ØŸ-™-×.Ñ.×4Ñ4°X¸e±_ÓE�Ø! \°AÑ%5Ñ6�	Ø˜ !™ i°'Ñ&9Ñ9�Ø˜Ÿ™Ó%¨°$×2DÑ2DÑ)DÑDÓ%à×Ñ˜r 8Ô,à—m‘m“oˆGØ�N‰NØ˜xŸ|™|¨EÓ2Ñ3Ø$ X§\¡\°%Ó%8Ñ9Ø8=ÀÑ8I�d—m‘m H¨U¡OÔ4Èuð ô ð �B—G‘G˜H S™M¨8°C©=ÑD¸GÑD‰EˆDà!Ÿ,™,›.ˆKØŸ™Ó*ˆJØAò ?�Ø×&Ñ& t¨Z¸Ñ-=Õ>ð?à×&Ñ&Ò2Ø×#Ñ# B¨°'¸;ÖGðO'	HôR  ¤§	¡	× 0Ñ 0°"°bÓ9ˆØ¨'À
ÑKÐLˆØ×Ñ˜r =°'¸<ÕHùòg Ns   Æ	Q c
                 ó  — dddœ| j                      }
dg}| j                  }| j                  j                  €d}|r$|�"|t	        | j                  j                  «      z  }|s&|	j                  ddt        j                  d   z  «       |j                  ddt        j                  d   z  «       | j                  |d	d	¬
«      D �]£  \  }}| j                  |«      }|j                  r|nC |j                  | j                   «      j                  ||
fi t        d«      ¤Žj                  «       }|| j                  z  |d<   |r| j!                  ||«       |r|dxx   d|z
  z  cc<   || j                      |d   dz  z
  |d<   | j#                  ||«       | j                   dk(  r$|j$                  }t'        |d   |d   |d   ¬«      }n#|j(                  }t'        |d   |d   |d   ¬«      }d|v r| j                  |d   «      n|}d|d<   |r|j+                  ||¬«       n|j+                  ||d¬«        |di i |¥|	¥¤Ž |j,                  €�Œˆ| j/                  |||d|rdn|i|¥«       �Œ¦ t1        |«      }| j3                  |||	«       y )Nr/   r.   r8   r0   Fr{   ç      ø?rw   Tr  rÙ   r;   rz   rá   )r.   ÚheightrÙ   )r/   rÙ   rU  Úalign)r1   r[  r§  )r1   r  r[  r1   z.26ro  )r>   rÍ   r¸   r¹   rÆ   rr  rd   r€   r  r  rÅ   rt  r<  r   r?  rý   rß   rê   Úbarr`   Úbarhr�   rA  rB  r   rö   )rO   rC  r  r‡  rÙ   rˆ  r1   r–   r’   r¾   rF  r  rÍ   r!  r"  rL  Úbar_funcr"  Ú
main_colorr¢  s                       rX   Ú	plot_barsz_CategoricalPlotter.plot_barsÜ  s¨  € ð  #Ñ& t§{¡{Ñ3ˆØ�Gˆ	à�W‰Wˆà�=‰=×ÑÐ'ØˆEá�WÐ(Ø¤ D§M¡M×$8Ñ$8Ó 9Ñ9ˆGáØ×Ñ ¨S´3·<±<Ð@QÑ3RÑ-RÔSà×Ñ˜;¨¬c¯l©lÐ;LÑ.MÑ(MÔNà"&§.¡.°Ø@DØ=Að #1ó #Có 0	ÑˆH�hð —‘ Ó)ˆBà#+§>¢>‘xð�ß‘˜Ÿ™Ó%ß‘�z 7ñSä.JÈ5Ó.QñS÷ ‘“ð	 ð !&¨×(:Ñ(:Ñ :ˆH�WÑÙØ—‘˜H hÔ/ÙØ˜Ó! Q¨¡WÑ,Ó!à'¨¯©Ñ4°xÀÑ7HÈ1Ñ7LÑLˆH�VÑØ×Ñ˜r 8Ô,à�{‰{˜cÒ!ØŸ6™6�ÜØ˜vÑ&¨x¸©}ÀHÈWÑDUô‘ð Ÿ7™7�ÜØ˜vÑ&¨h°s©mÀHÈWÑDUô�ð <AÀHÑ;L˜Ÿ™ x°¡Ô7ÐRWˆJð "ˆC�‰LÙØ—
‘
 °z�
ÕBà—
‘
 °zÈV�
ÔTáÑ+Ð*˜#Ð* Ð*Ò+à×&Ñ&Ò2Ø×#Ñ#Ø˜ 'Ø¡t™e°ÐG¸wÐGöð[0	ôd 1°Ó6ˆØ×Ñ˜r =°(Õ;rY   c           	      ó  — dddœ| j                      }|j                  d«      D �]b  }t        |«      }t        j                  || j                      || j                      g«      }t        j                  ||› d�   ||› d�   g«      }|rÔ|| j
                  z  dz  }	t        || j                   «      \  }
} | |
|d   «      |	z
  «       | |
|d	   «      |	z   «      f}t        j                  g |¢t        j                  ‘|t        j                  g|¢g«      }t        j                  |d   |d   t        j                  g|t        j                  |d
   |d
   gg«      }| j                   dk(  r||f}n||f} |j                  |i |¤Ž �Œe y )Nr/   r.   r8   r]  r­   râ   rz   r   r;   r¦  )
r>   r{  r`   r«   r  rý   r   ÚconcatenateÚnanr¶  )rO   rÍ   r4   r–   r’   rå   rÒ   rÕ  r�   ÚcwÚsclrç   rL  Úargss                 rX   rB  z"_CategoricalPlotter.plot_errorbars.  sƒ  € à˜cÑ" 4§;¡;Ñ/ˆØ—<‘< 	Ó*ó 	&ˆCä�s“)ˆCÜ—(‘(˜C §¡Ñ,¨c°$·+±+Ñ.>Ð?Ó@ˆCÜ—(‘(˜C 3 % s Ñ,¨c°S°E¸°+Ñ.>Ð?Ó@ˆCáà˜t×1Ñ1Ñ1°AÑ5�Ü3°B¸¿¹ÓD‘��SÙ™#˜c !™f›+¨Ñ*Ó+©S±°S¸±V³¸rÑ1AÓ-BÐB�ä—n‘nØ"�c�Nœ2Ÿ6™6�N C¬"¯&©&¨°3¨ð&ó �ô —n‘nØ˜‘V˜S ™V¤R§V¡VÐ,¨c´B·F±F¸CÀ¹GÀSÈÁWÐ3Mð&ó �ð �{‰{˜cÒ!Ø˜C�x‘à˜C�x�ØˆB�G‰G�TÐ%˜WÔ%ñ/	&rY   )F)r8   )NN)!Ú__name__Ú
__module__Ú__qualname__Úwide_structureÚflat_structureÚ_legend_attributesrC   rr   ru   rˆ   r—   r�   r¡   r¥   r¶   rÀ   rÏ   r×   rß   rê   rö   Úpropertyrý   r  r%  r>  r£  rÖ  r3  rR  r[  rB  Ú__classcell__)rW   s   @rX   r+   r+   1   s×   ø„ à%¨I¸jÑI€NØ˜9Ð%€Nà!˜Ðð ØØØØØØõL2ó\3"òjò(-ò< ò6)ò(
òò ò4ò 0ò>ò$ó
/ó	3ð ñó ðòò&1PôfHEòTZ<òxK>òZR>òhNIò`P<öd&rY   r+   c                   ó   — e Zd ZdddœZy)Ú_CategoricalAggPlotterz@indexr,   r8   N)rb  rc  rd  rf  ro  rY   rX   rk  rk  K  s   „ à#¨)Ñ4�NrY   rk  Úcategorical_narrativeaL      See the :ref:`tutorial <categorical_tutorial>` for more information.

    .. note::
        By default, this function treats one of the variables as categorical
        and draws data at ordinal positions (0, 1, ... n) on the relevant axis.
        As of version 0.13.0, this can be disabled by setting `native_scale=True`.
    Úinput_paramszŒ    x, y, hue : names of variables in `data` or vector data
        Inputs for plotting long-form data. See examples for interpretation.    Úcategorical_datazÍ    data : DataFrame, Series, dict, array, or list of arrays
        Dataset for plotting. If `x` and `y` are absent, this is
        interpreted as wide-form. Otherwise it is expected to be long-form.    Ú
order_varsz�    order, hue_order : lists of strings
        Order to plot the categorical levels in; otherwise the levels are
        inferred from the data objects.    Ústat_api_paramsa¼      estimator : string or callable that maps vector -> scalar
        Statistical function to estimate within each categorical bin.
    errorbar : string, (string, number) tuple, callable or None
        Name of errorbar method (either "ci", "pi", "se", or "sd"), or a tuple
        with a method name and a level parameter, or a function that maps from a
        vector to a (min, max) interval, or None to hide errorbar. See the
        :doc:`errorbar tutorial </tutorial/error_bars>` for more information.

        .. versionadded:: v0.12.0
    n_boot : int
        Number of bootstrap samples used to compute confidence intervals.
    seed : int, `numpy.random.Generator`, or `numpy.random.RandomState`
        Seed or random number generator for reproducible bootstrapping.
    units : name of variable in `data` or vector data
        Identifier of sampling units; used by the errorbar function to
        perform a multilevel bootstrap and account for repeated measures
    weights : name of variable in `data` or vector data
        Data values or column used to compute weighted statistics.
        Note that the use of weights may limit other statistical options.

        .. versionadded:: v0.13.1    Úcizš    ci : float
        Level of the confidence interval to show, in [0, 100].

        .. deprecated:: v0.12.0
            Use `errorbar=("ci", ...)`.    r>   aˆ      orient : "v" | "h" | "x" | "y"
        Orientation of the plot (vertical or horizontal). This is usually
        inferred based on the type of the input variables, but it can be used
        to resolve ambiguity when both `x` and `y` are numeric or when
        plotting wide-form data.

        .. versionchanged:: v0.13.0
            Added 'x'/'y' as options, equivalent to 'v'/'h'.    r1   zS    color : matplotlib color
        Single color for the elements in the plot.    rj   aC      palette : palette name, list, dict, or :class:`matplotlib.colors.Colormap`
        Color palette that maps the hue variable. If the palette is a dictionary,
        keys should be names of levels and values should be matplotlib colors.
        The type/value will sometimes force a qualitative/quantitative mapping.    Úhue_normzû    hue_norm : tuple or :class:`matplotlib.colors.Normalize` object
        Normalization in data units for colormap applied to the `hue`
        variable when it is numeric. Not relevant if `hue` is categorical.

        .. versionadded:: v0.12.0    Ú
saturationzù    saturation : float
        Proportion of the original saturation to draw fill colors in. Large
        patches often look better with desaturated colors, but set this to
        `1` if you want the colors to perfectly match the input values.    r–   z[    capsize : float
        Width of the "caps" on error bars, relative to bar spacing.    r”   z™    errcolor : matplotlib color
        Color used for the error bar lines.

        .. deprecated:: 0.13.0
            Use `err_kws={'color': ...}`.    r•   z¢    errwidth : float
        Thickness of error bar lines (and caps), in points.

        .. deprecated:: 0.13.0
            Use `err_kws={'linewidth': ...}`.    rˆ  zw    fill : bool
        If True, use a solid patch. Otherwise, draw as line art.

        .. versionadded:: v0.13.0    r‡  zŒ    gap : float
        Shrink on the orient axis by this factor to add a gap between dodged elements.

        .. versionadded:: 0.13.0    rÙ   zÁ    width : float
        Width allotted to each element on the orient axis. When `native_scale=True`,
        it is relative to the minimum distance between two values in the native scale.    r  av      dodge : "auto" or bool
        When hue mapping is used, whether elements should be narrowed and shifted along
        the orient axis to eliminate overlap. If `"auto"`, set to `True` when the
        orient variable is crossed with the categorical variable or `False` otherwise.

        .. versionchanged:: 0.13.0

            Added `"auto"` mode as a new default.    r{   zR    linewidth : float
        Width of the lines that frame the plot elements.    r‰  zy    linecolor : color
        Color to use for line elements, when `fill` is True.

        .. versionadded:: v0.13.0    Ú	log_scalea“      log_scale : bool or number, or pair of bools or numbers
        Set axis scale(s) to log. A single value sets the data axis for any numeric
        axes in the plot. A pair of values sets each axis independently.
        Numeric values are interpreted as the desired base (default 10).
        When `None` or `False`, seaborn defers to the existing Axes scale.

        .. versionadded:: v0.13.0    Únative_scalezß    native_scale : bool
        When True, numeric or datetime values on the categorical axis will maintain
        their original scaling rather than being converted to fixed indices.

        .. versionadded:: v0.13.0    Ú	formatterz­    formatter : callable
        Function for converting categorical data into strings. Affects both grouping
        and tick labels.

        .. versionadded:: v0.13.0    rL   aÅ      legend : "auto", "brief", "full", or False
        How to draw the legend. If "brief", numeric `hue` and `size`
        variables will be represented with a sample of evenly spaced values.
        If "full", every group will get an entry in the legend. If "auto",
        choose between brief or full representation based on number of levels.
        If `False`, no legend data is added and no legend is drawn.

        .. versionadded:: v0.13.0    r’   zŒ    err_kws : dict
        Parameters of :class:`matplotlib.lines.Line2D`, for the error bar artists.

        .. versionadded:: v0.13.0    Úax_inzh    ax : matplotlib Axes
        Axes object to draw the plot onto, otherwise uses the current Axes.    Úax_outzY    ax : matplotlib Axes
        Returns the Axes object with the plot drawn onto it.    r$   zH    boxplot : A traditional box-and-whisker plot with a similar API.    r%   zL    violinplot : A combination of boxplot and kernel density estimation.    r"   zš    stripplot : A scatterplot where one variable is categorical. Can be used
                in conjunction with other plots to show each observation.    r#   z•    swarmplot : A categorical scatterplot where the points do not overlap. Can
                be used with other plots to show each observation.    r(   zK    barplot : Show point estimates and confidence intervals using bars.    r)   zL    countplot : Show the counts of observations in each categorical bin.    r'   zM    pointplot : Show point estimates and confidence intervals using dots.    r!   zG    catplot : Combine a categorical plot with a :class:`FacetGrid`.    r&   z<    boxenplot : An enhanced boxplot for larger datasets.    ry   Tr2   r  rT  F)r.   r/   r0   rP   rk   r>   r1   rj   rs  rˆ  r  rÙ   r‡  rO  r‰  r{   rŠ  rr  ru  rt  rv  rL   rÍ   c                ó\  — t        | t        |||¬«      ||||¬«      }|€t        j                  «       }|j                  j
                  r|S |dk(  r|j                  «       }|j                  j                  |j                  «      dk(  s|s|j                  |j                  ||¬«       |j                  ||¬«       |j                  ||«      }|j                  |||«      \  }}|
r|	nd}	|j                  ||||	¬«       t        |j                   |||j#                  «       D ��ci c]  \  }}|d	v sŒ||“Œ c}}|	¬
«      }|j%                  |||j&                  «      }|j)                  ||||
||||||¬«
       |j+                  |«       |j-                  ||j                  ¬«       |S c c}}w )Nr-   ©r4   r5   rP   r>   r1   rL   r2   r@   ©rP   rv  ©rt  r;   ©rj   rP   Únormrs  ©r±   r1   Úfcr[  ©rs  ©
rÙ   r  r‡  rˆ  rO  r1   r‰  r{   rŠ  r¾   r<   )r+   r`   ÚpltÚgcarE   rÅ   r×   rI   rK   r>   Úscale_categoricalÚ_attachru   rr   Úmap_huer   r   ra   r¶   r¸   r£  Ú_add_axis_labelsrÏ   )r4   r.   r/   r0   rP   rk   r>   r1   rj   rs  rˆ  r  rÙ   r‡  rO  r‰  r{   rŠ  rr  ru  rt  rv  rL   rÍ   r„   Úprn   ro   s                               rX   r$   r$   5  s¥  € ô 	ØÜ˜˜a SÔ)ØØØØô	€Að 
€zÜ�W‰W‹Yˆà‡{�{×ÒØˆ	à�‚à—‘Ó!ˆà‡{�{‡��q—x‘xÓ  MÒ1¹Ø	×Ñ˜AŸH™H¨E¸YÐÔGà‡I�Iˆb˜I€IÔ&ð ×1Ñ1°'¸9ÓE€IØ×*Ñ*¨5°'¸9ÓEÑ€GˆYá#‘¨€JØ‡I�I�g Y°XÈ*€IÔUÜØ
�‰˜˜eØ Ÿ,™,›.×S‘$�!�Q¨AÐ1RÒ,RˆˆA‰ÓSØô€Eð
 ×#Ñ# I¨u°a·j±jÓA€Ià‡L�LØØØØØØØØØØð ô ð ×Ñ�rÔØ×Ñ�r §¡ÐÔ)à€Iùó+ 	Ts   Ä$F(Ä1F(a      Draw a box plot to show distributions with respect to categories.

    A box plot (or box-and-whisker plot) shows the distribution of quantitative
    data in a way that facilitates comparisons between variables or across
    levels of a categorical variable. The box shows the quartiles of the
    dataset while the whiskers extend to show the rest of the distribution,
    except for points that are determined to be "outliers" using a method
    that is a function of the inter-quartile range.

    {categorical_narrative}

    Parameters
    ----------
    {categorical_data}
    {input_params}
    {order_vars}
    {orient}
    {color}
    {palette}
    {saturation}
    {fill}
    {dodge}
    {width}
    {gap}
    whis : float or pair of floats
        Paramater that controls whisker length. If scalar, whiskers are drawn
        to the farthest datapoint within *whis * IQR* from the nearest hinge.
        If a tuple, it is interpreted as percentiles that whiskers represent.
    {linecolor}
    {linewidth}
    fliersize : float
        Size of the markers used to indicate outlier observations.
    {hue_norm}
    {log_scale}
    {native_scale}
    {formatter}
    {legend}
    {ax_in}
    kwargs : key, value mappings
        Other keyword arguments are passed through to
        :meth:`matplotlib.axes.Axes.boxplot`.

    Returns
    -------
    {ax_out}

    See Also
    --------
    {violinplot}
    {stripplot}
    {swarmplot}
    {catplot}

    Examples
    --------
    .. include:: ../docstrings/boxplot.rst

    rH  rz   éd   Úscottr;   r£   )!r.   r/   r0   rP   rk   r>   r1   rj   rs  rˆ  rÛ  r
  rÙ   r  r‡  r{   r‰  ÚcutÚgridsizer    Ú	bw_adjustr›   rœ   rr  rv  rt  ru  rL   r‚   rš   rŸ   r  rÍ   c       !         óü  — t        | t        |||¬«      ||||¬«      }#|!€t        j                  «       }!|#j                  j
                  r|!S |dk(  r|#j                  «       }|#j                  j                  |#j                  «      dk(  s|s|#j                  |#j                  ||¬«       |#j                  |!|¬«       |#j                  ||«      }|#j                  |||«      \  }}|
r|	nd}	|#j                  ||||	¬«       t        |!j                   |||"j#                  «       D �$�%ci c]  \  }$}%|$d	v sŒ|$|%“Œ c}%}$|	¬
«      }|#j%                  |||#j&                  «      }|#j)                  ||||«      \  }}|#j+                  ||«      }t        ||||¬«      }&| €i n| j-                  «       } |#j/                  ||||||
||||||&| |"¬«       |#j1                  |!«       |#j3                  |!|#j                  ¬«       |!S c c}%}$w )Nr-   rz  r2   r@   r{  r|  r;   r}  r  r�  )rŒ  r�  r    rŽ  ©rÙ   r  r‡  r
  r1   rˆ  r‰  r{   rÛ  r›   rœ   r  r  r¾   r<   )r+   r`   rƒ  r„  rE   rÅ   r×   rI   rK   r>   r…  r†  ru   rr   r‡  r   r   ra   r¶   r¸   r�   r¡   r±  r3  rˆ  rÏ   )'r4   r.   r/   r0   rP   rk   r>   r1   rj   rs  rˆ  rÛ  r
  rÙ   r  r‡  r{   r‰  rŒ  r�  r    rŽ  r›   rœ   rr  rv  rt  ru  rL   r‚   rš   rŸ   r  rÍ   r„   r‰  rn   ro   r  s'                                          rX   r%   r%   ²  s  € ô 	ØÜ˜˜a SÔ)ØØØØô	€Að 
€zÜ�W‰W‹Yˆà‡{�{×ÒØˆ	à�‚à—‘Ó!ˆà‡{�{‡��q—x‘xÓ  MÒ1¹Ø	×Ñ˜AŸH™H¨E¸YÐÔGà‡I�Iˆb˜I€IÔ&ð ×1Ñ1°'¸9ÓE€IØ×*Ñ*¨5°'¸9ÓEÑ€GˆYá#‘¨€JØ‡I�I�g Y°XÈ*€IÔUÜØ
�‰˜˜eØ Ÿ,™,›.×S‘$�!�Q¨AÐ1RÒ,RˆˆA‰ÓSØô€Eð
 ×#Ñ# I¨u°a·j±jÓA€Ià !× :Ñ :Øˆy˜,¨ó!Ñ€L�+ð ×'Ñ'¨¨IÓ6€IÜ�s X¸ÈiÔX€GØÐ'‘¨Y¯^©^Ó-=€Ià‡N�NØØØØØØØØØØ!ØØØØð ô ð" ×Ñ�rÔØ×Ñ�r §¡ÐÔ)à€IùóC 	Ts   Ä$G8Ä1G8a,      Draw a patch representing a KDE and add observations or box plot statistics.

    A violin plot plays a similar role as a box-and-whisker plot. It shows the
    distribution of data points after grouping by one (or more) variables.
    Unlike a box plot, each violin is drawn using a kernel density estimate
    of the underlying distribution.

    {categorical_narrative}

    Parameters
    ----------
    {categorical_data}
    {input_params}
    {order_vars}
    {orient}
    {color}
    {palette}
    {saturation}
    {fill}
    inner : {{"box", "quart", "point", "stick", None}}
        Representation of the data in the violin interior. One of the following:

        - `"box"`: draw a miniature box-and-whisker plot
        - `"quart"`: show the quartiles of the data
        - `"point"` or `"stick"`: show each observation
    split : bool
        Show an un-mirrored distribution, alternating sides when using `hue`.

        .. versionchanged:: v0.13.0
            Previously, this option required a `hue` variable with exactly two levels.
    {width}
    {dodge}
    {gap}
    {linewidth}
    {linecolor}
    cut : float
        Distance, in units of bandwidth, to extend the density past extreme
        datapoints. Set to 0 to limit the violin within the data range.
    gridsize : int
        Number of points in the discrete grid used to evaluate the KDE.
    bw_method : {{"scott", "silverman", float}}
        Either the name of a reference rule or the scale factor to use when
        computing the kernel bandwidth. The actual kernel size will be
        determined by multiplying the scale factor by the standard deviation of
        the data within each group.

        .. versionadded:: v0.13.0
    bw_adjust: float
        Factor that scales the bandwidth to use more or less smoothing.

        .. versionadded:: v0.13.0
    density_norm : {{"area", "count", "width"}}
        Method that normalizes each density to determine the violin's width.
        If `area`, each violin will have the same area. If `count`, the width
        will be proportional to the number of observations. If `width`, each
        violin will have the same width.

        .. versionadded:: v0.13.0
    common_norm : bool
        When `True`, normalize the density across all violins.

        .. versionadded:: v0.13.0
    {hue_norm}
    {formatter}
    {log_scale}
    {native_scale}
    {legend}
    scale : {{"area", "count", "width"}}
        .. deprecated:: v0.13.0
            See `density_norm`.
    scale_hue : bool
        .. deprecated:: v0.13.0
            See `common_norm`.
    bw : {{'scott', 'silverman', float}}
        .. deprecated:: v0.13.0
            See `bw_method` and `bw_adjust`.
    inner_kws : dict of key, value mappings
        Keyword arguments for the "inner" plot, passed to one of:

        - :class:`matplotlib.collections.LineCollection` (with `inner="stick"`)
        - :meth:`matplotlib.axes.Axes.scatter` (with `inner="point"`)
        - :meth:`matplotlib.axes.Axes.plot` (with `inner="quart"` or `inner="box"`)

        Additionally, with `inner="box"`, the keywords `box_width`, `whis_width`,
        and `marker` receive special handling for the components of the "box" plot.

        .. versionadded:: v0.13.0
    {ax_in}
    kwargs : key, value mappings
        Keyword arguments for the violin patches, passsed through to
        :meth:`matplotlib.axes.Axes.fill_between`.

    Returns
    -------
    {ax_out}

    See Also
    --------
    {boxplot}
    {stripplot}
    {swarmplot}
    {catplot}

    Examples
    --------
    .. include:: ../docstrings/violinplot.rst

    r¥  Útukeyçyé&1¬|?çš™™™™™©?)r.   r/   r0   rP   rk   r>   r1   rj   rs  rˆ  r  rÙ   r‡  r{   r‰  r¤   r¸  r¹  rº  r»  rr  rt  ru  rv  rL   r‚   r¼  r½  r¾  rÍ   c                ó2  — t        | t        |||¬«      ||||¬«      } |€t        j                  «       }| j                  j
                  r|S |dk(  r| j                  «       }| j                  j                  | j                  «      dk(  s|s| j                  | j                  ||¬«       | j                  ||¬«       | j                  ||«      }| j                  |||«      \  }}| j                  ||«      }|
r|	nd}	| j                  ||||	¬«       t!        |j"                  ||i |	¬	«      }| j%                  ||| j&                  «      }| j)                  ||||
||||||||||||¬
«       | j+                  |«       | j-                  || j                  ¬«       |S )Nr-   rz  r2   r@   r{  r|  r;   r}  r�  ©rÙ   r  r‡  rˆ  r1   r‰  r{   r¤   r¸  r¹  rº  r»  r¼  r½  r¾  r¾   r<   )r+   r`   rƒ  r„  rE   rÅ   r×   rI   rK   r>   r…  r†  ru   rr   r¥   r‡  r   r   r¶   r¸   rÖ  rˆ  rÏ   )!r4   r.   r/   r0   rP   rk   r>   r1   rj   rs  rˆ  r  rÙ   r‡  r{   r‰  r¤   r¸  r¹  rº  r»  rr  rt  ru  rv  rL   r‚   r¼  r½  r¾  rÍ   r„   r‰  s!                                    rX   r&   r&   p  s¤  € ô 	ØÜ˜˜a SÔ)ØØØØô	€Að 
€zÜ�W‰W‹Yˆà‡{�{×ÒØˆ	à�‚à—‘Ó!ˆà‡{�{‡��q—x‘xÓ  MÒ1¹Ø	×Ñ˜AŸH™H¨E¸YÐÔGà‡I�Iˆb˜I€IÔ&ð ×1Ñ1°'¸9ÓE€IØ×*Ñ*¨5°'¸9ÓEÑ€GˆYð ×,Ñ,¨U°LÓA€Lá#‘¨€JØ‡I�I�g Y°XÈ*€IÔUÜØ
�‰˜˜eØ
àô	€Eð ×#Ñ# I¨u°a·j±jÓA€Ià‡M�MØØØØØØØØ!ØØ!ØØØØØØð! ô ð& ×Ñ�rÔØ×Ñ�r §¡ÐÔ)à€IrY   an      Draw an enhanced box plot for larger datasets.

    This style of plot was originally named a "letter value" plot because it
    shows a large number of quantiles that are defined as "letter values".  It
    is similar to a box plot in plotting a nonparametric representation of a
    distribution in which all features correspond to actual observations. By
    plotting more quantiles, it provides more information about the shape of
    the distribution, particularly in the tails.

    {categorical_narrative}

    Parameters
    ----------
    {categorical_data}
    {input_params}
    {order_vars}
    {orient}
    {color}
    {palette}
    {saturation}
    {fill}
    {dodge}
    {width}
    {gap}
    {linewidth}
    {linecolor}
    width_method : {{"exponential", "linear", "area"}}
        Method to use for the width of the letter value boxes:

        - `"exponential"`: Represent the corresponding percentile
        - `"linear"`: Decrease by a constant amount for each box
        - `"area"`: Represent the density of data points in that box
    k_depth : {{"tukey", "proportion", "trustworthy", "full"}} or int
        The number of levels to compute and draw in each tail:

        - `"tukey"`: Use log2(n) - 3 levels, covering similar range as boxplot whiskers
        - `"proportion"`: Leave approximately `outlier_prop` fliers
        - `"trusthworthy"`: Extend to level with confidence of at least `trust_alpha`
        - `"full"`: Use log2(n) + 1 levels and extend to most extreme points
    outlier_prop : float
        Proportion of data expected to be outliers; used when `k_depth="proportion"`.
    trust_alpha : float
        Confidence threshold for most extreme level; used when `k_depth="trustworthy"`.
    showfliers : bool
        If False, suppress the plotting of outliers.
    {hue_norm}
    {log_scale}
    {native_scale}
    {formatter}
    {legend}
    box_kws: dict
        Keyword arguments for the box artists; passed to
        :class:`matplotlib.patches.Rectangle`.

        .. versionadded:: v0.12.0
    line_kws: dict
        Keyword arguments for the line denoting the median; passed to
        :meth:`matplotlib.axes.Axes.plot`.

        .. versionadded:: v0.12.0
    flier_kws: dict
        Keyword arguments for the scatter denoting the outlier observations;
        passed to :meth:`matplotlib.axes.Axes.scatter`.

        .. versionadded:: v0.12.0
    {ax_in}
    kwargs : key, value mappings
        Other keyword arguments are passed to :class:`matplotlib.patches.Rectangle`,
        superceded by those in `box_kws`.

    Returns
    -------
    {ax_out}

    See Also
    --------
    {violinplot}
    {boxplot}
    {catplot}

    Notes
    -----

    For a more extensive explanation, you can read the paper that introduced the plot:
    https://vita.had.co.nz/papers/letter-value-plot.html

    Examples
    --------
    .. include:: ../docstrings/boxenplot.rst

    rö  )r.   r/   r0   rP   rk   r  r  r>   r1   rj   rÔ   r  r{   rr  rt  ru  rv  rL   rÍ   c                ó0  — t        | t        |||¬«      |||	|¬«      }|€t        j                  «       }|j                  j
                  r|S |j                  j                  |j                  «      dk(  s|s|j                  |j                  ||¬«       |j                  ||¬«       |j                  |
|«      }|j                  |	|
|«      \  }
}|j                  |
||¬«       t        |j                  ||	|«      }	|j!                  ||	|j"                  «      }|j%                  dd«       |j                  d	|«      }|j'                  |d
z  ||¬«       |j)                  |||	|¬«       |j+                  |«       |j-                  ||j                  ¬«       |S )Nr-   rz  r@   r{  r|  ©rj   rP   r~  rï  r[   r®  rz   ©r®  r  r{   ©r  r  r1   r¾   r<   )r+   r`   rƒ  r„  rE   rÅ   rI   rK   r>   r…  r†  ru   rr   r‡  r   r  r¶   r¸   rr  r�   r%  rˆ  rÏ   )r4   r.   r/   r0   rP   rk   r  r  r>   r1   rj   rÔ   r  r{   rr  rt  ru  rv  rL   rÍ   r„   r‰  s                         rX   r"   r"     s…  € ô 	ØÜ˜˜a SÔ)ØØØØô	€Að 
€zÜ�W‰W‹Yˆà‡{�{×ÒØˆ	à‡{�{‡��q—x‘xÓ  MÒ1¹Ø	×Ñ˜AŸH™H¨E¸YÐÔGà‡I�Iˆb˜I€IÔ&ð ×1Ñ1°'¸9ÓE€IØ×*Ñ*¨5°'¸9ÓEÑ€GˆYà‡I�I�g Y°X€IÔ>Ü˜2Ÿ:™: s¨E°6Ó:€EØ×#Ñ# I¨u°a·j±jÓA€Ià
×Ñ�h Ô"Ø�:‰:�c˜4Ó €Dà
‡M�MØ
�!‰)ØØð ô ð ‡M�MØØØØð	 ô ð ×Ñ�rÔØ×Ñ�r §¡ÐÔ)à€IrY   aÅ      Draw a categorical scatterplot using jitter to reduce overplotting.

    A strip plot can be drawn on its own, but it is also a good complement
    to a box or violin plot in cases where you want to show all observations
    along with some representation of the underlying distribution.

    {categorical_narrative}

    Parameters
    ----------
    {categorical_data}
    {input_params}
    {order_vars}
    jitter : float, `True`/`1` is special-cased
        Amount of jitter (only along the categorical axis) to apply. This
        can be useful when you have many points and they overlap, so that
        it is easier to see the distribution. You can specify the amount
        of jitter (half the width of the uniform random variable support),
        or use `True` for a good default.
    dodge : bool
        When a `hue` variable is assigned, setting this to `True` will
        separate the strips for different hue levels along the categorical
        axis and narrow the amount of space allotedto each strip. Otherwise,
        the points for each level will be plotted in the same strip.
    {orient}
    {color}
    {palette}
    size : float
        Radius of the markers, in points.
    edgecolor : matplotlib color, "gray" is special-cased
        Color of the lines around each point. If you pass `"gray"`, the
        brightness is determined by the color palette used for the body
        of the points. Note that `stripplot` has `linewidth=0` by default,
        so edge colors are only visible with nonzero line width.
    {linewidth}
    {hue_norm}
    {log_scale}
    {native_scale}
    {formatter}
    {legend}
    {ax_in}
    kwargs : key, value mappings
        Other keyword arguments are passed through to
        :meth:`matplotlib.axes.Axes.scatter`.

    Returns
    -------
    {ax_out}

    See Also
    --------
    {swarmplot}
    {boxplot}
    {violinplot}
    {catplot}

    Examples
    --------
    .. include:: ../docstrings/stripplot.rst

    )r.   r/   r0   rP   rk   r  r>   r1   rj   rÔ   r  r{   rr  rt  ru  rv  rL   r'  rÍ   c                ól  — t        | t        |||¬«      ||||¬«      }|€t        j                  «       }|j                  j
                  r|S |j                  j                  |j                  «      dk(  s|s|j                  |j                  ||¬«       |j                  ||¬«       |j                  s|S |j                  |	|«      }|j                  ||	|«      \  }	}|j                  |	||¬«       t        |j                   |||«      }|j#                  |||j$                  «      }|j'                  dd«       |j                  d	|
«      }
|€|
d
z  }|j)                  t        |
dz  ||¬«      «       |j+                  ||||¬«       |j-                  |«       |j/                  ||j                  ¬«       |S )Nr-   rz  r@   r{  r|  r—  rï  r[   r®  é
   rz   r˜  ©r  r1   r'  r¾   r<   )r+   r`   rƒ  r„  rE   rÅ   rI   rK   r>   r…  r†  rM   ru   rr   r‡  r   r  r¶   r¸   rr  r�   r>  rˆ  rÏ   )r4   r.   r/   r0   rP   rk   r  r>   r1   rj   rÔ   r  r{   rr  rt  ru  rv  rL   r'  rÍ   r„   r‰  s                         rX   r#   r#   —  s¢  € ô 	ØÜ˜˜a SÔ)ØØØØô	€Að 
€zÜ�W‰W‹Yˆà‡{�{×ÒØˆ	à‡{�{‡��q—x‘xÓ  MÒ1¹Ø	×Ñ˜AŸH™H¨E¸YÐÔGà‡I�Iˆb˜I€IÔ&à�=Š=Øˆ	ð ×1Ñ1°'¸9ÓE€IØ×*Ñ*¨5°'¸9ÓEÑ€GˆYà‡I�I�g Y°X€IÔ>Ü˜2Ÿ:™: s¨E°6Ó:€EØ×#Ñ# I¨u°a·j±jÓA€Ià
×Ñ�h Ô"Ø�:‰:�c˜4Ó €DàÐØ˜2‘Iˆ	à
‡M�M”$Ø
�!‰)ØØôô ð ‡M�MØØØØð	 ô ð ×Ñ�rÔØ×Ñ�r §¡ÐÔ)à€IrY   a      Draw a categorical scatterplot with points adjusted to be non-overlapping.

    This function is similar to :func:`stripplot`, but the points are adjusted
    (only along the categorical axis) so that they don't overlap. This gives a
    better representation of the distribution of values, but it does not scale
    well to large numbers of observations. This style of plot is sometimes
    called a "beeswarm".

    A swarm plot can be drawn on its own, but it is also a good complement
    to a box or violin plot in cases where you want to show all observations
    along with some representation of the underlying distribution.

    {categorical_narrative}

    Parameters
    ----------
    {categorical_data}
    {input_params}
    {order_vars}
    dodge : bool
        When a `hue` variable is assigned, setting this to `True` will
        separate the swarms for different hue levels along the categorical
        axis and narrow the amount of space allotedto each strip. Otherwise,
        the points for each level will be plotted in the same swarm.
    {orient}
    {color}
    {palette}
    size : float
        Radius of the markers, in points.
    edgecolor : matplotlib color, "gray" is special-cased
        Color of the lines around each point. If you pass `"gray"`, the
        brightness is determined by the color palette used for the body
        of the points.
    {linewidth}
    {log_scale}
    {native_scale}
    {formatter}
    {legend}
    {ax_in}
    kwargs : key, value mappings
        Other keyword arguments are passed through to
        :meth:`matplotlib.axes.Axes.scatter`.

    Returns
    -------
    {ax_out}

    See Also
    --------
    {boxplot}
    {violinplot}
    {stripplot}
    {catplot}

    Examples
    --------
    .. include:: ../docstrings/swarmplot.rst

    r   )rq  é_   iè  )r.   r/   r0   rP   rk   r¿  ÚerrorbarÚn_bootÚseedÚunitsrá  r>   r1   rj   rs  rˆ  rr  rÙ   r  r‡  rt  ru  rv  rL   r–   r’   rq  r”   r•   rÍ   c                óÔ  — t        j                  ||«      }|t        u rd}t        | t	        ||||
|¬«      ||||¬«      } |€t        j                  «       }| j                  j                  r|S |dk(  r| j                  «       }| j                  j                  | j                  «      dk(  s|s| j                  | j                  ||¬«       | j                  ||¬«       | j                  ||«      }| j!                  |||«      \  }}|r|nd}| j#                  ||||¬	«       t%        |j&                  ||||¬
«      }d| j                  v rt(        nt*        }! |!||||	¬«      }"|€i n#t-        |t.        j0                  j2                  «      }| j5                  ||||«      \  }}| j7                  |"||||||||¬«	       | j9                  |«       | j;                  || j                  ¬«       |S )NrÔ   ©r.   r/   r0   r¡  râ  rz  r2   r@   r{  r|  r;   r}  r�  râ  ©rŸ  r   ©	rC  r  rÙ   r‡  r1   rˆ  r–   r’   r¾   r<   )r   Ú_deprecate_cirÆ   rk  r`   rƒ  r„  rE   rÅ   r×   rI   rK   r>   r…  r†  ru   rr   r‡  r   rW  r   r   r   rd   rp  rq  r—   r[  rˆ  rÏ   )#r4   r.   r/   r0   rP   rk   r¿  rž  rŸ  r   r¡  rá  r>   r1   rj   rs  rˆ  rr  rÙ   r  r‡  rt  ru  rv  rL   r–   r’   rq  r”   r•   rÍ   r„   r‰  Úagg_clsrC  s#                                      rX   r(   r(   	  sß  € ô ×"Ñ" 8¨RÓ0€Hð ”CÑØˆ	äØÜ˜˜a S°¸gÔFØØØØô	€Að 
€zÜ�W‰W‹Yˆà‡{�{×ÒØˆ	à�‚à—‘Ó!ˆà‡{�{‡��q—x‘xÓ  MÒ1¹Ø	×Ñ˜AŸH™H¨E¸YÐÔGà‡I�Iˆb˜I€IÔ&ð ×1Ñ1°'¸9ÓE€IØ×*Ñ*¨5°'¸9ÓEÑ€GˆYá#‘¨€JØ‡I�I�g Y°XÈ*€IÔUÜ˜2Ÿ6™6 3¨¨vÀ*ÔM€Eà$,°·±Ñ$;Õ ÔAS€GÙ˜ H°VÀ$ÔG€JØ�O‰bÔ)9¸'Ä3Ç9Á9×CSÑCSÓ)T€Gð ×,Ñ,¨W°hÀÈ'ÓRÑ€GˆWà‡K�KØØØØØØØØØð ô 
ð ×Ñ�rÔØ×Ñ�r §¡ÐÔ)à€IrY   aS      Show point estimates and errors as rectangular bars.

    A bar plot represents an aggregate or statistical estimate for a numeric
    variable with the height of each rectangle and indicates the uncertainty
    around that estimate using an error bar. Bar plots include 0 in the
    axis range, and they are a good choice when 0 is a meaningful value
    for the variable to take.

    {categorical_narrative}

    Parameters
    ----------
    {categorical_data}
    {input_params}
    {order_vars}
    {stat_api_params}
    {orient}
    {color}
    {palette}
    {saturation}
    {fill}
    {hue_norm}
    {width}
    {dodge}
    {gap}
    {log_scale}
    {native_scale}
    {formatter}
    {legend}
    {capsize}
    {err_kws}
    {ci}
    {errcolor}
    {errwidth}
    {ax_in}
    kwargs : key, value mappings
        Other parameters are passed through to :class:`matplotlib.patches.Rectangle`.

    Returns
    -------
    {ax_out}

    See Also
    --------
    {countplot}
    {pointplot}
    {catplot}

    Notes
    -----

    For datasets where 0 is not a meaningful value, a :func:`pointplot` will
    allow you to focus on differences between levels of one or more categorical
    variables.

    It is also important to keep in mind that a bar plot shows only the mean (or
    other aggregate) value, but it is often more informative to show the
    distribution of values at each level of the categorical variables. In those
    cases, approaches such as a :func:`boxplot` or :func:`violinplot` may be
    more appropriate.

    Examples
    --------
    .. include:: ../docstrings/barplot.rst

    )r.   r/   r0   rP   rk   r¿  rž  rŸ  r   r¡  rá  r1   rj   rr  rD  rE  r  rt  ru  r>   r–   rv  rL   r’   rq  r•   rƒ   r‚   rÍ   c          
      ó´  — t        j                  ||«      }t        | t        ||||
|¬«      |||€|€dn||¬«      }|€t	        j
                  «       }|j                  j                  r|S |j                  j                  |j                  «      dk(  s|s|j                  |j                  ||¬«       |j                  ||¬«       |j                  ||«      }|j                  |||«      \  }}|j                  |||¬«       t!        |j"                  |||«      }d|j                  v rt$        nt&        }  | ||||	¬	«      }!|€i n#t)        |t*        j,                  j.                  «      }|j1                  |||«       |j3                  |d ||«      \  }}|j5                  |!|||||||¬
«       |j7                  |«       |j9                  ||j                  ¬«       |S )Nr£  ÚC0rz  r@   r{  r|  r—  râ  r¤  ©rC  rD  rE  r  r1   r–   r’   r¾   r<   )r   r¦  rk  r`   rƒ  r„  rE   rÅ   rI   rK   r>   r…  r†  ru   rr   r‡  r   r¶  r   r   r   rd   rp  rq  rˆ   r—   rR  rˆ  rÏ   )"r4   r.   r/   r0   rP   rk   r¿  rž  rŸ  r   r¡  rá  r1   rj   rr  rD  rE  r  rt  ru  r>   r–   rv  rL   r’   rq  r•   rƒ   r‚   rÍ   r„   r‰  r§  rC  s"                                     rX   r'   r'   £	  sË  € ô ×"Ñ" 8¨RÓ0€HäØÜ˜˜a S°¸gÔFØØð �}¨¨‰d¸uØô		€Að 
€zÜ�W‰W‹Yˆà‡{�{×ÒØˆ	à‡{�{‡��q—x‘xÓ  MÒ1¹Ø	×Ñ˜AŸH™H¨E¸YÐÔGà‡I�Iˆb˜I€IÔ&ð ×1Ñ1°'¸9ÓE€IØ×*Ñ*¨5°'¸9ÓEÑ€GˆYà‡I�I�g Y°X€IÔ>Ü˜2Ÿ7™7 C¨°Ó7€Eà$,°·±Ñ$;Õ ÔAS€GÙ˜ H°VÀ$ÔG€JØ�O‰bÔ)9¸'Ä3Ç9Á9×CSÑCSÓ)T€Gð ×Ñ˜u d¨FÔ3Ø×,Ñ,¨W°d¸HÀgÓNÑ€GˆWà‡M�MØØØØØØØØð ô 	ð ×Ñ�rÔØ×Ñ�r §¡ÐÔ)à€IrY   aÝ	      Show point estimates and errors using lines with markers.

    A point plot represents an estimate of central tendency for a numeric
    variable by the position of the dot and provides some indication of the
    uncertainty around that estimate using error bars.

    Point plots can be more useful than bar plots for focusing comparisons
    between different levels of one or more categorical variables. They are
    particularly adept at showing interactions: how the relationship between
    levels of one categorical variable changes across levels of a second
    categorical variable. The lines that join each point from the same `hue`
    level allow interactions to be judged by differences in slope, which is
    easier for the eyes than comparing the heights of several groups of points
    or bars.

    {categorical_narrative}

    Parameters
    ----------
    {categorical_data}
    {input_params}
    {order_vars}
    {stat_api_params}
    {color}
    {palette}
    markers : string or list of strings
        Markers to use for each of the `hue` levels.
    linestyles : string or list of strings
        Line styles to use for each of the `hue` levels.
    dodge : bool or float
        Amount to separate the points for each level of the `hue` variable along
        the categorical axis. Setting to `True` will apply a small default.
    {log_scale}
    {native_scale}
    {orient}
    {capsize}
    {formatter}
    {legend}
    {err_kws}
    {ci}
    {errwidth}
    join : bool
        If `True`, connect point estimates with a line.

        .. deprecated:: v0.13.0
            Set `linestyle="none"` to remove the lines between the points.
    scale : float
        Scale factor for the plot elements.

        .. deprecated:: v0.13.0
            Control element sizes with :class:`matplotlib.lines.Line2D` parameters.
    {ax_in}
    kwargs : key, value mappings
        Other parameters are passed through to :class:`matplotlib.lines.Line2D`.

        .. versionadded:: v0.13.0

    Returns
    -------
    {ax_out}

    See Also
    --------
    {barplot}
    {catplot}

    Notes
    -----
    It is important to keep in mind that a point plot shows only the mean (or
    other estimator) value, but in many cases it may be more informative to
    show the distribution of values at each level of the categorical variables.
    In that case, other approaches such as a box or violin plot may be more
    appropriate.

    Examples
    --------
    .. include:: ../docstrings/pointplot.rst

    rÝ  )r.   r/   r0   rP   rk   r>   r1   rj   rs  rˆ  rr  r’  rÙ   r  r‡  rt  ru  rv  rL   rÍ   c                óf  — |€|�d}t        |«      rdnd }n%|�|€d}t        |«      rdnd }n|�|�t        d«      ‚t        | t        |||¬«      ||||¬«      }|€t	        j
                  «       }|j                  j                  r|S |dk(  r|j                  «       }|j                  j                  |j                  «      dk(  s|s|j                  |j                  ||¬	«       |j                  ||¬
«       |j                  ||«      }|j                  |||«      \  }}|
r|	nd}	|j!                  ||||	¬«       t#        |j$                  ||||	«      }dddœ|j                     }|j&                  dk(  rd|j                  |<   t)        dg d¢|«       ||j*                  |<   |dk7  r6|dk(  rdnd}|j                  |xx   t-        |j                  «      |z  z  cc<   t/        dd ¬«      }|j1                  ||||||
di |¬«	       |j3                  |«       |j5                  ||j                  ¬«       |S )Nr/   r;   r.   ú(Cannot pass values for both `x` and `y`.r-   rz  r2   r@   r{  r|  r}  r8   r6   r’  ©rÝ  ÚpercentÚprobabilityÚ
proportionrÝ  r®  rŠ  Úsum©rž  r   r¥  r<   )rº   Ú	TypeErrorrk  r`   rƒ  r„  rE   rÅ   r×   rI   rK   r>   r…  r†  ru   rr   r‡  r   rW  rD   r   r5   rÆ   r   r[  rˆ  rÏ   )r4   r.   r/   r0   rP   rk   r>   r1   rj   rs  rˆ  rr  r’  rÙ   r  r‡  rt  ru  rv  rL   rÍ   r„   r‰  Ú
count_axisÚdenomrC  s                             rX   r)   r)   7
  s2  € ð 	€y�Q�]ØˆÜ�a”‰A˜d‰Ø	
ˆ˜1˜9ØˆÜ�a”‰A˜d‰Ø	
ˆ˜1˜=ÜÐBÓCÐCäØÜ˜˜a SÔ)ØØØØô	€Að 
€zÜ�W‰W‹Yˆà‡{�{×ÒØˆ	à�‚à—‘Ó!ˆà‡{�{‡��q—x‘xÓ  MÒ1¹Ø	×Ñ˜AŸH™H¨E¸YÐÔGà‡I�Iˆb˜I€IÔ&ð ×1Ñ1°'¸9ÓE€IØ×*Ñ*¨5°'¸9ÓEÑ€GˆYá#‘¨€JØ‡I�I�g Y°XÈ*€IÔUÜ˜2Ÿ6™6 3¨¨v°zÓB€Eà Ñ% a§h¡hÑ/€JØ‡~�~˜ÒØ"#ˆ�‰�JÑä�FÒMÈtÔTØ"€A‡K�K�
ÑØˆw‚Ø˜yÒ(‘¨aˆØ	�‰�JÓ¤3 q§{¡{Ó#3°eÑ#;Ñ;Óä# E°DÔ9€Jà‡K�KØØØØØØØØØð ô 
ð ×Ñ�rÔØ×Ñ�r §¡ÐÔ)à€IrY   ao      Show the counts of observations in each categorical bin using bars.

    A count plot can be thought of as a histogram across a categorical, instead
    of quantitative, variable. The basic API and options are identical to those
    for :func:`barplot`, so you can compare counts across nested variables.

    Note that :func:`histplot` function offers similar functionality with additional
    features (e.g. bar stacking), although its default behavior is somewhat different.

    {categorical_narrative}

    Parameters
    ----------
    {categorical_data}
    {input_params}
    {order_vars}
    {orient}
    {color}
    {palette}
    {saturation}
    {hue_norm}
    stat : {{'count', 'percent', 'proportion', 'probability'}}
        Statistic to compute; when not `'count'`, bar heights will be normalized so that
        they sum to 100 (for `'percent'`) or 1 (otherwise) across the plot.

        .. versionadded:: v0.13.0
    {width}
    {dodge}
    {log_scale}
    {native_scale}
    {formatter}
    {legend}
    {ax_in}
    kwargs : key, value mappings
        Other parameters are passed through to :class:`matplotlib.patches.Rectangle`.

    Returns
    -------
    {ax_out}

    See Also
    --------
    histplot : Bin and count observations with additional options.
    {barplot}
    {catplot}

    Examples
    --------
    .. include:: ../docstrings/countplot.rst

    Ústrip)!r.   r/   r0   rÒ   rÑ   Úkindr¿  rž  rŸ  r   r¡  rá  rP   rk   Ú	row_orderÚ	col_orderÚcol_wraprU  Úaspectrt  ru  rv  r>   r1   rj   rr  rL   Ú
legend_outÚsharexÚshareyÚmargin_titlesÚ	facet_kwsrq  c       !         ó.  — d|"v r1d|› d�}#t        j                  |#t        «       |"j                  d«       g d¢}$g d¢}%|dv rt        }&nt
        }&|dk(  r!|€|�d}d	}n|�|€d
}d	}n|�|�t        d«      ‚ |&| t        |||||||¬«      |||dk(  r|€|€dn||¬«      }'dD ]4  }(|(|'j                  v sŒ|'j                  |(   �Œ"d|(› d�|'j                  |(<   Œ6 |'j                  j                  |'j                  ¬«      })|)j                  d d …|)j                  j                  «        f   })|'j                  j                  dd «      }*|'j                  j                  dd «      }+| €i } t        dy|)|+|*|||||||||dœ| ¤Ž},|'j                   }-|r|'j"                  |'j$                     dk(  r|'j'                  |'j$                  ||¬«       |'j)                  |,|¬«       |-s|,S |'j+                  ||«      }|'j-                  |||«      \  }}t/        j0                  ||!«      }|"j                  d||$v r|"j                  dd«      rdnd	«      }.|'j3                  ||||.¬«       |€|€dn|}|.d	k  rt5        ||.«      }|dv rXt7        |"t8        j:                  j<                  «      }"|'j?                  |"j                  dt@        «      ||'jB                  «      |"d<   |"j                  d d!«      }/|"j                  d"||%v rd#nd$«      }0|0d$k(  r|'jE                  «       }0d%|'j                  v r(|d&vrd'|›d(�}#t        j                  |#d)¬*«       tF        }1ntH        }1|d+k(  ry|"j                  d,d«      }2|"jK                  «       }3|3jM                  d-d.«       |3jM                  d/d0«       d1|3vr|3j                  d2d3«      d)z  |3d1<   |'jO                  |2|0||3¬4«       �n|d5k(  r—|"j                  d6d7«      }4|"jK                  «       }3|3jM                  d-d.«       d1|3vr|3j                  d2d3«      d)z  |3d1<   |3jM                  d/d0«      €tQ        jR                  |3d1   «      d8z  |3d/<   |'jU                  |0||4|3¬9«       �n}|d:k(  r´|"jK                  «       }3|3j                  d;d0«      }5|3j                  dd«      }6|3j                  d<d=«      }7|3j                  d/d «      }8|3j                  d>d3«      }9|'j?                  |3j                  d?d$«      ||'jB                  «      }:|'jW                  |/|0|5|6|7||:|8|9|3¬@«
       �nÄ|dAk(  �r¶|"jK                  «       }3|3j                  d;d0«      }5|3j                  dd«      }6|3j                  dBd#«      };|3j                  dCd:«      }<|3j                  dDdE«      }=|3j                  dFd#«      }>|3j                  dGtX        «      }?|3j                  dHtX        «      }@|'j[                  |?|@|=|>«      \  }=}>|'j]                  |3j                  dItX        «      |3j                  dJdK«      «      }At        |3j                  dLd)«      |3j                  dMdN«      |3j                  dOd	«      |A¬P«      }B|3j                  dQi «      jK                  «       }C|3j                  d/d «      }8|3j                  d?d$«      }:|'j?                  |:||'jB                  «      }:|'j_                  |/|0|5|;||6|:|8|<|=|>|B|C|3¬R«       �n|dSk(  �rA|"jK                  «       }3|3j                  d;d0«      }5|3j                  dd«      }6|3j                  d?d$«      }:|3j                  d/d «      }8|3j                  dTdU«      }D|3j                  dVdW«      }E|3j                  dXdY«      }F|3j                  dZd7«      }G|3j                  d[d«      }H|3j                  d\i «      }I|3j                  d]i «      }J|3j                  d^i «      }KdG|3v r|'ja                  |3dG   E«      }E|'j?                  |:||'jB                  «      }:|'jc                  |/|0|5|6||:|8EDFGHIJK|3¬_«       �nÁ|dk(  rü |1|||	|
¬`«      }L|"j                  dat@        «      }M|"j                  dbt@        «      }N|'je                  |"j                  dGtX        «      |"j                  dctX        «      |"«       |'jg                  t7        |"j                  ddi «      t8        jh                  jj                  «      d |"j                  detX        «      |"j                  dfd0«      ¬g«      \  }O}P|'jm                  |L|M|N|0||P|O|"¬h«       �nÀ|dik(  rÍ |1|||	|
¬`«      }L|'jg                  t7        |"j                  ddi «      t8        jh                  jj                  «      |"j                  djtX        «      |"j                  detX        «      |"j                  dfd0«      ¬k«      \  }O}P|"j                  d;d0«      }5|"j                  dd«      }6|'jo                  |L|0|/|5||6|P|O|"¬l«	       nî|dk(  rØtI        dmd ¬n«      }Ldd
doœ|'j$                     }Qd	|'j                  |Q<   g dp¢}Rtq        dq|R|"j                  dqd«      «      }S|S|'j                  |Q<   |Sdk7  r6Sdrk(  rdNnd	}T|'j                  Qxx   ts        |'j                  «      |Tz  z  cc<   |"j                  d;d0«      }5|"j                  dd«      }6|'jo                  L|0|/|5||6d0i |"¬l«	       nds|›dt�}#t        |#«      ‚|,jt                  jv                  D ]  }U|'jy                  |U|'j$                  ¬u«       Œ! |,j{                  |'j                  j                  d
«      |'j                  j                  d«      «       |,j}                  «        |,j                  «        |,jt                  jv                  D ]  }U|,j�                  |U«       d |U_A        Œ |d$k(  r|'j„                   xr |'j†                  dvk7  }Vnt‰        |«      }VVr,|,j‹                  |'j                  j                  dw«      |¬x«       | �| |,_F        |,S )zNrÍ   zXcatplot is a figure-level function and does not accept target axes. You may wish to try r¶  )rW  rÝ  rH  r  rÐ  )r¶  ÚswarmrÚ  )rW  rÚ  rÝ  rÝ  r/   r;   r.   r¬  )r.   r/   r0   rÒ   rÑ   r¡  râ  rÚ  r©  rz  )rÒ   rÑ   ræ   r9   rÑ   rÒ   )r4   rÒ   rÑ   rº  r¸  r¹  r½  r¾  r¼  r¿  rU  r»  r@   r{  r|  rs  rˆ  Try   r}  )r¶  rÂ  r  rÙ   r  r  Fr2   râ  )rW  rÚ  z0The `weights` parameter has no effect with kind=ú.rz   r\   r¶  r  rï  r[   r{   r   r®  rÔ   rö  r™  rÂ  r'  r“  r›  rœ  rH  r‡  rO  rT  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‘  r¤   r¥  r¹  r’  rº  r»  r¼  r½  r¾  r•  r¤  rD  rE  rƒ   r’   r•   r–   )r•   r–   rª  rW  r”   )r”   r•   r–   r¥  r±  r²  r8   r­  r’  r®  zInvalid `kind`: zV. Options are 'strip', 'swarm', 'box', 'boxen', 'violin', 'bar', 'count', and 'point'.r<   r6   r0   )rí   Úlabel_orderro  )Grg   rh   ÚUserWarningrH   rk  r+   Ú
ValueErrorr`   r5   rE   rF   Úlocr:   Ú
duplicatedrK   r   rM   rI   r>   r…  r†  ru   rr   r   r¦  r‡  r   r   rd   r  ÚPathCollectionr¶   r   r¸   r×   r   r   r±  rr  r%  r«   r8  r>  r£  r   r�   r¡   r3  r¥   rÖ  rˆ   r—   rp  rq  rR  r[  r   rÆ   ÚaxesÚflatrÏ   Úset_axis_labelsÚ
set_titlesÚtight_layoutÚ_update_legend_dataÚlegend_r^   rD   rî   Ú
add_legendr4   )Wr4   r.   r/   r0   rÒ   rÑ   r·  r¿  rž  rŸ  r   r¡  rá  rP   rk   r¸  r¹  rº  rU  r»  rt  ru  rv  r>   r1   rj   rr  rL   r¼  r½  r¾  r¿  rÀ  rq  r„   rq   Údesaturated_kindsÚundodged_kindsÚPlotterr‰  rå   Ú
facet_dataÚcol_nameÚrow_nameÚgrM   rs  rÙ   r  r§  r  r¾   r'  r‡  rˆ  rO  r{   rŠ  r‰  r
  rÛ  r›   rœ   r‚   rš   r    r  r  r¸  r¤   r¹  rº  r»  r¼  r½  r¾  rC  rD  rE  r’   r–   r´  Ústat_optionsr’  rµ  rÍ   rô   sW                                                                                          rX   r!   r!   »
  s  € ð ˆv�~ð3Ø37°&¸ð>ˆä�‰�cœ;Ô'Ø�
‰
�4ÔâBÐÚ0€NàÐ(Ñ(Ü(‰ä%ˆàˆw‚Øˆ9˜˜ØˆFØ‰AØˆ]˜q˜yØˆFØ‰AØˆ]˜q˜}ÜÐGÓHÐHáØÜØ�1˜# 3¨C°uÀWô
ð Øð ˜g’o¨'¨/¸e¸m‰dÐQVØô	€Að ò *ˆà�!—+‘+Ò !§+¡+¨cÑ"2Ñ":Ø!" 3 % q˜zˆA�K‰K˜Òð*ð —‘×#Ñ#¨A¯K©KÐ#Ó8€JØ—‘¢ J×$6Ñ$6×$AÑ$AÓ$CÐ#CÐ CÑD€Jà�{‰{�‰˜u dÓ+€HØ�{‰{�‰˜u dÓ+€HàÐØˆ	äð 	Ø˜X¨8¸hØ y¸ÈØ¨]Ø˜fñ		ð
 ñ	€Að —-‘-€Ká˜1Ÿ;™; q§x¡xÑ0°MÒAØ	×Ñ˜AŸH™H¨E¸YÐÔGà‡I�Iˆa˜9€IÔ%áØˆð ×1Ñ1°'¸9ÓE€IØ×*Ñ*¨5°'¸9ÓEÑ€GˆYô ×"Ñ" 8¨RÓ0€Hà—‘ØØÐ)Ñ)¨f¯j©j¸ÀÔ.F‰ÈAó€Jð ‡I�I�g Y°XÈ*€IÔUð €{Ø˜‘¨5ˆØ˜Š>Ü˜u jÓ1ˆEàÐ!Ñ!Ü! &¬#¯/©/×*HÑ*HÓIˆØ×1Ñ1Ø�J‰J�{¤GÓ,¨e°Q·Z±Zó
ˆˆ{Ñð �J‰J�w Ó$€EØ�J‰J�w¨°Ñ)?¡ÀVÓL€EØ�‚Ø—‘Ó!ˆà�1—;‘;ÑØÐ'Ñ'ØDÀTÀHÈAÐNˆCÜ�M‰M˜#¨!Õ,Ü$‰ä$ˆàˆw‚à—‘˜H dÓ+ˆØ—;‘;“=ˆØ×Ñ˜H aÔ(Ø×Ñ˜K¨Ô+Ø�hÑØ$ŸL™L¨°Ó3°qÑ8ˆH�S‰Mà	�‰ØØØØð	 	ö 	
ð 
�Šà—j‘j °Ó4ˆØ—;‘;“=ˆØ×Ñ˜H aÔ(Ø�hÑØ$ŸL™L¨°Ó3°qÑ8ˆH�S‰Mà×Ñ˜{¨AÓ.Ð6Ü$&§G¡G¨H°S©MÓ$:¸RÑ$?ˆH�[Ñ!à	�‰ØØØ#Øð	 	ö 	
ð 
�Šà—;‘;“=ˆØ�l‰l˜5 !Ó$ˆØ�|‰|˜F DÓ)ˆØ�|‰|˜F CÓ(ˆØ—L‘L ¨dÓ3ˆ	Ø—L‘L ¨aÓ0ˆ	Ø×'Ñ'Ø�L‰L˜ fÓ-¨u°a·j±jó
ˆ	ð 	
�‰ØØØØØØØØØØð 	ö 	
ð 
�Ó	à—;‘;“=ˆØ�l‰l˜5 !Ó$ˆØ�|‰|˜F DÓ)ˆØ—‘˜W eÓ,ˆØ—‘˜W eÓ,ˆØ—|‘| N°FÓ;ˆØ—l‘l =°%Ó8ˆà—‘˜W¤jÓ1ˆØ—L‘L ¬jÓ9ˆ	Ø$%×$>Ñ$>Ø�9˜l¨Kó%
Ñ!ˆ�kð ×+Ñ+Ø�L‰L˜œzÓ*¨H¯L©L¸ÀgÓ,Nó
ˆ	ô Ø—‘˜U AÓ&Ø—\‘\ *¨cÓ2Ø—l‘l ;°Ó2Øô	
ˆð —L‘L ¨bÓ1×6Ñ6Ó8ˆ	Ø—L‘L ¨dÓ3ˆ	Ø—L‘L ¨fÓ5ˆ	Ø×'Ñ'¨	°5¸!¿*¹*ÓEˆ	à	�‰ØØØØØØØØØØ%Ø#ØØØð 	ö 	
ð" 
�‹à—;‘;“=ˆØ�l‰l˜5 !Ó$ˆØ�|‰|˜F DÓ)ˆØ—L‘L ¨fÓ5ˆ	Ø—L‘L ¨dÓ3ˆ	Ø—,‘,˜y¨'Ó2ˆØ—|‘| N°MÓBˆØ—|‘| N°EÓ:ˆØ—l‘l =°$Ó7ˆØ—\‘\ ,°Ó5ˆ
Ø—,‘,˜y¨"Ó-ˆØ—L‘L ¨bÓ1ˆ	Ø—<‘< 
¨BÓ/ˆØ�hÑØ×4Ñ4Ø˜Ñ! <óˆLð ×'Ñ'¨	°5¸!¿*¹*ÓEˆ	à	�‰ØØØØØØØØ%ØØ%Ø#Ø!ØØØØð! 	ö 	
ð& 
�Šá˜Y¨¸ÀdÔKˆ
à—*‘*˜Y¬Ó0ˆØ—Z‘Z ¬gÓ6ˆ
ð 	
×"Ñ"Ø�J‰J�w¤
Ó+Ø�J‰J�vœzÓ*Øô	
ð
 ×0Ñ0Ü˜VŸZ™Z¨	°2Ó6¼¿	¹	×8HÑ8HÓIØØ—Z‘Z 
¬JÓ7Ø—J‘J˜y¨!Ó,ð	 1ó 
Ñˆ�ð 	
�‰Ø!ØØ!ØØØØØð 	ö 		
ð 
�Šá˜Y¨¸ÀdÔKˆ
à×0Ñ0Ü˜VŸZ™Z¨	°2Ó6¼¿	¹	×8HÑ8HÓIØ—Z‘Z 
¬JÓ7Ø—Z‘Z 
¬JÓ7Ø—J‘J˜y¨!Ó,ð	 1ó 
Ñˆ�ð �j‰j˜ Ó"ˆØ�z‰z˜& $Ó'ˆà	�‰Ø!ØØØØØØØØð 	õ 
	
ð 
�Šä'¨¸Ô=ˆ
à SÑ)¨!¯(©(Ñ3ˆ
Ø"#ˆ�‰�JÑâHˆÜ˜v |°V·Z±ZÀÈÓ5PÓQˆØ"&ˆ�‰�JÑØ�7Š?Ø 9Ò,‘C°!ˆEØ�K‰K˜
Ó#¤s¨1¯;©;Ó'7¸%Ñ'?Ñ?Ó#à�j‰j˜ Ó"ˆØ�z‰z˜& $Ó'ˆà	�‰Ø!ØØØØØØØØð 	õ 
	
ð ˜t˜hð 'Eð Eð 	ô ˜‹oÐà�f‰f�k‰kò .ˆØ	×Ñ˜2 A§H¡HÐÕ-ð.ð ×Ñ�a—k‘k—o‘o cÓ*¨A¯K©K¯O©O¸CÓ,@ÔAØ‡L�L„NØ‡N�NÔà�f‰f�k‰kò ˆØ	×Ñ˜bÔ!Øˆ�
ðð �ÒØ×*Ñ*Ð*ÒG¨q¯~©~ÀÑ/G‰ä˜6“lˆÙØ	�‰˜1Ÿ;™;Ÿ?™?¨5Ó1¸yˆÔIàÐàˆŒà€HrY   a•	      Figure-level interface for drawing categorical plots onto a FacetGrid.

    This function provides access to several axes-level functions that
    show the relationship between a numerical and one or more categorical
    variables using one of several visual representations. The `kind`
    parameter selects the underlying axes-level function to use.

    Categorical scatterplots:

    - :func:`stripplot` (with `kind="strip"`; the default)
    - :func:`swarmplot` (with `kind="swarm"`)

    Categorical distribution plots:

    - :func:`boxplot` (with `kind="box"`)
    - :func:`violinplot` (with `kind="violin"`)
    - :func:`boxenplot` (with `kind="boxen"`)

    Categorical estimate plots:

    - :func:`pointplot` (with `kind="point"`)
    - :func:`barplot` (with `kind="bar"`)
    - :func:`countplot` (with `kind="count"`)

    Extra keyword arguments are passed to the underlying function, so you
    should refer to the documentation for each to see kind-specific options.

    {categorical_narrative}

    After plotting, the :class:`FacetGrid` with the plot is returned and can
    be used directly to tweak supporting plot details or add other layers.

    Parameters
    ----------
    {categorical_data}
    {input_params}
    row, col : names of variables in `data` or vector data
        Categorical variables that will determine the faceting of the grid.
    kind : str
        The kind of plot to draw, corresponds to the name of a categorical
        axes-level plotting function. Options are: "strip", "swarm", "box", "violin",
        "boxen", "point", "bar", or "count".
    {stat_api_params}
    {order_vars}
    row_order, col_order : lists of strings
        Order to organize the rows and/or columns of the grid in; otherwise the
        orders are inferred from the data objects.
    {col_wrap}
    {height}
    {aspect}
    {native_scale}
    {formatter}
    {orient}
    {color}
    {palette}
    {hue_norm}
    {legend}
    {legend_out}
    {share_xy}
    {margin_titles}
    facet_kws : dict
        Dictionary of other keyword arguments to pass to :class:`FacetGrid`.
    kwargs : key, value pairings
        Other keyword arguments are passed through to the underlying plotting
        function.

    Returns
    -------
    :class:`FacetGrid`
        Returns the :class:`FacetGrid` object with the plot on it for further
        tweaking.

    Examples
    --------
    .. include:: ../docstrings/catplot.rst

    c                   ó<   — e Zd ZdZd
d„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)r8  z6Modifies a scatterplot artist to show a beeswarm plot.c                 ó.   — || _         || _        || _        y ré  )r>   rÙ   r'  )rO   r>   rÙ   r'  s       rX   rC   zBeeswarm.__init__“  s   € àˆŒØˆŒ
Ø&ˆÕrY   c                 óò  — |j                   }|j                  j                  }|j                  «       }| j                  dk(  rdnd}||dd…|f<   |j
                  \  }}|j                  j                  |«      }	| j                  dk(  r|	dd…ddgf   }	|j                  «       }
|
j                  dk(  r#t        j                  |
|	j                  d   «      }
|j                  «       j                  «       }t        j                  |
«      |z   dz  |dz  z  }t        j                   |	|f   }	t        j"                  |	dd…df   «      }|	|   }t        j$                  |«      }| j'                  |«      ||<   | j                  dk(  r|dd…ddgf   }n|dd…dd…f   }|j                  j)                  «       j                  |«      j
                  \  }}t+        || j                  «      \  }}| j                  dk(  r| j-                  ||||«       n| j-                  ||||«       | j                  dk(  r%|j/                  t        j                   ||f   «       y|j/                  t        j                   ||f   «       y)z?Swarm `points`, a PathCollection, around the `center` position.r/   r;   r   Nrz   rô  )rÊ  r<  Údpir9  r>   r€  r1  rõ  Ú	get_sizesrÔ   r«   Úrepeatr:  Úget_linewidthr²  r8  Úc_ÚargsortÚ
empty_liker6  Úinvertedr   Úadd_guttersÚset_offsets)rO   r$  r(  rÍ   rÝ  Úorig_xy_dataÚcat_idxÚorig_x_dataÚorig_y_dataÚorig_xyÚsizesrá   ÚradiiÚsorterÚorig_xyrÚnew_xyrÚnew_xyÚ
new_x_dataÚ
new_y_dataÚt_fwdÚt_invs                        rX   Ú__call__zBeeswarm.__call__™  s9  € ð �[‰[ˆØ�i‰i�m‰mˆð ×)Ñ)Ó+ˆð —{‘{ cÒ)‘!¨qˆØ#)ˆ’Q˜�ZÑ ð
 $0§>¡>Ñ ˆ�[Ø—,‘,×(Ñ(¨Ó6ˆð �;‰;˜#ÒØša ! Q ˜iÑ(ˆGð × Ñ Ó"ˆØ�:‰:˜Š?Ü—I‘I˜e W§]¡]°1Ñ%5Ó6ˆEØ×#Ñ#Ó%×*Ñ*Ó,ˆÜ—‘˜“ $Ñ&¨!Ñ+¨s°R©xÑ8ˆÜ—%‘%˜ ˜Ñ'ˆô —‘˜G¢A q D™MÓ*ˆØ˜6‘?ˆô —-‘- Ó)ˆØŸ-™-¨Ó1ˆ�‰ð �;‰;˜#ÒØšQ  A ˜YÑ'‰FàšQ   ˜U‘^ˆFØ!#§¡×!6Ñ!6Ó!8×!BÑ!BÀ6Ó!J×!LÑ!LÑˆ
�Jô 0°°D·K±KÓ@‰ˆˆuØ�;‰;˜#ÒØ×Ñ˜Z¨°¸Õ>à×Ñ˜Z¨°¸Ô>ð �;‰;˜#ÒØ×ÑœrŸu™u [°*Ð%<Ñ=Õ>à×ÑœrŸu™u Z°Ð%<Ñ=Õ>rY   c                 ó\  — |d   }t        j                  |d   «      }|dd D ]†  }| j                  ||«      }| j                  ||«      }t        j                  |dd…df   |z
  «      }|t        j
                  |«         }| j                  ||«      }t        j                  ||g«      }Œˆ |S )z.Adjust x position of points to avoid overlaps.)r   r   r   r;   N)r«   Ú
atleast_2dÚcould_overlapÚposition_candidatesÚabsrâ  Úfirst_non_overlapping_candidateÚvstack)	rO   rï  ÚmidlinerÂ  Úxyr_iÚ	neighborsÚ
candidatesr  Ú	new_xyr_is	            rX   r6  zBeeswarm.beeswarmÕ  sÁ   € ð ˜4‘.ˆô —‘˜h q™kÓ*ˆð ˜a˜b�\ò 	2ˆEð ×*Ñ*¨5°%Ó8ˆIð ×1Ñ1°%¸ÓCˆJô —f‘f˜Zª¨1¨Ñ-°Ñ7Ó8ˆGØ#¤B§J¡J¨wÓ$7Ñ8ˆJð ×<Ñ<¸ZÈÓSˆIô —I‘I˜u iÐ0Ó1‰Eð%	2ð( ˆrY   c                 ó°   — |\  }}}g }t        |«      D ]&  }|\  }}}	||z
  ||	z   k  r|j                  |«       Œ& n t        j                  |«      ddd…   S )zAReturn a list of all swarm points that could overlap with target.Nr¦  )Úreversedr  r«   r  )
rO   rÿ  rÂ  ræ   Úy_iÚr_ir   Úxyr_jÚy_jÚr_js
             rX   rù  zBeeswarm.could_overlapõ  sm   € ð ‰ˆˆ3�Øˆ	Ü˜e“_ò 	ˆEØ‰KˆAˆs�CØ�c‘	˜c C™iÒ(Ø× Ñ  Õ'áð	ô �x‰x˜	Ó"¡4 R 4Ñ(Ð(rY   c                 ó  — |g}|\  }}}d}|D ]h  \  }}	}
||	z
  }t        j                  t        ||
z   dz  |dz  z
  d«      «      dz  }||z
  ||f||z   ||f}}|r||g}n||g}|j                  |«       | }Œj t        j                  |«      S )z@Return a list of coordinates that might be valid by adjusting x.Trz   r   gÍÌÌÌÌÌð?)r«   r8  râ   Úextendr  )rO   rÿ  r   r  Úx_ir  r  Ú
left_firstÚx_jr  r	  r0  r/  ÚclÚcrÚnew_candidatess                   rX   rú  zBeeswarm.position_candidates  s½   € à�Wˆ
Ø‰ˆˆS�#Øˆ
Ø&ò 		(‰MˆC��cØ�s‘ˆBÜ—‘œ˜c C™i¨AÑ-°°a±Ñ7¸Ó;Ó<¸tÑCˆBØ˜B‘h  SÐ)¨C°"©H°c¸3Ð+?�ˆBÙØ"$ b ‘à"$ b �Ø×Ñ˜nÔ-Ø'˜‰Jð		(ô �x‰x˜
Ó#Ð#rY   c                 ód  — t        |«      dk(  r|d   S |dd…df   }|dd…df   }|dd…df   }|D ]s  }|\  }}}	||z
  }
||z
  }t        j                  |
«      t        j                  |«      z   }t        j                  ||	z   «      }t        j                  ||k\  «      }|sŒq|c S  t	        d«      ‚)z>Find the first candidate that does not overlap with the swarm.r   Nr;   rz   z<No non-overlapping candidates found. This should not happen.)rÆ   r«   Úsquarerc   ÚRuntimeError)rO   r  r   Úneighbors_xÚneighbors_yÚneighbors_rrÿ  r  r  r  r/  r0  Úsq_distancesÚ
sep_neededÚgood_candidates                  rX   rü  z(Beeswarm.first_non_overlapping_candidate  sË   € ô ˆy‹>˜QÒØ˜a‘=Ð à¢ 1 ‘oˆØ¢ 1 ‘oˆØ¢ 1 ‘oˆàò 	ˆEà!‰MˆC��cà˜sÑ"ˆBØ˜sÑ"ˆBÜŸ9™9 R›=¬2¯9©9°R«=Ñ8ˆLäŸ™ ;°Ñ#4Ó5ˆJô
  ŸV™V L°JÑ$>Ó?ˆNâØ’ð!	ô$ ØJó
ð 	
rY   c                 ó‚  — | j                   dz  } | ||«      |z
  «      }||k  }|j                  «       r|||<    | ||«      |z   «      }||kD  }	|	j                  «       r|||	<   |	|z   j                  «       t        |«      z  }
|
| j                  kD  r+dj                  |
«      }t        j                  |t        «       |S )z2Stop points from extending beyond their territory.rz   zi{:.1%} of the points cannot be placed; you may want to decrease the size of the markers or use stripplot.)	rÙ   r  r±  rÆ   r'  Úformatrg   rh   rÅ  )rO   r$  r(  Ú	trans_fwdÚ	trans_invÚ
half_widthÚ
low_gutterÚoff_lowÚhigh_gutterÚoff_highÚgutter_proprq   s               rX   rå  zBeeswarm.add_gutters5  sÄ   € à—Z‘Z !‘^ˆ
Ù™y¨Ó0°:Ñ=Ó>ˆ
Ø˜:Ñ%ˆØ�;‰;Œ=Ø(ˆF�7‰OÙ¡	¨&Ó 1°JÑ >Ó?ˆØ˜KÑ'ˆØ�<‰<Œ>Ø*ˆF�8Ñà 'Ñ)×.Ñ.Ó0´3°v³;Ñ>ˆØ˜×)Ñ)Ò)ðHç‰f�[Ó!ð ô �M‰M˜#œ{Ô+àˆrY   N)r.   r  r“  )rb  rc  rd  Ú__doc__rC   rö  r6  rù  rú  rü  rå  ro  rY   rX   r8  r8  ‘  s+   „ Ù@ó'ò:?òxò@)ò$ò"
óBrY   r8  ÚBoxPlotArtistsz$box median whiskers caps fliers meanc                   ó<   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
r†  c                 ó(  — |d   | _         |d   | _        |d   | _        |d   | _        |d   | _        |d   | _        d | _        g | j                   ¢| j                  ¢| j                  ¢| j                  ¢| j                  ¢| j
                  ¢| _        y )Nri  rm  Úwhiskersrn  rX  Úmeans)ri  rm  r)  rn  rX  r*  Ú_labelÚ	_children)rO   Úartist_dicts     rX   rC   zBoxPlotContainer.__init__Q  sª   € à  Ñ)ˆŒ
Ø" 9Ñ-ˆŒØ# JÑ/ˆŒØ Ñ'ˆŒ	Ø! (Ñ+ˆŒØ  Ñ)ˆŒ
àˆŒð
Ø�Z‰Zð
à�\‰\ð
ð �]‰]ð
ð �Y‰Yð	
ð
 �[‰[ð
ð �Z‰Zð
ˆ�rY   c                 ó4   — dt        | j                  «      › d�S )Nz<BoxPlotContainer object with z boxes>)rÆ   ri  ©rO   s    rX   Ú__repr__zBoxPlotContainer.__repr__d  s   € Ø/´°D·J±J³Ð/@ÀÐHÐHrY   c           	      ó˜  — t        d|z  d|z  dz   «      }t        | j                  r| j                  |   ng | j                  r| j                  |   ng | j                  r| j                  |   ng | j
                  r| j
                  |   ng | j                  r| j                  |   ng | j                  r| j                  |   «      S g «      S )Nrz   )Úslicer&  ri  rm  r)  rn  rX  r*  )rO   ÚidxÚ
pair_slices      rX   Ú__getitem__zBoxPlotContainer.__getitem__g  sª   € Ü˜1˜s™7 A¨¡G¨a¡KÓ0ˆ
ÜØ#ŸzšzˆD�J‰J�sŠO¨rØ!%§¢ˆD�L‰L˜Ò°2Ø)-¯ªˆD�M‰M˜*Ò%¸BØ%)§Y¢YˆD�I‰I�jÒ!°BØ $§¢ˆD�K‰K˜Ò°Ø"ŸjšjˆD�J‰J�s‰Oó
ð 	
ð /1ó
ð 	
rY   c              #   óp   ‡ K  — ˆ fd„t        t        ‰ j                  «      «      D «       E d {  –—†  y 7 Œ­w)Nc              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wré  ro  )rê  rš  rO   s     €rX   rë  z,BoxPlotContainer.__iter__.<locals>.<genexpr>s  s   øè ø€ Ò< �D˜•GÑ<ùs   ƒ)r³  rÆ   ri  r/  s   `rX   Ú__iter__zBoxPlotContainer.__iter__r  s"   øè ø€ Û<¤U¬3¨t¯z©z«?Ó%;Ô<×<Ò<ús   ƒ+6®4¯6c                 ó   — | j                   S ré  ©r+  r/  s    rX   Ú	get_labelzBoxPlotContainer.get_labelu  s   € Ø�{‰{ÐrY   c                 ó   — || _         y ré  r:  )rO   r¼   s     rX   Ú	set_labelzBoxPlotContainer.set_labelx  s	   € Øˆ�rY   c                 ó   — | j                   S ré  )r,  r/  s    rX   Úget_childrenzBoxPlotContainer.get_children{  s   € Ø�~‰~ÐrY   c                 óF   — | j                   D ]  }|j                  «        Œ y ré  )r,  Úremove)rO   Úchilds     rX   rA  zBoxPlotContainer.remove~  s   € Ø—^‘^ò 	ˆEØ�L‰L�Nñ	rY   N)rb  rc  rd  rC   r0  r5  r8  r;  r=  r?  rA  ro  rY   rX   r†  r†  O  s+   „ ò
ò&Iò	
ò=òòòórY   r†  ro  ré  )Mr  r   Útextwrapr   rg   Úcolorsysr   Ú	functoolsr   Únumpyr«   Úpandasrw  Ú
matplotlibrd   Úmatplotlib.cbookr   Úmatplotlib.collectionsr   Úmatplotlib.markersr	   Úmatplotlib.patchesr
   Úmatplotlib.pyplotÚpyplotrƒ  Úseaborn._core.typingr   r   Úseaborn._baser   r   r   Úseaborn._stats.densityr   Úseabornr   Úseaborn.utilsr   r   r   r   r   r   r   r   Úseaborn._compatr   Úseaborn._statisticsr   r   r   Úseaborn.palettesr   Úseaborn.axisgridr   r    Ú__all__r+   rk  r`   Ú_categorical_docsr�   r$   r  r%  r%   r&   r"   r#   r(   r'   r)   r!   r8  r&  r†  ro  rY   rX   ú<module>rZ     sv  ðÝ "Ý Û Ý Ý ã Û ã Ý -Ý 2Ý *Ý (Ý ç 4ß HÑ HÝ &Ý ÷	÷ 	ó 	õ 9÷ñ õ
 +ß 3ò€ôW&˜-ô W&ôt(5Ð0ô 5ñ
 ò `ñ !ð "ô 	ð`ñ ð ô 	ð`ñ" ð ô 	ð#`ñ, ð ô 	ð-`ñ6 ð ô 	ð7`ñd ð ô 	ðe`ñr ð 	ô 		ðs`ñF ð ô 	ðG`ñN ð ô 	ðO`ñZ ð ô 	ð[`ñh ð ô 	ði`ñt ð ô 	ðu`ñ| ð ô 	ð}`ñJ ð ô 	ðK`ñX 
ð ô 
	ðY`ñd 	ð ô 		ðe`ñp ð ô 	ðq`ñz ð 	ô 		ð{`ñN ð ô 	ðO`ñV ð ô 	ðW`ñb ð ô 	ðc`ñt ð ô 	ðu`ñB ð ô 	ðC`ñP ð 	ô 		ðQ`ñd ð ô 	ðe`ñp ð ô 	ðq`ñx ð ô 	ðy`ñD ð ô 	ðE`ñJ ð ô 	ðK`ñP ð ô 	ðQ`ñX ð ô 	ðY`ñ` ð ô 	ða`ñf ð ô 	ðg`ñl ð ô 	ðm`ñr ð ô 	ðs`ñx ð ô 	ðy`Ð ðD × Ñ ˜Ô %ð 
ð=Ø˜D d°$À$Ø�t T°cÀØ
˜ ¨°vÈØ˜T°ÀÐQUØ�dô=ð@:‘&ð :ó :	÷t 
‰ñu:%ðt $ñu:%€„ð| 
ðLØ˜D d°$À$Ø�t T°cÀØ
�u B¨f¸!Ø˜f¨!°cØ °ÀUØ˜T¨TÀØ˜¨z¸jØ�tôLð^l‘Vð ló l	÷X 
‰ñYl%ðX $ñYl%€
Ô ð` 
ðIØ˜D d°$À$Ø�t T°cÀØ
˜ ¨T¸TØ¨¸eÐQUØ˜d¨dÀÐRVØ˜¨T¸TÈDØôIðX[‘Fð [ó [	÷v 
‰ñw[%ðv $ñw[%€	Ô ð~ 
ð:Ø˜D d°$À$Ø�u T°¸tØ	
�g¨Ø˜T°ÀÈfØô:ðz=‘Fð =ó =	÷z 
‰ñ{=%ðz $ñ{=%€	Ô ðB 
ð=Ø˜D d°$À$Ø
˜ D°$Ø	
�d a°$À$Ø $¨vÀ3Øô=ð@;‘Fð ;ó ;	÷v 
‰ñw;%ðv $ñw;%€	Ô ð~ 
ðFØ˜D d°$À$Ø˜z°$¸TÈØ˜ T°4ÀCØ	˜ B¨f¸!ÀtØ $¨v¸qÈ$Ø˜J°ÀôFðRB‘&ð Bó B	÷D 
‰ñEB%ðD $ñEB%€„ðL 
ð?Ø˜D d°$À$Ø˜z°$¸TÈØ˜ d°TÀ7Ø˜e¨tÀ%Ø˜ d°6À4Ø˜J¨Z¸zØô?ðDO‘Fð Oó O	÷^ 
‰ñ_O%ð^ $ñ_O%€	Ô ðf 
ðKØ˜D d°$À$Ø�t T°cÀÈtØ	˜ &¨a¸4ÈeØ˜6 dô	Kð\3‘Fð 3ó 3	÷f 
‰ñg3%ðf $ñg3%€	Ô ðn 
ðCØ˜D d°¸$ÀWØ˜z°$¸TÈØ˜¨¸ÈØ˜! A°ÀEØ˜4 t°TÀDØ˜d¨4¸Ø 4¨JôCðLM‘&ð Mó M	÷Z 
‰ñ[M%ðZ $ñ[M%€„÷`xñ xñv Ð,Ð.TÓU€÷1ò 1rY   