a
    Pªfö‰  ã                   @   sü   d Z ddlmZ ddlmZ ddlZddlZddlmZ ddl	m
Z
 ddlm  mZ ddlZddlmZmZmZmZ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!m"Z"m#Z#m$Z$ e %d	¡Z&e %d
¡Z'ej(dd„ ƒZ)ej(dd„ ƒZ*G dd„ dƒZ+dS )z Test cases for Series.plot é    )Údatetime)ÚchainN)Úis_platform_linux)Únp_version_gte1p24)Ú	DataFrameÚSeriesÚ
date_rangeÚperiod_rangeÚplotting)Ú_check_ax_scalesÚ_check_axes_shapeÚ_check_colorsÚ_check_grid_settingsÚ_check_has_errorbarsÚ_check_legend_labelsÚ_check_plot_worksÚ_check_text_labelsÚ_check_ticks_propsÚ_unpack_cyclerÚ
get_y_axisÚ
matplotlibzmatplotlib.pyplotc                   C   s"   t tjdtjdtdddddS )Né
   ©Údtypeú
2020-01-01©ÚperiodsÚts©ÚindexÚname)r   ÚnpÚarangeÚfloat64r   © r$   r$   úZ/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/plotting/test_series.pyr   '   s
    
ýr   c                   C   s$   t tdƒtjddd„ tdƒD ƒdS )Né   Úseriesc                 S   s   g | ]}d |› ‘qS )Zi_r$   ©Ú.0Úir$   r$   r%   Ú
<listcomp>3   ó    zseries.<locals>.<listcomp>)r   r    r   )r   Úranger!   r#   r$   r$   r$   r%   r'   0   s    ÿr'   c                   @   s¶  e Zd Zejjej dddiddig¡dd„ ƒƒZejjdd	„ ƒZejjej d
ddiddigddiddigddidddœgg¡dd„ ƒƒZ	ejjdd„ ƒZ
ejjdd„ ƒZdd„ Zej ddddejde d ¡d!d"d#g¡d$d%„ ƒZd&d'„ Zd(d)„ Zej di d*d+id*d,ig¡d-d.„ ƒZd/d0„ Zd1d2„ Zej di d3dig¡d4d5„ ƒZd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Zd>d?„ Zd@dA„ ZdBdC„ ZdDdE„ ZdFdG„ ZdHdI„ Z dJdK„ Z!ej dLdMe"dNdOdPg¡dQdR„ ƒZ#dSdT„ Z$dUdV„ Z%ejj&e'oâe(ƒ dWddXej dYdZd[g¡d\d]„ ƒƒZ)ejj&e'oe(ƒ dWddXej d^g d_¢g d`¢g¡dadb„ ƒƒZ*dcdd„ Z+dedf„ Z,dgdh„ Z-didj„ Z.dkdl„ Z/dmdn„ Z0dodp„ Z1dqdr„ Z2dsdt„ Z3dudv„ Z4dwdx„ Z5dydz„ Z6d{d|„ Z7d}d~„ Z8dd€„ Z9dd‚„ Z:dƒd„„ Z;d…d†„ Z<d‡dˆ„ Z=ej d‰dŠd‹g¡dŒd„ ƒZ>dŽd„ Z?ej dd‘d’gdMd’gdMe@ Ad’¡gd“e@ Bd”d•d’¡gg¡d–d—„ ƒZCd˜d™„ ZDdšd›„ ZEdœd„ ZFejj&dždŸd d¡„ ƒZGej deHjIjJeHjIjK ¡d¢d£„ ƒZLej deHjIjJeHjIjK ¡d¤d¥„ ƒZMej deHjIjJ¡d¦d§„ ƒZNej deHjIjJ¡d¨d©„ ƒZOej deHjIjJ¡dªd«„ ƒZPd¬d­„ ZQd®d¯„ ZRd°d±„ ZSejjej dddg¡ej d²eTe@ Ue@jV Wd³¡ Xd´¡¡ƒe@ Ue@jV Wd³¡ Xd´¡¡eYe@ Ue@jV Wd³¡ Xd´¡¡ƒeZe@ Ue@jV Wd³¡ Xdµ¡¡d¶d·gd¸g¡d¹dº„ ƒƒƒZ[ejjd»d¼„ ƒZ\ejjej d²eTe@ Ue@jV Wd³¡ Xd½¡¡ƒeZe@ Ue@jV Wd³¡ Xd¾¡¡d¶d·gd¸g¡d¿dÀ„ ƒƒZ]ejjdÁdÂ„ ƒZ^ejjdÃdÄ„ ƒZ_ejjdÅdÆ„ ƒZ`ejjdÇdÈ„ ƒZaejjdÉdÊ„ ƒZbej dËg dÌ¢¡dÍdÎ„ ƒZcdÏdÐ„ ZddÑdÒ„ ZedÓdÔ„ ZfdÕdÖ„ Zgd×dØ„ ZhdÙdÚ„ ZidÛdÜ„ Zjejj&dÝdŸdÞdß„ ƒZkej dddàg¡dádâ„ ƒZldãdä„ Zmdådæ„ Znej dçg dè¢g dé¢fg dê¢g dë¢fg¡dìdí„ ƒZodîdï„ Zpej dðg dñ¢¡ej dg dò¢¡dódô„ ƒƒZqej dLerjsdõd³död÷erjtdødùerjtd³dùgg¡dúdû„ ƒZudüdý„ Zvejjdþdÿ„ ƒZwdMS (   ÚTestSeriesPlotsÚkwargsÚlabelZfooÚ	use_indexFc                 C   s   t |jfi |¤Ž d S ©N©r   Úplot)Úselfr   r/   r$   r$   r%   Ú	test_plot8   s    zTestSeriesPlots.test_plotc                 C   s   t |jdd}t|dd d S )Nr   )Úrot©Zxrot)r   r4   r   )r5   r   Úaxesr$   r$   r%   Útest_plot_tick_props=   s    z$TestSeriesPlots.test_plot_tick_propszscale, exp_scaleÚlogyTÚyaxisÚlogZlogxÚxaxisZloglog)r>   r<   c                 C   s*   t |jfddi|¤Ž}t|fi |¤Ž d S )NÚstyleÚ.)r   r4   r   )r5   r   ÚscaleZ	exp_scaleÚaxr$   r$   r%   Útest_plot_scalesB   s    
z TestSeriesPlots.test_plot_scalesc                 C   s   t |d d… jjƒ d S ©Nr   )r   r4   Úbar©r5   r   r$   r$   r%   Útest_plot_ts_barO   s    z TestSeriesPlots.test_plot_ts_barc                 C   s   t |jjdd d S )NF©Ústacked)r   r4   ÚarearF   r$   r$   r%   Útest_plot_ts_area_stackedS   s    z)TestSeriesPlots.test_plot_ts_area_stackedc                 C   s$   t tdƒtdddƒ}t|jƒ d S )Né   r   r   )r   r-   r	   r   r4   )r5   Úserr$   r$   r%   Útest_plot_iseriesW   s    z!TestSeriesPlots.test_plot_iseriesÚkindÚlinerE   ÚbarhÚkdeÚscipy)ZmarksÚhistÚboxc                 C   s   t |d d… j|d d S )NrL   ©rO   r3   )r5   r'   rO   r$   r$   r%   Útest_plot_series_kinds[   s    z&TestSeriesPlots.test_plot_series_kindsc                 C   s   t |d d… jjƒ d S rD   )r   r4   rQ   ©r5   r'   r$   r$   r%   Útest_plot_series_barhi   s    z%TestSeriesPlots.test_plot_series_barhc                 C   s<   t ttj d¡ d¡ƒjjdd}t|j	d gdgd d S )Né   r   Úblack©Úcolorr   ©Z
facecolors)
r   r   r!   ÚrandomÚdefault_rngÚstandard_normalr4   rE   r   Úpatches)r5   rB   r$   r$   r%   Útest_plot_series_bar_axl   s    ÿz'TestSeriesPlots.test_plot_series_bar_axÚlayout)éÿÿÿÿé   )rf   re   c                 C   s(   t |jfddi|¤Ž}t|ddd d S )NÚsubplotsTrf   ©rf   rf   )Úaxes_numrd   )r   r4   r   )r5   r   r/   rB   r$   r$   r%   Útest_plot_6951r   s    zTestSeriesPlots.test_plot_6951c                 C   s>   t j ¡ \}}|jdd|d}t|jdƒ t|dddd d S )NZTest)é   é   )ÚtitleÚfigsizerB   rf   rh   )ri   rd   rn   )ÚmplÚpyplotrg   r4   r   rm   r   )r5   r'   Ú_rB   r$   r$   r%   Útest_plot_figsize_and_titlex   s    z+TestSeriesPlots.test_plot_figsize_and_titlec                 C   sJ   d}t jj| }t j ¡ \}}tg d¢ƒj|d |t jj| ksFJ ‚d S )Nzaxes.prop_cycle©rf   rZ   é   ©rB   )ro   rp   ÚrcParamsrg   r   r4   )r5   ÚkeyÚcolorsrq   rB   r$   r$   r%   Útest_dont_modify_rcParams   s
    z)TestSeriesPlots.test_dont_modify_rcParamsÚsecondary_yc                 C   sz   t j ¡ \}}|jf d|i|¤Ž}| ¡ \}}| ¡ }||d jddd d ksVJ ‚||d jddd d ksvJ ‚d S )NrB   r   F©Úorigre   )ro   rp   rg   r4   Úget_xlimÚ	get_linesÚget_data)r5   r   r/   rq   rB   ÚxminÚxmaxÚlinesr$   r$   r%   Útest_ts_line_lim‡   s     z TestSeriesPlots.test_ts_line_limc                 C   sr   t j ¡ \}}|jjd|d}| ¡ \}}| ¡ d jddd }||d ksRJ ‚||d ksbJ ‚t|dd d S )NF)rI   rB   r   r{   re   r8   ©	ro   rp   rg   r4   rJ   r}   r~   r   r   ©r5   r   rq   rB   r€   r   rP   r$   r$   r%   Útest_ts_area_lim   s    z TestSeriesPlots.test_ts_area_limc                 C   st   t j ¡ \}}|jjdd|d}| ¡ \}}| ¡ d jddd }||d ksTJ ‚||d ksdJ ‚t|dd d S )	NFT©rI   Zx_compatrB   r   r{   re   é   r8   r„   r…   r$   r$   r%   Útest_ts_area_lim_xcompat™   s    z(TestSeriesPlots.test_ts_area_lim_xcompatc                 C   sŽ   |  ¡ }| d¡ d¡|_tj ¡ \}}|jjdd|d}| 	¡ \}}| 
