o
    :a"                     @   sl  d dl m Z mZmZ d dlZd dlmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlZd dlZG dd dZejdd	 Zed
gdde dkrQd ndddd Zedgdde dkrfd ndddd Zdd Zedgddidddd Zedgddidddd  Zd!d" Zd#d$ Zd%d& Ze
d'gd(d)d* Z d+d, Z!d-d. Z"d/d0 Z#d1d2 Z$dS )3    )datetimetimezone	timedeltaN)	MagicMock)check_figures_equalimage_comparison)UnitDatac                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )Quantityc                 C   s   || _ || _d S N)	magnitudeunits)selfdatar    r   =/usr/lib/python3/dist-packages/matplotlib/tests/test_units.py__init__   s   
zQuantity.__init__c                 C   sH   ddddddd}| j |kr|| j |f }t|| j |S t| j| j S )Ni  g?<   g0(?   i  ))hoursseconds)minutesr   )r   r   )feetmiles)r   inches)r   r   )r   r	   r   )r   Z	new_unitsZfactorsZmultr   r   r   to   s   
zQuantity.toc                 C   s   t | j|S r
   )getattrr   )r   attrr   r   r   __getattr__      zQuantity.__getattr__c                 C   s,   t | jrt| j| | jS t| j| jS r
   )npiterabler   r	   r   )r   itemr   r   r   __getitem__    s   zQuantity.__getitem__c                 C   s   t | jS r
   )r   Zasarrayr   )r   r   r   r   	__array__&   r   zQuantity.__array__N)__name__
__module____qualname__r   r   r   r"   r#   r   r   r   r   r	      s    
r	   c                  C   sD   t  } dd }dd }t|d| _tdd d| _t|d| _| S )Nc                    sr   t | dr| jS t| r.z
fdd| D W S  ty-    fdd| D  Y S w t|   jS )Nr   c                    s   g | ]}|  jqS r   )r   r   .0v)unitr   r   
<listcomp>5   s    z7quantity_converter.<locals>.convert.<locals>.<listcomp>c                    s"   g | ]}t |  jqS r   )r	   	get_unitsr   r   r'   axisr*   r   r   r+   7   s    )hasattrr   r   r   r    AttributeErrorr	   r,   )valuer*   r.   r   r-   r   convert0   s   


z#quantity_converter.<locals>.convertc                 S   s@   t | dr| jS t| r| D ]}t |dr|j  S qd S d S )Nr   )r/   r   r   r    )r1   r.   r)   r   r   r   default_units<   s   



z)quantity_converter.<locals>.default_units)Zside_effectc                 S   s   t j| ddS )Nr   d   )ZlabelZdefault_limits)munitsZAxisInfo)uar   r   r   <lambda>F   s   z$quantity_converter.<locals>.<lambda>)r6   ZConversionInterfacer   r2   axisinfor3   )Zqcr2   r3   r   r   r   quantity_converter*   s   	r;   zplot_pint.pngFZmpl20Zx86_64g{Gz?)Zremove_textstyleZtolc                 C   s   dt jd< | tjt< ttddd}ttddd}t  \}}|jdd	 |	||d
 |j
tdddd |jtdddd |jd |jd | jjsUJ | jjs[J | jjsaJ d S )N)i   zaxes.formatter.limitsr      r      r   g333333?leftztab:bluei g  r   ztab:red)Zcolorx   r   z	tab:greenr   r   )pltZrcParamsr6   registryr	   r   linspacesubplotsZsubplots_adjustplotaxhlineaxvlineyaxis	set_unitsxaxisr2   Zcalledr:   r3   )r;   yxfigaxr   r   r   test_numpy_facadeN   s   

rQ   zplot_masked_units.pngTc                  C   sL   t dd} t jj| | dk| dk @ d}t|d}t \}}|| d S )Nr?      )maskmeters)r   rE   Zmaarrayr	   rC   rF   rG   )r   Zdata_maskedZdata_masked_unitsrO   rP   r   r   r   test_plot_masked_unitsi   s
   
