ó
    Ñ]jÜ9  ã                   óp  • S SK r S SKJr  S SKJrJr  S SKrS SKJ	r	  S SK
Jr  S SKJr  S rS r\ " S	 S
\5      5       r " S S5      r " S S5      r " S S5      r\" 5       r\R+                  \" 5       5        \R+                  \" 5       5        S rSS jrSS jrS rS rS r " S S5      rSS.S jrg)é    N©Úwraps)ÚProtocolÚruntime_checkable)Úissparse)Ú
get_config)Úavailable_ifc                 óz   •  [         R                  " U 5      $ ! [         a  n[        SU  SU  S35      UeSnAff = f)zCheck library is installed.zSetting output container to 'z' requires z to be installedN)Ú	importlibÚimport_moduleÚImportError)ÚlibraryÚexcs     ÚV/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sklearn/utils/_set_output.pyÚcheck_library_installedr      sR   € ðÜ×&Ò& wÓ/Ð/øÜó ÜØ+¨G¨9°KÀ¸yð Ið ó
ð ð	ûðús   ‚ ˜
:¢5µ:c                 óV   • [        U 5      (       a   U " 5       $ U $ ! [         a     g f = f©N)ÚcallableÚ	Exception©Úcolumnss    r   Úget_columnsr      s5   € Ü�×Ñð	Ù“9Ðð €Nøô ó 	Ùð	ús   ’ ›
(§(c                   ó<   • \ rS rSr% \\S'   S	S jrS rS rS r	Sr
g)
ÚContainerAdapterProtocolé#   Úcontainer_libc                 ó   • g)aR  Create container from `X_output` with additional metadata.

Parameters
----------
X_output : {ndarray, dataframe}
    Data to wrap.

X_original : {ndarray, dataframe}
    Original input dataframe. This is used to extract the metadata that should
    be passed to `X_output`, e.g. pandas row index.

columns : callable, ndarray, or None
    The column names or a callable that returns the column names. The
    callable is useful if the column names require some computation. If `None`,
    then no columns are passed to the container's constructor.

inplace : bool, default=False
    Whether or not we intend to modify `X_output` in-place. However, it does
    not guarantee that we return the same object if the in-place operation
    is not possible.

Returns
-------
wrapped_output : container_type
    `X_output` wrapped into the container type.
N© )ÚselfÚX_outputÚ
X_originalr   Úinplaces        r   Úcreate_containerÚ)ContainerAdapterProtocol.create_container'   ó   � ó    c                 ó   • g)zÅReturn True if X is a supported container.

Parameters
----------
Xs: container
    Containers to be checked.

Returns
-------
is_supported_container : bool
    True if X is a supported container.
Nr   )r   ÚXs     r   Úis_supported_containerÚ/ContainerAdapterProtocol.is_supported_containerC   r%   r&   c                 ó   • g)zùRename columns in `X`.

Parameters
----------
X : container
    Container which columns is updated.

columns : ndarray of str
    Columns to update the `X`'s columns with.

Returns
-------
updated_container : container
    Container with new names.
