U
    i2e                     @   sx  d dl mZ d dlZd dlZd dlZd dl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.d/ d/Z)d0d1 Z*G d2d3 d3Z+d4d5 Z,d6d7 Z-d8d9 Z.d:d; Z/d<d= Z0ej12d>d?d@dA Z3ej12dBdCdDge4dEgdFdG Z5ej12dHdIdJdKdLgej67dMdNdO Z8dPdQ Z9ej12dRe:dSdT e;dUfdVdW Z<dS )X    )nullcontextN)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-qhyxngld/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)   r0   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.   r1   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$   LinearLocatorr5   r6   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$   rA   
set_paramsr>   AssertionErrorrE   r'   r+   r,   r,   r-   test_set_params0   s    z!TestLinearLocator.test_set_paramsN)r2   r3   r4   r.   rI   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$   MultipleLocatorr5   r6   r   r&   rB   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datarK   rL   r   r   )r   r   Nmpl
rc_contextr$   rQ   r   Zview_limitsrH   r,   r,   r-   test_view_limitsB   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.
        rR   Zround_numbersrK   rL      )rN   rO   NrT   rH   r,   r,   r-   test_view_limits_round_numbersJ   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?rL   g333333?N)r$   rQ   rF   Z_edgesteprG   )r'   Zmultr,   r,   r-   rI   S   s    z#TestMultipleLocator.test_set_paramsN)r2   r3   r4   r.   rW   rZ   rI   r,   r,   r,   r-   rJ   ;   s   	rJ   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_onr5   r6   r   xaxisget_ticklocs)r'   figaxrC   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   )rp   rq   rr   
