ó
    <Ð˜j4  ã                  ó‚  • S SK Jr  S SKJr  S SKrS SKJrJrJr  S SKJs  J	r
  S SKJr  S SKJrJrJr  \" S5      rS rS	 rS
 rS r " S S\5      r\S:X  aç  \" SS9r\R2                  " SSS5      r\" \SSS9u  rrr\R<                  S:X  d   e\R<                  S:X  d   e\R<                  S:X  d   e\R?                  \\S9r \ R<                  S:X  d   e\R?                  \\S9r!\RD                  " \ \!5      (       d   e\RG                  5         \" \SS9u  r$r%\" \SS9u  r&r%\RD                  " \$\&5      (       d   egg)é    )Úannotations)ÚlogN)ÚnnÚtensorÚarange)ÚModule)ÚeinsumÚpackÚunpacké   c                ó
   • 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/binary_mapper.pyÚexistsr      s   € Ø�Dˆ=Ðó    c                ó*   • [        U 5      (       a  U $ U$ r   )r   )r   Úds     r   Údefaultr      s   € Ü�q—	‘	ˆ1Ð ˜qÐ r   c                ó°   • U R                  5       nSU-
  nU[        R                  " U 5      -  U[        R                  " U * 5      -  -   R                  SS9* $ )Nç      ð?éÿÿÿÿ©Údim)ÚsigmoidÚFÚ
