o
    ß¥µi0
  ã                   @   sl   d dl Z d dlZd dlmZ dZG dd„ deƒZG dd„ deƒZdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ ZdS )é    N)ÚEnumé
   c                   @   s,   e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
Ú	LayerTypeé   é   é   é   é   é   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚLAYER_DENSEÚ	LAYER_GRUÚLAYER_ATTENTIONÚ
LAYER_FSMNÚLAYER_SEQUENTIAL_FSMNÚLAYER_FSMN_SELEÚLAYER_GRU_ATTENTIONÚLAYER_DFSMN© r   r   úb/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/audio/kws/farfield/model_def.pyr   
   s    r   c                   @   s$   e Zd ZdZdZdZdZdZdZdS )ÚActivationTyper   r   r   r   r   r	   N)	r   r   r   ÚACTIVATION_NONEÚACTIVATION_RELUÚACTIVATION_TANHÚACTIVATION_SIGMOIDÚACTIVATION_SOFTMAXÚACTIVATION_LOGSOFTMAXr   r   r   r   r      s    r   c                 C   sZ   t  d| ¡}tƒ }| |d ¡ | |d ¡ | |d ¡ | |d ¡ t  d|¡d S )z
    print layer
    Úfr   r   r   r   Úi)ÚstructÚpackÚ	bytearrayÚappendÚunpack)r!   ÚbsÚbar   r   r   Úf32ToI32   s   r*   c                 C   sj   | j \}}t |d ¡}t|ƒD ]"}t|ƒD ]}tt| ||f ƒƒ qt|d | ƒD ]}tdƒ q+qdS )z(
    print matrix with neon padding
    r   r   N©ÚshapeÚmathÚceilÚrangeÚprintr*   )ÚwÚnumrowsÚnumcolsÚ	numnecolsr"   Újr   r   r   ÚprintNeonMatrix-   s   

ÿür6   c                 C   sX   | j d }t |d ¡}t|ƒD ]
}tt| | ƒƒ qt|d | ƒD ]}tdƒ q#dS )z(
    print vector with neon padding
    r   r   Nr+   )ÚbÚsizeÚnesizer"   r   r   r   ÚprintNeonVector<   s   

ÿr:   c                 C   s$   |   ¡ }t|d ƒ t|d ƒ dS )z
    save dense layer
    ÚweightÚbiasN)Ú
state_dictr6   r:   )ÚlayerÚ	statedictr   r   r   Ú
printDenseJ   s   r@   c                 C   s²  |   ¡ }|d |d g}|d |d g}|d j\}}|d }|d d|…dd…f }|d ||d …dd…f }|d |d d…dd…f }t|ƒ t|ƒ t|ƒ |d	 d|…dd…f }	|d	 ||d …dd…f }
|d	 |d d…dd…f }t|
ƒ t|	ƒ t|ƒ |d d|… }|d ||d … }|d |d d… }t|ƒ t|ƒ t|ƒ |d	 d|… }|d	 ||d … }|d	 |d d… }t|ƒ t|ƒ t|ƒ dS )
z
    save gru layer
    Úweight_ih_l0Úweight_hh_l0Ú
bias_ih_l0Ú
bias_hh_l0r   r   Nr   r   )r=   r,   r6   r:   )r>   r?   r;   r<   ÚnuminsÚnumoutsÚw_rxÚw_zxÚw_xÚw_rhÚw_zhÚw_hÚb_rxÚb_zxÚb_xÚb_rhÚb_zhÚb_hr   r   r   ÚprintGRUS   s:   rS   )r-   r#   Úenumr   ÚHEADER_BLOCK_SIZEr   r   r*   r6   r:   r@   rS   r   r   r   r   Ú<module>   s   		