
    {Kg2*                         d dl Z d dlmZ d dl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 ddlmZ dd	lmZmZ dd
lmZmZ ddlmZ ddlmZ  G d deee
      Zy)    N)Real)sparse)linprog   )BaseEstimatorRegressorMixin_fit_context)ConvergenceWarning)_safe_indexing)Interval
StrOptions)parse_version
sp_version)_check_sample_weight   )LinearModelc                       e Zd ZU dZ eeddd      g eeddd      gdg eh d	      gedgd
Zee	d<   dddddd
dZ
 ed      dd       Zy)QuantileRegressoraH  Linear regression model that predicts conditional quantiles.

    The linear :class:`QuantileRegressor` optimizes the pinball loss for a
    desired `quantile` and is robust to outliers.

    This model uses an L1 regularization like
    :class:`~sklearn.linear_model.Lasso`.

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

    .. versionadded:: 1.0

    Parameters
    ----------
    quantile : float, default=0.5
        The quantile that the model tries to predict. It must be strictly
        between 0 and 1. If 0.5 (default), the model predicts the 50%
        quantile, i.e. the median.

    alpha : float, default=1.0
        Regularization constant that multiplies the L1 penalty term.

    fit_intercept : bool, default=True
        Whether or not to fit the intercept.

    solver : {'highs-ds', 'highs-ipm', 'highs', 'interior-point',             'revised simplex'}, default='highs'
        Method used by :func:`scipy.optimize.linprog` to solve the linear
        programming formulation.

        From `scipy>=1.6.0`, it is recommended to use the highs methods because
        they are the fastest ones. Solvers "highs-ds", "highs-ipm" and "highs"
        support sparse input data and, in fact, always convert to sparse csc.

        From `scipy>=1.11.0`, "interior-point" is not available anymore.

        .. versionchanged:: 1.4
           The default of `solver` changed to `"highs"` in version 1.4.

    solver_options : dict, default=None
        Additional parameters passed to :func:`scipy.optimize.linprog` as
        options. If `None` and if `solver='interior-point'`, then
        `{"lstsq": True}` is passed to :func:`scipy.optimize.linprog` for the
        sake of stability.

    Attributes
    ----------
    coef_ : array of shape (n_features,)
        Estimated coefficients for the features.

    intercept_ : float
        The intercept of the model, aka bias term.

    n_features_in_ : int
        Number of features seen during :term:`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

    n_iter_ : int
        The actual number of iterations performed by the solver.

    See Also
    --------
    Lasso : The Lasso is a linear model that estimates sparse coefficients
        with l1 regularization.
    HuberRegressor : Linear regression model that is robust to outliers.

    Examples
    --------
    >>> from sklearn.linear_model import QuantileRegressor
    >>> import numpy as np
    >>> n_samples, n_features = 10, 2
    >>> rng = np.random.RandomState(0)
    >>> y = rng.randn(n_samples)
    >>> X = rng.randn(n_samples, n_features)
    >>> # the two following lines are optional in practice
    >>> from sklearn.utils.fixes import sp_version, parse_version
    >>> solver = "highs" if sp_version >= parse_version("1.6.0") else "interior-point"
    >>> reg = QuantileRegressor(quantile=0.8, solver=solver).fit(X, y)
    >>> np.mean(y <= reg.predict(X))
    np.float64(0.8)
    r   r   neither)closedNleftboolean>   revised simplexhighshighs-ds	highs-ipminterior-pointquantilealphafit_interceptsolversolver_options_parameter_constraintsg      ?g      ?Tr   c                J    || _         || _        || _        || _        || _        y Nr   )selfr   r    r!   r"   r#   s         b/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/linear_model/_quantile.py__init__zQuantileRegressor.__init__   s)     !
*,    )prefer_skip_nested_validationc                    | j                  ||g ddd      \  }}t        ||      }|j                  d   }|}| j                  r|dz  }t	        j
                  |      | j                  z  }| j                  dv r1t        t        d      k  rt        d| j                   d	t               | j                  }|d
k(  r!t        t        d      k\  rt        d| d      t        j                  |      r|dvrt        d| j                   d      | j                  
|d
k(  rddi}n| j                  }t	        j                  |      d   }	t        |	      }
|
t        |      k  r||	   }t!        ||	      }t!        ||	      }t	        j"                  t	        j$                  d|z  |      || j&                  z  |d| j&                  z
  z  g      }| j                  r
d|d<   d||<   |dv rt        j(                  |
|j*                  d      }| j                  rWt        j,                  t	        j.                  |
df|j*                              }t        j0                  ||| | || gd      }nt        j0                  || || gd      }nvt	        j(                  |
      }| j                  r8t	        j.                  |
df      }t	        j"                  ||| | || gd      }nt	        j"                  || || gd      }|}t3        |||||      }|j4                  }|j6                  s_ddddd}t9        j:                  d|j<                   d |j?                  |j<                  d!      z   d"z   d#z   |j@                  z   tB               |d| ||d|z   z
  }|jD                  | _#        | j                  r|dd | _$        |d   | _%        | S || _$        d$| _%        | S )%a  Fit the model according to the given training data.

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

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

        sample_weight : array-like of shape (n_samples,), default=None
            Sample weights.

        Returns
        -------
        self : object
            Returns self.
        )csccsrcooTF)accept_sparse	y_numericmulti_outputr   )r   r   r   z1.6.0zSolver z* is only available with scipy>=1.6.0, got r   z1.11.0z- is not anymore available in SciPy >= 1.11.0.)r   r   r   z; does not support sparse X. Use solver 'highs' for example.Nlstsqr   r   )
fill_valuer-   )dtypeformat)shaper5   )r6   )axis)cA_eqb_eqmethodoptionszIteration limit reached.z!Problem appears to be infeasible.z Problem appears to be unbounded.z#Numerical difficulties encountered.)r   r         zDLinear programming for QuantileRegressor did not succeed.
Status is z: zunknown reason
zResult message of linprog:
g        )&_validate_datar   r7   r!   npsumr    r"   r   r   
ValueErrorr   issparser#   nonzerolenr   concatenatefullr   eyer5   
csc_matrixoneshstackr   xsuccesswarningswarnstatus
setdefaultmessager
   nitn_iter_coef_
intercept_)r'   Xysample_weight
n_featuresn_paramsr    r"   r#   indices	n_indicesr9   rJ   rL   r:   r;   resultsolutionfailureparamss                       r(   fitzQuantileRegressor.fit   s
   ( ""/ # 
1 -]A>WWQZ
MH }%

2;; 
 
 =11$++ '**47 
 [[F%%*h8O*O&!NO  ??1&0R"R$++ '2 2 
 &65E+E%t_N!00N, **]+A.L	s=)))'2Mq'*Aq'*ANNH7-T]]!23
 AaDAhK77
 **YaggeDC!!((	1~QWW)UV}}dAuqb#t%DUS}}a!S3$%7F&&#C!!ww	1~.~~tQr3&EAN~~q1"cC4&8qA"
 88~~-658	G MM#]]O2/$$V]]4DEF  1	1
 ..! # )8$x1x<'HHzzDJ$QiDO   DJ!DOr*   r&   )__name__
__module____qualname____doc__r   r   r   dictr$   __annotations__r)   r	   rd    r*   r(   r   r      s    Wt dAq;<4D89#

  ,$D * - 5d 6dr*   r   )rP   numbersr   numpyrB   scipyr   scipy.optimizer   baser   r   r	   
exceptionsr
   utilsr   utils._param_validationr   r   utils.fixesr   r   utils.validationr   _baser   r   rk   r*   r(   <module>rw      s@        " > > + " : 3 3 `^] `r*   