
    -i9                     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     L/var/www/html/venv/lib/python3.13/site-packages/sklearn/utils/_set_output.pycheck_library_installedr      sR    &&w// +G9K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)zReturn 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)zRename 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)zStack 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/   r3   __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)
PandasAdapterq   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	DataFramerA   Seriesr/   )r!   r"   r#   r   r$   pdrA   s          r   r%   PandasAdapter.create_containert   s    $X.g&j<<@@
 (LL11 Jryy(ABB"(( ||HG|LH&&x99r(   c                 B    [        S5      n[        XR                  5      $ )Nr?   r   rC   rD   )r!   r*   rF   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?   r
   )axisr   concat)r!   r2   rF   s      r   r3   PandasAdapter.hstack   s    $X.yy!y$$r(   r    NT
r5   r6   r7   r8   r   r%   r+   r/   r3   r;   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$ )NrY   row)schemaorient)r   r   rC   npndarraytolistrD   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      $ )NrY   rI   )r!   r*   ra   s      r   r+   $PolarsAdapter.is_supported_container   rK   r(   c                     X!l         U$ r   r   r.   s      r   r/   PolarsAdapter.rename_columns   rN   r(   c                 8    [        S5      nUR                  USS9$ )NrY   
horizontal)howrQ   )r!   r2   ra   s      r   r3   PolarsAdapter.hstack   s    $X.yyy..r(   r    NrT   rU   r    r(   r   rW   rW      s    M+/r(   rW   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)setrp   rq   s    r   supported_outputs*ContainerAdaptersManager.supported_outputs   s    {S///r(   c                 4    XR                   UR                  '   g r   )rp   r   )r!   adapters     r   register!ContainerAdaptersManager.register   s    /6g++,r(   ro   N)	r5   r6   r7   r8   rr   propertyrw   r{   r;   r    r(   r   rl   rl      s      0 07r(   rl   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)zGet 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__r6   splitADAPTERS_MANAGERrp   KeyErrorlistkeys
ValueError)	containermodule_namer   available_adapterss       r   _get_adapter_from_containerr      s     %%0066s;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   rp   r   )method	estimatordense_configs      r   _get_container_adapterr      s9    %f8AL((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   rw   r   sorted)r   r   est_sklearn_output_configr   rw   s        r   r   r      sx    ( !(	3KR P*08!|vhg$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   ru   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   rp   r%   get_feature_names_out)r   data_to_wraporiginal_inputr   output_configr   rz   s          r   _wrap_data_with_containerr   	  s    2 'v9MW*2J92U2U )LM&&())VX
 	
 ''5G##// $  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   r
   _make)rC   tupler   hasattrtyper   )r!   r*   argskwargsr   return_tuplefr   s         r   wrapped$_wrap_method_output.<locals>.wrapped:  s    24262lE** *&,q/1Kab!L tL)733L)//==($GGr(   r   )r   r   r   s   `` r   _wrap_method_outputr   7  s$     1XH H  Nr(   c                 \    [        U S[        5       5      n[        U S5      =(       a    SU;   $ )zReturn 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   rv   r   )r   auto_wrap_output_keyss     r   r   r   N  s6     $I/OQTQV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__rC   r   r   rv   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48M8UUVV (14C. %(
 .1U*(..0KF3''3+K..2237 \\)01EsKN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   )r5   r6   r7   r8   __doc__r   r   r   r   r;   __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  $ 	9l++-i[ 9   
 	
 )44r(   r   )r   	functoolsr   typingr   r   numpyr^   scipy.sparser   _configr	   _available_ifr   r   r   r   r=   rW   rl   r   r{   r   r   r   r   r   r   r   r   r    r(   r   <module>r      s      .  !   ' Jx J JZ'% '%T/ />	7 	7 ,-    -/ *   -/ *$ #F+\.
J JZ .2 $5r(   