ó
    USh¦  ã                   ó¼   • S r SSKrSSKJr  SSKrSSKrS r " S S\R                  5      r	 " S S\R                  5      r
S rS	 r " S
 S\R                  5      rg)zW
Tiny AutoEncoder for Stable Diffusion
(DNN for encoding / decoding SD's latent space)
é    Nc                 ór   • [         R                  R                  R                  R                  " XS4SS0UD6$ )Né   Úpaddingé   )Úldm_patchedÚmodulesÚopsÚdisable_weight_initÚConv2d)Ún_inÚn_outÚkwargss      Ú;/home/gothic/public_html/Fooocus/ldm_patched/taesd/taesd.pyÚconvr      s3   € Ü×Ñ×"Ñ"×6Ñ6×=Ò=¸dÈ1ÑbÐVWÐbÐ[aÑbÐbó    c                   ó   • \ rS rSrS rSrg)ÚClampé   c                 ó:   • [         R                  " US-  5      S-  $ )Nr   )ÚtorchÚtanh©ÚselfÚxs     r   ÚforwardÚClamp.forward   s   € Ü�zŠz˜!˜a™%Ó  1Ñ$Ð$r   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   Ú__static_attributes__r   r   r   r   r      s   † õ%r   r   c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )ÚBlocké   c           
      óº  >• [         TU ]  5         [        R                  " [	        X5      [        R
                  " 5       [	        X"5      [        R
                  " 5       [	        X"5      5      U l        X:w  a3  [        R                  R                  R                  R                  XSSS9O[        R                  " 5       U l        [        R
                  " 5       U l        g )Nr   F©Úbias)ÚsuperÚ__init__ÚnnÚ
Sequentialr   ÚReLUr   r   r	   r
   r   ÚIdentityÚskipÚfuse)r   r   r   Ú	__class__s      €r   r*   ÚBlock.__init__   sž   ø€ Ü‰ÑÔÜ—M’M¤$ tÓ"3´R·W²W³YÄÀUÓ@RÔTV×T[ÒT[ÓT]Ô_cÐdiÓ_qÓrˆŒ	ØfjÓfs”K×'Ñ'×+Ñ+×?Ñ?×FÑFÀtÐTUÐ\aÐFÑbÔy{÷  zEò  zEó  zGˆŒ	Ü—G’G“Iˆ�	r   c                 óf   • U R                  U R                  U5      U R                  U5      -   5      $ )N)r0   r   r/   r   s     r   r   ÚBlock.forward   s&   € Ø�y‰y˜Ÿ™ 1›¨¯	©	°!«Ñ4Ó5Ð5r   )r   r0   r/   )r   r   r    r!   r*   r   r"   Ú__classcell__©r1   s   @r   r$   r$      s   ø† õ÷
6ð 6r   r$   c                  óv  • [         R                  " [        SS5      [        SS5      [        SSSSS9[        SS5      [        SS5      [        SS5      [        SSSSS9[        SS5      [        SS5      [        SS5      [        SSSSS9[        SS5      [        SS5      [        SS5      [        SS5      5      $ )Nr   é@   é   F)Ústrider(   é   )r+   r,   r   r$   r   r   r   ÚEncoderr<      s¥   € Ü�=Š=ÜˆQ�‹”U˜2˜r“]ÜˆR�˜A EÑ*¬E°"°b«M¼5ÀÀR»=Ì%ÐPRÐTVË-ÜˆR�˜A EÑ*¬E°"°b«M¼5ÀÀR»=Ì%ÐPRÐTVË-ÜˆR�˜A EÑ*¬E°"°b«M¼5ÀÀR»=Ì%ÐPRÐTVË-ÜˆR�‹óð r   c                  ó  • [         R                  " [        5       [        SS5      [         R                  " 5       [        SS5      [        SS5      [        SS5      [         R                  " SS9[        SSSS9[        SS5      [        SS5      [        SS5      [         R                  " SS9[        SSSS9[        SS5      [        SS5      [        SS5      [         R                  " SS9[        SSSS9[        SS5      [        SS5      5      $ )Nr;   r8   r9   )Úscale_factorFr'   r   )r+   r,   r   r   r-   r$   ÚUpsampler   r   r   ÚDecoderr@   %   sÒ   € Ü�=Š=Ü‹”�a˜“œbŸgšg›iÜˆb�"‹”u˜R “}¤e¨B°£m´R·[²[ÈaÑ5PÔRVÐWYÐ[]ÐdiÑRjÜˆb�"‹”u˜R “}¤e¨B°£m´R·[²[ÈaÑ5PÔRVÐWYÐ[]ÐdiÑRjÜˆb�"‹”u˜R “}¤e¨B°£m´R·[²[ÈaÑ5PÔRVÐWYÐ[]ÐdiÑRjÜˆb�"‹”t˜B “{óð r   c                   ó`   ^ • \ rS rSrSrSrS
U 4S jjr\S 5       r\S 5       r	S r
S rS	rU =r$ )ÚTAESDé.   r   ç      à?c                 óà  >• [         TU ]  5         [        5       U l        [	        5       U l        [        R                  R                  [        R                  " S5      5      U l
        UbA  U R                  R                  [        R                  R                  R                  USS95        UbB  U R
                  R                  [        R                  R                  R                  USS95        gg)zKInitialize pretrained TAESD on the given device from the given checkpoints.g      ð?NT)Ú	safe_load)r)   r*   r<   Útaesd_encoderr@   Útaesd_decoderr   r+   Ú	ParameterÚtensorÚ	vae_scaleÚload_state_dictr   r   ÚutilsÚload_torch_file)r   Úencoder_pathÚdecoder_pathr1   s      €r   r*   ÚTAESD.__init__2   s¶   ø€ ä‰ÑÔÜ$›YˆÔÜ$›YˆÔÜŸ™×+Ñ+¬E¯LªL¸Ó,=Ó>ˆŒØÑ#Ø×Ñ×.Ñ.¬{×/BÑ/B×/HÑ/H×/XÑ/XÐYeÐquÐ/XÐ/vÔwØÑ#Ø×Ñ×.Ñ.¬{×/BÑ/B×/HÑ/H×/XÑ/XÐYeÐquÐ/XÐ/vÕwð $r   c                 ó    • U R                  S[        R                  -  5      R                  [        R                  5      R                  SS5      $ )zraw latents -> [0, 1]r9   r   r   )ÚdivrB   Úlatent_magnitudeÚaddÚlatent_shiftÚclamp©r   s    r   Úscale_latentsÚTAESD.scale_latents=   s=   € ð �u‰u�Qœ×/Ñ/Ñ/Ó0×4Ñ4´U×5GÑ5GÓH×NÑNÈqÐRSÓTÐTr   c                 ó€   • U R                  [        R                  5      R                  S[        R                  -  5      $ )z[0, 1] -> raw latentsr9   )ÚsubrB   rV   ÚmulrT   rX   s    r   Úunscale_latentsÚTAESD.unscale_latentsB   s/   € ð �u‰u”U×'Ñ'Ó(×,Ñ,¨Q´×1GÑ1GÑ-GÓHÐHr   c                 ó€   • U R                  XR                  -  5      nUR                  S5      R                  S5      nU$ )NrD   r9   )rH   rK   r\   r]   )r   r   Úx_samples      r   ÚdecodeÚTAESD.decodeG   s7   € Ø×%Ñ% a¯.©.Ñ&8Ó9ˆØ—<‘< Ó$×(Ñ(¨Ó+ˆØˆr   c                 óJ   • U R                  US-  S-   5      U R                  -  $ )NrD   )rG   rK   r   s     r   ÚencodeÚTAESD.encodeL   s$   € Ø×!Ñ! ! c¡'¨C¡-Ó0°4·>±>ÑAÐAr   )rH   rG   rK   )NN)r   r   r    r!   rT   rV   r*   ÚstaticmethodrY   r^   rb   re   r"   r5   r6   s   @r   rB   rB   .   sQ   ø† ØÐØ€L÷	xð ñUó ðUð ñIó ðIò÷
Bð Br   rB   )Ú__doc__r   Útorch.nnr+   Úldm_patched.modules.utilsr   Úldm_patched.modules.opsr   ÚModuler   r$   r<   r@   rB   r   r   r   Ú<module>rm      sZ   ðñó Ý ã  Û òcô%ˆB�I‰Iô %ô6ˆB�I‰Iô 6òòôBˆB�I‰Iõ Br   