U
    d»{j²à  ã                   @   sp  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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=„ Z/e
j0 1d>d?¡d@dA„ ƒZ2e
j0 1dBdCdDge 3dE¡g¡dFdG„ ƒZ4e
j0 1dHdIdJdKdLg¡ej5 6dM¡dNdO„ ƒƒZ7dPdQ„ Z8e
j0 1dRe 9dSdT„ ¡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&õküÂg  4&õküBr   g�œ&q‰5é   gL“oûñg5g�œ&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,   ú[/var/www/html/bwave/python/venv/lib/python3.8/site-packages/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é   ©Únumticksgš™™™™™é¿ç333333Ó¿çš™™™™™É?)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_params/   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_limitsA   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_numbersI   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   R   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d€d�d‚dƒd„d…d†d‡dˆd‰dŠd‹dŒd�dŽd�gd�d‘d’d“d”d•d–d—d˜d™dšd›dœd�džg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gZeeeeƒƒZej d¸e¡d¹dº„ ƒZd»S )¼Ú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_majorticksl   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   g˜nƒÀÊÁ?)r   ç�Ô�ùÉ;)r   g¦ÖVs†?=)gH¯¼šò×Š¾gIhG|·a¾)gvƒôõ!´>ç�Ûí‚ÚÒ·>)çÍÒÊ”A{¶¾çÁ�v¾À(¸¾)g"s2_Èd­¾glEÕŽfU¹¾r_   r`   ra   r   rb   rc   rd   r   re   rf   r[   r   rg   rh   r   ri   r   rj   rk   rl   rm   ç{®Gázt?ç{®Gáz„?ç¸…ëQ¸Ž?gš™™™™™™?g¸…ëQ¸ž?gìQ¸…ë¡?g
×£p=
§?g)\�Âõ(¬?g¤p=
×£°?gìQ¸…ë±?g333333³?gÃõ(\�Âµ?g
×£p=
·?gR¸…ëQ¸?gáz®Gáº?ç)\�Âõ(¼?gq=
×£p½?ç      À?g¤p=
×£À?gHáz®GÁ?gO›
´ã‚;gO›
´ã’;g÷èŽUœ;g#B’¡œ§;g÷èŽU¬;gæÇÌˆ=‡°;g¹nP‹*@µ;g#B’¡œ·;g�Ô�ù¹;ga¼W�²¾;gæÇÌˆ=‡À;g›±mÉxµÁ;g…¯JïÄ;g¹nP‹*@Å;gnXñËenÆ;gØ+3MÜÊÈ;r‹   g›+¡†›„ö<g›+¡†›„=g´àø¤tã=g‚vIhÂ%=g´àø¤tã =g(Í´#=gQu÷.U)=g‚vIhÂ%,=gõ›ÙUö.=gnób]¾K2=g(Í´3=gá7ÎQ5=gU>?åì7=gQu÷.U9=gÈcß¯x½:=g;‰³ Ž==gõ›ÙUö>=gç*«#&,Š¾g…¦™¬Y€‰¾g#"ˆ5�Ôˆ¾g_eGô|‡¾gý”SÐ'Ñ†¾gœBY[%†¾gØkÂÍ„¾gvƒôõ!„¾gÿû|)vƒ¾gQöØŽ�‚¾gïqÇÄr�¾g�íµ ÷Æ€¾g“É%e½Þ~¾gÐÀw$‡}¾g¸ßˆ‹/|¾g…¦™¬Y€y¾gÁ�v¾À(x¾gý”SÐ'Ñv¾gvƒôõ!t¾g³zê]Êr¾gïqÇÄrq¾gÐÀw$‡m¾gH¯¼šò×j¾gÁ�v¾À(h¾g³zê]Êb¾g�äÑéL´>g§E–/Üw´>gÀ¦ZMÏ¢´>gØkÂÍ´>g	Ê§¦¨#µ>g!+lÄ›Nµ>g:Œ0âŽyµ>gRíôÿ�¤µ>gƒ¯};húµ>gœBY[%¶>g´qwNP¶>gÍÒÊ”A{¶>gý”SÐ'Ñ¶>göîü¶>g.WÜ'·>gG¸ )R·>gxz)eç§·>rŒ   g5m”/G¸¾g©<² Íý·¾gÐTè·¾g«ô`½·¾gxz)eç§·¾gìIGÖm’·¾gÓè‚¸zg·¾gG¸ )R·¾g»‡¾š‡<·¾g¢&ú|”·¾göîü¶¾gŠÅ5_¡æ¶¾gqdqA®»¶¾gå3�²4¦¶¾gY­#»�¶¾g#"ˆ5�Ô¸¾gò_ÿù¦~¸¾rŽ   g�Ûí‚ÚÒ·¾g.WÜ'·¾gý”SÐ'Ñ¶¾r�   gœBY[%¶¾g:Œ0âŽyµ¾g	Ê§¦¨#µ¾gØkÂÍ´¾g§E–/Üw´¾gEÁ„¸Ì³¾gÿû|)v³¾gä<sAC ³¾g³zê]Ê²¾gQöØŽ�²¾g 4PSªÈ±¾gïqÇÄr±¾g¾¯>ÜÝ±¾g\+-eq°¾g+i¤)+°¾gõM7Ü‰Š¯¾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   Ú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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ç    eÍÍAg     Ûú@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   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   g¤p=
×£à?gHáz®Gá?gìQ¸…ëá?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²   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   ÚiscloseÚlog)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ayÚ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=
×ï?)gü©ñÒMb@?g–C‹lçûï?©ç-Cëâ6
?g�St$—ÿï?)gñhãˆµøÔ>gŽ;¥ƒõÿï?)g�íµ ÷Æ >gõ…�óþÿï?©gH¯¼šò×j>ge(åÿÿï?)g:Œ0âŽy5>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_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)Úintr5   ÚfloorÚlog10r$   rÈ   ÚrangerF   r}   r&   rG   )r'   rÉ   Úbasic_neededr+   r"   r,   r,   r-   Útest_nbins_major?  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ržt|ƒd d	 t|	ƒk s²t‚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_minorK  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_attrh  s    

