
    5j:                     @   S SK r S SKJrJrJr  SSKJr  SSKJ	r	  \" S5      r
\" S5      r\(       a  S S	KJr  S S
KJr  \S   rSSS\SS4S jr SSSS\S\S\SS4
S jjr SSSS\\   S\S\4S jjrSSS\ R.                  SS4S jrS\S\	4S jrS S jrSSS\4S jrg)!    N)ListUnionTYPE_CHECKING   )load   )TimestampOrNaTnumpypandas)Series)ExtensionDtype)znp.dtyper   dfpd.DataFramelocreturnc                 r    [        U S5      (       a  U R                  X5        U $ X R                  SS2U4'   U $ )a6  
Set the given value in the column with position 'loc'.

Library pandas changed `iloc` property and recommends using `isetitem`
from 1.5.0 version.

More details:
https://pandas.pydata.org/docs/whatsnew/v1.5.0.html

Link for isetitem method:
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.isetitem.html

Parameters
----------
df : pd.DataFrame
    Pandas dataframe to convert.
loc : int
    Index for current column, when we need update value.
value : scalar or arraylike
    New value for column.

Returns
-------
pd.DataFrame
    Modified dataframe
isetitemN)hasattrr   iloc)r   r   values      Z/root/lseg-credit/backend/venv/lib/python3.13/site-packages/lseg/data/_tools/_dataframe.pyset_df_column_valuer      s:    6 r:
C I  3I    entryutc	delete_tzc                     [        U R                  R                  5       VVs/ s H+  u  pVUR                  5       UR                  5       ;   d  M)  UPM-     nnn[	        XX#40 UD6$ s  snnf )a  Converts particular dataframe columns to datetime according the pattern.

Converts particular dataframe column or columns if one of more columns
matches the pattern, returns same dataframe otherwise.

Parameters
----------
df : pd.DataFrame
    Pandas dataframe to convert.
entry: str
    Pattern to find a column to convert.
utc : bool
    Convert to UTC if True.
delete_tz : bool
    Convert to timezone-unaware if True.

Returns
-------
pd.DataFrame
    Converted dataframe
)	enumeratecolumnsvalueslower%convert_df_columns_to_datetime_by_idx)r   r   r   r   kwargsindexnamecolumns_indexess           r   convert_df_columns_to_datetimer'   4   s_    0 1:"**:K:K0Ln0LPUP[P[P]aeakakamPmu0LOn0c_X^__ os   (A%A%r&   c           	         U H|  n [         R                  " U R                  SS2U4   4USS.UD6n[	        XU5        U(       d  MD  U R                  SS2U4   R
                  R                  S5      n[	        XU5        M~     U $ ! [         a6  n[         R                  " U R                  SS2U4   4USSS.UD6n SnANSnAff = f)aO  Convert dataframe columns to datetime by index.

Parameters
----------
df : pd.Dataframe
    Pandas dataframe to convert.
columns_indexes : List[int]
    List of indexes of columns to convert.
utc : bool
    Convert to UTC if True.
delete_tz : bool
    Convert to timezone-unaware if True.

Returns
-------
df
    Converted dataframe.
Ncoercer   errorsF)r   r+   cache)pdto_datetimer   	TypeErrorr   dttz_localize)r   r&   r   r   r#   idx
date_valuees           r   r"   r"   Q   s    * 	j3\S\U[\J 	BZ09C++77=J4   I  	j
 3iSY^ibhiJ	js   +B
C,C  Cpatternc                     [        U R                  R                  5       VVs/ s H  u  p4UR                  U5      (       d  M  UPM!     nnn[	        X4SSS.UD6$ s  snnf )a  Convert dataframe columns to datetime using regular expression pattern.

Parameters
----------
df : pd.Dataframe
    Pandas dataframe to convert.
pattern : re.compile
    Regular expression pattern to check columns.

Returns
-------
df
    Converted dataframe
T)r   r   )r   r   r    searchr"   )r   r5   r#   r$   r%   column_indexess         r   !convert_df_columns_to_datetime_rer9   y   sV     099J9J/Kd/Kw~~^bOce/KNd0hY]haghh es   AAsc                 R    [         R                  U SSS9nUR                  S 5      nU$ )NTr)   r*   )r-   r.   r1   )r:   	timestamp	localizeds      r   convert_str_to_timestampr>      s,    qd8<I%%d+Ir   c                 b   U R                   (       a  U $ SSKJnJn  U R	                  [
        R                  5      R                  SS9n [        U R                  R                  5       VVs/ s H  u  p4UPM	     nnnU GH	  nU R                  SS2U4   nU" UR                  5      (       a  M0  UR                  5       nU" U5      (       a  UR                  5       n[        U5      n[        U5      R!                  5       S:X  ag  UR                  5       nUR#                  S[
        R                  5      R                  SS9n[        U5      n[        U5      R!                  5       S:w  a  UnUR%                  U5      n	['        XU	5        GM     U R	                  [(        R*                  SS	9  U $ s  snnf )
a!  
This function is an extension to the standard pandas.DataFrame.convert_dtypes.

Correct return dataframe if we have this columns in dataframe:

GOOG.O                    Currency
Date
2020-12-31 00:00:00+00:00     <NA>
2020-12-31 00:00:00+00:00     <NA>

Correct convert None, np.nan, pd.NA, pd.NaN to pd.NA, see official docs:
https://pandas.pydata.org/pandas-docs/stable/user_guide/missing_data.html#missing-data-na

Correct convert big int from Linux, Windows platform.


Parameters
----------
df: pd.DataFrame

Returns
-------
pd.DataFrame
r   )is_object_dtypeis_datetime64_any_dtypeF)copyNobject T)inplace)emptypandas.core.dtypes.commonr@   rA   fillnanpnaninfer_objectsr   r   r    r   dtyperB   _get_inferred_dtypestrr!   replaceastyper   r-   NA)
r   r@   rA   r$   _r&   seriesinferred_dtype
new_seriesresults
             r   convert_dtypesrW      sY   2 
xx	R	266		(	(e	(	4B-6rzz7H7H-IJ-Iu-IOJ E""6<<00%%'6""[[]F,V4~$$&(2J#++B7EE5EQJ0<N>"((*h6#~.Bv.' !* IIbeeTI"I1 Ks   *F+rS   r   c                     SSK Jn  SSKJn  U" U R                  5      nS[        U5      R                  5       ;   a2  U R                  S5      S-  S:H  R                  5       (       a  U" S5      $ U$ )Nr   )rW   )pandas_dtypefloatir   Int64)	pandas.core.dtypes.castrW   rG   rY   r    rN   r!   rH   all)rS   pandas_covert_dtypesrY   rT   s       r   rM   rM      s^    N6)&--8N#n%++--6==3G!3Kq3P2U2U2W2WG$$r   )NF)r   r   r   r   )retypingr   r   r   _lazy_loaderr   	lazy_load_typesr	   rI   r-   pandas.core.seriesr   pandas.core.dtypes.baser   DtypeObjintr   rN   boolr'   r"   compiler9   r>   rW   rM    r   r   <module>rk      s   	 - - + #wx)6-. N      H IN``"`)-`AE``< Y^%%)-c%9=%QU%Pi. i2:: i\j i(  7t X r   