+
    "Ý³j"1  ã                  ó"  € R t ^ RIHt ^ RIHtHt ^ RIt^RIHtH	t	 ^RI
HtHt ^RIHtHt ^RIHt ^RIHt ^R	IHt ^R
IHtHtHt ^RIHtHt ^RIHt ^t]! RRR7      t ]! RRR7      t!]! RRR7      t"]! RRR7      t# ! R R]4      t$R.t%R# )z-ParoQuant CUDA-backed quantized linear layer.)Úannotations)ÚOptionalÚTupleN)ÚAdapterÚLora)ÚDEVICEÚPLATFORM)ÚFORMATÚMETHOD)Údequantize_gemm)ÚBACKEND)Úenv_flag)Úapply_paroquant_rotationÚbuild_identity_rotation_buffersÚis_identity_rotation)Ú
FP32_ACCUMÚ_awq_cuda_gemm_forward)ÚAwqTorchLinearÚ'GPTQMODEL_PAROQUANT_CACHE_RUNTIME_DTYPEF)ÚdefaultÚ1GPTQMODEL_PAROQUANT_AUTO_CACHE_BF16_RUNTIME_DTYPETÚ(GPTQMODEL_PAROQUANT_CACHE_ROTATION_DTYPEÚ2GPTQMODEL_PAROQUANT_AUTO_CACHE_BF16_ROTATION_DTYPEc            
      óü  a € ] tR t^)tRt]P                  .t]P                  .t
]P                  ^7/t^.t. ROtRR.tR.tRtRtRt^.t^.t]P0                  .t]P0                  .t]P:                  .t].t ]PB                  ]PD                  .t#Rt$Rt%R]P:                  RR^]&]'](])]*3
R V 3R lllt+R R	 lt,V 3R
 lt-].R R l4       t/R R lt0R R lt1R R lt2R R lt3R R lt4R R lt5R R lt6R R lt7Rt8V ;t9# )Ú
