o
    i                     @   s4   d dl Z d dlmZ d dlmZ G dd deZdS )    N)TransformInterface)check_kwargsc                   @   sP   e Zd ZdZdZdd Zdd Zedd Ze	d	d
 Z
edd Zdd ZdS )	FuncTransa  Functional Transformation

    WARNING:
        Builtin or C/C++ functions may not work properly
        because this class heavily depends on the `inspect` module.

    Usage:

    >>> def foo_bar(x, a=1, b=2):
    ...     '''Foo bar
    ...     :param x: input
    ...     :param int a: default 1
    ...     :param int b: default 2
    ...     '''
    ...     return x + a - b


    >>> class FooBar(FuncTrans):
    ...     _func = foo_bar
    ...     __doc__ = foo_bar.__doc__
    Nc                 K   s   || _ t| j| d S N)kwargsr   func)selfr    r	   O/home/ubuntu/.local/lib/python3.10/site-packages/espnet/transform/functional.py__init__    s   zFuncTrans.__init__c                 C   s   | j |fi | jS r   )r   r   )r   xr	   r	   r
   __call__$   s   zFuncTrans.__call__c                 C   sd   | j jdd}||d }|   D ]\}}|dd}|jd| d| |t|d q|S )N_-z transformation settingz--)defaulttype)_func__name__replaceadd_argument_groupdefault_paramsitemsadd_argumentr   )clsparserfnamegroupkvattrr	   r	   r
   add_arguments'   s   "zFuncTrans.add_argumentsc                 C   s
   t | jS r   )r   r   )r   r	   r	   r
   r   1   s   
zFuncTrans.funcc                 C   sB   zt t| jj}W n ty   t  }Y nw dd | D S )Nc                 S   s&   i | ]\}}|j tjjkr||j qS r	   )r   inspect	Parameterempty).0r   r   r	   r	   r
   
<dictcomp>;   s     z,FuncTrans.default_params.<locals>.<dictcomp>)dictr!   	signaturer   
parameters
ValueErrorr   )r   dr	   r	   r
   r   5   s   
zFuncTrans.default_paramsc                 C   sl   |   }|jdi | j | jjd }t|dkr|d S | D ]\}}|d||7 }q!|d d d S )N(r   )z{}={}, r	   )r   updater   	__class__r   lenr   format)r   paramsretr   r   r	   r	   r
   __repr__?   s   zFuncTrans.__repr__)r   
__module____qualname____doc__r   r   r   classmethodr    propertyr   r   r4   r	   r	   r	   r
   r      s    
	

	r   )r!   $espnet.transform.transform_interfacer   espnet.utils.check_kwargsr   r   r	   r	   r	   r
   <module>   s    