o
    ?Hh>                     @   s`   d 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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)"_deprecate_Xt_in_inverse_transform)check_is_fittedvalidate_datac                   @   s2   e Zd ZdZdejiZdd Zd	ddddZdS )
AgglomerationTransformzH
    A class for feature agglomeration via the transform interface.
    Xtc                    s   t  t dd jtjkr2t s2tj jd }t	 fddt
|D }|S  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 f/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/sklearn/cluster/_feature_agglomeration.py
<listcomp>8   s   * z4AgglomerationTransform.transform.<locals>.<listcomp>c                    s,   g | ]}j  d d j|kf ddqS )N   )axis)pooling_funcr   )r   l)r   r   r   r   r   ;   s    )r   r   r   r   meanr   r   r   shapearrayrangeuniqueT)r   r   	n_samplesnXr   r   r   	transform    s   
	
z AgglomerationTransform.transformN)r
   c                C   s2   t ||}t|  tj| jdd\}}|d|f S )a  
        Inverse the transformation and return a vector of size `n_features`.

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

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

            .. deprecated:: 1.5
                `Xt` was deprecated in 1.5 and will be removed in 1.7. Use `X` instead.

        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.
        T)return_inverse.)r   r   r   r!   r   )r   r   r
   unilinverser   r   r   inverse_transformB   s   
z(AgglomerationTransform.inverse_transformr   )	__name__
__module____qualname____doc__r   UNUSED<_AgglomerationTransform__metadata_request__inverse_transformr%   r)   r   r   r   r   r	      s
    
"r	   )r-   numpyr   scipy.sparser   baser   utilsr   utils.deprecationr   utils.validationr   r   r	   r   r   r   r   <module>   s    	