
    o[wejE                       d dl mZ d dlmZ d dlZd dlmZ d dlm	Z	 d dl
mZmZmZmZ d dlmZmZmZmZmZ d dlmZmZ d d	lmZmZmZ d d
lmZ d dlmZ d dl m!Z! d dl"m#Z#m$Z$ d dl%m&Z&m'Z' d dl(m)Z) erd dl*m+Z+ d dl,m-Z-m.Z.m/Z/ d dl0m1Z1 i ddddddddddddddddddd dddd!d!d"d"d#d#d$d$d%d%d&d&d'ddd(dddddd)	Z2g d*Z3e3D ]Z4eD ]Z5e4 d+e5 Z6e2e4         e2e6<   d,D ]Z4eD ]Z5e4 d+e5 Z7e7e2e7<   eD ]Z8d-e8 e2d-e8 <   dNd2Z9dOd5Z: G d6 d7          Z; G d8 d9e;          Z<dPd=Z=dQdAZ>dRdBZ?dRdCZ@dSdDZAdTdGZBdUdIZCdUdJZDdUdKZEdUdLZFg dMZGdS )V    )annotations)TYPE_CHECKINGN)lib)unique_deltas)	Timestampget_unit_from_dtypeperiods_per_daytz_convert_from_utc)DAYSMONTH_ALIASESMONTH_NUMBERSMONTHSint_to_weekday)build_field_sarraymonth_position_check)
DateOffsetDay	to_offset)get_rule_month)cache_readonly)is_numeric_dtype)DatetimeTZDtypePeriodDtype)ABCIndex	ABCSeries)unique)npt)DatetimeIndexSeriesTimedeltaIndex)DatetimeLikeArrayMixinWEEKDAYDEOMMBMBQSQQSBQBAAASBASMSBTSLUNHW)	r6   r(   r,   r7   r%   YBYYSBYS)	r)   r*   r'   r:   r-   r9   r+   r;   r.   -)r,   r(   W-
offset_strstrreturn
str | Nonec                8    t                               | d          S )z4
    Alias to closest period strings BQ->Q etc.
    N)_offset_to_period_mapget)r>   s    :lib/python3.11/site-packages/pandas/tseries/frequencies.pyget_period_aliasrF   g   s     !$$Z666    index@DatetimeIndex | TimedeltaIndex | Series | DatetimeLikeArrayMixinc                   ddl m} t          | t                    rd| j        }t          j        |j        d          sAt          |j        t                    s'|j        t          k    st          d| j                   |} t          | d          snt          | j        t                    rt          d          t          j        | j        d          r#t          |           }|                                S t          | j                  rt          d| j                   t          | |          s ||           } t!          |           }|                                S )	aW  
    Infer the most likely frequency given the input index.

    Parameters
    ----------
    index : DatetimeIndex, TimedeltaIndex, Series or array-like
      If passed a Series will use the values of the series (NOT THE INDEX).

    Returns
    -------
    str or None
        None if no discernible frequency.

    Raises
    ------
    TypeError
        If the index is not datetime-like.
    ValueError
        If there are fewer than three values.

    Examples
    --------
    >>> idx = pd.date_range(start='2020/12/01', end='2020/12/30', periods=30)
    >>> pd.infer_freq(idx)
    'D'
    r   )r   mMz>cannot infer freq from a non-convertible dtype on a Series of dtypezJPeriodIndex given. Check the `freq` attribute instead of using infer_freq.mz8cannot infer freq from a non-convertible index of dtype )pandas.core.apir   
isinstancer   _valuesr   is_np_dtyperL   r   object	TypeErrorhasattrr   _TimedeltaFrequencyInfererget_freqr   _FrequencyInferer)rH   r   valuesinferers       rE   
infer_freqrZ   r   s   : .-----%## OFL$//	&,88	 |v%%0"'+0 0    5'"" 
	EK	-	- 
+
 
 	
 
