o
    `^h                     @   s
  d Z ddlZddlmZ ddlmZ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mZmZ ddlmZmZmZ ddlmZmZmZmZm Z  ddl!m"Z"m#Z# ddl$m%Z% ddl&m'Z'm(Z( dZ)d.ddZ*					d/ddZ+edgej,geedddddgeedddddgdedhgdgdgdgddddddddddd d!Z-edgdgeeddd"ddgeedddddgddgdgdgdgdgd#	dddddddddd$d%d&Z.G d'd( d(eee'Z/			)d0d*d+Z0G d,d- d-ee'Z1dS )1z&Orthogonal matching pursuit algorithms    N)sqrt)IntegralReal)linalg)get_lapack_funcs   )MultiOutputMixinRegressorMixin_fit_context)check_cv)Bunchas_float_arraycheck_array)Interval
StrOptionsvalidate_params)MetadataRouterMethodMapping_raise_for_params_routing_enabledprocess_routing)Paralleldelayed)validate_data   )LinearModel_pre_fitzOrthogonal matching pursuit ended prematurely due to linear dependence in the dictionary. The requested precision might not have been met.TFc                 C   s  |r|  d} nt| } t| jj}td| f\}}td| f\}	t	| j
|}
|}td}d}t| jd }|durE| jd n|}tj||f| jd}|rXt|}	 ttt	| j
|}||k sr|
| d	 |k r{tjttd	d
 n|dkrt	| ddd|f j
| dd|f ||d|f< tj|d|d|f ||d|f ddddd |||d|f d	 }t| dd|f d	 | }||krtjttd	d
 nt||||f< nt| dd|f |d< || j
| | j
| \| j
|< | j
|< |
| |
| |
|< |
|< || || ||< ||< |d7 }|	|d|d|f |
d| ddd\}}|rE||d||d f< |t	| ddd|f | }|durd||d	 |krdn||krjnqY|r||d| |ddd|f |fS ||d| |fS )a  Orthogonal Matching Pursuit step using the Cholesky decomposition.

    Parameters
    ----------
    X : ndarray of shape (n_samples, n_features)
        Input dictionary. Columns are assumed to have unit norm.

    y : ndarray of shape (n_samples,)
        Input targets.

    n_nonzero_coefs : int
        Targeted number of non-zero elements.

    tol : float, default=None
        Targeted squared error, if not None overrides n_nonzero_coefs.

    copy_X : bool, default=True
        Whether the design matrix X must be copied by the algorithm. A false
        value is only helpful if X is already Fortran-ordered, otherwise a
        copy is made anyway.

    return_path : bool, default=False
        Whether to return every value of the nonzero coefficients along the
        forward path. Useful for cross-validation.

    Returns
    -------
    gamma : ndarray of shape (n_nonzero_coefs,)
        Non-zero elements of the solution.

    idx : ndarray of shape (n_nonzero_coefs,)
        Indices of the positions of the elements in gamma within the solution
        vector.

    coef : ndarray of shape (n_features, n_nonzero_coefs)
        The first k values of column k correspond to the coefficient value
        for the active features at that step. The lower left triangle contains
        garbage. Only returned if ``return_path=True``.

    n_active : int
        Number of active features at convergence.
    Fnrm2swappotrsr   r   NdtypeTr   
stacklevelFtransloweroverwrite_bcheck_finiter   r   r)   r*   )copynpasfortranarrayfinfor$   epsr   get_blas_funcsr   dotTemptyarangeshape
empty_likeargmaxabswarningswarn	prematureRuntimeWarningsolve_triangularnormr   )Xyn_nonzero_coefstolcopy_Xreturn_path	min_floatr   r    r"   alpharesidualgamman_activeindicesmax_featuresLcoefslamvLkk_ rU   W/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/sklearn/linear_model/_omp.py_cholesky_omp$   sn   +


6& 
 
-$rW   c                 C   s.  |r|  dnt| } |s|jjs|  }t| jj}t	d| f\}	}
t
d| f\}tt| }|}|}d}td}d}|durIt| n|}tj||f| jd}d|d< |r`t|}	 tt|}||k su|| d
 |k r~tjttdd n|dkr| |d|f ||d|f< tj|d|d|f ||d|f ddd	dd |	||d|f d
 }| ||f | }||krtjttdd nt||||f< n
