
    q-Ph"=                        d dl mZ d dlmZmZ d dlmZ d dlm	Z	 d dl
mZ erd dlmZ d dlmZ d dlmZmZ d d	lmZ e G d
 d                      ZdS )    )annotations)TYPE_CHECKINGCallable)	functions)wrap_s)expr_dispatch)Sequence)Series)IntoExprIntoExprColumn)PySeriesc                     e Zd ZdZdZd>dZd?dZd?d	Zd?d
Zd@dAdZ	d@dAdZ
d?dZdddBdZd?dZd?dZd?dZd?dZd?dZdddddCd Zd?d!Zd?d"Zd?d#Zdd$dDd(Zd?d)Zd?d*Zdd+dEd/Zd?d0Zdd1dFd5ZdGd7Z	 dHdId;Zd@dJd=Zd8S )KArrayNameSpacez$Namespace for array related methods.arrseriesr
   returnNonec                    |j         | _         d S N)_s)selfr   s     S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/polars/series/array.py__init__zArrayNameSpace.__init__   s    "I    c                    dS )a"  
        Compute the min values of the sub-arrays.

        Examples
        --------
        >>> s = pl.Series("a", [[1, 2], [4, 3]], dtype=pl.Array(pl.Int64, 2))
        >>> s.arr.min()
        shape: (2,)
        Series: 'a' [i64]
        [
            1
            3
        ]
        N r   s    r   minzArrayNameSpace.min         r   c                    dS )a"  
        Compute the max values of the sub-arrays.

        Examples
        --------
        >>> s = pl.Series("a", [[1, 2], [4, 3]], dtype=pl.Array(pl.Int64, 2))
        >>> s.arr.max()
        shape: (2,)
        Series: 'a' [i64]
        [
            2
            4
        ]
        Nr   r   s    r   maxzArrayNameSpace.max*   r   r   c                    dS )a  
        Compute the sum values of the sub-arrays.

        Examples
        --------
        >>> s = pl.Series([[1, 2], [4, 3]], dtype=pl.Array(pl.Int64, 2))
        >>> s.arr.sum()
        shape: (2,)
        Series: '' [i64]
        [
            3
            7
        ]
        Nr   r   s    r   sumzArrayNameSpace.sum:   r   r      ddofintc                    dS )a7  
        Compute the std of the values of the sub-arrays.

        Examples
        --------
        >>> s = pl.Series("a", [[1, 2], [4, 3]], dtype=pl.Array(pl.Int64, 2))
        >>> s.arr.std()
        shape: (2,)
        Series: 'a' [f64]
        [
            0.707107
            0.707107
        ]
        Nr   r   r%   s     r   stdzArrayNameSpace.stdJ   r   r   c                    dS )a5  
        Compute the var of the values of the sub-arrays.

        Examples
        --------
        >>> s = pl.Series("a", [[1, 2], [4, 3]], dtype=pl.Array(pl.Int64, 2))
        >>> s.arr.var()
        shape: (2,)
        Series: 'a' [f64]
        [
                0.5
                0.5
        ]
        Nr   r(   s     r   varzArrayNameSpace.varZ   r   r   c                    dS )a3  
        Compute the median of the values of the sub-arrays.

        Examples
        --------
        >>> s = pl.Series("a", [[1, 2], [4, 3]], dtype=pl.Array(pl.Int64, 2))
        >>> s.arr.median()
        shape: (2,)
        Series: 'a' [f64]
        [
            1.5
            3.5
        ]
        Nr   r   s    r   medianzArrayNameSpace.medianj   r   r   F)maintain_orderr.   boolc                   dS )a  
        Get the unique/distinct values in the array.

        Parameters
        ----------
        maintain_order
            Maintain order of data. This requires more work.

        Returns
        -------
        Series
            Series of data type :class:`List`.

        Examples
        --------
        >>> s = pl.Series([[1, 1, 2], [3, 4, 5]], dtype=pl.Array(pl.Int64, 3))
        >>> s.arr.unique()
        shape: (2,)
        Series: '' [list[i64]]
        [
            [1, 2]
            [3, 4, 5]
        ]
        Nr   )r   r.   s     r   uniquezArrayNameSpace.uniquez   r   r   c                    dS )a4  
        Count the number of unique values in every sub-arrays.

        Examples
        --------
        >>> s = pl.Series("a", [[1, 2], [4, 4]], dtype=pl.Array(pl.Int64, 2))
        >>> s.arr.n_unique()
        shape: (2,)
        Series: 'a' [u32]
        [
            2
            1
        ]
        Nr   r   s    r   n_uniquezArrayNameSpace.n_unique   r   r   c                    dS )a  
        Convert an Array column into a List column with the same inner data type.

        Returns
        -------
        Series
            Series of data type :class:`List`.

        Examples
        --------
        >>> s = pl.Series([[1, 2], [3, 4]], dtype=pl.Array(pl.Int8, 2))
        >>> s.arr.to_list()
        shape: (2,)
        Series: '' [list[i8]]
        [
                [1, 2]
                [3, 4]
        ]
        Nr   r   s    r   to_listzArrayNameSpace.to_list   r   r   c                    dS )a1  
        Evaluate whether any boolean value is true for every subarray.

        Returns
        -------
        Series
            Series of data type :class:`Boolean`.

        Examples
        --------
        >>> s = pl.Series(
        ...     [[True, True], [False, True], [False, False], [None, None], None],
        ...     dtype=pl.Array(pl.Boolean, 2),
        ... )
        >>> s.arr.any()
        shape: (5,)
        Series: '' [bool]
        [
            true
            true
            false
            false
            null
        ]
        Nr   r   s    r   anyzArrayNameSpace.any   r   r   c                    dS )a  
        Return the number of elements in each array.

        Returns
        -------
        Series
            Series of data type :class:`UInt32`.

        Examples
        --------
        >>> s = pl.Series("a", [[1, 2], [4, 3]], dtype=pl.Array(pl.Int64, 2))
        >>> s.arr.len()
        shape: (2,)
        Series: 'a' [u32]
        [
            2
            2
        ]
        Nr   r   s    r   lenzArrayNameSpace.len   r   r   c                    dS )a3  
        Evaluate whether all boolean values are true for every subarray.

        Returns
        -------
        Series
            Series of data type :class:`Boolean`.

        Examples
        --------
        >>> s = pl.Series(
        ...     [[True, True], [False, True], [False, False], [None, None], None],
        ...     dtype=pl.Array(pl.Boolean, 2),
        ... )
        >>> s.arr.all()
        shape: (5,)
        Series: '' [bool]
        [
            true
            false
            false
            true
            null
        ]
        Nr   r   s    r   allzArrayNameSpace.all   r   r   T)