ParoLinearzGRun ParoQuant inference by rotating inputs and reusing AWQ packed GEMM.TFÚawq_paroquantNc                óX   € V ^8„  d   QhRRRRRRRRRRRRR	RR
RRRRRRRRRRRRRRRRR/# )é   ÚbitsÚintÚ
group_sizeÚsymÚboolÚdesc_actÚin_featuresÚout_featuresÚbiasÚ
pack_dtypeútorch.dtypeÚadapterr   Úregister_buffersÚkrotÚ
fp32_accumÚcache_runtime_dtypeÚauto_cache_bf16_runtime_dtypeÚcache_rotation_dtypeÚauto_cache_bf16_rotation_dtype© )Úformats   "Úg/home/luca/screen-checking/.venv/lib/python3.14/site-packages/gptqmodel/nn_modules/qlinear/paroquant.pyÚ__annotate__ÚParoLinear.__annotate__B   sª   € ÷ 1'ñ 1'àð1'ð ð1'ð ð	1'ð
 ð1'ð ð1'ð ð1'ð ð1'ð  ð1'ð ð1'ð ð1'ð ð1'ð ð1'ð "ð1'ð (,ð1'ð  #ð!1'ð" )-ñ#1'ó    c                óö  <€ \        V4      V n        V P                  ^ 8:  d   \        RV R24      h\        V4      V n        \        V4      V n        \        V4      V n        \        V4      V n        \        V4      V n        RV n	        RV n
        RV n        RV n        \        SV `8  ! RRVRVRVRVRVR	VR
VRVRV	RV
RVP                  R\         P"                  4      /VB  V P%                  4        RV n        R# )z?Initialize AWQ buffers plus the extra ParoQuant rotation state.z)ParoLinear: `krot` must be positive, got Ú.Nr   r    r!   r#   r$   r%   r&   r'   r)   r*   ÚbackendTr1   )r   r+   Ú
ValueErrorr"   r,   r-   r.   r/   r0   Ú_rotation_runtime_dtypeÚ_rotation_runtime_deviceÚ_runtime_thetaÚ_runtime_channel_scalesÚsuperÚ__init__Úpopr   ÚPAROQUANT_CUDAÚ_register_rotation_buffersÚ_rotation_identity)Úselfr   r    r!   r#   r$   r%   r&   r'   r)   r*   r+   r,   r-   r.   r/   r0   ÚkwargsÚ	__class__s   &&&&&&&&&&&&&&&&&,€r3   r@   ÚParoLinear.__init__B   s<  ø€ ô* ˜“IˆŒ	Ø�9‰9˜Œ>ÜÐHÈÈÈaÐPÓQÐQÜ˜zÓ*ˆŒÜ#'Ð(;Ó#<ˆÔ Ü-1Ð2OÓ-PˆÔ*Ü$(Ð)=Ó$>ˆÔ!Ü.2Ð3QÓ.RˆÔ+Ø>BˆÔ$Ø@DˆÔ%Ø6:ˆÔØ?CˆÔ$ä‰Òñ 	
Øð	
à!ð	
ð ð	
ð ð		
ð
 $ð	
ð &ð	
ð ð	
ð "ð	
ð ð	
ð .ð	
ð —J‘J˜y¬'×*@Ñ*@ÓAð	
ð ò	
ð 	×'Ñ'Ô)Ø"&ˆÖr6   c               ó   € V ^8„  d   QhRR/# ©r   ÚreturnÚNoner1   )r2   s   "r3   r4   r5   u   s   € ÷ 1ñ 1¨Dñ 1r6   c                ó€  € \        V P                  V P                  V P                  \        P
                  R7      w  rpRV P                  9  d   V P                  RV4       MW n        RV P                  9  d   V P                  RV4       MWn	        RV P                  9  d   V P                  RV4       R# W0n
        R# )z=Allocate the per-layer buffers that encode runtime rotations.)r$   r    r+   ÚdtypeÚthetaÚpairsÚchannel_scalesN)r   r$   r    r+   ÚtorchÚfloat16Ú_buffersÚregister_bufferrO   rP   rQ   )rE   rP   rO   rQ   s   &   r3   rC   Ú%ParoLinear._register_rotation_buffersu   s™   € ô
 (GØ×(Ñ(Ø—‘Ø—‘Ü—-‘-ô	(
Ñ$ˆ�nð ˜$Ÿ-™-Ô'Ø× Ñ  ¨%Õ0àŒJà˜$Ÿ-™-Ô'Ø× Ñ  ¨%Õ0àŒJà 4§=¡=Ô0Ø× Ñ Ð!1°>ÖBà"0Ör6   c                óŽ   <€ \         SV `  4        V P                  4        \        V P                  V P
                  4      V n        R# )zFRefresh cached runtime state after weights or rotation buffers change.N)r?   Ú	post_initÚ_clear_rotation_runtime_cacher   rO   rQ   rD   )rE   rG   s   &€r3   rX   ÚParoLinear.post_init�   s3   ø€ ä‰ÑÔØ×*Ñ*Ô,Ü"6°t·z±zÀ4×CVÑCVÓ"WˆÖr6   c               ó   € V ^8„  d   QhRR/# )r   rK   z Tuple[bool, Optional[Exception]]r1   )r2   s   "r3   r4   r5   —   s   € ÷ ñ Ð>ñ r6   c                ó   € R# )zKParoQuant relies on AWQ validation and needs no extra one-time checks here.)TNr1   )Úclss   &r3   Úvalidate_onceÚParoLinear.validate_once–   s
   € ð Ðr6   c               ó   € V ^8„  d   QhRR/# )r   rK   Ústrr1   )r2   s   "r3   r4   r5   ›   s   € ÷ 
ñ 
˜Cñ 
r6   c                ó6  € RV P                    RV P                   RV P                  RJ RV P                   RV P                   RV P
                   R\         R	V P                   R
V P                   RV P                   RV P                   RV P                   2# )zAExpose ParoQuant-specific fields in `repr(module)` for debugging.zin_features=z, out_features=z, bias=Nz, bits=z, group_size=z, krot=z, awq_split_k=z, cache_runtime_dtype=z, auto_cache_bf16=z, cache_rotation_dtype=z, auto_cache_bf16_rotation=z, fp32_accum=)r$   r%   r&   r   r    r+   Ú_PAROQUANT_AWQ_SPLIT_Kr-   r.   r/   r0   r,   ©rE   s   &r3   Ú
extra_reprÚParoLinear.extra_repr›   sÀ   € ð ˜4×+Ñ+Ð,¨O¸D×<MÑ<MÐ;Nð OØ—I‘I TÐ)Ð*¨'°$·)±)°¸MÈ$Ï/É/ÐIZð [Ø—I‘I�;˜nÔ-CÐ,Dð E#Ø#'×#;Ñ#;Ð"<ð =Ø#×AÑAÐBð C$Ø$(×$=Ñ$=Ð#>ð ?(Ø(,×(KÑ(KÐ'Lð MØŸ/™/Ð*ð,ð		
r6   c               ó   € V ^8„  d   QhRR/# rJ   r1   )r2   s   "r3   r4   r5   ¨   s   € ÷ ,ñ ,¨tñ ,r6   c                	ó>   € R V n         R V n        R V n        R V n        R # )N)r;   r<   r=   r>   rd   s   &r3   rY   Ú(ParoLinear._clear_rotation_runtime_cache¨   s"   € Ø'+ˆÔ$Ø(,ˆÔ%Ø"ˆÔØ'+ˆÖ$r6   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Údeviceútorch.devicerN   r(   rK   rL   r1   )r2   s   "r3   r4   r5   ®   s'   € ÷ Nñ N¨Lð NÀð NÐQUñ Nr6   c                	óZ  € V P                   e†   V P                   P                  V8w  g<   V P                   P                  V8w  g!   V P                   P                  4       '       g0   V P                   P	                  WR7      P                  4       V n         V P                  eŠ   V P                  P                  V8w  g<   V P                  P                  V8w  g!   V P                  P                  4       '       g2   V P                  P	                  WR7      P                  4       V n        R # R # R # ©N©rk   rN   )Úscalesrk   rN   Úis_contiguousÚtoÚ
contiguousr&   ©rE   rk   rN   s   &&&r3   Ú_ensure_runtime_dtypeÚ ParoLinear._ensure_runtime_dtype®   sÜ   € Ø�;‰;Ò"¨¯©×(:Ñ(:¸fÔ(DÈÏÉ×HYÑHYÐ]bÔHbÐjn×juÑju÷  kDñ  kD÷  kFò  kFØŸ+™+Ÿ.™.°˜.ÓD×OÑOÓQˆDŒKØ�9‰9Ò  d§i¡i×&6Ñ&6¸&Ô&@ÀDÇIÁIÇOÁOÐW\ÔD\Ðdh×dmÑdm×d{Ñd{×d}Òd}ØŸ	™	Ÿ™¨F˜Ó@×KÑKÓMˆDŽIñ e~Ñ r6   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rk   rl   rN   r(   rK   z+Tuple[torch.Tensor, Optional[torch.Tensor]]r1   )r2   s   "r3   r4   r5   ´   s-   € ÷ Añ AàðAð ðAð 
5ñ	Ar6   c                	ó  € V P                   V8w  gn   V P                  V8w  g]   V P                  eO   V P                  eA   V P                  P	                  4       '       d!   V P                  P	                  4       '       gk   V P
                  P                  WR7      P                  4       V n        V P                  P                  WR7      P                  4       V n        Wn         W n        V P                  V P                  3# rn   )	r<   r;   r=   r>   rq   rO   rr   rs   rQ   rt   s   &&&r3   Ú_ensure_rotation_runtime_dtypeÚ)ParoLinear._ensure_rotation_runtime_dtype´   sÊ   € ð ×)Ñ)¨VÔ3Ø×+Ñ+¨uÔ4Ø×"Ñ"Ò*Ø×+Ñ+Ò3Ø×&Ñ&×4Ñ4×6Ò6Ø×/Ñ/×=Ñ=×?Ò?à"&§*¡*§-¡-°v -Ó"K×"VÑ"VÓ"XˆDÔØ+/×+>Ñ+>×+AÑ+AÈÐ+AÓ+]×+hÑ+hÓ+jˆDÔ(Ø,2Ô)Ø+0Ô(Ø×"Ñ" D×$@Ñ$@Ð@Ð@r6   c               ó    € V ^8„  d   QhRRRR/# ©r   Úx_flatútorch.TensorrK   r1   )r2   s   "r3   r4   r5   Ç   s   € ÷ 
