U
    Fvf/                     @   s  d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dl	Z
d dlmZmZ d dlZd dlZd dlmZ d dlmZ G dd dZG dd dZG d	d
 d
ZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZ G dd dZ!G dd dZ"G dd dZ#G dd  d Z$G d!d" d"Z%G d#d$ d$Z&G d%d& d&Z'G d'd( d(Z(G d)d* d*Z)G d+d, d,Z*G d-d. d.Z+G d/d0 d0Z,d1d2 Z-G d3d4 d4Z.d5d6 Z/d7d8 Z0d9d: Z1d;d< Z2d=d> Z3ej45d?d@dAdB Z6ej45dCdDdEge
7dFgdGdH Z8ej45dIdJdKdLdMgej9:dNdOdP Z;dQdR Z<ej45dSe=dTdU e>dVfdWdX Z?dS )Y    )nullcontextN)parse)assert_almost_equalassert_array_equalc                   @   s  e Zd Zddedddddgfdd	ed
dddddgfddeddd
ddgfddedd fddeddd fgZdddeddddgfddded dd!d"d#d$gfdd%dd&d'dd(gedd)d*d+d,gfgZej	
d-ed.d/ Zej	
d0ed1d2 ZdS )3TestMaxNLocator   d         4@g      D@g      N@g      T@      Y@MbP?-C6?        g-C6*?g-C6:?ga2U0*C?g-C6J?g  4&kg  4&kCg  4&kg  4&kBr   g&q5   gLog5g&q   皙皙?N   ffffff?g      п      ?      ?      ?      ?7         ?   
         -   <   zvmin, vmax, expectedc                 C   s"   t jdd}t|||| d S )Nr   nbinsmtickerMaxNLocatorr   tick_values)selfvminvmaxexpectedloc r-   @/tmp/pip-unpacked-wheel-7vhvci0g/matplotlib/tests/test_ticker.py
test_basic    s    zTestMaxNLocator.test_basiczvmin, vmax, steps, expectedc                 C   s&   t jdd|d}t|||| d S )Nr   T)r#   integerstepsr$   )r(   r)   r*   r1   r+   r,   r-   r-   r.   test_integer%   s    zTestMaxNLocator.test_integer)__name__
__module____qualname__nparrayarangeZ
basic_dataZinteger_datapytestmarkparametrizer/   r2   r-   r-   r-   r.   r      s   	$
r   c                   @   s   e Zd Zdd Zdd ZdS )TestLinearLocatorc                 C   s2   t jdd}tdddg}t|dd| d S )N   numticksg333333ӿ皙?)r%   LinearLocatorr6   r7   r   r'   r(   r,   
test_valuer-   r-   r.   r/   ,   s    zTestLinearLocator.test_basicc                 C   sB   t jdd}|jddg id |jdks,t|jdg iks>tdS )z
        Create linear locator with presets={}, numticks=2 and change it to
        something else. See if change was successful. Should not exception.
        r   r>      )r   r   )r?   presetsN)r%   rB   
set_paramsr?   AssertionErrorrF   r(   r,   r-   r-   r.   test_set_params1   s    z!TestLinearLocator.test_set_paramsN)r3   r4   r5   r/   rJ   r-   r-   r-   r.   r<   +   s   r<   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestMultipleLocatorc              
   C   s<   t jdd}tdddddddd	g}t|d
d| d S )NV-	@basego"V-gV-	r   V-@go"@gV-)@r   )r%   MultipleLocatorr6   r7   r   r'   rC   r-   r-   r.   r/   =   s     zTestMultipleLocator.test_basicc              	   C   s<   t ddi$ tjdd}t|ddd W 5 Q R X dS )	z5
        Test basic behavior of view limits.
        axes.autolimit_modedatarL   rM   r   r   )r   r   Nmpl
rc_contextr%   rR   r   Zview_limitsrI   r-   r-   r.   test_view_limitsC   s    z$TestMultipleLocator.test_view_limitsc              	   C   s<   t ddi$ tjdd}t|ddd W 5 Q R X dS )	zb
        Test that everything works properly with 'round_numbers' for auto
        limit.
        rS   Zround_numbersrL   rM      )rO   rP   NrU   rI   r-   r-   r.   test_view_limits_round_numbersK   s    z2TestMultipleLocator.test_view_limits_round_numbersc                 C   s,   t jdd}|jdd |jjdks(tdS )z
        Create multiple locator with 0.7 base, and change it to something else.
        See if change was successful.
        ffffff?rM   g333333?N)r%   rR   rG   Z_edgesteprH   )r(   Zmultr-   r-   r.   rJ   T   s    z#TestMultipleLocator.test_set_paramsN)r3   r4   r5   r/   rX   r[   rJ   r-   r-   r-   r.   rK   <   s   	rK   c                    @   s  e Zd Zdd ZddgZejdedd Zdd	d
ddgZ	dd Z
ejde	dd ZddddddddgZddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.gd/d0d1d2d3d4d5dd6d7d8d9d:d;d<d=d>d?d@dAdBgdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSgdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcddgdedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}gd~dddddddddddddddddgdddddddddddddddgdddddddddddddddddddddddddggZeeeeZejdedd ZdS )TestAutoMinorLocatorc                 C   sl   t  \}}|dd |  tddddddd	d
dddddddddddddg}t|jjdd| d S )Nr   =
ףp=?皙?皙?333333?r   333333?ffffff??r   皙??r\   r   333333??r   ?r   ffffff?      ??皙?Tminor)	pltsubplotsset_xlimminorticks_onr6   r7   r   xaxisget_ticklocs)r(   figaxrD   r-   r-   r.   r/   _   s(                zTestAutoMinorLocator.test_basicr   r   )r   r   z%nb_majorticks, expected_nb_minorticksc                 C   sh   t  \}}d}|j|  |t|d |d | |  |jt	
  t|j |ksdtd S )N)r   r   r   r   )rq   rr   rs   
