o
    ¹­§it%  ã                   @  sx  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 d dlmZ e e¡ d dlmZ W d  ƒ n1 s@w   Y  d dlmZ ercd d	lmZmZ d d
lmZmZmZmZmZ edddœd.dd„ƒZeddœd/dd„ƒZeddœd0d d„ƒZeƒ d!d"dœd0d#d„ƒZedddd$œd1d(d)„ƒZeddd*œd2d+d)„ƒZeddd*œd3d,d)„ƒZd!d"d"d$œd3d-d)„ZdS )4é    )ÚannotationsN)ÚTYPE_CHECKINGÚoverload)Ú	functions)Úparse_into_expression)Úunstable)Ú	wrap_expr)ÚLiteral)ÚExprÚSeries)ÚClosedIntervalÚIntoExprÚIntoExprColumnÚNumericLiteralÚTemporalLiteral.)ÚclosedÚeagerÚstartú+NumericLiteral | TemporalLiteral | IntoExprÚendÚnum_samplesúint | IntoExprr   r   r   úLiteral[False]Úreturnr
   c                C  ó   d S ©N© ©r   r   r   r   r   r   r   úZ/home/app/Keep/.python/lib/python3.10/site-packages/polars/functions/range/linear_space.pyÚlinear_space   ó   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   1   r    ZbothFc          	      C  sB   t | ƒ}t |ƒ}t |ƒ}tt ||||¡ƒ}|rt |¡ ¡ S |S )ué  
    Create sequence of evenly-spaced points.

    Parameters
    ----------
    start
        Lower bound of the range.
    end
        Upper bound of the range.
    num_samples
        Number of samples in the output sequence.
    closed : {'both', 'left', 'right', 'none'}
        Define which sides of the interval are closed (inclusive).
    eager
        Evaluate immediately and return a `Series`.
        If set to `False` (default), return an expression instead.

    .. warning::
        This functionality is experimental. It may be changed at any point without it
        being considered a breaking change.

    Notes
    -----
    `linear_space` works with numeric and temporal dtypes. When the `start` and `end`
    parameters are `Date` dtypes, the output sequence consists of equally-spaced
    `Datetime` elements with millisecond precision.

    Returns
    -------
    Expr or Series
        Column of data type `:class:Time`.

    Examples
    --------
    >>> pl.linear_space(start=0, end=1, num_samples=3, eager=True)
    shape: (3,)
    Series: 'literal' [f64]
    [
            0.0
            0.5
            1.0
    ]
    >>> pl.linear_space(start=0, end=1, num_samples=3, closed="left", eager=True)
    shape: (3,)
    Series: 'literal' [f64]
    [
            0.0
            0.333333
            0.666667
    ]
    >>> pl.linear_space(start=0, end=1, num_samples=3, closed="right", eager=True)
    shape: (3,)
    Series: 'literal' [f64]
    [
            0.333333
            0.666667
            1.0
    ]
    >>> pl.linear_space(start=0, end=1, num_samples=3, closed="none", eager=True)
    shape: (3,)
    Series: 'literal' [f64]
    [
            0.25
            0.5
            0.75
    ]
    >>> from datetime import time
    >>> pl.linear_space(
    ...     start=time(hour=1), end=time(hour=12), num_samples=3, eager=True
    ... )
    shape: (3,)
    Series: 'literal' [time]
    [
            01:00:00
            06:30:00
            12:00:00
    ]

    `Date` endpoints generate a sequence of `Datetime` values:

    >>> from datetime import date
    >>> pl.linear_space(
    ...     start=date(2025, 1, 1),
    ...     end=date(2025, 2, 1),
    ...     num_samples=3,
    ...     closed="right",
    ...     eager=True,
    ... )
    shape: (3,)
    Series: 'literal' [datetime[Î¼s]]
    [
            2025-01-11 08:00:00
            2025-01-21 16:00:00
            2025-02-01 00:00:00
    ]

    When `eager=False` (default), an expression is produced. You can generate a sequence
    using the length of the dataframe:

    >>> df = pl.DataFrame({"a": [1, 2, 3, 4, 5]})
    >>> df.with_columns(pl.linear_space(0, 1, pl.len()).alias("ls"))
    shape: (5, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”
    â”‚ a   â”† ls   â”‚
    â”‚ --- â”† ---  â”‚
    â”‚ i64 â”† f64  â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•¡
    â”‚ 1   â”† 0.0  â”‚
    â”‚ 2   â”† 0.25 â”‚
    â”‚ 3   â”† 0.5  â”‚
    â”‚ 4   â”† 0.75 â”‚
    â”‚ 5   â”† 1.0  â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”˜
    )r   r   Úplrr   ÚFÚselectÚ	to_series)	r   r   r   r   r   Ústart_pyexprÚ
