o
    5cn                     @  sp   d dl mZ d dlZd dlmZmZmZ d dlm	Z	 d dl
mZmZ dddZdddZdddZdddZdS )    )annotationsN)	ArrayLikeScalarnpt)np_percentile_argname)isnana_value_for_dtypevaluesr   qsnpt.NDArray[np.float64]interpolationstrreturnc                 C  s>   t | tjrt| jdd}t| }t| ||||S | ||S )a  
    Compute the quantiles of the given values for each quantile in `qs`.

    Parameters
    ----------
    values : np.ndarray or ExtensionArray
    qs : np.ndarray[float64]
    interpolation : str

    Returns
    -------
    np.ndarray or ExtensionArray
    F)compat)
isinstancenpndarrayr   dtyper   quantile_with_mask	_quantile)r	   r
   r   
fill_valuemask r   V/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/core/array_algos/quantile.pyquantile_compat   s
   r   
np.ndarrayr   npt.NDArray[np.bool_]c           	      C  s   | j |j ksJ | jdkr#t| } t|}t| ||||}|d S | jdks*J | j d dk}|rOt|gt| }t|t| t| t|}|S t	| |d |||d}tj|dd}|j
}|S )a  
    Compute the quantiles of the given values for each quantile in `qs`.

    Parameters
    ----------
    values : np.ndarray
        For ExtensionArray, this is _values_for_factorize()[0]
    mask : np.ndarray[bool]
        mask = isna(values)
        For ExtensionArray, this is computed before calling _value_for_factorize
    fill_value : Scalar
        The value to interpret fill NA entries with
        For ExtensionArray, this is _values_for_factorize()[1]
    qs : np.ndarray[float64]
    interpolation : str
        Type of interpolation

    Returns
    -------
    np.ndarray

    Notes
    -----
    Assumes values is already 2D.  For ExtensionArray this means np.atleast_2d
    has been called on _values_for_factorize()[0]

    Quantile is computed along axis=1.
       r      g      Y@)na_valuer   r   Fcopy)shapendimr   
atleast_2dr   arraylenrepeatreshape_nanpercentileT)	r	   r   r   r
   r   
res_valuesis_emptyflatresultr   r   r   r   *   s,   #


 r   r   r   Scalar | np.ndarrayc                 C  s>   | |  } t | dkrtt ||S tj| |fi t|iS )a  
    Wrapper for np.percentile that skips missing values, specialized to
    1-dimensional case.

    Parameters
    ----------
    values : array over which to find quantiles
    mask : ndarray[bool]
        locations in values that should be considered missing
    qs : np.ndarray[float64] of quantile indices to find
    na_value : scalar
        value to return for empty or all-null values
    interpolation : str

    Returns
    -------
    quantiles : scalar or array
    r   )r&   r   full
percentiler   )r	   r   r
   r   r   r   r   r   _nanpercentile_1dm   s   
r2   c                  s   | j jdv rt| dd| d}|| j S | ro|j| jks'J  fddtt| t|D }| j jdkrKt	j
|| j ddj}|S t	j
|dd	j}|j | j krm||j| j dd	k rm|j| j dd	}|S t	j| fd
dit iS )a  
    Wrapper for np.percentile that skips missing values.

    Parameters
    ----------
    values : np.ndarray[ndim=2]  over which to find quantiles
    qs : np.ndarray[float64] of quantile indices to find
    na_value : scalar
        value to return for empty or all-null values
    mask : np.ndarray[bool]
        locations in values that should be considered missing
    interpolation : str

    Returns
    -------
    quantiles : scalar or array
    )mMi8)r
   r   r   r   c              	     s"   g | ]\}}t || d qS ))r   )r2   ).0valr3   r   r   r
   r   r   
<listcomp>   s    z"_nanpercentile.<locals>.<listcomp>fF)r   r!   r    axisr   )r   kindr)   viewastypeanyr"   ziplistr   r%   r*   allr1   r   )r	   r
   r   r   r   r.   r   r8   r   r)      s@   


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   )
__future__r   numpyr   pandas._typingr   r   r   pandas.compat.numpyr   pandas.core.dtypes.missingr   r   r   r   r2   r)   r   r   r   r   <module>   s    


C,