ó
    <Ð˜j!  ã                  óÈ  • S SK Jr  S SKJr  S SKrS SKJr  S SKJr  S SKJs  J	r
  S SKJr  S SKJrJrJr  S SKJr  S	 rS
 rS rS r " S S\5      r\S:X  aŠ  \R2                  " SSSS5      r\" S\R6                  " \R8                  " SS5      \R:                  " 5       \R8                  " SS5      5      SSS9r\" \5      u  rr r!\RD                  \RD                  :X  d   egg)é    )Úannotations)ÚCallableN)Únn)ÚModule)Úget_at)Ú	rearrangeÚpackÚunpack)Ú	rotate_toc                ó
   • 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/sim_vq.pyÚexistsr      s   € Ø�Dˆ=Ðó    c                ó   • U $ r   r   )Úts    r   Úidentityr      s   € Ø€Hr   c                ó*   • [        U 5      (       a  U $ U$ r   )r   )r   Úds     r   Údefaultr      s   € Ü�q—	‘	ˆ1Ð ˜qÐ r   c                ó>   ^^• [        U /T5      u  nmSUU4S jjnX#4$ )Nc                ó>   >• [        UT5      n[        U TU5      u  n U $ r   )r   r
   )ÚoutÚinv_patternÚpacked_shapeÚpatterns     €€r   ÚinverseÚpack_one.<locals>.inverse   s$   ø€ Ü˜k¨7Ó3ˆÜ�c˜<¨Ó5‰ˆØˆ
r   r   )r	   )r   r   Úpackedr   r   s    `  @r   Úpack_oner"      s*   ù€ Ü   WÓ-Ñ€FˆL÷ð ð
 ˆ?Ðr   c                  ó`   ^ • \ rS rSrS\SSSSS4   SU 4S jjjr\S 5       rS	 rS
 r	Sr
U =r$ )ÚSimVQé%   NFTg      Ð?g      ð?c
                ó6  >• [         TU ]  5         X l        XPl        [	        X‘5      n	[
        R                  " X)5      U	S-  -  n
U" U
5      n
[        U5      (       d  [        R                  " X‘SS9nX0l
        U R                  SU
5        X`l        Xpl        X€l        g )Ng      à¿F)ÚbiasÚfrozen_codebook)ÚsuperÚ__init__Úcodebook_sizeÚchannel_firstr   ÚtorchÚrandnr   r   ÚLinearÚcode_transformÚregister_bufferÚrotation_trickÚ$input_to_quantize_commit_loss_weightÚcommitment_weight)ÚselfÚdimr+   Úcodebook_transformÚinit_fnr,   r2   r3   r4   Úfrozen_codebook_dimÚcodebookÚ	__class__s              €r   r*   ÚSimVQ.__init__&   sœ   ø€ ô 	‰ÑÔØ*ÔØ*Ôä%Ð&9Ó?ÐÜ—;’;˜}ÓBÐFYÐ]aÑFaÑbˆÙ˜8Ó$ˆô
 Ð(×)Ñ)Ü!#§¢Ð+>ÈEÑ!RÐà0Ôà×ÑÐ.°Ô9ð -Ôð 5YÔ1ð "3Õr   c                ó8   • U R                  U R                  5      $ r   )r0   r(   )r5   s    r   r:   ÚSimVQ.codebookR   s   € à×"Ñ" 4×#7Ñ#7Ó8Ð8r   c                ó¨   • U R                   n[        SU R                  U5      nU R                  U5      nU R                  (       a  [        US5      nU$ )Nz[c] d, b ... -> b ... dzb ... d -> b d ...)r:   r   r(   r0   r,   r   )r5   ÚindicesÚimplicit_codebookÚfrozen_codesÚ	quantizeds        r   Úindices_to_codesÚSimVQ.indices_to_codesV   sO   € ð !ŸM™MÐäÐ7¸×9MÑ9MÈwÓWˆØ×'Ñ'¨Ó5ˆ	à××Ü! )Ð-AÓBˆIàÐr   c                óÀ  • U R                   (       a  [        US5      n[        US5      u  pU R                  n[        R
                  " 5          [        R                  " X5      nUR                  SS9nS S S 5        [        SUW5      n[        R                  " UR                  5       U5      [        R                  " XR                  5       5      U R                  -  -   nU R                  (       a  [        X5      nOXa-
  R                  5       U-   nU" U5      nU" US5      nU R                   (       a  [        US5      nXeXpR                  -  4$ ! , (       d  f       Nâ= f)Nzb d ... -> b ... dzb * déÿÿÿÿ)r6   z[c] d, b n -> b n dzb *zb ... d-> b d ...)r,   r   r"   r:   r-   Úno_gradÚcdistÚargminr   ÚFÚmse_lossÚdetachr3   r2   r   r4   )r5   ÚxÚinverse_packrA   Údistr@   rC   Úcommit_losss           r   ÚforwardÚSimVQ.forwardd   s#  € ð ××Ü˜!Ð1Ó2ˆAä" 1 gÓ.‰ˆà ŸM™MÐä�]Š]�_Ü—;’;˜qÓ4ˆDØ—k‘k¨�kÐ+ˆG÷ ô Ð0Ð2CÀWÓMˆ	ô
 �JŠJ�q—x‘x“z 9Ó-Ü�JŠJ�q×*Ñ*Ó,Ó-°×0YÑ0YÑYñZð 	ð
 ××ä! !Ó/‰Ià"™×.Ñ.Ó0°1Ñ4ˆIá  Ó+ˆ	Ù˜w¨Ó.ˆà××Ü! )Ð-@ÓAˆIà ;×1GÑ1GÑ#GÐGÐG÷7 �_ús   Á&EÅ
E)r,   r0   r+   r4   r3   r2   )r7   zModule | Noner8   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r*   Úpropertyr:   rD   rR   Ú__static_attributes__Ú__classcell__)r;   s   @r   r$   r$   %   s^   ø† ð
 -1Ø$ØØØ/3ØØ"ð*3ð *ð	*3ð
 ÷*3ð *3ðX ñ9ó ð9ò÷&Hð &Hr   r$   Ú__main__é   i   é    i   T)r6   r7   r+   r,   )#Ú
__future__r   Útypingr   r-   r   Útorch.nnr   Útorch.nn.functionalÚ
functionalrK   Úeinxr   Úeinopsr   r	   r
   Ú/vector_quantize_pytorch.vector_quantize_pytorchr   r   r   r   r"   r$   rT   r.   rN   Ú
Sequentialr/   ÚReLUÚsim_vqrC   r@   rQ   Úshaper   r   r   Ú<module>rj      sÜ   ðÝ "Ý ã Ý Ý ß Ð å ß *Ñ *å Eòòò!òôeHˆFô eHðR ˆzÓà�Š�A�s˜B Ó#€AáØØŸ]š]Ø�IŠI�c˜4Ó Ø�GŠG‹IØ�IŠI�d˜CÓ ó
ð
 Øñ	€Fñ '-¨Q£iÑ#€Iˆw˜à�7‰7�i—o‘oÓ%Ð%Ñ%ð# r   