ó
    oM‡jær  ã                   ód  • S SK Jr  S SKJr  S SKJr  S SKrS SKJr  S SK	Js  J
r  SSKJrJr  SSKJrJr  SSKJr  SS	KJr  SS
KJr  \" 5       (       a  S SKJrJrJrJrJrJr  SSKJ r   SSK!J"r"  SSK#J$r$  SSK%J&r&  SSK'J(r(  SSK)J*r*J+r+J,r,  \RZ                  " \.5      r/S\R`                  S\Rb                  S\Rb                  4S jr2S\R`                  S\Rb                  S\Rb                  4S jr3S\R`                  S\Rb                  S\4S\Rb                  4S jr5 S-S\6S\4S\4S\4S\4S\R`                  4S jjr7\2\3\5S .r8\ " S! S"\5      5       r9 " S# S$\R`                  5      r: " S% S&\R`                  5      r; " S' S(\R`                  5      r< " S) S*\R`                  5      r= " S+ S,\(\"\*\5      r>g).é    )Ú	dataclass)Úsqrt)ÚAnyNé   )ÚConfigMixinÚregister_to_config)Ú
BaseOutputÚlogging)Úapply_forward_hook)Úis_transformers_available)Úrandn_tensor)ÚDinov2WithRegistersConfigÚDinov2WithRegistersModelÚSiglipVisionConfigÚSiglipVisionModelÚViTMAEConfigÚViTMAEModelé   )Úget_activation)ÚAttentionMixin)Ú	Attention)Úget_2d_sincos_pos_embed)Ú
ModelMixiné   )ÚAutoencoderMixinÚDecoderOutputÚEncoderOutputÚmodelÚimagesÚreturnc                 ó>   • U " USS9nSnUR                   S S 2US 24   $ )NT)Úoutput_hidden_statesé   ©Úlast_hidden_state)r   r   ÚoutputsÚunused_token_nums       Ú»C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\diffusers/models/autoencoders/autoencoder_rae.pyÚ_dinov2_encoder_forwardr)   :   s.   € Ù�F°Ñ6€GØÐØ×$Ñ$¢QÐ(8Ñ(9Ð%9Ñ:Ð:ó    c                 ó*   • U " USSS9nUR                   $ )NT)r"   Úinterpolate_pos_encodingr$   )r   r   r&   s      r(   Ú_siglip2_encoder_forwardr-   @   s   € Ù�F°ÐPTÑU€GØ×$Ñ$Ð$r*   Ú
patch_sizec                 ó²  • UR                   S   UR                   S   pC[        X4-  US-  -  5      nXRS-  -  X4-  :w  a  [        S5      e[        R                  " U5      R                  S5      R                  UR                   S   S5      R                  UR                  5      R                  UR                  5      nU " XSS9nUR                  S S 2SS 24   $ )	Nr   r   z-Image size should be divisible by patch size.r   éÿÿÿÿT)r,   r   )ÚshapeÚintÚ
ValueErrorÚtorchÚarangeÚ	unsqueezeÚexpandÚtoÚdeviceÚdtyper%   )r   r   r.   ÚhÚwÚ	patch_numÚnoiser&   s           r(   Ú_mae_encoder_forwardr?   E   sÀ   € Ø�<‰<˜‰?˜FŸL™L¨™O€qÜ�A‘E˜Z¨™]Ñ*Ó+€IØ˜q‘=Ñ  A¡EÓ)ÜÐHÓIÐIÜ�LŠL˜Ó#×-Ñ-¨aÓ0×7Ñ7¸¿¹ÀQ¹ÈÓL×OÑOÐPV×P]ÑP]Ó^×aÑaÐbh×bnÑbnÓo€EÙ�F¸DÑA€GØ×$Ñ$¢Q¨© UÑ+Ð+r*   Úencoder_typeÚhidden_sizeÚnum_hidden_layersÚhead_dimc           	      óþ  • X-  nU S:X  a;  [        UUSUUS9n[        U5      nSUR                  l        SUR                  l        O¦U S:X  aO  [        UUSUUS9n[        U5      nSUR                  R                  l        SUR                  R                  l        OQU S:X  a<  [        UUSUUS	S
9n[        U5      nSUR                  l        SUR                  l        O[        SU  S35      eUR                  S5        U$ )z<Build a frozen encoder from config (no pretrained download).Údinov2i  )rA   r.   Ú
image_sizeÚnum_attention_headsrB   NÚsiglip2é   Úmaeéà   ç        )rA   r.   rF   rG   rB   Ú
mask_ratioúUnknown encoder_type='z"'. Available: dinov2, siglip2, maeF)r   r   Ú	layernormÚweightÚbiasr   r   Úvision_modelÚpost_layernormr   r   r3   Úrequires_grad_)r@   rA   r.   rB   rC   rG   Úconfigr   s           r(   Ú_build_encoderrV   T   s  € ð &Ñ1Ðà�xÓÜ*Ø#Ø!ØØ 3Ø/ñ
ˆô )¨Ó0ˆð "&ˆ�‰ÔØ#ˆ�‰ÕØ	˜Ó	"Ü#Ø#Ø!ØØ 3Ø/ñ
ˆô " &Ó)ˆà37ˆ×Ñ×)Ñ)Ô0Ø15ˆ×Ñ×)Ñ)Õ.Ø	˜Ó	ÜØ#Ø!ØØ 3Ø/Øñ
ˆô ˜FÓ#ˆà!%ˆ�‰ÔØ#ˆ�‰ÕäÐ1°,°Ð?aÐbÓcÐcà	×Ñ˜ÔØ€Lr*   )rE   rH   rJ   c                   ó8   • \ rS rSr% Sr\R                  \S'   Srg)ÚRAEDecoderOutputéŽ   z¥
Output of `RAEDecoder`.

Args:
    logits (`torch.Tensor`):
        Patch reconstruction logits of shape `(batch_size, num_patches, patch_size**2 * num_channels)`.
