o
    tBh)                     @   s  d Z ddlZddlZddlmZ ddlZddlZddlZddlZ	ddl
mZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddddZdefddZG dd dZ G dd dZ!G dd dZ"G dd dZ#G d d! d!Z$G d"d# d#Z%G d$d% d%Z&G d&d' d'Z'G d(d) d)Z(G d*d+ d+Z)G d,d- d-Z*G d.d/ d/Z+G d0d1 d1Z,d2d3 Z-d4d5 Z.d6d7 Z/dS )8z Base classes for all estimators.    N)defaultdict   )__version__)
get_config)	_IS_32BIT_DEFAULT_TAGS)	check_X_ycheck_array)_check_y)_num_features_check_feature_names_in)_generate_get_feature_names_out)check_is_fittedestimator_html_repr)_get_feature_namesTsafec                   s   t | }|ttttfv r| fdd| D S t| dr!t| t r= s(t| S t| t r1t	dt	dt
| t | f | j}| jdd}| D ]\}}t|dd||< qJ|di |}|jdd}|D ]}|| }	|| }
|	|
ur|td	| |f qf|S )ar  Construct a new unfitted estimator with the same parameters.

    Clone does a deep copy of the model in an estimator
    without actually copying attached data. It returns a new estimator
    with the same parameters that has not been fitted on any data.

    Parameters
    ----------
    estimator : {list, tuple, set} of estimator instance or a single             estimator instance
        The estimator or group of estimators to be cloned.
    safe : bool, default=True
        If safe is False, clone will fall back to a deep copy on objects
        that are not estimators.

    Returns
    -------
    estimator : object
        The deep copy of the input, an estimator if input is an estimator.

    Notes
    -----
    If the estimator's `random_state` parameter is an integer (or if the
    estimator doesn't have a `random_state` parameter), an *exact clone* is
    returned: the clone and the original estimator will give the exact same
    results. Otherwise, *statistical clone* is returned: the clone might
    return different results from the original estimator. More details can be
    found in :ref:`randomness`.
    c                    s   g | ]}t | d qS )r   )clone).0er    c/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/base.py
<listcomp>A   s    zclone.<locals>.<listcomp>
get_paramszaCannot clone object. You should provide an instance of scikit-learn estimator instead of a class.zCannot clone object '%s' (type %s): it does not seem to be a scikit-learn estimator as it does not implement a 'get_params' method.Fdeepr   zWCannot clone object %s, as the constructor either does not set or modifies parameter %sNr   )typelisttupleset	frozensethasattr
isinstancecopydeepcopy	TypeErrorrepr	__class__r   itemsr   RuntimeError)	estimatorr   estimator_typeklassnew_object_paramsnameparam
new_object
params_setparam1param2r   r   r   r       s@   

r   c                 C   s>  t  }t jdddd t }|}dd|d  d  }tt|  D ]_\}\}}	t|	tu r8d|t	|	f }
nd|||	f }
t
|
d	krT|
d
d d |
dd
  }
|dkrw|t
|
 dksdd|
v rn|| t
|}n	|d |d7 }||
 |t
|
7 }q#t jdi | d|}ddd |dD }|S )af  Pretty print the dictionary 'params'

    Parameters
    ----------
    params : dict
        The dictionary to pretty print

    offset : int, default=0
        The offset in characters to add at the begin of each line.

    printer : callable, default=repr
        The function to convert entries to strings, typically
        the builtin str or repr

       @      )	precision	threshold	edgeitemsz,
r    z%s=%si  Ni,  ...ir   K   
z,  c                 s   s    | ]}| d V  qdS )r>   N)rstrip)r   lr   r   r   	<genexpr>   s    z_pprint.<locals>.<genexpr>r   )npget_printoptionsset_printoptionsr!   	enumeratesortedr,   r    floatstrlenappendjoinsplit)paramsoffsetprinteroptionsparams_listthis_line_lengthline_sepikv	this_reprlinesr   r   r   _pprintg   s.   