set_xticksr6   linspacert   ru   set_minor_locatorr%   AutoMinorLocatorlenget_minorticklocsrH   )r(   Znb_majorticksZexpected_nb_minorticksrw   rx   xlimsr-   r-   r.   test_low_number_of_majorticksn   s    
z2TestAutoMinorLocator.test_low_number_of_majorticks)r   r   )r   rZ   )      @r   )r   r   )r   r   c              	   C   sB   t ddi* dd | jD }tj|t j W 5 Q R X d S )Nz_internal.classic_modeFc                 S   s   g | ]}|d  qS r   r-   .0xr-   r-   r.   
<listcomp>   s     zKTestAutoMinorLocator.test_using_all_default_major_steps.<locals>.<listcomp>)	rV   rW   majorstep_minordivisionsr6   ZtestingZassert_allcloser%   ZAutoLocatorZ_steps)r(   Z
majorstepsr-   r-   r.   "test_using_all_default_major_steps   s
    z7TestAutoMinorLocator.test_using_all_default_major_stepsz&major_step, expected_nb_minordivisionsc                 C   sb   t  \}}d|f}|j|  || |  |jt  t	|j
 d }||ks^td S Nr   r   )rq   rr   rs   rz   rt   ru   r|   r%   r}   r~   r   rH   )r(   Z
major_stepZexpected_nb_minordivisionsrw   rx   r   Znb_minor_divisionsr-   r-   r.   test_number_of_minor_ticks   s    

z/TestAutoMinorLocator.test_number_of_minor_ticks)r   r_   )r   gn?)r   ԍ;)r   gVs?=)gH׊gIhG|a)gv!>ҷ>)ʔA{v()g"s2_dglEՎfUr`   ra   rb   r   rc   rd   re   r   rf   rg   r\   r   rh   ri   r   rj   r   rk   rl   rm   rn   {Gzt?{Gz?Q?g?gQ?gQ?g
ףp=
?g)\(?gp=
ף?gQ?g333333?g(\µ?g
ףp=
?gRQ?gzG?)\(?gq=
ףp?      ?gp=
ף?gHzG?gO
;gO
;gU;g#B;gU;g̈=;gnP*@;g#B;gԍ;gaW;g̈=;gmx;gJ;gnP*@;gnXen;g+3M;r   g+<g+=gt=gvIh%=gt =g(#=gQu.U)=gvIh%,=gU.=gnb]K2=g(3=g7Q5=gU>?7=gQu.U9=gc߯x:=g; ==gU>=g*#&,gYg#"5Ԉg_eG|gS'цgBY[%gk̈́gv!g|)vgQ؎gqrgƀg%e~gw$}g߈/|gYygv(xgS'vgv!tgz]rgqrqgw$mgHjgv(hgz]bgL>gE/w>gZMϢ>gkʹ>g	ʧ#>g!+lěN>g:0y>gR>g};h>gBY[%>gqwNP>gʔA{>gS'Ѷ>g>g.W'>gG)R>gxz)e秷>r   g5m/Gg<gT跾g`gxz)e秷gIGmg肸zggG)Rg<g&|gg5_涾gqdqAg34gY#g#"5Ըg_~r   gҷg.W'gS'Ѷr   gBY[%g:0yg	ʧ#gkʹgE/wgE̳g|)vg<sAC gz]ʲgQ؎g 4PSȱgqrg>g\+-eqg+i)+gM7܉g%eޮgw$zlim, refc                 C   sZ   t  \}}|  |jddddd |jddddd || t|jjdd	| d S )
NTrp   yr   )	linewidthmajork)colorr   ro   )rq   rr   rt   Zgridset_ylimr   yaxisrv   )r(   limrefrw   rx   r-   r-   r.   test_additional   s    
z$TestAutoMinorLocator.test_additionalN)r3   r4   r5   r/   paramsr9   r:   r;   r   r   r   r   Zlimits	referencelistzipZadditional_datar   r-   r-   r-   r.   r^   ^   s"  

                                                             
                       r^   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestLogLocatorc                 C   s   t jdd}tt |dd W 5 Q R X tddddd	d
ddg}t|dd| t jdd}tddddddddddg
}t|dd| d S )Nr   r>   r     h㈵>r   ra         $@     @@     j@g    cA    eAg     @r   rM   r   r          @      @g       @g      0@g      @@g      P@g      `@g      p@r   r   )	r%   
LogLocatorr9   raises
ValueErrorr'   r6   r7   r   rC   r-   r-   r.   r/      s    
   zTestLogLocator.test_basicc                 C   sB   t jddid\}}|d |dd t| dddg d	S )
z<
        Polar axes have a different ticking logic.
        Z
projectionZpolar)Z
subplot_kwlogr   r   r   r   N)rq   rr   
set_yscaler   r   Z
get_yticksr(   rw   rx   r-   r-   r.   test_polar_axes   s    
zTestLogLocator.test_polar_axesc              	   C   sl   t jdd}t|ddddddd	d
dg t jtddd}d|ddksTtd|ddkshtd S )Nallsubsre   rf   g)\(?gq=
ףp?gQ?r   gp=
ף?gHzG?gQ?r   r   r   ri   r	   r   )r%   r   r   r'   r6   r8   rH   rI   r-   r-   r.   test_switch_to_autolocator   s    z)TestLogLocator.test_switch_to_autolocatorc                 C   s^   t  }|jdddgdd |jdks*t|jdks8t|jdksFtt|jdgksZtdS )z
        Create log locator with default value, base=10.0, subs=[1.0],
        numdecs=4, numticks=15 and change it to something else.
        See if change was successful. Should not raise exception.
           rE   r   rZ   )r?   numdecsr   rN   N)	r%   r   rG   r?   rH   r   _baser   _subsrI   r-   r-   r.   rJ      s    zTestLogLocator.test_set_paramsN)r3   r4   r5   r/   r   r   rJ   r-   r-   r-   r.   r      s   		r   c                   @   s   e Zd Zdd ZdS )TestNullLocatorc              	   C   s*   t  }tt |  W 5 Q R X dS )z
        Create null locator, and attempt to call set_params() on it.
        Should not exception, and should raise a warning.
        N)r%   ZNullLocatorr9   warnsUserWarningrG   rI   r-   r-   r.   rJ      s    zTestNullLocator.test_set_paramsNr3   r4   r5   rJ   r-   r-   r-   r.   r      s   r   c                   @   s$   e Zd Zedd Zedd ZdS )_LogitHelperc                 C   s`   d|   k rdk r\n nDd|  k r,dk r\n n,t t d|  d  t d| d  S dS )Nr   r   F)r6   iscloser   )r   r   r-   r-   r.   r      s     
 6z_LogitHelper.isclosec                 C   s   t | }t |}t |dkr0t |dk s4tt |dkrPt |dk sTtt d| d  }t d| d  }t|| d S r   )r6   r7   r   rH   r   r   )r   r   rx   ZayZlxZlyr-   r-   r.   r     s    

  z _LogitHelper.assert_almost_equalN)r3   r4   r5   staticmethodr   r   r-   r-   r-   r.   r      s   
r   c                   @   s  e Zd ZddddddddgZd	d
ed	d  d	d
ed	d  d	d
ed	d  d	d
ed	d  d	d
ed	d  d	d
ed	d  d	d
ed	d  d	d
ed	d
  gZdddgZej	
deeedd Zej	
dedd Zej	
dee dd Zej	
deeedd Zdd  Zd!ed"d# d	d!ed"d#  Zej	
dd$d% ejed&d'D d(d) Zej	
d*ed+d, Zd-S ).TestLogitLocatorr`   r   )r   gףp=
?)gMb@?gCl?-C6
?gSt$?)gh㈵>g;?)gƠ>g?gHj>ge(?)g:0y5>g$P?r   r   r=   rZ   r   r   r   rE   	   )皙?g333333?)r`   rA   )g?r   zlims, expected_low_ticksc                 C   s4   t |dd| }tjdd}t|j| | dS )zR
        Create logit locator with huge number of major, and tests ticks.
        r   r   r   r"   N)r   )sortedr%   LogitLocatorr   r   r'   )r(   limsexpected_low_ticksexpected_ticksr,   r-   r-   r.   test_basic_major)  s    z!TestLogitLocator.test_basic_majorr   c                 C   s|   t jdd}t jdddddgd}dD ]P}|j|d |j|d |j| }|j| }|j|jksft||k s&tq&d	S )
zj
        When the axis is zoomed, the locator must have the same behavior as
        MaxNLocator.
        r   r"   r   r   r   r   )r#   r1   )rZ   rE      N)r%   r   r&   rG   r'   shaperH   r   )r(   r   r,   Zmaxn_locr#   ticksZ
