
    dbx              #         d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	m
Z
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mZmZmZmZ e	r@d d	lmZ d d
lmZ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) d dl*m+Z+m,Z,m-Z-m.Z. d dlm/Z/ d Z0eddddddddddddddddddddddddddddddddI            Z1edddddddddddddddddddddddddddddJddM            Z1edddddddddddddddddddddddddddddNddO            Z1e0ddQ            Z1eddddddddddddddddddddddddddddddddS            Z2edddddddddddddddddddddddddddddJddT            Z2edddddddddddddddddddddddddddddNddU            Z2e0ddV            Z2 edWeX          Z3dd\Z4ddaZ5dddZ6edddddddddddddddddddddddddddddddddde!ddx            Z7edddddddddddddddddddddddddddddddddy dd{            Z7eddddddddddddddddddddddddddddddddd| dd}            Z7 e4ej7                  dddddddddddddddddddddddddddddddddde!dd            Z7dS )    )annotationsN)HashableIterable)TYPE_CHECKINGAnyCallableTypeVaroverload)	broadcast)dataarray_plot)_easy_facetgrid)_add_colorbar_get_nice_quiver_magnitude_infer_meta_data_process_cmap_cbar_kwargsget_axis)Axes)LineCollectionPathCollection)Colormap	Normalize)Quiver)	ArrayLike	DataArray)Dataset)AspectOptionsExtendOptionsHueStyleOptionsScaleOptions)	FacetGridc                     d} j          d|  _         t          j         d          d d d d d d d d d d d d d ddd d d d d d d d d d d d d d dd: fd9            }|`|S );Na  
    Parameters
    ----------

    ds : Dataset
    x : Hashable or None, optional
        Variable name for x-axis.
    y : Hashable or None, optional
        Variable name for y-axis.
    u : Hashable or None, optional
        Variable name for the *u* velocity (in *x* direction).
        quiver/streamplot plots only.
    v : Hashable or None, optional
        Variable name for the *v* velocity (in *y* direction).
        quiver/streamplot plots only.
    hue: Hashable or None, optional
        Variable by which to color scatter points or arrows.
    hue_style: {'continuous', 'discrete'} or None, optional
        How to use the ``hue`` variable:

        - ``'continuous'`` -- continuous color scale
          (default for numeric ``hue`` variables)
        - ``'discrete'`` -- a color for each unique value, using the default color cycle
          (default for non-numeric ``hue`` variables)

    row : Hashable or None, optional
        If passed, make row faceted plots on this dimension name.
    col : Hashable or None, optional
        If passed, make column faceted plots on this dimension name.
    col_wrap : int, optional
        Use together with ``col`` to wrap faceted plots.
    ax : matplotlib axes object or None, optional
        If ``None``, use the current axes. Not applicable when using facets.
    figsize : Iterable[float] or None, optional
        A tuple (width, height) of the figure in inches.
        Mutually exclusive with ``size`` and ``ax``.
    size : scalar, optional
        If provided, create a new figure for the plot with the given size.
        Height (in inches) of each plot. See also: ``aspect``.
    aspect : "auto", "equal", scalar or None, optional
        Aspect ratio of plot, so that ``aspect * size`` gives the width in
        inches. Only used if a ``size`` is provided.
    sharex : bool or None, optional
        If True all subplots share the same x-axis.
    sharey : bool or None, optional
        If True all subplots share the same y-axis.
    add_guide: bool or None, optional
        Add a guide that depends on ``hue_style``:

        - ``'continuous'`` -- build a colorbar
        - ``'discrete'`` -- build a legend

    subplot_kws : dict or None, optional
        Dictionary of keyword arguments for Matplotlib subplots
        (see :py:meth:`matplotlib:matplotlib.figure.Figure.add_subplot`).
        Only applies to FacetGrid plotting.
    cbar_kwargs : dict, optional
        Dictionary of keyword arguments to pass to the colorbar
        (see :meth:`matplotlib:matplotlib.figure.Figure.colorbar`).
    cbar_ax : matplotlib axes object, optional
        Axes in which to draw the colorbar.
    cmap : matplotlib colormap name or colormap, optional
        The mapping from data values to color space. Either a
        Matplotlib colormap name or object. If not provided, this will
        be either ``'viridis'`` (if the function infers a sequential
        dataset) or ``'RdBu_r'`` (if the function infers a diverging
        dataset).
        See :doc:`Choosing Colormaps in Matplotlib <matplotlib:tutorials/colors/colormaps>`
        for more information.

        If *seaborn* is installed, ``cmap`` may also be a
        `seaborn color palette <https://seaborn.pydata.org/tutorial/color_palettes.html>`_.
        Note: if ``cmap`` is a seaborn color palette,
        ``levels`` must also be specified.
    vmin : float or None, optional
        Lower value to anchor the colormap, otherwise it is inferred from the
        data and other keyword arguments. When a diverging dataset is inferred,
        setting `vmin` or `vmax` will fix the other by symmetry around
        ``center``. Setting both values prevents use of a diverging colormap.
        If discrete levels are provided as an explicit list, both of these
        values are ignored.
    vmax : float or None, optional
        Upper value to anchor the colormap, otherwise it is inferred from the
        data and other keyword arguments. When a diverging dataset is inferred,
        setting `vmin` or `vmax` will fix the other by symmetry around
        ``center``. Setting both values prevents use of a diverging colormap.
        If discrete levels are provided as an explicit list, both of these
        values are ignored.
    norm : matplotlib.colors.Normalize, optional
        If ``norm`` has ``vmin`` or ``vmax`` specified, the corresponding
        kwarg must be ``None``.
    infer_intervals: bool | None
        If True the intervals are inferred.
    center : float, optional
        The value at which to center the colormap. Passing this value implies
        use of a diverging colormap. Setting it to ``False`` prevents use of a
        diverging colormap.
    robust : bool, optional
        If ``True`` and ``vmin`` or ``vmax`` are absent, the colormap range is
        computed with 2nd and 98th percentiles instead of the extreme values.
    colors : str or array-like of color-like, optional
        A single color or a list of colors. The ``levels`` argument
        is required.
    extend : {'neither', 'both', 'min', 'max'}, optional
        How to draw arrows extending the colorbar beyond its limits. If not
        provided, ``extend`` is inferred from ``vmin``, ``vmax`` and the data limits.
    levels : int or array-like, optional
        Split the colormap (``cmap``) into discrete color intervals. If an integer
        is provided, "nice" levels are chosen based on the data range: this can
        imply that the final number of levels is not exactly the expected one.
        Setting ``vmin`` and/or ``vmax`` with ``levels=N`` is equivalent to
        setting ``levels=np.linspace(vmin, vmax, N)``.
    **kwargs : optional
        Additional keyword arguments to wrapped Matplotlib function.
    
)
__module____name____qualname____doc__)assignedT)xyuvhue	hue_stylerowcolcol_wrapaxfigsizesizeaspectsharexsharey	add_guidesubplot_kwscbar_kwargscbar_axcmapvminvmaxnorminfer_intervalscenterrobustcolorsextendlevelsdsr   argsr   r)   Hashable | Noner*   r+   r,   r-   r.   r   r/   r0   r1   
int | Noner2   Axes | Noner3   Iterable[float] | Noner4   float | Noner5   r   r6   boolr7   r8   bool | Noner9   dict[str, Any] | Noner:   r;   r<   str | Colormap | Noner=   r>   r?   Normalize | Noner@   rA   rB   rC   str | ArrayLike | NonerD   r   rE   ArrayLike | Nonekwargsreturnc                 * |rd} |J |d         }t          |          dk    r|J |d         }t          |          dk    r|J |d         }t          |          dk    r|J |d         }t          |          dk    r|J |d         }t          |          dk    rt          |           t          j        | t          d           ~|                    d	d
          }!|!r|                    d          }"nt          | |||||+j                  }"|"d         }|s|rYt                      	                                }#t                      +j                 |#d<   | |#d<   dD ]}$|#|$= t          d,ddi|#|S |                    dd           }t          ||||
          }
