
    d                        d dl mZ d dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZ 	 d dlZdZn# e$ r eZdZY nw xY wd Zd'd	Zd'd
Zd(d)dZd Zd Zd Zd Zd Z G d d          ZefdZd(dZd Zd*dZ ed          Z ed          Z  ed          Z! ed          Z" ed           Z# ed!          Z$ ed"          Z% ed#          Z& ed$          Z' ed%          Z( ed&          Z)dS )+    )annotationsN)normalize_axis_index)OPTIONS)is_duck_arrayTFc                ~    t          j        d |j        D              }|d |         |fz   ||d          z   }| |         S )Nc                6    g | ]}t          j        |          S  )nparange).0ss     3lib/python3.11/site-packages/xarray/core/nputils.py
<listcomp>z&_select_along_axis.<locals>.<listcomp>   s     999!1999    )r
   ix_shape)valuesidxaxis	other_indsls        r   _select_along_axisr      sL    99sy999:I	5D5	SF	"Ytuu%5	5B":r   c                   t          |t                    r|\  }t          || j                  }t	          j        t          j        |            |          }t          | ||          }|rt	          j	        ||          S |S )Nr   )

isinstancetupler   ndimr
   argmaxpdisnullr   expand_dims)r   r   keepdims	idx_firstresults        r   nanfirstr%      s    $ fk22D	29V,,,4888I	488F ~f40000r   c                d   t          |t                    r|\  }t          || j                  }t	          d           f|z  t	          d d d          fz   }dt          j        t          j        |           |          |          z
  }t          | ||          }|rt          j
        ||          S |S )Nr   )r   r   r   r   slicer
   r   r   r    r   r!   )r   r   r"   revidx_lastr$   s         r   nanlastr+   (   s    $ fk22D;;.4
5tR#8#8":
:CBIry0055DAAAAH$77F ~f40000r   indices
np.ndarrayN
int | Nonereturnc                    |t          |           }t          j        |dt          j                  }t          j        t          |           t          j                  || <   |S )a  Return indices for an inverse permutation.

    Parameters
    ----------
    indices : 1D np.ndarray with dtype=int
        Integer positions to assign elements to.
    N : int, optional
        Size of the array

    Returns
    -------
    inverse_permutation : 1D np.ndarray with dtype=int
        Integer indices to take from the original array to create the
        permutation.
    Nr'   dtype)lenr
   fullintpr   )r,   r.   inverse_permutations      r   r7   r7   5   sU      	yLL'!Rrw777#%9S\\#I#I#I r   c                    t          | t                    r?t          j        | j        }| rt          j        nt          j        } ||t                    } | S )Nr2   )r   boolr
   	broadcastr   oneszeros)r$   argsr   constructors       r   _ensure_bool_is_ndarrayr?   M   sP     &$ 0d#)!'5bggRXU$///Mr   c                    t          j                    5  t          j        dd           t          | |k    | |          cd d d            S # 1 swxY w Y   d S Nignorezelementwise comparison failedwarningscatch_warningsfilterwarningsr?   selfothers     r   array_eqrJ   [       		 	"	" C C*JKKK&tu}dEBBC C C C C C C C C C C C C C C C C C   *AAAc                    t          j                    5  t          j        dd           t          | |k    | |          cd d d            S # 1 swxY w Y   d S rA   rC   rG   s     r   array_nerN   a   rK   rL   c                L    | d         }| dd         D ]}||dz   k    r dS |}dS )z?Given a non-empty list, does it consist of contiguous integers?r      NFTr	   )	positionspreviouscurrents      r   _is_contiguousrT   g   sD    |HQRR=  hl""554r   c                Z   t          | t                    s| f} d t          |           D             }|rt          |          sdS d | D             }t	          j        d |D              }t          |          }|d         t	          j        |          z   }t	          j        |          }||fS )zHIndices of the advanced indexes subspaces for mixed indexing and vindex.c                B    g | ]\  }}t          |t                    |S r	   r   r(   )r   iks      r   r   z/_advanced_indexer_subspaces.<locals>.<listcomp>u   s;          aJq%,@,@ 	     r   )r	   r	   c                <    g | ]}t          |t                    |S r	   rW   )r   rY   s     r   r   z/_advanced_indexer_subspaces.<locals>.<listcomp>   s'    ===
1e(<(<=!===r   c                >    g | ]}t          |          r|j        nd S ))r   )r   r   )r   items     r   r   z/_advanced_indexer_subspaces.<locals>.<listcomp>   s+    	M	M	M$d++
5$**	M	M	Mr   r   )r   r   	enumeraterT   r
   broadcast_shapesr4   r   )keyadvanced_index_positions
