U
    Cvfۣ                     @  s&  d dl mZ d dlZd dlmZmZmZmZmZm	Z	m
Z
 d dlZd dlmZmZ erd dlmZ d dlmZmZmZ d dlmZ d dlmZ d d	lm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'm(Z( d dl)m*Z*m+Z+m,Z, d dl-m.Z. G dd dZ/G dd dZ0dS )    )annotationsN)TYPE_CHECKINGAnyHashableIterableLiteralNoReturnoverload)dataarray_plotdataset_plot)Axes)LineCollectionPathCollectionQuadMesh)	Normalize)BarContainer)QuadContourSet)	AxesImage)Quiver)Line3DPoly3DCollection)	ArrayLike)	DataArray)Dataset)AspectOptionsHueStyleOptionsScaleOptions)	FacetGridc                #   @  s  e Zd ZU dZded< dZejjZdddddZe	j
ejd	d
ddddZe	
ejddddZe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!Ze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!Ze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!Ze	
ejd(dd)d!Zed*ddddd+dd,d-d-ddddd.d/d0Zed*dddd1dd,d-d-d#ddd$d.d2d0Zed*dddd3dd,d-d-dd#dd$d.d4d0Ze	
ejd(dd5d0Ze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d6!dddddd7ddddddddd8ddddd9dd:ddddddddd;d<d= d>d?Ze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d7dddddddd#d8ddddd9dd:ddddddddd;d$d= dAd?Ze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dB dddddd7ddddddd#dd8ddddd9dd:ddddddddd;d$d= dCd?Ze	
ejdDd? ZeddddddddddddddddddEdddddddddddddddF dddddddddd8dddddddd:dd:ddddddd;ddGdHdIdJZedddddddddddddddddEdddddddddddddddKddddddddd#d8dddddddd:dd:ddddddd;dd$dHdLdJZedddddddddddddddddEdddddddddddddddMdddddddd#dd8dddddddd:dd:ddddddd;dd$dHdNdJZe	
ejdGddOdJZeddddddddddddddddddEdddddddddddddddF dddddddddd8dddddddd:dd:ddddddd;ddPdHdQdRZedddddddddddddddddEdddddddddddddddKddddddddd#d8dddddddd:dd:ddddddd;dd$dHdSdRZedddddddddddddddddEdddddddddddddddMdddddddd#dd8dddddddd:dd:ddddddd;dd$dHdTdRZe	
ejdPddUdRZeddddddddddddddddddEdddddddddddddddF dddddddddd8dddddddd:dd:ddddddd;ddPdHdVdWZedddddddddddddddddEdddddddddddddddKddddddddd#d8dddddddd:dd:ddddddd;dd$dHdXdWZedddddddddddddddddEdddddddddddddddMdddddddd#dd8dddddddd:dd:ddddddd;ddYdHdZdWZe	
ejdPdd[dWZeddddddddddddddddddEdddddddddddddddF dddddddddd8dddddddd:dd:ddddddd;dd\dHd]d^ZedddddddddddddddddEdddddddddddddddKddddddddd#d8dddddddd:dd:ddddddd;ddYdHd_d^ZedddddddddddddddddEdddddddddddddddMdddddddd#dd8dddddddd:dd:ddddddd;ddYdHd`d^Ze	
ejd\ddad^ZeddddddddddddddddddEdddddddddddddddF dddddddddd8dddddddd:dd:ddddddd;ddbdHdcddZedddddddddddddddddEdddddddddddddddKddddddddd#d8dddddddd:dd:ddddddd;ddYdHdeddZedddddddddddddddddEdddddddddddddddMdddddddd#dd8dddddddd:dd:ddddddd;ddYdHdfddZe	
ejdbddgddZdS )hDataArrayPlotAccessorzs
    Enables use of xarray.plot functions as attributes on a DataArray.
    For example, DataArray.plot.imshow
    r   _dar   None)darrayreturnc                 C  s
   || _ d S Nr    )selfr"    r&   8/tmp/pip-unpacked-wheel-h316xyqg/xarray/plot/accessor.py__init__'   s    zDataArrayPlotAccessor.__init__)__doc____annotations__)assignedr   r#   c                 K  s   t j| jf|S r$   )r
   plotr   )r%   kwargsr&   r&   r'   __call__,   s    zDataArrayPlotAccessor.__call__z+tuple[np.ndarray, np.ndarray, BarContainer]c                 O  s   t j| jf||S r$   )r
   histr   r%   argsr.   r&   r&   r'   r0   0   s    zDataArrayPlotAccessor.histNT)rowcolfigsizeaspectsizeaxhuexy	xincrease	yincreasexscaleyscalexticksyticksxlimylim
