+
    "Ý³j  ã                   óè   € ^ RI t ^ RIt^ RIHt ^ RIHu Ht RtRtR t	 ! R R]P                  P                  4      t ! R R]P                  P                  4      t ! R R	]P                  4      tR# )
é    Ng   ÐˆÃ Bc                óÒ   € ^\        R\        V4      ,          V P                  4       ^,
          ,          4      ,           pV P                  R4      P	                  V4      P
                  # )z,Return the value that is larger than q% of tg{®Gáz„?éÿÿÿÿ)ÚroundÚfloatÚnumelÚviewÚkthvalueÚvalues)ÚtÚqÚks   && Ú[/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torchao/sparsity/supermask.pyÚ
percentiler      sG   € à	ŒE�$œ˜q›•/ Q§W¡W£Y°¥]Õ3Ó4Õ4€AØ�6‰6�"‹:×Ñ˜qÓ!×(Ñ(Ð(ó    c                   óD   a € ] tR t^t o Rt]R 4       t]R 4       tRtV t	R# )Ú	GetSubnetúSupermask STE functionc                óô   € VP                  \        \        R 7      p\        WT^d,          4      p\        P
                  ! WV8  VP                  VP                  4      VP                  VP                  4      4      # ))ÚminÚmax)ÚclampÚ
SCORES_MINÚ
SCORES_MAXr   ÚtorchÚwhereÚtoÚdevice)ÚctxÚscoresÚzerosÚonesÚsparsityÚclamped_scoresÚk_vals   &&&&&  r   ÚforwardÚGetSubnet.forward   sW   € àŸ™¬*¼*˜ÓEˆÜ˜>°c­>Ó:ˆÜ�{Š{ØÑ" E§H¡H¨V¯]©]Ó$;¸T¿W¹WÀVÇ]Á]Ó=Só
ð 	
r   c                ó   € VR R R 3# ©N© )r   Úgs   &&r   ÚbackwardÚGetSubnet.backward   s   € à�$˜˜dÐ"Ð"r   r)   N©
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ústaticmethodr%   r+   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r      s.   ø‡ € Ù àñ
ó ð
ð ñ#ó ö#r   r   c                   óD   a € ] tR t^#t o Rt]R 4       t]R 4       tRtV t	R# )Ú	ApplyMaskr   c                ó   € W,          # r(   r)   )r   Úweightr   s   &&&r   r%   ÚApplyMask.forward&   s
   € à�Ðr   c                óz   € R ;r#V P                   ^ ,          '       d   TpV P                   ^,          '       d   TpW#3# r(   )Úneeds_input_grad)r   Úgrad_outputÚgrad_weightÚgrad_scoress   &&  r   r+   ÚApplyMask.backward*   s?   € à$(Ð(ˆØ×Ñ ×"Ô"Ø%ˆKØ×Ñ ×"Ô"Ø%ˆKØÐ'Ð'r   r)   Nr-   r6   s   @r   r9   r9   #   s.   ø‡ € Ù àñó ðð ñ(ó ö(r   r9   c                   óf   a a€ ] tR t^4t oRtV 3R ltR tR t]RR l4       t	]R 4       t
RtVtV ;t# )	ÚSupermaskLinearz Supermask class for Linear layerc                óš  <€ \         \        V `
  ! V/ VB  ^^\        P                  ! V P
                  P                  4        Uu. uF  p\        P                  ! Wr,          4      NK!  	  up4      ,          ,
          pWn        V P                  V8”  dB   \        RV P                   RV 2RV P
                  P                  4        RV R24       W€n        W n        RV n        \        P                  ! \        P                   ! V P
                  P                  4        U	u. uF2  p	\#        ^\%        \        P                  ! W’,          4      4      4      NK4  	  up	4      V'       * R7      V n        \        P(                  P+                  V P&                  \        P,                  ! ^4      R7       V'       * V P
                  n        R	# u upi u up	i )
é   zreducing sparsity from z to z'(maximum sparsity for layer with shape z and tile size Ú)F)Úrequires_grad)ÚaN)ÚsuperrD   Ú__init__ÚmathÚprodr;   ÚsizeÚceilÚsparsity_levelÚprintr"   Ú	blocksizeÚsparsify_weightsÚnnÚ	Parameterr   Úemptyr   Úintr   ÚinitÚkaiming_uniform_ÚsqrtrH   )ÚselfrP   rR   Ú
fixed_maskÚfixed_weightÚargsÚkwargsr   Úmax_sparsity_levelÚwnÚ	__class__s   &&&&&*,   €r   rK   ÚSupermaskLinear.__init__7   sh  ø€ ô 	Œo˜tÒ-¨tÐ>°vÒ>àØ”—	’	¸T¿[¹[×=MÑ=MÔ=OÓPÑ=O¸œ4Ÿ9š9 Q¥]Ö3Ñ=OÑPÓQÕQõ
Ðð -ÔØ×ÑÐ!3Ô3ÜØ)¨$¯-©-¨¸Ð=OÐ<PÐQØ9¸$¿+¹+×:JÑ:JÓ:LÐ9MÈ_Ð]fÐ\gÐghÐiôð #5ÔØ"ŒØ %ˆÔÜ—l’lÜ�KŠKØBFÇ+Á+×BRÑBRÔBTÓUÑBT¸B”�QœœDŸIšI b¥nÓ5Ó6Ö7ÑBTÑUóð )œ.ô	
ˆŒô 	�‰× Ñ  §¡´·	²	¸!³Ð Ô=ð )5Ô$4ˆ�‰Ö!ùò+ Qùò Vs   Á%GÄ8Gc                ó²  € \         P                  V P                  \        P                  ! V P                  4      \        P
                  ! V P                  4      V P                  4      pV P                  ^8w  d^   \        V P                  P                  4       F:  w  r#VP                  V P                  VR7      p\        P                  ! W^ V4      pK<  	  V# )rF   )Údim)r   Úapplyr   r   Ú