|dk    rL|J|!r|"d         }|"d         *n(t          +| |         j        fi t                      \  *}*fddD             }%ni }%||+j        dvrt          d           +d,| |||
|||||%d	|}&|!r|&S |"                    dd           r(|
                    |"                    d                     |"                    dd           r(|
                    |"                    d                     |"d         r+|
                    |&|"                    dd                       |"d!         r6|i n|}d"|vr|"                    dd           |d"<   t'          |&|
||*           |"d#         r^t)          | |         | |                   }'| |         j                            d$d%          }(|
                    |&d&d'|'|' d(|( d)d*+           +j        dv r| |                                         })n| |                                         })|
                    |)           |&S )-NzYUsing positional arguments is deprecated for plot methods, use keyword arguments instead.r                  )
stacklevel_is_facetgridF	meta_data)funcnamer.   plotfuncdata)r^   rT   rF   kinddatasetr3   
continuousr:   cmap_paramsc                "    i | ]}||         S  rg   ).0vvre   s     8lib/python3.11/site-packages/xarray/plot/dataset_plot.py
<dictcomp>z0_dsplot.<locals>.newplotfunc.<locals>.<dictcomp>   s,     " " "(*KO" " "    )r=   r>   r?   r<   )quiver
streamplotz5u, v are only allowed for quiver or streamplot plots.)	rF   r)   r*   r2   r+   r,   r-   r.   re   xlabelylabel
add_legend	hue_label)handlestitleadd_colorbarlabeladd_quiverkeyunits g333333?g?r#   Efigure)XYUrv   labelposcoordinatesrg   )len
ValueErrorwarningswarnDeprecationWarningpopr   r%   localscopyglobalsr   r   r   valuesget
set_xlabel
set_ylabellegendr   r   attrs	quiverkey_title_for_slice	set_title),rF   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rG   rT   msgr]   r^   allargsargcmap_params_subset	primitive	magnituderx   rt   re   r`   s,                                             @rj   newplotfuncz_dsplot.<locals>.newplotfunc   s   J  	EmC999QA4yy1}}yyyG4yy1}}yyyG4yy1}}yyyG4yy1}}{{{1g4yy1}} oo%c#5!DDDD

?E:: 	

;//II(Aq#y)h>O  I k*	  	H# 	HhhmmooG")))H,=">GJ GFO4 ! !CLL"GG	GWGGGG**Y--gtVR00$$ '6'6+Dbgn, ,06, ,([
" " " ".N" " "
 "$MQ]0A J
 1
 1
 TUUUH 
*
 
 
 
	  	==4(( 	3MM)--11222==4(( 	3MM)--11222\" 	QIIiy}}[$/O/OIPPP^$ 	L + 3""Kk))'0}}[$'G'GG$)R+{KKK_% 	22a5"Q%@@IqEKOOGR00ELL"--e--$      888qE**,,EEqE**,,E
Url   )BrF   r   rG   r   r)   rH   r*   rH   r+   rH   r,   rH   r-   rH   r.   r   r/   rH   r0   rH   r1   rI   r2   rJ   r3   rK   r4   rL   r5   r   r6   rM   r7   rM   r8   rN   r9   rO   r:   rO   r;   rJ   r<   rP   r=   rL   r>   rL   r?   rQ   r@   rN   rA   rL   rB   rN   rC   rR   rD   r   rE   rS   rT   r   rU   r   )r'   	functoolswraps__wrapped__)r`   	commondocr   s   `  rj   _dsplotr   &   s    rIj #*99i99H_P   "!!!#%)###*.! $!%-1-1#&*!!!%'+#")- $#'?X X X X X X X Xz 	rl   T)r)   r*   r+   r,   r-   r.   r0   r/   r2   r3   r4   r1   r6   r7   r5   r9   r8   r:   r;   r=   r>   r?   r@   rA   rE   rB   rC   rD   r<   rF   r   rG   r   r)   rH   r*   r+   r,   r-   r.   r   r0   Noner/   r2   rJ   r3   rK   r4   rL   r1   rI   r6   rM   r7   r5   r   r9   rO   r8   rN   r:   r;   r=   r>   r?   rQ   r@   rA   rE   rS   rB   rC   rR   rD   r   r<   rP   rT   rU   r   c                   d S Nrg    rF   r)   r*   r+   r,   r-   r.   r0   r/   r2   r3   r4   r1   r6   r7   r5   r9   r8   r:   r;   r=   r>   r?   r@   rA   rE   rB   rC   rD   r<   rG   rT   s                                    rj   rm   rm   C  
    F Crl   )r)   r*   r+   r,   r-   r.   r/   r2   r3   r4   r1   r6   r7   r5   r9   r8   r:   r;   r=   r>   r?   r@   rA   rE   rB   rC   rD   r<   r   FacetGrid[Dataset]c                   d S r   rg   r   s                                    rj   rm   rm   i  r   rl   )r)   r*   r+   r,   r-   r.   r0   r2   r3   r4   r1   r6   r7   r5   r9   r8   r:   r;   r=   r>   r?   r@   rA   rE   rB   rC   rD   r<   c                   d S r   rg   r   s                                    rj   rm   rm     r   rl   r   c                r   ddl }||||t          d          t          | |         | |         | |         | |                   \  }}	}
}|j        |	j        |
j        |j        g}|                    d          }|                    d          }|rl|                    | |         j                   |d         sD|j                            |                    d          |                    d                    |d<   |                    d	           |                    d
d            |j	        |i ||}|S )zaQuiver plot of Dataset variables.

    Wraps :py:func:`matplotlib:matplotlib.pyplot.quiver`.
    r   Nz)Must specify x, y, u, v for quiver plots.r-   re   r?   r=   r>   r.   pivotmiddle)

matplotlibr   r   r   r   appendrC   r   
setdefaultrm   )rF   r)   r*   r2   r+   r,   rT   mpldxdydudvrG   r-   re   hdls                   rj   rm   rm     sE    yAIaiDEEEr!ubeRUBqE::NBBIry")RY7D
**U

C**]++K
 BsGN### 6" 	"%*"6"6'')@)@# #K JJ{
gx(((
")T
3V
3{
3
3CJrl   r   c                   d S r   rg   r   s                                    rj   rn   rn     r   rl   c                   d S r   rg   r   s                                    rj   rn   rn     r   rl   c                   d S r   rg   r   s                                    rj   rn   rn   )  r   rl   c                   ddl }||||t          d          t          | |         j                  dk    r| |         j        d         nd}t          | |         j                  dk    r| |         j        d         nd}	|O|	Mt	          | |         j                  |hz
  }
t          |
          dk    rt          t          |
                    }	|	O|Mt	          | |         j                  |	hz
  }t          |          dk    rt          t          |                    }t          | |         | |         | |         | |                   \  }}}}|Z|	X|                    |	|          }|                    |	|          }|                    |	|          }|                    |	|          }|j	        |j	        |j	        |j	        g}|
                    d          }|
                    d          }|r\| |         j	        |d<   |d         sD|j                            |
                    d	          |
                    d
                    |d<   |
                    d            |j        |i ||}|j        S )zjPlot streamlines of Dataset variables.

    Wraps :py:func:`matplotlib:matplotlib.pyplot.streamplot`.
    r   Nz-Must specify x, y, u, v for streamplot plots.rW   r-   re   colorr?   r=   r>   r.   )r   r   r   dimssetnextiterr   	transposer   r   rC   r   rn   lines)rF   r)   r*   r2   r+   r,   rT   r   xdimydimydimsxdimsr   r   r   r   rG   r-   re   r   s                       rj   rn   rn   O  s^    yAIaiHIII  1
OOq002a5:a==dD1
OOq002a5:a==dDDLBqEJ4&(u::??U$$DDLBqEJ4&(u::??U$$Dr!ubeRUBqE::NBBD,\\$%%\\$%%\\$%%\\$%%Iry")RY7D
**U

C**]++K
 S'.w 6" 	"%*"6"6'')@)@# #K JJ{
"-
7
7;
7
7C 9rl   F)bounddataarray_plotfuncr   Callable[[F], F]c                    | j         }|t          d          d}d}||v r+|                    ||                              dd          n|t          j        |           dfd
            }|S )a  
    Add a common docstring by re-using the DataArray one.

    TODO: Reduce code duplication.

    * The goal is to reduce code duplication by moving all Dataset
      specific plots to the DataArray side and use this thin wrapper to
      handle the conversion between Dataset and DataArray.
    * Improve docstring handling, maybe reword the DataArray versions to
      explain Datasets better.

    Parameters
    ----------
    dataarray_plotfunc : Callable
        Function that returns a finished plot primitive.
    Nz*DataArray plot method requires a docstringz:
    Parameters
    ----------
    darray : DataArray
    z

    The `y` DataArray will be used as base, any other variables are added as coords.

    Parameters
    ----------
    ds : Dataset
    darrayrF   dataset_plotfuncr   rU   c                    | _         | S r   )r'   )r   ds_docs    rj   wrapperz'_update_doc_to_dataset.<locals>.wrapper  s    #) rl   )r   r   rU   r   )r'   NotImplementedErrorreplacer   r   )r   da_docda_strds_strr   r   s        @rj   _update_doc_to_datasetr     s    &  'F~!"NOOOF
F //77$GG_'((          )(  Nrl   
plotmethodstrtuple[Any, ...]dict[str, Any]c           	         ddl m} t           t          j        t           |            j        |                     j        |i |j        	                                          }|
                    |                    di                      |S )Nr   r   rT   )xarray.core.dataarrayr   dictinspect	signaturegetattrplotbind	argumentsitemsupdater   )r   rG   rT   r   locals_s        rj   _normalize_argsr     s     0///// 	'))++"2J??@@	t		 		5577 G
 NN7;;x,,---Nrl   r   r   c                    ddl m} t          | j                  }h d}|                                |z  }|D ]/}||         }| j                            |          | |         ||<   0| |                             |           }	 ||	|          S )z.Create a temporary datarray with extra coords.r   r   >   r+   r,   r)   zr0   r-   r/   
markersizeN)coords)r   r   r   r   keys	data_varsr   broadcast_like)
rF   r*   r   r   r   valid_coord_kwargscoord_kwargskkey_ys
             rj   _temp_dataarrayr     s    ////// ")__F QPP<<>>$66L " "aj<C  ,S'F3K 
A		b	!	!B9R''''rl   )!r)   r*   r   r-   r.   r   	linewidthr3   r4   r5   r2   r/   r0   r1   	xincrease	yincreaserq   ru   
add_labels	add_titler9   xscaleyscalexticksyticksxlimylimr<   r=   r>   r?   rD   rE   r   r   r   r   r   rq   ru   r   bool | Iterable[bool]r   r   r    r   r   r   r   r   r   c       !            d S r   rg   $rF   r)   r*   r   r-   r.   r   r   r3   r4   r5   r2   r/   r0   r1   r   r   rq   ru   r   r   r9   r   r   r   r   r   r   r<   r=   r>   r?   rD   rE   rG   rT   s$                                       rj   scatterr     
    N Crl   ) r)   r*   r   r-   r.   r   r   r3   r4   r5   r2   r/   r1   r   r   rq   ru   r   r   r9   r   r   r   r   r   r   r<   r=   r>   r?   rD   rE   FacetGrid[DataArray]c       !            d S r   rg   r   s$                                       rj   r   r     r   rl   ) r)   r*   r   r-   r.   r   r   r3   r4   r5   r2   r0   r1   r   r   rq   ru   r   r   r9   r   r   r   r   r   r   r<   r=   r>   r?   rD   rE   c       !            d S r   rg   r   s$                                       rj   r   r   B  r   rl   %PathCollection | FacetGrid[DataArray]c       !            t                      }$|$d= |$                    |$                    di                      t          | ||$          }% |%j        j        |$                    dd          i |$S )z7Scatter plot Dataset data variables against each other.rF   rT   rG   rg   )r   r   r   r   r   r   )&rF   r)   r*   r   r-   r.   r   r   r3   r4   r5   r2   r/   r0   r1   r   r   rq   ru   r   r   r9   r   r   r   r   r   r   r<   r=   r>   r?   rD   rE   rG   rT   r   das&                                         rj   r   r   l  sm    P hhGNN7;;x,,---	Q	(	(B27?GKK33?w???rl   )BrF   r   rG   r   r)   rH   r*   rH   r+   rH   r,   rH   r-   rH   r.   r   r0   r   r/   r   r2   rJ   r3   rK   r4   rL   r1   rI   r6   rM   r7   rM   r5   r   r9   rO   r8   rN   r:   rO   r;   rJ   r=   rL   r>   rL   r?   rQ   r@   rN   rA   rL   rE   rS   rB   rN   rC   rR   rD   r   r<   rP   rT   r   rU   r   )BrF   r   rG   r   r)   rH   r*   rH   r+   rH   r,   rH   r-   rH   r.   r   r0   r   r/   rH   r2   rJ   r3   rK   r4   rL   r1   rI   r6   rM   r7   rM   r5   r   r9   rO   r8   rN   r:   rO   r;   rJ   r=   rL   r>   rL   r?   rQ   r@   rN   rA   rL   rE   rS   rB   rN   rC   rR   rD   r   r<   rP   rT   r   rU   r   )BrF   r   rG   r   r)   rH   r*   rH   r+   rH   r,   rH   r-   rH   r.   r   r0   rH   r/   r   r2   rJ   r3   rK   r4   rL   r1   rI   r6   rM   r7   rM   r5   r   r9   rO   r8   rN   r:   rO   r;   rJ   r=   rL   r>   rL   r?   rQ   r@   rN   rA   rL   rE   rS   rB   rN   rC   rR   rD   r   r<   rP   rT   r   rU   r   )rF   r   r)   r   r*   r   r2   r   r+   r   r,   r   rT   r   rU   r   )BrF   r   rG   r   r)   rH   r*   rH   r+   rH   r,   rH   r-   rH   r.   r   r0   r   r/   r   r2   rJ   r3   rK   r4   rL   r1   rI   r6   rM   r7   rM   r5   r   r9   rO   r8   rN   r:   rO   r;   rJ   r=   rL   r>   rL   r?   rQ   r@   rN   rA   rL   rE   rS   rB   rN   rC   rR   rD   r   r<   rP   rT   r   rU   r   )rF   r   r)   r   r*   r   r2   r   r+   r   r,   r   rT   r   rU   r   )r   r   rU   r   )r   r   rG   r   rT   r   rU   r   )rF   r   r*   r   r   r   rU   r   )JrF   r   rG   r   r)   rH   r*   rH   r   rH   r-   rH   r.   r   r   rH   r   rH   r3   rK   r4   rL   r5   rL   r2   rJ   r/   r   r0   r   r1   rI   r   rN   r   rN   rq   rN   ru   rN   r   r   r   rM   r9   rO   r   r    r   r    r   rS   r   rS   r   rS   r   rS   r<   rP   r=   rL   r>   rL   r?   rQ   rD   r   rE   rS   rT   r   rU   r   )JrF   r   rG   r   r)   rH   r*   rH   r   rH   r-   rH   r.   r   r   rH   r   rH   r3   rK   r4   rL   r5   rL   r2   rJ   r/   rH   r0   r   r1   rI   r   rN   r   rN   rq   rN   ru   rN   r   r   r   rM   r9   rO   r   r    r   r    r   rS   r   rS   r   rS   r   rS   r<   rP   r=   rL   r>   rL   r?   rQ   rD   r   rE   rS   rT   r   rU   r   )JrF   r   rG   r   r)   rH   r*   rH   r   rH   r-   rH   r.   r   r   rH   r   rH   r3   rK   r4   rL   r5   rL   r2   rJ   r/   r   r0   rH   r1   rI   r   rN   r   rN   rq   rN   ru   rN   r   r   r   rM   r9   rO   r   r    r   r    r   rS   r   rS   r   rS   r   rS   r<   rP   r=   rL   r>   rL   r?   rQ   rD   r   rE   rS   rT   r   rU   r   )JrF   r   rG   r   r)   rH   r*   rH   r   rH   r-   rH   r.   r   r   rH   r   rH   r3   rK   r4   rL   r5   rL   r2   rJ   r/   rH   r0   rH   r1   rI   r   rN   r   rN   rq   rN   ru   rN   r   r   r   rM   r9   rO   r   r    r   r    r   rS   r   rS   r   rS   r   rS   r<   rP   r=   rL   r>   rL   r?   rQ   rD   r   rE   rS   rT   r   rU   r  )8
__future__r   r   r   r   collections.abcr   r   typingr   r   r   r	   r
   xarray.core.alignmentr   xarray.plotr   xarray.plot.facetgridr   xarray.plot.utilsr   r   r   r   r   matplotlib.axesr   matplotlib.collectionsr   r   matplotlib.colorsr   r   matplotlib.quiverr   numpy.typingr   r   r   xarray.core.datasetr   xarray.core.typesr   r   r   r    r!   r   rm   rn   r   r   r   r   r   rg   rl   rj   <module>r     s   " " " " " "       . . . . . . . . B B B B B B B B B B B B B B + + + + + + & & & & & & 1 1 1 1 1 1               0$$$$$$EEEEEEEE55555555((((((&&&&&&//////++++++            0/////Z Z Zz 
 !%&* )-!)-!#'#%) "&?" " " " " 
"J 
 !%&* )-!)-!#'#%) "&?" " " " " 
"J 
 !%&* )-!)-!#'#%) "&?" " " " " 
"J 	$ $ $ 	$N 
 !%&* )-!)-!#'#%) "&?" " " " " 
"J 
 !%&* )-!)-!#'#%) "&?" " " " " 
"J 
 !%&* )-!)-!#'#%) "&?" " " " " 
"J 	< < < 	<~ GCx   / / / /d   "( ( ( (2 
 !%"&!%&*!!" $(,)-##!!"&! #G& & & & & 
&R 
 !%"&!%&*!!" $(,)-##!!"&! #G& & & & & 
&R 
 !%"&!%&*!!" $(,)-##!!"&! #G& & & & & 
&R .// !%"&!%&*!!" $(,)-##!!"&! #G,@ ,@ ,@ ,@ ,@ 0/,@ ,@ ,@rl   