
    {Kg54                         d dl ZddlmZmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZmZ  G d d	      Z G d
 d      Z G d dee      Z edg d      e_         G d de      Zd Z G d de      Zy)    N   )BaseEstimatorClassifierMixin)RequestMethod   )available_if)_check_sample_weight_num_samplescheck_arraycheck_is_fittedcheck_random_statec                       e Zd ZdZd Zd Zy)ArraySlicingWrapper-
    Parameters
    ----------
    array
    c                     || _         y Narrayselfr   s     Z/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/utils/_mocking.py__init__zArraySlicingWrapper.__init__   s	    
    c                 2    t        | j                  |         S r   MockDataFramer   )r   aslices     r   __getitem__zArraySlicingWrapper.__getitem__   s    TZZ/00r   N)__name__
__module____qualname____doc__r   r    r   r   r   r      s    1r   r   c                   8    e Zd ZdZd Zd Zd	dZd Zd Zd
dZ	y)r   r   c                     || _         || _        |j                  | _        |j                  | _        t	        |      | _        y r   )r   valuesshapendimr   ilocr   s     r   r   zMockDataFrame.__init__&   s2    
[[
JJ	'.	r   c                 ,    t        | j                        S r   )lenr   r   s    r   __len__zMockDataFrame.__len__.   s    4::r   Nc                     | j                   S r   r   )r   dtypes     r   	__array__zMockDataFrame.__array__1   s     zzr   c                 F    t        | j                  |j                  k(        S r   r   r   others     r   __eq__zMockDataFrame.__eq__7   s    TZZ5;;677r   c                     | |k(   S r   r#   r2   s     r   __ne__zMockDataFrame.__ne__:   s    5=  r   c                 N    t        | j                  j                  ||            S )Naxis)r   r   take)r   indicesr9   s      r   r:   zMockDataFrame.take=   s    TZZ__W4_@AAr   r   )r   )
r   r    r!   r"   r   r-   r0   r4   r6   r:   r#   r   r   r   r      s&    /8!Br   r   c            
       \    e Zd ZdZdddddddddd	dZddZddZd	 Zd
 Zd Z	ddZ
d Zy)CheckingClassifiera$	  Dummy classifier to test pipelining and meta-estimators.

    Checks some property of `X` and `y`in fit / predict.
    This allows testing whether pipelines / cross-validation or metaestimators
    changed the input.

    Can also be used to check if `fit_params` are passed correctly, and
    to force a certain score to be returned.

    Parameters
    ----------
    check_y, check_X : callable, default=None
        The callable used to validate `X` and `y`. These callable should return
        a bool where `False` will trigger an `AssertionError`. If `None`, the
        data is not validated. Default is `None`.

    check_y_params, check_X_params : dict, default=None
        The optional parameters to pass to `check_X` and `check_y`. If `None`,
        then no parameters are passed in.

    methods_to_check : "all" or list of str, default="all"
        The methods in which the checks should be applied. By default,
        all checks will be done on all methods (`fit`, `predict`,
        `predict_proba`, `decision_function` and `score`).

    foo_param : int, default=0
        A `foo` param. When `foo > 1`, the output of :meth:`score` will be 1
        otherwise it is 0.

    expected_sample_weight : bool, default=False
        Whether to check if a valid `sample_weight` was passed to `fit`.

    expected_fit_params : list of str, default=None
        A list of the expected parameters given when calling `fit`.

    Attributes
    ----------
    classes_ : int
        The classes seen during `fit`.

    n_features_in_ : int
        The number of features seen during `fit`.

    Examples
    --------
    >>> from sklearn.utils._mocking import CheckingClassifier

    This helper allow to assert to specificities regarding `X` or `y`. In this
    case we expect `check_X` or `check_y` to return a boolean.

    >>> from sklearn.datasets import load_iris
    >>> X, y = load_iris(return_X_y=True)
    >>> clf = CheckingClassifier(check_X=lambda x: x.shape == (150, 4))
    >>> clf.fit(X, y)
    CheckingClassifier(...)

    We can also provide a check which might raise an error. In this case, we
    expect `check_X` to return `X` and `check_y` to return `y`.

    >>> from sklearn.utils import check_array
    >>> clf = CheckingClassifier(check_X=check_array)
    >>> clf.fit(X, y)
    CheckingClassifier(...)
    Nallr   	check_ycheck_y_paramscheck_Xcheck_X_paramsmethods_to_check	foo_paramexpected_sample_weightexpected_fit_paramsrandom_statec       	             || _         || _        || _        || _        || _        || _        || _        || _        |	| _        y r   r?   )