maxn_ticksr-   r-   r.   test_maxn_major:  s    

z TestLogitLocator.test_maxn_majorc                 C   sj   t tt|d  d d }tjdd}t|ddD ]*}|j|d t|j	| |d ks:t
q:dS )zB
        Assert logit locator for respecting nbins param.
        r   r   r   r   r"   r   N)intr6   floorlog10r%   r   rangerG   r~   r'   rH   )r(   r   basic_neededr,   r#   r-   r-   r.   test_nbins_majorJ  s
    "z!TestLogitLocator.test_nbins_majorc           
      C   s   t |dd| }t|}tjdd}tjddd}t|ddD ]r}|j|d |j|d |j| }|j| }	t|t|krt|d d	 t|	k stq@t	t ||	| q@d
S )zt
        In large scale, test the presence of minor,
        and assert no minor when major are subsampled.
        r   r   r   r"   T)r#   rp   r   r   r   N)r   )
r   r~   r%   r   r   rG   r'   rH   r   r   )
r(   r   r   r   r   r,   Z	minor_locr#   Zmajor_ticksZminor_ticksr-   r-   r.   
test_minorV  s"    



 zTestLogitLocator.test_minorc                 C   s@   t jdd}|jrtd|_|js&t|jdd |jr<td S )Nr   r"   TFro   )r%   r   rp   rH   rG   rI   r-   r-   r.   test_minor_attrs  s    

z TestLogitLocator.test_minor_attrr   r   c                 C   s    g | ]\}}||kr||fqS r-   r-   )r   abr-   r-   r.   r     s   zTestLogitLocator.<listcomp>r   )repeatc                 C   s*   t  }|j| }t|t|ks&tdS )zd
        Create logit locator, and test the nonsingular method for acceptable
        value
        N)r%   r   nonsingularr   rH   )r(   r   r,   Zlims2r-   r-   r.   test_nonsingular_ok  s    
z$TestLogitLocator.test_nonsingular_okokvalc                 C   s   t  }d| }}|||\}}||ks.td|  k rB|k sHn t|d }}|||\}}||ksnt||  k rdk sn tdS )zh
        Create logit locator, and test the nonsingular method for non
        acceptable value
        r   r   r   r   N)r%   r   r   rH   )r(   r   r,   r)   r*   Zvmin2Zvmax2r-   r-   r.   test_nonsingular_nok  s    

z%TestLogitLocator.test_nonsingular_nokN)r3   r4   r5   Zref_basic_limitsr6   r8   Zref_basic_major_ticksZref_maxn_limitsr9   r:   r;   r   r   r   r   r   r   Zacceptable_vmin_vmax	itertoolsproductr   r   r-   r-   r-   r.   r     s\   




	
	r   c                   @   s   e Zd Zdd ZdS )TestFixedLocatorc                 C   s2   t jtdddd}|jdd |jdks.tdS )z
        Create fixed locator with 5 nbins, and change it to something else.
        See if change was successful.
        Should not exception.
        r      r   r"   r   N)r%   ZFixedLocatorr   rG   r#   rH   )r(   Zfixedr-   r-   r.   rJ     s    z TestFixedLocator.test_set_paramsNr   r-   r-   r-   r.   r     s   r   c                   @   s   e Zd Zdd ZdS )TestIndexLocatorc                 C   s<   t jddd}|jddd |jdks*t|jdks8tdS )z
        Create index locator with 3 base, 4 offset. and change it to something
        else. See if change was successful.
        Should not exception.
        r=   rZ   )rN   offsetr   N)r%   ZIndexLocatorrG   r   rH   r   )r(   indexr-   r-   r.   rJ     s    z TestIndexLocator.test_set_paramsNr   r-   r-   r-   r.   r     s   r   c                   @   s   e Zd Zdd ZdS )TestSymmetricalLogLocatorc                 C   s@   t jddd}|jdgdd |jdgks.t|jdks<tdS )z
        Create symmetrical log locator with default subs =[1.0] numticks = 15,
        and change it to something else.
        See if change was successful.
        Should not exception.
        r   r   )rN   Z	linthreshr   rE   )r   r?   N)r%   ZSymmetricalLogLocatorrG   r   rH   r?   )r(   symr-   r-   r.   rJ     s    z)TestSymmetricalLogLocator.test_set_paramsNr   r-   r-   r-   r.   r     s   r   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestAsinhLocatorc                 C   s<   t jddd}|jdkst|jdks*t|jdks8td S )NgX9v@   )linear_widthr?   r   )r%   AsinhLocatorr   rH   r?   rN   r(   lctrr-   r-   r.   	test_init  s    zTestAsinhLocator.test_initc                 C   s>  t jdddddd}|jdks"t|jdks0t|jdks>t|jdksLt|jdd |jdksft|d  |jdks~t|jd	d
 |jd	kst|jd d
 |jd	kst|jdd |jdkst|jd d |jdkst|jdd |jdkst|jd d |jdkst|jg d |jd ks:td S )Nr      r   rZ   )r   g      
@)r   r?   	symthreshrN   r      r>   r   )r   r   rM   )r   g     @r   )r%   r   r?   rH   r   rN   r   rG   r   r-   r-   r.   rJ     s8      
z TestAsinhLocator.test_set_paramsc                 C   sh   t jdddd}t|ddtddd t|d	d
td	dd t|ddtddd d S )Nr      r   r   r?   rN   r   r   )\(?rA   r   ra   gB`"۹?{Gz?g{Gzr   gMO?Mb`?r%   r   r   r'   r6   r8   r   r-   r-   r.   test_linear_values  s    z#TestAsinhLocator.test_linear_valuesc                 C   sd   t jdddd}t|dddddd	d
ddddddg t|dddddddddddddg d S )Nra   r   r   r   r   r   r   皙ɿrA   r   r   r   ir   r   gٿr   r=   r%   r   r   r'   r   r-   r-   r.   test_wide_values  s*    
     
     z!TestAsinhLocator.test_wide_valuesc                 C   s,   t jdddd}t|dddddg d	S )
z<Check that manually injected zero will supersede nearby tickr   r=   r   r   gri   g      r   Nr   r   r-   r-   r.   test_near_zero  s    zTestAsinhLocator.test_near_zeroc                 C   s.   t jddd}t|ddtddd d S )Nr   r   r>   e   f   gq=
ףY@ra   r   r   r-   r-   r.   test_fallback	  s    zTestAsinhLocator.test_fallbackc                 C   s   G dd d}t jddddd}||_d|_t| d	dd
g d|_t| d	ddg d|_t| d	ddg d|_t| dddg d S )Nc                   @   s   e Zd ZdZedd ZdS )z5TestAsinhLocator.test_symmetrizing.<locals>.DummyAxis)r   r   c                 S   s   | j S N)bounds)clsr-   r-   r.   get_view_interval  s    zGTestAsinhLocator.test_symmetrizing.<locals>.DummyAxis.get_view_intervalN)r3   r4   r5   r  classmethodr	  r-   r-   r-   r.   	DummyAxis  s   r  r   r=   r   r   )r   r?   r   rN   )r   r   r   r   )r   ri   )g333333rj   )r   r   rj   r   )r%   r   axisr  r   )r(   r  r   r-   r-   r.   test_symmetrizing  s     z"TestAsinhLocator.test_symmetrizingc                 C   s   t jddddd}t|dddd	d
ddddddddddddddddddddddg t jdddd }t|d!d"d#d$d%ddd&dd'ddd(d)d*g d S )+Nr   rE   r   )r   r=   r   )r   r?   rN   r   n   iir   iir   r   r         r@   r   r   ra   rc   r   r=   r   r   2   r   i,    r   r   ii  iiir   rA      }   iq  r   )r(   Zlctr10Zlctr5r-   r-   r.   test_base_rounding%  sF                        z#TestAsinhLocator.test_base_roundingN)r3   r4   r5   r   rJ   r   r  r  r  r  r  r-   r-   r-   r.   r     s   

