o
    i]5                     @   s   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	 d	ZG d
d dZG dd deeZedg dde_G dd deZdd ZG dd deZdS )    N   )BaseEstimatorClassifierMixin)RequestMethod   )available_if)_check_sample_weight_num_samplescheck_arraycheck_is_fittedcheck_random_statec                   @   s    e Zd ZdZdd Zdd ZdS )ArraySlicingWrapper-
    Parameters
    ----------
    array
    c                 C   
   || _ d S Narrayselfr    r   e/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/sklearn/utils/_mocking.py__init__      
zArraySlicingWrapper.__init__c                 C   s   t | j| S r   MockDataFramer   )r   Zaslicer   r   r   __getitem__      zArraySlicingWrapper.__getitem__N)__name__
__module____qualname____doc__r   r   r   r   r   r   r      s    r   c                   @   sD   e Zd ZdZdd Zdd ZdddZd	d
 Zdd ZdddZ	dS )r   r   c                 C   s*   || _ || _|j| _|j| _t|| _d S r   )r   valuesshapendimr   Zilocr   r   r   r   r   )   s
   zMockDataFrame.__init__c                 C   s
   t | jS r   )lenr   r   r   r   r   __len__1   r   zMockDataFrame.__len__Nc                 C   s   | j S r   r   )r   Zdtyper   r   r   	__array__4   s   zMockDataFrame.__array__c                 C   s   t | j|jkS r   r   r   otherr   r   r   __eq__:   s   zMockDataFrame.__eq__c                 C   s
   | |k S r   r   r(   r   r   r   __ne__=   r   zMockDataFrame.__ne__r   c                 C   s   t | jj||dS )Naxis)r   r   take)r   indicesr-   r   r   r   r.   @      zMockDataFrame.taker   )r   )
r   r   r   r    r   r&   r'   r*   r+   r.   r   r   r   r   r       s    
r   c                
       st   e Zd ZdZdddddddddd	ddZdd	d
ZdddZdd Zdd Zdd Z	dddZ
 fddZ  ZS )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       	   
      C   s:   || _ || _|| _|| _|| _|| _|| _|| _|	| _d S r   r3   )
r   r4   r5   r6   r7   r8   r9   r:   r;   r<   r   r   r   r      s   
zCheckingClassifier.__init__Tc                 C   s   |rt |  | jdur-| jdu ri n| j}| j|fi |}t|ttjfr+|s*J n|}|dur[| jdur[| jdu r=i n| j}| j|fi |}t|ttjfrY|sUJ ||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
        N)	r   r6   r7   
isinstanceboolnpZbool_r4   r5   )r   Xyshould_be_fittedparamsZ	checked_XZ	checked_yr   r   r   
_check_X_y   s    

zCheckingClassifier._check_X_yc              	   K   s   t |t |ks
J | jdksd| jv r| j||dd\}}t|d | _tt|ddd| _| j	rlt
| j	t
| }|rItdt| d	| D ]\}}t |t |krktd
| dt | dt | dqM| jr||du rwt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
        r2   fitF)rB   r   T)Z	ensure_2dZallow_ndzExpected fit parameter(s) z
 not seen.zFit parameter z has length z; expected .Nz#Expected sample_weight to be passed)r	   r8   rD   r?   r"   Zn_features_in_uniquer
   classes_r;   setAssertionErrorlistitemsr:   r   )r   r@   rA   Zsample_weightZ
fit_paramsmissingkeyvaluer   r   r   rE      s0   
zCheckingClassifier.fitc                 C   s@   | j dks
d| j v r| |\}}t| j}|j| jt|d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 seen in `classes_`.
        r2   predict)size)r8   rD   r   r<   choicerH   r	   r   r@   rA   rngr   r   r   rP      s   
zCheckingClassifier.predictc                 C   st   | j dks
d| j v r| |\}}t| j}|t|t| j}tj	||d}|tj
|ddddtjf  }|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.
        r2   predict_proba)outr   r,   N)r8   rD   r   r<   randnr	   r$   rH   r?   abssumZnewaxis)r   r@   rA   rT   Zprobar   r   r   rU     s   
 z CheckingClassifier.predict_probac                 C   s^   | j dks
d| j v r| |\}}t| j}t| jdkr$|t|S |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.
        r2   decision_functionr   )r8   rD   r   r<   r$   rH   rW   r	   rS   r   r   r   rZ     s   


z$CheckingClassifier.decision_functionc                 C   s:   | j dks
d| j v r| || | jdk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`).
        r2   scorer   g      ?g        )r8   rD   r9   )r   r@   Yr[   r   r   r   r[   7  s   
zCheckingClassifier.scorec                    s$   t   }d|_d|j_d|j_|S )NTF)super__sklearn_tags__
_skip_testZ
input_tagsZtwo_d_arrayZtarget_tagsZone_d_labelsr   tags	__class__r   r   r^   R  s
   
z#CheckingClassifier.__sklearn_tags__NTr   )NN)r   r   r   r    r   rD   rE   rP   rU   rZ   r[   r^   __classcell__r   r   rb   r   r1   D   s&    D

%0
r1   rE   F)namekeysZvalidate_keysc                       sB   e Zd ZdZdddZdd Zdd Zd	d
 Z fddZ  Z	S )NoSampleWeightWrapperzWrap estimator which will not expose `sample_weight`.

    Parameters
    ----------
    est : estimator, default=None
        The estimator to wrap.
    Nc                 C   r   r   )est)r   ri   r   r   r   r   k  r   zNoSampleWeightWrapper.__init__c                 C   s   | j ||S r   )ri   rE   r   r@   rA   r   r   r   rE   n  r   zNoSampleWeightWrapper.fitc                 C      | j |S r   )ri   rP   r   r@   r   r   r   rP   q     zNoSampleWeightWrapper.predictc                 C   rk   r   )ri   rU   rl   r   r   r   rU   t  rm   z#NoSampleWeightWrapper.predict_probac                    s   t   }d|_|S rd   )r]   r^   r_   r`   rb   r   r   r^   w  s   
z&NoSampleWeightWrapper.__sklearn_tags__r   )
r   r   r   r    r   rE   rP   rU   r^   re   r   r   rb   r   rh   b  s    
rh   c                    s    fdd}|S )Nc                    s   | j d uo	 | j v S r   response_methodsr%   methodr   r   check~  r0   z_check_response.<locals>.checkr   )rq   rr   r   rp   r   _check_response}  s   rs   c                   @   s^   e Zd ZdZdddZdd Zeeddd	 Zeed
dd Z	eeddd Z
dS )_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                 C   r   r   rn   )r   ro   r   r   r   r     r   z&_MockEstimatorOnOffPrediction.__init__c                 C   s   t || _| S r   )r?   rG   rH   rj   r   r   r   rE     s   z!_MockEstimatorOnOffPrediction.fitrP   c                 C      dS )NrP   r   rl   r   r   r   rP        z%_MockEstimatorOnOffPrediction.predictrU   c                 C   ru   )NrU   r   rl   r   r   r   rU     rv   z+_MockEstimatorOnOffPrediction.predict_probarZ   c                 C   ru   )NrZ   r   rl   r   r   r   rZ     rv   z/_MockEstimatorOnOffPrediction.decision_functionr   )r   r   r   r    r   rE   r   rs   rP   rU   rZ   r   r   r   r   rt     s    





rt   )numpyr?   baser   r   Zutils._metadata_requestsr   Zmetaestimatorsr   Z
validationr   r	   r
   r   r   r   r   r1   Zset_fit_requestrh   rs   rt   r   r   r   r   <module>   s    	$  