o
    i                     @   sX   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ ddl	m
Z
 G dd de
ZdS )	    N)PretrainedConfig)
LoRAConfig)ReplicatedLinear   )BaseLinearLayerWithLoRAc                       s   e Zd Zdeddf fddZdejdejeejejdB f B fddZe		dd	e
jd
edededB def
ddZdejeejdB  B dejeejdB  B fddZdejeejdB  B dejeejdB  B fddZ  ZS )ReplicatedLinearWithLoRA
base_layerreturnNc                    s    t  | | jj| _d| _d S )Nr   )super__init__r   output_sizen_slices)selfr   	__class__ X/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm/lora/layers/replicated_linear.pyr      s
   

z!ReplicatedLinearWithLoRA.__init__input_c                 C   sH   | j js| j jnd}| ||}| j jr| j jnd}| j js |S ||fS )zForward of ReplicatedLinearWithLoRA

        Args:
            input_: Tensor whose last dimension is `input_size`.

        Returns:
            - output
            - bias
        N)r   skip_bias_addbiasapplyreturn_bias)r   r   r   outputoutput_biasr   r   r   forward   s   z ReplicatedLinearWithLoRA.forwardsource_layerlora_configpacked_modules_listmodel_configc                 C   s   t |tu S N)typer   )clsr   r   r   r   r   r   r   can_replace_layer2   s   z*ReplicatedLinearWithLoRA.can_replace_layerlora_ac                 C      |S )z1Slice lora a if splitting for tensor parallelism.r   )r   r#   r   r   r   slice_lora_a<      z%ReplicatedLinearWithLoRA.slice_lora_alora_bc                 C   r$   )z2Slice lora b if splitting with tensor parallelism.r   )r   r'   r   r   r   slice_lora_bB   r&   z%ReplicatedLinearWithLoRA.slice_lora_br   )__name__
__module____qualname__r   r   torchTensortupler   classmethodnnModuler   listr   boolr"   r%   r(   __classcell__r   r   r   r   r      s<    
	
r   )r,   torch.nnr0   transformersr   vllm.config.lorar   !vllm.model_executor.layers.linearr   base_linearr   r   r   r   r   r   <module>   s   