r   c                   @   sz  e Zd Zddddddddd	d
dddddddddddddddddddgZddgZddgZd d!d"d#d$d%d&d'd(g	Zd)d*gd+d,gd-d.gd/d0gd1d2ggZd3d4d5d6gZe	j
d7d8d9gd:d; Ze	j
d<ed=d> Ze	j
d?ed@dA Ze	j
dBedCdD ZdEdF ZdGdH Ze	j
dIedJdK Ze	j
dLedMdN Ze	j
dOedPdQ Ze	j
dOedRdS ZdTdU ZdVdW ZdXdY ZdZS )[TestScalarFormatter){      r   )iCir   )i50  i=0  i40  )iii)g    i@g    j@順 )g    jg    i`y)g    hi@g    j@r  )g    jg    hir  )iO iQ iP )i+i+i+)r   r   r   )r  r  r   )g/'?g_L?re   )g
ףp=@g33333@i  )g@g    `@iȯ  )g1е/G?gg޻G?g9̗G?)g\h@gp=
@i.1  )g      "@g      (@r   )g      @     @r   )g     @r  r   )Gz?r   r   )g{G#@gQ$@r   )g(\X@gq=
ף Y@r   )g(\@g
ףp=
@r   )g{G/@g(\0@r   )g!rhܿrh|?r   )grh|߿r  r   )g3333@g    @@i0  )gffffgffff@r   TF)Fry   )r   r	   r   F)Tr   )r  r   r   F)Tr  )r   r   r   F)Tr  )r  x   r   F)Tr  )ir  r   F)Tr  )gMbPr   r   F)T)rQ   r   )g   tAg   0Ar   T)Try   g     jr   r   F)T)r   r   r"  r   Fr   z0.000g(0?z0.012grh|?z0.123gGz?z1.230g(@z12.300)ra   1e-1)r   z1.1e-1)g    חAZ1e8)g    9Az1.1e8zunicode_minus, result)T   −1)F-1c                 C   s.   |t jd< t j d |ks*td S )Naxes.unicode_minusr   )	rV   rcParamsrq   Zgcaru   get_major_formatterformat_data_shortstriprH   )r(   unicode_minusresultr-   r-   r.   test_unicode_minusu  s
    
z&TestScalarFormatter.test_unicode_minuszleft, right, offsetc              	   C   s   t  \}}|j }||kr,tjtddnt  ||| W 5 Q R X |j	  |j
|ksbt||krxtjtddnt  ||| W 5 Q R X |j	  |j
|kstd S )NzAttempting to set identicalmatch)rq   rr   ru   r(  r9   r   r   r   rs   Z_update_ticksr   rH   )r(   leftrightr   rw   rx   	formatterr-   r-   r.   test_offset_value}  s     


z%TestScalarFormatter.test_offset_value
use_offsetc              	   C   sD   t d|i, t }|| ks(t|jdks6tW 5 Q R X d S )Nzaxes.formatter.useoffsetr   )rV   rW   r%   ScalarFormatterget_useOffsetrH   r   )r(   r4  tmp_formr-   r-   r.   test_use_offset  s    z#TestScalarFormatter.test_use_offsetuse_math_textc              	   C   s6   t d|i t }|| ks(tW 5 Q R X d S )Naxes.formatter.use_mathtext)rV   rW   r%   r5  Zget_useMathTextrH   )r(   r9  r7  r-   r-   r.   test_useMathText  s    z$TestScalarFormatter.test_useMathTextc                 C   s0   t  }|d | rt|jdks,td S )Nr   )r%   r5  Zset_useOffsetr6  rH   r   r(   r7  r-   r-   r.   test_set_use_offset_float  s    
z-TestScalarFormatter.test_set_use_offset_floatc              	   C   s   t  }|d }|r0|d dd  g t jgfkr:td tddiP t }|	 s^t
|  |jdd |d	d
dg ||dkst
W 5 Q R X d S )Nthousands_sepgroupingr   zLocale does not apply groupingzaxes.formatter.use_localeTr   r   r   r   r=   r   )locale
localeconvCHAR_MAXr9   skiprV   rW   r%   r5  Zget_useLocalerH   create_dummy_axisr  Zset_data_intervalset_locs)r(   convsepr7  r-   r-   r.   test_use_locale  s     
z#TestScalarFormatter.test_use_localez.sci_type, scilimits, lim, orderOfMag, fewticksc           	      C   sv   t  }|| || t \}}|j| |j|  |rT|j	t 
d ||j  ||jksrtd S )NrZ   )r%   r5  Zset_scientificZset_powerlimitsrq   rr   r   set_major_formatterr   set_major_locatorr&   rE  get_majorticklocsZorderOfMagnituderH   )	r(   Zsci_typeZ	scilimitsr   Z
orderOfMagZfewticksr7  rw   rx   r-   r-   r.   test_scilimits  s    


z"TestScalarFormatter.test_scilimitszvalue, expectedc                 C   s(   dt jd< t }|||ks$td S )NFr&  )rV   r'  r%   r5  format_datarH   )r(   valuer+   sfr-   r-   r.   test_format_data  s    
z$TestScalarFormatter.test_format_datazdata, expectedc                 C   s8   t  \}}|dd |j j}|||ks4td S )Nr   r   )rq   rr   rs   ru   r(  r)  rH   )r(   rT   r+   rw   rx   fmtr-   r-   r.   test_cursor_precision  s    z)TestScalarFormatter.test_cursor_precisionc                 C   s\   t  }|  |jdd |j}|||ks4t|j dksFt|j dksXtd S )Nr   r   r   )	r%   r5  rD  r  Zset_view_intervalr)  rH   Zget_tick_spaceZ
get_minpos)r(   rT   r+   rO  rQ  r-   r-   r.   test_cursor_dummy_axis  s    z*TestScalarFormatter.test_cursor_dummy_axisc              
   C   s   t jdddd ttjjdk rftjtdd, t	
 \}}|dd	d
g |j  W 5 Q R X nZtjtddF tjtdd, t	
 \}}|dd	d