¡ d jddd }||d ksnJ ‚||d ks~J ‚t|dd	 d S )
NÚGMTÚCETFTr‡   r   r{   re   r8   ©ÚcopyZtz_localizeZ
tz_convertr   ro   rp   rg   r4   rJ   r}   r~   r   r   ©r5   r   Ztz_tsrq   rB   r€   r   rP   r$   r$   r%   Útest_ts_tz_area_lim_xcompat£   s    z+TestSeriesPlots.test_ts_tz_area_lim_xcompatc                 C   sŽ   |  ¡ }| d¡ d¡|_tj ¡ \}}|jjdd|d}| 	¡ \}}| 
¡ d jddd }||d ksnJ ‚||d ks~J ‚t|dd	 d S )
NrŠ   r‹   FT)rI   rz   rB   r   r{   re   r8   rŒ   rŽ   r$   r$   r%   Ú'test_ts_tz_area_lim_xcompat_secondary_y®   s    z7TestSeriesPlots.test_ts_tz_area_lim_xcompat_secondary_yc                 C   st   t jjdddd\}\}}t|ƒj|dd t|ƒj|dd t|ƒ ||¡sRJ ‚t|ƒ ||¡sfJ ‚t |¡ d S )Nrf   rZ   T)ZshareyrJ   )rB   rO   )	ro   rp   rg   Úabsr4   r   ZjoinedÚpltÚclose)r5   r   ZfigÚax1Úax2r$   r$   r%   Útest_area_sharey_dont_overwrite¹   s    z/TestSeriesPlots.test_area_sharey_dont_overwritec                 C   sH   t ddgƒ}tj ¡ \}}|jdd|d}t|dgd tj d¡ d S )Nrf   rZ   ÚLABELT)r0   ÚlegendrB   ©ÚlabelsÚall©r   ro   rp   rg   r4   r   r“   ©r5   Úsrq   rB   r$   r$   r%   Ú
test_labelÄ   s
    zTestSeriesPlots.test_labelc                 C   sF   t ddgƒ}tj ¡ \}}|jd|d}t|dgd tj d¡ d S )Nrf   rZ   T©r˜   rB   Ú r™   r›   rœ   r   r$   r$   r%   Útest_label_noneË   s
    zTestSeriesPlots.test_label_nonec                 C   sJ   t ddgdd}tj ¡ \}}|jd|d}t|dgd tj d¡ d S )	Nrf   rZ   ÚNAME©r    Tr    r™   r›   rœ   r   r$   r$   r%   Útest_label_ser_nameÒ   s
    z#TestSeriesPlots.test_label_ser_namec                 C   sL   t ddgdd}tj ¡ \}}|jdd|d}t|dgd tj d	¡ d S )
