ó
    >:jÎ  ã                  óv   • S SK Jr  S SKJr  S SKJr  S SKJrJr  S SK	J
r
  SSKJr  SSKJrJr   " S	 S
\5      rg)é    )Úannotations)ÚOptional)Únn)Ú	BaseTunerÚget_device_map)Ú3TRANSFORMERS_MODELS_TO_PSOFT_TARGET_MODULES_MAPPINGé   )ÚPsoftConfig)Ú
PsoftLayerÚdispatch_defaultc                  ót   • \ rS rSr% SrSrS\S'   \r\	r
SS.               SS jjr\SS	 j5       rS
rg)Ú
PsoftModelé   uì  
PSOFT (Efficient Orthogonal Fine-Tuning with Principal Subspace Adaptation) model.

Inserts an r*r orthogonal (or scaled) transformation R between low-rank A and B: Î”W = B @ (R-I) @ A. Use
ab_svd_init="psoft_init" to initialize A/B from SVD and freeze them, training only R (and optional magnitude
vectors).

Args:
    model: The model to adapt.
    config: PsoftConfig.
    adapter_name: Adapter name, default "default".
    low_cpu_mem_usage: Create empty adapter weights on meta device.
Úpsoft_ÚstrÚprefixN)Úparameter_namec               ó:  • Uc  [        S5      eUUS.n[        U[        5      (       a  UR                  " U4SU0UD6  g [	        U R
                  5      n	U R                  " XU4SU	0UD6n
X R                  ;  a  U
R                  S5        U R                  XTX£5        g )NzCurrent key must not be None.)Útarget_namer   ÚconfigÚ
device_mapF)
Ú
ValueErrorÚ
isinstancer   Úupdate_layerr   ÚmodelÚ_create_new_moduleÚactive_adaptersÚrequires_grad_Ú_replace_module)ÚselfÚpeft_configÚadapter_nameÚtargetr   ÚparentÚcurrent_keyr   Úkwargsr   Ú
new_modules              ÚT/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/psoft/model.pyÚ_create_and_replaceÚPsoftModel._create_and_replace/   s¥   € ð ÑÜÐ<Ó=Ð=ð 'Ø,ñ
ˆô
 �fœj×)Ñ)Ø×Ò ÑK°[ÐKÀFÒKØä# D§J¡JÓ/ˆ
Ø×,Ò,¨[ÈÑpÐ[eÐpÐioÑpˆ
à×3Ñ3Ó3Ø×%Ñ% eÔ,Ø×Ñ˜V°*ÕEó    c                óF   • [        X!4SU 0UD6nUc  [        SU S35      eU$ )Nr   zTarget module zF is not supported by minimal PSOFT. Only torch.nn.Linear is supported.)r   r   )Úpsoft_configr"   r#   r&   r'   s        r(   r   ÚPsoftModel._create_new_moduleM   s?   € ä% fÑZÀ<ÐZÐSYÑZˆ
ØÑÜØ   Ð(nÐoóð ð Ðr+   © )r!   r
   r"   r   r#   ú	nn.Moduler   r   r$   r0   r%   r   r   zOptional[str]ÚreturnÚNone)r-   r
   r"   r   r#   r0   r1   r0   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Ú__annotations__r   Útuner_layer_clsr   Útarget_module_mappingr)   Ústaticmethodr   Ú__static_attributes__r/   r+   r(   r   r      s“   ‡ ñð €FˆCÓØ €OØOÐð )-ñFà ðFð ðFð ð	Fð
 ðFð ðFð ðFð &ðFð 
õFð< óó ór+   r   N)Ú
__future__r   Útypingr   Útorchr   Úpeft.tuners.tuners_utilsr   r   Ú
peft.utilsr   r   r
   Úlayerr   r   r   r/   r+   r(   Ú<module>rC      s(   ðõ #å å ç >Ý Jå ß /ô8�õ 8r+   