§
    q-PhÛ6  ã                  ó”   — d dl mZ d dlmZ d dl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mZmZmZmZ  G d	„ d
¦  «        ZdS )é    )Úannotations)ÚTYPE_CHECKING)Úparse_into_expression)Úscale_bytes)Ú	wrap_expr)Úparse_into_dtype)ÚExpr)Ú
EndiannessÚIntoExprÚPolarsDataTypeÚSizeUnitÚTransferEncodingc                  ód   — e Zd ZdZdZd#d„Zd$d
„Zd%d„Zd&d„Zddœd'd„Z	d(d„Z
d)d*d„Zddœd+d!„Zd"S ),ÚExprBinaryNameSpacez&Namespace for bin related expressions.ÚbinÚexprr	   ÚreturnÚNonec                ó   — |j         | _         d S )N)Ú_pyexpr)Úselfr   s     úR/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/polars/expr/binary.pyÚ__init__zExprBinaryNameSpace.__init__   s   € Ø”|ˆŒˆˆó    Úliteralr   c                ór   — t          |d¬¦  «        }t          | j                             |¦  «        ¦  «        S )u€  
        Check if binaries in Series contain a binary substring.

        Parameters
        ----------
        literal
            The binary substring to look for

        Returns
        -------
        Expr
            Expression of data type :class:`Boolean`.

        See Also
        --------
        starts_with : Check if the binary substring exists at the start
        ends_with : Check if the binary substring exists at the end

        Examples
        --------
        >>> colors = pl.DataFrame(
        ...     {
        ...         "name": ["black", "yellow", "blue"],
        ...         "code": [b"\x00\x00\x00", b"\xff\xff\x00", b"\x00\x00\xff"],
        ...         "lit": [b"\x00", b"\xff\x00", b"\xff\xff"],
        ...     }
        ... )
        >>> colors.select(
        ...     "name",
        ...     pl.col("code").bin.contains(b"\xff").alias("contains_with_lit"),
        ...     pl.col("code").bin.contains(pl.col("lit")).alias("contains_with_expr"),
        ... )
        shape: (3, 3)
        â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
        â”‚ name   â”† contains_with_lit â”† contains_with_expr â”‚
        â”‚ ---    â”† ---               â”† ---                â”‚
        â”‚ str    â”† bool              â”† bool               â”‚
        â•žâ•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
        â”‚ black  â”† false             â”† true               â”‚
        â”‚ yellow â”† true              â”† true               â”‚
        â”‚ blue   â”† true              â”† false              â”‚
        â””â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        T©Ú