r]   c                       s   e Zd ZdZedd Zd"ddZdd Zd#d
dZ fddZ	 fddZ
dd Zdd Zdd Zdd Z				d$ddZedd Zdd Zd d! Z  ZS )%BaseEstimatorzBase class for all estimators in scikit-learn.

    Notes
    -----
    All estimators should specify all the parameters that can be set
    at the class level in their ``__init__`` as explicit keyword
    arguments (no ``*args`` or ``**kwargs``).
    c                 C   st   t | jd| j}|tju rg S t|}dd |j D }|D ]}|j|jkr0t	d| |f q t
dd |D S )z%Get parameter names for the estimatordeprecated_originalc                 S   s&   g | ]}|j d kr|j|jkr|qS self)r2   kindVAR_KEYWORDr   pr   r   r   r      s
    z2BaseEstimator._get_param_names.<locals>.<listcomp>zscikit-learn estimators should always specify their parameters in the signature of their __init__ (no varargs). %s with constructor %s doesn't  follow this convention.c                 S   s   g | ]}|j qS r   )r2   rd   r   r   r   r      s    )getattr__init__objectinspect	signature
parametersvaluesrb   VAR_POSITIONALr-   rJ   )clsinitinit_signaturerk   re   r   r   r   _get_param_names   s    

	zBaseEstimator._get_param_namesTc                    s\   t  }|  D ]$ t|  }|r't|dr'|  }| fdd|D  || < q|S )ae  
        Get parameters for this estimator.

        Parameters
        ----------
        deep : bool, default=True
            If True, will return the parameters for this estimator and
            contained subobjects that are estimators.

        Returns
        -------
        params : dict
            Parameter names mapped to their values.
        r   c                 3   s$    | ]\}} d  | |fV  qdS )__Nr   )r   rY   valkeyr   r   rE      s   " z+BaseEstimator.get_params.<locals>.<genexpr>)dictrq   rf   r%   r   r,   update)ra   r   outvalue
deep_itemsr   rt   r   r      s   

zBaseEstimator.get_paramsc           
   	   K   s   |s| S | j dd}tt}| D ]5\}}|d\}}}||vr4|  }td|d|  d|d|r=||| |< qt| || |||< q| D ]\}}	|| jd	i |	 qL| S )
a  Set the parameters of this estimator.

        The method works on simple estimators as well as on nested objects
        (such as :class:`~sklearn.pipeline.Pipeline`). The latter have
        parameters of the form ``<component>__<parameter>`` so that it's
        possible to update each component of a nested object.

        Parameters
        ----------
        **params : dict
            Estimator parameters.

        Returns
        -------
        self : estimator instance
            Estimator instance.
        Tr   rr   zInvalid parameter z for estimator z. Valid parameters are: .Nr   )	r   r   rv   r,   	partitionrq   
ValueErrorsetattr
set_params)
ra   rQ   valid_paramsnested_paramsru   ry   delimsub_keylocal_valid_params
sub_paramsr   r   r   r      s(   
zBaseEstimator.set_params  c                 C   s   ddl m} d}|ddd|d}|| }td| }||krv|d }d| }t|| }	t||d d d	  }
d
||	|
  v rY|d7 }t||d d d	  }
d}|	t| t||
 k rv|d |	 d ||
 d   }|S )Nr   )_EstimatorPrettyPrinter   T)compactindentindent_at_namen_max_elements_to_showrB   r:   z^(\s*\S){%d}rA   z[^\n]*\nr?   )	utils._pprintr   pformatrM   rO   rP   rematchend)ra   
N_CHAR_MAXr   N_MAX_ELEMENTS_TO_SHOWpprepr_
n_nonblanklimregexleft_lim	right_limellipsisr   r   r   __repr__  s,   
	zBaseEstimator.__repr__c                    sP   zt   }W n ty   | j }Y nw t| jdr&t|	 t
