+
    "Ý³jÚ  ã                   ó|   € ^ RI Ht ^ RIt^ RIHt ^RIHt ^RIHt ^RIH	t	 ]! 4       t
R R ltR	 R
 ltR R ltR# )é    )ÚSequenceN)ÚTensor)Úsetup_logger)ÚIS_ROCM)ÚTORCH_GTE_210c                ó¨   € V ^8„  d   QhR\         R\        R\        R\        P                  R\
        \        \        P                   \        3,          /# )é   ÚinputÚnameÚsample_sizeÚdeviceÚreturn)r   ÚstrÚintÚtorchr   ÚtupleÚfloat)Úformats   "ÚT/home/luca/screen-checking/.venv/lib/python3.14/site-packages/gptqmodel/eora/eora.pyÚ__annotate__r      sN   € ÷ &ñ &Üð&äð&ô ð&ô —‘ð	&ô
 Œ3”—‘œeÐ#Õ$ñ&ó    c                ó&  € V ^ ,          P                  V\        P                  R7      pVP                  4       ^8X  d   VP	                  ^ 4      pVP
                  ^ ,          p\        P                  ! VP                  ^^4      V4      p\        P                  ! V^ R7      P                  4       pVP                  \        P                  R7      pV\        V4      ,          p\        V4      \        V4      \        V4      ,           ,          p	???WXV	3# )z¿Prepare the per-batch covariance contribution required for EoRA.

The contribution remains on the originating device so multi-GPU execution
can accumulate locally before a single merge step.
©r   Údtype)Údim©r   )Útor   Úfloat32r   Ú	unsqueezeÚshapeÚmatmulÚ	transposeÚsumÚdetachr   )
r
   r   r   r   ÚinpÚbatchÚaddsÚadds_sumÚcontributionÚscales
   &&&&      r   Úeora_process_inputr+      sÎ   € ð ��(�+‰+˜V¬5¯=©=ˆ+Ó
9€CØ
‡w�wƒy�A„~Ø�m‰m˜AÓˆà�I‰I�a�L€EÜ�<Š<˜Ÿ™ a¨Ó+¨SÓ1€DÜ�yŠy˜ 1Ô%×,Ñ,Ó.€Hà—;‘;¤U§]¡]�;Ó3€LØ”E˜+Ó&Õ&€Lô �+Ó¤%¨Ó"4´u¸U³|Õ"CÕD€EàˆT�8à Ð%Ð%r   c                ó�   € V ^8„  d   QhR\         \        \        P                  \        3,          ,          R\        P                  /# )r	   Úsegmentsr   )r   r   r   r   r   )r   s   "r   r   r   :   s1   € ÷ ñ ¤(¬5´·±¼uÐ1DÕ+EÕ"Fð Ì5Ï<É<ñ r   c                ó¸   € V '       g   \        R4      hRpV  F8  w  r#Vf   TpK  VP                  \        V4      4       VP                  V4       K:  	  Vf   Q hV# )a”  Combine pre-aggregated EoRA segments using their scale products.

Each segment entry is a tuple ``(total, scale_product)`` where ``total`` is
the sequential accumulation result for that segment starting from zero, and
``scale_product`` is the product of per-batch scale factors encountered in
the same segment.  The function mutates the first segment tensor in place
and returns it as the merged result.
z)EoRA merge requires at least one segment.N)Ú
ValueErrorÚmul_r   Úadd_)r-   ÚresultÚtotalÚscale_products   &   r   Úmerge_eora_segmentsr5   :   s_   € ÷ ÜÐDÓEÐEà"&€FÛ (ÑˆØŠ>ØŠFà�K‰Kœ˜mÓ,Ô-Ø�K‰K˜Öñ !)ð ÒÐÐØ€Mr   c                óÊ   € V ^8„  d   QhR\         R\        R\        P                   R\        R\        P                  R\        P
                  R\        \         \         3,          /# )r	   Ú