logsigmoidÚsum)ÚlogitsÚprobÚnot_probs      r   Úbinary_entropyr#      sR   € Ø�>‰>Ó€DØ�D‰y€HØ”A—L’L Ó(Ñ(¨8´a·l²lÀFÀ7Ó6KÑ+KÑK×PÑPÐWYÐPÐZÐZÐZr   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ÚunpackedÚpatternÚpss      €€r   ÚinverseÚ"pack_with_inverse.<locals>.inverse$   s$   ø€ Ü˜k¨7Ó3ˆÜ˜3  KÓ0‰	ˆØˆr   r   )r
   )Útr)   Úpackedr+   r*   s    `  @r   Úpack_with_inverser/   !   s)   ù€ Ü�q�c˜7Ó#�J€FˆB÷ð ð
 ˆ?Ðr   c                  ól   ^ • \ rS rSrS\S4U 4S jjrS r SS jrSSSS	.S
 jr      SS jr	Sr
U =r$ )ÚBinaryMapperé-   é   Fc                ó‚  >• [         TU ]  5         Xl        SU-  U l        S[	        U5      -  n[	        U R                  5      S S 2S 4   R                  U5      S:g  R                  5       R                  5       nU R                  SUSS9  U R                  SUSS9  X l	        U R                  S[        S5      SS9  X0l        g )	Nr   r   Ú	power_twoF)Ú
persistentÚcodesÚzerog        )ÚsuperÚ__init__ÚbitsÚ	num_codesr   Úbitwise_andÚbyteÚboolÚregister_bufferÚkl_loss_thresholdr   Údeterministic_on_eval)Úselfr;   rA   rB   r5   r7   Ú	__class__s         €r   r:   ÚBinaryMapper.__init__.   sº   ø€ ô 	‰ÑÔàŒ	Ø˜d™ˆŒàœ ›Ñ%ˆ	Ü˜Ÿ™Ó'ª¨4¨Ñ0×<Ñ<¸YÓGÈ1ÑL×RÑRÓT×YÑYÓ[ˆà×Ñ˜[¨)À%ÐÑHØ×Ñ˜W e¸%ÐÑ@ð "3ÔØ×Ñ˜V¤V¨B£Z¸eÐÑDð &;Õ"r   c                ó   • [        U5      $ r   )r#   )rC   r    s     r   r#   ÚBinaryMapper.binary_entropyH   s   € Ü˜fÓ%Ð%r   Tc                óì   • [        US5      u  pU R                  [        -  U R                  U5      -
  n[        R
                  " X@R                  -
  5      nU(       a  UR                  5       $ U" US5      $ )Nú* bitsÚ*)r/   r;   ÚNATr#   r   ÚrelurA   Úmean)rC   r    Úreduce_aux_kl_lossÚinverse_pack_lead_dimsÚkl_divÚaux_kl_losss         r   Úcalc_aux_lossÚBinaryMapper.calc_aux_lossK   sf   € ô
 *;¸6À8Ó)LÑ&ˆØ—‘œS‘ 4×#6Ñ#6°vÓ#>Ñ>ˆÜ—f’f˜V×&<Ñ&<Ñ<Ó=ˆæØ×#Ñ#Ó%Ð%á% k°3Ó7Ð7r   N)ÚindicesÚone_hotÚsum_bitsc               ó²  • [        U5      [        U5      -  (       d   S5       e[        U5      (       a  UR                  SS9n[        US5      u  p[        US5      u  p&U R                  U   n[        R
                  " U5      n[        R
                  " U* 5      n	[        R                  " XxU	5      n
U(       d  U" U
5      $ U
R                  SS9n
U" U
S5      $ )Nz*either indices or one_hot must be providedr   r   rI   rJ   )	r   Úargmaxr/   r7   r   r   ÚtorchÚwherer   )rC   r    rT   rU   rV   rO   Ú_Úsampled_bitsÚlog_probs_1Úlog_probs_0Ú	log_probss              r   Úlog_probÚBinaryMapper.log_probY   sÃ   € ô �g‹¤¨£×0Ð^Ð2^Ó^Ð0ä�'�?‰?Ø—n‘n¨�nÐ,ˆGô *;¸6À8Ó)LÑ&ˆÜ& w°Ó4‰
ˆð —z‘z 'Ñ*ˆô —l’l 6Ó*ˆÜ—l’l F 7Ó+ˆä—K’K ¸;ÓGˆ	æÙ)¨)Ó4Ð4à—M‘M¨�MÐ+ˆ	Ù% i°Ó5Ð5r   c                ó  • [        XPR                  =(       a    U R                  (       + 5      n[        X0R                  5      n[        X@R                  5      nUR                  S   U R                  :X  d   SU R                   35       eUn[        US5      u  pX-  R                  5       n
U(       d  U
R                  5       R                  5       nOU
S:„  R                  5       nU R                  U-  R                  SS9n[        R                  " XÀR                  5      R                  5       nU R                  nU(       a  U R!                  X‡S9nU(       a˜  [#        [        R$                  " U5      U R&                  R                  5       S5      [#        [        R$                  " U* 5      U R&                  ) R                  5       S5      -   R)                  5       nXß-   UR+                  5       -
  nU	" U5      nU	" US5      nU(       d  XÞ4$ XÜU4$ )	Nr   z%logits must have a last dimension of rI   g      à?r   )rN   z!... bits, codes bits -> ... codesrJ   )r   rB   ÚtrainingÚshaper;   r/   r   Ú	bernoulliÚlongr5   r   r   rU   r<   Úfloatr8   rR   r	   r   r7   ÚexpÚdetach)rC   r    ÚtemperatureÚstraight_throughrR   ÚdeterministicÚreturn_indicesrN   Úorig_logitsrO   Úprob_for_sampler\   rT   rU   rQ   Úsoft_Gs                   r   ÚforwardÚBinaryMapper.forward|   sÌ  € ô   ×/IÑ/I×/_ÐRV×R_ÑR_ÔN_Ó`ˆä"Ð#3·]±]ÓCÐÜ ¯}©}Ó=ˆà�|‰|˜BÑ 4§9¡9Ó,ÐaÐ0UÐVZ×V_ÑV_ÐU`Ð.aÓaÐ,àˆô *;¸6À8Ó)LÑ&ˆð "Ñ/×8Ñ8Ó:ˆö Ø*×4Ñ4Ó6×;Ñ;Ó=‰Là+¨cÑ1×7Ñ7Ó9ˆLà—>‘> LÑ0×5Ñ5¸BÐ5Ð?ˆä—)’)˜G§^¡^Ó4×:Ñ:Ó<ˆð —i‘iˆæØ×,Ñ,¨[Ð,ÐbˆKö ô ”q—|’| FÓ+¨T¯Z©Z×-=Ñ-=Ó-?ÐAdÓeÜ”q—|’| V GÓ,°·
±
¨{×.AÑ.AÓ.CÐEhÓiñjç‰c‹eð ð Ñ&¨¯©«Ñ8ˆGñ )¨Ó1ˆÙ(¨°#Ó6ˆö ØÐ'Ð'ð  Ð,Ð,r   )r;   rB   rA   r<   )T)r   NNNFT)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rK   r:   r#   rR   r`   rq   Ú__static_attributes__Ú__classcell__)rD   s   @r   r1   r1   -   sS   ø† ð ØØ %÷	;ò4&ð "ô8ð$ ØØõ!6ðL ØØØØØ!÷F-ò F-r   r1   Ú__main__é   )r;   é   é   TF)rm   rN   )r{   r|   é   )r{   r|   )rT   )rU   )rl   )'Ú
__future__r   Úmathr   rY   r   r   r   Útorch.nn.functionalÚ
functionalr   Útorch.nnr   Úeinopsr	   r
   r   rK   r   r   r#   r/   r1   rs   Úbinary_mapperÚrandnr    Úsparse_one_hotrT   Úaux_lossrd   r`   Újoint_log_probÚjoint_log_prob_one_hotÚallcloseÚevalÚsparse_one_hot1r[   Úsparse_one_hot2r   r   r   Ú<module>rŽ      si  ðÝ "õ ã ß $Ñ $ß Ð Ý ç 'Ñ 'ñ 
ˆ!ƒf€òò!ò
[ò
ôU-�6ô U-ðr ˆzÓá ¨Ñ*€Mà�[Š[˜˜A˜qÓ!€Fá(5°fÈtÐjoÑ(pÑ%€N�G˜Xà×Ñ >Ó1Ð1Ð1Ø�=‰=˜FÓ"Ð"Ð"Ø�>‰>˜VÓ#Ð#Ð#à"×+Ñ+¨F¸gÐ+ÐF€NØ×Ñ 6Ó)Ð)Ð)à*×3Ñ3°FÀnÐ3ÐUÐØ�>Š>˜.Ð*@×AÑAÐAÐAà×ÑÔÙ& v¸tÑDÑ€O�QÙ& v¸tÑDÑ€O�QØ�>Š>˜/¨?×;Ñ;Ð;Ñ;ð+ r   