U Ad!)@sddlZddlmZddlmZddlmZddlmZmZddl m Z m Z m Z dZ ejaddZGd d d ejZGd d d ejZGd ddejjZGdddejjZGdddejjZGdddejZGdddejZGdddejZGdddejZdS)N)nn) functional) get_padding init_weights)Depthwise_Separable_Conv1Dremove_weight_norm_modulesweight_norm_modulesg?cCs|rtntjadSN)rrConv1d Conv1dModel)use_depthwise_convr AC:\Green_Program_Files\So-VITS-SVC-Shengshuyan\modules\modules.pyset_Conv1dModelsrcs&eZdZdfdd ZddZZS) LayerNormh㈵>cs>t||_||_tt||_tt ||_ dSr ) super__init__channelsepsr Parametertorchonesgammazerosbeta)selfrr __class__r rrs  zLayerNorm.__init__cCs4|dd}t||jf|j|j|j}|ddS)N) transposeF layer_normrrrr)rxr r rforwards zLayerNorm.forward)r__name__ __module__ __qualname__rr% __classcell__r r rrrsrcs$eZdZfddZddZZS) ConvReluNormc st||_||_||_||_||_||_|dks>tdt |_ t |_ |j t||||dd|j t|t t t ||_t|dD]0}|j t||||dd|j t|qt ||d|_|jjj|jjjdS)Nrz)Number of layers should be larger than 0.)padding)rr in_channelshidden_channels out_channels kernel_sizen_layers p_dropoutAssertionErrorr ModuleList conv_layers norm_layersappendr r SequentialReLUDropout relu_dropranger projweightdatazero_bias)rr.r/r0r1r2r3_rr rr&s,   zConvReluNorm.__init__cCsT|}t|jD].}|j|||}|j||}||}q|||}||Sr )r=r2r6r7r<r>)rr$x_maskZx_orgir r rr%>s zConvReluNorm.forwardr&r r rrr+%s r+cs0eZdZd fdd Zd ddZddZZS) WNrcs6tt||ddkst||_|f|_||_||_||_||_ t j |_ t j |_t ||_|dkrt j |d||d}t|dd|_t|D]}||} t|| | d} t|d||| | d} t| dd} |j | ||dkrd|} n|} t j || d} t| dd} |j| qdS)Nr,rrr?)namedilationr-)rrFrr4r/r1 dilation_rater2 gin_channelsr3rrr5 in_layersres_skip_layersr;dropr r cond_layerr=intr r8)rr/r1rJr2rKr3rOrErIr-Zin_layerZres_skip_channelsZres_skip_layerrr rrIs:         z WN.__init__NcKst|}t|jg}|dk r*||}t|jD]}|j||}|dk r|d|j} |dd| | d|jddf} n t|} t || |} | | } |j || } ||jdkr | ddd|jddf} || |}|| dd|jdddf}q4|| }q4||S)Nr,r) r zeros_like IntTensorr/rOr=r2rLcommonsfused_add_tanh_sigmoid_multiplyrNrM)rr$rDgkwargsoutputZn_channels_tensorrEx_inZ cond_offsetZg_lZactsZ res_skip_actsZres_actsr r rr%ms.  &   " z WN.forwardcCs@|jdkrt|j|jD] }t|q|jD] }t|q.dS)Nr)rKrrOrLrMrlr r rremove_weight_norms      zWN.remove_weight_norm)rr)Nr'r(r)rr%r[r*r r rrrFHs$ rFcs0eZdZd fdd Zd ddZdd ZZS) ResBlock1rr^cstt|ttt|||d|dt||ddtt|||d|dt||ddtt|||d|dt||ddg|_|j t ttt|||ddt|ddtt|||ddt|ddtt|||ddt|ddg|_ |j t dS)NrrrHr,) rr]rrr5rr rconvs1applyrconvs2rrr1rIrr rrs2    zResBlock1.__init__NcCs|t|j|jD]X\}}t|t}|dk r2||}||}t|t}|dk rV||}||}||}q|dk rx||}|Sr )ziprarcr" leaky_relu LRELU_SLOPE)rr$rDc1c2xtr r rr%s   zResBlock1.forwardcCs,|jD] }t|q|jD] }t|qdSr )rarrcrYr r rr[s   zResBlock1.remove_weight_norm)r^r_)Nr\r r rrr]s r]cs0eZdZd fdd Zd ddZdd ZZS) ResBlock2r^rr^csrtt|ttt|||d|dt||ddtt|||d|dt||ddg|_|j t dS)NrrrH) rrkrrr5rr rconvsrbrrdrr rrs  zResBlock2.__init__NcCsL|jD]0}t|t}|dk r&||}||}||}q|dk rH||}|Sr )rmr"rfrg)rr$rDcrjr r rr%s   zResBlock2.forwardcCs|jD] }t|qdSr )rmrrYr r rr[s zResBlock2.remove_weight_norm)r^rl)Nr\r r rrrks rkc@seZdZdddZdS)LogFcKsJ|s4tt|d|}t| ddg}||fSt||}|SdS)Nrrr,)rlog clamp_minsumexprr$rDreverserVylogdetr r rr%s z Log.forwardN)Fr'r(r)r%r r r rrosroc@seZdZddddZdS)FlipF)rucOs@t|dg}|s8t|dj|j|jd}||fS|SdS)Nrr)dtypedevice)rfliprsizetorzr{)rr$ruargsrVrwr r rr%s z Flip.forwardNrxr r r rrysrycs&eZdZfddZdddZZS)ElementwiseAffinecs<t||_tt|d|_tt|d|_dS)Nr) rrrrrrrmlogs)rrrr rrs zElementwiseAffine.__init__FcKsd|s@|jt|j|}||}t|j|ddg}||fS||jt|j |}|SdS)Nrr,)rrrsrrrrtr r rr%szElementwiseAffine.forward)Fr&r r rrrs rcs(eZdZdfdd Zd ddZZS) ResidualCouplingLayerrFNc s|ddkstdt||_||_||_||_||_|d|_||_ t |j|d|_ | dkrzt ||||||dn| |_t ||jd|d|_|jjj|jjjdS)Nr,rz!channels should be divisible by 2r)r3rK)r4rrrr/r1rJr2 half_channels mean_onlyrr prerFencpostr?r@rArB) rrr/r1rJr2r3rKrwn_sharing_parameterrr rrs   "zResidualCouplingLayer.__init__c Cst||jgdd\}}|||}|j|||d}|||}|jsht||jgdd\} } n|} t| } |s| |t| |}t ||gd}t | ddg} || fS|| t| |}t ||gd}|SdS)Nr,r)rU) rsplitrrrrrrQrscatrr) rr$rDrUrux0x1hstatsrrrwr r rr%s  zResidualCouplingLayer.forward)rrFN)NFr&r r rrrs r)rrtorch.nnrr"modules.commonsrSrrZmodules.DSConvrrrrgr r rModulerr+rFr]rkroryrrr r r rs"   #L-