z TestLogitLocator.test_minor_attrr�   éýÿÿÿr   c                 C   s    g | ]\}}||kr||f‘qS r,   r,   )r„   ÚaÚbr,   r,   r-   r†   w  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_oku  s    
z$TestLogitLocator.test_nonsingular_okÚokvalc                 C   sŒ   t  ¡ }d| }}| ||¡\}}||ks.t‚d|  k rB|k sHn t‚|d }}| ||¡\}}||ksnt‚||  k r‚dk sˆn 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 )NgX9´Èv¾@é   )Ú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s˜t‚|jd d
� |jd	ks²t‚|jdd� |jdksÌt‚|jd d� |jdksæt‚|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`åÐ"Û¹?g{®Gáz”?g{®Gáz„¿r�   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õ   gš™™™™™ñ¿rh   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   )g333333ë¿ri   )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þÿÿiÔþÿÿrú   iÎÿÿÿiâÿÿÿéöÿÿÿr   rÙ   r   ç      à¿r?   r   r   r`   rb   r   r<   r   r   é2   r   i,  éô  r   rõ   iæûÿÿi  i�ýÿÿiƒÿÿÿiçÿÿÿrü   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                   @   sr  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dXS )YÚTestScalarFormatter)é{   é½   r   )iCÿÿÿi…ÿÿÿr   )i50  i=0  i40  )iÃÏÿÿiËÏÿÿiÌÏÿÿ)g    øiø@g    ¨jø@é † )g    ¨jøÀg    øiøÀé`yþÿ)g    hiø@g    jø@r  )g    jøÀg    hiøÀr  )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?gšÃÿgÞ»G?gÖÿ9Ì—G?)g\�Âõh˜È@g¤p=
·—È@i.1  )g      "@g      (@r   )g      Œ@ç     À’@r   )g     °�@r  r   )ç®Gáz®ï?rö   r   )g{®Gáú#@g…ëQ¸$@r   )g�Âõ(\ÿX@gq=
×£ Y@r   )gö(\�Âõ@g
×£p=
@r   )g{®Gáú/@gÃõ(\�0@rÍ   )g!°rh‘íÜ¿ç°rh‘í|ß?r   )g°rh‘í|ß¿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  )iˆÿÿÿr  r   F)Tr  )gü©ñÒMbP¿r÷   rÙ   F)T)rP   r³   )g   €tÒÚAg   0ëþArÅ   T)Trx   ©g     jøÀr¨   r   F)T)r   r   r  r   Fr   z0.000g�(í¾0‰?z0.012g°rh‘í|¿?z0.123g®Gáz®ó?z1.230gš™™™™™(@z12.300)r`   ú1e-1)r’   z1.1e-1)g    „×—AZ1e8)g    Þ9šAz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_minusj  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s®t‚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_valuer  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'   r1  Ú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$   r2  Zget_useMathTextrG   )r'   r6  r4  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$   r2  Zset_useOffsetr3  rG   ræ   ©r'   r4  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s”t
‚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$   r2  Zget_useLocalerG   Úcreate_dummy_axisr	  Zset_data_intervalÚset_locs)r'   ÚconvÚsepr4  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$   r2  Zset_scientificZset_powerlimitsrp   rq   r›   Úset_major_formatterrš   Úset_major_locatorr%   rB  Úget_majorticklocsZorderOfMagnituderG   )	r'   Zsci_typeZ	scilimitsrœ   Z
orderOfMagZfewticksr4  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$   r2  Ú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$   r2  rA  r	  Zset_view_intervalr&  rG   Zget_tick_spaceZ
get_minpos)r'   rS   r*   rL  rN  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serifZcmr10F)zfont.familyz
font.serifr7  zcmr10 font should ideallyr+  r   r   r   )rU   r$  Úupdater8   r¸   r¹   rp   rq   ry   ÚcanvasÚdraw)r'   rv   rw   r,   r,   r-   Útest_mathtext_ticksÌ  s    ýz'TestScalarFormatter.test_mathtext_ticksc                 C   s&   t  ¡ }| g ¡ |dƒdks"t‚d S )Nr   Ú )r$   r2  rB  rG   )r'   rL  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_datarJ  r8   r9   r:   r*  r0  r5  r8  r:  rE  rI  rM  rO  rP  rT  rV  r,   r,   r,   r-   r  (  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  rY  )r'   r,   r,   r-   r  ä  s    zFakeAxis.get_view_intervalN)r   r   )r2   r3   r4   Ú__doc__rZ  r  r,   r,   r,   r-   rX  Þ  s   
rX  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ü   gñhãˆµøä¾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©r/  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$   ÚLogFormatterExponentrX  r	  r¢   rG   )	r'   rh  rM   ÚexponentÚlocsZ	positionsr*   ÚvalsÚlabelsr,   rj  r-   r.   ö  s    ÿz#TestLogFormatterExponent.test_basicc                 C   s*   t jddd�}tƒ |_|dƒdks&t‚d S )Nr   Trg  g&üøŽ$ô?rU  )r$   ro  rX  r	  rG   )r'   r/  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.   rt  r,   r,   r,   r-   r\  è  s&   ÿ ÿ
ÿù ÿ
r\  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   rN  rG   )r'   Zmin_exponentrK  r*   r,   r,   r-   Útest_min_exponent  s    z*TestLogFormatterMathtext.test_min_exponentN)r2   r3   r4   r$   ZLogFormatterMathtextrN  Ú	test_datar8   r9   r:   rz  r,   r,   r,   r-   rx  
  s   ørx  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   ry  )r   r  z$\mathdefault{10^{5}}$)r   gñhãˆµøô>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$   ZLogFormatterSciNotationZsublabelrU   rV   rG   )r'   rM   rK  r*   r/  r,   r,   r-   r.   1  s    z&TestLogFormatterSciNotation.test_basicN)r2   r3   r4   r{  rU   ÚstyleÚcontextr8   r9   r:   r.   r,   r,   r,   r-   r|    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d€d�d‚dƒd„g„Zej d…e¡d†d‡„ ƒZdœd‰dŠ„Ze	j
 d‹¡dŒd�„ ƒZej dŽd�d�d‘d’g¡d“d”„ ƒZej dŽd•d–d—d˜g¡d™dš„ ƒZd›S )�ÚTestLogFormatter)ç}…9“x ?r
   z3.142e-5)çÜæGÅ·–4?r
   z3.142e-4)ç“à™¶e¼i?r
   z3.142e-3)ç\, ’¿ ?r
   z3.142e-2)çs7¨v/Ô?r
   z3.142e-1)çPERTû!	@r
   ú3.142)ç¤Öf)zj?@r
   z3.142e1)ç&FàYŒ¢s@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
   r^  )r   r
   Ú10)r   r
   Ú100)r¤   r
   Ú1000)é'  r
   Ú1e4)r  r
   Ú1e5)r„  r‘   r]  )r…  r‘   r]  )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‘   r]  )r   r‘   r]  )r
   r‘   ú0.001)r�   r‘   ú0.01)r`   r‘   ra  )r   r‘   r^  )r   r‘   r”  )r   r‘   r•  )r¤   r‘   r–  )r—  r‘   Ú10000)r  r‘   Ú100000)r„  r   r]  )r…  r   r]  )r†  r   rš  )r‡  r   r›  )rˆ  r   rœ  )r‰  r   rŠ  )r‹  r   r�  )rŒ  r   rž  )r�  r   rŸ  )rŽ  r   r   )r�  r   r¡  )r¥   r   r]  )r   r   r]  )r
   r   r¢  )r�   r   r£  )r`   r   ra  )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   z0.03)rˆ  r   z0.31)r‰  r   rb  )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   r]  )r   r   r]  )r
   r   r]  )r�   r   r£  )r`   r   ra  )r   r   r^  )r   r   r”  )r   r   r•  )r¤   r   r–  )r—  r   r¤  )r  r   r¥  )r„  r   r]  )r…  r   r]  )r†  r   r]  )r‡  r   r]  )rˆ  r   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   r]  )r   r   r]  )r
   r   r]  )r�   r   r]  )r`   r   ra  )r   r   r^  )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§  r^  )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'   rK  Údomainr*   rN  rn  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 ©rU  r,   rƒ   ©rN  r,   r-   r†   Ï  s     N)Zget_minor_formatterr~   rB  r5   rÒ   rÓ   rG   )r'   r	  r±   Zminor_tlocsZcoefsZlabel_expectedZ
