+
    "Ý³j&  ã                   óÄ  € ^ RI t ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIHtH	t	 ^RI
HtHtHtHt ]P                  P                   t]P                  P"                  t]P                  P$                  t^ RIHt ]! ^R7      R	 4       t]! ^R7      R
 4       t ! R R]4      t]P1                  ]P2                  P4                  4      R 4       t]P1                  ]P8                  P4                  4      R 4       t]P1                  ]P:                  P<                  4      R 4       t]P1                  ]P>                  P4                  4      R 4       t]P@                  P4                  ]P@                  P4                  ]PB                  P4                  ]PB                  P4                  ]PD                  P4                  .t#]	! R4      '       d&   ]#PI                  ]PJ                  P4                  4       ]P1                  ]#4      R 4       t]P1                  ]PL                  P4                  4      R 4       t]P1                  ]PN                  P                  4      R 4       t]! ].4       R# )é    N)ÚTensor)Úadd_safe_globals)Úreturn_and_correct_aliasing)ÚTorchAOBaseTensorÚtorch_version_at_least)Úcreate_dynamic_mapÚdequant_with_qmapÚquantize_4bit_with_qmapÚscale_tensor)Ú	lru_cache)Úmaxsizec                  ó.   € \        \        R ^^4      4      # )T)Útupler   © ó    Ú\/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torchao/optim/subclass_4bit.pyÚget_qmap_signedr   "   s   € äÔ# D¨!¨QÓ/Ó0Ð0r   c            	      ór   € \        \        P                  ! ^ ^^RR7      R,          P                  4       4      # )r   Úcpu©Údeviceºé   NN)r   ÚtorchÚlinspaceÚtolistr   r   r   Úget_qmap_unsignedr   '   s*   € ä”—’  1 b°Ô7¸Õ;×BÑBÓDÓEÐEr   c                   ó¨   a € ] tR t^,t o . ROt]RV 3R lR ll4       tRV 3R lR lltR t]	RR l4       t
RR lt]	RV 3R	 lR
 ll4       tR tRtV tR# )ÚOptimState4bitNc                óZ   <€ V ^8„  d   QhRS[ RS[ RS[ RS[RS[P                  R,          /# ©é   ÚcodesÚscaleÚqmapÚsignedÚdtypeN©r   Úboolr   r'   )ÚformatÚ__classdict__s   "€r   Ú__annotate__ÚOptimState4bit.__annotate__1   sF   ø€ ÷ 
ñ 
áð
ñ ð
ñ ð	
ñ
 ð