dS |S )Nsklearn.)_sklearn_version)super__getstate__AttributeError__dict__r'   r    
__module__
startswithrv   r,   r   )ra   stater+   r   r   r   :  s   zBaseEstimator.__getstate__c                    sr   t | jdr|dd}|tkrtd| jj	|tt
 z	t | W d S  ty8   | j| Y d S w )Nr   r   zpre-0.18a  Trying to unpickle estimator {0} from version {1} when using version {2}. This might lead to breaking code or invalid results. Use at your own risk. For more info please refer to:
https://scikit-learn.org/stable/model_persistence.html#security-maintainability-limitations)r    r   r   popr   warningswarnformatr+   __name__UserWarningr   __setstate__r   r   rw   )ra   r   pickle_versionr   r   r   r   E  s   
zBaseEstimator.__setstate__c                 C   s   t S Nr   r`   r   r   r   
_more_tagsY  s   zBaseEstimator._more_tagsc                 C   s<   i }t t| jD ]}t|dr|| }|| q
|S )Nr   )reversedri   getmror+   r%   r   rw   )ra   collected_tags
base_class	more_tagsr   r   r   	_get_tags\  s   


zBaseEstimator._get_tagsc              
   C   s   zt |}W n) ty/ } z|s$t| dr$td| jj d| j d|W Y d}~dS d}~ww |r7|| _dS t| ds>dS || jkrTtd| d| jj d| j ddS )	a  Set the `n_features_in_` attribute, or check against it.

        Parameters
        ----------
        X : {ndarray, sparse matrix} of shape (n_samples, n_features)
            The input samples.
        reset : bool
            If True, the `n_features_in_` attribute is set to `X.shape[1]`.
            If False and the attribute exists, then check that it is equal to
            `X.shape[1]`. If False and the attribute does *not* exist, then
            the check is skipped.
            .. note::
               It is recommended to call reset=True in `fit` and in the first
               call to `partial_fit`. All other methods that validate `X`
               should set `reset=False`.
        n_features_in_z%X does not contain any features, but z is expecting z	 featuresNzX has z features, but z features as input.)r   r)   r%   r}   r+   r   r   )ra   Xreset
n_featuresr   r   r   r   _check_n_featuresg  s8   

zBaseEstimator._check_n_featuresc                C   sX  |rt |}|dur|| _dS t| drt| d dS t| dd}t |}|du r/|du r/dS |durD|du rDtd| jj d dS |du rY|durYtd| jj d dS t	|t	|ksht
||krd}t|}t|}t|| }	t|| }
dd	 }|	r|d
7 }|||	7 }|
r|d7 }|||
7 }|
s|	s|d7 }t|t dS dS )a  Set or check the `feature_names_in_` attribute.

        .. versionadded:: 1.0

        Parameters
        ----------
        X : {ndarray, dataframe} of shape (n_samples, n_features)
            The input samples.

        reset : bool
            Whether to reset the `feature_names_in_` attribute.
            If False, the input will be checked for consistency with
            feature names of data provided when reset was last True.
            .. note::
               It is recommended to call `reset=True` in `fit` and in the first
               call to `partial_fit`. All other methods that validate `X`
               should set `reset=False`.
        Nfeature_names_in_zX has feature names, but z! was fitted without feature namesz)X does not have valid feature names, but z was fitted with feature nameszqThe feature names should match those that were passed during fit. Starting version 1.2, an error will be raised.
c                 S   sD   d}d}t | D ]\}}||kr|d7 } |S |d| d7 }q|S )NrB   r8   z- ...
z- rA   )rI   )namesoutputmax_n_namesrX   r2   r   r   r   	add_names  s   z5BaseEstimator._check_feature_names.<locals>.add_namesz"Feature names unseen at fit time:
z1Feature names seen at fit time, yet now missing:
z=Feature names must be in the same order as they were in fit.
)r   r   r%   delattrrf   r   r   r+   r   rM   rF   anyr#   rJ   FutureWarning)ra   r   r   feature_names_infitted_feature_namesX_feature_namesmessagefitted_feature_names_setX_feature_names_setunexpected_namesmissing_namesr   r   r   r   _check_feature_names  s\   


z"BaseEstimator._check_feature_namesno_validationFc                 K   sd  | j ||d |du r|  d rtd| jj dt|to#|dk}|du p0t|to0|dk}d| i}i ||}|rC|rCtd|sT|rTt|fd	d
i|}|}	nM|rc|sct|fi |}|}	n>|r|\}
}d|
vrsi ||
}
t|fd	d
i|
}d|vri ||}t|fd	di|}nt	||fi |\}}||f}	|s|
ddr| j||d |	S )a}
  Validate input data and set or check the `n_features_in_` attribute.

        Parameters
        ----------
        X : {array-like, sparse matrix, dataframe} of shape                 (n_samples, n_features), default='no validation'
            The input samples.
            If `'no_validation'`, no validation is performed on `X`. This is
            useful for meta-estimator which can delegate input validation to
            their underlying estimator(s). In that case `y` must be passed and
            the only accepted `check_params` are `multi_output` and
            `y_numeric`.

        y : array-like of shape (n_samples,), default='no_validation'
            The targets.

            - If `None`, `check_array` is called on `X`. If the estimator's
              requires_y tag is True, then an error will be raised.
            - If `'no_validation'`, `check_array` is called on `X` and the
              estimator's requires_y tag is ignored. This is a default
              placeholder and is never meant to be explicitly set. In that case
              `X` must be passed.
            - Otherwise, only `y` with `_check_y` or both `X` and `y` are
              checked with either `check_array` or `check_X_y` depending on
              `validate_separately`.

        reset : bool, default=True
            Whether to reset the `n_features_in_` attribute.
            If False, the input will be checked for consistency with data
            provided when reset was last True.
            .. note::
               It is recommended to call reset=True in `fit` and in the first
               call to `partial_fit`. All other methods that validate `X`
               should set `reset=False`.

        validate_separately : False or tuple of dicts, default=False
            Only used if y is not None.
            If False, call validate_X_y(). Else, it must be a tuple of kwargs
            to be used for calling check_array() on X and y respectively.

            `estimator=self` is automatically added to these dicts to generate
            more informative error message in case of invalid input data.

        **check_params : kwargs
            Parameters passed to :func:`sklearn.utils.check_array` or
            :func:`sklearn.utils.check_X_y`. Ignored if validate_separately
            is not False.

            `estimator=self` is automatically added to these params to generate
            more informative error message in case of invalid input data.

        Returns
        -------
        out : {ndarray, sparse matrix} or tuple of these
            The validated input. A tuple is returned if both `X` and `y` are
            validated.
        )r   N
requires_yzThis z= estimator requires y to be passed, but the target y is None.r   r.   z*Validation should be done on X, y or both.
input_namer   y	ensure_2dT)r   r   r}   r+   r   r&   rL   r   r   r	   getr   )ra   r   r   r   validate_separatelycheck_paramsno_val_Xno_val_ydefault_check_paramsrx   check_X_paramscheck_y_paramsr   r   r   _validate_data  s<   AzBaseEstimator._validate_datac                 C   s   t  d dkrtd| jS )a  HTML representation of estimator.

        This is redundant with the logic of `_repr_mimebundle_`. The latter
        should be favorted in the long term, `_repr_html_` is only
        implemented for consumers who do not interpret `_repr_mimbundle_`.
        displaydiagramzW_repr_html_ is only defined when the 'display' configuration option is set to 'diagram')r   r   _repr_html_innerr`   r   r   r   _repr_html_\  s
   zBaseEstimator._repr_html_c                 C   s   t | S )zThis function is returned by the @property `_repr_html_` to make
        `hasattr(estimator, "_repr_html_") return `True` or `False` depending
        on `get_config()["display"]`.
        r   r`   r   r   r   r   l  s   zBaseEstimator._repr_html_innerc                 K   s*   dt | i}t d dkrt| |d< |S )z8Mime bundle used by jupyter kernels to display estimatorz