zeros_likeÚ	ones_likerP   rR   Ú	enumerater;   ÚshapeÚrepeat_interleaveÚnarrow)r[   ÚsubnetÚir   s   &   r   Úget_maskÚSupermaskLinear.get_maskT   s�   € Ü—‘Ø�K‰KÜ×Ò˜TŸ[™[Ó)Ü�OŠO˜DŸK™KÓ(Ø×Ñó	
ˆð �>‰>˜QÔÜ! $§+¡+×"3Ñ"3Ö4‘�Ø×1Ñ1°$·.±.ÀaÐ1ÓH�ÜŸš f°°AÓ6’ñ 5ð ˆr   c                ó¤   € V P                  4       p\        P                  V P                  V4      p\        P
                  ! WV P                  4      # r(   )ro   r9   rf   r;   ÚFÚlinearÚbias)r[   Úxrm   Úws   &&  r   r%   ÚSupermaskLinear.forwardc   s6   € Ø—‘“ˆÜ�O‰O˜DŸK™K¨Ó0ˆÜ�xŠx˜˜dŸi™iÓ(Ð(r   c           
     ó4  € \        V\        P                  P                  4      '       g   Q h\	        VVRRVP
                  VP                  VP                  RJR7      P                  VP                  P                  VP                  P                  R7      pVP                  P                  P                  VP                  P                  4       VP                  e:   VP                  P                  P                  VP                  P                  4       V# )zE
Main entrypoint for creating a SupermaskLinear from a Linear layer.
FN©rt   ©r   Údtype)Ú
isinstancer   rT   ÚLinearrD   Úin_featuresÚout_featuresrt   r   r;   r   r{   ÚdataÚcopy_)Úclsrs   rP   rR   Úsupermask_linears   &&&& r   Úfrom_linearÚSupermaskLinear.from_linearh   sÔ   € ô ˜&¤%§(¡(§/¡/×2Ò2Ð2Ð2ä*ØØØØØ×ÑØ×ÑØ—‘ DÐ(ô
÷ ‰"�F—M‘M×(Ñ(°·±×0CÑ0Cˆ"Ó
Dð 	ð 	×Ñ×$Ñ$×*Ñ*¨6¯=©=×+=Ñ+=Ô>Ø�;‰;Ò"Ø×!Ñ!×&Ñ&×,Ñ,¨V¯[©[×-=Ñ-=Ô>ØÐr   c                ó  € Tp\         P                  P                  VP                  VP                  VP
                  RJR7      P                  VP                  P                  VP                  P                  R7      pVP                  4       pVP                  P                  P                  VP                  V,          4       VP
                  e:   VP
                  P                  P                  VP
                  P                  4       V# )z\
Convert a SupermaskLinear to a Linear layer.
Replaces the old sparsify_offline() function.
Nry   rz   )r   rT   r}   r~   r   rt   r   r;   r   r{   ro   r€   r�   )r‚   rƒ   r[   rs   Úmasks   &&   r   Ú	to_linearÚSupermaskLinear.to_linear‚   sÂ   € ð  ˆä—‘—‘Ø×ÑØ×ÑØ—‘ $Ð&ð !ó 
÷ ‰"�D—K‘K×&Ñ&¨d¯k©k×.?Ñ.?ˆ"Ó
@ð	 	ð �}‰}‹ˆØ�‰×Ñ× Ñ  §¡¨tÕ!3Ô4Ø�9‰9Ò Ø�K‰K×Ñ×"Ñ" 4§9¡9§>¡>Ô2Øˆr   )rR   r   rS   rP   )g        rF   )r.   r/   r0   r1   r2   rK   ro   r%   Úclassmethodr„   rˆ   r4   r5   Ú__classcell__)rb   r7   s   @@r   rD   rD   4   sD   ù‡ € Ù*õ5ò:ò)ð
 ó ó ð ð2 ñó ÷ð r   rD   )rL   r   Útorch.nnrT   Útorch.nn.functionalÚ
functionalrr   r   r   r   ÚautogradÚFunctionr   r9   r}   rD   r)   r   r   Ú<module>r‘      sc   ðó ã Ý ß Ð à€
Ø€
ò)ô#�—‘×'Ñ'ô #ô (�—‘×'Ñ'ô (ô"`�b—i‘iö `r   