descending
nulls_lastmultithreadedr<   r=   r>   c                   dS )a  
        Sort the arrays in this column.

        Parameters
        ----------
        descending
            Sort in descending order.
        nulls_last
            Place null values last.
        multithreaded
            Sort using multiple threads.

        Examples
        --------
        >>> s = pl.Series("a", [[3, 2, 1], [9, 1, 2]], dtype=pl.Array(pl.Int64, 3))
        >>> s.arr.sort()
        shape: (2,)
        Series: 'a' [array[i64, 3]]
        [
            [1, 2, 3]
            [1, 2, 9]
        ]
        >>> s.arr.sort(descending=True)
        shape: (2,)
        Series: 'a' [array[i64, 3]]
        [
            [3, 2, 1]
            [9, 2, 1]
        ]

        Nr   )r   r<   r=   r>   s       r   sortzArrayNameSpace.sort  r   r   c                    dS )a@  
        Reverse the arrays in this column.

        Examples
        --------
        >>> s = pl.Series("a", [[3, 2, 1], [9, 1, 2]], dtype=pl.Array(pl.Int64, 3))
        >>> s.arr.reverse()
        shape: (2,)
        Series: 'a' [array[i64, 3]]
        [
            [1, 2, 3]
            [2, 1, 9]
        ]

        Nr   r   s    r   reversezArrayNameSpace.reverse+  r   r   c                    dS )a  
        Retrieve the index of the minimal value in every sub-array.

        Returns
        -------
        Series
            Series of data type :class:`UInt32` or :class:`UInt64`
            (depending on compilation).

        Examples
        --------
        >>> s = pl.Series("a", [[3, 2, 1], [9, 1, 2]], dtype=pl.Array(pl.Int64, 3))
        >>> s.arr.arg_min()
        shape: (2,)
        Series: 'a' [u32]
        [
            2
            1
        ]

        Nr   r   s    r   arg_minzArrayNameSpace.arg_min<  r   r   c                    dS )a  
        Retrieve the index of the maximum value in every sub-array.

        Returns
        -------
        Series
            Series of data type :class:`UInt32` or :class:`UInt64`
            (depending on compilation).

        Examples
        --------
        >>> s = pl.Series("a", [[0, 9, 3], [9, 1, 2]], dtype=pl.Array(pl.Int64, 3))
        >>> s.arr.arg_max()
        shape: (2,)
        Series: 'a' [u32]
        [
            1
            0
        ]

        Nr   r   s    r   arg_maxzArrayNameSpace.arg_maxS  r   r   )null_on_oobindexint | IntoExprColumnrG   c                   dS )a  
        Get the value by index in the sub-arrays.

        So index `0` would return the first item of every sublist
        and index `-1` would return the last item of every sublist
        if an index is out of bounds, it will return a `None`.

        Parameters
        ----------
        index
            Index to return per sublist
        null_on_oob
            Behavior if an index is out of bounds:
            True -> set as null
            False -> raise an error

        Returns
        -------
        Series
            Series of innter data type.

        Examples
        --------
        >>> s = pl.Series(
        ...     "a", [[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=pl.Array(pl.Int32, 3)
        ... )
        >>> s.arr.get(pl.Series([1, -2, 0]), null_on_oob=True)
        shape: (3,)
        Series: 'a' [i32]
        [
            2
            5
            7
        ]

        Nr   )r   rH   rG   s      r   getzArrayNameSpace.getj  r   r   c                    dS )a_  
        Get the first value of the sub-arrays.

        Examples
        --------
        >>> s = pl.Series(
        ...     "a", [[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=pl.Array(pl.Int32, 3)
        ... )
        >>> s.arr.first()
        shape: (3,)
        Series: 'a' [i32]
        [
            1
            4
            7
        ]

        Nr   r   s    r   firstzArrayNameSpace.first  r   r   c                    dS )a]  
        Get the last value of the sub-arrays.

        Examples
        --------
        >>> s = pl.Series(
        ...     "a", [[1, 2, 3], [4, 5, 6], [7, 9, 8]], dtype=pl.Array(pl.Int32, 3)
        ... )
        >>> s.arr.last()
        shape: (3,)
        Series: 'a' [i32]
        [
            3
            6
            8
        ]

        Nr   r   s    r   lastzArrayNameSpace.last  r   r   )ignore_nulls	separatorr   rP   c                   dS )a+  
        Join all string items in a sub-array and place a separator between them.

        This errors if inner type of array `!= String`.

        Parameters
        ----------
        separator
            string to separate the items with
        ignore_nulls
            Ignore null values (default).

            If set to ``False``, null values will be propagated.
            If the sub-list contains any null values, the output is ``None``.

        Returns
        -------
        Series
            Series of data type :class:`String`.

        Examples
        --------
        >>> s = pl.Series([["x", "y"], ["a", "b"]], dtype=pl.Array(pl.String, 2))
        >>> s.arr.join(separator="-")
        shape: (2,)
        Series: '' [str]
        [
            "x-y"
            "a-b"
        ]

        Nr   )r   rQ   rP   s      r   joinzArrayNameSpace.join  r   r   c                    dS )a  
        Returns a column with a separate row for every array element.

        Returns
        -------
        Series
            Series with the data type of the array elements.

        Examples
        --------
        >>> s = pl.Series("a", [[1, 2, 3], [4, 5, 6]], dtype=pl.Array(pl.Int64, 3))
        >>> s.arr.explode()
        shape: (6,)
        Series: 'a' [i64]
        [
            1
            2
            3
            4
            5
            6
        ]
        Nr   r   s    r   explodezArrayNameSpace.explode  r   r   )nulls_equalitemr   rV   c                   dS )a  
        Check if sub-arrays contain the given item.

        Parameters
        ----------
        item
            Item that will be checked for membership
        nulls_equal : bool, default True
            If True, treat null as a distinct value. Null values will not propagate.

        Returns
        -------
        Series
            Series of data type :class:`Boolean`.

        Examples
        --------
        >>> s = pl.Series(
        ...     "a", [[3, 2, 1], [1, 2, 3], [4, 5, 6]], dtype=pl.Array(pl.Int32, 3)
        ... )
        >>> s.arr.contains(1)
        shape: (3,)
        Series: 'a' [bool]
        [
            true
            true
            false
        ]

        Nr   )r   rW   rV   s      r   containszArrayNameSpace.contains  r   r   elementc                    dS )a  
        Count how often the value produced by `element` occurs.

        Parameters
        ----------
        element
            An expression that produces a single value

        Examples
        --------
        >>> s = pl.Series("a", [[1, 2, 3], [2, 2, 2]], dtype=pl.Array(pl.Int64, 3))
        >>> s.arr.count_matches(2)
        shape: (2,)
        Series: 'a' [u32]
        [
            1
            3
        ]

        Nr   )r   rZ   s     r   count_matcheszArrayNameSpace.count_matches  r   r   Nfields+Callable[[int], str] | Sequence[str] | Nonec                    t          | j                  }|                                                    t	          j        |j                  j                            |                    	                                S )u  
        Convert the series of type `Array` to a series of type `Struct`.

        Parameters
        ----------
        fields
            If the name and number of the desired fields is known in advance
            a list of field names can be given, which will be assigned by index.
            Otherwise, to dynamically assign field names, a custom function can be
            used; if neither are set, fields will be `field_0, field_1 .. field_n`.

        Examples
        --------
        Convert array to struct with default field name assignment:

        >>> s1 = pl.Series("n", [[0, 1, 2], [3, 4, 5]], dtype=pl.Array(pl.Int8, 3))
        >>> s2 = s1.arr.to_struct()
        >>> s2
        shape: (2,)
        Series: 'n' [struct[3]]
        [
            {0,1,2}
            {3,4,5}
        ]
        >>> s2.struct.fields
        ['field_0', 'field_1', 'field_2']

        Convert array to struct with field name assignment by function/index:

        >>> s3 = s1.arr.to_struct(fields=lambda idx: f"n{idx:02}")
        >>> s3.struct.fields
        ['n00', 'n01', 'n02']

        Convert array to struct with field name assignment by
        index from a list of names:

        >>> s1.arr.to_struct(fields=["one", "two", "three"]).struct.unnest()
        shape: (2, 3)
        ┌─────┬─────┬───────┐
        │ one ┆ two ┆ three │
        │ --- ┆ --- ┆ ---   │
        │ i8  ┆ i8  ┆ i8    │
        ╞═════╪═════╪═══════╡
        │ 0   ┆ 1   ┆ 2     │
        │ 3   ┆ 4   ┆ 5     │
        └─────┴─────┴───────┘
        )