text/plainr   r   z	text/html)r*   r   r   )ra   kwargsr   r   r   r   _repr_mimebundle_s  s   zBaseEstimator._repr_mimebundle_)T)r   )r   r   TF)r   r   __qualname____doc__classmethodrq   r   r   r   r   r   r   r   r   r   r   propertyr   r   r   __classcell__r   r   r   r   r^      s,    	


,4.\
m
r^   c                   @   &   e Zd ZdZdZdddZdd ZdS )	ClassifierMixinz0Mixin class for all classifiers in scikit-learn.
classifierNc                 C   s    ddl m} ||| ||dS )a  
        Return the mean accuracy on the given test data and labels.

        In multi-label classification, this is the subset accuracy
        which is a harsh metric since you require for each sample that
        each label set be correctly predicted.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_features)
            Test samples.

        y : array-like of shape (n_samples,) or (n_samples, n_outputs)
            True labels for `X`.

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

        Returns
        -------
        score : float
            Mean accuracy of ``self.predict(X)`` wrt. `y`.
        r   )accuracy_scoresample_weight)metricsr   predict)ra   r   r   r   r   r   r   r   score  s   zClassifierMixin.scorec                 C      ddiS Nr   Tr   r`   r   r   r   r        zClassifierMixin._more_tagsr   r   r   r   r   _estimator_typer   r   r   r   r   r   r   {  s
    
r   c                   @   r   )	RegressorMixinz:Mixin class for all regression estimators in scikit-learn.	regressorNc                 C   s$   ddl m} | |}||||dS )a  Return the coefficient of determination of the prediction.

        The coefficient of determination :math:`R^2` is defined as
        :math:`(1 - \frac{u}{v})`, where :math:`u` is the residual
        sum of squares ``((y_true - y_pred)** 2).sum()`` and :math:`v`
        is the total sum of squares ``((y_true - y_true.mean()) ** 2).sum()``.
        The best possible score is 1.0 and it can be negative (because the
        model can be arbitrarily worse). A constant model that always predicts
        the expected value of `y`, disregarding the input features, would get
        a :math:`R^2` score of 0.0.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_features)
            Test samples. For some estimators this may be a precomputed
            kernel matrix or a list of generic objects instead with shape
            ``(n_samples, n_samples_fitted)``, where ``n_samples_fitted``
            is the number of samples used in the fitting for the estimator.

        y : array-like of shape (n_samples,) or (n_samples, n_outputs)
            True values for `X`.

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

        Returns
        -------
        score : float
            :math:`R^2` of ``self.predict(X)`` wrt. `y`.

        Notes
        -----
        The :math:`R^2` score used when calling ``score`` on a regressor uses
        ``multioutput='uniform_average'`` from version 0.23 to keep consistent
        with default value of :func:`~sklearn.metrics.r2_score`.
        This influences the ``score`` method of all the multioutput
        regressors (except for
        :class:`~sklearn.multioutput.MultiOutputRegressor`).
        r   )r2_scorer   )r   r   r   )ra   r   r   r   r   y_predr   r   r   r     s   )
zRegressorMixin.scorec                 C   r   r   r   r`   r   r   r   r     r   zRegressorMixin._more_tagsr   r   r   r   r   r   r     s
    
