+
    "Ý³jl  ã                   ó–   a € R t0 t ^ RIt^ RIHt ]! 4       tRs] ^ k R R ltRR/R R lltRR	R/R
 R llltR R lt	R R lt
R tR# )é    N)Úsetup_loggerc                ó$   € V ^8„  d   QhR\         /# )é   Úreturn)Úbool)Úformats   "Ú[/home/luca/screen-checking/.venv/lib/python3.14/site-packages/gptqmodel/quantization/gar.pyÚ__annotate__r
      s   € ÷ 	ñ 	¤$ñ 	ó    c                  óæ   € \         f8    \        P                  ! \        P                  ! RR.4      RR7       Rs \         # \         #   \         d     Rs \
        P                  R4        \         # i ; i)Ng        g      ð?T)ÚstableFz-Torch: missing argsort with `stable` support.)Ú_HAS_STABLE_ARGSORTÚtorchÚargsortÚtensorÚ	TypeErrorÚlogÚwarn© r   r	   Ú_supports_stable_argsortr      si   € äÒ"ð	FÜ�MŠMœ%Ÿ,š,¨¨S zÓ2¸4Õ@Ø"&Ðô ÐÔÐøô ô 	FØ"'ÐÜ�H‰HÐDÕEÜÐð	Fús   Š0A Á"A0Á/A0Úreturn_valuesFc                óÐ   € V ^8„  d   QhR\         P                  R\        R\        R\         P                  \        \         P                  \         P                  3,          ,          /# )r   Údiag_HÚ	groupsizer   r   )r   ÚTensorÚintr   Útuple)r   s   "r	   r
   r
   &   sO   € ÷ !ñ !Ü�L‰Lð!äð!ô ð	!ô
 ‡\�\”Eœ%Ÿ,™,¬¯©Ð4Õ5Õ5ñ!r   c               óp  € V P                  4       pW1,          pV^ 8X  dl   \        P                  ! ^ V\        P                  V P                  R7      pV'       d0   V\        P                  ! ^ WP
                  V P                  R7      3# V# V RWA,           P                  WA4      pV P                  ;'       d    V^À8*  ;'       d    V^ 8„  pV'       d   \        P                  ! Wa^RRR7      w  r‰M\        P                  ! V^RR7      w  r‰V	P                  \        P                  R7      p	V'       d   W˜3# V	# )zºVectorized within-group permutations.

Optionally returns the sorted diagonal statistics so callers can reuse them
(e.g. to derive max-based group scores without another kernel launch).
©ÚdtypeÚdeviceNT)ÚkÚdimÚlargestÚsorted)r#   Ú
descending©r    )Únumelr   ÚemptyÚlongr!   r    ÚviewÚis_cudaÚtopkÚsortÚto)
r   r   r   ÚnÚ
num_groupsr)   ÚHÚuse_topkÚvaluesÚindicess
   &&$       r	   Úcompute_local_permsr6   &   sô   € ð 	�‰‹€AØ•€JØ�Q„Ü—’˜A˜y´·
±
À6Ç=Á=ÔQˆßØœ%Ÿ+š+ a¨¿,¹,ÈvÏ}É}Ô]Ð]Ð]ØˆàÐ'�Õ'Ð(×-Ñ-¨jÓD€Að �~‰~×DÐD )¨sÑ"2×DÐD°yÀ1±}€HßÜŸ*š* Q¸ÀDÐQUÔV‰ˆ�äŸ*š* Q¨A¸$Ô?‰ˆà�j‰jœuŸz™zˆjÓ*€GßØˆÐØ€Nr   Úprecomputed_valuesc          
      óž   € V ^8„  d   QhR\         P                  R\        R\        R\         P                  R,          R\         P                  /# )r   r   r   Úmetricr7   Nr   )r   r   r   Ústr)r   s   "r	   r
   r
   K   sK   € ÷ )ñ )Ü�L‰Lð)äð)ô ð)ô
 Ÿ™ tÕ+ð)ô ‡\�\ñ)r   c               óž  € V P                  4       pWA,          pV^ 8X  d2   \        P                  ! ^ \        P                  V P                  R7      # VR8X  d   Ve   VR,          pM¤V RWQ,           P                  WQ4      pVR8X  d   VP                  ^R7      P                  pMfVR8X  d   VP                  ^R7      pMLVR8X  d   VP                  ^R7      pM2VR8X  d   VP                  ^R7      P                  pM\        RV 24      h\        4       '       d   \        P                  ! VR	R	R