end_pyexprÚnum_samples_pyexprÚresultr   r   r   r   <   s   {ÿ)r   Úas_arrayr   ú1NumericLiteral | TemporalLiteral | IntoExprColumnúint | IntoExprColumnr,   c                C  r   r   r   ©r   r   r   r   r,   r   r   r   r   Úlinear_spacesÄ   ó   	r0   )r   r,   c                C  r   r   r   r/   r   r   r   r0   Ð   r1   c                C  r   r   r   r/   r   r   r   r0   Ü   r1   c          
      C  sD   t | ƒ}t |ƒ}t |ƒ}tt |||||¡ƒ}	|r t |	¡ ¡ S |	S )u{  
    Generate a sequence of evenly-spaced values for each row between `start` and `end`.

    The number of values in each sequence is determined by `num_samples`.

    Parameters
    ----------
    start
        Lower bound of the range.
    end
        Upper bound of the range.
    num_samples
        Number of samples in the output sequence.
    closed : {'both', 'left', 'right', 'none'}
        Define which sides of the interval are closed (inclusive).
    as_array
        Return result as a fixed-length `Array`. `num_samples` must be a constant.
    eager
        Evaluate immediately and return a `Series`.
        If set to `False` (default), return an expression instead.

    .. warning::
        This functionality is experimental. It may be changed at any point without it
        being considered a breaking change.

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

    See Also
    --------
    linear_space : Generate a single sequence of linearly-spaced values.

    Examples
    --------
    >>> df = pl.DataFrame({"start": [1, -1], "end": [3, 2], "num_samples": [4, 5]})
    >>> df.with_columns(ls=pl.linear_spaces("start", "end", "num_samples"))
    shape: (2, 4)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ start â”† end â”† num_samples â”† ls                     â”‚
    â”‚ ---   â”† --- â”† ---         â”† ---                    â”‚
    â”‚ i64   â”† i64 â”† i64         â”† list[f64]              â”‚
    â•žâ•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 1     â”† 3   â”† 4           â”† [1.0, 1.666667, â€¦ 3.0] â”‚
    â”‚ -1    â”† 2   â”† 5           â”† [-1.0, -0.25, â€¦ 2.0]   â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    >>> df.with_columns(ls=pl.linear_spaces("start", "end", 3, as_array=True))
    shape: (2, 4)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ start â”† end â”† num_samples â”† ls               â”‚
    â”‚ ---   â”† --- â”† ---         â”† ---              â”‚
    â”‚ i64   â”† i64 â”† i64         â”† array[f64, 3]    â”‚
    â•žâ•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 1     â”† 3   â”† 4           â”† [1.0, 2.0, 3.0]  â”‚
    â”‚ -1    â”† 2   â”† 5           â”† [-1.0, 0.5, 2.0] â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    )r   r   r$   r0   r%   r&   r'   )
r   r   r   r   r,   r   r(   r)   r*   r+   r   r   r   r0   è   s   C
ÿÿ)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   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"   r   r"   r   r#   )Ú
__future__r   Ú
contextlibÚtypingr   r   Zpolarsr   r%   Zpolars._utils.parser   Zpolars._utils.unstabler   Zpolars._utils.wrapr   ÚsuppressÚImportErrorZpolars._plrZ_plrr$   r	   r
   r   Zpolars._typingr   r   r   r   r   r   r0   r   r   r   r   Ú<module>   s\    ÿ	ú
û
û
ú ùúúù