set_xticksr5   linspacers   rt   set_minor_locatorr$   AutoMinorLocatorlenget_minorticklocsrG   )r'   Znb_majorticksZexpected_nb_minorticksrv   rw   xlimsr,   r,   r-   test_low_number_of_majorticksm   s    
z2TestAutoMinorLocator.test_low_number_of_majorticks)r   r   )r   rY   )      @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>)	rU   rV   majorstep_minordivisionsr5   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   )rp   rq   rr   ry   rs   rt   r{   r$   r|   r}   r~   rG   )r'   Z
major_stepZexpected_nb_minordivisionsrv   rw   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_   r`   ra   r   rb   rc   rd   r   re   rf   r[   r   rg   rh   r   ri   r   rj   rk   rl   rm   {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 )
NTro   yr   )	linewidthmajork)colorr   rn   )rp   rq   rs   Zgridset_ylimr   yaxisru   )r'   limrefrv   rw   r,   r,   r-   test_additional   s    
z$TestAutoMinorLocator.test_additionalN)r2   r3   r4   r.   paramsr8   r9   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
   r`         $@     @@     j@g    cA    eAg     @r   rL   r   r          @      @g       @g      0@g      @@g      P@g      `@g      p@r   r   )	r$   
LogLocatorr8   raises
ValueErrorr&   r5   r6   r   rB   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)rp   rq   
set_yscaler   r   Z
get_yticksr'   rv   rw   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subsrd   re   g)\(?gq=
ףp?gQ?r   gp=
ף?gHzG?gQ?r   r   r   rh   r   r   )r$   r   r   r&   r5   r7   rG   rH   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.
           rD   r   rY   )r>   numdecsr   rM   N)	r$   r   rF   r>   rG   r   _baser   _subsrH   r,   r,   r-   rI      s    zTestLogLocator.test_set_paramsN)r2   r3   r4   r.   r   r   rI   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NullLocatorr8   warnsUserWarningrF   rH   r,   r,   r-   rI      s    zTestNullLocator.test_set_paramsNr2   r3   r4   rI   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)r5   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   )r5   r6   r   rG   r   r   )r   r   rw   ZayZlxZlyr,   r,   r-   r     s    

  z _LogitHelper.assert_almost_equalN)r2   r3   r4   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<   rY   r   r   r   rD   	   )皙?g333333?)r_   r@   )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"   r0   )rY   rD      N)r$   r   r%   rF   r&   shaperG   r   )r'   r   r+   Zmaxn_locr"   ticksZ
maxn_ticksr,   r,   r-   test_maxn_major9  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)intr5   floorlog10r$   r   rangerF   r}   r&   rG   )r'   r   basic_neededr+   r"   r,   r,   r-   test_nbins_majorI  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"   ro   r   r   r   N)r   )
r   r}   r$   r   r   rF   r&   rG   r   r   )
r'   r   r   r   r   r+   Z	minor_locr"   Zmajor_ticksZminor_ticksr,   r,   r-   
test_minorU  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!   TFrn   )r$   r   ro   rG   rF   rH   r,   r,   r-   test_minor_attrr  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   rG   )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   rG   )r'   r   r+   r(   r)   Zvmin2Zvmax2r,   r,   r-   test_nonsingular_nok  s    

z%TestLogitLocator.test_nonsingular_nokN)r2   r3   r4   Zref_basic_limitsr5   r7   Zref_basic_major_ticksZref_maxn_limitsr8   r9   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   rF   r"   rG   )r'   Zfixedr,   r,   r-   rI     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<   rY   )rM   offsetr   N)r$   ZIndexLocatorrF   r   rG   r   )r'   indexr,   r,   r-   rI     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   )rM   Z	linthreshr   rD   )r   r>   N)r$   ZSymmetricalLogLocatorrF   r   rG   r>   )r'   symr,   r,   r-   rI     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   rG   r>   rM   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   rY   )r   g      
@)r   r>   	symthreshrM   r      r=   r   )r   r   rL   )r   g     @r   )r$   r   r>   rG   r   rM   r   rF   r   r,   r,   r-   rI     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>   rM   r   r   )\(?r@   r   r`   gB`"۹?{Gz?g{Gzr   gMO?Mb`?r$   r   r   r&   r5   r7   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 )Nr`   r   r   r   r   r   r   皙ɿr@   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   grh   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@r`   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)r2   r3   r4   r  classmethodr  r,   r,   r,   r-   	DummyAxis  s   r
  r   r<   r   r   )r   r>   r   rM   )r   r   r   r   )r   rh   )g333333ri   )r   r   ri   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   rD   r   )r   r<   r   )r   r>   rM   r   n   iir   iir   r   r         r?   r   r   r`   rb   r   r<   r   r   2   r   i,    r   r   ii  iiir   r@      }   iq  r   )r'   Zlctr10Zlctr5r,   r,   r-   test_base_rounding$  sF                        z#TestAsinhLocator.test_base_roundingN)r2   r3   r4   r   rI   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?rd   )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)Frx   )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)rP   r   )g   tAg   0Ar   T)Trx   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)r`   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   )	rU   rcParamsrp   Zgcart   get_major_formatterformat_data_shortstriprG   )r'   unicode_minusresultr,   r,   r-   test_unicode_minust  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)rp   rq   rt   r'  r8   r   r   r   rr   Z_update_ticksr   rG   )r'   leftrightr   rv   rw   	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   )rU   rV   r$   ScalarFormatterget_useOffsetrG   r   )r'   r3  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)rU   rV   r$   r4  Zget_useMathTextrG   )r'   r8  r6  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$   r4  Zset_useOffsetr5  rG   r   r'   r6  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_MAXr8   skiprU   rV   r$   r4  Zget_useLocalerG   create_dummy_axisr  Zset_data_intervalset_locs)r'   convsepr6  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 )NrY   )r$   r4  Zset_scientificZset_powerlimitsrp   rq   r   set_major_formatterr   set_major_locatorr%   rD  get_majorticklocsZorderOfMagnituderG   )	r'   Zsci_typeZ	scilimitsr   Z
