Ë
    *�£j  ã                  óÐ   — d Z ddlmZ ddl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 erddlmZmZ 	 d	 	 	 	 	 	 	 	 	 	 	 dd	„Z	 d	 	 	 	 	 	 	 	 	 dd
„Z	 	 	 	 	 	 	 	 	 	 dd„Zy)zj
Helper functions to generate range-like data for DatetimeArray
(and possibly TimedeltaArray/PeriodArray)
é    )Úannotations)ÚTYPE_CHECKINGN)Úi8max)Ú
BaseOffsetÚDayÚOutOfBoundsDatetimeÚ	TimedeltaÚ	TimestampÚiNaT)Úrange_to_ndarray)ÚTimeUnitÚnptc                ó8  — | �| j                   nd}|�|j                   nd}t        |t        «      rt        |j                  ¬«      }n|j
                   t        |«      }	 |j                  |d¬«      }t        |j                   «      }	|€|�|�|}
|
||
z
  |	z  |	z  z   |	dz  z   d	z   }n:|�|�|}
t        |
||	d
¬«      }n$|�|�||	z   }t        |||	d¬«      }
nt        d«      ‚t        t        |
||	«      «      S # t        $ r}t        d|› d|› d�«      |‚d}~ww xY w)a   
    Generate a range of dates or timestamps with the spans between dates
    described by the given `freq` DateOffset.

    Parameters
    ----------
    start : Timedelta, Timestamp or None
        First point of produced date range.
    end : Timedelta, Timestamp or None
        Last point of produced date range.
    periods : int or None
        Number of periods in produced date range.
    freq : Tick
        Describes space between dates in produced date range.
    unit : {'s', 'ms', 'us', 'ns'}, default "ns"
        The resolution the output is meant to represent.

    Returns
    -------
    ndarray[np.int64]
        Representing the given resolution.
    N)ÚdaysF)Úround_okzfreq=z is incompatible with unit=z,. Use a lower freq or a higher unit instead.é   é   Ústart)ÚsideÚendzEat least 'start' or 'end' should be specified if a 'period' is given.)Ú_valueÚ
isinstancer   r	   ÚnÚnanosÚas_unitÚ
ValueErrorÚintÚ_generate_range_overflow_safer   Úrange)r   r   ÚperiodsÚfreqÚunitÚistartÚiendÚtdÚerrÚstrideÚbÚes               ú<C:\FundamentalWorkbench\vendor\pandas\core\arrays\_ranges.pyÚgenerate_regular_ranger+      sU  € ð: #Ð.ˆU�\Š\°D€FØ˜ˆ3�:Š:¨d€DÜ�$œÔô ˜DŸF™FÔ#‰à�
Š
Ü�t‹_ˆðØ�Z‰Z˜ uˆZÓ-ˆô �—‘‹^€Fà€˜6Ð-°$Ð2BØˆð �˜‘˜fÑ$ vÑ-Ñ-°¸!±Ñ;¸aÑ?‰Ø	Ð	 Ð 3ØˆÜ)¨!¨W°fÀ7ÔK‰Ø	Ð	˜gÐ1Ø�6‰MˆÜ)¨!¨W°fÀ5ÔI‰äØSó
ð 	
ô œE ! Q¨Ó/Ó0Ð0øô/ ò ÜØ�D�6Ð4°T°Fð ;9ð 9ó
ð ð	ûðús   Á C8 Ã8	DÄDÄDc                óî  — |dv sJ ‚t        j                  t        «      }d|› d| › d|› �}t        j                  d¬«      5  	 t        j                  |«      t        j                  t        j                  |«      «      z  }	 ddd«       t        j                  «      |k  rt        | |||«      S | dkD  r
|d	k(  r|dkD  s| dcxk  r|k  rn n|d
k(  rt        |«      ‚|d
k(  r%| |z
  |cxk  r| k  rn nt        | |z
  |dz
  ||«      S |dz  }||z
  }	d|	cxk  r|k  sn J |	|| |f«       ‚t        t        | |||«      «      }
t        |
|	||«      S # t
        $ r}t        |«      |‚d}~ww xY w# 1 sw Y   ŒêxY w)a[  
    Calculate the second endpoint for passing to np.arange, checking
    to avoid an integer overflow.  Catch OverflowError and re-raise
    as OutOfBoundsDatetime.

    Parameters
    ----------
    endpoint : int
        nanosecond timestamp of the known endpoint of the desired range
    periods : int
        number of periods in the desired range
    stride : int
        nanoseconds between periods in the desired range
    side : {'start', 'end'}
        which end of the range `endpoint` refers to

    Returns
    -------
    other_end : int

    Raises
    ------
    OutOfBoundsDatetime
    ©r   r   úCannot generate range with Ú=ú and periods=Úraise©ÚoverNr   r   r   r   r   )
