o
    ´©i  ã                	   @   sn   d dl Z d dlmZ d dlmZ ddlmZ ddejdeddfd	d
„Z	ddejdedeee j
f fdd„ZdS )é    N)ÚDicté   )Ú	LoRALayerÚnoneÚmodelÚbiasÚreturnc                 C   s¤   |   ¡ D ]\}}d|vrd|vrd|_q|dkrd S |dkr0|   ¡ D ]\}}d|v r-d|_q"d S |dkrP|  ¡ D ]}t|tƒrMt|dƒrM|jd urMd|j_q8d S t‚)	NÚlora_ÚcifFr   Úallr   TÚ	lora_only)Únamed_parametersÚrequires_gradÚmodulesÚ
isinstancer   Úhasattrr   ÚNotImplementedError)r   r   ÚnÚpÚm© r   úL/home/ubuntu/.local/lib/python3.10/site-packages/funasr/models/lora/utils.pyÚmark_only_lora_as_trainable   s&   €€þ€þr   c                    s”   |   ¡ ‰ |dkr‡ fdd„ˆ D ƒS |dkr‡ fdd„ˆ D ƒS |dkrHi }ˆ D ]}d|v rEˆ | ||< | d¡d d	 }|ˆ v rEˆ | ||< q&|S t‚)
Nr   c                    s   i | ]}d |v r|ˆ | “qS )r	   r   ©Ú.0Úk©Úmy_state_dictr   r   Ú
<dictcomp>"   s    z#lora_state_dict.<locals>.<dictcomp>r   c                    s&   i | ]}d |v sd|v r|ˆ | “qS )r	   r   r   r   r   r   r   r   $   s   & r   r	   r   r   )Ú
state_dictÚsplitr   )r   r   Ú	to_returnr   Ú	bias_namer   r   r   Úlora_state_dict   s    €r#   )r   )ÚtorchÚtorch.nnÚnnÚtypingr   Úlayersr   ÚModuleÚstrr   ÚTensorr#   r   r   r   r   Ú<module>   s   (