a
    h                     @  s   d dl mZ d dlmZ zd dlmZ W n eyF   d dlmZ Y n0 d dlmZm	Z	 d dl
mZ d dlmZmZ G dd deZd	S )
    )annotations)Callable)Self)Tensornn)Module)fullnameimport_from_stringc                
      s   e Zd ZU dZg dZded< de ddfdddd	d
d
d fddZddddZ	ddddZ
dd ZddddddddZdd Zed'ddd!d"d"dd#d$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
    in_featuresout_featuresbiasactivation_functionz	list[str]config_keysTNintboolz!Callable[[Tensor], Tensor] | NonezTensor | None)r   r   r   r   init_weight	init_biasc                   st   t    || _|| _|| _|d u r,t n|| _tj|||d| _	|d urZt
|| j	_|d urpt
|| j	_d S )N)r   )super__init__r   r   r   r   ZIdentityr   ZLinearlinear	Parameterweight)selfr   r   r   r   r   r   	__class__ ^/var/www/html/assistant/venv/lib/python3.9/site-packages/sentence_transformers/models/Dense.pyr   '   s    	
zDense.__init__zdict[str, Tensor])featuresc              	   C  s"   | d| | |d i |S )NZsentence_embedding)updater   r   )r   r   r   r   r   forward=   s    zDense.forward)returnc                 C  s   | j S )N)r   r   r   r   r    get_sentence_embedding_dimensionA   s    z&Dense.get_sentence_embedding_dimensionc                 C  s   | j | j| jt| jdS )Nr   )r   r   r   r   r   r#   r   r   r   get_config_dictD   s
    zDense.get_config_dictsafe_serializationstrNone)output_pathr'   r"   c                O  s   |  | | j||d d S )Nr&   )Zsave_configZsave_torch_weights)r   r*   r'   argskwargsr   r   r   saveL   s    
z
Dense.savec                 C  s   d|    dS )NzDense())r%   r#   r   r   r   __repr__P   s    zDense.__repr__ Fzbool | str | Nonez
str | Noner   )model_name_or_path	subfoldertokencache_folderrevisionlocal_files_onlyr"   c                 K  s^   |||||d}| j f d|i|}	t|	d  |	d< | f i |	}
| jf ||
d|}
|
S )N)r2   r3   r4   r5   r6   r1   r   )r1   model)Zload_configr	   Zload_torch_weights)clsr1   r2   r3   r4   r5   r6   r,   Z
hub_kwargsconfigr7   r   r   r   loadS   s    z
Dense.load)r0   NNNF)__name__
__module____qualname____doc__r   __annotations__r   ZTanhr   r!   r$   r%   r-   r/   classmethodr:   __classcell__r   r   r   r   r
      s&   
     r
   N)
__future__r   typingr   r   ImportErrorZtyping_extensionsZtorchr   r   Z#sentence_transformers.models.Moduler   Zsentence_transformers.utilr   r	   r
   r   r   r   r   <module>   s   