
    oiz                     N    S SK r S SKJrJr  S SKJr  SSKJrJr   " S S\5      r	g)    N)	BaseTunerBaseTunerLayer)2TRANSFORMERS_MODELS_TO_MISS_TARGET_MODULES_MAPPING   )	MissLayer
MissLinearc                   F    \ rS rSr% SrSr\\S'   \r	\
rS r\S 5       rSrg)		MissModel   aw  
Creates Householder reflection adaptation (MiSS) model from a pretrained model. The method is described in
https://huggingface.co/papers/2409.15371

Args:
    model (`torch.nn.Module`): The model to which the adapter tuner layers will be attached.
    config ([`MissConfig`]): The configuration of the MiSS model.
    adapter_name (`str`): The name of the adapter, defaults to `"default"`.
    low_cpu_mem_usage (`bool`, `optional`, defaults to `False`):
        Create empty adapter weights on meta device. Useful to speed up the loading process.

Returns:
    `torch.nn.Module`: The MiSS model.

Example:
    ```py
    >>> from diffusers import StableDiffusionPipeline
    >>> from peft import MissModel, MissConfig

    >>> config_te = MissConfig(
    ...     r=8,
    ...     target_modules=["k_proj", "q_proj", "v_proj", "out_proj", "fc1", "fc2"],
    ...     init_weights=True,
    ... )
    >>> config_unet = MissConfig(
    ...     r=8,
    ...     target_modules=[
    ...         "proj_in",
    ...         "proj_out",
    ...         "to_k",
    ...         "to_q",
    ...         "to_v",
    ...         "to_out.0",
    ...         "ff.net.0.proj",
    ...         "ff.net.2",
    ...     ],
    ...     init_weights=True,
    ... )

    >>> model = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
    >>> model.text_encoder = MissModel(model.text_encoder, config_te, "default")
    >>> model.unet = MissModel(model.unet, config_unet, "default")
    ```

**Attributes**:
    - **model** ([`~torch.nn.Module`]) -- The model to be adapted.
    - **peft_config** ([`MissConfig`]): The configuration of the MiSS model.
miss_prefixc                    Uc  [        S5      e[        US5      =(       a    UR                  S LnUR                  UR                  UR
                  UR                  S.n	XS'   [        U[        5      (       dG  U R                  " XU40 U	D6n
X R                  ;  a  U
R                  S5        U R                  XTX5        g UR                  UUR                  UR                  UR
                  UR                  S9  g )NzCurrent Key shouldn't be `None`bias)rmini_rmiss_dropoutinit_weightsF)r   r   r   r   )
ValueErrorhasattrr   r   r   r   r   
isinstancer   _create_new_moduleactive_adaptersrequires_grad__replace_moduleupdate_layer)selfmiss_configadapter_nametargettarget_nameparentcurrent_keyoptional_kwargsr   kwargs
new_modules              P/home/james-whalen/.local/lib/python3.13/site-packages/peft/tuners/miss/model.py_create_and_replaceMissModel._create_and_replaceN   s     >??vv&B6;;d+B!(('44'44	
 v &),,00F]V\]J#7#77))%0  jI--(55(55"))       c                     [        U[        5      (       a  UR                  5       nOUn[        U[        R                  R
                  5      (       a  [        X!40 UD6nU$ [        SU S35      e)NzTarget module zB is not supported. Currently, only `torch.nn.Linear` is supported.)r   r   get_base_layertorchnnLinearr   r   )r   r   r   r$   target_base_layerr%   s         r&   r   MissModel._create_new_modulet   sm    fn-- & 5 5 7 &'99#FCFCJ 	  (jk r)    N)__name__
__module____qualname____firstlineno____doc__r   str__annotations__r   tuner_layer_clsr   target_module_mappingr'   staticmethodr   __static_attributes__r1   r)   r&   r
   r
      s9    /b FCON$L  r)   r
   )
r,   peft.tuners.tuners_utilsr   r   
peft.utilsr   layerr   r   r
   r1   r)   r&   <module>r@      s!      > I (j	 jr)   