rX   c                 C   sJ   | t jt< t \}}|tddtdd |tddtdd d S )NrV      r      )r6   rD   r	   rC   rF   set_xlimset_ylim)r;   rO   rP   r   r   r    test_empty_set_limits_with_unitst   s   
r^   zjpl_bar_units.pngZdpirB   )Zsavefig_kwargr<   c                  C      dd l m  m}  |   | dd}d| j d| j d| j g}d| d| d| g}| jdtddd	d
}t	 \}}|j
|||d ||d|  ||d  d|  g d S )Nr   ET     @   rT              Zdt)ZbottomrY   jt?)matplotlib.testing.jpl_unitstesting	jpl_unitsregisterDurationkmEpochr   rC   rF   Zbarr]   r   ZdayrN   wbrO   rP   r   r   r   test_jpl_bar_units}   s   *rs   zjpl_barh_units.pngc                  C   r_   )Nr   r`   ra   rb   rT   rc   rd   re   rf   rg   r@   rY   rh   )ri   rj   rk   rl   rm   rn   ro   r   rC   rF   Zbarhr\   rp   r   r   r   test_jpl_barh_units   s   *rt   c                   C   s    t tjg ddtg  d S )Nzdatetime64[ns]Zdtype)rC   scatterr   rW   r   r   r   r   test_empty_arrays   s    rw   c                  C   sR   t jdddd} t jt| td}t j|d< t \}}|| | |j	  d S )Nz2005-02z2005-03zdatetime64[D]ru   r   )
r   arangelenfloatnanrC   rF   rv   canvasdraw)timesrM   rO   rP   r   r   r   test_scatter_element0_masked   s   
r   c                  C   sF   t d} dd | D }t \}}|| |tdd |j  d S )N
   c                 S   s    g | ]}t d d|d d qS )  r?   rT   rb   )r   r(   ir   r   r   r+      s     z-test_errorbar_mixed_units.<locals>.<listcomp>g      ?)Zdays)r   rx   rC   rF   Zerrorbarr   r|   r}   )rN   rM   rO   rP   r   r   r   test_errorbar_mixed_units   s
   
r   Zpng)
extensionsc                 C   sH   G dd dt }|  |ddddd | t ddddd d S )Nc                   @   s   e Zd ZdS )ztest_subclass.<locals>.subdateN)r$   r%   r&   r   r   r   r   subdate   s    r   i  rb   r   o)r   rF   rG   )Zfig_testZfig_refr   r   r   r   test_subclass   s   r   c                 C   s4  | t jt< ttdddd}ttdddd}ttdddd}tjddd	d	d
\}\}}||| ||| |j	 |j	   krMdksPJ  J |j
	 |j
	   kradksdJ  J |jd |j
d |j	 |j	   krdksJ  J |j
	 |j
	   krdksJ  J d S )Nr   rb   r   r   rT   r   rc   re   allZsharexshareyr   r   )r6   rD   r	   r   rE   rC   rF   rG   rL   r,   rJ   rK   )r;   rN   y1y2rO   ax1ax2r   r   r   test_shared_axis_quantity   s   
(((,r   c                  C   s   dd t ddD } dd t ddD }tjdddd\}\}}||  || |jttd	d
 |jjttd	d
ksBJ d S )Nc                 S      g | ]}t d |dtjdqS )r   rb   Ztzinfor   r   Zutcr   r   r   r   r+          z-test_shared_axis_datetime.<locals>.<listcomp>rb      c                 S   r   )i  rb   r   r   r   r   r   r   r+      r   rT   T)r   r?   )r   )	rangerC   rF   rG   rJ   rK   r   r   r   )r   r   rO   r   r   r   r   r   test_shared_axis_datetime   s   

r   c                  C   s   ddd} ddd}t jddddd\}\}}||  |   || |  |jtdd	g d|j j	 v sAJ d S )
Nrb   rT   )r8   rr   rc   re   Tr   cd)
rC   rF   rG   keysvaluesrL   rK   r   r,   _mapping)Zd1Zd2rO   r   r   r   r   r   test_shared_axis_categorical   s   

r   c              	   C   s  | t jt< t \}}|jtdgd |  | dks!J |j	tdgd |  |
 dks7J t \}}|d |ttdddttdddd	 |  | d
kscJ |
 dkskJ t \}}|d |ttdddttdddd	 |  | dksJ |
 dksJ t \}}|jtdgd |d |  | dksJ |
 dksJ t \}}|j	tdgd |d |  |
 dksJ | dksJ d S )Nr   r   r4   r>   r   rc   rZ   rT   r   )r   rT   )r   r>   )r   re   )g     <@g     ?@)r6   rD   r	   rC   rF   rL   Zupdate_unitsZdraw_without_renderingZget_xlimrJ   Zget_ylimrH   rG   r   rx   rI   )r;   rO   r   rP   r   r   r   test_empty_default_limits   sH   




r   )%r   r   r   platformZunittest.mockr   Zmatplotlib.pyplotZpyplotrC   Zmatplotlib.testing.decoratorsr   r   Zmatplotlib.unitsr   r6   Zmatplotlib.categoryr   Znumpyr   Zpytestr	   Zfixturer;   machinerQ   rX   r^   rs   rt   rw   r   r   r   r   r   r   r   r   r   r   r   <module>   sL    

#


		

	

