o
    Yin                     @   s   d dl Z d dlmZ d dlm  mZ ddlmZmZ ddlm	Z	m
Z
 G dd dejZG dd dejZG d	d
 d
ejZG dd dejZdS )    N   )LowPassFilter1dLowPassFilter2d)kaiser_sinc_filter1dkaiser_sinc_filter2dc                       &   e Zd Zd fdd	Zdd Z  ZS )
UpSample1d   Nc                    s   t    || _|d u rtd| d d n|| _|| _| j| d | _| j| j | j| j d  | _| j| j | j| j d d  | _t	d| d| | jd}| 
d| d S N   r	   r         ?333333?)cutoff
half_widthkernel_sizefilter)super__init__ratiointr   stridepadpad_left	pad_rightr   register_bufferselfr   r   r   	__class__ M/home/ubuntu/.local/lib/python3.10/site-packages/alias_free_torch/resample.pyr   
   s,   
zUpSample1d.__init__c                 C   sd   |j \}}}tj|| j| jfdd}| jtj|| j|dd| j|d }|d| j| j	 f }|S )N	replicatemoder   groups.)
shapeFr   r   conv_transpose1dr   expandr   r   r   r   x_Cr   r   r    forward   s   zUpSample1d.forwardr	   N__name__
__module____qualname__r   r/   __classcell__r   r   r   r    r          r   c                       r   )DownSample1dr	   Nc                    R   t    || _|d u rtd| d d n|| _td| d| || jd| _d S Nr   r	   r   r   )r   r   r   r   )r   r   r   r   r   r   lowpassr   r   r   r   r   r    r   &      
zDownSample1d.__init__c                 C      |  |}|S Nr:   r   r,   xxr   r   r    r/   0      
zDownSample1d.forwardr0   r1   r   r   r   r    r7   $   s    
r7   c                       r   )
UpSample2dr	   Nc                    s   t    || _|d u rtd| d d n|| _|| _| jd |d  | _| j| j | j| j d  | _| j| j | j| j d d  | _t	d| d| | jd}| 
d| d S r
   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   7   s,   
zUpSample2d.__init__c              	   C   s   |j \}}}}tj|| j| j| j| jfdd}| jd tj|| j|ddd| j|d }|d| j| j	 | j| j	 f }|S )Nr!   r"   r	   r$   r%   .)
r'   r(   r   r   conv_transpose2dr   r*   r   r   r   r+   r   r   r    r/   H   s    zUpSample2d.forwardr0   r1   r   r   r   r    rC   5   r6   rC   c                       r   )DownSample2dr	   Nc                    r8   r9   )r   r   r   r   r   r   r:   r;   r   r   r    r   T   r<   zDownSample2d.__init__c                 C   r=   r>   r?   r@   r   r   r    r/   _   rB   zDownSample2d.forwardr0   r1   r   r   r   r    rE   R   s    rE   )torchtorch.nnnntorch.nn.functional
functionalr(   r   r   r   r   r   Moduler   r7   rC   rE   r   r   r   r    <module>   s    