§
    qŠtjâ:  ã                   óÒ   — d dl Z d dlZd dlmZmZmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZmZ d dlmZmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ dgZ G d„ dee¦  «        Z dS )é    N)ÚBaseEstimatorÚRegressorMixinÚ_fit_contextÚclone)ÚNotFittedError)ÚLinearRegression)ÚFunctionTransformer)ÚBunchÚ_safe_indexingÚcheck_array)ÚMetadataRouterÚMethodMappingÚ_routing_enabledÚprocess_routing)Ú
HasMethods)Ú_VisualBlock)Úget_tags)Úcheck_is_fittedÚTransformedTargetRegressorc                   óî   ‡ — e Zd ZU dZ eddg¦  «        dg ed¦  «        dgedgedgdgdœZeed<   	 ddddd	d
œd„Z	d„ Z
 ed¬¦  «        d„ ¦   «         Zd„ Zˆ fd„Zed„ ¦   «         Zd„ Zdd„Zd„ Zˆ xZS )r   a  Meta-estimator to regress on a transformed target.

    Useful for applying a non-linear transformation to the target `y` in
    regression problems. This transformation can be given as a Transformer
    such as the :class:`~sklearn.preprocessing.QuantileTransformer` or as a
    function and its inverse such as `np.log` and `np.exp`.

    The computation during :meth:`fit` is::

        regressor.fit(X, func(y))

    or::

        regressor.fit(X, transformer.transform(y))

    The computation during :meth:`predict` is::

        inverse_func(regressor.predict(X))

    or::

        transformer.inverse_transform(regressor.predict(X))

    Read more in the :ref:`User Guide <transformed_target_regressor>`.

    .. versionadded:: 0.20

    Parameters
    ----------
    regressor : object, default=None
        Regressor object such as derived from
        :class:`~sklearn.base.RegressorMixin`. This regressor will
        automatically be cloned each time prior to fitting. If `regressor is
        None`, :class:`~sklearn.linear_model.LinearRegression` is created and used.

    transformer : object, default=None
        Estimator object such as derived from
        :class:`~sklearn.base.TransformerMixin`. Cannot be set at the same time
        as `func` and `inverse_func`. If `transformer is None` as well as
        `func` and `inverse_func`, the transformer will be an identity
        transformer. Note that the transformer will be cloned during fitting.
        Also, the transformer is restricting `y` to be a numpy array.

    func : function, default=None
        Function to apply to `y` before passing to :meth:`fit`. Cannot be set
        at the same time as `transformer`. If `func is None`, the function used will be
        the identity function. If `func` is set, `inverse_func` also needs to be
        provided. The function needs to return a 2-dimensional array.

    inverse_func : function, default=None
        Function to apply to the prediction of the regressor. Cannot be set at
        the same time as `transformer`. The inverse function is used to return
        predictions to the same space of the original training labels. If
        `inverse_func` is set, `func` also needs to be provided. The inverse
        function needs to return a 2-dimensional array.

    check_inverse : bool, default=True
        Whether to check that `transform` followed by `inverse_transform`
        or `func` followed by `inverse_func` leads to the original targets.

    Attributes
    ----------
    regressor_ : object
        Fitted regressor.

    transformer_ : object
        Transformer used in :meth:`fit` and :meth:`predict`.

    n_features_in_ : int
        Number of features seen during :term:`fit`. Only defined if the
        underlying regressor exposes such an attribute when fit.

        .. versionadded:: 0.24

    feature_names_in_ : ndarray of shape (`n_features_in_`,)
        Names of features seen during :term:`fit`. Defined only when `X`
        has feature names that are all strings.

        .. versionadded:: 1.0

    See Also
    --------
    sklearn.preprocessing.FunctionTransformer : Construct a transformer from an
        arbitrary callable.

    Notes
    -----
    Internally, the target `y` is always converted into a 2-dimensional array
    to be used by scikit-learn transformers. At the time of prediction, the
    output will be reshaped to a have the same number of dimensions as `y`.

    Examples
    --------
    >>> import numpy as np
    >>> from sklearn.linear_model import LinearRegression
    >>> from sklearn.compose import TransformedTargetRegressor
    >>> tt = TransformedTargetRegressor(regressor=LinearRegression(),
    ...                                 func=np.log, inverse_func=np.exp)
    >>> X = np.arange(4).reshape(-1, 1)
    >>> y = np.exp(2 * X).ravel()
    >>> tt.fit(X, y)
    TransformedTargetRegressor(...)
    >>> tt.score(X, y)
    1.0
    >>> tt.regressor_.coef_
    array([2.])

    For a more detailed example use case refer to
    :ref:`sphx_glr_auto_examples_compose_plot_transformed_target.py`.
    ÚfitÚpredictNÚ	transformÚboolean©Ú	regressorÚtransformerÚfuncÚinverse_funcÚcheck_inverseÚ_parameter_constraintsT)r   r   r   r    c                óL   — || _         || _        || _        || _        || _        d S ©Nr   )Úselfr   r   r   r   r    s         úU/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sklearn/compose/_target.pyÚ__init__z#TransformedTargetRegressor.__init__“   s0   € ð #ˆŒØ&ˆÔØˆŒ	Ø(ˆÔØ*ˆÔÐÐó    c           	      ó   — | j         �| j        €| j        �t          d¦  «        ‚| j         �t	          | j         ¦  «        | _        n…| j        �| j        �| j        €.| j        �'| j        €dnd\  }}t          d|› d|› d|› d�¦  «        ‚t          | j        | j        d	| j        ¬