c	*	* 
,U33!!!	%+	&	& 
Tu{TT
 
 	
 e]++ %e$$&&GrG   c                  R   e Zd ZdZddZed d            Zed d            Zed!d	            Zed!d
            Z	d"dZ
ed#d            Zed#d            Zed$d            Zed%d            Zd"dZed d            Zed d            Zd"dZd"dZd"dZd"dZd"dZd!dZd"dZdS )&rW   z8
    Not sure if I can avoid the state machine here
    r@   Nonec                   || _         |j        | _        t          |t                    r$t          |j        j        j                  | _	        nt          |j        j                  | _	        t          |d          r-|j        &t          | j        |j        | j	                  | _        t          |          dk     rt          d          | j         j        p| j         j        | _        d S )Ntzreso   z(Need at least 3 dates to infer frequency)rH   asi8i8valuesrO   r   r   _data_ndarrayrL   _cresorT   r^   r
   len
ValueError_is_monotonic_increasing_is_monotonic_decreasingis_monotonic)selfrH   s     rE   __init__z_FrequencyInferer.__init__   s    

 eX&& 	D .$* DKK
 .en.BCCDK 5$ 	x# 3M58$+! ! ! u::>>GHHH J/V4:3V 	rG   npt.NDArray[np.int64]c                *    t          | j                  S N)r   rc   rl   s    rE   deltasz_FrequencyInferer.deltas   s    T]+++rG   c                4    t          | j        j                  S rp   )r   rH   rb   rq   s    rE   deltas_asi8z_FrequencyInferer.deltas_asi8   s     TZ_---rG   boolc                2    t          | j                  dk    S N   )rg   rr   rq   s    rE   	is_uniquez_FrequencyInferer.is_unique   s    4;1$$rG   c                2    t          | j                  dk    S rw   )rg   rt   rq   s    rE   is_unique_asi8z _FrequencyInferer.is_unique_asi8   s    4#$$))rG   rA   c                   | j         r| j        j        sdS | j        d         }t	          | j                  }|r$t          ||          r|                                 S | j        ddgddgg dfv rdS | j	        sdS | j
        d         }|dz  }|d	z  }|d	z  }t          ||          rt          d
||z            S t          ||          rt          d||z            S t          ||          rt          d||z            S t          ||dz            rt          d||dz  z            S t          ||dz            rt          d||dz  z            S t          d|          S )z
        Find the appropriate frequency string to describe the inferred
        frequency of self.i8values

        Returns
        -------
        str or None
        Nr   rx      A   )rx   r}   r~   BH   <   r6   r1   r2   i  r3   i@B r4   r5   )rk   rH   
_is_uniquerr   r	   rf   _is_multiple_infer_daily_rulehour_deltasr{   rt   _maybe_add_count)rl   deltappdpphppmppss         rE   rV   z_FrequencyInferer.get_freq   s      	
(= 	4Adk** 	,\%-- 	,))+++ B!R+++>>>4
 " 	4 #RiRiRis## 	0#C555%%% 	0#C555%%% 	0#C555%#+// 	0#C#+)>???%#"244 	0#C#2B)CDDD $C///rG   	list[int]c                R    t          | j                  fd| j        D             S )Nc                    g | ]}|z  S  r   ).0xr   s     rE   