orderOfMagZfewticksr6  rv   rw   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%  )rU   r&  r$   r4  format_datarG   )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   )rp   rq   rr   rt   r'  r(  rG   )r'   rS   r*   rv   rw   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$   r4  rC  r  Zset_view_intervalr(  rG   Zget_tick_spaceZ
get_minpos)r'   rS   r*   rN  rP  r,   r,   r-   test_cursor_dummy_axis  s    z*TestScalarFormatter.test_cursor_dummy_axisc              	   C   sX   t jdddd tjtdd, t \}}|ddd	g |j	
  W 5 Q R X d S )
NZserifcmr10F)font.familyz
font.serifr9  zcmr10 font should ideallyr-  r   r   r   )rU   r&  updater8   r   r   rp   rq   ry   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 )NrS  cmT)rT  zmathtext.fontsetr9  zmatplotlib.mathtext)loggergQr_   (   r   r   rb   rY   r  )rU   r&  rU  Zat_levelloggingWARNINGrp   rq   plotr   r$   LogFormatterSciNotationZ
set_yticksmaprV  rW  textrG   )r'   Zcaplogrv   rw   Zyticksr1  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$   r4  rD  rG   )r'   rN  r,   r,   r-   test_empty_locs  s    
z#TestScalarFormatter.test_empty_locsN)r2   r3   r4   offset_dataZuse_offset_dataZuseMathText_dataZscilimits_dataZcursor_datarL  r8   r9   r:   r,  r2  r7  r:  r<  rG  rK  rO  rQ  rR  rX  rb  rd  r,   r,   r,   r-   r  2  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  rg  )r'   r,   r,   r-   r     s    zFakeAxis.get_view_intervalN)r   r   )r2   r3   r4   __doc__rh  r  r,   r,   r,   r-   rf    s   
rf  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 )-TestLogFormatterExponentTrY   r   r   z-3z-2r$  0123Fr   r`   r   r@   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, expectedrM   c           	         s\   t j||d td||  _|| } fddt||D }dd |D }||ksXtd S )NrM   labelOnlyBaser   c                    s   g | ]\}} ||qS r,   r,   )r   r   posr1  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$   LogFormatterExponentrf  r  r   rG   )	r'   rv  rM   exponentlocsZ	positionsr*   valslabelsr,   rx  r-   r.     s    z#TestLogFormatterExponent.test_basicc                 C   s*   t jddd}t |_|ddks&td S )Nr   Tru  g&$?rc  )r$   r}  rf  r  rG   )r'   r1  r,   r,   r-   
test_blank  s    z#TestLogFormatterExponent.test_blankN)r2   r3   r4   r5   r7   r6   pir   floatZ
param_dataeZ	base_datar8   r9   r:   r.   r  r,   r,   r,   r-   rj    s&    
 
rj  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)rU   rV   rP  rG   )r'   Zmin_exponentrM  r*   r,   r,   r-   test_min_exponent3  s    z*TestLogFormatterMathtext.test_min_exponentN)r2   r3   r4   r$   ZLogFormatterMathtextrP  	test_datar8   r9   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 )NrL   r   r   r   r  text.usetexF)r$   r_  ZsublabelrU   rV   rG   )r'   rM   rM  r*   r1  r,   r,   r-   r.   M  s    z&TestLogFormatterSciNotation.test_basicN)r2   r3   r4   r  rU   stylecontextr8   r9   r:   r.   r,   r,   r,   r-   r  9  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)r`   r
   r"  )r   r
   rl  )r   r
   10)r   r
   100)r   r
   1000)'  r
   1e4)r  r
   1e5)r  r   rk  )r  r   rk  )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   rk  )r   r   rk  )r
   r   0.001)r   r   0.01)r`   r   ro  )r   r   rl  )r   r   r  )r   r   r  )r   r   r  )r  r   10000)r  r   100000)r  r   rk  )r  r   rk  )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   rk  )r   r   rk  )r
   r   r  )r   r   r  )r`   r   ro  )r   r   rl  )r   r   r  )r   r   r  )r   r   r  )r  r   r  )r  r   r  )r  r   rk  )r  r   rk  )r  r   rk  )r  r   z0.03)r  r   z0.31)r  r   rp  )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   rk  )r   r   rk  )r
   r   rk  )r   r   r  )r`   r   ro  )r   r   rl  )r   r   r  )r   r   r  )r   r   r  )r  r   r  )r  r   r  )r  r   rk  )r  r   rk  )r  r   rk  )r  r   rk  )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   rk  )r   r   rk  )r
   r   rk  )r   r   rk  )r`   r   ro  )r   r   rl  )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  )r`   r  r"  )r   r  rl  )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_valrG   )r'   rM  domainr*   rP  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 rc  r,   r   rP  r,   r-   r     s     N)Zget_minor_formatterr~   rD  r5   r   r   rG   )r'   r  r   Zminor_tlocsZcoefsZlabel_expectedZ
label_testr,   )rP  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   )rM   r   r   T)rv  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   rD   r<   rY   r   r   rh   rs  )rp   rq   Z
set_xscalert   rI  r$   r   r{   r5   r7   rH  r  set_minor_formatterrr   r'  rD  rJ  r   rG   r  r   )r'   rv   rw   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  rf  r  strrG   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  rf  r  r  r,   r,   r-   test_LogFormatter_call_tiny  s    z,TestLogFormatter.test_LogFormatter_call_tinyN)r,   )r2   r3   r4   Zpprint_datar8   r9   r:   r  r  rU   r  r  r  r  r  r,   r,   r,   r-   r  V  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  rM  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  )r8   r   r   r  r  r   r   rG   )r'   fxr   r   r,   r,   r-   test_logit_deformaterE  s
    
z(TestLogitFormatter.test_logit_deformaterc                 C   s   g | ]}d |  qS )r   r,   r   ir,   r,   r-   r   Y  s     zTestLogitFormatter.<listcomp>r   r   c                 C   s   g | ]}d d|   qS )r   r   r,   r  r,   r,   r-   r   Z  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$   LogitFormatterrD  decade_testr  r  r   r   rG   )r'   r   r1  sx2r,   r,   r-   r.   ^  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  rc  N)r$   r  rD  r  rG   )r'   r   r1  r  r,   r,   r-   test_invalidj  s    zTestLogitFormatter.test_invalidrP   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  rD  r  r  rG   )r'   r   r1  NZsxZsx1dr,   r,   r-   test_variablelengthu  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.
        Trn   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&   r5   r6   r  Zset_minor_thresholdformat_ticksr}   rG   )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
        Trn   r_   r   )r   rY   rD   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}   rG   )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  rG   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  rG   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   )	r5   rz   r$   r  r(  
startswithr  absrG   )r'   r  r  r  r   r  r  r,   r,   r-   test_format_data_short  s    

z)TestLogitFormatter.test_format_data_shortN)r2   r3   r4   r   r  r8   r9   r:   r  r   r   r  r.   r  r5   exprz   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FormatStrFormatterrG   r;  r,   r,   r-   r.     s    
z!TestFormatStrFormatter.test_basicN)r2   r3   r4   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StrMethodFormatterrG   )r'   formatinputr*   rP  r,   r,   r-   r.     s    
z!TestStrMethodFormatter.test_basicN)r2   r3   r4   r  r8   r9   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       rk  rk  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)Tr`   )100 mr  z100.00 m)Tr   )rl  rl  z1.00)TgރB?)z1.23457rl  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>1  s   z/TestEngFormatter.test_params.<locals>.<genexpr>)unit)r  r	  )rc  u    z@_@c                 3   s6   | ].}|d   kr|  n| d V  qdS r
  rz  r  r  r  _sepr,   r-   r  A  s   )r  rF  )r  r	  rF  c                 3   s   | ]}| d  V  qdS )r  Nrz  r  )r  r,   r-   r  O  s     )rF  )r	  rF  N)rp   r&  r$   EngFormatterr   rG   )r'   r*  r  r*   Zexp_outputs