¦  «        | _        | j                             d¬¦  «         | j         	                    |¦  «         | j        r t          ddt          d|j        d         dz  ¦  «        ¦  «        }t          ||¦  «        }| j                             |¦  «        }t          j        || j                             |¦  «        ¦  «        st%          j        dt(          ¦  «         dS dS dS )z¢Check transformer and fit transformer.

        Create the default transformer, fit it and make additional inverse
        check on a subset (optional).

        NzE'transformer' and functions 'func'/'inverse_func' cannot both be set.)r   r   )r   r   zWhen 'z' is provided, 'z' must also be provided. If zU is supposed to be the default, you need to explicitly pass it the identity function.T)r   r   Úvalidater    Údefault)r   é   r   é
   z—The provided functions or transformer are not strictly inverse of each other. If you are sure you want to proceed regardless, set 'check_inverse=False')r   r   r   Ú
ValueErrorr   Útransformer_r	   r    Ú
set_outputr   ÚsliceÚmaxÚshaper   r   ÚnpÚallcloseÚinverse_transformÚwarningsÚwarnÚUserWarning)r$   ÚyÚlacking_paramÚexisting_paramÚidx_selectedÚy_selÚy_sel_ts          r%   Ú_fit_transformerz+TransformedTargetRegressor._fit_transformer¢   sõ  € ð ÔÐ'ØŒIÐ! TÔ%6Ð%BåØWñô ð ð ÔÐ)Ý % dÔ&6Ñ 7Ô 7ˆDÔÐà”	Ð%¨$Ô*;Ð*CØ”	Ð! dÔ&7Ð&Cð ”yÐ(ð -Ð,à1ñ .�˜~õ
 !ðM˜^ð Mð M¸]ð Mð MØ(5ðMð Mð Mñô ð õ
 !4Ø”YØ!Ô.ØØ"Ô0ð	!ñ !ô !ˆDÔð Ô×(Ò(°9Ð(Ñ=Ô=Ð=ð
 	Ô×Ò˜aÑ Ô Ð ØÔð 	Ý   t­S°°A´G¸A´JÀ"Ñ4DÑ-EÔ-EÑFÔFˆLÝ" 1 lÑ3Ô3ˆEØÔ'×1Ò1°%Ñ8Ô8ˆGÝ”;˜u dÔ&7×&IÒ&IÈ'Ñ&RÔ&RÑSÔSð 	Ý”ð6õ
  ñô ð ð ð ð	ð 	ð	ð 	r'   F)Úprefer_skip_nested_validationc           	      óÜ  — |€t          d| j        j        › d�¦  «        ‚t          |dddddd¬¦  «        }|j        | _        |j        d	k    r|                     d
d	¦  «        }n|}|                      |¦  «         | j         	                    |¦  «        }|j        dk    r2|j
        d	         d	k    r!| j        d	k    r|                     d	¬¦  «        }|                      d¬¦  «        | _        t          ¦   «         rt          | dfi |¤Ž}nt!          t!          |¬¦  «        ¬¦  «        } | j        j        ||fi |j        j        ¤Ž t'          | j        d¦  «        r| j        j        | _        | S )a˜  Fit the model according to the given training data.

        Parameters
        ----------
        X : {array-like, sparse matrix} of shape (n_samples, n_features)
            Training vector, where `n_samples` is the number of samples and
            `n_features` is the number of features.

        y : array-like of shape (n_samples,)
            Target values.

        **fit_params : dict
            - If `enable_metadata_routing=False` (default): Parameters directly passed
              to the `fit` method of the underlying regressor.

            - If `enable_metadata_routing=True`: Parameters safely routed to the `fit`
              method of the underlying regressor.

            .. versionchanged:: 1.6
                See :ref:`Metadata Routing User Guide <metadata_routing>` for
                more details.

        Returns
        -------
        self : object
            Fitted estimator.
        NzThis z= estimator requires y to be passed, but the target y is None.r9   FTÚnumeric)Ú