non_slicesbroadcasted_shaper   mixed_positionsvindex_positionss          r   _advanced_indexer_subspacesre   q   s    c5!! f   nn      $ >:R+S+S 
 v==S===J+	M	M*	M	M	M  !!D.q1BIdOOCOy,,,r   c                  $    e Zd ZdZd Zd Zd ZdS )NumpyVIndexAdapterzObject that implements indexing like vindex on a np.ndarray.

    This is a pure Python implementation of (some of) the logic in this NumPy
    proposal: https://github.com/numpy/numpy/pull/6256
    c                    || _         d S N)_array)rH   arrays     r   __init__zNumpyVIndexAdapter.__init__   s    r   c                h    t          |          \  }}t          j        | j        |         ||          S ri   re   r
   moveaxisrj   )rH   r_   rc   rd   s       r   __getitem__zNumpyVIndexAdapter.__getitem__   s1    ,G,L,L)){4;s+_>NOOOr   c                f    t          |          \  }}t          j        |||          | j        |<   dS )z0Value must have dimensionality matching the key.Nrn   )rH   r_   valuerc   rd   s        r   __setitem__zNumpyVIndexAdapter.__setitem__   s6    ,G,L,L));u.>PPCr   N)__name__
__module____qualname____doc__rl   rp   rs   r	   r   r   rg   rg      sS           P P PQ Q Q Q Qr   rg   c                &     d fd	} |_         |S )Nc                   |                     dd           }t          t          d           }t          rt          d         rt          | t          j                  rr|pt          |t                    s[| j	        j
        dv rM| j	        j        rA|t          j	        |          | j	        k    r"|                    dd             || fd|i|}n t                    | fd|i|}|S )Nr3   use_bottleneckuifcr   )getgetattrbn_USE_BOTTLENECKr   r   r
   ndarrayr   r3   kindisnativepop)r   r   kwargsr3   bn_funcr$   namenpmodules         r   fz$_create_bottleneck_method.<locals>.f   s   

7D))"dD)) 	J()	J 62:..	J #tU++ $!V++% ,"(5//V\"A"A JJw%%%WV99$9&99FF,WXt,,VII$I&IIFr   ri   )rt   )r   r   r   s   `` r   _create_bottleneck_methodr      s5          , AJHr   c                   t          j        |j        d         dz   ft           j                  }t          j        |           }t          j        |          sut           j                            || d d f         | |          |          \  |d d<   }}}|j        dk    r|nt           j        |d<   t          ||j        d                    |S )NrP   rcondr'   r   )
r
   r5   r   nanisnanalllinalglstsqsizewarn_on_deficient_rank)arrxr   outmaskresidrank_s           r   _nanpolyfit_1dr      s    
'171:>#RV
,
,C8C==D6$<< 1#%9??1dUAAAX;TE
RW?#X#X CRC%q :>>%%rvBtQWQZ000Jr   c                X    | |k    r#t          j        dt          j        d           d S d S )Nz!Polyfit may be poorly conditioned   )
stacklevel)rD   warnr
   RankWarning)r   orders     r   r   r      s3    u}}92>VWXXXXXX }r   c                ,   |r|j         dk    }|r!|                    |j        d         d          }t          j        t          j        |          d          }t          j        | j        d         dz   |j        d         f          }t          j        |          r-t          j        t          d|d d |f         |           |d d |f<   t          j        |           rtt          j	        
                    | |d d | f         |          \  |d d| f<   }}}	|j        dk    r|nt          j        |d| f<   t          || j        d                    |d dd d f         }
|dd d f         }|r@|
                    |
j        d                   }
|                    |j        d                   }nbt          j	        
                    | ||          \  }
}}}	|j        dk    r|
d         t          j        z  }t          || j        d                    |
|fS )NrP   r   r   r   r'   )r   reshaper   r
   anyr   emptyapply_along_axisr   r   r   r   r   r   )lhsrhsr   skipna	added_dimnan_colsr   residsr   r   coeffs	residualss               r   least_squaresr      s    3HM	 	/++cilA..C6"(3--a000h	!q(#)A,7886( 	!23qqq({#3S   C8 68) 	7359??SXI&e 4C 4 40ChYq ,2;??CXI"41666SbS!!!VAAAJ	 	>^^FLO44F!)))/!*<==I%'Y__S#U_%K%K"	4>Qq	BF*ItSYq\2229r   nanminnanmaxnanmean	nanmediannanvarnanstdnanprod	nancumsum
nancumprod	nanargmin	nanargmax)Fri   )r,   r-   r.   r/   r0   r-   )NF)*
__future__r   rD   numpyr
   pandasr   numpy.core.multiarrayr   xarray.core.optionsr   xarray.core.pycompatr   
bottleneckr~   r   ImportErrorr   r%   r+   r7   r?   rJ   rN   rT   re   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r   r   <module>r      s   " " " " " "          6 6 6 6 6 6 ' ' ' ' ' ' . . . . . .OO   	BOOO  	 	 	 	
 
 
 
    0  C C CC C C  - - -2Q Q Q Q Q Q Q Q( .0    6   Y Y Y
   < 
#	"8	,	,	"	"8	,	,
#
#I
.
.%%k22		"	"8	,	,	"	"8	,	,
#
#I
.
.%%k22	&&|44
%%k22	%%k22			s   - 	99