U
    _»{j  ã                   @   sX   d 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 G dd	„ d	eƒZdS )
zY
Feature agglomeration. Base classes and functions for performing feature
agglomeration.
é    N)Úissparseé   )ÚTransformerMixin)Úmetadata_routing)Úcheck_is_fittedc                   @   s,   e Zd ZdZdejiZdd„ Zddd„ZdS )	ÚAgglomerationTransformzH
    A class for feature agglomeration via the transform interface.
    ÚXredc                    sŽ   t ˆƒ ˆjˆ dd�‰ ˆjtjkrbtˆ ƒsbt ˆj¡‰ˆ jd }t 	‡ ‡‡fdd„t
|ƒD ƒ¡}n(‡ ‡fdd„t ˆj¡D ƒ}t 	|¡j}|S )aì  
        Transform a new matrix using the built clustering.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_features) or                 (n_samples, n_samples)
            A M by N array of M observations in N dimensions or a length
            M array of M one-dimensional observations.

        Returns
        -------
        Y : ndarray of shape (n_samples, n_clusters) or (n_clusters,)
            The pooled values for each feature cluster.
        F)Úresetr   c              	      s*   g | ]"}t  ˆjˆ |d d …f ¡ˆ ‘qS )N)ÚnpÚbincountÚlabels_)Ú.0Úi©ÚXÚselfÚsize© úe/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/cluster/_feature_agglomeration.pyÚ
<listcomp>7   s     z4AgglomerationTransform.transform.<locals>.<listcomp>c                    s,   g | ]$}ˆj ˆ d d …ˆj|kf dd�‘qS )Né   )Zaxis)Úpooling_funcr   )r   Úl)r   r   r   r   r   :   s   ÿ)r   Z_validate_datar   r
   Zmeanr   r   r   ÚshapeÚarrayÚrangeÚuniqueÚT)r   r   Z	n_samplesZnXr   r   r   Ú	transform   s    
ÿ
þz AgglomerationTransform.transformNc                 C   sp   |dkr|dkrt dƒ‚|dk	r0|dk	r0tdƒ‚|dk	rHt dt¡ |}t| ƒ tj| jdd�\}}|d|f S )aE  
        Inverse the transformation and return a vector of size `n_features`.

        Parameters
        ----------
        Xt : array-like of shape (n_samples, n_clusters) or (n_clusters,)
            The values to be assigned to each cluster of samples.

        Xred : deprecated
            Use `Xt` instead.

            .. deprecated:: 1.3

        Returns
        -------
        X : ndarray of shape (n_samples, n_features) or (n_features,)
            A vector of size `n_samples` with the values of `Xred` assigned to
            each of the cluster of samples.
        Nz(Missing required positional argument: Xtz)Please provide only `Xt`, and not `Xred`.zNInput argument `Xred` was renamed to `Xt` in v1.3 and will be removed in v1.5.T)Zreturn_inverse.)	Ú	TypeErrorÚ
ValueErrorÚwarningsÚwarnÚFutureWarningr   r
   r   r   )r   ZXtr   ZunilZinverser   r   r   Úinverse_transformA   s    ûz(AgglomerationTransform.inverse_transform)NN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ZUNUSEDZ<_AgglomerationTransform__metadata_request__inverse_transformr   r$   r   r   r   r   r      s   
"r   )r(   r!   Únumpyr
   Zscipy.sparser   Úbaser   Úutilsr   Zutils.validationr   r   r   r   r   r   Ú<module>   s   