Nrf   rZ   r£   r¤   Tr—   ©r˜   r0   rB   r™   r›   rœ   r   r$   r$   r%   Útest_label_ser_name_overrideÙ   s
    z,TestSeriesPlots.test_label_ser_name_overridec                 C   sd   t ddgdd}tj ¡ \}}|jdd|d}| ¡ d u s>J ‚| ¡  t|dgd tj d	¡ d S )
Nrf   rZ   r£   r¤   Fr—   r¦   r™   r›   )	r   ro   rp   rg   r4   Z
get_legendr˜   r   r“   r   r$   r$   r%   Ú&test_label_ser_name_override_dont_drawá   s    z6TestSeriesPlots.test_label_ser_name_override_dont_drawc                 C   sZ   t g d¢ƒ}t|jdd d}tjt|d t|jƒ W d   ƒ n1 sL0    Y  d S )N)FFTT)Zinclude_boolúno numeric data to plot©Úmatch)r   r   r4   ÚpytestÚraisesÚ	TypeError)r5   rž   Úmsgr$   r$   r%   Útest_booleanë   s
    zTestSeriesPlots.test_booleanr   Nr   é   r   c                 C   sø   ddt jdg}t||d}t|jƒ}|jd  ¡ }t jg d¢t jd}t	 
t  |jd¡|¡ t	 
|jt  g d¢¡¡ t jg d	¢t jd}t|jd
d}t	 
|jd  ¡ |¡ t|jjƒ}t	 
|jd  ¡ |¡ t|jjdd}t	 
|jd  ¡ |¡ d S )Nrf   rZ   rt   ©r   r   rs   r   )FFTF)rf   rZ   r   rt   TrH   F)r!   Únanr   r   r4   r‚   Ú	get_ydataÚarrayr#   ÚtmÚassert_numpy_array_equalÚdeleteÚdataÚmaskrJ   )r5   r   ÚvaluesÚdrB   ZmaskedÚexpÚexpectedr$   r$   r%   Útest_line_area_nan_seriesô   s    
z)TestSeriesPlots.test_line_area_nan_seriesc                 C   sP   t g d¢g d¢d}d|j_tj ¡ \}}|jd|d}| ¡ }|dksLJ ‚d S ©Nrs   ©ÚaÚbÚcr²   z	The IndexF©r1   rB   r¡   )r   r   r    ro   rp   rg   r4   Ú
get_xlabel)r5   rž   rq   rB   r0   r$   r$   r%   Útest_line_use_index_false  s    z)TestSeriesPlots.test_line_use_index_falsec                 C   sR   t g d¢g d¢d}d|j_tj ¡ \}}|jjd|d}| ¡ }|dksNJ ‚d S rÀ   )	r   r   r    ro   rp   rg   r4   rE   rÆ   )r5   rž   rq   rB   r•   Úlabel2r$   r$   r%   Ú"test_line_use_index_false_diff_var  s    z2TestSeriesPlots.test_line_use_index_false_diff_varzWeird rounding problems)ÚreasonÚstrictz
axis, meth)r<   rE   )r>   rQ   c                 C   sR   t  g d¢¡}tj ¡ \}}ttddgƒj|ƒd|d}t 	t||ƒ 
¡ |¡ d S )N)çš™™™™™¹?ç      ð?ç      $@g      Y@g     @@g     ˆÃ@éÈ   iô  T)r=   rB   )r!   rµ   ro   rp   rg   Úgetattrr   r4   r¶   r·   Úget_ticklocs)r5   ÚaxisÚmethr¾   rq   rB   r$   r$   r%   Útest_bar_log  s    zTestSeriesPlots.test_bar_logzaxis, kind, res_meth)r<   rE   Zget_ylim)r>   rQ   r}   c           
      C   s‚   t  g d¢¡}tj ¡ \}}tg d¢ƒjd||d}d}d}t||ƒƒ }	t 	|	d |¡ t 	|	d |¡ t 
t||ƒ ¡ |¡ d S )	N)gñhãˆµøä>g-Cëâ6?çü©ñÒMbP?ç{®Gáz„?rÌ   rÍ   rÎ   )rÌ   rÖ   rÕ   T)r=   rO   rB   g!Ñ,åNJ?gÐ„–-?À?r   rf   )r!   rµ   ro   rp   rg   r   r4   rÐ   r¶   Zassert_almost_equalr·   rÑ   )
r5   rÒ   rO   Zres_methr¾   rq   rB   ZyminÚymaxÚresr$   r$   r%   Útest_bar_log_kind_bar$  s    z%TestSeriesPlots.test_bar_log_kind_barc                 C   sH   t g d¢g d¢d}tj ¡ \}}|jjd|d}t| ¡ g d¢ƒ d S )N©rf   rZ   rt   r±   ©rÂ   rÃ   rÄ   r¼   r²   FrÅ   )Ú0Ú1Ú2Ú3)r   ro   rp   rg   r4   rE   r   Úget_xticklabels)r5   Údfrq   rB   r$   r$   r%   Útest_bar_ignore_index:  s    z%TestSeriesPlots.test_bar_ignore_indexc                 C   sF   t g d¢ƒ}|jjg d¢d}dd„ |jD ƒ}g d¢}||ksBJ ‚d S )NrÚ   )ÚredÚbluerä   rã   r\   c                 S   s   g | ]}|  ¡ ‘qS r$   )Zget_facecolor)r)   Úpr$   r$   r%   r+   C  r,   z8TestSeriesPlots.test_bar_user_colors.<locals>.<listcomp>)©rÍ   ç        rç   rÍ   ©rç   rç   rÍ   rÍ   rè   ræ   )r   r4   rE   rb   )r5   rž   rB   Úresultr¾   r$   r$   r%   Útest_bar_user_colors@  s
    z$TestSeriesPlots.test_bar_user_colorsc                 C   s@   t tj d¡ d¡ƒ}tj ¡ \}}|j|d}t	|dd d S )NrZ   ©rL   rL   ru   r   r8   ©