add_legend_labelsIterable[float] | Noner   float | NoneAxes | NoneHashable | Nonebool | Noner   ArrayLike | Noneboolzlist[Line3D])r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   r.   r#   c                O  s   d S r$   r&   r%   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   r2   r.   r&   r&   r'   line4   s    zDataArrayPlotAccessor.line)r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   r   FacetGrid[DataArray]c                O  s   d S r$   r&   rM   r&   r&   r'   rN   O   s    )r3   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   c                O  s   d S r$   r&   rM   r&   r&   r'   rN   j   s    z#list[Line3D] | FacetGrid[DataArray]c                 O  s   t j| jf||S r$   )r
   rN   r   r1   r&   r&   r'   rN      s    pre)where	drawstyledsr3   r4   zLiteral[('pre', 'post', 'mid')]z
str | None)r2   rQ   rR   rS   r3   r4   r.   r#   c                O  s   d S r$   r&   r%   rQ   rR   rS   r3   r4   r2   r.   r&   r&   r'   step   s    zDataArrayPlotAccessor.step)rQ   rR   rS   r4   c                O  s   d S r$   r&   rT   r&   r&   r'   rU      s    )rQ   rR   rS   r3   c                O  s   d S r$   r&   rT   r&   r&   r'   rU      s    c                 O  s   t j| jf||S r$   )r
   rU   r   r1   r&   r&   r'   rU      s    !r:   r;   zr9   	hue_style