<listcomp>z0_FrequencyInferer.day_deltas.<locals>.<listcomp>#      ---AC---rG   r	   rf   rr   )rl   r   s    @rE   
day_deltasz_FrequencyInferer.day_deltas   s.    dk**--------rG   c                X    t          | j                  dz  fd| j        D             S )Nr   c                    g | ]}|z  S r   r   )r   r   r   s     rE   r   z1_FrequencyInferer.hour_deltas.<locals>.<listcomp>(  r   rG   r   )rl   r   s    @rE   r   z_FrequencyInferer.hour_deltas%  s3    dk**b0--------rG   
np.ndarrayc                8    t          | j        | j                  S )Nr_   )r   rc   rf   rq   s    rE   fieldsz_FrequencyInferer.fields*  s    !$-dkBBBBrG   r   c                6    t          | j        d                   S Nr   )r   rc   rq   s    rE   	rep_stampz_FrequencyInferer.rep_stamp.  s    q)***rG   c                @    t          | j        | j        j                  S rp   )r   r   rH   	dayofweekrq   s    rE   r   z&_FrequencyInferer.month_position_check2  s    #DK1EFFFrG   c                    | j         d         dz  | j         d         z   }t          |                    d                    S )Nr8      r%   i8)r   r   astype)rl   nmonthss     rE   mdiffsz_FrequencyInferer.mdiffs5  s9    +c"R'$+c*::W^^D11222rG   c                \    t          | j        d                             d                    S )Nr8   r   )r   r   r   rq   s    rE   ydiffsz_FrequencyInferer.ydiffs:  s%    T[-44T::;;;rG   c                b   |                                  }|r;| j        d         }t          | j        j                 }| d| }t          ||          S |                                 }|rM| j        d         dz  }dddd}t          || j        j        dz                    }| d| }t          ||          S |                                 }|rt          || j        d                   S | j	        r| 
                                S |                                 rdS |                                 }	|	r|	S d S )	Nr   r<   ra   r      
   )r      rx   r0   )_get_annual_ruler   r   r   monthr   _get_quarterly_ruler   _get_monthly_rulery   _get_daily_rule_is_business_daily_get_wom_rule)
rl   annual_rulenyearsr   aliasquarterly_rule	nquartersmod_dictmonthly_rulewom_rules
             rE   r   z#_FrequencyInferer._infer_daily_rule>  sT   ++-- 	3[^F!$."67E",,U,,E#E62221133 	6A*I",,H!(4>+?!+C"DEE%////E#E9555--// 	B#L$+a.AAA> 	*'')))""$$ 	3%%'' 	OtrG   c                    t          | j                  }| j        d         |z  }|dz  dk    r<t          | j                                                 }d| }t          ||dz            S t          d|          S )Nr      r=   r#   )r	   rf   rr   r   r   weekdayr   )rl   r   dayswdr   s        rE   r   z!_FrequencyInferer._get_daily_rule^  su    dk**{1~#!8q== 6 6 8 89BIIE#E4!8444#C...rG   c                    t          | j                  dk    rd S t          t          | j        d                             dk    rd S |                                 }|d S ddddd                    |          S )Nrx   r%   r-   r.   r,   r+   csbscebe)rg   r   r   r   r   rD   rl   	pos_checks     rE   r   z"_FrequencyInferer._get_annual_rulei  s    t{a4vdk#&''((1,,4--//	4e3dCCGG	RRRrG   c                    t          | j                  dk    rd S | j        d         dz  dk    sd S |                                 }|d S ddddd                    |          S )	Nrx   r   ra   r)   r'   r(   r*   r   rg   r   r   rD   r   s     rE   r   z%_FrequencyInferer._get_quarterly_rulew  ss    t{a4{1~!Q&&4--//	4e3dCCGG	RRRrG   c                    t          | j                  dk    rd S |                                 }|d S ddddd                    |          S )Nrx   r/   BMSr%   r&   r   r   r   s     rE   r   z#_FrequencyInferer._get_monthly_rule  sX    t{a4--//	4e3dCCGG	RRRrG   c                   | j         ddgk    rdS | j        d                                         }t          j        | j                  }t          | j                  }t          j        ||          }t          j	        |t          j
        |          z   d          }t          t          j        |dk    |dk    z  |dk    |dk    z  |dk    z  z                      S )Nrx   ra   Fr   r      )r   rH   r   npdiffrc   r	   rf   floor_dividemodcumsumru   all)rl   first_weekdayshiftsr   weekdayss        rE   r   z$_FrequencyInferer._is_business_daily  s    ?q!f$$5 
