o "eU@s|ddlZddlmZddlZdZdZdZdddeeefddZ dd d Z dd deeefd d Z dddddeeefddZ dS)N) functionalgMbP?F?c  CsL|dur t} i} nt} ||d} | d|||||||| d| \} } | | fS)N)tails tail_bound)inputsunnormalized_widthsunnormalized_heightsunnormalized_derivativesinverse min_bin_widthmin_bin_heightmin_derivative)rational_quadratic_spline'unconstrained_rational_quadratic_spline)rrrr r rrr r r Z spline_fnZ spline_kwargsoutputs logabsdetrr"/workspace/OpenVoice/transforms.py&piecewise_rational_quadratic_transform s$    rư>cCs*|d|7<tj|d|kdddS)N..Nrdim)torchsum)Z bin_locationsrepsrrr searchsorted-srlinearc Cs|| k||k@} | } t|} t|} |dkr@tj|dd}ttd| d}||d<||d<|| | | <d| | <ntd|t || || ddf|| ddf|| ddf|| || |||| d \| | <| | <| | fS) Nr )rr)padr.rrrz{} tails are not implemented.) rrrr r leftrightbottomtopr r r ) r zeros_likeFr!nplogexp RuntimeErrorformatr)rrrr r rrr r r Zinside_interval_maskZoutside_interval_maskrrconstantrrrr2s<     rc 'Cst||kst||krtd|jd} | | dkr!td| | dkr+tdtj|dd} | d| | | } tj| dd}tj|dd d d }||||}||d <||d <|dddf|dddf} | t |}tj|dd}| d| | |}tj|dd}tj|dd d d }||||}||d <||d <|dddf|dddf}|rt ||d}nt ||d}| d|d }| d|d }| d|d }|| }| d|d }| d|d }|dddf d|d }| d|d }|r||||d||||}||||||d|}| ||}| dd||}|dk sGJd|| t|}|||} |d|}!|||d||!}"| d|| dd||!|d| d}#t|#dt|"}$| |$ fS|||}%|%d|%}!|||% d||!}&|||d||!}"||&|"} | d||% dd||!|d|% d}#t|#dt|"}$| |$fS)Nz-Input to a transform is not within its domainrrz2Minimal bin width too large for the number of binsz3Minimal bin height too large for the number of binsrr)rrr.r/)r!modevaluer"r.rr)rminmax ValueErrorshaper(softmaxcumsumr!softplusrgatherpowallsqrtr*)'rrrr r r#r$r%r&r r r num_binswidthsZ cumwidths derivativesheightsZ cumheightsbin_idxZinput_cumwidthsZinput_bin_widthsZinput_cumheightsdeltaZ input_deltaZinput_derivativesZinput_derivatives_plus_oneZ input_heightsabc discriminantrootrZtheta_one_minus_theta denominatorZderivative_numeratorrtheta numeratorrrrrds                 r)r) rtorch.nnrr(numpyr)ZDEFAULT_MIN_BIN_WIDTHZDEFAULT_MIN_BIN_HEIGHTZDEFAULT_MIN_DERIVATIVErrrrrrrrs<  !  7