r   r!   r_   r`   ra   ro   rp   rg   r4   r   ©r5   rá   rq   rB   r9   r$   r$   r%   Útest_rotation_defaultL  s    z%TestSeriesPlots.test_rotation_defaultc                 C   sB   t tj d¡ d¡ƒ}tj ¡ \}}|jd|d}t	|dd d S )NrZ   rë   rˆ   )r7   rB   r8   rì   rí   r$   r$   r%   Útest_rotation_30S  s    z TestSeriesPlots.test_rotation_30c                 C   sž   ddl m} tddƒ}|g d¢ }ttj d¡ t|ƒ¡|ƒ}t	j
 ¡ \}}|j|d}| tdd	d	ƒd
|¡}| dd¡ || ¡ d ksŽJ ‚t|dd d S )Nr   )ÚDatetimeConverterú1/1/2000z3/1/2000)	r   rf   rZ   rt   rL   é	   r   é   é   rZ   ru   iÏ  rf   r¡   z1/1/1999ú1/1/2001rˆ   r8   )Z%pandas.plotting._matplotlib.converterrð   r   r   r!   r_   r`   ra   Úlenro   rp   rg   r4   Úconvertr   Zset_xlimr}   r   )r5   rð   ÚrngrM   rq   rB   Zxpr$   r$   r%   Útest_irregular_datetimeY  s    
z'TestSeriesPlots.test_irregular_datetimec              	   C   s¢   t ddtjddddgddddtjddgd}tj ¡ \}}|j|d	}| ¡ \}}| ¡ }|t 	|d
 j
ddd
 ¡ks|J ‚|t |d
 j
ddd
 ¡ksžJ ‚d S )Nrç   rÍ   g      @g      @g      @g      @g       @r²   ru   r   Fr{   )r   r!   r³   ro   rp   rg   r4   r}   r~   Znanminr   Znanmax)r5   rM   rq   rB   r€   r   r‚   r$   r$   r%   Útest_unsorted_index_xlimf  s    þ"z(TestSeriesPlots.test_unsorted_index_xlimc                 C   sP   t tj d¡ dd¡g d¢dd}t|jjƒ}t|j	|j
ƒ | ¡ dksLJ ‚d S )NrZ   rf   rL   ©rÂ   rÃ   rÄ   r¼   ÚeÚYLABELr   )r   r!   r_   r`   Úintegersr   r4   Úpier   Útextsr   Ú
get_ylabel©r5   r'   rB   r$   r$   r%   Útest_pie_seriesr  s    ýzTestSeriesPlots.test_pie_seriesc                 C   sH   t tj d¡ dd¡g d¢dd}t|jjd d}t|j	dgd ƒ d S )	NrZ   rf   rL   rû   rý   r   r™   r¡   )
r   r!   r_   r`   rþ   r   r4   rÿ   r   r   r  r$   r$   r%   Útest_pie_series_no_label~  s    ýz(TestSeriesPlots.test_pie_series_no_labelc                 C   sT   t tj d¡ dd¡g d¢dd}g d¢}t|jj|d}g d	¢}t|j	|d
 d S )NrZ   rf   rL   rû   rý   r   )ÚrÚgrÃ   ©rx   )r  r  rÃ   r  r  r^   )
r   r!   r_   r`   rþ   r   r4   rÿ   r   rb   )r5   r'   Ú
color_argsrB   Zcolor_expectedr$   r$   r%   Ú)test_pie_series_less_colors_than_elements‡  s    ýz9TestSeriesPlots.test_pie_series_less_colors_than_elementsc                 C   sb   t tj d¡ dd¡g d¢dd}g d¢}g d¢}t|jj||d	}t|j	|ƒ t
|j|d
 d S )NrZ   rf   rL   rû   rý   r   )ÚAÚBÚCÚDÚE©r  r  rÃ   rÄ   Úm)rš   rx   r^   )r   r!   r_   r`   rþ   r   r4   rÿ   r   r   r   rb   )r5   r'   rš   r  rB   r$   r$   r%   Ú!test_pie_series_labels_and_colors“  s    ýz1TestSeriesPlots.test_pie_series_labels_and_colorsc                 C   s˜   t tj d¡ dd¡g d¢dd}g d¢}t|jj|dd	d
}dd„ |j| 	¡  D ƒ}t
t t|j|ƒ¡ƒ}t|j|ƒ |jD ]}| ¡ d	ks~J ‚q~d S )NrZ   rf   rL   rû   rý   r   r  z%.2fé   )rx   ZautopctZfontsizec                 S   s   g | ]}|d  d›‘qS )éd   z.2fr$   )r)   rž   r$   r$   r%   r+   ª  r,   zHTestSeriesPlots.test_pie_series_autopct_and_fontsize.<locals>.<listcomp>)r   r!   r_   r`   rþ   r   r4   rÿ   r»   ÚsumÚlistr   Úfrom_iterableÚzipr   r   r   Zget_fontsize)r5   r'   r  rB   ZpctsZexpected_textsÚtr$   r$   r%   Ú$test_pie_series_autopct_and_fontsize   s    ýÿ
z4TestSeriesPlots.test_pie_series_autopct_and_fontsizec                 C   sP   t g d¢g d¢d}tjtdd |j ¡  W d   ƒ n1 sB0    Y  d S )N)rf   rZ   r   r±   re   rû   r²   z&pie plot doesn't allow negative valuesrª   )r   r¬   r­   Ú
ValueErrorr4   rÿ   rX   r$   r$   r%   Útest_pie_series_negative_raises°  s    z/TestSeriesPlots.test_pie_series_negative_raisesc                 C   s<   t ddtjdgg d¢dd}t|jjƒ}t|jg d¢ƒ d S )Nrf   rZ   r±   rÛ   rý   r   )rÂ   rÃ   r¡   r¼   )r   r!   r³   r   r4   rÿ   r   r   r  r$   r$   r%   Útest_pie_series_nan¶  s    z#TestSeriesPlots.test_pie_series_nanc                 C   sX   t dtjddgƒ}tj ¡ \}}|jjd|d}g d¢}dd„ |jD ƒ}||ksTJ ‚d S )Nrf   Tr    )rÜ   r¡   rÞ   rß   c                 S   s   g | ]}|  ¡ ‘qS r$   )Zget_text)r)   Úxr$   r$   r%   r+   Á  r,   z0TestSeriesPlots.test_pie_nan.<locals>.<listcomp>)	r   r!   r³   ro   rp   rg   r4   rÿ   r   )r5   rž   rq   rB   r¾   ré   r$   r$   r%   Útest_pie_nan¼  s    zTestSeriesPlots.test_pie_nanc                 C   s˜   t tj d¡ d¡tdƒd}ttj d¡ d¡dd}tj 	¡ \}}|j
|d}|j
d	d	|d
 t|g d¢d | ¡  ¡ s‚J ‚|j ¡  ¡ s”J ‚d S )NrZ   ©rˆ   rt   Úabc©Úcolumnsrˆ   r  r¤   ru   T©r˜   rz   rB   ©rÂ   rÃ   rÄ   ú	x (right)r™   ©r   r!   r_   r`   ra   r  r   ro   rp   rg   r4   r   Ú	get_yaxisÚget_visibleZright_ax©r5   rá   rž   rq   rB   r$   r$   r%   Útest_df_series_secondary_legendÄ  s    ÿz/TestSeriesPlots.test_df_series_secondary_legendc                 C   s˜   t tj d¡ d¡tdƒd}ttj d¡ d¡dd}tj 	¡ \}}|j