label_testr,   )rN  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 |¡s¾t‚| 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)rh  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   re  )rp   rq   Z
set_xscalert   rG  r$   r¬   r{   r5   r7   rF  r¨  Úset_minor_formatterrr   r%  rB  rH  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¨  rX  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¨  rX  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ƒ  :  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	| ¡}|r²t|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,  rv  rÑ   r®   )Ústringr,  r¹  Zmantissarº  rK  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.41OTHERSTUFFgâz®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_deformater)  s
    
z(TestLogitFormatter.test_logit_deformaterc                 C   s   g | ]}d |  ‘qS )r   r,   ©r„   Úir,   r,   r-   r†   =  s     zTestLogitFormatter.<listcomp>r   r   c                 C   s   g | ]}d d|   ‘qS )r   r   r,   rÂ  r,   r,   r-   r†   >  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$   ÚLogitFormatterrB  Údecade_testr¸  r¿  r»   r¼   rG   )r'   r…   r/  ÚsÚx2r,   r,   r-   r.   B  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Ä  rU  N)r$   rÆ  rB  rÇ  rG   )r'   r…   r/  rÈ  r,   r,   r-   Útest_invalidN  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 rˆd| 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Æ  rB  r¸  r¿  rG   )r'   r…   r/  ÚNÚsxZsx1Údr,   r,   r-   Útest_variablelengthY  s     ÿÿz&TestLogitFormatter.test_variablelength)TrÄ   )©r  F)éK   F)TrÂ   )rÐ  ©rÑ  T)TrÁ   )©r  TrÒ  )F)r   gR¸…ëQè?g¤p=
×£è?))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s–t	||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_majorq  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&  Ú
startswithrv  ÚabsrG   )r'   rÌ  rq  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   r9  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*   rN  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)FççÆô„EJ“À)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)FçQ^•-':T¿)z
-1.23457 mz-1 mz-1.23 m)Tró  )u   âˆ’1.23457 mu   âˆ’1 mu	   âˆ’1.23 m)Tg       €©r]  r]  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   )r^  r^  z1.00)TgÞƒBÊÀó?)z1.23457r^  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sœt‚qœd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‚�qjqºd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>  s   ÿz/TestEngFormatter.test_params.<locals>.<genexpr>)Úunit)r  rü  )rU  u   â€¯z@_@c                 3   s6   | ].}|d  ˆ kr|ˆ ˆ n|  dˆ¡ˆ V  qdS rý  rl  rÿ  ©r   r  Ú_sepr,   r-   r  %  s   þ)r  rD  )r  rü  rD  c                 3   s   | ]}|  d ˆ ¡V  qdS )rþ  Nrl  rÿ  )r  r,   r-   r  3  s     )rD  )rü  rD  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†   E  s     z8test_engformatter_usetex_useMathText.<locals>.<listcomp>z$0$z$500$z$1$ k)rp   rq   Úplotry   r$   r  rt   rF  rR  rS  Zget_xticklabelsrG   )rv   rw   r/  Zx_tick_label_textr,   r,   r-   Ú$test_engformatter_usetex_useMathText=  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  g333333û¿é(   z-2%)r   r   r  g     €V@r   z90.0%)r   r   r  gfffffT@r  z80.1%)r   r   r  g…ëQ¸ŽQ@r  z70.2%)r   r   r  gôýÔxéFNÀr  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<   rU  r  r   z66.667)rd  Nz
^^Foobar$$é   rc  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)Z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*   r/  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*   rN  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  K  s^   ìíü þ
r  c               	   C   s6   t  ¡ \} }t t¡� |j t ¡ ¡ W 5 Q R X d S r  )	rp   rq   r8   r­   Ú	TypeErrorrt   rF  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   rG  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   Zfigure)r"  r,   r!  r-   Útest_minorticks_rc¨  s    	r#  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sºt‚tj|j|d	� |jj}||jjksât‚t|j ¡ ƒ|ksøt‚t|j ¡ ƒ|k�st‚t|j ¡ ƒ|k�s(t‚t|j ¡ ƒ|d
 k�sDt‚d S )Nz