Úlogits© N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r4   ÚTensorÚ__annotations__Ú__static_attributes__r[   r*   r(   rX   rX   Ž   s   ‡ ñð �L‰LÖr*   rX   c                   óv   ^ • \ rS rSrS
S\S\S\4U 4S jjjrS\R                  S\R                  4S jr	S	r
U =r$ )ÚViTMAEIntermediateé›   rA   Úintermediate_sizeÚ
hidden_actc                 óx   >• [         TU ]  5         [        R                  " X5      U l        [        U5      U l        g ©N)ÚsuperÚ__init__ÚnnÚLinearÚdenser   Úintermediate_act_fn)ÚselfrA   rg   rh   Ú	__class__s       €r(   rl   ÚViTMAEIntermediate.__init__œ   s+   ø€ Ü‰ÑÔÜ—Y’Y˜{Ó>ˆŒ
Ü#1°*Ó#=ˆÕ r*   Úhidden_statesr    c                 óJ   • U R                  U5      nU R                  U5      nU$ rj   ©ro   rp   )rq   rt   s     r(   ÚforwardÚViTMAEIntermediate.forward¡   s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr*   rv   )Úgelu)r\   r]   r^   r_   r2   Ústrrl   r4   ra   rw   rc   Ú__classcell__©rr   s   @r(   re   re   ›   sB   ø† ñ> Cð >¸Cð >ÈS÷ >ð >ð
 U§\¡\ð °e·l±l÷ ò r*   re   c                   óŽ   ^ • \ rS rSrSS\S\S\4U 4S jjjrS\R                  S\R                  S\R                  4S	 jr	S
r
U =r$ )ÚViTMAEOutputé§   rA   rg   Úhidden_dropout_probc                 óŽ   >• [         TU ]  5         [        R                  " X!5      U l        [        R
                  " U5      U l        g rj   )rk   rl   rm   rn   ro   ÚDropoutÚdropout)rq   rA   rg   r€   rr   s       €r(   rl   ÚViTMAEOutput.__init__¨   s0   ø€ Ü‰ÑÔÜ—Y’YÐ0Ó>ˆŒ
Ü—z’zÐ"5Ó6ˆ�r*   rt   Úinput_tensorr    c                 óR   • U R                  U5      nU R                  U5      nX-   nU$ rj   ©ro   rƒ   )rq   rt   r…   s      r(   rw   ÚViTMAEOutput.forward­   s,   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØ%Ñ4ˆØÐr*   r‡   )rL   )r\   r]   r^   r_   r2   Úfloatrl   r4   ra   rw   rc   r{   r|   s   @r(   r~   r~   §   sQ   ø† ñ7 Cð 7¸Cð 7ÐV[÷ 7ð 7ð
 U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ ò r*   r~   c                   óš   ^ • \ rS rSrSrSSSSSS.S\S	\S
\S\S\S\S\S\4U 4S jjjr	S\
R                  S\
R                  4S jrSrU =r$ )ÚViTMAELayeré´   zV
This matches the naming/parameter structure used in RAE-main (ViTMAE decoder block).
Tçê-�™—q=rL   ry   )Úqkv_biasÚlayer_norm_epsr€   Úattention_probs_dropout_probrh   rA   rG   rg   rŽ   r�   r€   r�   rh   c                ó  >• [         T	U ]  5         X-  S:w  a  [        SU SU 35      e[        UUX-  UUS9U l        [        XUS9U l        [        XUS9U l        [        R                  " XS9U l        [        R                  " XS9U l        g )Nr   zhidden_size=z* must be divisible by num_attention_heads=)Ú	query_dimÚheadsÚdim_headrƒ   rQ   )rA   rg   rh   )rA   rg   r€   ©Úeps)rk   rl   r3   r   Ú	attentionre   Úintermediater~   Úoutputrm   Ú	LayerNormÚlayernorm_beforeÚlayernorm_after)
rq   rA   rG   rg   rŽ   r�   r€   r�   rh   rr   s
            €r(   rl   ÚViTMAELayer.__init__¹   s¨   ø€ ô 	‰ÑÔØÑ,°Ó1ÜØ˜{˜mÐ+UÐViÐUjÐkóð ô #Ø!Ø%Ø Ñ7Ø0Øñ
ˆŒô /Ø#ÐU_ñ
ˆÔô #Ø#Ð^qñ
ˆŒô !#§¢¨[Ñ MˆÔÜ!Ÿ|š|¨KÑLˆÕr*   rt   r    c                 ó´   • U R                  U R                  U5      5      nX!-   nU R                  U5      nU R                  U5      nU R	                  X15      nU$ rj   )r—   r›   rœ   r˜   r™   )rq   rt   Úattention_outputÚlayer_outputs       r(   rw   ÚViTMAELayer.forwardÚ   sX   € ØŸ>™>¨$×*?Ñ*?ÀÓ*NÓOÐØ(Ñ8ˆà×+Ñ+¨MÓ:ˆØ×(Ñ(¨Ó6ˆØ—{‘{ <Ó?ˆØÐr*   )r—   r˜   rœ   r›   r™   )r\   r]   r^   r_   r`   r2   Úboolr‰   rz   rl   r4   ra   rw   rc   r{   r|   s   @r(   r‹   r‹   ´   sž   ø† ñð Ø %Ø%(Ø.1Ø òMð ðMð !ð	Mð
 ðMð ðMð ðMð #ðMð ',ðMð ÷Mð MðB U§\¡\ð °e·l±l÷ ò r*   r‹   c                   ó”  ^ • \ rS rSrSr              S$S\S\S\S\S\S	\S
\S\S\S\S\S\S\S\4U 4S jjjr	S\
R                  S\
R                  4S jrS\
R                  S\
R                  4S jrS%S\
R                  S\\\4   S-  4S jjrSSSS.S\
R                  S\S \S!\S\\\
R                     -  4
S" jjrS#rU =r$ )&Ú
RAEDecoderéä   zæ
Decoder implementation ported from RAE-main to keep checkpoint compatibility.

Key attributes (must match checkpoint keys):
- decoder_embed
- decoder_pos_embed
- decoder_layers
- decoder_norm
- decoder_pred
- trainable_cls_token
TrA   Údecoder_hidden_sizeÚdecoder_num_hidden_layersÚdecoder_num_attention_headsÚdecoder_intermediate_sizeÚnum_patchesr.   Únum_channelsrF   rŽ   r�   r€   r�   rh   c                 ó”  >• [         TU ]  5         X l        Xpl        X€l        X�l        X`l        [        R                  " XSS9U l	        [        US-  5      n[        X/SSSS9nU R                  SUR                  S5      R                  5       S	S
9  [        R                  " [!        U5       Vs/ s H  n[#        UUUU
UUUUS9PM     sn5      U l        [        R&                  " X+S9U l        [        R                  " X'S-  U-  SS9U l        S	U l        [        R.                  " [0        R2                  " SSU5      5      U l        g s  snf )NT)rQ   ç      à?r   Úpt)Ú	cls_tokenÚextra_tokensÚoutput_typeÚdecoder_pos_embedr   F©Ú
persistent)rA   rG   rg   rŽ   r�   r€   r�   rh   r•   r   )rk   rl   r¦   r.   r«   rF   rª   rm   rn   Údecoder_embedr2   r   Úregister_bufferr6   r‰   Ú
ModuleListÚranger‹   Údecoder_layersrš   Údecoder_normÚdecoder_predÚgradient_checkpointingÚ	Parameterr4   ÚzerosÚtrainable_cls_token)rq   rA   r¦   r§   r¨   r©   rª   r.   r«   rF   rŽ   r�   r€   r�   rh   Ú	grid_sizeÚ	pos_embedÚ_rr   s                     €r(   rl   ÚRAEDecoder.__init__ñ   sB  ø€ ô" 	‰ÑÔØ#6Ô Ø$ŒØ(ÔØ$ŒØ&ÔäŸYšY {ÈdÑSˆÔÜ˜ SÑ(Ó)ˆ	Ü+Ø°dÈÐX\ñ
ˆ	ð 	×ÑÐ0°)×2EÑ2EÀaÓ2H×2NÑ2NÓ2PÐ]bÐÑcä Ÿmšmô Ð8Ô9óò :�Aô Ø 3Ø(CØ&?Ø%Ø#1Ø(;Ø1MØ)ô	ñ :ñó
ˆÔô  ŸLšLÐ)<ÑQˆÔÜŸIšIÐ&9Àq¹=È<Ñ;WÐ^bÑcˆÔØ&+ˆÔ#ä#%§<¢<´·²¸A¸qÐBUÓ0VÓ#WˆÕ ùò's   Â-EÚ
embeddingsr    c                 ó  • UR                   S   S-
  nU R                  R                   S   S-
  nU R                  S S 2SS S 24   nU R                  S S 2SS 2S S 24   nU R                  R                   S   nUR                  SSSU5      R                  SSSS5      n[        R
                  " USX#-  4SSS9nUR                  SSSS5      R                  SSU5      n[        R                  " UR                  S5      U4SS	9$ )
Nr   r   r0   r   r   ÚbicubicF)Úscale_factorÚmodeÚalign_corners©Údim)
r1   r²   ÚreshapeÚpermuteÚFÚinterpolateÚviewr4   Úcatr6   )rq   rÄ   Úembeddings_positionsÚnum_positionsÚclass_pos_embedÚpatch_pos_embedrË   s          r(   r,   Ú#RAEDecoder.interpolate_pos_encoding&  s
  € Ø)×/Ñ/°Ñ2°QÑ6ÐØ×.Ñ.×4Ñ4°QÑ7¸!Ñ;ˆà×0Ñ0²°A²q°Ñ9ˆØ×0Ñ0²°A±Bº°Ñ:ˆØ×$Ñ$×*Ñ*¨2Ñ.ˆà)×1Ñ1°!°Q¸¸CÓ@×HÑHÈÈAÈqÐRSÓTˆÜŸ-š-ØØÐ1ÑAÐBØØñ	
ˆð *×1Ñ1°!°Q¸¸1Ó=×BÑBÀ1ÀbÈ#ÓNˆÜ�yŠy˜/×3Ñ3°AÓ6¸ÐHÈaÑPÐPr*   Úxc                 ó°  • UR                   u  p#nX0R                  :X  a  U$ [        US-  5      =pVUR                  X%Xd5      R	                  SSSS5      n[        U R                  S-  5      [        U R                  S-  5      4n[
        R                  " XSSS9nUR	                  SSSS5      R                  5       R                  X R                  U5      nU$ )	Nr­   r   r   r   r   ÚbilinearF©ÚsizerÈ   rÉ   )	r1   rª   r2   rÌ   rÍ   rÎ   rÏ   Ú
contiguousrÐ   )rq   r×   ÚbÚlÚcr;   r<   Útarget_sizes           r(   Úinterpolate_latentÚRAEDecoder.interpolate_latent8  sÂ   € Ø—'‘'‰ˆˆaØ× Ñ Ó ØˆHÜ�A�s‘F“ÐˆØ�I‰I�a˜AÓ!×)Ñ)¨!¨Q°°1Ó5ˆÜ˜4×+Ñ+¨SÑ0Ó1´3°t×7GÑ7GÈÑ7LÓ3MÐNˆÜ�MŠM˜!°JÈeÑTˆØ�I‰I�a˜˜A˜qÓ!×,Ñ,Ó.×3Ñ3°A×7GÑ7GÈÓKˆØˆr*   NÚpatchified_pixel_valuesÚoriginal_image_sizec                 óš  • U R                   U R                  pCUb  UOU R                  U R                  4nUu  pVXS-  nXc-  nXx-  UR                  S   :w  a!  [	        SUR                  S    SU SU 35      eUR                  S   n	UR                  U	UUUUU5      n[        R                  " SU5      nUR                  U	UXs-  Xƒ-  5      n
U
$ )Nr   z5The number of patches in the patchified pixel values z9, does not match the number of patches on original image Ú*r   znhwpqc->nchpwq)r.   r«   rF   r1   r3   rÌ   r4   Úeinsum)rq   rã   rä   r.   r«   Úoriginal_heightÚoriginal_widthÚnum_patches_hÚnum_patches_wÚ
batch_sizeÚpixel_valuess              r(   Ú
unpatchifyÚRAEDecoder.unpatchifyC  s*  € Ø#'§?¡?°D×4EÑ4E�Là#6Ñ#BÑÈÏÉÐZ^×ZiÑZiÐHjð 	ð +>Ñ'ˆØ'Ñ5ˆØ&Ñ4ˆØÑ(Ð,C×,IÑ,IÈ!Ñ,LÓLÜØGÐH_×HeÑHeÐfgÑHhÐGið  jcð  dqð  crð  rsð  tAð  sBð  Cóð ð -×2Ñ2°1Ñ5ˆ
Ø"9×"AÑ"AØØØØØØó#
Ðô #(§,¢,Ð/?ÐAXÓ"YÐØ.×6Ñ6ØØØÑ&ØÑ&ó	
ˆð Ðr*   F)r,   Údrop_cls_tokenÚreturn_dictrt   r,   rð   rñ   c                óŠ  • U R                  U5      nU(       a   US S 2SS 2S S 24   nU R                  U5      nOU R                  U5      nU R                  R                  UR                  S   SS5      n[
        R                  " Xv/SS9nU(       a$  U(       d  [        S5      eU R                  U5      nOU R                  nXXR                  UR                  UR                  S9-   nU R                   H  n	U	" U5      nM     U R                  U5      nU R                  U5      n
U
S S 2SS 2S S 24   n
U(       d  U
4$ [!        U
S9$ )Nr   r   r0   rÊ   z:interpolate_pos_encoding only supports drop_cls_token=True©r9   r:   )rZ   )rµ   rá   r¿   r7   r1   r4   rÑ   r3   r,   r²   r8   r9   r:   r¹   rº   r»   rX   )rq   rt   r,   rð   rñ   r×   Úx_r¯   r²   Úlayer_modulerZ   s              r(   rw   ÚRAEDecoder.forwardb  s/  € ð ×Ñ˜}Ó-ˆÞØ’1�a‘bš!�8‘ˆBØ×(Ñ(¨Ó,‰Bà×(Ñ(¨Ó+ˆBà×,Ñ,×3Ñ3°B·H±H¸Q±KÀÀRÓHˆ	Ü�IŠI�y�o¨1Ñ-ˆæ#Þ!Ü Ð!]Ó^Ð^Ø $× =Ñ =¸aÓ @Ñà $× 6Ñ 6Ðà×0Ñ0¸¿¹ÈÏÉÐ0ÐPÑPˆà ×/Ô/ˆLÙ(¨Ó7ŠMñ 0ð ×)Ñ)¨-Ó8ˆØ×"Ñ" =Ó1ˆØš˜1™2šq˜Ñ!ˆæØ�9ÐÜ vÑ.Ð.r*   )rµ   r¦   r¹   rº   r»   r¼   rF   r«   rª   r.   r¿   )é   é   é   é   é   rI   rú   r   rI   Tr�   rL   rL   ry   rj   )r\   r]   r^   r_   r`   r2   r¢   r‰   rz   rl   r4   ra   r,   rá   Útuplerî   rX   rw   rc   r{   r|   s   @r(   r¤   r¤   ä   s”  ø† ñ
ð Ø#&Ø)*Ø+-Ø)-ØØØØØØ %Ø%(Ø.1Ø ñ3Xàð3Xð !ð3Xð $'ð	3Xð
 &)ð3Xð $'ð3Xð ð3Xð ð3Xð ð3Xð ð3Xð ð3Xð ð3Xð #ð3Xð ',ð3Xð ÷3Xð 3XðjQ°5·<±<ð QÀEÇLÁLô Qð$	 E§L¡Lð 	°U·\±\ô 	ñ°%·,±,ð ÐUZÐ[^Ð`cÐ[cÑUdÐgkÑUkõ ðF */Ø$Ø ò$/à—|‘|ð$/ð #'ð	$/ð
 ð$/ð ð$/ð 
˜E %§,¡,Ñ/Ñ	/÷$/ó $/r*   r¤   c            *       ó<  ^ • \ rS rSrSrSrS/rS/r\                    S-S\	S\
S	\
S
\
S\
S\
S\
S\
S\
S\
S\
S-  S\
S\S-  S\S-  S\\-  \R                  -  S-  S\\-  \R                  -  S-  S\S\S\S\4(U 4S jjj5       rS.S\R                  S\R$                  S-  S\R                  4S jjrS\R                  S\R                  4S  jrS\R                  S\R                  4S! jrS"\R                  S\R                  4S# jrS"\R                  S\R                  4S$ jrS.S\R                  S\R$                  S-  S\R                  4S% jjr\ S/S\R                  S&\S\R$                  S-  S\\\R                     -  4S' jj5       rS"\R                  S\R                  4S( jr\S0S"\R                  S&\S\\\R                     -  4S) jj5       r S/S*\R                  S&\S\R$                  S-  S\\\R                     -  4S+ jjrS,r U =r!$ )1ÚAutoencoderRAEi‰  a"
  
Representation Autoencoder (RAE) model for encoding images to latents and decoding latents to images.

This model uses a frozen pretrained encoder (DINOv2, SigLIP2, or MAE) with a trainable ViT decoder to reconstruct
images from learned representations.

This model inherits from [`ModelMixin`]. Check the superclass documentation for its generic methods implemented for
all models (such as downloading or saving).

Args:
    encoder_type (`str`, *optional*, defaults to `"dinov2"`):
        Type of frozen encoder to use. One of `"dinov2"`, `"siglip2"`, or `"mae"`.
    encoder_hidden_size (`int`, *optional*, defaults to `768`):
        Hidden size of the encoder model.
    encoder_patch_size (`int`, *optional*, defaults to `14`):
        Patch size of the encoder model.
    encoder_num_hidden_layers (`int`, *optional*, defaults to `12`):
        Number of hidden layers in the encoder model.
    patch_size (`int`, *optional*, defaults to `16`):
        Decoder patch size (used for unpatchify and decoder head).
    encoder_input_size (`int`, *optional*, defaults to `224`):
        Input size expected by the encoder.
    image_size (`int`, *optional*):
        Decoder output image size. If `None`, it is derived from encoder token count and `patch_size` like
        RAE-main: `image_size = patch_size * sqrt(num_patches)`, where `num_patches = (encoder_input_size //
        encoder_patch_size) ** 2`.
    num_channels (`int`, *optional*, defaults to `3`):
        Number of input/output channels.
    encoder_norm_mean (`list`, *optional*, defaults to `[0.485, 0.456, 0.406]`):
        Channel-wise mean for encoder input normalization (ImageNet defaults).
    encoder_norm_std (`list`, *optional*, defaults to `[0.229, 0.224, 0.225]`):
        Channel-wise std for encoder input normalization (ImageNet defaults).
    latents_mean (`list` or `tuple`, *optional*):
        Optional mean for latent normalization. Tensor inputs are accepted and converted to config-serializable
        lists.
    latents_std (`list` or `tuple`, *optional*):
        Optional standard deviation for latent normalization. Tensor inputs are accepted and converted to
        config-serializable lists.
    noise_tau (`float`, *optional*, defaults to `0.0`):
        Noise level for training (adds noise to latents during training).
    reshape_to_2d (`bool`, *optional*, defaults to `True`):
        Whether to reshape latents to 2D (B, C, H, W) format.
    use_encoder_loss (`bool`, *optional*, defaults to `False`):
        Whether to use encoder hidden states in the loss (for advanced training).
Fr‹   zdecoder.decoder_pos_embedNr@   Úencoder_hidden_sizeÚencoder_patch_sizeÚencoder_num_hidden_layersr¦   r§   r¨   r©   r.   Úencoder_input_sizerF   r«   Úencoder_norm_meanÚencoder_norm_stdÚlatents_meanÚlatents_stdÚ	noise_tauÚreshape_to_2dÚuse_encoder_lossÚscaling_factorc                 óÔ  >^• [         TU ]  5         U[        ;  a,  [        SU S[	        [        R                  5       5       35      eS[        S[        4U4S jjmS[        R                  [        -  [        -  S -  S[        R                  S -  4S jnU" U5      nU R                  T" U5      T" U5      S9  X l        [        U5      U l        [        U5      U l        [        U5      U l        [%        U5      nU R                  U-  S:w  a  [        S	U R                   S
U S35      e[%        U	5      nUS::  a  [        S5      e['        UUUUS9U l        [        U   U l        U R                  U-  S-  n[%        [-        U5      5      nUU-  U:w  a  [        SU S35      eUU-  nUc  UnO)[%        U5      nUU:w  a  [        SU SU SU SU S3	5      eUc  / SQnUc  / SQn[        R.                  " U[        R0                  S9R3                  SSSS5      n[        R.                  " U[        R0                  S9R3                  SSSS5      nU R5                  SUSS9  U R5                  SUSS9  U" U5      nUc  [        R6                  " S5      nU R5                  SUSS9  Uc  [        R8                  " S5      nU R5                  SUSS9  [;        [%        U5      [%        U5      [%        U5      [%        U5      [%        U5      [%        U5      [%        U5      [%        U5      [%        U5      S 9	U l        [%        U5      U l        [%        U5      U l         [%        U5      U l!        S!U l"        g )"NrN   z'. Available: Úvaluer    c                 ój  >• [        U [        R                  5      (       a,  U R                  5       R	                  5       R                  5       $ [        U [        5      (       a  U  Vs/ s H  nT" U5      PM     sn$ [        U [        5      (       a  U  Vs/ s H  nT" U5      PM     sn$ U $ s  snf s  snf rj   )Ú
isinstancer4   ra   ÚdetachÚcpuÚtolistrü   Úlist)r  ÚvÚ_to_config_compatibles     €r(   r  Ú6AutoencoderRAE.__init__.<locals>._to_config_compatibleÜ  s�   ø€ Ü˜%¤§¡×.Ñ.Ø—|‘|“~×)Ñ)Ó+×2Ñ2Ó4Ð4Ü˜%¤×'Ñ'Ù:?Ó@º%°QÑ-¨aÖ0¹%Ñ@Ð@Ü˜%¤×&Ñ&Ù:?Ó@º%°QÑ-¨aÖ0¹%Ñ@Ð@ØˆLùò Aùâ@s   Á&B+ÂB0c                 óÊ   • U c  g [        U [        R                  5      (       a  U R                  5       R	                  5       $ [        R
                  " U [        R                  S9$ )N©r:   )r  r4   ra   r  ÚcloneÚtensorÚfloat32)r  s    r(   Ú_as_optional_tensorÚ4AutoencoderRAE.__init__.<locals>._as_optional_tensorå  sE   € Ø‰}ØÜ˜%¤§¡×.Ñ.Ø—|‘|“~×+Ñ+Ó-Ð-Ü—<’< ¬U¯]©]Ñ;Ð;r*   )r  r  r   zencoder_input_size=z) must be divisible by encoder_patch_size=Ú.zCpatch_size must be a positive integer (this is decoder_patch_size).)r@   rA   r.   rB   r   zComputed num_patches=z must be a perfect square.zimage_size=z1 must equal decoder_patch_size*sqrt(num_patches)=z for patch_size=z and computed num_patches=)g
×£p=
ß?gÉv¾Ÿ/Ý?g–C‹lçûÙ?)gZd;ßOÍ?gyé&1¬Ì?gÍÌÌÌÌÌÌ?r  r   r   Úencoder_meanTr³   Úencoder_stdÚ_latents_meanÚ_latents_std)	rA   r¦   r§   r¨   r©   rª   r.   r«   rF   F)#rk   rl   Ú_ENCODER_FORWARD_FNSr3   ÚsortedÚkeysr   r4   ra   r  rü   r   r  r‰   r  r¢   r  r	  r2   rV   ÚencoderÚ_encoder_forward_fnr   r  r  rÐ   r¶   r¾   Úonesr¤   Údecoderrª   Údecoder_patch_sizeÚdecoder_image_sizeÚuse_slicing) rq   r@   rÿ   r   r  r¦   r§   r¨   r©   r.   r  rF   r«   r  r  r  r  r  r  r	  r
  r  Úlatents_std_tensorr)  rª   ÚgridÚderived_image_sizeÚencoder_mean_tensorÚencoder_std_tensorÚlatents_mean_tensorr  rr   s                                  @€r(   rl   ÚAutoencoderRAE.__init__½  s´  ù€ ô0 	‰ÑÔàÔ3Ó3ÜØ(¨¨°nÄVÔL`×LeÑLeÓLgÓEhÐDiÐjóð ð	¬ð 	´÷ 	ð	<¤u§|¡|´dÑ':¼UÑ'BÀTÑ'Ið 	<ÌeÏlÉlÐ]aÑNaô 	<ñ 1°Ó=Ðð 	×ÑÙ.¨|Ó<Ù-¨kÓ:ð 	 ñ 	
ð
 #5ÔÜ˜yÓ)ˆŒÜ! -Ó0ˆÔÜ $Ð%5Ó 6ˆÔô !Ð!3Ó4ÐØ×"Ñ"Ð%7Ñ7¸1Ó<ÜØ% d×&=Ñ&=Ð%>Ð>gÐhzÐg{Ð{|Ð}óð ô ! ›_ÐØ Ó"ÜÐbÓcÐcô #1Ø%Ø+Ø)Ø7ñ	#
ˆŒô $8¸Ñ#EˆÔ Ø×.Ñ.Ð2DÑDÈÑJˆä”4˜Ó$Ó%ˆØ�$‰;˜+Ó%ÜÐ4°[°MÐA[Ð\Ó]Ð]à/°$Ñ6ÐØÑØ+‰Jä˜Z›ˆJØÐ/Ó/Ü Ø! * Ð-^Ð_qÐ^rð s&Ø&8Ð%9Ð9SÐT_ÐS`Ð`aðcóð ð Ñ$Ú 5ÐØÑ#Ú4ÐÜ#ŸlšlÐ+<ÄEÇMÁMÑR×WÑWÐXYÐ[\Ð^_ÐabÓcÐÜ"Ÿ\š\Ð*:Ä%Ç-Á-ÑP×UÑUÐVWÐYZÐ\]Ð_`ÓaÐà×Ñ˜^Ð-@ÈTÐÑRØ×Ñ˜]Ð,>È4ÐÑPñ 2°,Ó?ÐØÑ&Ü"'§+¢+¨a£.ÐØ×Ñ˜_Ð.AÈdÐÑSàÑ%Ü!&§¢¨A£ÐØ×Ñ˜^Ð-?ÈDÐÑQô "ÜÐ/Ó0Ü #Ð$7Ó 8Ü&)Ð*CÓ&DÜ(+Ð,GÓ(HÜ&)Ð*CÓ&DÜ˜KÓ(ÜÐ-Ó.Ü˜\Ó*Ü˜:“ñ

ˆŒô ˜{Ó+ˆÔÜ"%Ð&8Ó"9ˆÔÜ"% j£/ˆÔð !ˆÕr*   r×   Ú	generatorr    c           	      ó  • U R                   [        R                  " UR                  S5      4SUR                  S-
  -  -   UR
                  UR                  US9-  nX[        UR                  X!R
                  UR                  S9-  -   $ )Nr   )r   r   )r9   r:   r3  )r3  r9   r:   )	r  r4   ÚrandrÛ   Úndimr9   r:   r   r1   )rq   r×   r3  Únoise_sigmas       r(   Ú_noisingÚAutoencoderRAE._noisingD  ss   € à—n‘n¤u§z¢zØ�V‰V�A‹YˆL˜4 1§6¡6¨A¡:Ñ.Ñ.°q·x±xÀqÇwÁwÐZcñ(
ñ 
ˆð ¤¨a¯g©gÀ×S[ÑS[Ðcd×cjÑcjÑ!kÑkÑkÐkr*   c                 ó|  • UR                   u    p#nX0R                  :w  d  X@R                  :w  a,  [        R                  " XR                  U R                  4SSS9nU R                  R                  UR                  UR                  S9nU R                  R                  UR                  UR                  S9nX-
  U-  $ )NrÆ   FrÚ   ró   )	r1   r  rÎ   rÏ   r  r8   r9   r:   r  )rq   r×   rÂ   r;   r<   ÚmeanÚstds          r(   Ú_resize_and_normalizeÚ$AutoencoderRAE._resize_and_normalizeK  s¥   € Ø—W‘W‰
ˆˆ1�Ø×'Ñ'Ó'¨1×0GÑ0GÓ+GÜ—’Ø×0Ñ0°$×2IÑ2IÐJÐQZÐjoñˆAð × Ñ ×#Ñ#¨1¯8©8¸1¿7¹7Ð#ÐCˆØ×Ñ×!Ñ!¨¯©¸¿¹Ð!ÐAˆØ‘˜CÑÐr*   c                 óÈ   • U R                   R                  UR                  UR                  S9nU R                  R                  UR                  UR                  S9nX-  U-   $ )Nró   )r  r8   r9   r:   r  )rq   r×   r;  r<  s       r(   Ú_denormalize_imageÚ!AutoencoderRAE._denormalize_imageU  sT   € Ø× Ñ ×#Ñ#¨1¯8©8¸1¿7¹7Ð#ÐCˆØ×Ñ×!Ñ!¨¯©¸¿¹Ð!ÐAˆØ‰w˜‰~Ðr*   Úzc                 óÎ   • U R                   R                  UR                  UR                  S9nU R                  R                  UR                  UR                  S9nX-
  US-   -  $ ©Nró   gñhãˆµøä>©r   r8   r9   r:   r!  ©rq   rB  r  r  s       r(   Ú_normalize_latentsÚ!AutoencoderRAE._normalize_latentsZ  s[   € Ø×)Ñ)×,Ñ,°A·H±HÀAÇGÁGÐ,ÐLˆØ×'Ñ'×*Ñ*°!·(±(À!Ç'Á'Ð*ÐJˆØÑ  [°4Ñ%7Ñ8Ð8r*   c                 óÎ   • U R                   R                  UR                  UR                  S9nU R                  R                  UR                  UR                  S9nXS-   -  U-   $ rD  rE  rF  s       r(   Ú_denormalize_latentsÚ#AutoencoderRAE._denormalize_latents_  s[   € Ø×)Ñ)×,Ñ,°A·H±HÀAÇGÁGÐ,ÐLˆØ×'Ñ'×*Ñ*°!·(±(À!Ç'Á'Ð*ÐJˆØ $Ñ&Ñ'¨,Ñ6Ð6r*   c                 óØ  • U R                  U5      nU R                  R                  S:X  a1  U R                  U R                  XR                  R
                  5      nOU R                  U R                  U5      nU R                  (       a  U R                  S:”  a  U R                  X2S9nU R                  (       ak  UR                  u  pEn[        [        U5      5      nXw-  U:w  a  [        SU S35      eUR                  SS5      R                  5       R!                  XFXw5      nOUnU R#                  U5      nU R                  R$                  S:w  a  X€R                  R$                  -  nU$ )	NrJ   r   ©r3  zToken length n=z/ is not a perfect square; cannot reshape to 2D.r   r   ç      ð?)r=  rU   r@   r&  r%  r   Útrainingr  r8  r  r1   r2   r   r3   Ú	transposerÜ   rÐ   rG  r
  )	rq   r×   r3  ÚtokensrÝ   Únrß   ÚsiderB  s	            r(   Ú_encodeÚAutoencoderRAE._encoded  s&  € Ø×&Ñ& qÓ)ˆà�;‰;×#Ñ# uÓ,Ø×-Ñ-¨d¯l©l¸A¿{¹{×?]Ñ?]Ó^‰Fà×-Ñ-¨d¯l©l¸AÓ>ˆFà�=�=˜TŸ^™^¨aÓ/Ø—]‘] 6�]Ð?ˆFà××Ø—l‘l‰GˆA�!Ü”t˜A“w“<ˆDØ‰{˜aÓÜ  ?°1°#Ð5dÐ!eÓfÐfØ× Ñ   AÓ&×1Ñ1Ó3×8Ñ8¸¸tÓJ‰AàˆAà×#Ñ# AÓ&ˆð �;‰;×%Ñ%¨Ó,Ø—K‘K×.Ñ.Ñ.ˆAàˆr*   rñ   c           
      ó  • U R                   (       aU  UR                  S   S:”  aB  [        R                  " UR	                  S5       Vs/ s H  o@R                  XCS9PM     snSS9nOU R                  XS9nU(       d  U4$ [        US9$ s  snf )Nr   r   rM  rÊ   )Úlatent)r+  r1   r4   rÑ   ÚsplitrT  r   )rq   r×   rñ   r3  Úx_sliceÚlatentss         r(   ÚencodeÚAutoencoderRAE.encode€  s€   € ð ×× §¡¨¡
¨Q£Ü—i’iÐ[\×[bÑ[bÐcdÔ[eÓ fÒ[eÐPW§¡¨g Ó!KÑ[eÑ fÐlmÑn‰Gà—l‘l 1�lÐ:ˆGæØ�:ÐÜ GÑ,Ð,ùò !gs   ÁB	c                 óð  • U R                   R                  S:w  a  XR                   R                  -  nU R                  U5      nU R                  (       aB  UR                  u  p#pEUR                  X#XE-  5      R                  SS5      R                  5       nOUnU R                  USS9R                  nU R                  R                  U5      nU R                  U5      nUR                  UR                  S9$ )NrN  r   r   T©rñ   )r9   )rU   r
  rJ  r  r1   rÐ   rP  rÜ   r(  rZ   rî   r@  r8   r9   )	rq   rB  rÝ   rß   r;   r<   rQ  rZ   Úx_recs	            r(   Ú_decodeÚAutoencoderRAE._decode�  sÊ   € à�;‰;×%Ñ%¨Ó,Ø—K‘K×.Ñ.Ñ.ˆAà×%Ñ% aÓ(ˆà××ØŸ™‰JˆA�!Ø—V‘V˜A !¡%Ó(×2Ñ2°1°aÓ8×CÑCÓE‰FàˆFà—‘˜f°$�Ð7×>Ñ>ˆØ—‘×'Ñ'¨Ó/ˆØ×'Ñ'¨Ó.ˆØ�x‰x˜qŸx™xˆxÐ(Ð(r*   c                 ó$  • U R                   (       aW  UR                  S   S:”  aD  [        R                  " UR	                  S5       Vs/ s H  o0R                  U5      PM     snSS9nOU R                  U5      nU(       d  U4$ [        US9$ s  snf )Nr   r   rÊ   ©Úsample)r+  r1   r4   rÑ   rX  r`  r   )rq   rB  rñ   Úz_sliceÚdecodeds        r(   ÚdecodeÚAutoencoderRAE.decodeŸ  sq   € à×× §¡¨¡
¨Q£Ü—i’iÀaÇgÁgÈaÄjÓ QÂj¸7§¡¨gÖ!6ÁjÑ QÐWXÑY‰Gà—l‘l 1“oˆGæØ�:ÐÜ GÑ,Ð,ùò !Rs   ÁBrd  c                 óv   • U R                  USUS9S   nU R                  USS9S   nU(       d  U4$ [        US9$ )a  
Args:
    sample (`torch.Tensor`): Input sample.
    return_dict (`bool`, *optional*, defaults to `True`):
        Whether or not to return a [`DecoderOutput`] instead of a plain tuple.
    generator (`torch.Generator`, *optional*):
        A [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) to make sampling
        deterministic.

Returns:
    [`DecoderOutput`] or `tuple`:
        If `return_dict` is True, a [`DecoderOutput`] is returned, otherwise a plain `tuple` is returned.
F)rñ   r3  r   r^  rc  )r[  rg  r   )rq   rd  rñ   r3  rZ  rf  s         r(   rw   ÚAutoencoderRAE.forwardª  sJ   € ð  —+‘+˜f°%À9�+ÐMÈaÑPˆØ—+‘+˜g°5�+Ð9¸!Ñ<ˆÞØ�:ÐÜ GÑ,Ð,r*   )r&  r(  r*  r)  r%  r  r  rª   r  r	  r+  )rE   r÷   é   é   rø   rù   rú   rû   rú   rK   Nr   NNNNrL   TFrN  rj   )TN)T)"r\   r]   r^   r_   r`   Ú _supports_gradient_checkpointingÚ_no_split_modulesÚ"_keys_to_ignore_on_load_unexpectedr   rz   r2   r  rü   r4   ra   r‰   r¢   rl   Ú	Generatorr8  r=  r@  rG  rJ  rT  r   r   r[  r`  r   rg  rw   rc   r{   r|   s   @r(   rþ   rþ   ‰  sE  ø† ñ,ð^ (-Ð$Ø&˜ÐØ*EÐ)FÐ&àð %Ø#&Ø"$Ø)+Ø#&Ø)*Ø+-Ø)-ØØ"%Ø!%ØØ)-Ø(,Ø;?Ø:>ØØ"Ø!&Ø #ñ+D!àðD!ð !ðD!ð  ð	D!ð
 $'ðD!ð !ðD!ð $'ðD!ð &)ðD!ð $'ðD!ð ðD!ð  ðD!ð ˜$‘JðD!ð ðD!ð   $™;ðD!ð  ™+ðD!ð  ˜U‘l U§\¡\Ñ1°DÑ8ð!D!ð" ˜E‘\ E§L¡LÑ0°4Ñ7ð#D!ð$ ð%D!ð& ð'D!ð( ð)D!ð* ÷+D!ó ðD!ñLl˜%Ÿ,™,ð l°5·?±?ÀTÑ3Ið lÐUZ×UaÑUaõ lð  u§|¡|ð  ¸¿¹ô  ð E§L¡Lð °U·\±\ô ð
9 E§L¡Lð 9°U·\±\ô 9ð
7 e§l¡lð 7°u·|±|ô 7ñ
˜Ÿ™ð °%·/±/ÀDÑ2Hð ÐTY×T`ÑT`õ ð8 à]añ
-Ø—‘ð
-Ø,0ð
-ØDIÇOÁOÐVZÑDZð
-à	˜˜uŸ|™|Ñ,Ñ	,ô
-ó ð
-ð)˜Ÿ™ð )¨%¯,©,ô )ð$ ñ-˜Ÿ™ð -°4ð -À=ÐSXÐY^×YeÑYeÑSfÑCfô -ó ð-ð cgñ-Ø—l‘lð-Ø15ð-ØINÏÉÐ[_ÑI_ð-à	˜˜uŸ|™|Ñ,Ñ	,÷-ó -r*   rþ   )é@   )?Údataclassesr   Úmathr   Útypingr   r4   Útorch.nnrm   Útorch.nn.functionalÚ
functionalrÎ   Úconfiguration_utilsr   r   Úutilsr	   r
   Úutils.accelerate_utilsr   Úutils.import_utilsr   Úutils.torch_utilsr   Útransformersr   r   r   r   r   r   Úactivationsr   r—   r   Úattention_processorr   rÄ   r   Úmodeling_utilsr   Úvaer   r   r   Ú
get_loggerr\   ÚloggerÚModulera   r)   r-   r2   r?   rz   rV   r"  rX   re   r~   r‹   r¤   rþ   r[   r*   r(   Ú<module>r…     s­  ðõ "Ý Ý ã Ý ß Ð ç Bß (Ý 8Ý ;Ý -ñ ×Ñ÷÷ õ )Ý &Ý +Ý 0Ý 'ß ?Ñ ?ð 
×	Ò	˜HÓ	%€ð; 2§9¡9ð ;°e·l±lð ;ÀuÇ|Á|ô ;ð% B§I¡Ið %°u·|±|ð %ÈÏÉô %ð
, §	¡	ð ,°5·<±<ð ,ÈSð ,ÐUZ×UaÑUaô ,ð  ceñ0Øð0Ø$'ð0Ø58ð0ØMPð0Ø\_ð0à‡Y�Yõ0ðh &Ø'ØñÐ ð ô	�zó 	ó ð	ô	˜Ÿ™ô 	ô
�2—9‘9ô 
ô-�"—)‘)ô -ô`b/�—‘ô b/ôJu-�Z Ð1AÀ;õ u-r*   