r   r@   rA   rB   rC   rD   rE   rF   rG   rH   s
             r   r   zCheckingClassifier.__init__   sI     ,, 0"&<##6 (r   c                    |rt        |        | j                  S| j                  i n| j                  } | j                  |fi |}t        |t        t
        j                  f      r|sJ |}|c| j                  W| j                  i n| j                  } | j                  |fi |}t        |t        t
        j                  f      r|sJ ||fS |}||fS )at  Validate X and y and make extra check.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_features)
            The data set.
            `X` is checked only if `check_X` is not `None` (default is None).
        y : array-like of shape (n_samples), default=None
            The corresponding target, by default `None`.
            `y` is checked only if `check_y` is not `None` (default is None).
        should_be_fitted : bool, default=True
            Whether or not the classifier should be already fitted.
            By default True.

        Returns
        -------
        X, y
        )	r   rB   rC   
isinstanceboolnpbool_r@   rA   )r   Xyshould_be_fittedparams	checked_X	checked_ys          r   
_check_X_yzCheckingClassifier._check_X_y   s    & D!<<#..6RD<O<OF$Q1&1I)dBHH%56  y=T\\5..6RD<O<OF$Q1&1I)dBHH%56  y !t !tr   c                    t        |      t        |      k(  sJ | j                  dk(  sd| j                  v r| j                  ||d      \  }}t        j                  |      d   | _        t        j                  t        |dd            | _        | j                  rt        | j                        t        |      z
  }|rt        dt        |       d	      |j                         D ]C  \  }}t        |      t        |      k7  st        d
| dt        |       dt        |       d       | j                  r|t        d      t        ||       | S )a   Fit classifier.

        Parameters
        ----------
        X : array-like 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, n_outputs) or (n_samples,),                 default=None
            Target relative to X for classification or regression;
            None for unsupervised learning.

        sample_weight : array-like of shape (n_samples,), default=None
            Sample weights. If None, then samples are equally weighted.

        **fit_params : dict of string -> object
            Parameters passed to the ``fit`` method of the estimator

        Returns
        -------
        self
        r>   fitF)rQ   r   T)	ensure_2dallow_ndzExpected fit parameter(s) z
 not seen.zFit parameter z has length z; expected .z#Expected sample_weight to be passed)r
   rD   rU   rM   r'   n_features_in_uniquer   classes_rG   setAssertionErrorlistitemsrF   r	   )r   rO   rP   sample_weight
fit_paramsmissingkeyvalues           r   rW   zCheckingClassifier.fit   sE   0 A,q/111  E)Ud6K6K-K??1a%?@DAq hhqk!n		+a54"PQ##$223c*oEG$0gzJ  )..0
U&,q/9((\,u:M9N%l1o%6a9  1 &&$$%JKK 2r   c                     | j                   dk(  sd| j                   v r| j                  |      \  }}t        | j                        }|j	                  | j
                  t        |            S )a>  Predict the first class seen in `classes_`.

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

        Returns
        -------
        preds : ndarray of shape (n_samples,)
            Predictions of the first class seens in `classes_`.
        r>   predict)size)rD   rU   r   rH   choicer]   r
   r   rO   rP   rngs       r   rh   zCheckingClassifier.predict   s\       E)Y$:O:O-O??1%DAq !2!23zz$--l1oz>>r   c                 z   | j                   dk(  sd| j                   v r| j                  |      \  }}t        | j                        }|j	                  t        |      t        | j                              }t        j                  ||      }|t        j                  |d      ddt        j                  f   z  }|S )a  Predict probabilities for each class.

        Here, the dummy classifier will provide a probability of 1 for the
        first class of `classes_` and 0 otherwise.

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

        Returns
        -------
        proba : ndarray of shape (n_samples, n_classes)
            The probabilities for each sample and class.
        r>   predict_proba)outr   r8   N)rD   rU   r   rH   randnr
   r+   r]   rM   abssumnewaxis)r   rO   rP   rl   probas        r   rn   z CheckingClassifier.predict_proba  s        E)_@U@U-U??1%DAq !2!23		,q/3t}}+=>u%(A&q"**}55r   c                 N   | j                   dk(  sd| j                   v r| j                  |      \  }}t        | j                        }t	        | j
                        dk(  r|j                  t        |            S |j                  t        |      t	        | j
                              S )aB  Confidence score.

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

        Returns
        -------
        decision : ndarray of shape (n_samples,) if n_classes == 2                else (n_samples, n_classes)
            Confidence score.
        r>   decision_functionr   )rD   rU   r   rH   r+   r]   rp   r
   rk   s       r   rv   z$CheckingClassifier.decision_function  s     !!U*"d&;&;;??1%DAq !2!23t}}" 99\!_--99\!_c$--.@AAr   c                     | j                   dk(  sd| j                   v r| j                  ||       | j                  dkD  rd}|S d}|S )aQ  Fake score.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_features)
            Input data, where `n_samples` is the number of samples and
            `n_features` is the number of features.

        Y : array-like of shape (n_samples, n_output) or (n_samples,)
            Target relative to X for classification or regression;
            None for unsupervised learning.

        Returns
        -------
        score : float
            Either 0 or 1 depending of `foo_param` (i.e. `foo_param > 1 =>
            score=1` otherwise `score=0`).
        r>   scorer   g      ?g        )rD   rU   rE   )r   rO   Yrx   s       r   rx   zCheckingClassifier.score4  sQ    &   E)W8M8M-MOOAq!>>AE  Er   c                     ddgdS )NT1dlabel)