input_nameÚaccept_sparseÚensure_all_finiteÚ	ensure_2dÚdtypeÚallow_ndr+   éÿÿÿÿé   ©Úaxis)Ú	get_cloner   )r   ©r   Úfeature_names_in_)r-   Ú	__class__Ú__name__r   ÚndimÚ_training_dimÚreshaper?   r.   r   r2   ÚsqueezeÚ_get_regressorÚ
regressor_r   r   r
   r   r   ÚhasattrrO   )r$   ÚXr9   Ú
fit_paramsÚy_2dÚy_transÚrouted_paramss          r%   r   zTransformedTargetRegressor.fitÝ   s®  € ð@ ˆ9ÝðE˜œÔ/ð Eð Eð Eñô ð õ ØØØØ"ØØØð
ñ 
ô 
ˆð œVˆÔð Œ6�QŠ;ˆ;Ø—9’9˜R Ñ#Ô#ˆDˆDàˆDØ×Ò˜dÑ#Ô#Ð#ð Ô#×-Ò-¨dÑ3Ô3ˆð Œ<˜1ÒÐ ¤¨qÔ!1°QÒ!6Ð!6¸4Ô;MÐQRÒ;RÐ;RØ—o’o¨1�oÑ-Ô-ˆGà×-Ò-¸Ð-Ñ=Ô=ˆŒÝÑÔð 	CÝ+¨D°%ÐFÐF¸:ÐFÐFˆMˆMå!­E°jÐ,AÑ,AÔ,AÐBÑBÔBˆMàˆŒÔ˜A˜wÐFÐF¨-Ô*AÔ*EÐFÐFÐFå�4”?Ð$7Ñ8Ô8ð 	GØ%)¤_Ô%FˆDÔ"àˆr'   c                 óö  — t          | ¦  «         t          ¦   «         rt          | dfi |¤Ž}nt          t          |¬¦  «        ¬¦  «        } | j        j        |fi |j        j        ¤Ž}|j        dk    r/| j         	                    | 
                    dd¦  «        ¦  «        }n| j         	                    |¦  «        }| j        dk    r2|j        dk    r'|j        d         dk    r|                     d¬¦  «        }|S )a¥  Predict using the base regressor, applying inverse.

        The regressor is used to predict and the `inverse_func` or
        `inverse_transform` is applied before returning the prediction.

        Parameters
        ----------
        X : {array-like, sparse matrix} of shape (n_samples, n_features)
            Samples.

        **predict_params : dict of str -> object
            - If `enable_metadata_routing=False` (default): Parameters directly passed
              to the `predict` method of the underlying regressor.

            - If `enable_metadata_routing=True`: Parameters safely routed to the
              `predict` method of the underlying regressor.

            .. versionchanged:: 1.6
                See :ref:`Metadata Routing User Guide <metadata_routing>`
                for more details.

        Returns
        -------
        y_hat : ndarray of shape (n_samples,)
            Predicted values.
        r   )r   rN   r+   rI   rJ   rK   )r   r   r   r
   rW   r   r   rR   r.   r5   rT   rS   r2   rU   )r$   rY   Úpredict_paramsr]   ÚpredÚ