r   r   to_frameselectFcolnamer   	to_struct	to_series)r   r]   ss      r   re   zArrayNameSpace.to_struct)  sU    f 47OOzz||""15==#4#>#>v#F#FGGQQSSSr   nc                    dS )a  
        Shift array values by the given number of indices.

        Parameters
        ----------
        n
            Number of indices to shift forward. If a negative value is passed, values
            are shifted in the opposite direction instead.

        Notes
        -----
        This method is similar to the `LAG` operation in SQL when the value for `n`
        is positive. With a negative value for `n`, it is similar to `LEAD`.

        Examples
        --------
        By default, array values are shifted forward by one index.

        >>> s = pl.Series([[1, 2, 3], [4, 5, 6]], dtype=pl.Array(pl.Int64, 3))
        >>> s.arr.shift()
        shape: (2,)
        Series: '' [array[i64, 3]]
        [
            [null, 1, 2]
            [null, 4, 5]
        ]

        Pass a negative value to shift in the opposite direction instead.

        >>> s.arr.shift(-2)
        shape: (2,)
        Series: '' [array[i64, 3]]
        [
            [3, null, null]
            [6, null, null]
        ]
        Nr   )r   rh   s     r   shiftzArrayNameSpace.shift_  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
   )rH   rI   rG   r/   r   r
   )rQ   r   rP   r/   r   r
   )rW   r   rV   r/   r   r
   )rZ   r   r   r
   r   )r]   r^   r   r
   )rh   rI   r   r
   )__name__
__module____qualname____doc__	_accessorr   r   r!   r#   r)   r+   r-   r1   r3   r5   r7   r9   r;   r@   rB   rD   rF   rK   rM   rO   rS   rU   rY   r\   re   rj   r   r   r   r   r      s       ..I& & & &                           05      4       *   6   *   < ! "% % % % % %N   "   .   . GL $ $ $ $ $ $L   (   ( GK            D   2 ?C      @   0 ?C4T 4T 4T 4T 4Tl% % % % % % %r   r   N)
__future__r   typingr   r   polarsr   rb   polars._utils.wrapr   polars.series.utilsr   collections.abcr	   r
   polars._typingr   r   polars.polarsr   r   r   r   r   <module>rx      s   " " " " " " * * * * * * * * ! ! ! ! ! ! % % % % % % - - - - - - '((((((77777777&&&&&& r	 r	 r	 r	 r	 r	 r	 r	 r	 r	r   