_skip_testX_typesr#   r,   s    r   
_more_tagszCheckingClassifier._more_tagsO  s    "	{;;r   )NTr   )NN)r   r    r!   r"   r   rU   rW   rh   rn   rv   rx   r~   r#   r   r   r=   r=   A   sP    ?H # ).#J.`?$0B66<r   r=   rW   F)namekeysvalidate_keysc                   0    e Zd ZdZddZd Zd Zd Zd Zy)	NoSampleWeightWrapperzWrap estimator which will not expose `sample_weight`.

    Parameters
    ----------
    est : estimator, default=None
        The estimator to wrap.
    Nc                     || _         y r   )est)r   r   s     r   r   zNoSampleWeightWrapper.__init__d  s	    r   c                 :    | j                   j                  ||      S r   )r   rW   r   rO   rP   s      r   rW   zNoSampleWeightWrapper.fitg  s    xx||Aq!!r   c                 8    | j                   j                  |      S r   )r   rh   r   rO   s     r   rh   zNoSampleWeightWrapper.predictj  s    xx""r   c                 8    | j                   j                  |      S r   )r   rn   r   s     r   rn   z#NoSampleWeightWrapper.predict_probam  s    xx%%a((r   c                 
    ddiS )Nr|   Tr#   r,   s    r   r~   z NoSampleWeightWrapper._more_tagsp  s    d##r   r   )	r   r    r!   r"   r   rW   rh   rn   r~   r#   r   r   r   r   [  s     "#)$r   r   c                       fd}|S )Nc                 @    | j                   d uxr | j                   v S r   response_methods)r   methods    r   checkz_check_response.<locals>.checku  s$    $$D0TVt?T?T5TTr   r#   )r   r   s   ` r   _check_responser   t  s    U Lr   c                       e Zd ZdZddZd Z e ed            d        Z e ed            d        Z	 e ed	            d
        Z
y)_MockEstimatorOnOffPredictiona  Estimator for which we can turn on/off the prediction methods.

    Parameters
    ----------
    response_methods: list of             {"predict", "predict_proba", "decision_function"}, default=None
        List containing the response implemented by the estimator. When, the
        response is in the list, it will return the name of the response method
        when called. Otherwise, an `AttributeError` is raised. It allows to
        use `getattr` as any conventional estimator. By default, no response
        methods are mocked.
    Nc                     || _         y r   r   )r   r   s     r   r   z&_MockEstimatorOnOffPrediction.__init__  s
     0r   c                 :    t        j                  |      | _        | S r   )rM   r\   r]   r   s      r   rW   z!_MockEstimatorOnOffPrediction.fit  s    		!r   rh   c                      y)Nrh   r#   r   s     r   rh   z%_MockEstimatorOnOffPrediction.predict  s    r   rn   c                      y)Nrn   r#   r   s     r   rn   z+_MockEstimatorOnOffPrediction.predict_proba  s    r   rv   c                      y)Nrv   r#   r   s     r   rv   z/_MockEstimatorOnOffPrediction.decision_function  s    "r   r   )r   r    r!   r"   r   rW   r   r   rh   rn   rv   r#   r   r   r   r   {  sl    1 /),- . //23 4 /"567# 8#r   r   )numpyrM   baser   r   utils._metadata_requestsr   metaestimatorsr   
validationr	   r
   r   r   r   r   r   r=   set_fit_requestr   r   r   r#   r   r   <module>r      sw     1 4 ( 1 1!B !BHO<- O<j &3	Ru&  "
$M $2#M #r   