Nr   ©r   r(   r   s      r   Úrename_columnsÚ'ContainerAdapterProtocol.rename_columnsQ   r%   r&   c                 ó   • g)z½Stack containers horizontally (column-wise).

Parameters
----------
Xs : list of containers
    List of containers to stack.

Returns
-------
stacked_Xs : container
    Stacked containers.
Nr   )r   ÚXss     r   ÚhstackÚContainerAdapterProtocol.hstackb   r%   r&   r   N)F)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚstrÚ__annotations__r#   r)   r-   r1   Ú__static_attributes__r   r&   r   r   r   #   s   ‡ àÓôò8òõ"r&   r   c                   ó4   • \ rS rSrSrS	S jrS rS rS rSr	g)
ÚPandasAdapteréq   Úpandasc                 ó~  • [        S5      n[        U5      nU(       a  [        XR                  5      (       dq  [        XR                  5      (       a  UR                  nO5[        X%R                  UR
                  45      (       a  UR                  nOS nUR                  XU(       + S9nUb  U R                  X5      $ U$ )Nr=   )ÚindexÚcopy)r   r   Ú
isinstanceÚ	DataFramer?   ÚSeriesr-   )r   r    r!   r   r"   Úpdr?   s          r   r#   ÚPandasAdapter.create_containert   s›   € Ü$ XÓ.ˆÜ˜gÓ&ˆæœj¨·<±<×@Ñ@ô
 ˜(§L¡L×1Ñ1Ø Ÿ™‘Ü˜J¯©°r·y±yÐ(A×BÑBØ"×(Ñ(‘à�ð —|‘| HÀGÄ�|ÐLˆHàÑØ×&Ñ& xÓ9Ð9Øˆr&   c                 óB   • [        S5      n[        XR                  5      $ )Nr=   ©r   rA   rB   )r   r(   rD   s      r   r)   Ú$PandasAdapter.is_supported_containerŒ   ó   € Ü$ XÓ.ˆÜ˜!Ÿ\™\Ó*Ð*r&   c                 ó   • X!l         U$ r   r   r,   s      r   r-   ÚPandasAdapter.rename_columns�   ó   € ð Œ	Øˆr&   c                 ó8   • [        S5      nUR                  USS9$ )Nr=   é   )Úaxis©r   Úconcat)r   r0   rD   s      r   r1   ÚPandasAdapter.hstack–   s   € Ü$ XÓ.ˆØ�y‰y˜ !ˆyÐ$Ð$r&   r   N©T©
r3   r4   r5   r6   r   r#   r)   r-   r1   r9   r   r&   r   r;   r;   q   s   † Ø€Môò0+òõ%r&   r;   c                   ó4   • \ rS rSrSrS	S jrS rS rS rSr	g)
ÚPolarsAdapteré›   Úpolarsc                 ó  • [        S5      n[        U5      n[        U[        R                  5      (       a  UR                  5       OUnU(       a  [        XR                  5      (       d  UR                  XSS9$ Ub  U R                  X5      $ U$ )NrX   Úrow)ÚschemaÚorient)r   r   rA   ÚnpÚndarrayÚtolistrB   r-   )r   r    r!   r   r"   Úpls         r   r#   ÚPolarsAdapter.create_containerž   st   € Ü$ XÓ.ˆÜ˜gÓ&ˆÜ&0°¼"¿*¹*×&EÑ&E�'—.‘.Ô"È7ˆæœj¨·<±<×@Ñ@à—<‘< À�<ÐGÐGàÑØ×&Ñ& xÓ9Ð9Øˆr&   c                 óB   • [        S5      n[        XR                  5      $ )NrX   rG   )r   r(   r`   s      r   r)   Ú$PolarsAdapter.is_supported_container«   rI   r&   c                 ó   • X!l         U$ r   r   r,   s      r   r-   ÚPolarsAdapter.rename_columns¯   rL   r&   c                 ó8   • [        S5      nUR                  USS9$ )NrX   Ú
horizontal)ÚhowrP   )r   r0   r`   s      r   r1   ÚPolarsAdapter.hstackµ   s   € Ü$ XÓ.ˆØ�y‰y˜ ˆyÐ.Ð.r&   r   NrS   rT   r   r&   r   rV   rV   ›   s   † Ø€Môò+òõ/r&   rV   c                   ó0   • \ rS rSrS r\S 5       rS rSrg)ÚContainerAdaptersManageréº   c                 ó   • 0 U l         g r   ©Úadapters©r   s    r   Ú__init__Ú!ContainerAdaptersManager.__init__»   s	   € Øˆ�r&   c                 ó4   • S1[        U R                  5      -  $ )NÚdefault)Úsetro   rp   s    r   Úsupported_outputsÚ*ContainerAdaptersManager.supported_outputs¾   s   € àˆ{œS §¡Ó/Ñ/Ð/r&   c                 ó4   • XR                   UR                  '   g r   )ro   r   )r   Úadapters     r   ÚregisterÚ!ContainerAdaptersManager.registerÂ   s   € Ø/6�‰�g×+Ñ+Ò,r&   rn   N)	r3   r4   r5   r6   rq   Úpropertyrv   rz   r9   r   r&   r   rk   rk   º   s    † òð ñ0ó ð0õ7r&   rk   c                 ó  • U R                   R                  R                  S5      S   n [        R                  U   $ ! [
         a@  n[        [        R                  R                  5       5      n[        SU SU < S35      UeSnAff = f)zŒGet the adapter that knows how to handle such container.

See :class:`sklearn.utils._set_output.ContainerAdapterProtocol` for more
details.
Ú.r   zZThe container does not have a registered adapter in scikit-learn. Available adapters are: z" while the container provided is: N)	Ú	__class__r4   ÚsplitÚADAPTERS_MANAGERro   ÚKeyErrorÚlistÚkeysÚ
ValueError)Ú	containerÚmodule_namer   Úavailable_adapterss       r   Ú_get_adapter_from_containerr‰   Ë   s”   € ð ×%Ñ%×0Ñ0×6Ñ6°sÓ;¸AÑ>€KðÜ×(Ñ(¨Ñ5Ð5øÜó Ü!Ô"2×";Ñ";×"@Ñ"@Ó"BÓCÐÜð'Ø'9Ð&:ð ;Ø%™=¨ð+ó
ð ð		ûðús   ª= ½
BÁ;BÂBc                 óf   • [        X5      S   n [        R                  U   $ ! [         a     gf = f)zGet container adapter.ÚdenseN)Ú_get_output_configr�   ro   r‚   )ÚmethodÚ	estimatorÚdense_configs      r   Ú_get_container_adapterr�   Ý   s9   € ä% fÓ8¸ÑA€LðÜ×(Ñ(¨Ñ6Ð6øÜó Ùðús   �# £
0¯0c                 ó¶   • [        US0 5      nX;   a  X    nO[        5       U  S3   n[        R                  nX4;  a  [	        S[        U5       SU 35      eSU0$ )aâ  Get output config based on estimator and global configuration.

Parameters
----------
method : {"transform"}
    Estimator's method for which the output container is looked up.

estimator : estimator instance or None
    Estimator to get the output configuration from. If `None`, check global
    configuration is used.

Returns
-------
config : dict
    Dictionary with keys:

    - "dense": specifies the dense container for `method`. This can be
      `"default"` or `"pandas"`.
Ú_sklearn_output_configÚ_outputzoutput config must be in z, got r‹   )Úgetattrr   r�   rv   r…   Úsorted)r�   rŽ   Úest_sklearn_output_configr�   rv   s        r   rŒ   rŒ   æ   sx   € ô( !(¨	Ð3KÈRÓ PÐØÓ*Ø0Ñ8‰ä!“| v h¨gÐ$6Ñ7ˆä(×:Ñ:ÐØÓ,ÜØ'¬Ð/@Ó(AÐ'BÀ&ÈÈÐWó
ð 	
ð �\Ð"Ð"r&   c                 ó  • [        X5      nUS   S:X  d  [        U5      (       d  U$ US   n[        U5      (       a  [        SUR	                  5        S35      e[
        R                  U   nUR                  UUUR                  S9$ )aŽ  Wrap output with container based on an estimator's or global config.

Parameters
----------
method : {"transform"}
    Estimator's method to get container output for.

data_to_wrap : {ndarray, dataframe}
    Data to wrap with container.

original_input : {ndarray, dataframe}
    Original input of function.

estimator : estimator instance
    Estimator with to get the output configuration from.

Returns
-------
output : {ndarray, dataframe}
    If the output config is "default" or the estimator is not configured
    for wrapping return `data_to_wrap` unchanged.
    If the output config is "pandas", return `data_to_wrap` as a pandas
    DataFrame.
r‹   rt   zmThe transformer outputs a scipy sparse matrix. Try to set the transformer output to a dense array or disable z- output with set_output(transform='default').r   )	rŒ   Ú_auto_wrap_is_configuredr   r…   Ú
capitalizer�   ro   r#   Úget_feature_names_out)r�   Údata_to_wrapÚoriginal_inputrŽ   Úoutput_configr�   ry   s          r   Ú_wrap_data_with_containerrž   	  s¥   € ô2 ' vÓ9€Mà�WÑ Ó*Ô2JÈ9×2UÑ2UØÐà  Ñ)€LÜ�×ÑÜðMà×&Ñ&Ó(Ð)Ð)VðXó
ð 	
ô ×'Ñ'¨Ñ5€GØ×#Ñ#ØØØ×/Ñ/ð $ð ð r&   c                 ó4   ^ ^• [        T 5      U U4S j5       nU$ )z@Wrapper used by `_SetOutputMixin` to automatically wrap methods.c                 óú   >• T" X/UQ70 UD6n[        U[        5      (       aM  [        TUS   X5      /USS  Q7n[        [	        U5      S5      (       a  [	        U5      R                  U5      $ U$ [        TXAU 5      $ )Nr   rN   Ú_make)rA   Útuplerž   ÚhasattrÚtyper¡   )r   r(   ÚargsÚkwargsr›   Úreturn_tupleÚfr�   s         €€r   ÚwrappedÚ$_wrap_method_output.<locals>.wrapped:  s‹   ø€ á˜Ð2 4Ò2¨6Ñ2ˆÜ�l¤E×*Ñ*ô *¨&°,¸q±/À1ÓKðà˜a˜bÐ!ñˆLô ”t˜LÓ)¨7×3Ñ3Ü˜LÓ)×/Ñ/°Ó=Ð=ØÐä(¨°À$ÓGÐGr&   r   )r¨   r�   r©   s   `` r   Ú_wrap_method_outputr«   7  s$   ù€ ô ˆ1ƒXõHó ðHð  €Nr&   c                 ó\   • [        U S[        5       5      n[        U S5      =(       a    SU;   $ )zºReturn True if estimator is configured for auto-wrapping the transform method.

`_SetOutputMixin` sets `_sklearn_auto_wrap_output_keys` to `set()` if auto wrapping
is manually disabled.
Ú_sklearn_auto_wrap_output_keysrš   Ú	transform)r”   ru   r£   )rŽ   Úauto_wrap_output_keyss     r   r˜   r˜   N  s6   € ô $ IÐ/OÔQTÓQVÓWÐä�	Ð2Ó3÷ 	1ØÐ0Ñ0ðr&   c                   óT   ^ • \ rS rSrSrSU 4S jjr\" \5      SS.S j5       rSr	U =r
$ )	Ú_SetOutputMixini[  aH  Mixin that dynamically wraps methods to return container based on config.

Currently `_SetOutputMixin` wraps `transform` and `fit_transform` and configures
it based on `set_output` of the global configuration.

`set_output` is only defined if `get_feature_names_out` is defined and
`auto_wrap_output_keys` is the default value.
©r®   c                 ó´  >• [         TU ]  " S0 UD6  [        U[        5      (       d  Ub  [	        S5      eUc  [        5       U l        g SSS.n[        5       U l        UR                  5        Hi  u  pE[        X5      (       a  XQ;  a  M  U R                  R                  U5        X@R                  ;  a  MH  [        [        X5      U5      n[        XU5        Mk     g )Nz6auto_wrap_output_keys must be None or a tuple of keys.r®   )r®   Úfit_transformr   )ÚsuperÚ__init_subclass__rA   r¢   r…   ru   r­   Úitemsr£   ÚaddÚ__dict__r«   r”   Úsetattr)Úclsr¯   r¦   Úmethod_to_keyr�   ÚkeyÚwrapped_methodr   s          €r   r¶   Ú!_SetOutputMixin.__init_subclass__e  sÉ   ø€ Ü‰Ò!Ñ+ FÒ+ô
 Ð,¬e×4Ñ4Ð8MÑ8UäÐUÓVÐVà Ñ(Ü14³ˆCÔ.Øð %Ø(ñ
ˆô .1«UˆÔ*à(×.Ñ.Ö0‰KˆFÜ˜3×'Ñ'¨3Ó+KÙØ×.Ñ.×2Ñ2°3Ô7ð Ÿ\™\Ó)ÙÜ0´¸Ó1EÀsÓKˆNÜ�C Ö0ò 1r&   Nc                ó\   • Uc  U $ [        U S5      (       d  0 U l        XR                  S'   U $ )a>  Set output container.

See :ref:`sphx_glr_auto_examples_miscellaneous_plot_set_output.py`
for an example on how to use the API.

Parameters
----------
transform : {"default", "pandas", "polars"}, default=None
    Configure output of `transform` and `fit_transform`.

    - `"default"`: Default output format of a transformer
    - `"pandas"`: DataFrame output
    - `"polars"`: Polars output
    - `None`: Transform configuration is unchanged

    .. versionadded:: 1.4
        `"polars"` option was added.

Returns
-------
self : estimator instance
    Estimator instance.
r’   r®   )r£   r’   )r   r®   s     r   Ú
set_outputÚ_SetOutputMixin.set_output…  s8   € ð2 ÑØˆKä�tÐ5×6Ñ6Ø*,ˆDÔ'à3<×#Ñ# KÑ0Øˆr&   )r’   )r²   )r3   r4   r5   r6   Ú__doc__r¶   r	   r˜   rÁ   r9   Ú__classcell__)r   s   @r   r±   r±   [  s+   ø† ñ÷1ñ@ Ð*Ó+Ø&*ô ó ,ör&   r±   r²   c                óÄ   • [        U S5      =(       d    [        U S5      =(       a    USLnU(       d  g[        U S5      (       d  [        SU  S35      eU R                  US9$ )aí  Safely call estimator.set_output and error if it not available.

This is used by meta-estimators to set the output for child estimators.

Parameters
----------
estimator : estimator instance
    Estimator instance.

transform : {"default", "pandas", "polars"}, default=None
    Configure output of the following estimator's methods:

    - `"transform"`
    - `"fit_transform"`

    If `None`, this operation is a no-op.

Returns
-------
estimator : estimator instance
    Estimator instance.
r®   r´   NrÁ   zUnable to configure output for z' because `set_output` is not available.r²   )r£   r…   rÁ   )rŽ   r®   Úset_output_for_transforms      r   Ú_safe_set_outputrÇ   ¨  sw   € ô.  ' y°+Ó>÷  Ü�	˜?Ó+×E°	ÀÐ0Eð ö $ð 	ä�9˜l×+Ñ+ÜØ-¨i¨[ð 9 ð  ó
ð 	
ð ×Ñ¨)ÐÐ4Ð4r&   r   )r   Ú	functoolsr   Útypingr   r   Únumpyr]   Úscipy.sparser   Úsklearn._configr   Úsklearn.utils._available_ifr	   r   r   r   r;   rV   rk   r�   rz   r‰   r�   rŒ   rž   r«   r˜   r±   rÇ   r   r&   r   Ú<module>rÎ      sÆ   ðó Ý ß .ã Ý !å &Ý 4òòð ôJ˜xó Jó ðJ÷Z'%ñ '%÷T/ñ /÷>	7ñ 	7ñ ,Ó-Ð Ø × Ñ ™-›/Ô *Ø × Ñ ™-›/Ô *òô$ô #òF+ò\ò.
÷Jñ JðZ .2ö $5r&   