.r   c                   @   r   )	ClusterMixinz7Mixin class for all cluster estimators in scikit-learn.	clustererNc                 C   s   |  | | jS )a  
        Perform clustering on `X` and returns cluster labels.

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

        y : Ignored
            Not used, present for API consistency by convention.

        Returns
        -------
        labels : ndarray of shape (n_samples,), dtype=np.int64
            Cluster labels.
        )fitlabels_ra   r   r   r   r   r   fit_predict  s   
zClusterMixin.fit_predictc                 C   s   dg iS )Npreserves_dtyper   r`   r   r   r   r     r   zClusterMixin._more_tagsr   )r   r   r   r   r   r   r   r   r   r   r   r     s
    
r   c                   @   s4   e Zd ZdZedd Zdd Zdd Zdd	 Zd
S )BiclusterMixinz9Mixin class for all bicluster estimators in scikit-learn.c                 C   s   | j | jfS )z{Convenient way to get row and column indicators together.

        Returns the ``rows_`` and ``columns_`` members.
        )rows_columns_r`   r   r   r   biclusters_  s   zBiclusterMixin.biclusters_c                 C   s0   | j | }| j| }t|d t|d fS )a  Row and column indices of the `i`'th bicluster.

        Only works if ``rows_`` and ``columns_`` attributes exist.

        Parameters
        ----------
        i : int
            The index of the cluster.

        Returns
        -------
        row_ind : ndarray, dtype=np.intp
            Indices of rows in the dataset that belong to the bicluster.
        col_ind : ndarray, dtype=np.intp
            Indices of columns in the dataset that belong to the bicluster.
        r   )r  r  rF   nonzero)ra   rX   rowscolumnsr   r   r   get_indices  s   

