ó
    <Ð˜j¿  ã                  óª   • S SK Jr  S SKJrJrJr  S SKrS SKJr  S SKJ	r
  S SKJr  S r " S S	\R                  5      r " S
 S\R                  5      rg)é    )Úannotations)ÚListÚOptionalÚSequenceN)Únn)Ú
functional)ÚVectorQuantizec                ó
   • U S L$ )N© )Úvs    ÚµC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\vector_quantize_pytorch/hierarchical_vq.pyÚexistsr      s   € Ø�Dˆ=Ðó    c                  ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )Ú_Phi2Dé   c                óŠ   >• [         TU ]  5         [        [        U5      5      U l        [
        R                  " XSSS9U l        g )Né   é   )Úpadding)ÚsuperÚ__init__ÚfloatÚabsÚ
resi_ratior   ÚConv2dÚconv)ÚselfÚdimr   Ú	__class__s      €r   r   Ú_Phi2D.__init__   s2   ø€ Ü‰ÑÔÜ¤ J£Ó0ˆŒÜ—I’I˜c¨°QÑ7ˆ�	r   c                óˆ   • U R                   S::  a  U$ SU R                   -
  U-  U R                   U R                  U5      -  -   $ )Ng:Œ0âŽyE>ç      ð?)r   r   )r   Úxs     r   ÚforwardÚ_Phi2D.forward   s=   € Ø�?‰?˜dÓ"ØˆHØ�T—_‘_Ñ$¨Ñ)¨D¯O©O¸d¿i¹iÈ»lÑ,JÑJÐJr   )r   r   )r   Úintr   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r%   Ú__static_attributes__Ú__classcell__©r    s   @r   r   r      s   ø† ÷8÷
Kð Kr   r   c                  ó¸   ^ • \ rS rSrSSSSSSSSS	S
SSSSS.                                 SU 4S jjjrSS jrSS jr  SS jrS rSr	U =r
$ )ÚHierarchicalVQé   g®Gáz®ï?r#   FTé
   é   gš™™™™™¹?g        é€   g      à?r   )ÚdecayÚcommitment_weightÚrotation_trickÚkmeans_initÚkmeans_itersÚthreshold_ema_dead_codeÚstochastic_sample_codesÚsample_codebook_tempÚorthogonal_reg_weightÚorthogonal_reg_max_codesÚ orthogonal_reg_active_codes_onlyÚ
