
    si                         d dl Z d dlZd dlm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ej                  ZdS )	    N)Dict)
load_model)
save_model)Tensornn)fullnameimport_from_stringc                        e Zd ZdZd ej                    ddfdededededef
 fd	Z	d
e
eef         fdZdefdZd ZddeddfdZd Zed             Z xZS )Densea2  
    Feed-forward function with  activiation 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out_featuresbiasinit_weight	init_biasc                 J   t          t          |                                            || _        || _        || _        || _        t          j        |||          | _	        |t          j
        |          | j	        _        | t          j
        |          | j	        _        d S d S )N)r   )superr   __init__r   r   r   activation_functionr   Linearlinear	Parameterweight)selfr   r   r   r   r   r   	__class__s          U/var/www/icac/venv/lib/python3.11/site-packages/sentence_transformers/models/Dense.pyr   zDense.__init__   s     	eT##%%%&(	#6 i\EEE"!#k!:!:DK !|I66DK !     featuresc           	          |                     d|                     |                     |d                             i           |S )Nsentence_embedding)updater   r   )r   r   s     r   forwardzDense.forward3   s@    -t/G/GT\]qTrHsHs/t/tuvvvr   returnc                     | j         S )N)r   r   s    r    get_sentence_embedding_dimensionz&Dense.get_sentence_embedding_dimension7   s      r   c                 R    | j         | j        | j        t          | j                  dS )N)r   r   r   r   )r   r   r   r   r   r$   s    r   get_config_dictzDense.get_config_dict:   s0    + -I#+D,D#E#E	
 
 	
r   safe_serializationc                    t          t          j                            |d          d          5 }t	          j        |                                 |           d d d            n# 1 swxY w Y   |r0t          | t          j                            |d                     d S t          j	        | 
                                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(   fOuts       r   r6   z
Dense.saveB   s    "',,{M::C@@ 	4DId**,,d333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4  	Z"4kCV)W)WXXXXXJt(("',,{DW*X*XYYYYYs   (A##A'*A'c                 P    d                     |                                           S )Nz	Dense({}))formatr'   r$   s    r   __repr__zDense.__repr__K   s"    !!$"6"6"8"8999r   c                    t          t          j                            | d                    5 }t	          j        |          }d d d            n# 1 swxY w Y    t          |d                               |d<   t          di |}t          j                            t          j                            | d                    r/t          |t          j                            | d                     nY|
                    t          j        t          j                            | d          t          j        d                               |S )Nr*   r   r,   r-   cpu)map_location )r.   r/   r0   r1   r2   loadr	   r   existsload_safetensors_modelload_state_dictr5   device)
input_pathfInconfigmodels       r   rA   z
Dense.loadN   sM   "',,z=99:: 	$cYs^^F	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ )Z(:6BW;X(Y(Y([([$%7>>"',,z3FGGHH 	"5"',,zCV*W*WXXXX!!
27<<
4GHHW\WcdiWjWjkkk   s   AAA)T)__name__
__module____qualname____doc__r   Tanhintboolr   r   r   strr!   r%   r'   r6   r<   staticmethodrA   __classcell__)r   s   @r   r   r      s8        & #BGII" 7 77 7 	7 7 7 7 7 7 7 7,S&[ 1    !# ! ! ! !
 
 
Z ZD ZD Z Z Z Z: : :   \    r   r   )r2   r/   typingr   r5   safetensors.torchr   rC   r   r4   r   r   sentence_transformers.utilr   r	   Moduler   r@   r   r   <module>rX      s     				        B B B B B B B B B B B B         C C C C C C C CN N N N NBI N N N N Nr   