o
    ¹­§i #  ã                   @  s"  d dl mZ d dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZ d dlmZ e e¡ d dlmZ W d  ƒ n1 sHw   Y  ergd d	lmZ d d
lmZmZmZ d dlmZmZ e			d0dddœd1dd„ƒZe			d0ddœd2dd„ƒZe			d0ddœd3d"d„ƒZ	 		#d4ed$dœd3d%d„Ze			d0dddœd1d&d'„ƒZe			d0ddœd2d(d'„ƒZe			d0ddœd3d)d'„ƒZ	 		#d4ed$dœd3d*d'„Ze			d0dddœd5d+d,„ƒZ e			d0ddœd6d-d,„ƒZ e			d0ddœd7d.d,„ƒZ 	 		#d4ed$dœd7d/d,„Z dS )8é    )ÚannotationsN)ÚTYPE_CHECKINGÚoverload)Ú	functions)Úparse_into_expression)Ú	wrap_exprÚwrap_s)ÚInt64)Úparse_into_datatype_expr)ÚLiteral)ÚDataTypeExprÚExprÚSeries)ÚIntoExprColumnÚPolarsIntegerType.©ÚdtypeÚeagerÚstartúint | IntoExprColumnÚendúint | IntoExprColumn | NoneÚstepÚintr   ú PolarsIntegerType | DataTypeExprr   úLiteral[False]Úreturnr   c                C  ó   d S ©N© ©r   r   r   r   r   r   r   úW/home/app/Keep/.python/lib/python3.10/site-packages/polars/functions/range/int_range.pyÚarange   ó   r"   )r   úLiteral[True]r   c                C  r   r   r   r    r   r   r!   r"   !   r#   ÚboolúExpr | Seriesc                C  r   r   r   r    r   r   r!   r"   ,   r#   é   Fc                C  s   t | ||||dS )aS  
    Generate a range of integers.

    Alias for :func:`int_range`.

    Parameters
    ----------
    start
        Lower bound of the range (inclusive).
    end
        Upper bound of the range (exclusive).
    step
        Step size of the range.
    dtype
        Data type of the range. Defaults to `Int64`.
    eager
        Evaluate immediately and return a `Series`.
        If set to `False` (default), return an expression instead.

    Returns
    -------
    Expr or Series
        Column of integer data type `dtype`.

    See Also
    --------
    int_range : Generate a range of integers.
    int_ranges : Generate a range of integers for each row of the input columns.

    Examples
    --------
    >>> pl.arange(0, 3, eager=True)
    shape: (3,)
    Series: 'literal' [i64]
    [
            0
            1
            2
    ]
    r   )Ú	int_ranger    r   r   r!   r"   7   s   0c                C  r   r   r   r    r   r   r!   r(   j   r#   r(   c                C  r   r   r   r    r   r   r!   r(   u   r#   c                C  r   r   r   r    r   r   r!   r(   €   r#   c          	      C  s‚   |du r| }d} t |ƒ}t| tƒr#t|tƒr#|r#tt | |||j¡ƒS t| ƒ}t|ƒ}tt 	||||j¡ƒ}|r?t
 |¡ ¡ S |S )u·  
    Generate a range of integers.

    Parameters
    ----------
    start
        Start of the range (inclusive). Defaults to 0.
    end
        End of the range (exclusive). If set to `None` (default),
        the value of `start` is used and `start` is set to `0`.
    step
        Step size of the range.
    dtype
        Data type of the range.
    eager
        Evaluate immediately and return a `Series`.
        If set to `False` (default), return an expression instead.

    Returns
    -------
    Expr or Series
        Column of integer data type `dtype`.

    See Also
    --------
    int_ranges : Generate a range of integers for each row of the input columns.

    Examples
    --------
    >>> pl.int_range(0, 3, eager=True)
    shape: (3,)
    Series: 'literal' [i64]
    [
            0
            1
            2
    ]

    `end` can be omitted for a shorter syntax.

    >>> pl.int_range(3, eager=True)
    shape: (3,)
    Series: 'literal' [i64]
    [
            0
            1
            2
    ]

    Generate an index column by using `int_range` in conjunction with :func:`len`.

    >>> df = pl.DataFrame({"a": [1, 3, 5], "b": [2, 4, 6]})
    >>> df.select(
    ...     pl.int_range(pl.len(), dtype=pl.UInt32).alias("index"),
    ...     pl.all(),
    ... )
    shape: (3, 3)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ index â”† a   â”† b   â”‚
    â”‚ ---   â”† --- â”† --- â”‚
    â”‚ u32   â”† i64 â”† i64 â”‚
    â•žâ•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 0     â”† 1   â”† 2   â”‚
    â”‚ 1     â”† 3   â”† 4   â”‚
    â”‚ 2     â”† 5   â”† 6   â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜
    Nr   )r
   Ú
