+
    "Ý³j  ã                   ó˜   € ^ RI t ^ RIt]! ] P                  ! RR4      4      tR R ltR R ltR R	 ltR
RR]/R R lltR]/R R llt	R# )é    NÚ!GPTQMODEL_NPU_CHOLESKY_BLOCK_SIZEÚ64c                ó(   € V ^8„  d   QhR\         RR/# )é   ÚmessageÚreturnN)Ústr)Úformats   "Úb/home/luca/screen-checking/.venv/lib/python3.14/site-packages/gptqmodel/quantization/npu_linalg.pyÚ__annotate__r      s   € ÷ )ñ )¤ð )¨ñ )ó    c                 ó@   € \         P                  P                  V 4      h)N)ÚtorchÚ_CÚ_LinAlgError)r   s   &r   Ú_raise_linalg_errorr      s   € Ü
�(‰(×
Ñ
 Ó
(Ð(r   c                óH   € V ^8„  d   QhR\         P                  R\        RR/# )r   ÚmatrixÚop_namer   N)r   ÚTensorr	   )r
   s   "r   r   r      s*   € ÷ gñ g¤E§L¡Lð g¼3ð gÀ4ñ gr   c                 ó�  € V P                   ^8w  g*   V P                  ^ ,          V P                  ^,          8w  d%   \        V R\        V P                  4       R24      hV P	                  4       '       g   \        V RV P                   R24      hV P                  P                  R8w  d   \        V RV P                   R24      hR# )r   z' expects a 2D square matrix, got shape Ú.z, expects a floating point matrix, got dtype Únpuz/ is only intended for NPU tensors, got device `z`.N)	ÚndimÚshapeÚ
ValueErrorÚtupleÚis_floating_pointÚ	TypeErrorÚdtypeÚdeviceÚtype)r   r   s   &&r   Ú_validate_square_matrixr#      sµ   € Ø‡{�{�aÔ˜6Ÿ<™<¨�?¨f¯l©l¸1­oÔ=Ü˜G˜9Ð$KÌEÐRX×R^ÑR^ÓL_ÐK`Ð`aÐbÓcÐcØ×#Ñ#×%Ò%Ü˜7˜)Ð#OÐPV×P\ÑP\È~Ð]^Ð_Ó`Ð`Ø‡}�}×Ñ˜UÔ"Ü˜G˜9Ð$SÐTZ×TaÑTaÐSbÐbdÐeÓfÐfñ #r   c                óX   € V ^8„  d   QhR\         P                  R\         P                  /# )r   Úpanelr   )r   r   )r
   s   "r   r   r      s"   € ÷ ñ ¤§¡ð ´%·,±,ñ r   c                 óÈ  € V P                   ^ ,          p\        P                  ! V 4      p\        V4       EF(  pV^ 8X  d   WV3,          pM7W#RV13,          pWV3,          \        P                  ! WU,          4      ,
          p\        \        P                  ! V4      V^ 8„  ,          4      '       g   \        R4       \        P                  ! V4      pWbW33&   V^,           V8  g   K²  V^ 8X  d   W^,           R1V3,          pMFW^,           R1V3,          W#^,           R1RV13,          P                  W#RV13,          4      ,
          pWv,          W#^,           R1V3&   EK+  	  V# )r   Nz@NPU Cholesky failed because the matrix is not positive-definite.)
r   r   Ú
zeros_likeÚrangeÚsumÚboolÚisfiniter   ÚsqrtÚmatmul)r%   ÚsizeÚfactorÚcolÚdiag_sqÚrowÚdiagÚ	numerators   &       r   Ú_cholesky_panel_lowerr5      s+  € Ø�;‰;�q�>€DÜ×Ò˜eÓ$€Fä�T�{ˆØ�!Œ8Ø ˜H•o‰Gà˜d˜s˜d˜Õ#ˆCØ ˜H•o¬¯	ª	°#µ)Ó(<Õ<ˆGä”E—N’N 7Ó+¨w¸©{Õ;×<Ò<ÜÐ bÔcä�zŠz˜'Ó"ˆØˆsˆxÑà��7�TŽ>Ø�aŒxØ!¨¥'¡(¨C -Õ0‘	à!¨¥'¡(¨C -Õ0°6À½'¹(ÀDÀSÀD¸.Õ3I×3PÑ3PÐQWÐ]aÐ^aÐ]aÐXaÕQbÓ3cÕc�	Ø$-Õ$4ˆF˜•7‘8˜S�=Ô!ñ% ð( €Mr   ÚupperFÚ
block_sizec                óp   € V ^8„  d   QhR\         P                  R\        R\        R\         P                  /# )r   r   r6   r7   r   )r   r   r*   Úint)r
   s   "r   r   r   4   s:   € ÷ -'ñ -'Ü�L‰Lð-'ô ð-'ô ð	-'ô
 ‡\�\ñ-'r   c               óP  € \        V R4       V P                  ^ ,          pV^ 8X  d   V P                  4       # \        ^\	        V4      4      p\
        P                  ! V 4      p\        ^ W24       EF  p\        WR,           V4      pWV1WV13,          P                  4       pV'       d0   WEV1RV13,          pWxP                  VP                  4      ,
          p\        V4      p	W”WV1WV13&   Wc8  g   Kƒ  WR1WV13,          p
V'       d;   W¤VR1RV13,          P                  WEV1RV13,          P                  4      ,
          p
\
        P                  P                  V	V
P                  P                  4       RR7      pVP                  WFR1WV13&   EK"  	  V'       d   VP                  # T# )a   
Compute a Cholesky factor on NPU without aten::linalg_cholesky_ex.

torch-npu 2.9 falls back to CPU for torch.linalg.cholesky on this path.
This blocked implementation keeps the dense GPTQ Hessian factorization on
NPU and uses only matmul, elementwise ops, and solve_triangular updates.
Únpu_choleskyNF©r6   )r#   r   ÚcloneÚmaxr9   r   r'   r(   Úminr-   ÚTr5   ÚlinalgÚsolve_triangularÚ
contiguous)r   r6   r7   r.   ÚlowerÚstartÚendr%   ÚpreviousÚpanel_factorÚtrailingÚsolveds   &$$         r   r;   r;   4   s}  € ô ˜F NÔ3à�<‰<˜�?€DØˆq„yØ�|‰|‹~Ðä�Qœ˜J›Ó(€JÜ×Ò˜VÓ$€Eä�q˜$×+ˆÜ�%Õ$ dÓ+ˆØ˜S�y % )Ð+Õ,×2Ñ2Ó4ˆçØ 3˜Y¨¨¨Ð.Õ/ˆHØŸO™O¨H¯J©JÓ7Õ7ˆEä,¨UÓ3ˆØ&2ˆeˆi˜˜Ð"Ñ#àŽ:Ø™d E I˜oÕ.ˆHßØ#¨C©D°&°5°&¨LÕ&9×&@Ñ&@ÀÈSÀyÐRXÐSXÐRXÐGXÕAY×A[ÑA[Ó&\Õ\�ä—\‘\×2Ñ2ØØ—
‘
×%Ñ%Ó'Øð 3ó ˆFð
 &,§X¡XˆE‘$˜˜	�/Ô"ñ+ ,÷. ˆ5�7‰7Ð& Ð&r   c                ód   € V ^8„  d   QhR\         P                  R\        R\         P                  /# )r   r   r7   r   )r   r   r9   )r
   s   "r   r   r   d   s0   € ÷ *ñ *Ü�L‰Lð*ô ð*ô ‡\�\ñ	*r   c               ó  € \        V R4       \        V RVR7      p\        P                  ! V P                  ^ ,          V P
                  V P                  R7      p\        P                  P                  W#RR7      p\        P                  P                  VRR7      w  rV\        P                  ! \        P                  ! V4      4      p\        P                  ! V^ 8H  \        P                  ! V4      V4      pWgP                  ^4      ,          # )a  
Return the upper Cholesky factor of inv(matrix) on NPU.

This matches the GPTQ solver contract used by torch:
    torch.linalg.cholesky(torch.cholesky_inverse(torch.linalg.cholesky(matrix)), upper=True)
while avoiding the torch-npu CPU fallbacks for cholesky and cholesky_inverse.
Únpu_inverse_cholesky_factorF)r6   r7   )r    r!   r<   Úreduced)Úmode)r#   r;   r   Úeyer   r    r!   rA   rB   ÚqrÚsignÚdiagonalÚwhereÚ	ones_likeÚ	unsqueeze)r   r7   rD   ÚidentityÚ	lower_invÚ_r6   Ú	diag_signs   &$      r   rM   rM   d   sº   € ô ˜FÐ$AÔBä˜ u¸ÔD€EÜ�yŠy˜Ÿ™ a�°·±ÀVÇ]Á]ÔS€HÜ—‘×-Ñ-¨eÀUÐ-ÓK€IÜ�|‰|�‰˜y¨yˆÓ9�H€AÜ—
’
œ5Ÿ>š>¨%Ó0Ó1€IÜ—’˜I¨™N¬E¯OªO¸IÓ,FÈ	ÓR€IØ×&Ñ& qÓ)Õ)Ð)r   )
Úosr   r9   ÚgetenvÚ_DEFAULT_CHOLESKY_BLOCK_SIZEr   r#   r5   r;   rM   © r   r   Ú<module>r_      se   ðó 
ã ñ  # 2§9¢9Ð-PÐRVÓ#WÓXÐ õ)õgõð6-'ð ð-'ð 3÷	-'ð`*ð 3÷*ñ *r   