
    Yc                     R    d dl Zd dl mZmZ g dZddZddZd Zd Zdd	Z	ddZ
dS )    N)	partitionargpartition)rankdatananrankdatar   r   pushc                 .    t          t          | |          S )z5Slow rankdata function used for unaccelerated dtypes.)_rankscipy_rankdataaaxiss     >lib/python3.11/site-packages/bottleneck/slow/nonreduce_axis.pyr   r      s    D)))    c                 .    t          t          | |          S )z8Slow nanrankdata function used for unaccelerated dtypes.)r	   _nanrankdata_1dr   s     r   r   r      s    !T***r   c                 P   t          j        |d          }||                                }d}|j        dk    r"|                    t           j        d          }nJt          j        | ||          }|j        t           j        k    r|                    t           j                  }|S )NF)copyr   T)nparrayravelsizeastypefloat64apply_along_axisdtype)func1dr   r   ys       r   r	   r	      s    
A GGIIv{ %HHRZdH++a007bj  	%$$AHr   c                     t          j        | j        t           j                  }|                    t           j                   t          j        |            }t          | |                   ||<   |S )Nr   )r   emptyshaper   fillnanisnanr
   )r   r   idxs      r   r   r      sT    

+++AFF26NNN8A;;,CAcF##AcFHr   c                    |t           j        }t          j        |           }|j        }|dk    s	||dz
  k    rt          j        |||          }|dk    r|dddf         }n|dk    r|S t          j        |           }t          j        |j        dd                   }t          j        |j        dd                   }|                    t           j	                   |                    t           j	                   t          j
        d          5  t          |j        d                   D ]N}||z
  |k    }	t           j	        ||	<   |d|f          }	||	         ||	|f<   |d|f         }	|||	<   ||	|f         ||	<   O	 ddd           n# 1 swxY w Y   |dk    s	||dz
  k    rt          j        ||dz
  |          }|dk    r|d         S |S )z(Slow push used for unaccelerated dtypes.Nr&      r   ignore)invalid.)r   infr   ndimrollaxisr$   r    r!   r"   r#   errstaterange)
r   nr   r   r,   fidxrecentcountir%   s
             r   r   r   '   s'    F
A6Drz 'TTAX% 'K4&&qy dAAAgJ	 HQKK<DXagcrcl##FHQWSbS\""E
KK	JJrv	X	&	&	& $ $qwr{## 	$ 	$Au9/C&F3KQ<-CsAc1fIsAv,CE#JCF)F3KK	$$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ rz +TTAX% +K4!8T**qy tHs   A*FFFaveragec                    |dvr"t          d                    |                    t          j        t          j        |                     } |dk    rdnd}t          j        | |          }t          j        |j        t          j                  }t          j	        |j        t          j                  ||<   |dk    r|dz   S | |         } t          j
        d	| dd
         | d
d         k    f         }|                                |         }|dk    r|S t          j
        t          j        |          d         t          |          f         }|dk    r||         S |dk    r||dz
           dz   S d||         ||dz
           z   dz   z  S )a  
    rankdata(a, method='average')
    Assign ranks to data, dealing with ties appropriately.
    Ranks begin at 1.  The `method` argument controls how ranks are assigned
    to equal values.  See [1]_ for further discussion of ranking methods.
    Parameters
    ----------
    a : array_like
        The array of values to be ranked.  The array is first flattened.
    method : str, optional
        The method used to assign ranks to tied elements.
        The options are 'average', 'min', 'max', 'dense' and 'ordinal'.
        'average':
            The average of the ranks that would have been assigned to
            all the tied values is assigned to each value.
        'min':
            The minimum of the ranks that would have been assigned to all
            the tied values is assigned to each value.  (This is also
            referred to as "competition" ranking.)
        'max':
            The maximum of the ranks that would have been assigned to all
            the tied values is assigned to each value.
        'dense':
            Like 'min', but the rank of the next highest element is assigned
            the rank immediately after those assigned to the tied elements.
        'ordinal':
            All values are given a distinct rank, corresponding to the order
            that the values occur in `a`.
        The default is 'average'.
    Returns
    -------
    ranks : ndarray
         An array of length equal to the size of `a`, containing rank
         scores.
    References
    ----------
    .. [1] "Ranking", http://en.wikipedia.org/wiki/Ranking
    Examples
    --------
    >>> from scipy.stats import rankdata
    >>> rankdata([0, 2, 3, 2])
    array([ 1. ,  2.5,  4. ,  2.5])
    >>> rankdata([0, 2, 3, 2], method='min')
    array([ 1,  2,  4,  2])
    >>> rankdata([0, 2, 3, 2], method='max')
    array([ 1,  3,  4,  3])
    >>> rankdata([0, 2, 3, 2], method='dense')
    array([ 1,  2,  3,  2])
    >>> rankdata([0, 2, 3, 2], method='ordinal')
    array([ 1,  2,  4,  3])
    )r5   minmaxdenseordinalzunknown method "{0}"r:   	mergesort	quicksort)kindr   r(   TNr&   r9   r   r8   r7   g      ?)
ValueErrorformatr   r   asarrayargsortr    r   intparanger_cumsumnonzerolen)r   methodalgosorterinvobsr9   r3   s           r   r
   r
   S   s   h BB @/66v>>???
AA I->;;;DZ%%%F
(6;bg
.
.
.C)FKrw777CK Qw	&	A
%aeq"vo%
&CJJLLE  E"*S//!$c#hh./E U| $UQY!## %,uqy!11A566r   )N)Nr&   )r5   )numpyr   r   r   __all__r   r   r	   r   r   r
    r   r   <module>rP      s        ) ) ) ) ) ) ) )
J
J
J* * * *
+ + + +
       XR7 R7 R7 R7 R7 R7r   