zBiclusterMixin.get_indicesc                 C   s   |  |}tdd |D S )a-  Shape of the `i`'th bicluster.

        Parameters
        ----------
        i : int
            The index of the cluster.

        Returns
        -------
        n_rows : int
            Number of rows in the bicluster.

        n_cols : int
            Number of columns in the bicluster.
        c                 s   s    | ]}t |V  qd S r   )rM   )r   rX   r   r   r   rE   '  s    z+BiclusterMixin.get_shape.<locals>.<genexpr>)r  r"   )ra   rX   indicesr   r   r   	get_shape  s   
zBiclusterMixin.get_shapec                 C   s@   ddl m} ||dd}| |\}}||ddtjf |f S )a   Return the submatrix corresponding to bicluster `i`.

        Parameters
        ----------
        i : int
            The index of the cluster.
        data : array-like of shape (n_samples, n_features)
            The data.

        Returns
        -------
        submatrix : ndarray of shape (n_rows, n_cols)
            The submatrix corresponding to bicluster `i`.

        Notes
        -----
        Works with sparse matrices. Only works if ``rows_`` and
        ``columns_`` attributes exist.
        r   r
   csr)accept_sparseN)utils.validationr   r  rF   newaxis)ra   rX   datar   row_indcol_indr   r   r   get_submatrix)  s   zBiclusterMixin.get_submatrixN)	r   r   r   r   r   r  r  r	  r  r   r   r   r   r     s    
r   c                   @      e Zd ZdZdddZdS )TransformerMixinz1Mixin class for all transformers in scikit-learn.Nc                 K   s:   |du r| j |fi ||S | j ||fi ||S )a  
        Fit to data, then transform it.

        Fits transformer to `X` and `y` with optional parameters `fit_params`
        and returns a transformed version of `X`.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_features)
            Input samples.

        y :  array-like of shape (n_samples,) or (n_samples, n_outputs),                 default=None
            Target values (None for unsupervised transformations).

        **fit_params : dict
            Additional fit parameters.

        Returns
        -------
        X_new : ndarray array of shape (n_samples, n_features_new)
            Transformed array.
        N)r   	transform)ra   r   r   
fit_paramsr   r   r   fit_transformG  s   zTransformerMixin.fit_transformr   )r   r   r   r   r  r   r   r   r   r  D  s    r  c                   @   r  )_OneToOneFeatureMixinzProvides `get_feature_names_out` for simple transformers.

    Assumes there's a 1-to-1 correspondence between input features
    and output features.
    Nc                 C   s
   t | |S )a  Get output feature names for transformation.

        Parameters
        ----------
        input_features : array-like of str or None, default=None
            Input features.

            - If `input_features` is `None`, then `feature_names_in_` is
              used as feature names in. If `feature_names_in_` is not defined,
              then the following input feature names are generated:
              `["x0", "x1", ..., "x(n_features_in_ - 1)"]`.
            - If `input_features` is an array-like, then `input_features` must
              match `feature_names_in_` if `feature_names_in_` is defined.

        Returns
        -------
        feature_names_out : ndarray of str objects
            Same as input features.
        r   ra   input_featuresr   r   r   get_feature_names_outp  s   