markersize	linewidthr5   r7   r6   r8   r3   r4   col_wrapr<   r=   rD   add_colorbar
add_labels	add_titlesubplot_kwsr>   r?   r@   rA   rB   rC   cmapvminvmaxnormextendlevelsr   
int | Nonebool | Iterable[bool]dict[str, Any] | NoneNormalize | Noner   ) r2   r:   r;   rW   r9   rX   rY   rZ   r5   r7   r6   r8   r3   r4   r[   r<   r=   rD   r\   r]   r^   r_   r>   r?   r@   rA   rB   rC   ra   rb   rc   r#   c       !   $      O  s   d S r$   r&   $r%   r:   r;   rW   r9   rX   rY   rZ   r5   r7   r6   r8   r3   r4   r[   r<   r=   rD   r\   r]   r^   r_   r>   r?   r@   rA   rB   rC   r`   ra   rb   rc   rd   re   r2   r.   r&   r&   r'   scatter   s    'zDataArrayPlotAccessor.scatter r:   r;   rW   r9   rX   rY   rZ   r5   r7   r6   r8   r3   r[   r<   r=   rD   r\   r]   r^   r_   r>   r?   r@   rA   rB   rC   r`   ra   rb   rc   rd   re   c       !   $      O  s   d S r$   r&   rj   r&   r&   r'   rk      s    ' r:   r;   rW   r9   rX   rY   rZ   r5   r7   r6   r8   r4   r[   r<   r=   rD   r\   r]   r^   r_   r>   r?   r@   rA   rB   rC   r`   ra   rb   rc   rd   re   c       !   $      O  s   d S r$   r&   rj   r&   r&   r'   rk     s    'c                 O  s   t j| jf||S r$   )r
   rk   r   r1   r&   r&   r'   rk   /  s    F) r:   r;   r5   r7   r6   r8   r3   r4   r[   r<   r=   r\   r]   ra   rb   r`   centerrobustrd   re   infer_intervalscolorsr_   cbar_axcbar_kwargsr>   r?   r@   rA   rB   rC   rc   r   )r2   r:   r;   r5   r7   r6   r8   r3   r4   r[   r<   r=   r\   r]   ra   rb   ro   r_   rr   rs   r>   r?   r@   rA   rB   rC   rc   r.   r#   c           #      O  s   d S r$   r&   #r%   r:   r;   r5   r7   r6   r8   r3   r4   r[   r<   r=   r\   r]   ra   rb   r`   rn   ro   rd   re   rp   rq   r_   rr   rs   r>   r?   r@   rA   rB   rC   rc   r2   r.   r&   r&   r'   imshow3  s    &zDataArrayPlotAccessor.imshow)r:   r;   r5   r7   r6   r8   r3   r[   r<   r=   r\   r]   ra   rb   r`   rn   ro   rd   re   rp   rq   r_   rr   rs   r>   r?   r@   rA   rB   rC   rc   c           #      O  s   d S r$   r&   rt   r&   r&   r'   ru   [  s    &)r:   r;   r5   r7   r6   r8   r4   r[   r<   r=   r\   r]   ra   rb   r`   rn   ro   rd   re   rp   rq   r_   rr   rs   r>   r?   r@   rA   rB   rC   rc   c           #      O  s   d S r$   r&   rt   r&   r&   r'   ru     s    &c                 O  s   t j| jf||S r$   )r
   ru   r   r1   r&   r&   r'   ru     s    r   c           #      O  s   d S r$   r&   rt   r&   r&   r'   contour  s    &zDataArrayPlotAccessor.contourc           #      O  s   d S r$   r&   rt   r&   r&   r'   rv     s    &c           #      O  s   d S r$   r&   rt   r&   r&   r'   rv     s    &c                 O  s   t j| jf||S r$   )r
   rv   r   r1   r&   r&   r'   rv   '  s    c           #      O  s   d S r$   r&   rt   r&   r&   r'   contourf+  s    &zDataArrayPlotAccessor.contourfc           #      O  s   d S r$   r&   rt   r&   r&   r'   rw   S  s    &r   c           #      O  s   d S r$   r&   rt   r&   r&   r'   rw   {  s    &c                 O  s   t j| jf||S r$   )r
   rw   r   r1   r&   r&   r'   rw     s    r   c           #      O  s   d S r$   r&   rt   r&   r&   r'   
pcolormesh  s    &z DataArrayPlotAccessor.pcolormeshc           #      O  s   d S r$   r&   rt   r&   r&   r'   rx     s    &c           #      O  s   d S r$   r&   rt   r&   r&   r'   rx     s    &c                 O  s   t j| jf||S r$   )r
   rx   r   r1   r&   r&   r'   rx     s    r   c           #      O  s   d S r$   r&   rt   r&   r&   r'   surface#  s    &zDataArrayPlotAccessor.surfacec           #      O  s   d S r$   r&   rt   r&   r&   r'   ry   K  s    &c           #      O  s   d S r$   r&   rt   r&   r&   r'   ry   s  s    &c                 O  s   t j| jf||S r$   )r
   ry   r   r1   r&   r&   r'   ry     s    )__name__