g |j  W 5 Q R X W 5 Q R X d S )NZserifcmr10F)font.familyz
font.serifr:  rE   zcmr10 font should ideallyr.  r   r   r   z
Glyph 8722)rV   r'  updateparse_versionr9   __version__r   r   r   rq   rr   rz   canvasdrawr   r-   r-   r.   test_mathtext_ticks  s     z'TestScalarFormatter.test_mathtext_ticksc              	   C   s   t jdddd |jtjddj t \}}|ddgd	dg |	d
 ddddg}t
 }||t|| |j  |jrtW 5 Q R X d S )NrT  cmT)rU  zmathtext.fontsetr:  zmatplotlib.mathtext)loggergQr`   (   r   r   rc   rZ   r  )rV   r'  rV  Zat_levelloggingWARNINGrq   rr   plotr   r%   LogFormatterSciNotationZ
set_yticksmaprY  rZ  textrH   )r(   Zcaplogrw   rx   Zyticksr2  r-   r-   r.   test_cmr10_substitutions  s    

z,TestScalarFormatter.test_cmr10_substitutionsc                 C   s&   t  }|g  |ddks"td S )Nr    )r%   r5  rE  rH   )r(   rO  r-   r-   r.   test_empty_locs  s    
z#TestScalarFormatter.test_empty_locsN)r3   r4   r5   offset_dataZuse_offset_dataZuseMathText_dataZscilimits_dataZcursor_datarM  r9   r:   r;   r-  r3  r8  r;  r=  rH  rL  rP  rR  rS  r[  re  rg  r-   r-   r-   r.   r  3  s   !	



 




r  c                   @   s"   e Zd ZdZd	ddZdd ZdS )
FakeAxiszAAllow Formatter to be called without having a "full" plot set up.r   r   c                 C   s   || _ || _d S r  r)   r*   )r(   r)   r*   r-   r-   r.   __init__  s    zFakeAxis.__init__c                 C   s   | j | jfS r  rj  )r(   r-   r-   r.   r	    s    zFakeAxis.get_view_intervalN)r   r   )r3   r4   r5   __doc__rk  r	  r-   r-   r-   r.   ri    s   
ri  c                   @   s   e Zd Zddeddeddddddd	d
dgfddeddejdddgedddddddgfddejddddgededdd d!d"gfgZ	d#d$d%ejej
gZejd&e	ejd'ed(d) Zd*d+ Zd,S )-TestLogFormatterExponentTrZ   r   r   z-3z-2r%  0123Fr   ra   r   rA   r   gh㈵r   0.1z1e-053.14z0.2z-0.2z-1e-05r  r=   r      *   Zdtype5Z12Z42r   g      @r   z2labelOnlyBase, exponent, locs, positions, expectedrN   c           	         s\   t j||d td||  _|| } fddt||D }dd |D }||ksXtd S )NrN   labelOnlyBaser   c                    s   g | ]\}} ||qS r-   r-   )r   r   posr2  r-   r.   r   #  s     z7TestLogFormatterExponent.test_basic.<locals>.<listcomp>c                 S   s   g | ]}| d dqS )-u   −replace)r   labelr-   r-   r.   r   $  s     )r%   LogFormatterExponentri  r  r   rH   )	r(   ry  rN   exponentlocsZ	positionsr+   valslabelsr-   r{  r.   r/     s    z#TestLogFormatterExponent.test_basicc                 C   s*   t jddd}t |_|ddks&td S )Nr   Trx  g&$?rf  )r%   r  ri  r  rH   )r(   r2  r-   r-   r.   
test_blank'  s    z#TestLogFormatterExponent.test_blankN)r3   r4   r5   r6   r8   r7   pir   floatZ
param_dataeZ	base_datar9   r:   r;   r/   r  r-   r-   r-   r.   rm    s&    
 
rm  c                   @   s>   e Zd Ze ZddddddddgZej	d	ed
d Z
dS )TestLogFormatterMathtext)r   r   $\mathdefault{10^{0}}$)r   r   z$\mathdefault{10^{-2}}$)r   r
   z$\mathdefault{10^{2}}$)r=   r   z$\mathdefault{1}$)r=   r   z$\mathdefault{0.01}$)r=   r
   z$\mathdefault{100}$)r=   r   z$\mathdefault{10^{-3}}$)r=   r   z$\mathdefault{10^{3}}$zmin_exponent, value, expectedc              	   C   s0   t d|i | ||ks"tW 5 Q R X d S )Nzaxes.formatter.min_exponent)rV   rW   rQ  rH   )r(   Zmin_exponentrN  r+   r-   r-   r.   test_min_exponent;  s    z*TestLogFormatterMathtext.test_min_exponentN)r3   r4   r5   r%   ZLogFormatterMathtextrQ  	test_datar9   r:   r;   r  r-   r-   r-   r.   r  .  s   r  c                   @   sR   e Zd Zddddddddd	d
ddddddgZejdej	dedd Z
dS )TestLogFormatterSciNotation)r   g      ?z$\mathdefault{2^{-5}}$)r   r   z$\mathdefault{2^{0}}$)r       z$\mathdefault{2^{5}}$)r   g333333?z$\mathdefault{1.2\times2^{-5}}$)r   333333?z$\mathdefault{1.2\times2^{0}}$)r   g333333C@z$\mathdefault{1.2\times2^{5}}$)r   r   z$\mathdefault{-10^{0}}$)r   r   z$\mathdefault{10^{-5}}$)r   r   r  )r   r  z$\mathdefault{10^{5}}$)r   gh㈵>z$\mathdefault{2\times10^{-5}}$)r   r   z$\mathdefault{2\times10^{0}}$)r   i@ z$\mathdefault{2\times10^{5}}$)r   r   z$\mathdefault{5\times10^{-5}}$)r   r   z$\mathdefault{5\times10^{0}}$)r   i  z$\mathdefault{5\times10^{5}}$defaultzbase, value, expectedc              	   C   sH   t j|d}ddddh|_tddi |||ks:tW 5 Q R X d S )NrM   r   r   r   r  text.usetexF)r%   rb  ZsublabelrV   rW   rH   )r(   rN   rN  r+   r2  r-   r-   r.   r/   U  s    z&TestLogFormatterSciNotation.test_basicN)r3   r4   r5   r  rV   stylecontextr9   r:   r;   r/   r-   r-   r-   r.   r  A  s(   
r  c                   @   s  e Zd Zddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddgZejdedd ZdddZe	j
ddd Zejdddddgdd Zejdddddgdd ZdS )TestLogFormatter)}9x ?r   z3.142e-5)Gŷ4?r   z3.142e-4)ei?r   z3.142e-3)\, ?r   z3.142e-2)s7v/?r   z3.142e-1)PERT!	@r   3.142)f)zj?@r   z3.142e1)&FYs@r   z3.142e2)WXp/@r   z3.142e3)mnL@r   z3.142e4),Ar   z3.142e5)r   r   1e-5)r   r   1e-4)r   r   1e-3)r   r   1e-2)ra   r   r#  )r   r   ro  )r   r   10)r   r   100)r   r   1000)'  r   1e4)r  r   1e5)r  r   rn  )r  r   rn  )r  r   0.003)r  r   0.031)r  r   0.314)r  r   r  )r  r   31.416)r  r   314.159)r  r   3141.593)r  r   	31415.927)r  r   
314159.265)r   r   rn  )r   r   rn  )r   r   0.001)r   r   0.01)ra   r   rr  )r   r   ro  )r   r   r  )r   r   r  )r   r   r  )r  r   10000)r  r   100000)r  r   rn  )r  r   rn  )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   rn  )r   r   rn  )r   r   r  )r   r   r  )ra   r   rr  )r   r   ro  )r   r   r  )r   r   r  )r   r   r  )r  r   r  )r  r   r  )r  r   rn  )r  r   rn  )r  r   rn  )r  r   z0.03)r  r   z0.31)r  r   rs  )r  r   z31.42)r  r   z314.16)r  r   z3141.59)r  r   z31415.93)r  r   z	314159.27)r   r   rn  )r   r   rn  )r   r   rn  )r   r   r  )ra   r   rr  )r   r   ro  )r   r   r  )r   r   r  )r   r   r  )r  r   r  )r  r   r  )r  r   rn  )r  r   rn  )r  r   rn  )r  r   rn  )r  r   z0.3)r  r   3.1)r  r   z31.4)r  r   z314.2)r  r   z3141.6)r  r   z31415.9)r  r   z314159.3)r   r   rn  )r   r   rn  )r   r   rn  )r   r   rn  )ra   r   rr  )r   r   ro  )r   r   r  )r   r   r  )r   r   r  )r  r   r  )r  r   r  )r      .Az3.1e-5)r  r  z3.1e-4)r  r  z3.1e-3)r  r  z3.1e-2)r  r  z3.1e-1)r  r  r  )r  r  z3.1e1)r  r  z3.1e2)r  r  z3.1e3)r  r  z3.1e4)r  r  z3.1e5)r   r  r  )r   r  r  )r   r  r  )r   r  r  )ra   r  r#  )r   r  ro  )r   r  r  )r   r  r  )r   r  r  )r  r  r  )r  r  r  zvalue, domain, expectedc                 C   s$   t  }|||}||ks td S r  )r%   LogFormatterZ_pprint_valrH   )r(   rN  domainr+   rQ  r  r-   r-   r.   test_pprint  s    zTestLogFormatter.test_pprintr-   c                    sf   |   | } | |dtt|  }fdd|D } fdd|D }||ksbtdS )z.Test whether locator marks subs to be labeled.r   c                    s   g | ]}t | kqS r-   )round)r   cr   r-   r.   r     s     z0TestLogFormatter._sub_labels.<locals>.<listcomp>c                    s   g | ]} |d kqS rf  r-   r   rQ  r-   r.   r     s     N)Zget_minor_formatterr   rE  r6   r   r   rH   )r(   r  r   Zminor_tlocsZcoefsZlabel_expectedZ
label_testr-   )rQ  r   r.   _sub_labels  s    
zTestLogFormatter._sub_labelsr  c                    sV  t  \}}|d |jtjdg d |jtjdt	ddd |j
tjdd |jtjdd |dd	 |j   |j   fd
d|j D }t|st| j|jg d |dd | j|jg d |dd | j|jg d |dd | j|jddddgd |dd | j|jtj	ddtdd d S )Nr   r   )rN   r   r   T)ry  Fr   g     @c                    s   g | ]} |d kqS r  r-   r   r  r-   r.   r     s   z2TestLogFormatter.test_sublabel.<locals>.<listcomp>r   i   P   rE   r=   rZ   r   r   ri   rv  )rq   rr   Z
set_xscaleru   rJ  r%   r   r|   r6   r8   rI  r  set_minor_formatterrs   r(  rE  rK  r   rH   r  r   )r(   rw   rx   Zshow_major_labelsr-   r  r.   test_sublabel  s0    



zTestLogFormatter.test_sublabelvalr   r   r   r   c                 C   s(   t  }t |_||t|ks$td S r  )r%   r  ri  r  strrH   r(   r  Ztemp_lfr-   r-   r.   test_LogFormatter_call  s    z'TestLogFormatter.test_LogFormatter_callg       g       g       g       c                 C   s   t  }t |_|| d S r  )r%   r  ri  r  r  r-   r-   r.   test_LogFormatter_call_tiny#  s    z,TestLogFormatter.test_LogFormatter_call_tinyN)r-   )r3   r4   r5   Zpprint_datar9   r:   r;   r  r  rV   r  r  r  r  r  r-   r-   r-   r.   r  ^  s     




%
r  c                   @   s  e Zd Zedd Zejddddddd	gd
d Ze	dd e
ddD dd e
ddD  dg Zejdedd Zejdddd Zejdddeeddd   dd ZddddgZejd ed!d" Zd#d$ Zd%d& Zd'd( Zejd)d*d+d, Zd-S ).TestLogitFormatterc                 C   s   t d| }|r|d dk	}|d r0t|d nd}|d dk	rLt|d nd}|d|  }|d sp|d dk	r|r|d| S |S t d	| }|rt|d
 t|d  }}|| S tddS )z
        Parser to convert string as r'$\mathdefault{1.41\cdot10^{-4}}$' in
        float 1.41e-4, as '0.5' or as r'$\mathdefault{\frac{1}{2}}$' in float
        0.5,
        zT[^\d]*(?P<comp>1-)?(?P<mant>\d*\.?\d*)?(?:\\cdot)?(?:10\^\{(?P<expo>-?\d*)})?[^\d]*$compNZmantr   expor   r   z4[^\d]*\\frac\{(?P<num>\d+)\}\{(?P<deno>\d+)\}[^\d]*$numdenozNot formatted by LogitFormatter)rer/  r  r   r   )stringr/  r  Zmantissar  rN  r  r  r-   r-   r.   logit_deformatter,  s*    	 z$TestLogitFormatter.logit_deformatterzfx, x)zSTUFF0.41OTHERSTUFFg=
ףp=?)zSTUFF1.41\cdot10^{-2}OTHERSTUFFg!u?)zSTUFF1-0.41OTHERSTUFFgzG?)z!STUFF1-1.41\cdot10^{-2}OTHERSTUFFgx$(~?)ZSTUFFN)zSTUFF12.4e-3OTHERSTUFFNc              	   C   sH   |d kr*t t t| W 5 Q R X nt|}t||sDtd S r  )r9   r   r   r  r  r   r   rH   )r(   fxr   r   r-   r-   r.   test_logit_deformaterM  s
    
z(TestLogitFormatter.test_logit_deformaterc                 C   s   g | ]}d |  qS )r   r-   r   ir-   r-   r.   r   a  s     zTestLogitFormatter.<listcomp>r   r   c                 C   s   g | ]}d d|   qS )r   r   r-   r  r-   r-   r.   r   b  s     r   r   c                 C   s>   t jdd}|| j ||}t|}t||s:tdS )zj
        Test the formatted value correspond to the value for ideal ticks in
        logit space.
        Fuse_overlineN)	r%   LogitFormatterrE  decade_testr  r  r   r   rH   )r(   r   r2  sx2r-   r-   r.   r/   f  s
    
zTestLogitFormatter.test_basic)r   r  r   r   r   r   c                 C   s0   t jdd}|| j ||}|dks,tdS )zl
        Test that invalid value are formatted with empty string without
        raising exception.
        Fr  rf  N)r%   r  rE  r  rH   )r(   r   r2  r  r-   r-   r.   test_invalidr  s    zTestLogitFormatter.test_invalidrQ   r   c                 C   s   t jdd}dD ]~}|d|  dk r||d|  ||d|  g ||}||d|  }t|t| }d|  k rd| k sn tqdS )zS
        The format length should change depending on the neighbor labels.
        Fr  )	r   r   r  r      r   i  i  r  r   r   r   N)r%   r  rE  r  r  rH   )r(   r   r2  NZsxZsx1dr-   r-   r.   test_variablelength}  s     z&TestLogitFormatter.test_variablelength)Tr   )r  F)K   F)Tr   )r  r  T)Tr   )r  Tr  )F)r   gRQ?gp=
ף?))r   Tr  r  zmethod, lims, casesc                 C   s   |rt jdd}|j| }n
t|}t jdd}|D ]`\}}|| ||}	dd |	D }
|r~t|
dkst	||fq6t|
dks6t	||fq6dS )z,
        Test minor/major displays.
        Tro   c                 S   s   g | ]}t |d kr|qS r   r~   r   fr-   r-   r.   r     s      z:TestLogitFormatter.test_minor_vs_major.<locals>.<listcomp>r   N)