t| ||f |d< |
| | | | \| |< | |< |
| j| | j| \| j|< | j|< || || ||< ||< || || ||< ||< |d7 }||d|d|f |d| d	dd\}}|r@||d||d f< t| ddd|f |}|| }|durr||7 }t||d| }||8 }t||krqnn||krxnqa|r||d| |ddd|f |fS ||d| |fS )a  Orthogonal Matching Pursuit step on a precomputed Gram matrix.

    This function uses the Cholesky decomposition method.

    Parameters
    ----------
    Gram : ndarray of shape (n_features, n_features)
        Gram matrix of the input data matrix.

    Xy : ndarray of shape (n_features,)
        Input targets.

    n_nonzero_coefs : int
        Targeted number of non-zero elements.

    tol_0 : float, default=None
        Squared norm of y, required if tol is not None.

    tol : float, default=None
        Targeted squared error, if not None overrides n_nonzero_coefs.

    copy_Gram : bool, default=True
        Whether the gram matrix must be copied by the algorithm. A false
        value is only helpful if it is already Fortran-ordered, otherwise a
        copy is made anyway.

    copy_Xy : bool, default=True
        Whether the covariance vector Xy must be copied by the algorithm.
        If False, it may be overwritten.

    return_path : bool, default=False
        Whether to return every value of the nonzero coefficients along the
        forward path. Useful for cross-validation.

    Returns
    -------
    gamma : ndarray of shape (n_nonzero_coefs,)
        Non-zero elements of the solution.

    idx : ndarray of shape (n_nonzero_coefs,)
        Indices of the positions of the elements in gamma within the solution
        vector.

    coefs : ndarray of shape (n_features, n_nonzero_coefs)
        The first k values of column k correspond to the coefficient value
        for the active features at that step. The lower left triangle contains
        garbage. Only returned if ``return_path=True``.

    n_active : int
        Number of active features at convergence.
    r   r   r!   r   Nr#   g      ?r,   Tr      r%   r   Fr'   r-   )r.   r/   r0   flags	writeabler1   r$   r2   r   r3   r   r7   lenr6   r9   r:   r;   r<   r=   r>   r?   r@   r   r5   r4   inner)GramXyrD   tol_0rE   	copy_Gramcopy_XyrG   rH   r   r    r"   rM   rI   tol_currdeltarK   rL   rN   rO   rP   rQ   rR   rS   rT   betarU   rU   rV   	_gram_omp   s   =

& 


/$re   z
array-likeleftclosedbooleanauto)rB   rC   rD   rE   
precomputerF   rG   return_n_iterprefer_skip_nested_validation)rD   rE   rk   rF   rG   rl   c             
   C   s@  t | d|d} d}|jdkr|dd}t |}|jd dkr!d}|du r5|du r5ttd| jd  d}|du rD|| jd krDtd	|d
