o
    piw	                     @   s,   d dl mZ d dlZG dd dejjZdS )    )DictNc                       s,   e Zd Zdeeejf f fddZ  ZS )AttnProcsLayers
state_dictc                    s   t    tj| _tt|	 _
dd t|	 D _ddg_dd }fdd  fd	d
}| j|dd d S )Nc                 S   s   i | ]\}}||qS  r   ).0kvr   r   U/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/diffusers/loaders/utils.py
<dictcomp>   s    z,AttnProcsLayers.__init__.<locals>.<dictcomp>z
.processorz
.self_attnc           	      _   sL   i }|  D ]\}}t|dd }|d| | j| }|||< q|S )N.   layers.)itemsintsplitreplacemapping)	moduler   argskwargsnew_state_dictkeyvaluenumnew_keyr   r   r	   map_to    s   
z(AttnProcsLayers.__init__.<locals>.map_toc                    sP    j D ]}|| v r| |d |   S qtdt|  d|  d j  d)Nr   z1There seems to be a problem with the state_dict: z. z has to have one of r   )
split_keysr   
ValueErrorsetkeys)r   r   r   )selfr   r	   	remap_key)   s   
 z+AttnProcsLayers.__init__.<locals>.remap_keyc                    sN   t | }|D ]} ||}||d| j|  }|| ||< ||= qd S )Nr   )listr   r   rev_mapping)r   r   r   r   all_keysr   replace_keyr   )r!   r   r	   map_from2   s   
z*AttnProcsLayers.__init__.<locals>.map_fromT)with_module)super__init__torchnn
ModuleListvalueslayersdict	enumerater   r   r#   r   _register_state_dict_hook"_register_load_state_dict_pre_hook)r    r   r   r&   	__class__)r!   r    r	   r)      s   

		
zAttnProcsLayers.__init__)	__name__
__module____qualname__r   strr*   Tensorr)   __classcell__r   r   r3   r	   r      s    $r   )typingr   r*   r+   Moduler   r   r   r   r	   <module>   s   