o "eJ@sZddlZddlZddlmZddlmZddlmZddlmZm Z ddl Z ddl m Z m Z ddl mZddlmZd ZGd d d ejZGd d d ejZGdddejZGdddejjZGdddejjZGdddejjZGdddejZGdddejZGdddejZGdddejZGdddejZGd d!d!ejZdS)"N)nn) functional)Conv1d) weight_normremove_weight_norm) init_weights get_padding)&piecewise_rational_quadratic_transform)Encoderg?cs&eZdZdfdd ZddZZS) LayerNormh㈵>cs>t||_||_tt||_tt ||_ dSN) super__init__channelsepsr Parametertorchonesgammazerosbeta)selfrr __class__/workspace/OpenVoice/modules.pyrs zLayerNorm.__init__cCs4|dd}t||jf|j|j|j}|ddS)N) transposeF layer_normrrrr)rxrrrforwards  zLayerNorm.forward)r __name__ __module__ __qualname__rr# __classcell__rrrrr sr cs$eZdZfddZddZZS) ConvReluNormc st||_||_||_||_||_||_|dksJdt |_ t |_ |j tj ||||dd|j t|ttt||_t|dD]}|j tj ||||dd|j t|qRt ||d|_|jjj|jjjdS)Nrz)Number of layers should be larger than 0.)padding)rr in_channelshidden_channels out_channels kernel_sizen_layers p_dropoutr ModuleList conv_layers norm_layersappendrr SequentialReLUDropout relu_droprangeprojweightdatazero_bias)rr,r-r.r/r0r1_rrrr!s<    zConvReluNorm.__init__cCsT|}t|jD]}|j|||}|j||}||}q|||}||Sr )r:r0r3r4r9r;)rr"x_maskZx_orgirrrr#Js zConvReluNorm.forwardr$rrrrr) s )r)cs,eZdZdZdfdd Zd ddZZS) DDSConvz1 Dilated and Depth-Separable Convolution c st||_||_||_||_t||_t |_ t |_ t |_ t |_ t|D]8}||}|||d}|j tj||||||d|j t||d|j t||j t|q/dS)Nr*)groupsdilationr+r)rrrr/r0r1rr8dropr2 convs_sep convs_1x1norms_1norms_2r:r5rr )rrr/r0r1rBrFr+rrrrYs6        zDDSConv.__init__NcCs|dur||}t|jD]3}|j|||}|j||}t|}|j||}|j||}t|}||}||}q ||Sr ) r:r0rHrJr gelurIrKrG)rr"rAgrByrrrr#vs    zDDSConv.forward)rDr )r%r&r'__doc__rr#r(rrrrrCTsrCcs4eZdZ  d fdd Zd ddZddZZS) WNrcsJtt||ddksJ||_|f|_||_||_||_||_t j |_ t j |_ t ||_|dkrNt j |d||d}t j jj|dd|_t|D]P}||} t|| | d} t j j|d||| | d} t j jj| dd} |j | ||dkrd|} n|} t j || d} t j jj| dd} |j | qRdS)Nr*rrr<)namerFr+)rrPrr-r/ dilation_rater0 gin_channelsr1rrr2 in_layersres_skip_layersr8rGrutilsr cond_layerr:intr5)rr-r/rSr0rTr1rXrBrFr+Zin_layerZres_skip_channelsZres_skip_layerrrrrsF        z WN.__init__NcKst|}t|jg}|dur||}t|jD]o}|j||}|durA|d|j} |dd| | d|jddf} nt|} t || |} | | } |j || } ||jdkr| ddd|jddf} || |}|| dd|jdddf}q|| }q||S)Nr*r) r zeros_like IntTensorr-rXr:r0rUcommonsfused_add_tanh_sigmoid_multiplyrGrV)rr"rArMkwargsoutputZn_channels_tensorrBx_inZ cond_offsetZg_lactsZ res_skip_actsZres_actsrrrr#s&  &   " z WN.forwardcCsR|jdkr tjj|j|jD] }tjj|q|jD] }tjj|qdS)Nr)rTrrrWrrXrUrVrlrrrrs   zWN.remove_weight_norm)rrr r%r&r'rr#rr(rrrrrPs  3rPc0eZdZd fdd Zd ddZdd ZZS) ResBlock1rrgcstt|ttt|||d|dt||ddtt|||d|dt||ddtt|||d|dt||ddg|_|j t ttt|||ddt|ddtt|||ddt|ddtt|||ddt|ddg|_ |j t dS)NrrrRr*) rrfrrr2rrrconvs1applyrconvs2rrr/rFrrrrs      "  "zResBlock1.__init__NcCs|t|j|jD],\}}t|t}|dur||}||}t|t}|dur+||}||}||}q|dur<||}|Sr )ziprjrlr leaky_relu LRELU_SLOPE)rr"rAc1c2xtrrrr#(s   zResBlock1.forwardcCs,|jD]}t|q|jD]}t|q dSr )rjrrlrbrrrr7s    zResBlock1.remove_weight_norm)rgrhr rdrrrrrfs Jrfcre) ResBlock2rgrrgcsrtt|ttt|||d|dt||ddtt|||d|dt||ddg|_|j t dS)NrrrR) rrtrrr2rrrconvsrkrrmrrrr?s2   zResBlock2.__init__NcCsL|jD]}t|t}|dur||}||}||}q|dur$||}|Sr )rvr rorp)rr"rAcrsrrrr#[s   zResBlock2.forwardcCs|jD]}t|qdSr )rvrrbrrrrfs  zResBlock2.remove_weight_norm)rgrur rdrrrrrt>s  rtc@seZdZdddZdS)LogFcKsF|stt|d|}t| ddg}||fSt||}|S)Nr rr*)rlog clamp_minsumexprr"rAreverser^rNlogdetrrrr#ls z Log.forwardNFr%r&r'r#rrrrrxksrxc@seZdZddddZdS)FlipF)r~cOs<t|dg}|st|dj|j|jd}||fS|S)Nrr)dtypedevice)rfliprsizetorr)rr"r~argsr^rrrrr#ws z Flip.forwardNrrrrrrvsrcs&eZdZfddZdddZZS)ElementwiseAffinecs<t||_tt|d|_tt|d|_dS)Nr) rrrrrrrmlogs)rrrrrrs zElementwiseAffine.__init__FcKs`|s |jt|j|}||}t|j|ddg}||fS||jt|j |}|S)Nrr*)rrr|rr{r}rrrr#szElementwiseAffine.forwardrr$rrrrrs rcs.eZdZ   dfdd Zd ddZZS) ResidualCouplingLayerrFc s|ddks Jdt||_||_||_||_||_|d|_||_t |j|d|_ t ||||||d|_ t ||jd|d|_|jjj|jjjdS)Nr*r!channels should be divisible by 2r)r1rT)rrrr-r/rSr0 half_channels mean_onlyrrprerPencpostr<r=r>r?) rrr-r/rSr0r1rTrrrrrs*  zResidualCouplingLayer.__init__Nc Ct||jgdd\}}|||}|j|||d}|||}|js4t||jgdd\} } n|} t| } |s\| |t| |}t ||gd}t | ddg} || fS|| t| |}t ||gd}|SNr*rrM) rsplitrrrrrrZr|catr{) rr"rArMr~x0x1hstatsrrrrrrr#  zResidualCouplingLayer.forward)rrFNFr$rrrrrs "rcs,eZdZ  d fdd Zd ddZZS) ConvFlow @cst||_||_||_||_||_||_|d|_t |j|d|_ t |||dd|_ t ||j|ddd|_|jjj|jjjdS)Nr*rrD)r1rg)rrr,filter_channelsr/r0num_bins tail_boundrrrrrCrvr;r<r=r>r?)rr,rr/r0rrrrrrs  zConvFlow.__init__NFc Cst||jgdd\}}||}|j|||d}|||}|j\}} } ||| d| dddd}|dd|j ft |j } |d|j d|j ft |j } |dd|j df} t || | | |d|jd \}}t||gd|}t||ddg}|s||fS|S) Nr*rrrrrg.linear)inversetailsr)rrrrrvr;shapereshapepermutermathsqrtrr rrr{)rr"rArMr~rrrbrwtunnormalized_widthsunnormalized_heightsunnormalized_derivatives logabsdetrrrrr#s2    zConvFlow.forward)rrrr$rrrrrs rcs2eZdZ     dfdd Zd ddZZS) TransformerCouplingLayerrFNc s|dksJ||ddksJdt||_||_||_||_|d|_||_t |j|d|_ | durDt ||||||d| dn| |_ t ||jd|d|_ |j jj|j jjdS)Nrgr*rrrT)ZisflowrT)rrrr-r/r0rrrrrr rrr<r=r>r?) rrr-r/r0n_headsr1rrZwn_sharing_parameterrTrrrrs4     z!TransformerCouplingLayer.__init__c Crr)rrrrrrrrZr|rr{r rrrr) rr"rArMr~rrrrrrrrrrrr#2rz TransformerCouplingLayer.forward)rrFNrrr$rrrrrs*r)rrrtorch.nnrr rtorch.nn.utilsrrr\rr transformsr attentionsr rpModuler r)rCrPrfrtrxrrrrrrrrrs.     41Xa-  9<