krR| jd | jd k}|rt| j	| }t
|}t| j	|}	|durutj|d dd}
nd}
t||	|||
|d|dS |rt| jd |jd | jd f}nt| jd |jd f}g }t|jd D ]W}t| |dd|f ||||d}|r|\}}}}|dddddt|f }t|j	D ]\}}|d|d  ||d|d  ||f< qn|\}}}||||f< || q|jd dkr|d }|rt||fS t|S )a^  Orthogonal Matching Pursuit (OMP).

    Solves n_targets Orthogonal Matching Pursuit problems.
    An instance of the problem has the form:

    When parametrized by the number of non-zero coefficients using
    `n_nonzero_coefs`:
    argmin ||y - X\gamma||^2 subject to ||\gamma||_0 <= n_{nonzero coefs}

    When parametrized by error using the parameter `tol`:
    argmin ||\gamma||_0 subject to ||y - X\gamma||^2 <= tol

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

    Parameters
    ----------
    X : array-like of shape (n_samples, n_features)
        Input data. Columns are assumed to have unit norm.

    y : ndarray of shape (n_samples,) or (n_samples, n_targets)
        Input targets.

    n_nonzero_coefs : int, default=None
        Desired number of non-zero entries in the solution. If None (by
        default) this value is set to 10% of n_features.

    tol : float, default=None
        Maximum squared norm of the residual. If not None, overrides n_nonzero_coefs.

    precompute : 'auto' or bool, default=False
        Whether to perform precomputations. Improves performance when n_targets
        or n_samples is very large.

    copy_X : bool, default=True
        Whether the design matrix X must be copied by the algorithm. A false
        value is only helpful if X is already Fortran-ordered, otherwise a
        copy is made anyway.

    return_path : bool, default=False
        Whether to return every value of the nonzero coefficients along the
        forward path. Useful for cross-validation.

    return_n_iter : bool, default=False
        Whether or not to return the number of iterations.

    Returns
    -------
    coef : ndarray of shape (n_features,) or (n_features, n_targets)
        Coefficients of the OMP solution. If `return_path=True`, this contains
        the whole coefficient path. In this case its shape is
        (n_features, n_features) or (n_features, n_targets, n_features) and
        iterating over the last axis generates coefficients in increasing order
        of active features.

    n_iters : array-like or int
        Number of active features across every target. Returned only if
        `return_n_iter` is set to True.

    See Also
    --------
    OrthogonalMatchingPursuit : Orthogonal Matching Pursuit model.
    orthogonal_mp_gram : Solve OMP problems using Gram matrix and the product X.T * y.
    lars_path : Compute Least Angle Regression or Lasso path using LARS algorithm.
    sklearn.decomposition.sparse_encode : Sparse coding.

    Notes
    -----
    Orthogonal matching pursuit was introduced in S. Mallat, Z. Zhang,
    Matching pursuits with time-frequency dictionaries, IEEE Transactions on
    Signal Processing, Vol. 41, No. 12. (December 1993), pp. 3397-3415.
    (https://www.di.ens.fr/~mallat/papiers/MallatPursuit93.pdf)

    This implementation is based on Rubinstein, R., Zibulevsky, M. and Elad,
    M., Efficient Implementation of the K-SVD Algorithm using Batch Orthogonal
    Matching Pursuit Technical Report - CS Technion, April 2008.
    https://www.cs.technion.ac.il/~ronrubin/Publications/KSVD-OMP-v2.pdf

    Examples
    --------
    >>> from sklearn.datasets import make_regression
    >>> from sklearn.linear_model import orthogonal_mp
    >>> X, y = make_regression(noise=4, random_state=0)
    >>> coef = orthogonal_mp(X, y)
    >>> coef.shape
    (100,)
    >>> X[:1,] @ coef
    array([-78.68...])
    r   orderr.   Fr   TN皙?>The number of atoms cannot be more than the number of featuresrj   r   r   axis)rD   rE   norms_squaredr`   ra   rG   )rF   rG   )r   ndimreshaper8   maxint
ValueErrorr/   r4   r5   r0   sumorthogonal_mp_gramzerosrangerW   r[   	enumerateappendsqueeze)rB   rC   rD   rE   rk   rF   rG   rl   Gr^   rv   coefn_iterskoutrT   idxrP   n_iterrL   xrU   rU   rV   orthogonal_mp"  sl   p

$(

r   neither)	r]   r^   rD   rE   rv   r`   ra   rG   rl   )rD   rE   rv   r`   ra   rG   rl   c                C   sJ  t | d|d} t|}|jdkr|jd dkrd}|jdkr/|ddtjf }|dur/|g}|s5|jjs9| }|du rI|du rIt	dt
|  }|durU|du rUtd|dura|dk ratd	|du rm|dkrmtd
|du r{|t
| kr{td|rtjt
| |jd t
| f| jd}	ntjt
| |jd f| jd}	g }
t|jd D ]a}t| |dd|f ||dur|| nd||d|d}|r|\}}}}|	dddddt
|f }	t|jD ]\}}|d|d  |	|d|d  ||f< qn|\}}}||	||f< |
| q|jd dkr|
d }
|r t|	|
fS t|	S )an  Gram Orthogonal Matching Pursuit (OMP).

    Solves n_targets Orthogonal Matching Pursuit problems using only
    the Gram matrix X.T * X and the product X.T * y.

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

    Parameters
    ----------
    Gram : array-like of shape (n_features, n_features)
        Gram matrix of the input data: `X.T * X`.

    Xy : array-like of shape (n_features,) or (n_features, n_targets)
        Input targets multiplied by `X`: `X.T * y`.

    n_nonzero_coefs : int, default=None
        Desired number of non-zero entries in the solution. If `None` (by
        default) this value is set to 10% of n_features.

    tol : float, default=None
        Maximum squared norm of the residual. If not `None`,
        overrides `n_nonzero_coefs`.

    norms_squared : array-like of shape (n_targets,), default=None
        Squared L2 norms of the lines of `y`. Required if `tol` is not None.

    copy_Gram : bool, default=True
        Whether the gram matrix must be copied by the algorithm. A `False`
        value is only helpful if it is already Fortran-ordered, otherwise a
        copy is made anyway.

    copy_Xy : bool, default=True
        Whether the covariance vector `Xy` must be copied by the algorithm.
        If `False`, it may be overwritten.

    return_path : bool, default=False
        Whether to return every value of the nonzero coefficients along the
        forward path. Useful for cross-validation.

    return_n_iter : bool, default=False
        Whether or not to return the number of iterations.

    Returns
    -------
    coef : ndarray of shape (n_features,) or (n_features, n_targets)
        Coefficients of the OMP solution. If `return_path=True`, this contains
        the whole coefficient path. In this case its shape is
        `(n_features, n_features)` or `(n_features, n_targets, n_features)` and
        iterating over the last axis yields coefficients in increasing order
        of active features.

    n_iters : list or int
        Number of active features across every target. Returned only if
        `return_n_iter` is set to True.

    See Also
    --------
    OrthogonalMatchingPursuit : Orthogonal Matching Pursuit model (OMP).
    orthogonal_mp : Solves n_targets Orthogonal Matching Pursuit problems.
    lars_path : Compute Least Angle Regression or Lasso path using
        LARS algorithm.
    sklearn.decomposition.sparse_encode : Generic sparse coding.
        Each column of the result is the solution to a Lasso problem.

    Notes
    -----
    Orthogonal matching pursuit was introduced in G. Mallat, Z. Zhang,
    Matching pursuits with time-frequency dictionaries, IEEE Transactions on
    Signal Processing, Vol. 41, No. 12. (December 1993), pp. 3397-3415.
    (https://www.di.ens.fr/~mallat/papiers/MallatPursuit93.pdf)

    This implementation is based on Rubinstein, R., Zibulevsky, M. and Elad,
    M., Efficient Implementation of the K-SVD Algorithm using Batch Orthogonal
    Matching Pursuit Technical Report - CS Technion, April 2008.
    https://www.cs.technion.ac.il/~ronrubin/Publications/KSVD-OMP-v2.pdf

    Examples
    --------
    >>> from sklearn.datasets import make_regression
    >>> from sklearn.linear_model import orthogonal_mp_gram
    >>> X, y = make_regression(noise=4, random_state=0)
    >>> coef = orthogonal_mp_gram(X.T @ X, X.T @ y)
    >>> coef.shape
    (100,)
    >>> X[:1,] @ coef
    array([-78.68...])
    r   ro   r   TNrr   zSGram OMP needs the precomputed norms in order to evaluate the error sum of squares.r   zEpsilon cannot be negativez$The number of atoms must be positivers   r#   F)r`   ra   rG   )r   r/   asarrayrw   r8   newaxisrY   rZ   r.   rz   r[   r{   r~   r$   r   re   r   r5   r   r   )r]   r^   rD   rE   rv   r`   ra   rG   rl   r   r   r   r   rT   r   rP   r   rL   r   rU   rU   rV   r}     sj   q

&
(

r}   c                   @   sz   e Zd ZU dZeedddddgeedddddgdgedhdgd	Ze	e
d
< ddddd	ddZedddd ZdS )OrthogonalMatchingPursuita  Orthogonal Matching Pursuit model (OMP).

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

    Parameters
    ----------
    n_nonzero_coefs : int, default=None
        Desired number of non-zero entries in the solution. Ignored if `tol` is set.
        When `None` and `tol` is also `None`, this value is either set to 10% of
        `n_features` or 1, whichever is greater.

    tol : float, default=None
        Maximum squared norm of the residual. If not None, overrides n_nonzero_coefs.

    fit_intercept : bool, default=True
        Whether to calculate the intercept for this model. If set
        to false, no intercept will be used in calculations
        (i.e. data is expected to be centered).

    precompute : 'auto' or bool, default='auto'
        Whether to use a precomputed Gram and Xy matrix to speed up
        calculations. Improves performance when :term:`n_targets` or
        :term:`n_samples` is very large. Note that if you already have such
        matrices, you can pass them directly to the fit method.

    Attributes
    ----------
    coef_ : ndarray of shape (n_features,) or (n_targets, n_features)
        Parameter vector (w in the formula).

    intercept_ : float or ndarray of shape (n_targets,)
        Independent term in decision function.

    n_iter_ : int or array-like
        Number of active features across every target.

    n_nonzero_coefs_ : int or None
        The number of non-zero coefficients in the solution or `None` when `tol` is
        set. If `n_nonzero_coefs` is None and `tol` is None this value is either set
        to 10% of `n_features` or 1, whichever is greater.

    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

    See Also
    --------
    orthogonal_mp : Solves n_targets Orthogonal Matching Pursuit problems.
    orthogonal_mp_gram :  Solves n_targets Orthogonal Matching Pursuit
        problems using only the Gram matrix X.T * X and the product X.T * y.
    lars_path : Compute Least Angle Regression or Lasso path using LARS algorithm.
    Lars : Least Angle Regression model a.k.a. LAR.
    LassoLars : Lasso model fit with Least Angle Regression a.k.a. Lars.
    sklearn.decomposition.sparse_encode : Generic sparse coding.
        Each column of the result is the solution to a Lasso problem.
    OrthogonalMatchingPursuitCV : Cross-validated
        Orthogonal Matching Pursuit model (OMP).

    Notes
    -----
    Orthogonal matching pursuit was introduced in G. Mallat, Z. Zhang,
    Matching pursuits with time-frequency dictionaries, IEEE Transactions on
    Signal Processing, Vol. 41, No. 12. (December 1993), pp. 3397-3415.
    (https://www.di.ens.fr/~mallat/papiers/MallatPursuit93.pdf)

    This implementation is based on Rubinstein, R., Zibulevsky, M. and Elad,
    M., Efficient Implementation of the K-SVD Algorithm using Batch Orthogonal
    Matching Pursuit Technical Report - CS Technion, April 2008.
    https://www.cs.technion.ac.il/~ronrubin/Publications/KSVD-OMP-v2.pdf

    Examples
    --------
    >>> from sklearn.linear_model import OrthogonalMatchingPursuit
    >>> from sklearn.datasets import make_regression
    >>> X, y = make_regression(noise=4, random_state=0)
    >>> reg = OrthogonalMatchingPursuit().fit(X, y)
    >>> reg.score(X, y)
    0.9991...
    >>> reg.predict(X[:1,])
    array([-78.3854...])
    r   Nrf   rg   r   ri   rj   rD   rE   fit_interceptrk   _parameter_constraintsTc                C   s   || _ || _|| _|| _d S Nr   )selfrD   rE   r   rk   rU   rU   rV   __init__  s   
z"OrthogonalMatchingPursuit.__init__rm   c              
   C   s,  t | ||ddd\}}|jd }t||d| j| jdd\}}}}}}}|jdkr1|ddtjf }| jdu rF| j	du rFt
td| d| _n| j	durOd| _n| j| _|du rht||| j| j	dddd\}	| _n!| j	durvtj|d	 d
dnd}
t||| j| j	|
dddd\}	| _|	j| _| ||| | S )a  Fit the model using X, y as training data.

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

        y : array-like of shape (n_samples,) or (n_samples, n_targets)
            Target values. Will be cast to X's dtype if necessary.

        Returns
        -------
        self : object
            Returns an instance of self.
        T)multi_output	y_numericr   Nr.   rr   F)rD   rE   rk   rF   rl   r   r   rt   )r^   rD   rE   rv   r`   ra   rl   )r   r8   r   rk   r   rw   r/   r   rD   rE   ry   rz   n_nonzero_coefs_r   n_iter_r|   r}   r5   coef__set_intercept)r   rB   rC   