ÚnpÚuint64r   ÚerrstateÚabsÚFloatingPointErrorr   Ú$_generate_range_overflow_safe_signedr   r   )Úendpointr    r'   r   Úi64maxÚmsgÚaddendr&   Úmid_periodsÚ	remainingÚmidpoints              r*   r   r   c   sˆ  € ð8 Ð#Ñ#Ð#Ð#ä�Y‰Y”uÓ€FØ'¨ v¨Q¨x¨j¸ÀgÀYÐ
O€Cä	�‰˜'Ö	"ð	4Ü—Y‘Y˜wÓ'¬"¯)©)´B·F±F¸6³NÓ*CÑC‰F÷	 
#ô 
‡v�vˆfƒ~˜Òä3°H¸gÀvÈtÓTÐTà
�QŠ,˜4 7š?¨v¸ªzØ�1Ô�vÕ $¨%¢-ô " #Ó&Ð&à	�Š˜8 fÑ,°ÔA¸ÕAô -Ø�vÑ˜w¨™{¨F°Dó
ð 	
ð
 ˜Q‘,€KØ˜+Ñ%€IØˆyÔ"˜7Ô"ÐJ Y°¸À6Ð$JÓJÐ"äÔ0°¸;ÈÐPTÓUÓV€HÜ(¨°9¸fÀdÓKÐKøô5 "ò 	4Ü% cÓ*°Ð3ûð	4ú÷ 
#Ð	"ús*   ÁE+Á>EÅ	E(ÅE#Å#E(Å(E+Å+E4c                óÄ  — |dv sJ ‚|dk(  r|dz  }t        j                  d¬«      5  t        j                  |«      t        j                  |«      z  }	 t        j                  | «      |z   }|t        k(  rt        ‚t        |«      cddd«       S # t        t        f$ r Y nw xY w|dkD  r| dk\  s|dk  r| dk  sJ ‚|dkD  rzt        j                  | «      t        j                  |«      z   }t        j                  t        «      }||kD  sJ ‚||t        j                  |«      z   k  rt        |«      cddd«       S ddd«       n# 1 sw Y   nxY wt        d|› d	| › d
|› �«      ‚)z‹
    A special case for _generate_range_overflow_safe where `periods * stride`
    can be calculated without overflowing int64 bounds.
    r-   r   éÿÿÿÿr1   r2   Nr   r.   r/   r0   )
r4   r6   Úint64r   ÚOverflowErrorr   r8   r5   r   r   )r:   r    r'   r   r=   ÚresultÚuresultr;   s           r*   r9   r9   ¦   sO  € ð Ð#Ñ#Ð#Ð#Øˆu‚}Ø�"‰ˆä	�‰˜'Ö	"Ü—‘˜'Ó"¤R§X¡X¨fÓ%5Ñ5ˆð	ä—X‘X˜hÓ'¨&Ñ0ˆFØœŠ~ô $Ð#Ü�v“;÷ 
#Ñ	"øô #¤MÐ2ò 	ñ ð	úð ˜’
˜x¨1š}°&¸1²*ÀÈQÂÐOÐOà�AŠ:ô
 —i‘i Ó)¬B¯I©I°fÓ,=Ñ=ˆGÜ—Y‘YœuÓ%ˆFØ˜VÒ#Ð#Ð#Ø˜&¤2§9¡9¨VÓ#4Ñ4Ò4Ü˜7“|÷9 
#×	"×	"Ó	"úô< Ø
% d V¨1¨X¨J°mÀGÀ9ÐMóð s*   §,EÁ1BÂB!ÂEÂ B!Â!BEÅE)Úns)r   úTimestamp | Timedelta | Noner   rH   r    z
int | Noner!   r   r"   r   Úreturnznpt.NDArray[np.intp])r   )
r:   r   r    r   r'   r   r   ÚstrrI   r   )Ú__doc__Ú
__future__r   Útypingr   Únumpyr4   Úpandas._libs.libr   Úpandas._libs.tslibsr   r   r   r	   r
   r   Úpandas.core.constructionr   Úpandas._typingr   r   r+   r   r9   © ó    r*   Ú<module>rU      sæ   ðñõ
 #å  ã å "÷÷ õ 6á÷ð ðA1Ø'ðA1à	%ðA1ð ðA1ð ð	A1ð
 ðA1ð óA1ðJ ;Bð@LØð@LØð@LØ),ð@LØ47ð@Làó@LðF+Øð+Øð+Ø),ð+Ø47ð+àô+rT   