Ë
    	êñi¥  ã            	      óv  — d dl mZ d dlZd dl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j                  e«      5  d dlmZ ddd«       e	rd dlmZ d d	lmZ d d
lmZ dgZdddddddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Z ed¬«      ddœdd„«       Zdd„Zddœdd„Zy# 1 sw Y   ŒhxY w)é    )ÚannotationsN)Ú	lru_cache)ÚPath)ÚTYPE_CHECKINGÚAny)Úparse_into_list_of_expressions)Ú	wrap_expr)ÚIterable)ÚExpr)ÚIntoExprÚregister_plugin_functionF)ÚkwargsÚis_elementwiseÚchanges_lengthÚreturns_scalarÚcast_to_supertypeÚinput_wildcard_expansionÚpass_name_to_applyÚuse_abs_pathc                óª   — t        |«      }t        |«      }t        | |
¬«      } t        t	        j
                  t        | «      ||||||||	|¬«
      «      S )aÔ  
    Register a plugin function.

    See the `user guide <https://docs.pola.rs/user-guide/plugins/expr_plugins>`_
    for more information about plugins.

    Parameters
    ----------
    plugin_path
        Path to the plugin package. Accepts either the file path to the dynamic library
        file or the path to the directory containing it.
    function_name
        The name of the Rust function to register.
    args
        The arguments passed to this function. These get passed to the `input`
        argument on the Rust side, and have to be expressions (or be convertible
        to expressions).
    kwargs
        Non-expression arguments to the plugin function. These must be
        JSON serializable.
    is_elementwise
        Indicate that the function operates on scalars only. This will potentially
        trigger fast paths.
    changes_length
        Indicate that the function will change the length of the expression.
        For example, a `unique` or `slice` operation.
    returns_scalar
        Automatically explode on unit length if the function ran as final aggregation.
        This is the case for aggregations like `sum`, `min`, `covariance` etc.
    cast_to_supertype
        Cast the input expressions to their supertype.
    input_wildcard_expansion
        Expand wildcard expressions before executing the function.
    pass_name_to_apply
        If set to `True`, the `Series` passed to the function in a group-by operation
        will ensure the name is set. This is an extra heap allocation per group.
    use_abs_path
        If set to `True`, the path will be resolved to an absolute path.
        The path to the dynamic library is relative to the virtual environment by
        default.

    Returns
    -------
    Expr

    Warnings
    --------
    This is highly unsafe as this will call the C function loaded by
    `plugin::function_name`.

    The parameters you set dictate how Polars will handle the function.
    Make sure they are correct!
    ©r   )
Úplugin_pathÚfunction_nameÚargsr   r   r   r   r   r   r   )r   Ú_serialize_kwargsÚ_resolve_plugin_pathr	   Úplrr   Ústr)r   r   r   r   r   r   r   r   r   r   r   ÚpyexprsÚserialized_kwargss                úP/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/polars/plugins.pyr   r      sd   € ôF -¨TÓ2€GÜ)¨&Ó1ÐÜ& {ÀÔN€KäÜ×$Ñ$Ü˜KÓ(Ø'ØØ$Ø)Ø%=Ø)Ø/Ø1Ø)ô	
óð ó    c                ó6   — | syddl }|j                  | d¬«      S )z+Serialize the function's keyword arguments.r"   r   Né   )Úprotocol)ÚpickleÚdumps)r   r&   s     r!   r   r   o   s    € áØãð �<‰<˜¨ˆ<Ó+Ð+r"   é   )Úmaxsizer   c               óð   — t        | t        «      st        | «      } | j                  «       rt        | |¬«      S | j	                  «       D ]  }t        |«      sŒt        ||¬«      c S  d| › �}t        |«      ‚)z.Get the file path of the dynamic library file.r   z"no dynamic library found at path: )Ú
isinstancer   Úis_fileÚ_resolve_file_pathÚiterdirÚ_is_dynamic_libÚFileNotFoundError)Úpathr   ÚpÚmsgs       r!   r   r   {   sr   € ô �dœDÔ!Ü�D‹zˆà‡|�|„~Ü! $°\ÔBÐBà�\‰\‹^ò DˆÜ˜1ÕÜ% a°lÔCÒCðDð /¨t¨fÐ
5€CÜ
˜CÓ
 Ð r"   c                óB   — | j                  «       xr | j                  dv S )N)z.soz.dllz.pyd)r,   Úsuffix)r1   s    r!   r/   r/   Œ   s   € Ø�<‰<‹>ÒD˜dŸk™kÐ-DÐDÐDr"   c               óÀ   — t        t        j                  «      }|r| j                  «       S 	 | j	                  |«      }|S # t
        $ r | j                  «       }Y |S w xY w)N)r   ÚsysÚprefixÚresolveÚrelative_toÚ
ValueError)r1   r   Ú	venv_pathÚ	file_paths       r!   r-   r-   �   s^   € Ü”S—Z‘ZÓ €IáØ�|‰|‹~Ðð	'Ø×(Ñ(¨Ó3ˆIð Ðøô ò 	'ØŸ™›‰IàÐð	'ús   ­A  Á AÁA)r   ú
Path | strr   r   r   zIntoExpr | Iterable[IntoExpr]r   údict[str, Any] | Noner   Úboolr   r@   r   r@   r   r@   r   r@   r   r@   r   r@   Úreturnr   )r   r?   rA   Úbytes)r1   r>   r   r@   rA   r   )r1   r   rA   r@   )r1   r   r   r@   rA   r   ) Ú
__future__r   Ú
contextlibr7   Ú	functoolsr   Úpathlibr   Útypingr   r   Úpolars._utils.parser   Úpolars._utils.wrapr	   ÚsuppressÚImportErrorÚpolars._plrÚ_plrr   Úcollections.abcr
   Úpolarsr   Úpolars._typingr   Ú__all__r   r   r   r/   r-   © r"   r!   ú<module>rS      s1  ðÝ "ã Û 
Ý Ý ß %å >Ý (à€Z×Ñ˜Ó%ñ Ý÷ñ Ý(åÝ'à%Ð
&€ð %)Ø Ø Ø Ø#Ø%*Ø$ØñTàðTð ðTð (ð	Tð
 "ðTð ðTð ðTð ðTð ðTð #ðTð ðTð ðTð 
óTón	,ñ �2ÔØCHô !ó ð!ó Eð <Aö ÷Ið ús   ÁB/Â/B8