r%   r   r'   r6   r7   r  Zset_minor_thresholdformat_ticksr~   rH   )r(   methodr   Zcasesmin_locr   min_form	thresholdZ	has_minor	formattedlabelledr-   r-   r.   test_minor_vs_major  s    


z&TestLogitFormatter.test_minor_vs_majorc                 C   sd   t jdd}t jdd}|dd}dD ]6}|| ||}dd |D }t||ks(tq(dS )	z1
        Test the parameter minor_number
        Tro   r`   r   )r   rZ   rE   r   c                 S   s   g | ]}t |d kr|qS r   r  r  r-   r-   r.   r     s      z8TestLogitFormatter.test_minor_number.<locals>.<listcomp>N)r%   r   r  r'   Zset_minor_numberr  r~   rH   )r(   r  r  r   Zminor_numberr  r  r-   r-   r.   test_minor_number  s    

z$TestLogitFormatter.test_minor_numberc                 C   s`   d}d}d}t jdd}|||ks(t|d |||ksBt|d |||ks\tdS )z1
        Test the parameter use_overline
        r  z$\mathdefault{1-10^{-2}}$z"$\mathdefault{\overline{10^{-2}}}$Fr  TN)r%   r  rH   r  )r(   r   Zfx1Zfx2formr-   r-   r.   test_use_overline  s    

