o
    i                     @   s   d dl mZ d dl mZ d dl mZ d dl mZ d dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZ G d	d
 d
ejZdd ZdS )    )List)Optional)Tuple)UnionN)ComplexTensor)DNN_Beamformer)DNN_WPEc                %       s   e Zd Z																		
	d$dedededededededededededededededededef$ fddZded e	e
jejee f d!eee
jee f fd"d#Z  ZS )%FrontendFblstmp   ,  @             T   idimuse_wpewtypewlayerswunitswprojswdropout_ratetapsdelayuse_dnn_mask_for_wpeuse_beamformerbtypeblayersbunitsbprojsbnmaskbadimref_channelc                    s   t    || _|| _|
| _|dk| _| jr.| jrd}nd}t|||||||	|||
d
| _nd | _| jrDt|||||||||d	| _	d S d | _	d S )Nr      )
r   widimr   r   r   r   r   dropout_rate
iterationsuse_dnn_mask)	r   bidimr   r    r   r!   r&   r"   r#   )
super__init__r   r   r   use_frontend_for_allr   wper   
beamformer)selfr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   bdropout_rater'   	__class__ S/home/ubuntu/.local/lib/python3.10/site-packages/funasr/frontends/utils/frontend.pyr+      sF   



zFrontend.__init__xilensreturnc                 C   s
  t |t |ksJ t |t |f| dvr!td|  t|s2tt||j	}d }|}| dkr| j
rd| jsEdgng }| jrO|d | jrW|d |tjt | \}}n| j}| j}|ru| ||\}}}|r| ||\}}}|||fS )N)r      zInput dim must be 3 or 4: r8   )FF)TF)FT)lendim
ValueErrortorch	is_tensor
from_numpynumpyasarraytodevicetrainingr,   r   appendr   randomrandintr-   r.   )r/   r5   r6   maskhchoicesr   r   r3   r3   r4   forwardX   s,   $



zFrontend.forward)Fr
   r   r   r   r   r   r   TFr
   r   r   r   r   r   r   r   )__name__
__module____qualname__intboolstrfloatr+   r   r   r<   
LongTensorr?   ndarrayr   r   r   rJ   __classcell__r3   r3   r1   r4   r	      s~    	
Hr	   c                 C   s   t di d|d| jd| jd| jd| jd| jd| jd| jd	| jd
| j	d| j
d| jd| jd| jd| jd| jd| jd| jd| jS )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r0   r3   )r	   r   r   r   r   r   r   wpe_taps	wpe_delayr   r   r   r   r   r    r!   r"   r#   r0   )argsr   r3   r3   r4   frontend_for   sN   	
rX   )typingr   r   r   r   r?   r<   torch.nnnntorch_complex.tensorr   %funasr.frontends.utils.dnn_beamformerr   funasr.frontends.utils.dnn_wper   Moduler	   rX   r3   r3   r3   r4   <module>   s    q