7      pV# \        P                  ! VR	R7      pV# )u~   
Returns a (num_groups,) LongTensor with the order of groups by a chosen metric.
metric âˆˆ {"max", "mean", "sum", "median"}.
r   ÚmaxN©r#   ÚmeanÚsumÚmedianzUnknown metric: T)r&   r   )r&   ):NNNr   )r(   r   r)   r*   r!   r+   r<   r4   r>   r?   r@   Ú
ValueErrorr   r   )	r   r   r9   r7   r0   r1   Úscoresr2   Úglobal_perms	   &&&$     r	   Úcompute_global_permrD   K   s   € ð 	�‰‹€AØ•€JØ�Q„Ü�{Š{˜1¤E§J¡J°v·}±}ÔEÐEà�„Ð-Ò9Ø# DÕ)‰àÐ+�ZÕ+Ð,×1Ñ1°*ÓHˆà�UŒ?Ø—U‘U˜q�U“\×(Ñ(‰FØ�vÔØ—V‘V �V“]‰FØ�uŒ_Ø—U‘U˜q�U“\‰FØ�xÔØ—X‘X !�X“_×+Ñ+‰FäÐ/°¨xÐ8Ó9Ð9ô  ×!Ò!Ü—m’m F°tÀDÔIˆð Ðô —m’m F°tÔ<ˆØÐr   c                óD   € V ^8„  d   QhR\         R\        P                  /# )r   r   r   )r   r   r   )r   s   "r	   r
   r
   w   s   € ÷ ñ ¼Cð ÄEÇLÁLñ r   c           
     óp  € \        V \        4      '       d[   V ^ ,          P                  p\        P                  ! V  Uu. uF#  qDP                  V\        P                  R7      NK%  	  up^ R7      pM V P                  \        P                  R7      pVP                  w  rgWr8X  g   Q RV RV 24       h\        P                  ! WeP                  R7      V,          P                  V^4      pWX,           VP                  VP                  \        P                  R7      ,          p	V	P                  R4      # u upi )zë
Vectorized:
  - Stack local_perms once (if it's a list) -> (G, S)
  - Add per-group base offsets
  - Reorder groups by global_perm
  - Flatten
Returns a permutation p with the SAME semantics as your original:
  p[new_pos] = old_index
)r!   r    r=   r'   zgroupsize mismatch: got z, local has ©r!   éÿÿÿÿ)Ú
isinstanceÚlistr!   r   Ústackr/   r*   ÚshapeÚaranger+   Úreshape)
Úlocal_permsrC   r   r!   ÚlpÚlocalÚGÚSÚbaseÚperm2ds
   &&&       r	   Úcompose_final_permrV   w   sé   € ô �+œt×$Ò$à˜Q•×&Ñ&ˆÜ—’ÉkÓZÉkÈŸU™U¨&¼¿
¹
˜UÖCÉkÑZÐ`aÔb‰à—‘¤U§Z¡Z�Ó0ˆà�;‰;�D€AØŒ>ÐPÐ5°i°[ÀÈQÈCÐPÓPˆ>ô �LŠL˜§<¡<Ô0°9Õ<×BÑBÀ1ÀaÓH€Dð �l˜KŸN™N°%·,±,ÄeÇjÁj˜NÓQÕR€FØ�>‰>˜"ÓÐùò [s   ¾)D3c                ód   € V ^8„  d   QhR\         P                  R\        R\         P                  /# )r   ÚpermÚtotal_columnsr   )r   r   r   )r   s   "r	   r
   r
   ”   s)   € ÷ *ñ *¤§¡ð *¼Sð *ÄUÇ\Á\ñ *r   c                óÒ   € \        V P                  4       4      pW!8¼  d   V # \        P                  ! VVV P                  V P
                  R7      p\        P                  ! W3^ R7      # )zEAppend identity-mapped tail columns left outside the full GAR groups.r   r=   )r   r(   r   rM   r    r!   Úcat)rX   rY   ÚcoveredÚtails   &&  r	   Úextend_perm_with_tailr^   ”   sV   € ô �$—*‘*“,Ó€GØÔØˆä�<Š<ØØØ�j‰jØ�{‰{ô	€Dô �9Š9�d�\ qÔ)Ð)r   c                ó–   € \         P                  ! V 4      p\         P                  ! V P                  4       V P                  R7      W&   V# )zÝ
Compute the inverse of a permutation vector.

Args:
    perm (Tensor): A 1D tensor containing a permutation of indices.

Returns:
    inv (Tensor): The inverse permutation such that inv[perm] == torch.arange(len(perm)).
rG   )r   Ú
empty_likerM   r(   r!   )rX   Úinvs   & r	   Úinvert_permrb   £   s5   € ô ×
Ò
˜4Ó
 €CÜ—’˜TŸZ™Z›\°$·+±+Ô>€C�IØ€Jr   c                óN   € V ^8„  d   Qh/ ^ \         9   d   \        R,          ;R&   # )r   Nr   )Ú__conditional_annotations__r   )r   s   "r	   r
   r
      s   € ‡�÷ (Ò '”T˜D•[Ñ 'ò r   )r<   )rd   r   Úgptqmodel.utilsr   r   r   r   r6   rD   rV   r^   rb   r
   )rd   s   @r	   Ú<module>rf      s[   øð÷ €å (ñ ƒn€à#'Ð Ó 'õ	ð!ð  ÷	!ñJ)ð
 /3÷)ð )õXõ:*ôr   