z$TestLogitFormatter.test_use_overlinec                 C   sP   t  }d|dkst|d d|dks2t|d d|dksLtdS )z-
        Test the parameter one_half
        z\frac{1}{2}r   z1/2zone halfN)r%   r  rH   Zset_one_half)r(   r  r-   r-   r.   test_one_half  s    

z TestLogitFormatter.test_one_halfr  )r      i  c                 C   sv   t dd|dd }t }|D ]N}||}|drPdt|dd   }nt|}t|| d| k s"tq"d S )Nr   r   r   z1-r   )	r6   r{   r%   r  r)  
startswithr  absrH   )r(   r  r  r  r   r  r  r-   r-   r.   test_format_data_short  s    

z)TestLogitFormatter.test_format_data_shortN)r3   r4   r5   r   r  r9   r:   r;   r  r   r   r  r/   r  r6   expr{   r  Zlims_minor_majorr  r  r  r  r  r-   r-   r-   r.   r  +  sL   
 



&

r  c                   @   s   e Zd Zdd ZdS )TestFormatStrFormatterc                 C   s   t d}d|dkstd S )Nz%05d00002r   )r%   ZFormatStrFormatterrH   r<  r-   r-   r.   r/     s    
z!TestFormatStrFormatter.test_basicN)r3   r4   r5   r/   r-   r-   r-   r.   r    s   r  c                   @   s*   e Zd ZddgZejdedd ZdS )TestStrMethodFormatter)z{x:05d})r   r  )z{x:03d}-{pos:02d})r   r   z002-01zformat, input, expectedc                 C   s   t |}|| |kstd S r  )r%   ZStrMethodFormatterrH   )r(   formatinputr+   rQ  r-   r-   r.   r/     s    
z!TestStrMethodFormatter.test_basicN)r3   r4   r5   r  r9   r:   r;   r/   r-   r-   r-   r.   r    s
   r  c                   @   sX   e Zd Zddddddddd	d
d
ddddddddddddddgZejdedd ZdS )TestEngFormatter)FEJ)z
-1.23457 k-1 kz-1.23 k)Tr  )u   −1.23457 k   −1 ku	   −1.23 k)FރB)z-1.23457r%  z-1.23)Tr  )u
   −1.23457r$  u   −1.23)F_c97ݚ)z
-123.457 mz-123 mz	-123.46 m)Tr  )u   −123.457 mu   −123 mu   −123.46 m)FQ^-':T)z
-1.23457 mz-1 mz-1.23 m)Tr  )u   −1.23457 mu   −1 mu	   −1.23 m)Tg       rn  rn  z0.00)Tr   r  )Tgm>)u
   1.23457 µu   1 µu   1.23 µ)Tg_c97ݚ?)z	123.457 mz123 mz123.46 m)Tra   )100 mr  z100.00 m)Tr   )ro  ro  z1.00)TgރB?)z1.23457ro  z1.23)Tg33333?@)z999.91 kz999.90)Tg*:?@r  r  1.00 k)F*:?)r  r  z-1.00 k)Tr	  )r   r   u	   −1.00 k)Tr   r  )Ti  )z1.001 kr  r  )Ti )z	100.001 kz100 kz100.00 k)TgZ$.A)z	987.654 kz988 kz987.65 k)TguˏE)1230 Yr
  z	1230.00 Yzunicode_minus, input, expectedc                    s  |t jd< dd |}t tjddtjddf}t||D ]\}}|||ks>tq> fdd|D }tjd	tjdd
tjdd
f}t||D ]\}}|||kstqdD ]Ή fdd|D }tjdtjddtjddf}t||D ]\}}|||ks
tq
fdd|D }tjdtjddtjddf}t||D ]\}}|||ksjtqjqdS )a  
        Test the formatting of EngFormatter for various values of the 'places'
        argument, in several cases:

        0. without a unit symbol but with a (default) space separator;
        1. with both a unit symbol and a (default) space separator;
        2. with both a unit symbol and some non default separators;
        3. without a unit symbol but with some non default separators.

        Note that cases 2. and 3. are looped over several separator strings.
        r&  r  
0123456789r   )placesr   c                 3   s.   | ]&}|d   kr|d  n| V  qdS r    Nr-   r   Z_s)DIGITSUNITr-   r.   	<genexpr>9  s   z/TestEngFormatter.test_params.<locals>.<genexpr>)unit)r  r  )rf  u    z@_@c                 3   s6   | ].}|d   kr|  n| d V  qdS r  r}  r  r  r  _sepr-   r.   r  I  s   )r  rG  )r  r  rG  c                 3   s   | ]}| d  V  qdS )r  Nr}  r  )r  r-   r.   r  W  s     )rG  )r  rG  N)rq   r'  r%   EngFormatterr   rH   )r(   r+  r  r+   Zexp_outputs
formattersZ
_formatterZ_exp_outputr-   r  r.   test_params  sH    




zTestEngFormatter.test_paramsN)r3   r4   r5   Zraw_format_datar9   r:   r;   r  r-   r-   r-   r.   r    s8   %r  c                  C   s   t  \} }|dddgdddg |dddg tjddtjddfD ]>}|j| | j	  dd |
 D }|d	d