|d}|j
|d	d	d
 t|g d¢d | ¡  ¡ s‚J ‚|j ¡  ¡ s”J ‚d S )NrZ   r  r   r!  rˆ   r  r¤   ru   T©rB   r˜   rz   r$  r™   r&  r)  r$   r$   r%   Ú)test_df_series_secondary_legend_with_axesÕ  s    ÿz9TestSeriesPlots.test_df_series_secondary_legend_with_axesc                 C   s    t tj d¡ d¡tdƒd}ttj d¡ d¡dd}tj 	¡ \}}|j
d|d	}|j
dd|d
 g d¢}t|j|d |j ¡  ¡ rŒJ ‚| ¡  ¡ sœJ ‚d S )NrZ   r  r   r!  rˆ   r  r¤   T©rz   rB   r#  ©z	a (right)z	b (right)z	c (right)r%  r™   ©r   r!   r_   r`   ra   r  r   ro   rp   rg   r4   r   Zleft_axr'  r(  ©r5   rá   rž   rq   rB   r¾   r$   r$   r%   Ú$test_df_series_secondary_legend_bothå  s    ÿz4TestSeriesPlots.test_df_series_secondary_legend_bothc                 C   sž   t tj d¡ d¡tdƒd}ttj d¡ d¡dd}tj 	¡ \}}|j
d|d	}|j
|ddd
 g d¢}t|j|ƒ |j ¡  ¡ rŠJ ‚| ¡  ¡ sšJ ‚d S )NrZ   r  r   r!  rˆ   r  r¤   Tr-  r+  r.  r/  r0  r$   r$   r%   Ú.test_df_series_secondary_legend_both_with_axisö  s    ÿz>TestSeriesPlots.test_df_series_secondary_legend_both_with_axisc                 C   s    t tj d¡ d¡tdƒd}ttj d¡ d¡dd}tj 	¡ \}}|j
dd	|d
}|j
|ddd g d¢}t|j|ƒ |j ¡  ¡ rŒJ ‚| ¡  ¡ sœJ ‚d S )NrZ   r  r   r!  rˆ   r  r¤   TF)rz   Z
mark_rightrB   r+  r$  r/  r0  r$   r$   r%   Ú0test_df_series_secondary_legend_both_with_axis_2  s    ÿz@TestSeriesPlots.test_df_series_secondary_legend_both_with_axis_2zinput_logy, expected_scale)Tr=   )ÚsymZsymlogc                 C   sj   t tj d¡ d¡ƒ}t tj d¡ d¡ƒ}|j|d}|jd|d}| ¡ |ksVJ ‚| ¡ |ksfJ ‚d S )NrZ   r  )r;   T)rz   r;   )r   r!   r_   r`   ra   r4   Z
get_yscale)r5   Z
input_logyZexpected_scaleÚs1Ús2r”   r•   r$   r$   r%   Útest_secondary_logy  s    z#TestSeriesPlots.test_secondary_logyc                 C   sj   t tj d¡ d¡ƒ}tj ¡ \}}d}tj	t
|d  |jdd|d W d   ƒ n1 s\0    Y  d S )NrZ   zCannot pass 'style' string with a color symbol and 'color' keyword argument. Please use one or the other or pass 'style' without a color symbolrª   zk--Úk)r?   r]   rB   )r   r!   r_   r`   ra   ro   rp   rg   r¬   r­   r  r4   )r5   r  rq   rB   r¯   r$   r$   r%   Ú)test_plot_fails_with_dupe_color_and_style'  s    ÿz9TestSeriesPlots.test_plot_fails_with_dupe_color_and_stylezbw_method, indZscottr&   ç      à?éœÿÿÿr  c                 C   s    t  d¡ t|jj||d d S )NrS   ©Ú	bw_methodÚind)r¬   Úimportorskipr   r4   rR   )r5   r   r=  r>  r$   r$   r%   Útest_kde_kwargs2  s    

