
    i"                    &   d Z ddlmZ ddlmZmZ ddlmZmZm	Z	m
Z
mZ ddlZddlmZ ddlmZmZmZmZmZmZ ddlmZ dd	lmZ erdd
lmZmZmZ ddl m!Z!m"Z"m#Z# nddlm$Z$ e$Ze$Z!e$Z# G d dee         Z% G d de%e#         Z& G d de%e!         Z'y)z+
Implementation of nlargest and nsmallest.
    )annotations)HashableSequence)TYPE_CHECKINGGenericLiteralcastfinalN)algos)is_bool_dtypeis_complex_dtypeis_integer_dtypeis_list_likeis_numeric_dtypeneeds_i8_conversion)BaseMaskedDtype)default_index)DtypeObj
IndexLabelNDFrameT)	DataFrameIndexSeries)Tc                  l    e Zd Z	 	 	 	 	 	 	 	 ddZddZed	d       Zed	d       Zeed
d              Z	y)SelectNc                `    || _         || _        || _        | j                  dvrt        d      y )N)firstlastallz,keep must be either "first", "last" or "all")objnkeep
ValueError)selfr!   r"   r#   s       X/app/cer_product_mecsu/.venv/lib/python3.12/site-packages/pandas/core/methods/selectn.py__init__zSelectN.__init__:   s7     	9944KLL 5    c                    t         N)NotImplementedError)r%   methods     r&   computezSelectN.computeD   s    !!r(   c                $    | j                  d      S )Nnlargestr-   r%   s    r&   r/   zSelectN.nlargestG   s    ||J''r(   c                $    | j                  d      S )N	nsmallestr0   r1   s    r&   r3   zSelectN.nsmallestK   s    ||K((r(   c                F    t        |       rt        |        S t        |       S )zg
        Helper function to determine if dtype is valid for
        nsmallest/nlargest methods
        )r   r   r   )dtypes    r&   is_valid_dtype_n_methodzSelectN.is_valid_dtype_n_methodO   s%     E"'..."5))r(   N)r!   r   r"   intr#   Literal['first', 'last', 'all']returnNone)r,   strr9   r   )r9   r   )r5   r   r9   bool)
__name__
__module____qualname__r'   r-   r
   r/   r3   staticmethodr6    r(   r&   r   r   9   su    MM #M+JM	M" ( ( ) ) *  *r(   r   c                      e Zd ZdZddZy)SelectNSeriesz
    Implement n largest/smallest for Series

    Parameters
    ----------
    obj : Series
    n : int
    keep : {'first', 'last'}, default 'first'

    Returns
    -------
    nordered : Series
    c                   ddl m} | j                  }| j                  j                  }| j                  |      st        d| d|       |dk  r| j                  g    S | j                  j                  }| j                  j                  d      }|t        |      k\  rJ|dk(  } |j                  |d	      j                  |      }|j                  |j                        |_        |S  |j                         }	 |j                  |	j                        }
|	j                  }|	j                  }t!        |j                        r|j#                  d
      }n<t%        |j                  t&              r|j(                  }nt+        j,                  |      }|j                  j.                  dk(  r|j#                  t*        j0                        }|dk(  r%| }t3        |      r|dz  }nt5        |      rd| z
  }| j6                  dk(  r|d d d   }|}t        |      }t9        ||      }t        |      dkD  r*t;        j<                  |j?                  d      |dz
        }nt*        j@                  }t+        jB                  ||k        \  }|||   jE                  d         }| j6                  dk7  r|d | }|}nOt        |      |cxk  rt        |
      t        |      z   k  rn nt        |
      t        |      z   }nt        |      }| j6                  dk(  r|dz
  |z
  } ||	jF                  |   |
g      jF                  d | }|j                  |j                        |_        |S )Nr   )concatzCannot use method 'z' with dtype Tdropr3   stable	ascendingkindi8br/      r   C)order)rK   r    )$pandas.core.reshape.concatrE   r"   r!   r5   r6   	TypeErrorindexreset_indexlensort_valuesheadtakedropnarG   _valuesr   view
isinstancer   _datanpasarrayrK   uint8r   r   r#   minlibalgoskth_smallestcopynannonzeroargsortiloc)r%   r,   rE   r"   r5   original_indexr   rJ   resultdropped	nan_index	new_dtypearrnbasenarrkth_valnsindsfindexs                      r&   r-   zSelectNSeries.computej   s   5FF++E21&ugNOO688B< !%,,$,7 M""+-I.]..RWWF *..v||<FLM '-&&(&M&&w}}5	MM	 oosyy)((4.C		?3))C**S/C99>>S ((288$CZ$C	*qy)C4j99dd)C3x4L
 s8a<++CHH3H,?QGGffG

3'>*#b'//x/01998DFY<#i.3t9"<<^c$i/FYF99!8d?Dd+Y78==gvF%**6<<8r(   N)r,   r;   r9   r   )r=   r>   r?   __doc__r-   rA   r(   r&   rC   rC   [   s    Tr(   rC   c                  @     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 d fdZddZ xZS )SelectNFramez
    Implement n largest/smallest for DataFrame

    Parameters
    ----------
    obj : DataFrame
    n : int
    keep : {'first', 'last'}, default 'first'
    columns : list or str

    Returns
    -------
    nordered : DataFrame
    c                    t         |   |||       t        |      rt        |t              r|g}t        t        t           |      }t        |      }|| _	        y r*   )
superr'   r   r]   tupler	   r   r   listcolumns)r%   r!   r"   r#   r}   	__class__s        r&   r'   zSelectNFrame.__init__   sO     	a&G$
7E(BiGx)73w-r(   c           
     ^   | j                   }| j                  }| j                  }|D ]7  }||   j                  }| j	                  |      r$t        d|d| dd       dfd}|j                  }|j                  d      x}	}|}
t        d      }t        |      D ]  \  }}|	|   }t        |      d	z
  |k(  } t        |      |
|r| j                  nd
      }|st        |      |
k  r |||j                        } n\|||j                  d      k(  }||   }||    } |||j                        }|	j                  |j                     }	|t        |      z
  }
 |j                  |      }|j                  |      |_        t        |      d	k(  r|S dk(  }|j                  ||d      S )NzColumn z has dtype z, cannot use method z with this dtypec                R    dk(  r| j                  |      S |j                  |       S )z{
            Helper function to concat `current_indexer` and `other_indexer`
            depending on `method`
            r3   )append)current_indexerother_indexerr,   s     r&   get_indexerz)SelectNFrame.compute.<locals>.get_indexer   s/    
 $&--m<<$++O<<r(   TrF   r   rN   r    )r#   rO   r3   rH   rI   )r   r   r   r   r9   r   )r"   r!   r}   r5   r6   rS   rT   rU   r   	enumeraterV   getattrr#   locrY   rW   )r%   r,   r"   framer}   columnr5   r   rj   	cur_framecur_nindexeriseriesis_last_columnvaluesborder_valueunsafe_valuessafe_valuesrJ   s    `                  r&   r-   zSelectNFrame.compute   s   FF,, 	F&M''E//6fZ{5' :))/
2BD 		= !--4-88	E&q)"7+ "	%IAv v&F \A-2N,WVV,DIIUF V!5%gv||<
 "VFLL,<%==L #<0M !,/K!';+<+<=G "m&9&9:IG$EE"	%H 

7# %))'2 w<1Lk)	  IH MMr(   )
r!   r   r"   r7   r#   r8   r}   r   r9   r:   )r,   r;   r9   r   )r=   r>   r?   rv   r'   r-   __classcell__)r~   s   @r&   rx   rx      sD      .	
  
LNr(   rx   )(rv   
__future__r   collections.abcr   r   typingr   r   r   r	   r
   numpyr_   pandas._libsr   rc   pandas.core.dtypes.commonr   r   r   r   r   r   pandas.core.dtypes.dtypesr   pandas.core.indexes.apir   pandas._typingr   r   r   pandasr   r   r   r   r   rC   rx   rA   r(   r&   <module>r      s    #   *  6 1   !HIF*gh *DcGFO cLkN79% kNr(   