z+_OneToOneFeatureMixin.get_feature_names_outr   r   r   r   r   r  r   r   r   r   r  i  s    r  c                   @   r  ) _ClassNamePrefixFeaturesOutMixinzMixin class for transformers that generate their own names by prefixing.

    Assumes that `_n_features_out` is defined for the estimator.
    Nc                 C   s   t | d t| | j|dS )al  Get output feature names for transformation.

        Parameters
        ----------
        input_features : array-like of str or None, default=None
            Only used to validate feature names with the names seen in :meth:`fit`.

        Returns
        -------
        feature_names_out : ndarray of str objects
            Transformed feature names.
        _n_features_out)r  )r   r   r  r  r   r   r   r    s   
z6_ClassNamePrefixFeaturesOutMixin.get_feature_names_outr   r  r   r   r   r   r    s    r  c                   @      e Zd ZdZdZdddZdS )DensityMixinz7Mixin class for all density estimators in scikit-learn.DensityEstimatorNc                 C   s   dS )a=  Return the score of the model on the data `X`.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_features)
            Test samples.

        y : Ignored
            Not used, present for API consistency by convention.

        Returns
        -------
        score : float
        Nr   r   r   r   r   r     s   zDensityMixin.scorer   )r   r   r   r   r   r   r   r   r   r   r        r  c                   @   r  )OutlierMixinzAMixin class for all outlier detection estimators in scikit-learn.outlier_detectorNc                 C   s   |  ||S )a  Perform fit on X and returns labels for X.

        Returns -1 for outliers and 1 for inliers.

        Parameters
        ----------
        X : {array-like, sparse matrix} of shape (n_samples, n_features)
            The input samples.

        y : Ignored
            Not used, present for API consistency by convention.

        Returns
        -------
        y : ndarray of shape (n_samples,)
            1 for inliers, -1 for outliers.
        )r   r   r   r   r   r   r     s   zOutlierMixin.fit_predictr   )r   r   r   r   r   r   r   r   r   r   r"    r!  r"  c                   @   s   e Zd ZdgZdS )MetaEstimatorMixinr.   N)r   r   r   _required_parametersr   r   r   r   r$    s    r$  c                   @      e Zd ZdZdd ZdS )MultiOutputMixinz2Mixin to mark estimators that support multioutput.c                 C   r   )NmultioutputTr   r`   r   r   r   r     r   zMultiOutputMixin._more_tagsNr   r   r   r   r   r   r   r   r   r'        r'  c                   @   r&  )_UnstableArchMixinz=Mark estimators that are non-determinstic on 32bit or PowerPCc                 C   s   dt p	t diS )Nnon_deterministic)ppcpowerpc)r   platformmachiner   r`   r   r   r   r     s   z_UnstableArchMixin._more_tagsNr)  r   r   r   r   r+    r*  r+  c                 C      t | dddkS )a  Return True if the given estimator is (probably) a classifier.

    Parameters
    ----------
    estimator : object
        Estimator object to test.

    Returns
    -------
    out : bool
        True if estimator is a classifier and False otherwise.
    r   Nr   rf   r.   r   r   r   is_classifier     r4  c                 C   r1  )a  Return True if the given estimator is (probably) a regressor.

    Parameters
    ----------
    estimator : estimator instance
        Estimator object to test.

    Returns
    -------
    out : bool
        True if estimator is a regressor and False otherwise.
    r   Nr   r2  r3  r   r   r   is_regressor  r5  r6  c                 C   r1  )a  Return True if the given estimator is (probably) an outlier detector.

    Parameters
    ----------
    estimator : estimator instance
        Estimator object to test.

    Returns
    -------
    out : bool
        True if estimator is an outlier detector and False otherwise.
    r   Nr#  r2  r3  r   r   r   is_outlier_detector	  r5  r7  )0r   r'   r   collectionsr   r/  ri   r   numpyrF   rB   r   _configr   utilsr   utils._tagsr   r  r	   r   r   r   r   r   r   utils._estimator_html_reprr   r   r   r*   r]   r^   r   r   r   r   r  r  r  r  r"  r$  r'  r+  r4  r6  r7  r   r   r   r   <module>   sT    G2   e%7N%