w_wq_deltar   Úeigen_scaling_diag_matrixÚrankr   r   r   )r   r   r   r   r   r   r   )r   s   "r   r   r   Q   sl   € ÷ Sñ SÜðSäðSô $)§<¡<ðSô ð	Sô
 �{‰{ðSô —‘ðSô Œ6”6ˆ>ÕñSr   c                óò  € V P                   \        P                  8X  g   Q hVP                  V\        P                  R7      p\
        '       d_   \        '       gS   \        P                  P                  P                  4       p\        P                  P                  P                  RR7       \        P                  P                  V4      w  r‰\        P                  ! V4      P                  4       '       g   \        RV R24      h\        R\!        ^VP#                  4       4      \        P$                  ! \        P                  4      P&                  ,          4      p
VR,          P)                  R4      pWº,          pWŒ8„  p\+        V( P-                  4       P/                  4       4      pV'       d£   \+        V^ 8  P-                  4       P/                  4       4      p\0        P3                  RV R	V R
VP#                  4        RVP/                  4       R RV RV^ ,          P/                  4       R RVR,          P/                  4       R RV
R R24       \        P4                  ! V4      p\        P6                  ! W�,          4      VV&   \        P4                  ! V4      p\        P8                  ! W�,          4      VV&   V	VP;                  ^ 4      ,          pVP;                  ^4      V	P<                  ,          pVP                  \        P                  R7      pVP                  \        P                  R7      p\        P>                  ! V V4      p\        P                  PA                  VRR7      w  pppTpVRV pVRRV13,          p\        P>                  ! VRV1R3,          V4      p\        PB                  ! V4      p\        P6                  ! V4      p\        P>                  ! VV4      P                  VR7      p\        P>                  ! VV4      P                  VR7      p??	???? ??????????\
        '       d6   \        '       g*   \        P                  P                  P                  X4       VV3# )zôCompute EoRA low-rank A/B from the original/quantized weight residual.

When expanding the calibration data size for EoRA, I suggest maintaining
the balance by allocating 50% to general input (C4) and the remaining 50%
to downstream task data.
r   Úmagma)Úbackendz@EoRA covariance eigensolve produced non-finite eigenvalues for `z`.g      ð?g        zEoRA: covariance for `zP` is numerically rank deficient; using a truncated pseudoinverse and discarding Ú/z eigenvalues at or below z.3ez (negative=z, min=z, max=z, rtol=z).r   F)Úfull_matricesN:NNNéÿÿÿÿ)"r   r   r   r   Úfloat64r   r   ÚbackendsÚcudaÚpreferred_linalg_libraryÚlinalgÚeighÚisfiniteÚallÚFloatingPointErrorÚminÚmaxÚnumelÚfinfoÚepsÚ	clamp_minr   r#   ÚitemÚlogÚwarningÚ
zeros_likeÚsqrtÚrsqrtr   ÚTr!   ÚsvdÚdiag) r7   r   r8   r9   r   r   Úraw_scaling_diag_matrixÚoriginal_backendÚLÚQÚrelative_toleranceÚmaximumÚcutoffÚretainedÚdiscarded_countÚnegative_countÚsqrtEigenvaluesÚinvSqrtEigenvaluesÚscaling_diag_matrixÚscaling_matrix_invÚdelta_scaleÚUÚSÚVÚ	lowrank_rÚtruc_sÚtruc_uÚtruc_vÚ
truc_sigmaÚsqrtSÚBÚAs    &&&&&&                          r   Úeora_compute_lorarr   Q   s£  € ð ×ÑœuŸ}™}Ô,Ð,Ð,ð 8×:Ñ:À&ÔPU×P]ÑP]Ð:Ó^Ðçƒw—}“}ä Ÿ>™>×.Ñ.×GÑGÓIÐÜ�‰×Ñ×4Ñ4¸WÐ4ÔEä�<‰<×ÑÐ4Ó5�D€Aä�>Š>˜!Ó× Ñ ×"Ò"Ü Ð#cÐdhÐciÐikÐ!lÓmÐmô ˜S¤# a¨¯©«Ó"3´e·k²kÄ%Ç-Á-Ó6P×6TÑ6TÕ"TÓUÐØ��e�o‰o˜cÓ"€GØÕ)€FØ‰z€Hä˜H˜9Ÿ/™/Ó+×0Ñ0Ó2Ó3€OßÜ˜a !™eŸ[™[›]×/Ñ/Ó1Ó2ˆÜ�‰Ø$ T Fð +Ø-Ð.¨a°·±³	¨{Ð:SÐTZ×T_ÑT_ÓTaÐbeÐSfð gØ'Ð(¨¨q°­t¯y©y«{¸3Ð.?¸vÀaÈÅeÇjÁjÃlÐSVÐEWð XØ& sÐ+¨2ð/ô	
ô ×&Ò& qÓ)€OÜ %§
¢
¨1­;Ó 7€O�HÑä×)Ò)¨!Ó,ÐÜ#(§;¢;¨q­{Ó#;Ð�xÑ à˜o×7Ñ7¸Ó:Õ:ÐØ+×5Ñ5°aÓ8¸1¿3¹3Õ>Ðà-×0Ñ0´u·}±}Ð0ÓEÐØ+×.Ñ.´U·]±]Ð.ÓCÐä—,’,˜zÐ+>Ó?€Kä�l‰l×Ñ˜{¸%ÐÓ@�G€A€qˆ!Ø€IØˆz�	ˆ]€FØˆq�*�9�*ˆ}Õ€FÜ�\Š\˜!˜J˜Y˜J¨˜MÕ*Ð,>Ó?€FÜ—’˜FÓ#€Jä�JŠJ�zÓ"€EÜ�Š�V˜UÓ#×&Ñ&¨UÐ&Ó3€AÜ�Š�U˜FÓ#×&Ñ&¨UÐ&Ó3€Að 	
ˆ1ˆa��AØÐ+¨_Ð>QÐSeÐgrØ�˜ 
¨E÷ ƒw—}“}Ü�‰×Ñ×4Ñ4Ð5EÔFàˆaˆ4€Kr   )Úcollections.abcr   r   r   Úutils.loggerr   Ú
utils.rocmr   Úutils.torchr   rP   r+   r5   rr   © r   r   Ú<module>rx      s0   ðõ  %ã Ý å 'Ý  Ý 'áƒn€õ&õ>÷.Sr   