ó
    >:j¹  ã                  óV   • S SK Jr  S SKr " S S\R                  R                  5      rg)é    )ÚannotationsNc                  ój   ^ • \ rS rSrSrU 4S jr\S 5       r\S
S j5       rS r	SS jr
SS jrS	rU =r$ )ÚCartridgeEncoderé   aÏ  
A parameterized prefix KV cache.

The parameters are stored in the same flattened layout as `PrefixEncoder` output: `[num_virtual_tokens, num_layers
* 2 * token_dim]`, where `token_dim` is per-head hidden size times number of heads (after any GQA adjustment
performed by `_prepare_prompt_learning_config`).

If `num_frozen_tokens > 0`, the first `num_frozen_tokens` virtual tokens are stored as a non-trainable parameter,
and the remaining tokens are trainable.
c                ó~  >• [         TU ]  5         Xl        UR                  nUR                  S-  UR
                  -  n[        UR                  5      nUS:  d  XB:”  a  [        SU SU S35      eX@l        X$-
  U l	        U R                  (       aE  [        R                  " U R                  U5      n[        R                  R                  USS9U l        OS U l        [        R                  " U R                  U5      n[        R                  R                  XaR                  (       + S9U l        U R#                  5         g )Né   r   z<`num_frozen_tokens` must be in [0, num_virtual_tokens], got z for num_virtual_tokens=Ú.F)Úrequires_grad)ÚsuperÚ__init__ÚconfigÚnum_virtual_tokensÚ
num_layersÚ	token_dimÚintÚnum_frozen_tokensÚ
ValueErrorÚnum_trainable_tokensÚtorchÚemptyÚnnÚ	ParameterÚfrozen_embeddingÚinference_modeÚtrainable_embeddingÚreset_parameters)Úselfr   r   Úhiddenr   ÚfrozenÚ	trainableÚ	__class__s          €ÚX/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/cartridge/model.pyr   ÚCartridgeEncoder.__init__    s  ø€ Ü‰ÑÔØŒà#×6Ñ6ÐØ×"Ñ" QÑ&¨×)9Ñ)9Ñ9ˆÜ × 8Ñ 8Ó9ÐØ˜qÓ Ð$5Ó$JÜØNÐO`ÐNað b&Ø&8Ð%9¸ð<óð ð
 "3ÔØ$6Ñ$JˆÔ!à×!×!Ü—[’[ ×!7Ñ!7¸Ó@ˆFÜ$)§H¡H×$6Ñ$6°vÈUÐ$6Ð$SˆDÕ!à$(ˆDÔ!ä—K’K × 9Ñ 9¸6ÓBˆ	Ü#(§8¡8×#5Ñ#5°i×ShÑShÔOhÐ#5Ð#iˆÔ à×ÑÕó    c                óX   •  " S S[         R                  R                  5      nU" U 5      $ )zX
Expose a prefix-encoder compatible interface (`.embedding.weight`) for PEFT internals.
c                  ó<   ^ • \ rS rSrSU 4S jjr\S 5       rSrU =r$ )Ú*CartridgeEncoder.embedding.<locals>._ProxyéA   c                ó.   >• [         TU ]  5         Xl        g ©N)r   r   Ú_parent)r   Úparentr!   s     €r"   r   Ú3CartridgeEncoder.embedding.<locals>._Proxy.__init__B   s   ø€ Ü‘Ñ Ô"Ø%•r$   c                ó.   • U R                   R                  $ r*   )r+   Úweight©r   s    r"   r/   Ú1CartridgeEncoder.embedding.<locals>._Proxy.weightF   s   € à—|‘|×*Ñ*Ð*r$   )r+   )r,   r   )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   Úpropertyr/   Ú__static_attributes__Ú__classcell__©r!   s   @r"   Ú_Proxyr'   A   s   ø† ÷&ð ñ+ó ö+r$   r:   )r   r   ÚModule)r   r:   s     r"   Ú	embeddingÚCartridgeEncoder.embedding;   s"   € ô	+”U—X‘X—_‘_ô 	+ñ �d‹|Ðr$   c                óŠ   • U R                   c  U R                  $ [        R                  " U R                   U R                  /SS9$ )Nr   )Údim)r   r   r   Úcatr0   s    r"   r/   ÚCartridgeEncoder.weightL   s=   € à× Ñ Ñ(Ø×+Ñ+Ð+Ü�yŠy˜$×/Ñ/°×1IÑ1IÐJÐPQÑRÐRr$   c                óH  • [         R                  " 5          U R                  b3  [         R                  R                  R                  U R                  5        [         R                  R                  R                  U R                  5        S S S 5        g ! , (       d  f       g = fr*   )r   Úno_gradr   r   ÚinitÚnormal_r   r0   s    r"   r   Ú!CartridgeEncoder.reset_parametersR   sY   € ä�]Š]�_Ø×$Ñ$Ñ0Ü—‘—‘×%Ñ% d×&;Ñ&;Ô<Ü�H‰H�M‰M×!Ñ! $×":Ñ":Ô;÷ �_Ž_ús   –A4BÂ
B!c                óœ  • UR                   S:w  d*  UR                  S   U R                  U R                  -   :w  a<  [	        SU R                  U R                  -    S[        UR                  5       S35      e[        R                  " 5          U R                  bZ  U R                  R                  USU R                   R                  U R                  R                  5      5        XR                  S nOUnU R                  R                  UR                  U R                  R                  5      5        SSS5        g! , (       d  f       g= f)a  
Load the flattened prompt embeddings saved by PEFT (`prompt_embeddings`).

PEFT saves prompt-learning adapters as a single `prompt_embeddings` tensor. For CARTRIDGE, we split that tensor
into frozen and trainable segments according to `self.num_frozen_tokens`.
r   r   z-Invalid `prompt_embeddings` shape. Expected (z, hidden), got r	   N)ÚndimÚshaper   r   r   Útupler   rC   r   Úcopy_ÚtoÚdevicer   )r   Úprompt_embeddingsÚtrainable_parts      r"   Úload_prompt_embeddingsÚ'CartridgeEncoder.load_prompt_embeddingsY   s!  € ð ×!Ñ! QÓ&Ð*;×*AÑ*AÀ!Ñ*DØ×"Ñ" T×%>Ñ%>Ñ>ó+
ô ðØ×*Ñ*¨T×-FÑ-FÑFÐGÀÔW\Ð]n×]tÑ]tÓWuÐVvÐvwðyóð ô �]Š]�_Ø×$Ñ$Ñ0Ø×%Ñ%×+Ñ+Ø%Ð&>¨×(>Ñ(>Ð?×BÑBÀ4×CXÑCX×C_ÑC_Ó`ôð "3×3IÑ3IÐ3KÐ!L‘à!2�Ø×$Ñ$×*Ñ*¨>×+<Ñ+<¸T×=UÑ=U×=\Ñ=\Ó+]Ô^÷ �_Ž_ús   ÂB(D=Ä=
Ec                óx   • UR                   S   nU R                  R                  S5      R                  USS5      $ )Nr   éÿÿÿÿ)rI   r/   Ú	unsqueezeÚexpand)r   Úprefix_tokensÚ
batch_sizes      r"   ÚforwardÚCartridgeEncoder.forwardq   s6   € Ø"×(Ñ(¨Ñ+ˆ
à�{‰{×$Ñ$ QÓ'×.Ñ.¨z¸2¸rÓBÐBr$   )r   r   r   r   r   )Úreturnútorch.Tensor)rN   r[   rZ   ÚNone)rV   r[   rZ   r[   )r2   r3   r4   r5   Ú__doc__r   r6   r<   r/   r   rP   rX   r7   r8   r9   s   @r"   r   r      sN   ø† ñ	õ ð6 ñó ðð  óSó ðSò
<ô_÷0Cò Cr$   r   )Ú
__future__r   r   r   r;   r   © r$   r"   Ú<module>r`      s%   ðõ #ã ô`C�u—x‘x—‘õ `Cr$   