
    Ng?                        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ej                  ZdS )	    )annotationsN)
load_model)
save_model)Tensornn)fullnameimport_from_stringc                       e Zd ZdZd ej                    ddfd fdZddZddZd Z	dddZ
d Zed             Z x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                <   t                                                       || _        || _        || _        || _        t          j        |||          | _        |t          j	        |          | j        _
        | t          j	        |          | 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__s          ^/var/www/html/ai-engine/env/lib/python3.11/site-packages/sentence_transformers/models/Dense.pyr   zDense.__init__   s     	&(	#6 i\EEE"!#k!:!:DK !|I66DK !     featuresdict[str, Tensor]c           	         |                     d|                     |                     |d                             i           |S )Nsentence_embedding)updater   r   )r   r   s     r   forwardzDense.forward4   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_dimension8   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_serializationNonec                   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   r:   z
Dense.saveC   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                2    d|                                   dS )NzDense())r*   r'   s    r   __repr__zDense.__repr__L   s    1,,..1111r   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                     nZ|
                    t          j        t          j                            | d          t          j        d          d                     |S )	Nr.   r   r0   r1   cpuT)map_locationweights_only )r2   r3   r4   r5   r6   loadr	   r   existsload_safetensors_modelload_state_dictr9   device)
input_pathfInconfigmodels       r   rF   z
Dense.loadO   sW   "',,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!!
GLL-@AAPUP\]bPcPcrv    
 s   AAA)
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*   r:   r@   staticmethodrF   __classcell__)r   s   @r   r   r      s         & #BGII" 7 7 7 7 7 7 7,   ! ! ! !
 
 
Z Z Z Z Z2 2 2   \    r   r   )
__future__r   r6   r3   r9   safetensors.torchr   rH   r   r8   r   r   sentence_transformers.utilr   r	   Moduler   rE   r   r   <module>rZ      s    " " " " " "  				  B B B B B B B B B B B B         C C C C C C C CP P P P PBI P P P P Pr   