2018-11-03z
2018-11-06Z
datetime64re  z
%a)r   r   rc  é   z%H:%Mr   )Úremove_overlapping_locsr   )r5   r7   Zonesr}   rp   rq   r
  rt   rG  rU   ÚdatesZ
DayLocatorrF  ZDateFormatterr{   ZHourLocatorr±  r   r%  Zget_remove_overlapping_locsrG   Zsetpr~   Zget_minorticklabelsZget_minorticklines)r%  Zexpected_numÚtr…   rv   rw   Ú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¬   r8   r­   r®   rF   )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¬   rF   r&   r5   ÚdiffrÓ   r¯   rG   )r>   r-  ÚtoprÏ   r,   r,   r-   Útest_small_range_loglocatorè  s
    r2  c                  C   s@   t  ¡ } | dƒdkst‚|  d¡dks*t‚|  d¡dks<t‚d S )Nr   rU  )r$   ZNullFormatterrG   rJ  r&  rj  r,   r,   r-   Útest_NullFormatterò  s    r3  r/  c                 C   s
   d| › �S )Nzval: r,   )rÚ   r,   r,   r-   Ú<lambda>ú  ó    r4  )ZfooÚbarc                 C   s.   |   ¡ dkst‚|  d¡ |   ¡ dks*t‚d S )NrU  rU   )Z
get_offsetrG   Zset_offset_stringrj  r,   r,   r-   Útest_set_offset_stringù  s    
r7  )<Ú
contextlibr   rá   r=  r½  Ú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  rX  r\  rx  r|  rƒ  r¸  rè  rê  rí  r  r  r  r  r  r  r#  r9   r:   r*  Zzerosr.  r�  r‚  r2  r3  ZFuncFormatterZFixedFormatterr7  r,   r,   r,   r-   Ú<module>   sx   "g& j 7
" N 3qEÿ
!þ

þ