ñ 
 \ð 
°lñ 
r6   c                óŒ  € V P                   '       d   V# V P                  ;'       g2    V P                  ;'       d    VP                  \        P
                  8H  pV P                  pV P                  pV'       d)   V P                  VP                  VP                  4      w  r4\        VV P                  VVV P                  R7      # )z:Apply the learned input transform before quantized matmul.)rp   r    )rD   r/   r0   rN   rR   Úbfloat16rO   rQ   ry   rk   r   rP   r    )rE   r}   Úuse_cached_rotation_dtyperO   rQ   s   &&   r3   Ú_rotate_inputsÚParoLinear._rotate_inputsÇ   s¦   € à×"×"Ð"ØˆMØ$(×$=Ñ$=÷ %
ð %
Ø×/Ñ/×RÐR°F·L±LÄEÇNÁNÑ4Rð 	"ð —
‘
ˆØ×,Ñ,ˆß$Ø$(×$GÑ$GÈÏÉÐW]×WcÑWcÓ$dÑ!ˆEÜ'ØØ�J‰JØØ!Ø—‘ô
ð 	
r6   c               ó    € V ^8„  d   QhRRRR/# r|   r1   )r2   s   "r3   r4   r5   Ú   s   € ÷ ñ  \ð °lñ r6   c                óú  € \        V P                  V P                  V P                  V P                  V P
                  R7      pVP                  VP                  8w  g   VP                  VP                  8w  d(   VP                  VP                  VP                  R7      p\        P                  ! W4      pV P                  e8   W0P                  P                  VP                  VP                  R7      ,           pV# )zEFallback reference path: dequantize AWQ weights and run dense matmul.)ÚqweightÚqzerosrp   r   r    ro   )r   r†   r‡   rp   r   r    rN   rk   rr   rR   Úmatmulr&   )rE   r}   ÚweightÚouts   &&  r3   Ú_forward_denseÚParoLinear._forward_denseÚ   s¨   € ä Ø—L‘LØ—;‘;Ø—;‘;Ø—‘Ø—‘ô
ˆð �<‰<˜6Ÿ<™<Ô'¨6¯=©=¸F¿M¹MÔ+IØ—Y‘Y f§m¡m¸6¿<¹<�YÓHˆFä�lŠl˜6Ó*ˆØ�9‰9Ò ØŸ	™	Ÿ™¨F¯M©MÀÇÁ˜ÓNÕNˆCØˆ
r6   c               ó    € V ^8„  d   QhRRRR/# )r   r}   r~   rK   zOptional[torch.Tensor]r1   )r2   s   "r3   r4   r5   ë   s   € ÷ ,ñ ,¨|ð ,Ð@Vñ ,r6   c           	     óˆ  € VP                   P                  R8w  d   R# VP                  \        P                  \        P
                  39   d   VP                  M\        P                  pVP                  V8X  d   VP                  4       '       d   TM*VP                  VP                   VR7      P                  4       pV P                  ;'       g(    V P                  ;'       d    V\        P
                  8H  pV'       d6   V P                  VP                   V4       V P                  pV P                  pMöV P                  pVP                   VP                   8w  g(   VP                  V8w  g   VP                  4       '       g,   VP                  VP                   VR7      P                  4       pV P                  pVen   VP                   VP                   8w  g(   VP                  V8w  g   VP                  4       '       g,   VP                  VP                   VR7      P                  4       p\        VP                  RVP                   R,          4      V P"                  VV P$                  \&        V P(                  R7      pVe	   Wv,           pVP                  VP                  8w  d   VP                  VP                  R7      pV# )zGFast path that feeds rotated activations into the AWQ CUDA GEMM kernel.ÚcudaNro   )r,   )rN   éÿÿÿÿ)rk   ÚtyperN   rR   rS   r€   rq   rr   rs   r-   r.   ru   rp   r&   r   ÚreshapeÚshaper†   r‡   rc   r,   )rE   r}   Úcompute_dtypeÚkernel_inputÚuse_cached_runtime_dtypeÚkernel_scalesÚkernel_biasrŠ   s   &&      r3   Ú_forward_cuda_awq_kernelÚ#ParoLinear._forward_cuda_awq_kernelë   s.  € à�=‰=×Ñ Ô'Ùà(.¯©¼¿¹ÌÏÉÐ8WÔ(W˜ŸšÔ]b×]jÑ]jˆð �|‰|˜}Ô,°×1EÑ1E×1GÒ1Gñ à—‘ &§-¡-°}�ÓE×PÑPÓRð 	ð
 $(×#;Ñ#;÷ $
ð $
Ø×.Ñ.×RÐR°=ÄEÇNÁNÑ3Rð 	!÷ $Ø×&Ñ& |×':Ñ':¸MÔJØ ŸK™KˆMØŸ)™)‰Kà ŸK™KˆMà×$Ñ$¨×(;Ñ(;Ô;Ø ×&Ñ&¨-Ô7Ø$×2Ñ2×4Ò4à -× 0Ñ 0¸×8KÑ8KÐS`Ð 0Ó a× lÑ lÓ n�ØŸ)™)ˆKàÒ'Ø ×'Ñ'¨<×+>Ñ+>Ô>À+×BSÑBSÐWdÔBdÐlw÷  mFñ  mF÷  mHò  mHà)Ÿn™n°L×4GÑ4GÈ}˜nÓ]×hÑhÓj�Ü$Ø× Ñ   \×%7Ñ%7¸Õ%;Ó<Ø�L‰LØØ�K‰KÜ"Ø—‘ô
ˆð Ò"ØÕ#ˆCØ�9‰9˜Ÿ™Ô$Ø—&‘&˜vŸ|™|�&Ó,ˆCØˆ
r6   c               ó   € V ^8„  d   QhRR/# )r   Úxr~   r1   )r2   s   "r3   r4   r5     s   € ÷ +ñ +˜ñ +r6   c                óÄ  € VP                   RR V P                  3,           pV P                  V4      ^ 8X  d   V P                  V4      # VP	                  RVP                   R,          4      pV P                  V4      pV P                  V4      pVf   V P                  V4      pV P                  '       d   V P                  P                  W5R7      pVP	                  V4      # )zHRotate inputs, run quantized matmul, then apply adapters in input space.N)rœ   rŠ   r�   )
r“   r%   Ú
input_rowsÚempty_linear_outputr’   r‚   r™   r‹   r)   Úapply)rE   rœ   Úoriginal_shaper}   ÚrotatedrŠ   s   &&    r3   ÚforwardÚParoLinear.forward  s¿   € àŸ™  "˜¨×):Ñ):Ð(<Õ<ˆØ�?‰?˜1Ó Ô"ð ×+Ñ+¨AÓ.Ð.Ø—‘˜2˜qŸw™w r�{Ó+ˆØ×%Ñ% fÓ-ˆà×+Ñ+¨GÓ4ˆØŠ;Ø×%Ñ% gÓ.ˆCà�<�<ˆ<Ø—,‘,×$Ñ$ vÐ$Ó7ˆCà�{‰{˜>Ó*Ð*r6   )rD   r<   r;   r>   r=   r0   r.   r&   r/   r-   rQ   r,   r+   rP   rp   rO   )r�   é   é    é@   é€   ):Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   rB   ÚSUPPORTS_BACKENDSr
   ÚPAROÚSUPPORTS_METHODSr	   Ú	PAROQUANTÚSUPPORTS_FORMATSÚSUPPORTS_BITSÚSUPPORTS_GROUP_SIZEÚSUPPORTS_DESC_ACTÚSUPPORTS_SYMÚSUPPORTS_SHARDSÚSUPPORTS_TRAININGÚSUPPORTS_AUTO_PADDINGÚ!SUPPORTS_IN_FEATURES_DIVISIBLE_BYÚ"SUPPORTS_OUT_FEATURES_DIVISIBLE_BYr   ÚALLÚSUPPORTS_DEVICESr   ÚSUPPORTS_PLATFORMrR   Úint32ÚSUPPORTS_PACK_DTYPESr   ÚSUPPORTS_ADAPTERSrS   r€   ÚSUPPORTS_DTYPESÚREQUIRES_FORMAT_V2Ú
QUANT_TYPEr   Ú_PAROQUANT_CACHE_RUNTIME_DTYPEÚ(_PAROQUANT_AUTO_CACHE_BF16_RUNTIME_DTYPEÚ_PAROQUANT_CACHE_ROTATION_DTYPEÚ)_PAROQUANT_AUTO_CACHE_BF16_ROTATION_DTYPEr@   rC   rX   Úclassmethodr^   re   rY   ru   ry   r‚   r‹   r™   r£   Ú__static_attributes__Ú__classcell__)rG   s   @r3   r   r   )   s8  ø† ÙQà ×/Ñ/Ð0ÐØŸ™�}ÐØ×(Ñ(¨"Ð-ÐØ�C€MÚ/ÐØ˜u˜ÐØ�6€LØ€OØÐØ!ÐØ)*¨Ð%Ø*+¨Ð&àŸ
™
�|ÐØ!Ÿ™˜ÐØ!ŸK™K˜=ÐØ˜ÐØ—}‘} e§n¡nÐ5€OàÐØ €Jð Ø"'§+¡+ØØ!&ØØ%Ø$BØ.VØ%DØ/X÷#1'ò 1'õf1õ6Xð ôó ðõ
õ,õNõAõ&
õ&õ",÷\+ó +r6   r   )&r­   Ú
__future__r   Útypingr   r   rR   Úadapter.adapterr   r   Úmodels._constr   r   Úquantizationr	   r
   Ú$quantization.awq.utils.packing_utilsr   Úutils.backendr   Ú	utils.envr   Úutils.paroquantr   r   r   Úgemm_awqr   r   Ú	torch_awqr   rc   rÅ   rÆ   rÇ   rÈ   r   Ú__all__r1   r6   r3   Ú<module>rØ      s‘   ðñ 4å "ç "ã ç ,ß -ß *Ý CÝ $Ý !ß nÑ nß 8Ý %ð Ð Ù!)Ð*SÐ]bÔ!cÐ Ù+3Ø7Àô,Ð (ñ #+Ð+UÐ_dÔ"eÐ Ù,4Ø8À$ô-Ð )ô
A+�ô A+ðH ˆ.‚r6   