__module____qualname__r)   r*   	__slots__r
   r-   r(   	functoolswrapsr/   r0   r	   rN   rU   rk   ru   rv   rw   rx   ry   r&   r&   r&   r'   r      s  

>>>
"""
R(R(R(

L'L'L'
L'L'L'
L'L'L'
L'L'L'
L'L'L'
r   c                $   @  sR  e Zd ZU dZded< dZdddddZd	d
ddZe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ddddddddddddddddddddd!d d!Z	e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#ddddddddddddddddddd$d!d%d!Z	e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ddddddddddddddddddd$d!d'd!Z	e
ej	d(d
d)d!Z	e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ddddddddd,d-d.d/Ze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d0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d1d-d2d/Ze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d3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d1d-d4d/Ze
ejd5d
d6d/Ze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ddddddddd7d-d8d9Ze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d0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d1d-d:d9Ze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d3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d1d-d;d9Ze
ejd<d
d=d9ZdS )>DatasetPlotAccessorzp
    Enables use of xarray.plot functions as attributes on a Dataset.
    For example, Dataset.plot.scatter
    r   _dsr   r!   )datasetr#   c                 C  s
   || _ d S r$   r   )r%   r   r&   r&   r'   r(     s    zDatasetPlotAccessor.__init__r   r,   c                 O  s   t dd S )Nz^Dataset.plot cannot be called directly. Use an explicit plot method, e.g. ds.plot.scatter(...))
ValueErrorr1   r&   r&   r'   r/     s    zDatasetPlotAccessor.__call__NTrV   r   rI   r   rF   rG   rH   rf   rJ   rg   rL   rh   r   rK   ri   r   )!r2   r:   r;   rW   r9   rX   rY   rZ   r5   r7   r6   r8   r3   r4   r[   r<   r=   rD   r\   r]   r^   r_   r>   r?   r@   rA   rB   rC   ra   rb   rc   r.   r#   c       !   $      O  s   d S r$   r&   rj   r&   r&   r'   rk     s    'zDatasetPlotAccessor.scatterrl   r   rO   c       !   $      O  s   d S r$   r&   rj   r&   r&   r'   rk     s    'rm   c       !   $      O  s   d S r$   r&   rj   r&   r&   r'   rk     s    'z%PathCollection | FacetGrid[DataArray]c                 O  s   t j| jf||S r$   )r   rk   r   r1   r&   r&   r'   rk   -  s    )r:   r;   uvr9   rX   r4   r3   r8   r5   r7   r[   sharexshareyr6   r_   	add_guiders   rr   ra   rb   rc   rp   rn   re   ro   rq   rd   r`   r   r   )r2   r:   r;   r   r   r9   rX   r4   r3   r8   r5   r7   r[   r   r   r6   r_   r   rs   rr   ra   rb   rc   ro   r.   r#   c                 O  s   d S r$   r&    r%   r:   r;   r   r   r9   rX   r4   r3   r8   r5   r7   r[   r   r   r6   r_   r   rs   rr   ra   rb   rc   rp   rn   re   ro   rq   rd   r`   r2   r.   r&   r&   r'   quiver1  s    #zDatasetPlotAccessor.quiver)r:   r;   r   r   r9   rX   r3   r8   r5   r7   r[   r   r   r6   r_   r   rs   rr   ra   rb   rc   rp   rn   re   ro   rq   rd   r`   r   c                 O  s   d S r$   r&   r   r&   r&   r'   r   V  s    #)r:   r;   r   r   r9   rX   r4   r8   r5   r7   r[   r   r   r6   r_   r   rs   rr   ra   rb   rc   rp   rn   re   ro   rq   rd   r`   c                 O  s   d S r$   r&   r   r&   r&   r'   r   {  s    #zQuiver | FacetGridc                 O  s   t j| jf||S r$   )r   r   r   r1   r&   r&   r'   r     s    r   c                 O  s   d S r$   r&   r   r&   r&   r'   
streamplot  s    #zDatasetPlotAccessor.streamplotc                 O  s   d S r$   r&   r   r&   r&   r'   r     s    #c                 O  s   d S r$   r&   r   r&   r&   r'   r     s    #zLineCollection | FacetGridc                 O  s   t j| jf||S r$   )r   r   r   r1   r&   r&   r'   r     s    )rz   r{   r|   r)   r*   r}   r(   r/   r	   rk   r~   r   r   r   r   r&   r&   r&   r'   r     sP  
T(T(T(
F$F$F$
F$F$F$
r   )1
__future__r   r~   typingr   r   r   r   r   r   r	   ZnumpynpZxarray.plotr
   r   Zmatplotlib.axesr   Zmatplotlib.collectionsr   r   r   Zmatplotlib.colorsr   Zmatplotlib.containerr   Zmatplotlib.contourr   Zmatplotlib.imager   Zmatplotlib.quiverr   Zmpl_toolkits.mplot3d.art3dr   r   Znumpy.typingr   Zxarray.core.dataarrayr   Zxarray.core.datasetr   Zxarray.core.typesr   r   r   Zxarray.plot.facetgridr   r   r   r&   r&   r&   r'   <module>   s6   $       