n_featuresX_offsety_offsetX_scaler]   r^   r   norms_sqrU   rU   rV   fit  sH   


 

zOrthogonalMatchingPursuit.fit)__name__
__module____qualname____doc__r   r   r   r   r   dict__annotations__r   r
   r   rU   rU   rU   rV   r     s   
 Z
r   d   c           
   	   C   s   |r|   } |  }|  }|  }|r<| jdd}| |8 } ||8 }|jdd}t|dd}||8 }t|dd}||8 }t| ||ddddd}	|	jdkrU|	ddtjf }	t|	j|j| S )	a[  Compute the residues on left-out data for a full LARS path.

    Parameters
    ----------
    X_train : ndarray of shape (n_samples, n_features)
        The data to fit the LARS on.

    y_train : ndarray of shape (n_samples)
        The target variable to fit LARS on.

    X_test : ndarray of shape (n_samples, n_features)
        The data to compute the residues on.

    y_test : ndarray of shape (n_samples)
        The target variable to compute the residues on.

    copy : bool, default=True
        Whether X_train, X_test, y_train and y_test should be copied.  If
        False, they may be overwritten.

    fit_intercept : bool, default=True
        Whether to calculate the intercept for this model. If set
        to false, no intercept will be used in calculations
        (i.e. data is expected to be centered).

    max_iter : int, default=100
        Maximum numbers of iterations to perform, therefore maximum features
        to include. 100 by default.

    Returns
    -------
    residues : ndarray of shape (n_samples, max_features)
        Residues of the prediction on the test data.
    r   rt   Fr   NT)rD   rE   rk   rF   rG   r   )	r.   meanr   r   rw   r/   r   r4   r5   )