1--//''dk**--6-")F*;*;;Q??Fa-FaK0qLX]3v{CE 
 
 	
rG   c                N   t          | j        j                  }t          |          dk    rd S t          | j        j        dz
  dz            }||dk              }t          |          dk    st          |          dk    rd S |d         dz   }t
          |d                  }d| | S )Nrx   r   r   r   zWOM-)r   rH   r   rg   dayr   )rl   r   week_of_monthsweekr   s        rE   r   z_FrequencyInferer._get_wom_rule  s    $*,--x==14!!3 9::'(:;~!##s>':':Q'>'>4 a 1$HQK( d B   rG   N)r@   r\   )r@   rn   r@   ru   )r@   rA   )r@   r   )r@   r   )r@   r   )__name__
__module____qualname____doc__rm   r   rr   rt   ry   r{   rV   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rG   rE   rW   rW      s<        
 
 
 
> , , , ^, . . . ^.
 % % % ^% * * * ^*00 00 00 00d . . . ^. . . . ^. C C C ^C + + + ^+G G G G 3 3 3 ^3 < < < ^<   @	/ 	/ 	/ 	/S S S SS S S SS S S S
 
 
 
&! ! ! ! ! !rG   rW   c                      e Zd Zd ZdS )rU   c                <    | j         r|                                 S d S rp   )ry   r   rq   s    rE   r   z,_TimedeltaFrequencyInferer._infer_daily_rule  s(    > 	*'')))	* 	*rG   N)r   r   r   r   r   rG   rE   rU   rU     s#        * * * * *rG   rU   multintru   c                    | |z  dk    S r   r   )usr   s     rE   r   r     s    9>rG   basecountfloatc                f    |dk    r*|t          |          k    sJ t          |          }| |  S | S rw   )r   )r   r   s     rE   r   r     sC    zzE