zTestSeriesPlots.test_kde_kwargsc                 C   s.   t  d¡ t ddd¡}t|jjd|d d S )NrS   r;  r  r&   r:  r<  )r¬   r?  r!   Úlinspacer   r4   Zdensity)r5   r   Úsample_pointsr$   r$   r%   Útest_density_kwargs?  s    
z#TestSeriesPlots.test_density_kwargsc                 C   sZ   t  d¡ tj ¡ \}}t ddd¡}|jjdd||d}t	|dd	 t
|j ¡ d
ƒ d S )NrS   r;  r  r&   Tr:  )r;   r=  r>  rB   r=   ©r<   ZDensity)r¬   r?  ro   rp   rg   r!   rA  r4   rR   r   r   r<   Z	get_label)r5   r   rq   rB   rB  r$   r$   r%   Útest_kde_kwargs_check_axesD  s    
z*TestSeriesPlots.test_kde_kwargs_check_axesc                 C   sZ   t  d¡ ttj d¡jddƒ}tj|d< t|j	j
ƒ}tt |jd  ¡ ¡ ƒsVJ ‚d S )NrS   rZ   é2   )Úsizer   )r¬   r?  r   r!   r_   r`   Úuniformr³   r   r4   rR   ÚanyÚisnanr‚   Ú	get_xdata)r5   rž   r9   r$   r$   r%   Útest_kde_missing_valsL  s
    

z%TestSeriesPlots.test_kde_missing_valszApi changed in 3.6.0)rÊ   c                 C   s`   t j ¡ \}}|jjd|d}t|dd | ¡ }t||jgƒ | 	¡ }t|dgt
|ƒ ƒ d S )NT)r;   rB   r=   rD  r¡   )ro   rp   rg   r4   rU   r   rà   r   r    Zget_yticklabelsrö   )r5   r   rq   rB   ZxlabelsZylabelsr$   r$   r%   Útest_boxplot_seriesU  s    z#TestSeriesPlots.test_boxplot_seriesc                 C   s@   t  d¡ ttdƒƒ}tj ¡ \}}|j||d tj ¡  d S )NrS   rt   ©rO   rB   )	r¬   r?  r   r-   ro   rp   rg   r4   r“   ©r5   rO   rž   rq   rB   r$   r$   r%   Útest_kind_kwarg_  s
    
zTestSeriesPlots.test_kind_kwargc                 C   s@   t  d¡ ttdƒƒ}tj ¡ \}}t|j|ƒƒ  tj 	¡  d S )NrS   rt   )
r¬   r?  r   r-   ro   rp   rg   rÐ   r4   r“   rO  r$   r$   r%   Útest_kind_attrj  s
    
zTestSeriesPlots.test_kind_attrc                 C   s^   t tdƒƒ}tj ¡ \}}d}tjt|d |j||d W d   ƒ n1 sP0    Y  d S )NÚabcdr©   rª   rN  )	r   r  ro   rp   rg   r¬   r­   r®   r4   ©r5   rO   rž   rq   rB   r¯   r$   r$   r%   Útest_invalid_plot_datau  s
    z&TestSeriesPlots.test_invalid_plot_datac                 C   s,   t  d¡ ttdƒtd}t|j|d d S )NrS   r   r   rV   )r¬   r?  r   r-   Úobjectr   r4   )r5   rO   rž   r$   r$   r%   Útest_valid_object_plot}  s    
z&TestSeriesPlots.test_valid_object_plotc                 C   s^   t g d¢ƒ}tj ¡ \}}d}tjt|d |j||d W d   ƒ n1 sP0    Y  d S )N)rÂ   rÃ   rÍ   rZ   r©   rª   rN  )r   ro   rp   rg   r¬   r­   r®   r4   rS  r$   r$   r%   Ú test_partially_invalid_plot_dataƒ  s
    z0TestSeriesPlots.test_partially_invalid_plot_datac                 C   sJ   t ddgƒ}tjtdd |jdd W d   ƒ n1 s<0    Y  d S )Nrf   rZ   z%invalid_kind is not a valid plot kindrª   Zinvalid_kindrV   )r   r¬   r­   r  r4   ©r5   rž   r$   r$   r%   Útest_invalid_kind‹  s    z!TestSeriesPlots.test_invalid_kindc                 C   sP   t ddd}t ddd}| |¡}tj d¡ |j¡}t||d}t|j	ƒ d S )Nz1/1/2009r±   r   z1/2/2009rZ   r²   )
r   Úappendr!   r_   r`   ra   rG  r   r   r4   )r5   Zdr1Zdr2r   r»   rž   r$   r$   r%   Útest_dup_datetime_index_plot  s    
z,TestSeriesPlots.test_dup_datetime_index_plotc                 C   sÜ   t t d¡dd}tj d¡ d¡}|j||d}t dd„ |jd	  ¡ D ƒ¡}|j	t 
d
d	g¡ | ¡  d
d	¡ }t ||¡ dt|ƒ› d}tjt|d* |jtj d¡ d¡d W d   ƒ n1 sÎ0    Y  d S )Nr   r  r¤   rZ   )rZ   r   )ÚyerrÚxerrc                 S   s   g | ]}|j d d …df ‘qS )Nrf   )Zverticesr(   r$   r$   r%   r+   Ÿ  r,   z>TestSeriesPlots.test_errorbar_asymmetrical.<locals>.<listcomp>rf   re   z?Asymmetrical error bars should be provided with the shape \(2, z\)rª   )rZ   ró   ©r\  )r   r!   r"   r_   r`   r4   ZvstackÚcollectionsÚ	get_pathsÚTrµ   Zto_numpyZreshaper¶   r·   rö   r¬   r­   r  )r5   rž   ÚerrrB   ré   r¾   r¯   r$   r$   r%   Útest_errorbar_asymmetrical˜  s    $ÿÿz*TestSeriesPlots.test_errorbar_asymmetricalr\  rZ   r   )r   rZ   r  Úyr!  c                 C   s4   t t d¡dd}t|j||d}t|ddd d S )Nr   r  r¤   )r\  rO   r   rf   ©r]  r\  )r   r!   r"   r   r4   r   )r5   rO   r\  rž   rB   r$   r$   r%   Útest_errorbar_plotª  s    z"TestSeriesPlots.test_errorbar_plotc                 C   sJ   t t d¡dd}t tj d¡ d¡¡}t|j|d}t	|ddd d S )	Nr   r  r¤   rZ   )r]  rf   r   re  )
r   r!   r"   r‘   r_   r`   ra   r   r4   r   )r5   rž   Ús_errrB   r$   r$   r%   Útest_errorbar_plot_yerr_0½  s    z)TestSeriesPlots.test_errorbar_plot_yerr_0rô   )rô   rZ   c                 C   sH   t dddd}tt d¡|dd}||_t|j|d}t|d	d
d d S )Nrñ   rõ   ZME)Úfreqrô   r  r   r^  r   rf   re  )r   r   r!   r"   r   r   r4   r   )r5   r\  Zixr   rB   r$   r$   r%   Útest_errorbar_plot_tsÄ  s
    z%TestSeriesPlots.test_errorbar_plot_tsc                 C   sR   t t d¡dd}t t¡" |jt d¡d W d   ƒ n1 sD0    Y  d S )Nr   r  r¤   ró   r^  )r   r!   r"   r¶   Úexternal_error_raisedr  r4   rX  r$   r$   r%   Ú%test_errorbar_plot_invalid_yerr_shapeØ  s    z5TestSeriesPlots.test_errorbar_plot_invalid_yerr_shapec                 C   sV   t t d¡dd}dgd }t t¡ |j|d W d   ƒ n1 sH0    Y  d S )Nr   r  r¤   Úzzzr^  )r   r!   r"   r¶   rk  r®   r4   )r5   rž   rg  r$   r$   r%   Útest_errorbar_plot_invalid_yerrß  s    