ñ �{‰{˜TÕ!ñ
r   c                óH   € \         P                  ! WVP                  VR 7      # ))r   r'   )r   Ú_make_wrapper_subclassr   )Úclsr#   r$   r%   r&   Úshaper'   s   &&&&&&&r   Ú__new__ÚOptimState4bit.__new__0   s"   € ô ×,Ò,Ø˜uŸ|™|°5ô
ð 	
r   c                óZ   <€ V ^8„  d   QhRS[ RS[ RS[ RS[RS[P                  R,          /# r!   r(   )r*   r+   s   "€r   r,   r-   >   sF   ø€ ÷  =ñ  =áð =ñ ð =ñ ð	 =ñ
 ð =ñ �{‰{˜TÕ!ñ =r   c                óp  € VP                   \        P                  J g   Q hVP                  ^8X  g   Q hVP                  ^8X  g   Q hVP                   \        P                  J g   Q hWn        W n        W0n        W@n        WPn	        VP                  4       ^,          VP                  4       ,          V n        R# )aé  Create quantized 4-bit optimizer state as proposed in https://arxiv.org/abs/2309.01507

Args
    codes: quantized and packed 4-bit data stored as uint8.
    scale: scale data for block-wise quantization.
    qmap: lookup table that maps between quantized value (code) and float value.
    signed: whether the tensor is signed or unsigned.
    shape: shape of original float tensor.

NOTE: To get block-wise scale, the original float tensor is first reshape to (-1, block_size).
Thus, the last dimension of the original float tensor is not necessarily divisible by block size.
Given `codes` and `scale`, `block_size` is calculated as `codes.numel() * 2 // scale.numel()`.
The extra `* 2` is because `codes` is 4-bit data packed in 8-bit storage.
N)r'   r   Úuint8ÚndimÚfloat32r#   r$   r%   r&   Ú_shapeÚnumelÚ
block_size)Úselfr#   r$   r%   r&   r1   r'   s   &&&&&&&r   Ú__init__ÚOptimState4bit.__init__>   s†   € ð. �{‰{œeŸk™kÓ)Ð)Ð)Ø�z‰z˜QŒÐˆØ�z‰z˜QŒÐˆØ�z‰zœUŸ]™]Ó*Ð*Ð*ØŒ
ØŒ
ØŒ	ØŒØŒØŸ+™+›-¨!Õ+¨u¯{©{«}Õ<ˆŽr   c                ó`   € V P                   V P                  V P                  V P                  .3# ©N)Útensor_attrsr&   r9   r'   ©r<   s   &r   Ú__tensor_flatten__Ú!OptimState4bit.__tensor_flatten__`   s&   € Ø× Ñ  4§;¡;°·±¸T¿Z¹ZÐ"HÐHÐHr   c                ób   € T ! . V P                    Uu. uF  qQV,          NK  	  upOVO5!  # u upi r@   )rA   )r0   Útensor_data_dictÚtensor_attributesÚ
outer_sizeÚouter_strideÚnames   &&&&& r   Ú__tensor_unflatten__Ú#OptimState4bit.__tensor_unflatten__c   sA   € ñ ð 
Ø14×1AÒ1AÓBÑ1A¨˜t×$Ð$Ñ1AÑBð
ØEVó
ð 	
ùÚBs   ’,
c                ó  € \         P                  ! V P                  ^,	          V P                  ^,          .RR7      p\        W P                  V P
                  4      pVe   VP                  V4      pVP                  V P                  4      # )é   )Údiméÿÿÿÿ)	r   Ústackr#   r	   r%   r$   ÚtoÚviewr9   )r<   Úoutput_dtyper#   Ú
float_datas   &&  r   Ú
dequantizeÚOptimState4bit.dequantizek   sc   € Ü—’˜TŸZ™Z¨1�_¨d¯j©j¸6Õ.AÐBÈÔKˆÜ& u¯i©i¸¿¹ÓDˆ
ØÒ#Ø#Ÿ™ |Ó4ˆJØ�‰˜tŸ{™{Ó+Ð+r   c          	      ó|   <€ V ^8„  d   QhRS[ RS[RS[P                  P                  RS[P
                  R,          /# )r"   r&   r;   r   r'   N)r)   Úintr   ÚtypesÚDevicer'   )r*   r+   s   "€r   r,   r-   s   sN   ø€ ÷ Cñ Cñ ðCñ ð	Cñ
 —‘×"Ñ"ðCñ �{‰{˜TÕ!ñCr   c           	     ó˜  € \        V\        4      '       d   V3MTp\        P                  ! V4      p\        P
                  ! V^,          \        P                  VR7      p\        P
                  ! Wc,          VR7      pV'       d   \        4       M	\        4       p	\        P                  ! V	\        P                  VR7      p
V ! WxW¢WR7      # )r"   )r'   r   r   ©r'   )Ú
isinstancerY   ÚmathÚprodr   Úzerosr6   r   r   Útensorr8   )r0   r1   r&   r;   r   r'   Ún_elemsr#   r$   Ú	qmap_listr%   s   &&&&&&     r   ra   ÚOptimState4bit.zerosr   s‰   € ô ' u¬c×2Ò2�‘¸ˆÜ—)’)˜EÓ"ˆä—’˜G q�L´·±ÀFÔKˆÜ—’˜GÕ1¸&ÔAˆß)/”OÔ%Ô5FÓ5Hˆ	Ü�|Š|˜I¬U¯]©]À6ÔJˆÙ�5 ¨uÔBÐBr   c                óâ   € V P                   P                   R V P                   RV P                   R\	        V P
                  4       RV P                   RV P                   RV P                   R2# )z(signed=z, block_size=z, shape=z, dtype=z	, device=z, requires_grad=Ú))	Ú	__class__Ú__name__r&   r;   r   r1   r'   r   Úrequires_gradrB   s   &r   Ú__repr__ÚOptimState4bit.__repr__„   sn   € à�~‰~×&Ñ&Ð' x°·±¨}¸MÈ$Ï/É/ÐIZð [Ü˜4Ÿ:™:Ó&Ð' x°·
±
¨|¸9ÀTÇ[Á[ÀMð RØ!×/Ñ/Ð0°ð3ð	
r   )r9   r;   r#   r%   r$   r&   )r#   r$   r%   r@   )NN)Té€   NN)ri   Ú
__module__Ú__qualname__Ú__firstlineno__rA   Ústaticmethodr2   r=   rC   ÚclassmethodrK   rV   ra   rk   Ú__static_attributes__Ú__classdictcell__)r+   s   @r   r   r   ,   ss   ø‡ € Ú-€Lð ÷
ñ 
ó ð
÷ =ò  =òDIð ó
ó ð
ô,ð ÷Cñ Có ðC÷"
ð 
r   r   c                 óJ  € V^ ,          pV^,          p\        V\        4      '       d¶   \        V\        4      '       d    VP                  VP                  8X  d7   VP                  VP                  8X  d   VP                  VP                  8X  g   Q hVP
                  P                  VP
                  4       VP                  P                  VP                  4       V# \        V\        4      '       d‘   \        VP                  R4      VP                  4      w  rg\        WdP                  4      pVP
                  P                  VR,          ^,          VR,          ,          4       VP                  P                  V4       V# VP                  VP                  4       4       V# )r   :NNr"   :r   Nr"   rP   )r^   r   r&   r;   r9   r#   Úcopy_r$   r   rS   r
   r%   rV   )	ÚfuncrZ   ÚargsÚkwargsÚdstÚsrcÚ
scaled_srcr$   r#   s	   &&&&     r   Ú_r}   Œ   s"  € à
ˆq�'€CØ
ˆq�'€Cä�#”~×&Ò&¬:°c¼>×+JÒ+Jà�J‰J˜#Ÿ*™*Ô$Ø—‘ #§.¡.Ô0Ø—
‘
˜cŸj™jÔ(ð	
ð)ð 	�	‰	�‰˜Ÿ	™	Ô"Ø�	‰	�‰˜Ÿ	™	Ô"ð €Jô 
�Cœ×	(Ò	(Ü(¨¯©°"«°s·~±~ÓFÑˆ
Ü'¨
·H±HÓ=ˆØ�	‰	�‰˜˜s� q�¨E°$­KÕ7Ô8Ø�	‰	�‰˜Ôð
 €Jð 	�	‰	�#—.‘.Ó"Ô#à€Jr   c           	      ó°  € VP                  R V^ ,          P                  4      pVP                  RR4      p\        V^ ,          P                  P	                  VR7      V^ ,          P
                  P	                  VR7      V^ ,          P                  P	                  VR7      V^ ,          P                  V^ ,          P                  VR7      p\        WW64      # )r'   r   Nr   r]   )
Úgetr'   r   r#   rR   r$   r%   r&   r1   r   )rw   rZ   rx   ry   r'   r   Úouts   &&&&   r   r}   r}   §   s¦   € ð �J‰J�w  Q¥§¡Ó.€EØ�Z‰Z˜ $Ó'€FÜ
ØˆQ��‰×Ñ ÐÓ'ØˆQ��‰×Ñ ÐÓ'ØˆQ��‰�‰˜vˆÓ&ØˆQ��‰ØˆQ��‰Øô€Cô ' t°6Ó?Ð?r   c                 óŠ   € V Uu. uF+  p\        V\        4      '       d   VP                  4       MTNK-  	  ppV ! V/ VB # u upi r@   )r^   r   rV   )rw   rZ   rx   ry   Úxs   &&&& r   r}   r}   ·   sC   € áLPÓQÉDÀqœj¨¬N×;Ò;ˆA�L‰LŒNÀÒBÉD€DÐQÙ�Ð ˜Ñ Ð ùò Rs   …1A c                 óÞ  € Vw  rE\        VP                  4      \        V4      8X  dB   \        VP                  VP                  VP
                  VP                  VP                  4      # \        V4      ^8X  dU   V^ ,          R8X  dG   \        VP                  VP                  VP
                  VP                  VP                  4       34      # \        VP                  P                   R24      h)r   z4 only supports .view() with same shape or shape=[-1]rP   )r   r1   r   r#   r$   r%   r&   r9   Úlenr:   Ú
ValueErrorrh   ri   )rw   rZ   rx   ry   r‚   r1   s   &&&&  r   r}   r}   ¾   s§   € à�H€AäˆQ�W‰Wƒ~œ˜u›Ô%Ü˜aŸg™g q§w¡w°·±¸¿¹À!Ç(Á(ÓKÐKä
ˆ5ƒz�Q„˜5 �8 rœ>Ü˜aŸg™g q§w¡w°·±¸¿¹À1Ç7Á7Ã9À,ÓOÐOä
Ø�;‰;×ÑÐ
 Ð TÐUóð r   z
2.11.0.devc                 ó  € V^ ,          p\        V\        4      '       g   \        R\        V4       24      hV ! VP                  .VR,          O5/ VB pV ! VP
                  .VR,          O5/ VB pVP                  ^ ,          VP                  4       ,          VP                  P                  4       ,          3VP                  R,          ,           p\        WVVP                  P                  4       VP                  V4      # )r   z%expecting a OptimState4bit but found r   )r^   r   r…   Útyper#   r$   r9   r:   r%   Úcloner&   )rw   rZ   rx   ry   r‚   r#   r$   r1   s   &&&&    r   r}   r}   Ü   sÁ   € àˆQ�€AÜ�aœ×(Ò(ÜÐ@ÄÀaÃÀ	ÐJÓKÐKá�—‘Ð.˜4 �8Ò. vÑ.€EÙ�—‘Ð.˜4 �8Ò. vÑ.€Eð �X‰X�a�[˜5Ÿ;™;›=Õ(¨A¯G©G¯M©M«OÕ;Ð=ÀÇÁÈÅÕL€Eô ˜%¨¯©¯©«¸¿¹À%ÓHÐHr   c                 óè   € V^ ,          P                   P                  4       ;'       dK    V^ ,          P                  P                  4       ;'       d"    V^ ,          P                  P                  4       # )r   )r#   Ú	is_pinnedr$   r%   )rw   rZ   rx   ry   s   &&&&r   r}   r}   ï   sY   € ð 	ˆQ��‰×ÑÓ!÷ 	%ð 	%Ø��G�M‰M×#Ñ#Ó%÷	%ð 	%à��G�L‰L×"Ñ"Ó$ðr   c                 óV  € VR ,          w  rErg\        V4      ^8”  d
   V^,          M^pV^ 8w  d   \        R4      hV^8w  d   \        R4      hVP                  p	\        P                  ! VP
                  R,          4      p
Wj,          V	,          ^ 8w  g   Wz,          V	,          ^ 8w  d#   \        RVP
                   RV	 RV RV R2	4      hVP                  Wj,          ^,          Wz,          ^,           pVP                  Wj,          V	,          Wz,          V	,           pVP
                  ^ ,          VP                  4       ,          VP                  P                  4       ,          3VP
                  R,          ,           p\        W¼VP                  P                  4       VP                  V4      # )	:NrN   Nz+Only support aten.slice along the first dimz#Only support aten.slice with step=1r   zInvalid start or end for shape=z and block_size=zD. Make sure start and end align with block boundary. Received start=z, end=Ú.)r„   r…   r;   r_   r`   r1   r#   r$   r:   r   r%   rˆ   r&   )rw   rZ   rx   ry   r‚   rO   ÚstartÚendÚstepr;   Ústrider#   r$   r1   s   &&&&          r   r}   r}   ù   sX  € à˜b�Ñ€AˆEÜ˜$“i !”mˆ4�Ž7¨€Dð ˆa„xÜÐFÓGÐGØˆq„yÜÐ>Ó?Ð?à—‘€JÜ�YŠY�q—w‘w˜r•{Ó#€Fð 	�˜*Õ$¨Ô)¨c­l¸jÕ-HÈAÔ-MÜØ-¨a¯g©g¨YÐ6FÀzÀlð Sà#˜W F¨3¨%¨qð2ó
ð 	
ð �G‰G�E•N aÕ'¨#­,¸!Õ*;Ð<€EØ�G‰G�E•N jÕ0°3µ<À:Õ3MÐN€Eð �W‰W�Q�Z˜%Ÿ+™+›-Õ'¨1¯7©7¯=©=«?Õ:Ð<¸q¿w¹wÀr½{ÕJ€Eä˜%¨¯©¯©«¸¿¹À%ÓHÐHr   )(r_   r   r   Útorch.serializationr   Útorch.utils._python_dispatchr   Útorchao.utilsr   r   Úquant_utilsr   r	   r
   r   ÚopsÚatenÚc10d_functionalÚ_c10d_functionalÚ	functoolsr   r   r   r   Ú
implementsrv   Údefaultr}   Ú_to_copyÚlerpÚScalarrS   Úall_gather_into_tensorÚwait_tensorÚdetachÚ_optim_state_4bit_c10d_opsÚappendÚ_wrap_tensor_autogradrŠ   Úslicer   r   r   Ú<module>r¦      s?  ðó ã Ý Ý 0Ý Dç C÷ó ð ‡y�y‡~�~€Ø—)‘)×+Ñ+€Ø—9‘9×-Ñ-Ð õ  ñ �1Ôñ1ó ð1ñ �1ÔñFó ðFô]
Ð&ô ]
ð@ ×Ñ˜4Ÿ:™:×-Ñ-Ó.ñó /ðð4 ×Ñ˜4Ÿ=™=×0Ñ0Ó1ñ@ó 2ð@ð ×Ñ˜4Ÿ9™9×+Ñ+Ó,ñ!ó -ð!ð ×Ñ˜4Ÿ9™9×,Ñ,Ó-ñó .ðð" ×*Ñ*×2Ñ2Ø×+Ñ+×3Ñ3Ø×Ñ×'Ñ'Ø× Ñ ×(Ñ(à‡K�K×ÑðÐ ñ ˜,×'Ò'Ø×%Ñ%Ð&6×&LÑ&L×&TÑ&TÔUð ×ÑÐ5Ó6ñIó 7ðIð$ ×Ñ˜4Ÿ>™>×1Ñ1Ó2ñó 3ðð ×Ñ˜4Ÿ:™:×,Ñ,Ó-ñIó .ðIñB �.Ð!Ö "r   