str_as_lit)r   r   r   Úbin_contains)r   r   s     r   ÚcontainszExprBinaryNameSpace.contains   s5   € õX (¨¸DÐAÑAÔAˆÝ˜œ×2Ò2°7Ñ;Ô;Ñ<Ô<Ð<r   Úsuffixc                ór   — t          |d¬¦  «        }t          | j                             |¦  «        ¦  «        S )uñ  
        Check if string values end with a binary substring.

        Parameters
        ----------
        suffix
            Suffix substring.

        Returns
        -------
        Expr
            Expression of data type :class:`Boolean`.

        See Also
        --------
        starts_with : Check if the binary substring exists at the start
        contains : Check if the binary substring exists anywhere

        Examples
        --------
        >>> colors = pl.DataFrame(
        ...     {
        ...         "name": ["black", "yellow", "blue"],
        ...         "code": [b"\x00\x00\x00", b"\xff\xff\x00", b"\x00\x00\xff"],
        ...         "suffix": [b"\x00", b"\xff\x00", b"\x00\x00"],
        ...     }
        ... )
        >>> colors.select(
        ...     "name",
        ...     pl.col("code").bin.ends_with(b"\xff").alias("ends_with_lit"),
        ...     pl.col("code").bin.ends_with(pl.col("suffix")).alias("ends_with_expr"),
        ... )
        shape: (3, 3)
        â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
        â”‚ name   â”† ends_with_lit â”† ends_with_expr â”‚
        â”‚ ---    â”† ---           â”† ---            â”‚
        â”‚ str    â”† bool          â”† bool           â”‚
        â•žâ•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
        â”‚ black  â”† false         â”† true           â”‚
        â”‚ yellow â”† false         â”† true           â”‚
        â”‚ blue   â”† true          â”† false          â”‚
        â””â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        Tr   )r   r   r   Úbin_ends_with)r   r!   s     r   Ú	ends_withzExprBinaryNameSpace.ends_withL   s5   € õX ' v¸$Ð?Ñ?Ô?ˆÝ˜œ×3Ò3°FÑ;Ô;Ñ<Ô<Ð<r   Úprefixc                ór   — t          |d¬¦  «        }t          | j                             |¦  «        ¦  «        S )uN  
        Check if values start with a binary substring.

        Parameters
        ----------
        prefix
            Prefix substring.

        Returns
        -------
        Expr
            Expression of data type :class:`Boolean`.

        See Also
        --------
        ends_with : Check if the binary substring exists at the end
        contains : Check if the binary substring exists anywhere

        Examples
        --------
        >>> colors = pl.DataFrame(
        ...     {
        ...         "name": ["black", "yellow", "blue"],
        ...         "code": [b"\x00\x00\x00", b"\xff\xff\x00", b"\x00\x00\xff"],
        ...         "prefix": [b"\x00", b"\xff\x00", b"\x00\x00"],
        ...     }
        ... )
        >>> colors.select(
        ...     "name",
        ...     pl.col("code").bin.starts_with(b"\xff").alias("starts_with_lit"),
        ...     pl.col("code")
        ...     .bin.starts_with(pl.col("prefix"))
        ...     .alias("starts_with_expr"),
        ... )
        shape: (3, 3)
        â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
        â”‚ name   â”† starts_with_lit â”† starts_with_expr â”‚
        â”‚ ---    â”† ---             â”† ---              â”‚
        â”‚ str    â”† bool            â”† bool             â”‚
        â•žâ•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
        â”‚ black  â”† false           â”† true             â”‚
        â”‚ yellow â”† true            â”† false            â”‚
        â”‚ blue   â”† false           â”† true             â”‚
        â””â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        Tr   )r   r   r   Úbin_starts_with)r   r%   s     r   Ústarts_withzExprBinaryNameSpace.starts_with{   s5   € õ\ ' v¸$Ð?Ñ?Ô?ˆÝ˜œ×5Ò5°fÑ=Ô=Ñ>Ô>Ð>r   T)ÚstrictÚencodingr   r)   Úboolc               óÞ   — |dk    r't          | j                             |¦  «        ¦  «        S |dk    r't          | j                             |¦  «        ¦  «        S d|›}t	          |¦  «        ‚)uç  
        Decode values using the provided encoding.

        Parameters
        ----------
        encoding : {'hex', 'base64'}
            The encoding to use.
        strict
            Raise an error if the underlying value cannot be decoded,
            otherwise mask out with a null value.

        Returns
        -------
        Expr
            Expression of data type :class:`Binary`.

        Examples
        --------
        >>> colors = pl.DataFrame(
        ...     {
        ...         "name": ["black", "yellow", "blue"],
        ...         "encoded": [b"000000", b"ffff00", b"0000ff"],
        ...     }
        ... )
        >>> colors.with_columns(
        ...     pl.col("encoded").bin.decode("hex").alias("code"),
        ... )
        shape: (3, 3)
        â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
        â”‚ name   â”† encoded   â”† code            â”‚
        â”‚ ---    â”† ---       â”† ---             â”‚
        â”‚ str    â”† binary    â”† binary          â”‚
        â•žâ•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
        â”‚ black  â”† b"000000" â”† b"\x00\x00\x00" â”‚
        â”‚ yellow â”† b"ffff00" â”† b"\xff\xff\x00" â”‚
        â”‚ blue   â”† b"0000ff" â”† b"\x00\x00\xff" â”‚
        â””â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        ÚhexÚbase64ú1`encoding` must be one of {'hex', 'base64'}, got )r   r   Úbin_hex_decodeÚbin_base64_decodeÚ