formattersZ
_formatterZ_exp_outputr,   r  r-   test_params  sH    




zTestEngFormatter.test_paramsN)r2   r3   r4   Zraw_format_datar8   r9   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   a  s     z8test_engformatter_usetex_useMathText.<locals>.<listcomp>z$0$z$500$z$1$ k)rp   rq   r^  ry   r$   r  rt   rH  rV  rW  Zget_xticklabelsrG   )rv   rw   r1  Zx_tick_label_textr,   r,   r-   $test_engformatter_usetex_useMathTextY  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<   rc  r  r   z66.667)rr  Nz
^^Foobar$$   rq  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PercentFormatterrU   rV   Z
format_pctrG   )r'   ZxmaxZdecimalssymbolr   Zdisplay_ranger*   r1  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*   rP  r,   r,   r-   
test_latex  s    zTestPercentFormatter.test_latexN)r2   r3   r4   Zpercent_dataZpercent_idsZ
latex_datar8   r9   r:   r.   r%  r,   r,   r,   r-   r  g  s^    
r  c               	   C   s6   t  \} }tt |jt  W 5 Q R X d S r  )	rp   rq   r8   r   	TypeErrorrt   rH  r$   r   rv   rw   r,   r,   r-   test_majformatter_type  s    r(  c               	   C   s6   t  \} }tt |jt  W 5 Q R X d S r  )	rp   rq   r8   r   r&  rt   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  )	rp   rq   r8   r   r&  rt   rI  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  )	rp   rq   r8   r   r&  rt   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   )rp   rV   Zadd_subplotr}   rt   get_minor_ticksrG   r   )ZxminorZyminorr  r!  rw   rv   r,   r-   minorticksubplot  s    z,test_minorticks_rc.<locals>.minorticksubplotFr   Tr   r<   rY   )rp   figure)r.  r,   r-  r-   test_minorticks_rc  s    	r0  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
datetime64rs  z
%a)r   r   rq     z%H:%Mr   )remove_overlapping_locsr   )r5   r7   Zonesr}   rp   rq   r^  rt   rI  rU   datesZ
DayLocatorrH  ZDateFormatterr{   ZHourLocatorr  r,  r2  Zget_remove_overlapping_locsrG   Zsetpr~   Zget_minorticklabelsZget_minorticklines)r2  Zexpected_numtr   rv   rw   currentnewr,   r,   r-   test_remove_overlap  s(    r7  subhiZaardvark)r   r   c              	   C   s.   t  }tt |j| d W 5 Q R X d S )Nr   )r$   r   r8   r   r   rF   )r8  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   rF   r&   r5   Zdiffr   r   rG   )r>   r:  topr   r,   r,   r-   test_small_range_loglocator  s
    r>  c                  C   s@   t  } | ddkst| ddks*t| ddks<td S )Nr   rc  )r$   ZNullFormatterrG   rL  r(  rx  r,   r,   r-   test_NullFormatter  s    r?  r1  c                 C   s
   d|  S )Nzval: r,   )r   r,   r,   r-   <lambda>      r@  )Zfoobarc                 C   s.   |   dkst| d |   dks*td S )Nrc  rU   )Z
get_offsetrG   Zset_offset_stringrx  r,   r,   r-   test_set_offset_string  s    
rC  )=
contextlibr   r   r?  r\  r  Znumpyr5   Znumpy.testingr   r   r8   Z
matplotlibrU   Zmatplotlib.pyplotZpyplotrp   Zmatplotlib.tickerZtickerr$   r   r;   rJ   r]   r   r   r   r   r   r   r   r   r  rf  rj  r  r  r  r  r  r  r  r  r  r(  r)  r*  r+  r0  r9   r:   r7  zerosr;  r  r  r>  r?  ZFuncFormatterZFixedFormatterrC  r,   r,   r,   r-   <module>   sz   "g/ j I
" N 3qE
!