z/TestSeriesPlots.test_errorbar_plot_invalid_yerrc                 C   s   t |jdd d S )NT©Útabler3   rX   r$   r$   r%   Útest_table_trueæ  s    zTestSeriesPlots.test_table_truec                 C   s   t |j|d d S )Nro  r3   rX   r$   r$   r%   Útest_table_selfê  s    zTestSeriesPlots.test_table_selfc                 C   s,   t  d¡ ttg d¢ƒtjjtjj ƒ d S )NrS   rs   )r¬   r?  r   r   r
   ÚPlotAccessorÚ_series_kindsÚ_common_kinds)r5   r$   r$   r%   Útest_series_grid_settingsî  s
    

þz)TestSeriesPlots.test_series_grid_settingsrÄ   )r  rã   Úgreenz#FF0000c                 C   s„   ddl m} |d|d}||gks&J ‚|d|gd}||gksBJ ‚|d|d}||gd ks`J ‚|d|gd}||gd ks€J ‚d S )Nr   ©Úget_standard_colorsrf   r\   rt   )Ú!pandas.plotting._matplotlib.stylery  )r5   rÄ   ry  ré   r$   r$   r%   Útest_standard_colors÷  s    z$TestSeriesPlots.test_standard_colorsc                 C   s  ddl m} ddlm} |jD ]x}|d|d}||gks<J ‚|d|gd}||gksXJ ‚|d|d}||gd ksvJ ‚|d|gd}||gd ksJ ‚q|jjD ]x}|d|d}||gks¾J ‚|d|gd}||gksÚJ ‚|d|d}||gd ksøJ ‚|d|gd}||gd ks J ‚q d S )Nr   r  rx  rf   )Z
num_colorsr]   rt   )r   rx   rz  ry  ZcnamesZColorConverter)r5   rx   ry  rÄ   ré   r$   r$   r%   Útest_standard_colors_all  s(    
z(TestSeriesPlots.test_standard_colors_allc                 C   s@   t j ¡ \}}tt d¡d ƒjd|d}t| ¡ dgd d S )Nrô   rf   rw  ©r]   rB   ©Z
linecolors)	ro   rp   rg   r   r!   r"   r4   r   r~   ©r5   rq   rB   r$   r$   r%   Útest_series_plot_color_kwargs(  s    z-TestSeriesPlots.test_series_plot_color_kwargsc                 C   sL   t j ¡ \}}tt d¡d tddddjd|d}t| 	¡ dgd d S )	Nrô   rf   rñ   r   r²   rw  r}  r~  )
ro   rp   rg   r   r!   r"   r   r4   r   r~   r  r$   r$   r%   Ú"test_time_series_plot_color_kwargs.  s
    ÿz2TestSeriesPlots.test_time_series_plot_color_kwargsc           	      C   sz   dd l }t|jƒ}tddd}tt dd¡|d}d}|j ¡ \}}t	|ƒD ]}|j
|d	}qLt| ¡ |d |… d
 d S )Nr   rñ   rô   r   rf   é   r²   rt   ru   r~  )r   r   rv   r   r   r!   r"   rp   rg   r-   r4   r   r~   )	r5   ro   Z
