
     jT                        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 erddlmZ 	 dddZ	 dddZddZdS )zj
Helper functions to generate range-like data for DatetimeArray
(and possibly TimedeltaArray/PeriodArray)
    )annotations)TYPE_CHECKINGN)i8max)
BaseOffsetOutOfBoundsDatetime	Timedelta	TimestampiNaT)nptnsstartTimestamp | Timedelta | Noneendperiods
int | Nonefreqr   unitstrreturnnpt.NDArray[np.intp]c                Z   | | j         nd}||j         nd}|j         t          |          }	 |                    |d          }n)# t          $ r}t	          d| d| d          |d}~ww xY wt          |j                   }	||||}
|
||
z
  |	z  |	z  z   |	dz  z   dz   }nF|||}
t          |
||	d	
          }n,||||	z   }t          |||	d
          }
nt	          d          t          j        d          5  	 t          j	        |
||	t          j
                  }nq# t          $ rd |
g}|d         |k    r*|                    |d         |	z              |d         |k    *t          j        |dd         t          j
                  }Y nw xY wddd           n# 1 swxY w Y   |S )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 : str, default "ns"
        The resolution the output is meant to represent.

    Returns
    -------
    ndarray[np.int64]
        Representing the given resolution.
    NF)round_okzfreq=z is incompatible with unit=z,. Use a lower freq or a higher unit instead.      r   )sider   zEat least 'start' or 'end' should be specified if a 'period' is given.raiseover)dtype)_valuenanosr   as_unit
ValueErrorint_generate_range_overflow_safenperrstatearangeint64FloatingPointErrorappendarray)r   r   r   r   r   istartiendtderrstridebevaluesxdrs                 nC:\Users\Terasoftware\OneDrive\Desktop\faahhh\fyndo\fyndo\venv\Lib\site-packages\pandas/core/arrays/_ranges.pygenerate_regular_ranger8      s   : #8U\\DF23::dDJJ	4BZZuZ--   9D 9 9T 9 9 9
 
 	
 ^^F 
6 
$ 
 f$v--!;a?	 	
 	
)!Wf7KKK	 
g 
6M)!Wf5IIIS
 
 	
 
'	"	"	" 	8 	8	8Yq!V28<<<FF! 	8 	8 	8#Cb'Q, -

3r7V+,,, b'Q, -Xc#2#hbh777FFF		8	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 MsN   A 
A,A''A,>F  "D#"F #A+FF FF  F$'F$endpointr%   r2   r   c                D   |dv sJ t          j        t                    }d| d|  d| }t          j        d          5  	 t          j        |          t          j        t          j        |                    z  }n"# t
          $ r}t          |          |d}~ww xY w	 ddd           n# 1 swxY w Y   t          j        |          |k    rt          | |||          S | dk    r|d	k    r|dk    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 )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=r   r   Nr   r   r   r   r   )
r'   uint64r   r(   absr+   r   $_generate_range_overflow_safe_signedr&   r%   )r9   r   r2   r   i64maxmsgaddendr1   mid_periods	remainingmidpoints              r7   r&   r&   a   s   8 #####YuF
O
O
Ox
O
Og
O
OC	'	"	"	" 4 4	4Yw''")BF6NN*C*CCFF! 	4 	4 	4%c**3	4 	4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 
vf~~ 
3HgvtTTT
Q, 
47? 
vz 
1
 
 
 

 
 
 
 
"&%-
 "#&&&	 
8f, 
 
 
 
 
 
 
 
 
 -vw{FD
 
 	

 Q,K+%IyJJJJ7JJJJJY6$JJJJ0;PTUUVVH(9fdKKKs6    B-;A>=B->
BBBB--B14B1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k    r| dk    s|dk     r| dk    sJ |dk    rt          j        |           t          j        |          z   }t          j        t                    }||k    sJ ||t          j        |          z   k    rt          |          cddd           S ddd           n# 1 swxY w Y   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   r    r   r   Nr   r<   r=   r>   )
r'   r(   r*   r
   OverflowErrorr%   r+   r?   r   r   )r9   r   r2   r   rD   resulturesultrB   s           r7   rA   rA      s-    #####u} "	'	"	"	" $ $'""RXf%5%55	Xh''&0F~ $ $#v;;$ $ $ $ $ $ $ $ #M2 	 	 	 D	 
Ox1}O&1*OQOOOA: 		$
 i))BIf,=,==GYu%%FV####&29V#4#444 $7||9$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $< MdMMXMMGMM  s0   *E7BB*'E)B**BEE E)r   )r   r   r   r   r   r   r   r   r   r   r   r   )r   )
r9   r%   r   r%   r2   r%   r   r   r   r%   )__doc__
__future__r   typingr   numpyr'   pandas._libs.libr   pandas._libs.tslibsr   r   r   r	   r
   pandas._typingr   r8   r&   rA        r7   <module>rU      s!    # " " " " "                 " " " " " "               #"""""" F F F F FT ;B@L @L @L @L @LF+ + + + + +rT   