X_trainy_trainX_testy_testr.   r   max_iterX_meany_meanrP   rU   rU   rV   _omp_path_residues3  s4   ,
	r   c                   @   sz   e Zd ZU dZdgdgeedddddgdgedgdgd	Zeed
< ddddddd	ddZ	e
dddd Zdd ZdS )OrthogonalMatchingPursuitCVa  Cross-validated Orthogonal Matching Pursuit model (OMP).

    See glossary entry for :term:`cross-validation estimator`.

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

    Parameters
    ----------
    copy : bool, default=True
        Whether the design matrix X must be copied by the algorithm. A false
        value is only helpful if X is already Fortran-ordered, otherwise a
        copy is made anyway.

    fit_intercept : bool, default=True
        Whether to calculate the intercept for this model. If set
        to false, no intercept will be used in calculations
        (i.e. data is expected to be centered).

    max_iter : int, default=None
        Maximum numbers of iterations to perform, therefore maximum features
        to include. 10% of ``n_features`` but at least 5 if available.

    cv : int, cross-validation generator or iterable, default=None
        Determines the cross-validation splitting strategy.
        Possible inputs for cv are:

        - None, to use the default 5-fold cross-validation,
        - integer, to specify the number of folds.
        - :term:`CV splitter`,
        - An iterable yielding (train, test) splits as arrays of indices.

        For integer/None inputs, :class:`~sklearn.model_selection.KFold` is used.

        Refer :ref:`User Guide <cross_validation>` for the various
        cross-validation strategies that can be used here.

        .. versionchanged:: 0.22
            ``cv`` default value if None changed from 3-fold to 5-fold.

    n_jobs : int, default=None
        Number of CPUs to use during the cross validation.
        ``None`` means 1 unless in a :obj:`joblib.parallel_backend` context.
        ``-1`` means using all processors. See :term:`Glossary <n_jobs>`
        for more details.

    verbose : bool or int, default=False
        Sets the verbosity amount.

    Attributes
    ----------
    intercept_ : float or ndarray of shape (n_targets,)
        Independent term in decision function.

    coef_ : ndarray of shape (n_features,) or (n_targets, n_features)
        Parameter vector (w in the problem formulation).

    n_nonzero_coefs_ : int
        Estimated number of non-zero coefficients giving the best mean squared
        error over the cross-validation folds.

    n_iter_ : int or array-like
        Number of active features across every target for the model refit with
        the best hyperparameters got by cross-validating across all folds.

    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

    See Also
    --------
    orthogonal_mp : Solves n_targets Orthogonal Matching Pursuit problems.
    orthogonal_mp_gram : Solves n_targets Orthogonal Matching Pursuit
        problems using only the Gram matrix X.T * X and the product X.T * y.
    lars_path : Compute Least Angle Regression or Lasso path using LARS algorithm.
    Lars : Least Angle Regression model a.k.a. LAR.
    LassoLars : Lasso model fit with Least Angle Regression a.k.a. Lars.
    OrthogonalMatchingPursuit : Orthogonal Matching Pursuit model (OMP).
    LarsCV : Cross-validated Least Angle Regression model.
    LassoLarsCV : Cross-validated Lasso model fit with Least Angle Regression.
    sklearn.decomposition.sparse_encode : Generic sparse coding.
        Each column of the result is the solution to a Lasso problem.

    Notes
    -----
    In `fit`, once the optimal number of non-zero coefficients is found through
    cross-validation, the model is fit again using the entire training set.

    Examples
    --------
    >>> from sklearn.linear_model import OrthogonalMatchingPursuitCV
    >>> from sklearn.datasets import make_regression
    >>> X, y = make_regression(n_features=100, n_informative=10,
    ...                        noise=4, random_state=0)
    >>> reg = OrthogonalMatchingPursuitCV(cv=5).fit(X, y)
    >>> reg.score(X, y)
    0.9991...
    >>> reg.n_nonzero_coefs_
    np.int64(10)
    >>> reg.predict(X[:1,])
    array([-78.3854...])
    ri   r   Nrf   rg   	cv_objectverboser.   r   r   cvn_jobsr   r   TFc                C   s(   || _ || _|| _|| _|| _|| _d S r   r   )r   r.   r   r   r   r   r   rU   rU   rV   r     s   