""""E

rG   c                    || dS t          |           } t          |          }t          |          r=t          |           r*t          t	          |           t	          |                    S | dv S t          |          r| dv S t          |          r| dv S t          |          r| |ddddd	d
dddh
v S |dk    r| dv S |dk    r| dv S |dk    r| dv S |dk    r| dv S |d	k    r| dv S |d
k    r| dv S |dk    r| dv S |dk    r| dv S |dk    r| dv S dS )a  
    Returns True if downsampling is possible between source and target
    frequencies

    Parameters
    ----------
    source : str or DateOffset
        Frequency converting from
    target : str or DateOffset
        Frequency converting to

    Returns
    -------
    bool
    NF>
   r0   Cr#   r6   r3   r%   r5   r2   r1   r4   >	   r0   r   r#   r6   r3   r5   r2   r1   r4   r#   r   r0   r6   r1   r2   r3   r4   r5   >   r0   r6   r3   r5   r2   r1   r4   >   r   r6   r3   r5   r2   r1   r4   >   r#   r6   r3   r5   r2   r1   r4   >   r6   r3   r5   r2   r1   r4   >   r3   r5   r2   r1   r4   >   r3   r5   r2   r4   >   r3   r5   r4      r5   r4      r5   )_maybe_coerce_freq
_is_annual_is_quarterly_quarter_months_conformr   _is_monthly
_is_weekly)sourcetargets     rE   is_subperiodr     s   " ~u''F''F&    	*v&&v(>(>   KKK	v		 KKK	V		 FFF	F		 &#sCc3S#NNN	3<<<	3<<<	3<<<	3777	3222	3---	3((	3##	3urG   c                   || dS t          |           } t          |          }t          |           rpt          |          r t          |           t          |          k    S t          |          r.t          |           }t          |          }t	          ||          S |dv S t          |           r|dv S t          |           r|dv S t          |           r|| ddddd	d
dddh
v S | dk    r|dv S | dk    r|dv S | dk    r|dv S | dk    r|dv S | d	k    r|dv S | d
k    r|dv S | dk    r|dv S | dk    r|dv S | dk    r|dv S dS )a  
    Returns True if upsampling is possible between source and target
    frequencies

    Parameters
    ----------
    source : str or DateOffset
        Frequency converting from
    target : str or DateOffset
        Frequency converting to

    Returns
    -------
    bool
    NF>
   r0   r   r#   r6   r3   r%   r5   r2   r1   r4   >	   r0   r   r#   r6   r3   r5   r2   r1   r4   r#   r   r0   r6   r1   r2   r3   r4   r5   >   r6   r3   r5   r2   r1   r4   >   r3   r5   r2   r1   r4   >   r3   r5   r2   r4   >   r3   r5   r4   r   r   )r   r   r   r   r   r   r   )r   r   smonthtmonths       rE   is_superperiodr     s     ~u''F''F& "f 	D!&))^F-C-CCC   	;#F++F#F++F*66:::KKK	v		 KKK	V		 FFF	F		 &#sCc3S#NNN	3FFF	3FFF	3FFF	3777	3222	3---	3((	3##	3urG   c                j    | J t          | t                    r| j        } |                                 S )zwe might need to coerce a code to a rule_code
    and uppercase it

    Parameters
    ----------
    source : str or DateOffset
        Frequency converting from

    Returns
    -------
    str
    )rO   r   	rule_codeupper)codes    rE   r   r   =  s7     $
## ~::<<rG   r   r   c                N    t           |          }t           |         }|dz  |dz  k    S )Nra   )r   )r   r   snumtnums       rE   r   r   P  s)     D D!8taxrG   rulec                `    |                                  } | dk    p|                     d          S )Nr,   zA-r   
startswithr  s    rE   r   r   V  *    ::<<D3;/$//$///rG   c                `    |                                  } | dk    p|                     d          S )Nr(   )zQ-r*   r  r  s    rE   r   r   [  s*    ::<<D3;7$//,777rG   c                2    |                                  } | dv S )N)r%   r&   )r   r  s    rE   r   r   `  s    ::<<D;rG   c                `    |                                  } | dk    p|                     d          S )Nr7   r=   r  r  s    rE   r   r   e  r  rG   )r   rF   rZ   r   r   r   )r>   r?   r@   rA   )rH   rI   r@   rA   )r   r   r@   ru   )r   r?   r   r   r@   r?   r   )r@   r?   )r   r?   r   r?   r@   ru   )r  r?   r@   ru   )H
__future__r   typingr   numpyr   pandas._libsr   pandas._libs.algosr   pandas._libs.tslibsr   r   r	   r
   pandas._libs.tslibs.ccalendarr   r   r   r   r   pandas._libs.tslibs.fieldsr   r   pandas._libs.tslibs.offsetsr   r   r   pandas._libs.tslibs.parsingr   pandas.util._decoratorsr   pandas.core.dtypes.commonr   pandas.core.dtypes.dtypesr   r   pandas.core.dtypes.genericr   r   pandas.core.algorithmsr   pandas._typingr   pandasr   r   r    pandas.core.arrays.datetimeliker!   rC   _need_suffix_prefix_mkey_alias_drF   rZ   rW   rU   r   r   r   r   r   r   r   r   r   r   __all__r   rG   rE   <module>r$     sd   " " " " " "                       , , , , , ,                                        
 7 6 6 6 6 6 2 2 2 2 2 2 6 6 6 6 6 6              
 * ) ) ) ) ) G""""""         
 GFFFFFs	3 	# 
3	
 	# 	# 	# 	# 
3 	#       !" #$ 
					

5   : IHH D DG D D2%:7%Cc""D  / /G / /""b""(.f%%/  1 1B'0Byy)r))$$7 7 7 7C C C CLy! y! y! y! y! y! y! y!x* * * * *!2 * * *      5 5 5 5p7 7 7 7t   &       0 0 0 0
8 8 8 8
   
0 0 0 0
  rG   