o
    i/)                     @   s   d Z ddlmZmZ ddlZddl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 dd
lmZ ddlmZ 	dddZdddZG dd de
e	edZdd ZG dd de
eedZdS )z)Base class for ensemble-based estimators.    )ABCMetaabstractmethodN)effective_n_jobs   )BaseEstimatorMetaEstimatorMixincloneis_classifieris_regressor)Bunchcheck_random_state)get_tags)_print_elapsed_time)_routing_enabled)_BaseCompositionc              
   C   s   t  sId|v rIz$t|| | j|||d d W d   W | S 1 s$w   Y  W | S  tyH } zdt|v rCtd| jj| d}~ww t|| | j||fi | W d   | S 1 sdw   Y  | S )z7Private function used to fit an estimator within a job.sample_weight)r   Nz+unexpected keyword argument 'sample_weight'z8Underlying estimator {} does not support sample weights.)r   r   fit	TypeErrorstrformat	__class____name__)	estimatorXyZ
fit_paramsZmessage_clsnamemessageexc r   e/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/sklearn/ensemble/_base.py_fit_single_estimator   s4   	
r   c                 C   sh   t |}i }t| jddD ]}|dks|dr%|ttjj||< q|r2| j	di | dS dS )a  Set fixed random_state parameters for an estimator.

    Finds all parameters ending ``random_state`` and sets them to integers
    derived from ``random_state``.

    Parameters
    ----------
    estimator : estimator supporting get/set_params
        Estimator with potential randomness managed by random_state
        parameters.

    random_state : int, RandomState instance or None, default=None
        Pseudo-random number generator to control the generation of the random
        integers. Pass an int for reproducible output across multiple function
        calls.
        See :term:`Glossary <random_state>`.

    Notes
    -----
    This does not necessarily set *all* ``random_state`` attributes that
    control an estimator's randomness, only those accessible through
    ``estimator.get_params()``.  ``random_state``s not controlled include
    those belonging to:

        * cross-validation splitters
        * ``scipy.stats`` rvs
    Tdeeprandom_stateZ__random_stateNr   )
r   sorted
get_paramsendswithrandintnpZiinfoZint32max
set_params)r   r"   Zto_setkeyr   r   r   _set_random_states+   s   r+   c                   @   sV   e Zd ZdZe	dde dddZdddZdd
dZdd Z	dd Z
dd ZdS )BaseEnsemblea  Base class for all ensemble classes.

    Warning: This class should not be used directly. Use derived classes
    instead.

    Parameters
    ----------
    estimator : object
        The base estimator from which the ensemble is built.

    n_estimators : int, default=10
        The number of estimators in the ensemble.

    estimator_params : list of str, default=tuple()
        The list of attributes to use as parameters when instantiating a
        new base estimator. If none are given, default parameters are used.

    Attributes
    ----------
    estimator_ : estimator
        The base estimator from which the ensemble is grown.

    estimators_ : list of estimators
        The collection of fitted base estimators.
    N
   )n_estimatorsestimator_paramsc                C   s   || _ || _|| _d S N)r   r.   r/   )selfr   r.   r/   r   r   r   __init__l   s   	
zBaseEnsemble.__init__c                 C   s    | j dur| j | _dS || _dS )zMCheck the base estimator.

        Sets the `estimator_` attributes.
        N)r   
estimator_)r1   defaultr   r   r   _validate_estimator}   s   

z BaseEnsemble._validate_estimatorTc                    sP   t  j}|jdi  fdd jD  |durt|| |r& j| |S )zMake and configure a copy of the `estimator_` attribute.

        Warning: This method should be used to properly instantiate new
        sub-estimators.
        c                    s   i | ]}|t  |qS r   )getattr).0pr1   r   r   
<dictcomp>   s    z0BaseEnsemble._make_estimator.<locals>.<dictcomp>Nr   )r   r3   r)   r/   r+   estimators_append)r1   r<   r"   r   r   r9   r   _make_estimator   s   
 
zBaseEnsemble._make_estimatorc                 C   
   t | jS )z0Return the number of estimators in the ensemble.)lenr;   r9   r   r   r   __len__      
zBaseEnsemble.__len__c                 C   s
   | j | S )z.Return the index'th estimator in the ensemble.)r;   )r1   indexr   r   r   __getitem__   rA   zBaseEnsemble.__getitem__c                 C   r>   )z0Return iterator over estimators in the ensemble.)iterr;   r9   r   r   r   __iter__   rA   zBaseEnsemble.__iter__r0   )TN)r   
__module____qualname____doc__r   tupler2   r5   r=   r@   rC   rE   r   r   r   r   r,   Q   s    


r,   )	metaclassc                 C   s\   t t|| }tj|| | td}|d| |   d7  < t|}|| dg|  fS )z;Private function used to partition estimators between jobs.)ZdtypeN   r   )minr   r'   fullintZcumsumtolist)r.   Zn_jobsZn_estimators_per_jobZstartsr   r   r   _partition_estimators   s
   
