ó
    ¦ñ:iü1  ã                   ó¨   • S SK r S SKrSSKJrJrJrJr  SSKJ	r	  SSK
Jr  SSKJrJr  SSKJr  SSKJr  SS	KJrJr  SS
KJr  S/r " S S\\\5      rg)é    Né   )ÚBaseEstimatorÚRegressorMixinÚ_fit_contextÚclone)ÚNotFittedError)ÚFunctionTransformer)Ú_safe_indexingÚcheck_array)Ú
HasMethods)Ú
_safe_tags)Ú_raise_for_unsupported_routingÚ_RoutingNotSupportedMixin)Úcheck_is_fittedÚTransformedTargetRegressorc                   ó¶   • \ rS rSr% Sr\" SS/5      S/\" S5      S/\S/\S/S/S.r\\	S	'    SSSSS
S.S jjr
S r\" SS9S 5       rS rS r\S 5       rSrg)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                ó@   • Xl         X l        X0l        X@l        XPl        g ©Nr   )Úselfr   r   r   r   r   s         ÚZ/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/sklearn/compose/_target.pyÚ__init__Ú#TransformedTargetRegressor.__init__’   s    € ð #ŒØ&ÔØŒ	Ø(ÔØ*Õó    c           	      ó”  • U R                   b%  U R                  c  U R                  b  [        S5      eU R                   b  [	        U R                   5      U l        O¤U R                  b  U R                  b  U R                  c5  U R                  b(  U R                  c  SOSu  p#[        SU SU SU S35      e[        U R                  U R                  S	U R                  S
9U l        U R
                  R                  SS9  U R
                  R                  U5        U R                  (       až  [        SS[        SUR                  S   S-  5      5      n[        X5      nU R
                  R                  U5      n[        R                   " XPR
                  R#                  U5      5      (       d  [$        R&                  " S[(        5        ggg)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_transformerÚ+TransformedTargetRegressor._fit_transformer¡   s¶  € ð ×ÑÑ'Ø�I‰IÑ! T×%6Ñ%6Ñ%BäØWóð ð ×ÑÑ)Ü % d×&6Ñ&6Ó 7ˆDÕà—	‘	Ñ%¨$×*;Ñ*;Ñ*CØ—	‘	Ñ! d×&7Ñ&7Ñ&Cð —y‘yÑ(ñ -à1ñ .�ô
 !Ø˜^Ð,Ð,<¸]¸Oð L(Ø(5 ð 7MðMóð ô
 !4Ø—Y‘YØ!×.Ñ.ØØ"×0Ñ0ñ	!ˆDÔð ×Ñ×(Ñ(°9Ð(Ñ=ð
 	×Ñ×Ñ˜aÔ Ø××Ü   t¬S°°A·G±G¸A±JÀ"Ñ4DÓ-EÓFˆLÜ" 1Ó3ˆEØ×'Ñ'×1Ñ1°%Ó8ˆGÜ—;’;˜u×&7Ñ&7×&IÑ&IÈ'Ó&R×SÑSÜ—’ð6ô
  õð Tð	 r%   F)Úprefer_skip_nested_validationc           
      óÌ  • [        U S40 UD6  Uc#  [        SU R                  R                   S35      e[	        USSSSSSS9nUR
                  U l        UR
                  S	:X  a  UR                  S
S	5      nOUnU R                  U5        U R                  R                  U5      nUR
                  S:X  a"  UR                  S	   S	:X  a  UR                  S	S9nU R                  c  SSKJn  U" 5       U l        O[#        U R                  5      U l        U R                   R$                  " X40 UD6  ['        U R                   S5      (       a  U R                   R(                  U l        U $ )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
    Parameters passed to the `fit` method of the underlying
    regressor.

Returns
-------
self : object
    Fitted estimator.
r   zThis z= estimator requires y to be passed, but the target y is None.r7   FTÚnumeric)Ú
input_nameÚaccept_sparseÚforce_all_finiteÚ	ensure_2dÚdtypeÚallow_ndr)   éÿÿÿÿr   ©Úaxis©ÚLinearRegressionÚfeature_names_in_)r   r+   Ú	__class__Ú__name__r   ÚndimÚ_training_dimÚreshaper=   r,   r   r0   Úsqueezer   Úlinear_modelrL   Ú
regressor_r   r   ÚhasattrrM   )r!   ÚXr7   Ú
fit_paramsÚy_2dÚy_transrL   s          r"   r   ÚTransformedTargetRegressor.fitÜ   sO  € ô2 	' t¨UÑA°jÒAØ‰9ÜØ˜Ÿ™×/Ñ/Ð0ð 1Eð Eóð ô ØØØØ!ØØØñ
ˆð ŸV™VˆÔð �6‰6�Q‹;Ø—9‘9˜R Ó#‰DàˆDØ×Ñ˜dÔ#ð ×#Ñ#×-Ñ-¨dÓ3ˆð �<‰<˜1Ó §¡¨qÑ!1°QÓ!6Ø—o‘o¨1�oÐ-ˆGà�>‰>Ñ!Ý7á.Ó0ˆD�Oä# D§N¡NÓ3ˆDŒOà�‰×Ò˜AÑ5¨*Ò5ä�4—?‘?Ð$7×8Ñ8Ø%)§_¡_×%FÑ%FˆDÔ"àˆr%   c                 óˆ  • [        U 5        U R                  R                  " U40 UD6nUR                  S:X  a,  U R                  R                  UR                  SS5      5      nOU R                  R                  U5      nU R                  S:X  a2  UR                  S:X  a"  UR                  S   S:X  a  UR                  SS9nU$ )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
    Parameters passed to the `predict` method of the underlying
    regressor.

Returns
-------
y_hat : ndarray of shape (n_samples,)
    Predicted values.
r)   rH   r   rI   )
r   rU   r   rP   r,   r3   rR   rQ   r0   rS   )r!   rW   Úpredict_paramsÚpredÚ
pred_transs        r"   r   Ú"TransformedTargetRegressor.predict'  s­   € ô( 	˜ÔØ�‰×&Ò& qÑ;¨NÑ;ˆØ�9‰9˜‹>Ø×*Ñ*×<Ñ<¸T¿\¹\È"ÈaÓ=PÓQ‰Jà×*Ñ*×<Ñ<¸TÓBˆJà×Ñ !Ó#Ø—‘ 1Ó$Ø× Ñ  Ñ# qÓ(à#×+Ñ+°Ð+Ð3ˆJàÐr%   c                 óT   • U R                   nUc  SSKJn  U" 5       nS[        USS9S.$ )Nr   rK   TÚmultioutput)Úkey)Ú
poor_scorerb   )r   rT   rL   r   )r!   r   rL   s      r"   Ú
_more_tagsÚ%TransformedTargetRegressor._more_tagsJ  s5   € Ø—N‘Nˆ	ØÑÝ7á(Ó*ˆIð Ü% i°]ÑCñ
ð 	
r%   c                 óÈ   •  [        U 5        U R                  R                  $ ! [         a4  n[        SR                  U R                  R
                  5      5      UeSnAff = f)z+Number of features seen during :term:`fit`.z*{} object has no n_features_in_ attribute.N)r   r   ÚAttributeErrorÚformatrN   rO   rU   Ún_features_in_)r!   Únfes     r"   rj   Ú)TransformedTargetRegressor.n_features_in_V  s`   € ð
	Ü˜DÔ!ð �‰×-Ñ-Ð-øô ó 	Ü Ø<×CÑCØ—N‘N×+Ñ+óóð ð	ûð	ús   ‚# £
A!­/AÁA!)	rQ   r   rM   r   r   r   rU   r   r,   r    )rO   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Úcallabler   ÚdictÚ__annotations__r#   r=   r   r   r   re   Úpropertyrj   Ú__static_attributes__© r%   r"   r   r      s¯   ‡ ñmñ` ! %¨Ð!3Ó4°dÐ;Ù" ;Ó/°Ð6Ø˜4Ð Ø! 4Ð(Ø#˜ñ$Ð˜Dó ð ð+ð ØØØö+ò9ñv à&+ññEó	ðEòN!òF

ð ñ.ó ó.r%   )r4   Únumpyr1   Úbaser   r   r   r   Ú
exceptionsr   Úpreprocessingr	   Úutilsr
   r   Úutils._param_validationr   Úutils._tagsr   Úutils.metadata_routingr   r   Úutils.validationr   Ú__all__r   rv   r%   r"   Ú<module>r�      sG   ðó
 ã ç EÓ EÝ 'Ý /ß /Ý 0Ý $÷õ /à'Ð
(€ôL.Ø˜~¨}õL.r%   