def_colorsr   rž   Zncolorsrq   rB   r*   r$   r$   r%   Ú-test_time_series_plot_color_with_empty_kwargs6  s    
z=TestSeriesPlots.test_time_series_plot_color_with_empty_kwargsc                 C   s`   t t d¡dd„ tdƒD ƒd}tj ¡ \}}|jg d¢|d}dd„ dD ƒ}t| 	¡ |ƒ d S )Nr   c                 S   s   g | ]}d |d›‘qS ©ÚPÚ02dr$   r(   r$   r$   r%   r+   F  r,   z4TestSeriesPlots.test_xticklabels.<locals>.<listcomp>r²   )r   rt   rL   rò   )ÚxticksrB   c                 S   s   g | ]}d |d›‘qS r„  r$   r(   r$   r$   r%   r+   I  r,   )
r   r!   r"   r-   ro   rp   rg   r4   r   rà   )r5   rž   rq   rB   r½   r$   r$   r%   Útest_xticklabelsD  s
     z TestSeriesPlots.test_xticklabelsc                 C   s^   t tdƒdd„ tdƒD ƒd}|jjtdddƒd}t ttdddƒƒ¡}t || 	¡ ¡ d S )	Nr   c                 S   s   g | ]}d |d›‘qS r„  r$   r(   r$   r$   r%   r+   N  r,   z6TestSeriesPlots.test_xtick_barPlot.<locals>.<listcomp>r²   r   ró   rZ   )r‡  )
r   r-   r4   rE   r!   rµ   r  r¶   r·   Z
get_xticks)r5   rž   rB   r½   r$   r$   r%   Útest_xtick_barPlotL  s    z"TestSeriesPlots.test_xtick_barPlotc                 C   s@   ddl m} ttddƒtjdd|dgdd	d
}t|jƒ d S )Nr   )ÚCustomBusinessDayr  éy   z
2014-05-01z
2014-06-01z
2014-05-26)Zholidays)ÚstartÚendri  r²   )Zpandas.tseries.offsetsrŠ  r   r-   ÚpdZbdate_ranger   r4   )r5   rŠ  rž   r$   r$   r%   Útest_custom_business_day_freqS  s    
ýþ	z-TestSeriesPlots.test_custom_business_day_freqziGH#24426, see also github.com/pandas-dev/pandas/commit/ef1bd69fa42bbed5d09dd17f08c44fc8bfc2b685#r61470674c                 C   sj   t g d¢ƒ}tj ¡ \}}|j|d}|j ¡ }|jddgdd tj ¡ \}}|j ¡ }t 	||¡ d S )NrÚ   ru   r   rf   T)Zinplace)
r   ro   rp   rg   r4   r>   rÑ   Zdropr¶   r·   )r5   rM   rq   rB   ÚbeforeÚafterr$   r$   r%   Ú%test_plot_accessor_updates_on_inplaceb  s    

z5TestSeriesPlots.test_plot_accessor_updates_on_inplacerJ   c                 C   sT   t ddgƒ}tj ¡ \}}|j||d | ¡ }|d dk s@J ‚|d dksPJ ‚d S )NrZ   rt   rN  r   rf   )r   ro   rp   rg   r4   r}   )r5   rO   rž   rq   rB   Úxlimsr$   r$   r%   Útest_plot_xlim_for_seriesr  s    z)TestSeriesPlots.test_plot_xlim_for_seriesc                 C   sh   t td}|jsJ ‚| ¡ }t| ¡ ƒdks0J ‚| ¡ d }t| ¡ ƒdksPJ ‚t| ¡ ƒdksdJ ‚d S )Nr   rf   r   )r   ÚintÚemptyr4   rö   r~   rK  r´   )r5   rá   rB   rP   r$   r$   r%   Útest_plot_no_rows~  s    

z!TestSeriesPlots.test_plot_no_rowsc                 C   sF   t g d¢ƒ}tjtdd | ¡  W d   ƒ n1 s80    Y  d S )NrÁ   r©   rª   )r   r¬   r­   r®   r4   )r5   rá   r$   r$   r%   Útest_plot_no_numeric_dataˆ  s    z)TestSeriesPlots.test_plot_no_numeric_datazdata, indexrÚ   )rt   rZ   rf   r   )r   rF  r&   rˆ   )iv  i€  i¼  iž  c                 C   sL   t ||d}|jdd}| ¡ }dd„ t|jdd„ dD ƒ}||ksHJ ‚d S )	N)r¹   r   rE   rV   c                 S   s   g | ]}|  ¡ j‘qS r$   )Úget_bboxr×   )r)   Úpatchr$   r$   r%   r+   š  s   ÿz3TestSeriesPlots.test_plot_order.<locals>.<listcomp>c                 S   s
   |   ¡ jS r2   )r™  r   )rš  r$   r$   r%   Ú<lambda>œ  r,   z1TestSeriesPlots.test_plot_order.<locals>.<lambda>)rw   )r   r4   ÚtolistÚsortedrb   )r5   r¹   r   rM   rB   r¾   ré   r$   r$   r%   Útest_plot_order  s    	þzTestSeriesPlots.test_plot_orderc                 C   s4   t ddgƒ}|jddd}|jd  ¡ dks0J ‚d S )Nrf   rZ   rž   ZC3)r?   r]   r   )r   r4   r‚   Ú	get_color)r5   rž   rB   r$   r$   r%   Útest_style_single_ok   s    z$TestSeriesPlots.test_style_single_okz index_name, old_label, new_label))Nr¡   Únew)Úoldr¢  r¡  )Nr¡   r¡   )rP   rJ   rE   rQ   rT   c                 C   sÈ   t g d¢ƒ}||j_|j|d}|dkrJ| ¡ dks8J ‚| ¡ |ks”J ‚nJ|dkrt| ¡ dksbJ ‚| ¡ dks”J ‚n | ¡ dks„J ‚| ¡ |ks”J ‚|j|||d}| ¡ |ks´J ‚| ¡ |ksÄJ ‚d S )NrÚ   rV   rQ   r¡   rT   Z	Frequency)rO   ZylabelZxlabel)r   r   r    r4   rÆ   r  )r5   rO   Z
index_nameZ	old_labelZ	new_labelrM   rB   r$   r$   r%   Útest_xlabel_ylabel_series¥  s    z)TestSeriesPlots.test_xlabel_ylabel_seriesr   r  )rŒ  r   ri  rf   )Údaysc                 C   s0   d}t ddg|dj|d}| ¡ dks,J ‚d S )N)rt   rf   rf   rZ   r²   )Zxlim)r   r4   r}   )r5   r   r“  rB   r$   r$   r%   Útest_timedelta_indexÀ  s    	z$TestSeriesPlots.test_timedelta_indexc                 C   s@   t g d¢ƒ}|jd d}ttjjƒd d… }t| ¡ |d d S )Nrs   r\   rf   r~  )r   r4   r   ro   rp   rv   r   r~   )r5   r'   rB   r¾   r$   r$   r%   Útest_series_none_colorÍ  s    z&TestSeriesPlots.test_series_none_colorc                 C   s6   t  d¡ | ¡ }W d   ƒ n1 s(0    Y  d S )NF)r¶   Zassert_produces_warningr4   )r5   r   rq   r$   r$   r%   Útest_plot_no_warningÔ  s    z$TestSeriesPlots.test_plot_no_warning)xÚ__name__Ú
__module__Ú__qualname__r¬   ÚmarkZslowZparametrizer6   r:   rC   rG   rK   rN   ÚparamÚtdZ
skip_if_norW   rY   rc   rj   rr   ry   rƒ   r†   r‰   r   r   r–   rŸ   r¢   r¥   r§   r¨   r°   r   r¿   rÇ   rÉ   Zxfailr   r   rÔ   rÙ   râ   rê   rî   rï   rù   rú   r  r  r	  r  r  r  r  r  r*  r,  r1  r2  r3  r7  r9  r!   Úint_rA  r@  rC  rE  rL  rM  r
   rs  ru  rt  rP  rQ  rT  rV  rW  rY  r[  rc  r   r‘   r_   r`   ra   r  r   rf  rh  rj  rl  rn  rq  rr  rv  r{  r|  r€  r  rƒ  rˆ  r‰  r  r’  r”  r—  r˜  rž  r   r£  rŽ  Ztimedelta_rangeZ	Timedeltar¥  r¦  r§  r$   r$   r$   r%   r.   7   sš  
ýþ

úþ


	

	

ý
ýþ	ÿ
üþ	
	
	þ
þ



þüþ
þþþ
	





!ÿ


þþ
þþþ
r.   ),Ú__doc__r   Ú	itertoolsr   Únumpyr!   r¬   Zpandas.compatr   Zpandas.compat.numpyr   Zpandas.util._test_decoratorsÚutilZ_test_decoratorsr­  ZpandasrŽ  r   r   r   r	   r
   Zpandas._testingZ_testingr¶   Zpandas.tests.plotting.commonr   r   r   r   r   r   r   r   r   r   r   r?  ro   r’   Zfixturer   r'   r.   r$   r$   r$   r%   Ú<module>   s$   4