rP   c                       sZ   e Zd ZdZedd Zedd Zdd Z fdd	Z	d fdd	Z
 fddZ  ZS )_BaseHeterogeneousEnsemblea  Base class for heterogeneous ensemble of learners.

    Parameters
    ----------
    estimators : list of (str, estimator) tuples
        The ensemble of estimators to use in the ensemble. Each element of the
        list is defined as a tuple of string (i.e. name of the estimator) and
        an estimator instance. An estimator can be set to `'drop'` using
        `set_params`.

    Attributes
    ----------
    estimators_ : list of estimators
        The elements of the estimators parameter, having been fitted on the
        training data. If an estimator has been set to `'drop'`, it will not
        appear in `estimators_`.
    c                 C   s   t di t| jS )zDictionary to access any fitted sub-estimators by name.

        Returns
        -------
        :class:`~sklearn.utils.Bunch`
        Nr   )r   dict
estimatorsr9   r   r   r   named_estimators   s   z+_BaseHeterogeneousEnsemble.named_estimatorsc                 C   s
   || _ d S r0   rS   )r1   rS   r   r   r   r2      rA   z#_BaseHeterogeneousEnsemble.__init__c                 C   s   t | jdkstdd | jD stdt| j \}}| | tdd |D }|s0tdt| r6tnt}|D ]}|dkrS||sStd	|j
j|jd	d  q:||fS )
Nr   c                 s   s,    | ]}t |ttfot |d  tV  qdS )r   N)
isinstancerI   listr   )r7   itemr   r   r   	<genexpr>   s
    
zB_BaseHeterogeneousEnsemble._validate_estimators.<locals>.<genexpr>zfInvalid 'estimators' attribute, 'estimators' should be a non-empty list of (string, estimator) tuples.c                 s   s    | ]}|d kV  qdS )dropNr   r7   estr   r   r   rY      s    zHAll estimators are dropped. At least one is required to be an estimator.rZ   z The estimator {} should be a {}.   )r?   rS   all
ValueErrorzipZ_validate_namesanyr	   r
   r   r   r   )r1   namesrS   Zhas_estimatorZis_estimator_typer\   r   r   r   _validate_estimators   s.   
z/_BaseHeterogeneousEnsemble._validate_estimatorsc                    s   t  jdi | | S )a  
        Set the parameters of an estimator from the ensemble.

        Valid parameter keys can be listed with `get_params()`. Note that you
        can directly set the parameters of the estimators contained in
        `estimators`.

        Parameters
        ----------
        **params : keyword arguments
            Specific parameters using e.g.
            `set_params(parameter_name=new_value)`. In addition, to setting the
            parameters of the estimator, the individual estimator of the
            estimators can also be set, or can be removed by setting them to
            'drop'.

        Returns
        -------
        self : object
            Estimator instance.
        rS   NrU   )superZ_set_params)r1   paramsr   r   r   r)      s   z%_BaseHeterogeneousEnsemble.set_paramsTc                    s   t  jd|dS )a<  
        Get the parameters of an estimator from the ensemble.

        Returns the parameters given in the constructor as well as the
        estimators contained within the `estimators` parameter.

        Parameters
        ----------
        deep : bool, default=True
            Setting it to True gets the various estimators and the parameters
            of the estimators as well.

        Returns
        -------
        params : dict
            Parameter and estimator names mapped to their values or parameter
            names mapped to their values.
        rS   r    )rd   Z_get_params)r1   r!   rf   r   r   r$     s   z%_BaseHeterogeneousEnsemble.get_paramsc                    sV   t   }ztdd | jD |j_tdd | jD |j_W |S  ty*   Y |S w )Nc                 s   0    | ]}|d  dkrt |d  jjndV  qdS rK   rZ   TN)r   
input_tags	allow_nanr[   r   r   r   rY   &  
    
z>_BaseHeterogeneousEnsemble.__sklearn_tags__.<locals>.<genexpr>c                 s   rg   rh   )r   ri   sparser[   r   r   r   rY   *  rk   )rd   __sklearn_tags__r^   rS   ri   rj   rl   	Exception)r1   tagsrf   r   r   rm   #  s   
	z+_BaseHeterogeneousEnsemble.__sklearn_tags__)T)r   rF   rG   rH   propertyrT   r   r2   rc   r)   r$   rm   __classcell__r   r   rf   r   rQ      s    
	
 rQ   )NNr0   )rH   abcr   r   numpyr'   Zjoblibr   baser   r   r   r	   r
   utilsr   r   Zutils._tagsr   Zutils._user_interfacer   Zutils.metadata_routingr   Zutils.metaestimatorsr   r   r+   r,   rP   rQ   r   r   r   r   <module>   s$    

&T

