
    h                        d dl mZ d dlmZ d dlZd dlmZmZ er
d dl	m
Z
mZmZ 	 	 	 	 	 	 	 	 d
dZ	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 dd	Zy)    )annotations)TYPE_CHECKINGN)isnana_value_for_dtype)	ArrayLikeScalarnptc                    t        | t        j                        r1t        | j                  d      }t        |       }t        | ||||      S | j                  ||      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)valuesqsinterpolation
fill_valuemasks        ED:\jyotish\venv\Lib\site-packages\pandas/core/array_algos/quantile.pyquantile_compatr      sQ      &"**%'UC
F|!&$
BNNM22    c                R   | j                   |j                   k(  sJ | j                  dk(  r>t        j                  |       } t        j                  |      }t	        | ||||      }|d   S | j                  dk(  sJ | j                   d   dk(  }|ret        j
                  |gt        |      z        }t        j                  |t        |             j                  t        |       t        |            }|S t        | |dz  |||      }t        j                  |      }|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   )shapendimr   
atleast_2dr   arraylenrepeatreshape_nanpercentileasarrayT)	r   r   r   r   r   
res_valuesis_emptyflatresults	            r   r   r   ,   s   F <<4::%%%{{av&}}T"'j"mT
!};;!||A!#H xxs2w./4V-55c&k3r7K M  J'
 F#Mr   c                    | |    } t        |       dk(  rt        j                  t        |      |      S t        j                  | ||      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   )method)r"   r   full
percentile)r   r   r   r   r   s        r   _nanpercentile_1dr0   o   sN    4 TE]F
6{a wws2w))==
  r   c                  | j                   j                  dv rIt        | j                  d      ||j                  d      ||      }|j	                  | j                         S |j                         r4|j                  | j                  k(  sJ t        t        |       t        |            D cg c]  \  }}t        |||||       }}}| j                   j                  dk(  r-t        j                  || j                         j                  }|S t        j                  |      j                  }|j                   | j                   k7  r[|j                         sK||j	                  | j                   d      k(  j                         r|j	                  | j                   d      }|S t        j                  | |d	|
      S c c}}w )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
    mMi8)r   r   r   r   )r   f)r   F)copyr   )axisr-   )r   kindr%   viewastypeanyr   ziplistr0   r   r&   r'   allr/   )r   r   r   r   r   r+   valms           r   r%   r%      s~   4 ||D KK]]4('
 }}V\\**xxzzzV\\)))  Vd4j9
9a c1b(-P9 	 
 <<#ZZfll;==F  ZZ'))F,
v}}V\\}FFKKM
  v||%@}} !
 	
)
s   /G )r   r   r   npt.NDArray[np.float64]r   strreturnr   )
r   
np.ndarrayr   npt.NDArray[np.bool_]r   r@   r   rA   rB   rC   )r   rC   r   rD   r   r@   r   r   r   rA   rB   zScalar | np.ndarray)r   rC   r   r@   r   rD   r   rA   )
__future__r   typingr   numpyr   pandas.core.dtypes.missingr   r   pandas._typingr   r   r	   r   r   r0   r%    r   r   <module>rK      s    "   
  3323CF330@@
@ 	 	@
 @ @F))
) 	 ) 	)
 ) )XG
G
G

  G
 G
r   