o
    S"åg?  ã                   @  sr   d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ	 d dlm
Z
mZ d dlmZmZ G dd„ dejƒZdS )	é    )ÚannotationsN)Ú
load_model)Ú
save_model)ÚTensorÚnn)ÚfullnameÚimport_from_stringc                      sl   e Zd ZdZde ¡ ddfd‡ fdd„Zd dd„Zd!dd„Zdd„ Z	d"d#dd„Z
dd„ Zedd„ ƒZ‡  ZS )$ÚDensea0  
    Feed-forward function with activation function.

    This layer takes a fixed-sized sentence embedding and passes it through a feed-forward layer. Can be used to generate deep averaging networks (DAN).

    Args:
        in_features: Size of the input dimension
        out_features: Output size
        bias: Add a bias vector
        activation_function: Pytorch activation function applied on
            output
        init_weight: Initial value for the matrix of the linear layer
        init_bias: Initial value for the bias of the linear layer
    TNÚin_featuresÚintÚout_featuresÚbiasÚboolÚinit_weightr   Ú	init_biasc                   sh   t ƒ  ¡  || _|| _|| _|| _tj|||d| _|d ur%t 	|¡| j_
|d ur2t 	|¡| j_d S d S )N)r   )ÚsuperÚ__init__r
   r   r   Úactivation_functionr   ÚLinearÚlinearÚ	ParameterÚweight)Úselfr
   r   r   r   r   r   ©Ú	__class__© úd/mnt/skqttb/ctump_chatbot/chatbot/lib/python3.10/site-packages/sentence_transformers/models/Dense.pyr      s   
	ÿzDense.__init__Úfeaturesúdict[str, Tensor]c              	   C  s"   |  d|  |  |d ¡¡i¡ |S )NÚsentence_embedding)Úupdater   r   )r   r   r   r   r   Úforward4   s   zDense.forwardÚreturnc                 C  s   | j S )N)r   ©r   r   r   r   Ú get_sentence_embedding_dimension8   s   z&Dense.get_sentence_embedding_dimensionc                 C  s   | j | j| jt| jƒdœS )N)r
   r   r   r   )r
   r   r   r   r   r#   r   r   r   Úget_config_dict;   s
   üzDense.get_config_dictÚsafe_serializationÚNonec                 C  s~   t tj |d¡dƒ}t |  ¡ |¡ W d   ƒ n1 sw   Y  |r0t| tj |d¡ƒ d S t 	|  
¡ tj |d¡¡ d S )Núconfig.jsonÚwúmodel.safetensorsúpytorch_model.bin)ÚopenÚosÚpathÚjoinÚjsonÚdumpr%   Úsave_safetensors_modelÚtorchÚsaveÚ
state_dict)r   Úoutput_pathr&   ÚfOutr   r   r   r4   C   s   ÿz
Dense.savec                 C  s   d|   ¡ › dS )NzDense(ú))r%   r#   r   r   r   Ú__repr__L   s   zDense.__repr__c                 C  s´   t tj | d¡ƒ}t |¡}W d   ƒ n1 sw   Y  t|d ƒƒ |d< tdi |¤Ž}tj tj | d¡¡rEt	|tj | d¡ƒ |S | 
tjtj | d¡t d¡dd¡ |S )	Nr(   r   r*   r+   ÚcpuT)Úmap_locationÚweights_onlyr   )r,   r-   r.   r/   r0   Úloadr   r	   ÚexistsÚload_safetensors_modelÚload_state_dictr3   Údevice)Ú
input_pathÚfInÚconfigÚmodelr   r   r   r=   O   s   ÿûÿÿz
Dense.load)
r
   r   r   r   r   r   r   r   r   r   )r   r   )r"   r   )T)r&   r   r"   r'   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚTanhr   r!   r$   r%   r4   r9   Ústaticmethodr=   Ú__classcell__r   r   r   r   r	      s    ù

	r	   )Ú
__future__r   r0   r-   r3   Úsafetensors.torchr   r?   r   r2   r   r   Úsentence_transformers.utilr   r   ÚModuler	   r   r   r   r   Ú<module>   s    