dgksLtqLd S )Nr   r  r   T)usetex)ZuseMathTextc                 S   s   g | ]}|  qS r-   )Zget_text)r   Zlablr-   r-   r.   r   i  s     z8test_engformatter_usetex_useMathText.<locals>.<listcomp>z$0$z$500$z$1$ k)rq   rr   ra  rz   r%   r  ru   rI  rY  rZ  Zget_xticklabelsrH   )rw   rx   r2  Zx_tick_label_textr-   r-   r.   $test_engformatter_usetex_useMathTexta  s    


r  c                   @   s   e Zd Zddddddddd	d
ddddddgZdddddddddddddddd gZd!d"d#d$gZejjd%eed&d'd( Z	ejd)ed*d+ Z
d,S )-TestPercentFormatter)r   r   %r!  r   z120%)r   r   r  r   Z   z100%)r   r   r  r  r  z90%)r   r   r  g333333r^  z-2%)r   r   r  g     V@r   z90.0%)r   r   r  gfffffT@r  z80.1%)r   r   r  gQQ@r  z70.2%)r   r   r  gxFNr^  z-60.6%)r   Nr  _   r   z95.00%)r   Nr  r=   r   z300%)      1@Nr  r   g      !@z6%)r  Nr  r   g @z5.9%)r   Nr  r   gư>z-2000.00000%)r   r   Nr  r   z120.00)r  r=   rf  r  r   z66.667)ru  Nz
^^Foobar$$   rt  z50.0^^Foobar$$zdecimals=0, x>100%zdecimals=0, x=100%zdecimals=0, x<100%zdecimals=0, x<0%zdecimals=1, x>100%zdecimals=1, x=100%zdecimals=1, x<100%zdecimals=1, x<0%z$autodecimal, x<100%, display_range=1z7autodecimal, x>100%, display_range=6 (custom xmax test)z;autodecimal, x<100%, display_range=8.5 (autodecimal test 1)z;autodecimal, x<100%, display_range=8.4 (autodecimal test 2)z=autodecimal, x<-100%, display_range=1e-6 (tiny display range)zNone as percent symbolzEmpty percent symbolzCustom percent symbol)FF50\{t}%)FTz50\\\{t\}\%)TFr!  )TTr!  z2xmax, decimals, symbol, x, display_range, expected)idsc              	   C   sB   t |||}tjddid ||||ks4tW 5 Q R X d S )Nr  Frcr%   ZPercentFormatterrV   rW   Z
format_pctrH   )r(   ZxmaxZdecimalssymbolr   Zdisplay_ranger+   r2  r-   r-   r.   r/     s    zTestPercentFormatter.test_basiczis_latex, usetex, expectedc              	   C   sB   t jd|d}tjd|id |dd|ks4tW 5 Q R X d S )Nz\{t}%)r&  is_latexr  r#  r  r   r%  )r(   r'  r  r+   rQ  r-   r-   r.   
test_latex  s    zTestPercentFormatter.test_latexN)r3   r4   r5   Zpercent_dataZpercent_idsZ
latex_datar9   r:   r;   r/   r(  r-   r-   r-   r.   r  o  s^    
r  c               	   C   s6   t  \} }tt |jt  W 5 Q R X d S r  )	rq   rr   r9   r   	TypeErrorru   rI  r%   r   rw   rx   r-   r-   r.   test_majformatter_type  s    r+  c               	   C   s6   t  \} }tt |jt  W 5 Q R X d S r  )	rq   rr   r9   r   r)  ru   r  r%   r   r*  r-   r-   r.   test_minformatter_type  s    r,  c               	   C   s6   t  \} }tt |jt  W 5 Q R X d S r  )	rq   rr   r9   r   r)  ru   rJ  r%   r  r*  r-   r-   r.   test_majlocator_type  s    r-  c               	   C   s6   t  \} }tt |jt  W 5 Q R X d S r  )	rq   rr   r9   r   r)  ru   r|   r%   r  r*  r-   r-   r.   test_minlocator_type  s    r.  c                     sH   t    fdd} | ddd | ddd | ddd | ddd d S )	Nc              	      sh   | |d}t j|d  dd|}W 5 Q R X t|j dk| ksJtt|j dk|ksdtd S )N)zxtick.minor.visiblezytick.minor.visibler#  r   r   )rq   rW   Zadd_subplotr~   ru   get_minor_ticksrH   r   )ZxminorZyminorr  r$  rx   rw   r-   r.   minorticksubplot  s    z,test_minorticks_rc.<locals>.minorticksubplotFr   Tr   r=   rZ   )rq   figure)r1  r-   r0  r.   test_minorticks_rc  s    	r3  z%remove_overlapping_locs, expected_num))Tr   )Nr   )Fr   c                 C   sH  t jdddd}t t|}t \}}||| |jt	j
  |jt	j
d |jt	j
d |jt	j
d |jd | d k	r| |j_|jj}||j ksttj|j|d	 |jj}||jjkstt|j |kstt|j |kstt|j |ks(tt|j |d
 ksDtd S )Nz
2018-11-03z
2018-11-06Z
datetime64rv  z
%a)r   r   rt     z%H:%Mr   )remove_overlapping_locsr   )r6   r8   Zonesr~   rq   rr   ra  ru   rJ  rV   datesZ
DayLocatorrI  ZDateFormatterr|   ZHourLocatorr  r/  r5  Zget_remove_overlapping_locsrH   Zsetpr   Zget_minorticklabelsZget_minorticklines)r5  Zexpected_numtr   rw   rx   currentnewr-   r-   r.   test_remove_overlap  s(    r:  subhiZaardvark)r   r   c              	   C   s.   t  }tt |j| d W 5 Q R X d S )Nr   )r%   r   r9   r   r   rG   )r;  llr-   r-   r.   test_bad_locator_subs  s    r>  r?   r   r   r=   r   r  c              	   C   sR   t  }|j| d dD ]4}|d|}tt|dddk stqd S )Nr>   )r   r   r   r   r   r  r   r   r   r      r   )	r%   r   rG   r'   r6   Zdiffr   r   rH   )r?   r=  topr   r-   r-   r.   test_small_range_loglocator  s
    rA  c                  C   s@   t  } | ddkst| ddks*t| ddks<td S )Nr   rf  )r%   ZNullFormatterrH   rM  r)  r{  r-   r-   r.   test_NullFormatter  s    rB  r2  c                 C   s
   d|  S )Nzval: r-   )r   r-   r-   r.   <lambda>      rC  )Zfoobarc                 C   s.   |   dkst| d |   dks*td S )Nrf  rV   )Z
get_offsetrH   Zset_offset_stringr{  r-   r-   r.   test_set_offset_string  s    
rF  )@
contextlibr   r   r@  r_  r  Zpackaging.versionr   rW  Znumpyr6   Znumpy.testingr   r   r9   Z
matplotlibrV   Zmatplotlib.pyplotZpyplotrq   Zmatplotlib.tickerZtickerr%   r   r<   rK   r^   r   r   r   r   r   r   r   r   r  ri  rm  r  r  r  r  r  r  r  r  r  r+  r,  r-  r.  r3  r:   r;   r:  zerosr>  r  r  rA  rB  ZFuncFormatterZFixedFormatterrF  r-   r-   r-   r.   <module>   s|   "g/ j P
" N 3qE
!