ValueError)r   r*   r)   Úmsgs       r   ÚdecodezExprBinaryNameSpace.decode¬   sp   € ðN uÒÐÝ˜Tœ\×8Ò8¸Ñ@Ô@ÑAÔAÐAØ˜Ò!Ð!Ý˜Tœ\×;Ò;¸FÑCÔCÑDÔDÐDàTÈÐTÐTˆCÝ˜S‘/”/Ð!r   c                óÚ   — |dk    r&t          | j                             ¦   «         ¦  «        S |dk    r&t          | j                             ¦   «         ¦  «        S d|›}t	          |¦  «        ‚)uS  
        Encode a value using the provided encoding.

        Parameters
        ----------
        encoding : {'hex', 'base64'}
            The encoding to use.

        Returns
        -------
        Expr
            Expression of data type :class:`Binary`.

        Examples
        --------
        >>> colors = pl.DataFrame(
        ...     {
        ...         "color": ["black", "yellow", "blue"],
        ...         "code": [b"\x00\x00\x00", b"\xff\xff\x00", b"\x00\x00\xff"],
        ...     }
        ... )
        >>> colors.with_columns(
        ...     pl.col("code").bin.encode("hex").alias("encoded"),
        ... )
        shape: (3, 3)
        â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
        â”‚ color  â”† code            â”† encoded â”‚
        â”‚ ---    â”† ---             â”† ---     â”‚
        â”‚ str    â”† binary          â”† str     â”‚
        â•žâ•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•¡
        â”‚ black  â”† b"\x00\x00\x00" â”† 000000  â”‚
        â”‚ yellow â”† b"\xff\xff\x00" â”† ffff00  â”‚
        â”‚ blue   â”† b"\x00\x00\xff" â”† 0000ff  â”‚
        â””â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        r-   r.   r/   )r   r   Úbin_hex_encodeÚbin_base64_encoder2   )r   r*   r3   s      r   ÚencodezExprBinaryNameSpace.encodeÛ   sl   € ðH uÒÐÝ˜Tœ\×8Ò8Ñ:Ô:Ñ;Ô;Ð;Ø˜Ò!Ð!Ý˜Tœ\×;Ò;Ñ=Ô=Ñ>Ô>Ð>àTÈÐTÐTˆCÝ˜S‘/”/Ð!r   ÚbÚunitr   c                ór   — t          | j                             ¦   «         ¦  «        }t          ||¦  «        }|S )u™  
        Get the size of binary values in the given unit.

        Parameters
        ----------
        unit : {'b', 'kb', 'mb', 'gb', 'tb'}
            Scale the returned size to the given unit.

        Returns
        -------
        Expr
            Expression of data type :class:`UInt32` or `Float64`.

        Examples
        --------
        >>> from os import urandom
        >>> df = pl.DataFrame({"data": [urandom(n) for n in (512, 256, 1024)]})
        >>> df.with_columns(  # doctest: +IGNORE_RESULT
        ...     n_bytes=pl.col("data").bin.size(),
        ...     n_kilobytes=pl.col("data").bin.size("kb"),
        ... )
        shape: (4, 3)
        â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
        â”‚ data                            â”† n_bytes â”† n_kilobytes â”‚
        â”‚ ---                             â”† ---     â”† ---         â”‚
        â”‚ binary                          â”† u32     â”† f64         â”‚
        â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
        â”‚ b"y?~B\x83\xf4V\x07\xd3\xfb\xbâ€¦ â”† 512     â”† 0.5         â”‚
        â”‚ b"\xee$4@f\xc14\x07\x8e\x88\x1â€¦ â”† 256     â”† 0.25        â”‚
        â”‚ b"\x80\xbd\xb9nEq;2\x99$\xf9\xâ€¦ â”† 1024    â”† 1.0         â”‚
        â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        )r   r   Úbin_size_bytesr   )r   r:   Úszs      r   ÚsizezExprBinaryNameSpace.size  s4   € õB t”|×2Ò2Ñ4Ô4Ñ5Ô5ˆÝ˜˜TÑ"Ô"ˆØˆ	r   Úlittle)Ú
endiannessÚdtyper   r@   r
   c               óp   — t          |¦  «        }t          | j                             ||¦  «        ¦  «        S )u±  
        Interpret a buffer as a numerical Polars type.

        Parameters
        ----------
        dtype : PolarsDataType
            Which type to interpret binary column into.
        endianness : {"big", "little"}, optional
            Which endianness to use when interpreting bytes, by default "little".

        Returns
        -------
        Expr
            Expression of data type `dtype`.
            Note that if binary array is too short value will be null.
            If binary array is too long, remainder will be ignored.

        Examples
        --------
        >>> df = pl.DataFrame({"data": [b"\x05\x00\x00\x00", b"\x10\x00\x01\x00"]})
        >>> df.with_columns(  # doctest: +IGNORE_RESULT
        ...     bin2int=pl.col("data").bin.reinterpret(
        ...         dtype=pl.Int32, endianness="little"
        ...     ),
        ... )
        shape: (2, 2)
        â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
        â”‚ data                â”† bin2int â”‚
        â”‚ ---                 â”† ---     â”‚
        â”‚ binary              â”† i32     â”‚
        â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•¡
        â”‚ b"\x05\x00\x00\x00" â”† 5       â”‚
        â”‚ b"\x10\x00\x01\x00" â”† 65552   â”‚
        â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        )r   r   r   Úfrom_buffer)r   rA   r@   s      r   ÚreinterpretzExprBinaryNameSpace.reinterpret,  s2   € õL ! Ñ'Ô'ˆå˜œ×1Ò1°%¸ÑDÔDÑEÔEÐEr   N)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	   )r9   )r:   r   r   r	   )rA   r   r@   r
   r   r	   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	_accessorr   r    r$   r(   r4   r8   r>   rD   © r   r   r   r      sô   € € € € € Ø0Ð0à€Ið$ð $ð $ð $ð-=ð -=ð -=ð -=ð^-=ð -=ð -=ð -=ð^/?ð /?ð /?ð /?ðb DHð -"ð -"ð -"ð -"ð -"ð -"ð^*"ð *"ð *"ð *"ðX#ð #ð #ð #ð #ðL BJð(Fð (Fð (Fð (Fð (Fð (Fð (Fð (Fr   r   N)Ú
__future__r   Útypingr   Úpolars._utils.parser   Úpolars._utils.variousr   Úpolars._utils.wrapr   Úpolars.datatypesr   Úpolarsr	   Úpolars._typingr
   r   r   r   r   r   rJ   r   r   ú<module>rS      s  ðØ "Ð "Ð "Ð "Ð "Ð "à  Ð  Ð  Ð  Ð  Ð  à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø -Ð -Ð -Ð -Ð -Ð -Ø (Ð (Ð (Ð (Ð (Ð (Ø -Ð -Ð -Ð -Ð -Ð -àð ØÐÐÐÐÐðð ð ð ð ð ð ð ð ð ð ð ð ð ðFð Fð Fð Fð Fñ Fô Fð Fð Fð Fr   