pred_transs         r%   r   z"TransformedTargetRegressor.predict-  s  € õ6 	˜ÑÔÐÝÑÔð 	KÝ+¨D°)ÐNÐN¸~ÐNÐNˆMˆMå!­E¸.Ð,IÑ,IÔ,IÐJÑJÔJˆMà&ˆtŒÔ& qÐLÐL¨MÔ,CÔ,KÐLÐLˆØŒ9˜Š>ˆ>ØÔ*×<Ò<¸T¿\º\È"ÈaÑ=PÔ=PÑQÔQˆJˆJàÔ*×<Ò<¸TÑBÔBˆJàÔ !Ò#Ð#Ø” 1Ò$Ð$ØÔ  Ô# qÒ(Ð(à#×+Ò+°Ð+Ñ3Ô3ˆJàÐr'   c                 ó  •— |                       ¦   «         }t          ¦   «                              ¦   «         }d|j        _        t          |¦  «        j        j        |j        _        t          |¦  «        j        j	        |j        _	        |S )NT)
rV   ÚsuperÚ__sklearn_tags__Úregressor_tagsÚ
poor_scorer   Ú
input_tagsÚsparseÚtarget_tagsÚmulti_output)r$   r   ÚtagsrP   s      €r%   rd   z+TransformedTargetRegressor.__sklearn_tags__\  sj   ø€ Ø×'Ò'Ñ)Ô)ˆ	Ý‰wŒw×'Ò'Ñ)Ô)ˆØ)-ˆÔÔ&Ý!)¨)Ñ!4Ô!4Ô!?Ô!FˆŒÔÝ(0°Ñ(;Ô(;Ô(GÔ(TˆÔÔ%Øˆr'   c                 óº   — 	 t          | ¦  «         n?# t          $ r2}t          d                     | j        j        ¦  «        ¦  «        |‚d}~ww xY w| j        j        S )z+Number of features seen during :term:`fit`.z*{} object has no n_features_in_ attribute.N)r   r   ÚAttributeErrorÚformatrP   rQ   rW   Ún_features_in_)r$   Únfes     r%   ro   z)TransformedTargetRegressor.n_features_in_d  sv   € ð
	Ý˜DÑ!Ô!Ð!Ð!øÝð 	ð 	ð 	Ý Ø<×CÒCØ”NÔ+ñô ñô ð ð	øøøøð	øøøð ŒÔ-Ð-s   ‚ ’
Aœ-A	Á	Ac                 óà   — t          | ¬¦  «                             |                      ¦   «         t          ¦   «                              dd¬¦  «                             dd¬¦  «        ¬¦  «        }|S )aj  Get metadata routing of this object.

        Please check :ref:`User Guide <metadata_routing>` on how the routing
        mechanism works.

        .. versionadded:: 1.6

        Returns
        -------
        routing : MetadataRouter
            A :class:`~sklearn.utils.metadata_routing.MetadataRouter` encapsulating
            routing information.
        )Úownerr   )ÚcallerÚcalleer   )r   Úmethod_mapping)r   ÚaddrV   r   )r$   Úrouters     r%   Úget_metadata_routingz/TransformedTargetRegressor.get_metadata_routingt  sh   € õ   dÐ+Ñ+Ô+×/Ò/Ø×)Ò)Ñ+Ô+Ý(™?œ?ßŠS˜ eˆSÑ,Ô,ßŠS˜	¨)ˆSÑ4Ô4ð	 0ñ 
ô 
ˆð ˆr'   c                 óf   — | j         €t          ¦   «         S |rt          | j         ¦  «        n| j         S r#   )r   r   r   )r$   rM   s     r%   rV   z)TransformedTargetRegressor._get_regressorŠ  s2   € ØŒ>Ð!Ý#Ñ%Ô%Ð%à(1ÐE�u�T”^Ñ$Ô$Ð$°t´~ÐEr'   c                 óº   — t          | d¦  «        r| j        n|                      ¦   «         }t          d|gd|j        j        › �gt          |¦  «        gd¬¦  «        S )NrW   Úserialzregressor: T)ÚnamesÚname_detailsÚdash_wrapped)rX   rW   rV   r   rP   rQ   Ústr)r$   r   s     r%   Ú_sk_visual_block_z,TransformedTargetRegressor._sk_visual_block_�  so   € å& t¨\Ñ:Ô:ÐUˆDŒOˆOÀ×@SÒ@SÑ@UÔ@Uð 	õ ØØˆKØ? Ô!4Ô!=Ð?Ð?Ð@Ý˜i™.œ.Ð)Øð
ñ 
ô 
ð 	
r'   r#   )F)rQ   Ú
__module__Ú__qualname__Ú__doc__r   Úcallabler!   ÚdictÚ__annotations__r&   r?   r   r   r   rd   Úpropertyro   rx   rV   r€   Ú__classcell__)rP   s   @r%   r   r      s}  ø€ € € € € € ðmð mð` !�j %¨Ð!3Ñ4Ô4°dÐ;Ø"˜
 ;Ñ/Ô/°Ð6Ø˜4Ð Ø! 4Ð(Ø#˜ð$ð $Ð˜Dð ð ñ ð ð+ð ØØØð+ð +ð +ð +ð +ð9ð 9ð 9ðv €\à&+ðñ ô ðJð Jñ	ô ðJðX-ð -ð -ð^ð ð ð ð ð ð.ð .ñ „Xð.ðð ð ð,Fð Fð Fð Fð

ð 

ð 

ð 

ð 

ð 

ð 

r'   )!r6   Únumpyr3   Úsklearn.baser   r   r   r   Úsklearn.exceptionsr   Úsklearn.linear_modelr   Úsklearn.preprocessingr	   Úsklearn.utilsr
   r   r   Ú sklearn.utils._metadata_requestsr   r   r   r   Úsklearn.utils._param_validationr   Ú"sklearn.utils._repr_html.estimatorr   Úsklearn.utils._tagsr   Úsklearn.utils.validationr   Ú__all__r   © r'   r%   ú<module>r–      sb  ðð €€€à Ð Ð Ð à KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ -Ð -Ð -Ð -Ð -Ð -Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <ðð ð ð ð ð ð ð ð ð ð ð ð 7Ð 6Ð 6Ð 6Ð 6Ð 6Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø (Ð (Ð (Ð (Ð (Ð (Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4à'Ð
(€ð
ð 
ð 
ð 
ð 
 °ñ 
ô 
ð 
ð 
ð 
r'   