quant_resiÚshare_quant_resiÚaccept_image_fmapc               óº  >• [         TU ]  5         U(       d   S5       eU Vs/ s H  n[        U5      PM     nn[        U5      S:”  d   eU[	        U5      :X  d   e[        S U 5       5      (       d   eXl        [        U5      U l        SU l	        [        UUUUUUUU	U
UUUUSS9U l        US:X  a  [        X5      U l        S U l        g US::  a  [        U R                  5      O'[        [        U R                  5      [        U5      5      nS U l        [         R"                  " [%        U5       Vs/ s H  n[        X5      PM     sn5      U l        g s  snf s  snf )Nz9HierarchicalVQ currently expects accept_image_fmap = Truer   c              3  ó*   #   • U  H	  oS :„  v •  M     g7f)r   Nr   )Ú.0Úscales     r   Ú	<genexpr>Ú*HierarchicalVQ.__init__.<locals>.<genexpr>8   s   é € Ð1ª& ˜1–9ª&ùs   ‚T)r   Úcodebook_sizer5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   rB   r   )r   r   r'   ÚlenÚsortedÚallr   ÚtupleÚscalesrB   r	   Úvqr   Ú
phi_sharedÚ
phi_levelsÚminr   Ú
ModuleListÚrange)r   r   rI   rN   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rF   Únum_phi_levelsÚ_r    s                        €r   r   ÚHierarchicalVQ.__init__   sM  ø€ ô* 	‰ÑÔÞ Ð]Ð"]Ó]Ð á*0Ó1ª& ”#�e–*©&ˆÐ1Ü�6‹{˜Q‹ÐˆØœ ›Ó'Ð'Ð'ÜÑ1©&Ó1×1Ñ1Ð1Ð1àŒÜ˜F“mˆŒØ!%ˆÔä ØØ)ØØ 1Ø+Ø%Ø'Ø&=Ø&=Ø#7Ø$9Ø'?Ø/OØ $ñ
ˆŒð" ˜qÓ Ü$ SÓ5ˆDŒOØ"ˆD�Oà1AÀQÓ1FœS §¡Ô-ÌCÔPSÐTX×T_ÑT_ÓP`ÔbeÐfvÓbwÓLxˆNØ"ˆDŒOÜ ŸmšmÌeÐTbÔNcÓ,dÒNcÈ¬V°CÖ-DÑNcÑ,dÓeˆD�OùòA 2ùò@ -es   ¢EÄ1Ec                óR  • [        U R                  5      (       a  U R                  $ [        U R                  5      (       d   e[        U R                  5      [        U R                  5      :X  a  U R                  U   $ [        U R                  5      S:X  a  U R                  S   $ U[        [        U R                  5      S-
  5      -  n[        U[        U R                  5      S-
  -  5      n[        S[        [        U R                  5      S-
  U5      5      nU R                  U   $ )Nr   r   )	r   rP   rQ   rJ   rN   r   ÚroundÚmaxrR   )r   Úscale_indexÚpositionÚ	phi_indexs       r   Ú_choose_phiÚHierarchicalVQ._choose_phiW   sã   € Ü�$—/‘/×"Ñ"Ø—?‘?Ð"ä�d—o‘o×&Ñ&Ð&Ð&äˆt�‰Ó¤3 t§{¡{Ó#3Ó3Ø—?‘? ;Ñ/Ð/äˆt�{‰{Ó˜qÓ Ø—?‘? 1Ñ%Ð%à¤¤s¨4¯;©;Ó'7¸!Ñ';Ó!<Ñ<ˆÜ˜(¤c¨$¯/©/Ó&:¸QÑ&>Ñ?Ó@ˆ	Ü˜œ3œs 4§?¡?Ó3°aÑ7¸ÓCÓDˆ	Ø�‰˜yÑ)Ð)r   c                óª   • UR                   SS  U:w  a  [        R                  " XSSS9nU R                  U5      n[	        U5      (       a  U" U5      nU$ )NéþÿÿÿÚbilinearF)ÚsizeÚmodeÚalign_corners)ÚshapeÚFÚinterpolater^   r   )r   ÚqÚfull_hwr[   Úphis        r   Ú_upsample_to_fullÚ HierarchicalVQ._upsample_to_fullh   sN   € Ø�7‰7�2�3ˆ<˜7Ó"Ü—’˜a¸
ÐTYÑZˆAà×Ñ˜{Ó+ˆÜ�#�;‰;Ù�A“ˆAàˆr   c                óz  • Ub   S5       eAUR                   S:X  d   S5       eUR                  u  pVpxX`R                  :X  d   eUn	[        R                  " U5      n
/ n/ n[        U R                  5       H“  u  pÞ[        R                  " XžU4S9n0 n[        U5      (       a  UR                  US9  U R                  " U40 UD6u  nnnU R                  UXx4U5      nU
U-   n
U	U-
  n	UR                  U5        UR                  U5        M•     [        R                  " U5      R                  5       nU
[!        U5      U4$ )Nz;reconstruction-from-indices path not implemented in forwardé   z=expected image fmap of shape (batch, channels, height, width))Úoutput_size)r<   )Úndimrf   r   ÚtorchÚ
zeros_likeÚ	enumeraterN   rg   Úadaptive_avg_pool2dr   ÚupdaterO   rl   ÚappendÚstackÚmeanrM   )r   r$   Úindicesr<   ÚkwargsÚbatchr   ÚheightÚwidthÚresidualÚreconstructionÚall_indicesÚall_commit_lossesr[   rF   Úresidual_downÚ	vq_kwargsÚ	quantizedÚscale_indicesÚcommit_lossÚmean_commit_losss                        r   r%   ÚHierarchicalVQ.forwardr   sE  € ð ‰Ð]Ð ]Ó]ˆØà�v‰v˜‹{Ð[Ð[Ó[ˆ{Ø$%§G¡GÑ!ˆ�FØ—h‘h‹ÐˆàˆÜ×)Ò)¨!Ó,ˆØˆØÐä"+¨D¯K©KÖ"8ÑˆKÜ×1Ò1°(ÐRWÈ.ÑYˆMàˆIÜÐ*×+Ñ+Ø× Ñ Ð8LÐ ÑMà48·G²G¸MÑ4WÈYÑ4WÑ1ˆI�} kØ×.Ñ.¨y¸6¸/È;ÓWˆIà+¨iÑ7ˆNØ )Ñ+ˆHà×Ñ˜}Ô-Ø×$Ñ$ [Ö1ñ #9ô  !Ÿ;š;Ð'8Ó9×>Ñ>Ó@ÐØœu [Ó1Ð3CÐCÐCr   c                óò  • [        U[        [        45      (       d   e[        U5      [        U R                  5      :X  d   eUS   nUR
                  S:X  d   eUR                  u  p4nU R                  S   U R                  S   4nXE4U:w  a  U R                  S   U R                  S   4nS n[        U5       H;  u  p‰U R                  R                  U	5      n
U R                  X¦U5      n
Uc  U
OXz-   nM=     U$ )Nr   r   éÿÿÿÿ)Ú
isinstancerM   ÚlistrJ   rN   rq   rf   rt   rO   Úget_output_from_indicesrl   )r   rz   Úfirstr|   r}   r~   rj   Úreconstructedr[   r†   ri   s              r   rŽ   Ú&HierarchicalVQ.get_output_from_indices˜   sí   € Ü˜'¤E¬4 =×1Ñ1Ð1Ð1Ü�7‹|œs 4§;¡;Ó/Ó/Ð/Ð/à˜‘
ˆØ�z‰z˜Q‹ÐˆØ$Ÿ{™{Ñˆ�uØ—;‘;˜r‘? D§K¡K°¡OÐ4ˆØˆ?˜gÓ%Ø—{‘{ 2‘¨¯©°B©Ð8ˆGàˆä*3°GÖ*<Ñ&ˆKØ—‘×/Ñ/°Ó>ˆAØ×&Ñ& q°;Ó?ˆAØ!.Ñ!6™A¸MÑ<MŠMñ +=ð
 Ðr   )rB   r   rQ   rP   rN   rO   )"r   r'   rI   r'   rN   zSequence[int]r5   r   r6   r   r7   Úboolr8   r’   r9   r'   r:   r'   r;   r’   r<   r   r=   r   r>   r'   r?   r’   r@   r   rA   r'   rB   r’   )r[   r'   )NN)r(   r)   r*   r+   r   r^   rl   r%   rŽ   r,   r-   r.   s   @r   r0   r0      s  ø† ð Ø#%Ø$Ø ØØ'(Ø(-Ø&)Ø')Ø(+Ø16ØØ !Ø"'ñ'8fð ð8fð ð	8fð
 ð8fð ð8fð !ð8fð ð8fð ð8fð ð8fð "%ð8fð "&ð8fð $ð8fð  %ð8fð #&ð8fð  +/ð!8fð" ð#8fð$ ð%8fð&  ÷'8fð 8fôt*ô"ð Ø#ô	$D÷Lð r   r0   )Ú
__future__r   Útypingr   r   r   rr   r   Útorch.nnr   rg   Ú/vector_quantize_pytorch.vector_quantize_pytorchr	   r   ÚModuler   r0   r   r   r   Ú<module>r˜      sC   ðÝ "ç +Ñ +ã Ý Ý $å Jòô	KˆR�Y‰Yô 	KôN�R—Y‘Yõ Nr   