isinstancer   r   ÚplrZeager_int_rangeÚ_pydatatype_exprr   r   r(   ÚFÚselectÚ	to_series)	r   r   r   r   r   Ú
dtype_exprÚstart_pyexprÚ
end_pyexprÚresultr   r   r!   r(   ‹   s    Kÿÿc                C  r   r   r   r    r   r   r!   Ú
int_rangesì   r#   r3   c                C  r   r   r   r    r   r   r!   r3   ÷   r#   c                C  r   r   r   r    r   r   r!   r3     r#   c          
      C  s\   |du r| }d} t |ƒ}t| ƒ}t|ƒ}t|ƒ}tt ||||j¡ƒ}	|r,t |	¡ ¡ S |	S )u  
    Generate a range of integers for each row of the input columns.

    Parameters
    ----------
    start
        Start of the range (inclusive). Defaults to 0.
    end
        End of the range (exclusive). If set to `None` (default),
        the value of `start` is used and `start` is set to `0`.
    step
        Step size of the range.
    dtype
        Integer data type of the ranges. Defaults to `Int64`.
    eager
        Evaluate immediately and return a `Series`.
        If set to `False` (default), return an expression instead.

    Returns
    -------
    Expr or Series
        Column of data type `List(dtype)`.

    See Also
    --------
    int_range : Generate a single range of integers.

    Examples
    --------
    >>> df = pl.DataFrame({"start": [1, -1], "end": [3, 2]})
    >>> df.with_columns(int_range=pl.int_ranges("start", "end"))
    shape: (2, 3)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ start â”† end â”† int_range  â”‚
    â”‚ ---   â”† --- â”† ---        â”‚
    â”‚ i64   â”† i64 â”† list[i64]  â”‚
    â•žâ•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 1     â”† 3   â”† [1, 2]     â”‚
    â”‚ -1    â”† 2   â”† [-1, 0, 1] â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    `end` can be omitted for a shorter syntax.

    >>> df.select("end", int_range=pl.int_ranges("end"))
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ end â”† int_range â”‚
    â”‚ --- â”† ---       â”‚
    â”‚ i64 â”† list[i64] â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 3   â”† [0, 1, 2] â”‚
    â”‚ 2   â”† [0, 1]    â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    Nr   )	r
   r   r   r*   r3   r+   r,   r-   r.   )
r   r   r   r   r   r/   r0   r1   Zstep_pyexprr2   r   r   r!   r3     s   >
ÿÿ)...)r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r$   r   r   )r   r   r   r   r   r   r   r   r   r%   r   r&   )r   Nr'   )r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r$   r   r   )r   r   r   r   r   r   r   r   r   r%   r   r&   )!Ú
__future__r   Ú
contextlibÚtypingr   r   Zpolarsr   r,   Zpolars._utils.parser   Zpolars._utils.wrapr   r   Zpolars.datatypesr	   Zpolars.datatypes._parser
   ÚsuppressÚImportErrorZpolars._plrZ_plrr*   r   r   r   r   Zpolars._typingr   r   r"   r(   r3   r   r   r   r!   Ú<module>   sÌ    ÿýú
ýû
ýûýú3ýú
ýû
ýûýúaýú
ýû
ýûýú