z$OrthogonalMatchingPursuitCV.__init__rm   c           
         sL  t |d t ddd\ t ddd tjdd}t r,tdfi |}n	t }ti d|_j	sJt
ttd	 jd
  d jd
 nj	tjjd fdd|j fi |jjD }t
dd |D tfdd|D }t|jddd
 }|_t|jd }	|	j_|	j_|	j_S )a  Fit the model using X, y as training data.

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

        y : array-like of shape (n_samples,)
            Target values. Will be cast to X's dtype if necessary.

        **fit_params : dict
            Parameters to pass to the underlying splitter.

            .. versionadded:: 1.4
                Only available if `enable_metadata_routing=True`,
                which can be set by using
                ``sklearn.set_config(enable_metadata_routing=True)``.
                See :ref:`Metadata Routing User Guide <metadata_routing>` for
                more details.

        Returns
        -------
        self : object
            Returns an instance of self.
        r   Tr   )r   ensure_min_featuresF)r.   ensure_all_finite)
classifier)splitrr   r      )r   r   c              	   3   s@    | ]\}}t t | |  | | jjV  qd S r   )r   r   r.   r   ).0traintest)rB   r   r   rC   rU   rV   	<genexpr>1  s    

z2OrthogonalMatchingPursuitCV.fit.<locals>.<genexpr>c                 s   s    | ]}|j d  V  qdS )r   N)r8   r   foldrU   rU   rV   r   >  s    c                    s$   g | ]}|d   d j ddqS )Nr   r   rt   )r   r   )min_early_stoprU   rV   
<listcomp>@  s   $ z3OrthogonalMatchingPursuitCV.fit.<locals>.<listcomp>r   rt   )rD   r   )r   r   r   r   r   r   r   r   splitterr   minry   rz   r8   r   r   r   r   r/   arrayargminr   r   r   r   r   r   
intercept_r   )
r   rB   rC   
fit_paramsr   routed_paramscv_paths	mse_foldsbest_n_nonzero_coefsomprU   )rB   r   r   r   rC   rV   r     s>   &
zOrthogonalMatchingPursuitCV.fitc                 C   s*   t | jjdj| jt j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.4

        Returns
        -------
        routing : MetadataRouter
            A :class:`~sklearn.utils.metadata_routing.MetadataRouter` encapsulating
            routing information.
        )ownerr   r   )callercallee)r   method_mapping)r   	__class__r   addr   r   )r   routerrU   rU   rV   get_metadata_routingN  s
   z0OrthogonalMatchingPursuitCV.get_metadata_routing)r   r   r   r   r   r   r   r   r   r   r
   r   r   rU   rU   rU   rV   r   ~  s&   
 n
Gr   )NTF)NNTTF)TTr   )2r   r<   mathr   numbersr   r   numpyr/   scipyr   scipy.linalg.lapackr   baser   r	   r
   model_selectionr   utilsr   r   r   utils._param_validationr   r   r   utils.metadata_routingr   r   r   r   r   utils.parallelr   r   utils.validationr   _baser   r   r>   rW   re   ndarrayr   r}   r   r   r   rU   rU   rU   rV   <module>   s    
x
 
 % % 4
K