Ë
    (täiÍW  ã                   ó^	  — d dl Z d dlZd dlmZ d dlZd dlZd dlmZ ddlm	Z	m
Z
  e	«       rd dlZd dlmZ d dlmZmZ  ej                   dd«      j#                  «       d	v xr< ej$                  j'                  «       xr  ej$                  j)                  «       d    d
k\  Zer e
«       rd dlmZ  ed«      ZndZej2                  j4                  ej2                  j6                  ej2                  j8                  hZej2                  j<                  ej2                  j>                  ej2                  j@                  ej2                  jB                  ej2                  jD                  ej2                  jF                  hZ$ej2                  jJ                  ej2                  jL                  ej2                  jN                  ej2                  jP                  ej2                  jR                  hZ*ej2                  jV                  ej2                  jX                  ej2                  jZ                  ej2                  j\                  ej2                  j^                  ej2                  j`                  ej2                  jb                  ej2                  jd                  ej2                  jf                  h	Z4e$e*z  e4z  Z5e$e*z  e4z  Z6e$e*z  Z7dejp                  dejp                  de9dejp                  fd„Z:d„ Z;dg fd„Z<g fd„Z=dZ>dZ?d„ Z@d„ ZAd„ ZBd.d„ZCd.d„ZDd.d„ZEd.d„ZFd.d„ZGd.d „ZHd.d!„ZId.d"„ZJd.d#„ZKd.d$„ZLd.d%„ZMd.d&„ZNd.d'„ZOej                   ZPej2                  jf                  eNej2                  jd                  eOej2                  j8                  eMej2                  jD                  eCej2                  jB                  eDej2                  j@                  eEej2                  j>                  eFej2                  j<                  eGej2                  jR                  eHej2                  jP                  eIej2                  jN                  eJej2                  jL                  eKej2                  jJ                  eLiZQ eReQj§                  «       «      ZTd(„ ZUd)„ ZV G d*„ d+ej                  j®                  «      ZX G d,„ d-ej²                  «      ZZy)/é    N)Únullcontexté   )Úis_accelerate_availableÚis_kernels_available)Úinit_empty_weights)Úadd_hook_to_moduleÚremove_hook_from_moduleÚDIFFUSERS_GGUF_CUDA_KERNELSÚfalse)Ú1ÚtrueÚyesé   )Ú
get_kernelzIsotr0py/ggmlÚxÚqweightÚqweight_typeÚreturnc                 ó®  — |t         v rt        |«      }| |j                  z  S |t        v r‰t        j
                  |   \  }}|j                  d   |j                  d   |z  |z  f}t        j                  ||g|¢­Ž }| |j                  | j                  «      j                  z  }|j                  «       S t	        j                  |«      }t        d|› �«      ‚)Nr   é   z$Unsupported GGUF quantization type: )ÚUNQUANTIZED_TYPESÚdequantize_gguf_tensorÚTÚDEQUANT_TYPESÚggufÚGGML_QUANT_SIZESÚshapeÚopsÚggml_dequantizeÚtoÚdtypeÚGGMLQuantizationTypeÚNotImplementedErrorÚ	as_tensor)r   r   r   ÚweightÚ
block_sizeÚ	type_sizer   Úys           ún/Volumes/fast/ai/experiments/MLX_z-image/.venv/lib/python3.12/site-packages/diffusers/quantizers/gguf/utils.pyÚ_fused_mul_mat_ggufr*   O   sÏ   € àÔ(Ñ(Ü'¨Ó0ˆØ�6—8‘8‰|Ðð ”}Ñ$Ü $× 5Ñ 5°lÑ CÑˆ
�IØ—‘˜qÑ! 7§=¡=°Ñ#3°yÑ#@À:Ñ#MÐNˆÜ×$Ñ$ W¨lÐC¸UÒCˆØ�—	‘	˜!Ÿ'™'Ó"×$Ñ$Ñ$ˆð �;‰;‹=Ðô ×0Ñ0°Ó>ˆÜ!Ð$HÈÈÐ"WÓXÐXó    c                 ó$  — t        t        j                  | j                  j                  «      }| j
                  }i }t        j                  |j                  «      }|j                  «       D ]  }||j                  v sŒ||   ||<   Œ  |di |¤Ž}|S )a  
    Creates a new hook based on the old hook. Use it only if you know what you are doing ! This method is a copy of:
    https://github.com/huggingface/peft/blob/748f7968f3a31ec06a1c2b0328993319ad9a150a/src/peft/utils/other.py#L245 with
    some changes
    © )ÚgetattrÚ
accelerateÚhooksÚ	__class__Ú__name__Ú__dict__ÚinspectÚ	signatureÚ__init__ÚkeysÚ
parameters)Úold_hookÚold_hook_clsÚold_hook_attrÚfiltered_old_hook_attrÚold_hook_init_signatureÚkÚnew_hooks          r)   Ú_create_accelerate_new_hookr@   n   s‘   € ô œ:×+Ñ+¨X×-?Ñ-?×-HÑ-HÓI€LØ×%Ñ%€MØÐÜ%×/Ñ/°×0EÑ0EÓFÐØ×ÑÖ!ˆØÐ'×2Ñ2Ò2Ø(5°aÑ(8Ð" 1Ò%ð "ñ Ñ5Ð4Ñ5€HØ€Or+   Ú c                 óH  — d„ }t        | j                  «       «      }|sy | j                  «       D ]ã  \  }}||z   dz   }	t        ||||	|«       t	        |t
        j                  «      sŒ8 |||	«      sŒB||vsŒGt        «       rt        nt        }
 |
«       5  t        |j                  |j                  |j                  d u|¬«      | j                  |<   d d d «       t        |«      | j                  |   _        | j                  |   j#                  d«       Œå | S # 1 sw Y   ŒHxY w)Nc                 ó>   — |dz   }|| v xr t        | |   t        «      S )Nr%   )Ú
isinstanceÚGGUFParameter)Ú
state_dictÚprefixÚ
weight_keys      r)   Ú_should_convert_to_ggufz:_replace_with_gguf_linear.<locals>._should_convert_to_gguf€   s(   € Ø˜hÑ&ˆ
Ø˜ZÐ'Ò]¬J°zÀ*Ñ7MÌ}Ó,]Ð]r+   Ú.)Úcompute_dtypeF)ÚlistÚchildrenÚnamed_childrenÚ_replace_with_gguf_linearrD   ÚnnÚLinearr   r   r   Ú
GGUFLinearÚin_featuresÚout_featuresÚbiasÚ_modulesÚtypeÚ
source_clsÚrequires_grad_)ÚmodelrK   rF   rG   Úmodules_to_not_convertrI   Úhas_childrenÚnameÚmoduleÚmodule_prefixÚctxs              r)   rO   rO      s  € ò^ô ˜Ÿ™Ó(Ó)€LÙØà×,Ñ,Ö.‰ˆˆfØ ™¨Ñ+ˆÜ! &¨-¸À]ÐTjÔkô �vœrŸy™yÕ)Ù'¨
°MÕBØÐ2Ò2ä(?Ô(AÕ$Ä{ˆCÙ•Ü'1Ø×&Ñ&Ø×'Ñ'Ø—K‘K tÐ+Ø"/ô	(�—‘˜tÑ$÷ ô /3°6«lˆE�N‰N˜4Ñ Ô+à�N‰N˜4Ñ ×/Ñ/°Õ6ð' /ð* €L÷ �ús   Â=DÄD!	c                 óô  — | j                  «       D �]W  \  }}t        |t        «      �r||v�r|j                  j                  }t        |dd «      }t        «       rt        nt        } |«       5  t        j                  |j                  |j                  |j                  d u|¬«      }d d d «       t        j                  t        |j                  «      «      _        |�||_        t!        |d«      r.|j"                  }t%        |«      }	t'        |«       t)        ||	«       |j+                  |«       || j,                  |<   t/        |j1                  «       «      }
|
s�ŒLt3        ||«       �ŒZ | S # 1 sw Y   ŒÇxY w)NrU   )ÚdeviceÚ_hf_hook)rN   rD   rR   r%   rb   r.   r   r   r   rP   rQ   rS   rT   rU   Ú	Parameterr   Úhasattrrc   r@   r	   r   r    rV   rL   rM   Ú#_dequantize_gguf_and_restore_linear)rZ   r[   r]   r^   rb   rU   r`   Ú
new_moduler9   r?   r\   s              r)   rf   rf       s2  € Ø×,Ñ,×.‰ˆˆfÜ�fœjÕ)¨dÐ:PÒ.PØ—]‘]×)Ñ)ˆFÜ˜6 6¨4Ó0ˆDä(?Ô(AÕ$Ä{ˆCÙ•ÜŸY™YØ×&Ñ&Ø×'Ñ'Ø—K‘K tÐ+Ø!ô	�
÷ ô !#§¡Ô-CÀFÇMÁMÓ-RÓ SˆJÔØÐØ"&�
”ô �v˜zÔ*Ø!Ÿ?™?�Ü6°xÓ@�ä'¨Ô/Ü" :¨xÔ8à�M‰M˜&Ô!Ø#-ˆE�N‰N˜4Ñ ä˜FŸO™OÓ-Ó.ˆÛÜ/°Ð8NÖOð= /ð@ €L÷5 �ús   Á.:E.Å.E7	é   é   c                 óø   — | j                  t        j                  «      j                  t        j                  «      } | d d …df   | d d …df   dz  z  | d d …df   dz  z  | d d …df   dz  z  j                  d«      S )Nr   r   é   é   é   r   é   )ÚviewÚtorchÚuint8r    Úint32Ú	unsqueeze)r   s    r)   Ú	to_uint32rt   Í   so   € Ø	�‰Œu�{‰{Ó×ÑœuŸ{™{Ó+€AØŠa�ˆd‰G�aš˜1˜‘g ‘lÑ" Q¢q¨! t¡W°¡]Ñ2°Q²q¸!°t±WÀ±]ÑB×MÑMÈaÓPÐPr+   c                 ó†   — | j                   d   }t        |«      |t        |«      z
  gz   }t        j                  | |d¬«      S )Nr   ©Údim)r   rL   Úsumrp   Úsplit)ÚblocksÚargsÚn_maxÚdimss       r)   Úsplit_block_dimsr~   Ò   s<   € Ø�L‰L˜‰O€EÜ�‹:˜¤ T£Ñ*Ð+Ñ+€DÜ�;‰;�v˜t¨Ô+Ð+r+   c                 óÊ  — | j                   d   }| j                  t        j                  «      } | j	                  |ddf«      } t        j
                  | | j                   d   dz  d¬«      \  }}}t        j                  |dz  |dz  |dz	  d	z  z  gd
¬«      }t        j                  |dz  |dz	  |dz	  d	z  z  gd
¬«      }|j	                  |df«      |j	                  |df«      fS )Nr   r   é   éþÿÿÿrv   é?   é   rl   é0   éÿÿÿÿrk   )r   ro   rp   rq   Úreshapery   Úcat)ÚscalesÚn_blocksÚdÚmÚm_dÚscÚmins          r)   Úget_scale_minr�   Ø   sÕ   € Ø�|‰|˜A‰€HØ�[‰[œŸ™Ó%€FØ�^‰^˜X q¨!Ð,Ó-€Fä—‘˜F F§L¡L°Ñ$4¸Ñ$9¸rÔB�I€A€qˆ#ä	�‰�A˜‘H˜s T™z¨q°A©v¸©oÑ>Ð?ÀRÔ	H€BÜ
�)‰)�Q˜‘X  q¡¨a°1©f¸©_Ñ=Ð>ÀBÔ
G€Cà�J‰J˜ !�}Ó% s§{¡{°H¸a°=Ó'AÐBÐBr+   c                 óÄ   — t        | d«      \  }}|j                  t        j                  «      j	                  |«      }|j                  t        j
                  «      }||z  S )Nrl   )r~   ro   rp   Úfloat16r    Úint8)rz   r&   r'   r!   rŠ   r   s         r)   Údequantize_blocks_Q8_0r“   å   sJ   € Ü˜F AÓ&�D€A€qØ	�‰Œu�}‰}Ó× Ñ  Ó'€AØ	�‰Œu�z‰zÓ€AØˆq‰5€Lr+   c                 ó  — | j                   d   }t        | ddd«      \  }}}}|j                  t        j                  «      j                  |«      }|j                  t        j                  «      j                  |«      }t        |«      }|j                  |df«      t        j                  d|j                  t        j                  ¬«      j                  dd«      z	  }|j                  |dd|dz  f«      t        j                  ddg|j                  t        j                  ¬«      j                  dddd«      z	  }	|dz  j                  t        j                  «      }|	dz  j                  |df«      }	|	|dz  z  }||z  |z   S )	Nr   rl   r€   r   é    ©rb   r!   r…   rƒ   )r   r~   ro   rp   r‘   r    rt   r†   Úarangerb   rr   Útensorrq   )
rz   r&   r'   r!   r‰   rŠ   r‹   ÚqhÚqsÚqls
             r)   Údequantize_blocks_Q5_1rœ   ì   s>  € Ø�|‰|˜A‰€Hä# F¨A¨q°!Ó4�L€A€qˆ"ˆbØ	�‰Œu�}‰}Ó× Ñ  Ó'€AØ	�‰Œu�}‰}Ó× Ñ  Ó'€AÜ	�2‹€Bà	�‰�X˜q�MÓ	"¤e§l¡l°2¸a¿h¹hÌeÏkÉkÔ&Z×&bÑ&bÐcdÐfhÓ&iÑ	i€BØ	�‰�X˜r 1 j°A¡oÐ6Ó	7¼5¿<¹<Ø	
ˆAˆ�q—x‘x¤u§{¡{ô<ç�gˆa��A�qÓñ
€Bð ˆq‰&�‰”U—[‘[Ó	!€BØ
ˆt‰)×	Ñ	˜h¨˜^Ó	,€Bà	ˆr�Q‰w‰€BØ�‰F�a‰<Ðr+   c                 óÚ  — | j                   d   }t        | dd«      \  }}}|j                  t        j                  «      j                  |«      }t        |«      }|j                  |d«      t        j                  d|j                  t        j                  ¬«      j                  dd«      z	  }|j                  |dd|dz  «      t        j                  ddg|j                  t        j                  ¬«      j                  dddd«      z	  }|dz  j                  t        j                  «      }|dz  j                  |d«      }||dz  z  j                  t        j                  «      d	z
  }||z  S )
Nr   rl   r€   r   r•   r–   r…   rƒ   rm   )r   r~   ro   rp   r‘   r    rt   r†   r—   rb   rr   r˜   rq   r’   )	rz   r&   r'   r!   r‰   rŠ   r™   rš   r›   s	            r)   Údequantize_blocks_Q5_0rž   ÿ   s%  € Ø�|‰|˜A‰€Hä  ¨¨AÓ.�I€A€rˆ2Ø	�‰Œu�}‰}Ó× Ñ  Ó'€AÜ	�2‹€Bà	�‰�H˜aÓ	 ¤E§L¡L°¸A¿H¹HÌEÏKÉKÔ$X×$`Ñ$`ÐabÐdfÓ$gÑ	g€BØ	�‰�H˜b ! Z°1¡_Ó	5¼¿¹Ø	
ˆAˆ�q—x‘x¤u§{¡{ô:ç�gˆa��A�qÓñ
€Bð ˆq‰&�‰”U—[‘[Ó	!€BØ
ˆt‰)×	Ñ	˜X rÓ	*€Bà
��a‘‰.×	Ñ	œUŸZ™ZÓ	(¨2Ñ	-€BØˆr‰6€Mr+   c                 óî  — | j                   d   }t        | dd«      \  }}}|j                  t        j                  «      j                  |«      }|j                  t        j                  «      j                  |«      }|j                  |dd|dz  f«      t        j                  ddg|j                  t        j                  ¬«      j                  dddd«      z	  }|dz  j                  |d«      }||z  |z   S )Nr   rl   r…   r   r€   r–   rƒ   )
r   r~   ro   rp   r‘   r    r†   r˜   rb   rq   )rz   r&   r'   r!   r‰   rŠ   r‹   rš   s           r)   Údequantize_blocks_Q4_1r      sÑ   € Ø�|‰|˜A‰€Hä ¨¨1Ó-�H€A€qˆ"Ø	�‰Œu�}‰}Ó× Ñ  Ó'€AØ	�‰Œu�}‰}Ó× Ñ  Ó'€Aà	�‰�X˜r 1 j°A¡oÐ6Ó	7¼5¿<¹<Ø	
ˆAˆ�q—x‘x¤u§{¡{ô<ç�gˆa��A�qÓñ
€Bð ˆt‰)×	Ñ	˜X rÓ	*€Bà�‰F�a‰<Ðr+   c                 óÄ  — | j                   d   }t        | d«      \  }}|j                  t        j                  «      j                  |«      }|j                  |dd|dz  f«      t        j                  ddg|j                  t        j                  ¬«      j                  d«      z	  }|dz  j                  |df«      j                  t        j                  «      d	z
  }||z  S )
Nr   rl   r…   r   r€   r–   ©r   r   rl   r   rƒ   rk   )r   r~   ro   rp   r‘   r    r†   r˜   rb   rq   r’   )rz   r&   r'   r!   r‰   rŠ   rš   s          r)   Údequantize_blocks_Q4_0r£   !  s»   € Ø�|‰|˜A‰€Hä˜V QÓ'�E€A€rØ	�‰Œu�}‰}Ó× Ñ  Ó'€Aà	�‰�X˜r 1 j°A¡oÐ6Ó	7¼5¿<¹<Ø	
ˆAˆ�q—x‘x¤u§{¡{ô<ç�gˆlÓñ
€Bð ˆt‰)×	Ñ	˜h¨˜^Ó	,×	/Ñ	/´·
±
Ó	;¸aÑ	?€BØˆr‰6€Mr+   c                 óÖ  — | j                   d   }t        | t        dz  t        dz  t        dz  «      \  }}}}|j                  t        j
                  «      j                  |«      }|j                  t        j                  «      j                  |«      }||z  j                  |t        dz  df«      }|j                  |dddf«      t	        j                  ddg|j                  t        j                  ¬«      j                  d	«      z	  }|d
z  j                  |ddf«      }|j                  |dddf«      t	        j                  g d¢|j                  t        j                  ¬«      j                  d«      z	  }|dz  j                  |ddf«      }||dz  z  j                  t        j
                  «      dz
  }	|	j                  |t        dz  df«      }	||	z  j                  |t        f«      S )Nr   rl   r€   rm   r   r…   é@   r–   r¢   rƒ   r•   ©r   rl   r€   é   ©r   r   r€   r   r   )r   r~   ÚQK_Kro   rp   r’   r    r‘   r†   r˜   rb   rq   )
rz   r&   r'   r!   r‰   r›   r™   rˆ   rŠ   Úqs
             r)   Údequantize_blocks_Q6_Kr«   .  s²  € Ø�|‰|˜A‰€Hô 	˜¤¨¡¬D°A©I´t¸r±zÓBñØ
Ø
ØØ	ð �[‰[œŸ™Ó$×'Ñ'¨Ó.€FØ	�‰Œu�}‰}Ó× Ñ  Ó'€AØ	
ˆV‰×Ñ˜h¬°©
°AÐ6Ó7€Aà	�‰�X˜r 1 bÐ)Ó	*¬e¯l©l¸A¸q¸6È!Ï(É(ÔZ_×ZeÑZeÔ.f×.nÑ.nØó/ñ 
€Bð ˆt‰)×	Ñ	˜h¨¨BÐ/Ó	0€BØ	�‰�X˜r 1 bÐ)Ó	*¬e¯l©lº<ÐPQ×PXÑPXÔ`e×`kÑ`kÔ.l×.tÑ.tØó/ñ 
€Bð ˆt‰)×	Ñ	˜h¨¨BÐ/Ó	0€BØ	ˆr�Q‰w‰×ÑœEŸJ™JÓ'¨"Ñ,€AØ	�	‰	�8œT R™Z¨Ð,Ó-€Aà�‰E�?‰?˜H¤dÐ+Ó,Ð,r+   c                 ó�  — | j                   d   }t        | ddt        t        dz  «      \  }}}}}	|j	                  t
        j                  «      j                  |«      }|j	                  t
        j                  «      j                  |«      }t        |«      \  }
}||
z  j                  |ddf«      }||z  j                  |ddf«      }|	j                  |dddf«      t        j                  ddg|j                  t
        j                  ¬«      j                  d	«      z	  }|j                  |dddf«      t        j                  dd|j                  t
        j                  ¬«      j                  d
«      z	  }|dz  j                  |ddf«      }|dz  j                  |ddf«      }||dz  z  }||z  |z
  j                  |t        f«      S )Nr   rl   rk   r…   r   r•   r€   r–   r¢   ©r   r   rk   r   rƒ   )r   r~   ÚK_SCALE_SIZEr©   ro   rp   r‘   r    r�   r†   r˜   rb   rq   r—   )rz   r&   r'   r!   r‰   rŠ   Údminrˆ   r™   rš   r�   r‹   Údmr›   rª   s                  r)   Údequantize_blocks_Q5_Kr±   J  s¢  € Ø�|‰|˜A‰€Hä.¨v°q¸!¼\Ì4ÐSTÉ9ÓUÑ€A€tˆV�R˜à	�‰Œu�}‰}Ó× Ñ  Ó'€AØ�9‰9”U—]‘]Ó#×&Ñ& uÓ-€Dä˜&Ó!�E€Bˆà	
ˆR‰×Ñ˜( B¨Ð*Ó+€AØ
�‰(×	Ñ	˜X r¨1Ð-Ó	.€Bà	�‰�X˜r 1 bÐ)Ó	*¬e¯l©l¸A¸q¸6È!Ï(É(ÔZ_×ZeÑZeÔ.f×.nÑ.nØó/ñ 
€Bð 
�‰�X˜r 1 bÐ)Ó	*¬e¯l©l¸1¸aÈÏÉÔX]×XcÑXcÔ.d×.lÑ.lØó/ñ 
€Bð ˆt‰)×	Ñ	˜h¨¨BÐ/Ó	0€BØ
ˆt‰)×	Ñ	˜h¨¨BÐ/Ó	0€BØ
ˆb�A‰g‰€Aà�‰E�B‰J×Ñ ¬4Ð 0Ó1Ð1r+   c                 ó”  — | j                   d   }t        | ddt        «      \  }}}}|j                  t        j
                  «      j                  |«      }|j                  t        j
                  «      j                  |«      }t        |«      \  }	}
||	z  j                  |ddf«      }||
z  j                  |ddf«      }|j                  |dddf«      t	        j                  ddg|j                  t        j                  ¬«      j                  d«      z	  }|d	z  j                  |ddf«      }||z  |z
  j                  |t        f«      S )
Nr   rl   r…   r   r•   r€   r–   r¢   rƒ   )r   r~   r®   ro   rp   r‘   r    r�   r†   r˜   rb   rq   r©   )rz   r&   r'   r!   r‰   rŠ   r¯   rˆ   rš   r�   r‹   r°   s               r)   Údequantize_blocks_Q4_Kr³   d  s)  € Ø�|‰|˜A‰€Hä*¨6°1°a¼ÓFÑ€A€tˆV�RØ	�‰Œu�}‰}Ó× Ñ  Ó'€AØ�9‰9”U—]‘]Ó#×&Ñ& uÓ-€Dä˜&Ó!�E€Bˆà	
ˆR‰×Ñ˜( B¨Ð*Ó+€AØ
�‰(×	Ñ	˜X r¨1Ð-Ó	.€Bà	�‰�X˜r 1 bÐ)Ó	*¬e¯l©l¸A¸q¸6È!Ï(É(ÔZ_×ZeÑZeÔ.f×.nÑ.nØó/ñ 
€Bð ˆt‰)×	Ñ	˜h¨¨BÐ/Ó	0€Bà�‰F�R‰K× Ñ  (¬DÐ!1Ó2Ð2r+   c                 óª  — | j                   d   }t        | t        dz  t        dz  d«      \  }}}}|j                  t        j
                  «      j                  |«      }|d d …d d…f   |d d …dd …f   }
}	|	j                  |ddf«      t	        j                  ddg|j                  t        j                  ¬«      j                  d«      z	  }	|	j                  |df«      }	|
j                  |ddf«      t	        j                  g d	¢|j                  t        j                  ¬«      j                  d
«      z	  }
|
j                  |df«      }
|	dz  |
dz  dz  z  }|j                  t        j                  «      dz
  }||z  j                  |ddf«      }|j                  |dddf«      t	        j                  g d	¢|j                  t        j                  ¬«      j                  d«      z	  }|j                  |ddd«      t	        j                  dd|j                  t        j                  ¬«      j                  d«      z	  }|j                  |dt        dz  f«      dz  }|j                  |dt        dz  f«      dz  dz  }|j                  t        j                  «      |dz  j                  t        j                  «      z
  }||z  j                  |t        f«      S )Nr   rk   r€   ri   r   r–   )r   rl   r   rm   r¦   )r   r€   r   rƒ   r   r•   r…   r¨   r­   rl   )r   r~   r©   ro   rp   r‘   r    r†   r˜   rb   rq   r’   r—   )rz   r&   r'   r!   r‰   Úhmaskrš   rˆ   rŠ   ÚlscalesÚhscalesÚdlr›   r™   rª   s                  r)   Údequantize_blocks_Q3_Kr¹   x  sr  € Ø�|‰|˜A‰€Hä+¨F´D¸A±I¼tÀq¹yÈ"ÓMÑ€Eˆ2ˆv�qØ	�‰Œu�}‰}Ó× Ñ  Ó'€Aàša  ! ˜e‘} fªQ°±¨U¡mˆW€GØ�o‰o˜x¨¨AÐ.Ó/´5·<±<ÀÀAÀÈqÏxÉxÔ_d×_jÑ_jÔ3k×3sÑ3sØó4ñ €Gð �o‰o˜x¨˜nÓ-€GØ�o‰o˜x¨¨AÐ.Ó/´5·<±<Ú˜QŸX™X¬U¯[©[ô4ç�gˆiÓñ€Gð �o‰o˜x¨˜nÓ-€GØ˜‰n '¨D¡.°QÑ!6Ñ7€FØ�Y‰Y”u—z‘zÓ" RÑ'€Fà
ˆf‰*×	Ñ	˜x¨¨QÐ/Ó	0€Bà	�‰�X˜r 1 bÐ)Ó	*¬e¯l©lº<ÐPQ×PXÑPXÔ`e×`kÑ`kÔ.l×.tÑ.tØó/ñ 
€Bð 
�‰�x  Q¨Ó	+¬u¯|©|¸A¸qÈÏÉÔY^×YdÑYdÔ/e×/mÑ/mØó0ñ 
€Bð 
�‰�X˜r¤4¨2¡:Ð.Ó	/°!Ñ	3€BØ
�*‰*�h ¤D¨B¡JÐ/Ó
0°1Ñ
4¸Ñ	9€BØ
�‰Œe�j‰jÓ˜R 1™WŸL™L¬¯©Ó4Ñ4€Aà�‰F×Ñ˜X¤tÐ,Ó-Ð-r+   c                 óÂ  — | j                   d   }t        | t        dz  t        dz  d«      \  }}}}|j                  t        j
                  «      j                  |«      }|j                  t        j
                  «      j                  |«      }||dz  z  j                  |t        dz  df«      }	||dz	  z  j                  |t        dz  df«      }
t	        j                  g d¢|j                  t        j                  ¬«      j                  d	«      }|j                  |d
ddf«      |z	  dz  }|j                  |t        dz  df«      }|	|z  |
z
  }|j                  |d
f«      S )Nr   rm   r€   rl   rƒ   r   r¦   r–   r¨   r…   r•   r   )r   r~   r©   ro   rp   r‘   r    r†   r˜   rb   rq   )rz   r&   r'   r!   r‰   rˆ   rš   rŠ   r¯   r¸   ÚmlÚshifts               r)   Údequantize_blocks_Q2_Kr½   ™  s4  € Ø�|‰|˜A‰€Hä*¨6´4¸2±:¼tÀq¹yÈ!ÓLÑ€FˆB��4Ø	�‰Œu�}‰}Ó× Ñ  Ó'€AØ�9‰9”U—]‘]Ó#×&Ñ& uÓ-€Dð ˆv˜‰|Ñ
×	%Ñ	% x´¸±¸QÐ&?Ó	@€BØ
�&˜A‘+Ñ
×	'Ñ	'¨´4¸2±:¸qÐ(AÓ	B€Bä�L‰Lš¨a¯h©h¼e¿k¹kÔJ×RÑRÐS_Ó`€Eà
�*‰*�h  A rÐ*Ó
+¨uÑ
4¸Ñ	9€BØ	�‰�Xœt r™z¨2Ð.Ó	/€BØ	ˆb‰�2‰€Bà�:‰:�x �nÓ%Ð%r+   c                 óº   — | j                  t        j                  «      j                  t        j                  «      dz  j                  t        j
                  «      S )Nrm   )ro   rp   Úint16r    rr   Úfloat32)rz   r&   r'   r!   s       r)   Údequantize_blocks_BF16rÁ   ­  s8   € Ø�K‰KœŸ™Ó$×'Ñ'¬¯©Ó4¸Ñ:×@Ñ@ÄÇÁÓOÐOr+   c                 ó.  — t        j                  g d¢t         j                  | j                  ¬«      }| j                  d   }t        | d«      \  }}|j                  t         j                  «      j                  |«      }|j                  |dd|dz  f«      t        j                  ddg| j                  t         j                  ¬«      j                  d	«      z	  }|d
z  j                  |df«      j                  t         j                  «      }|j                  ddd«      }|j                  d«      }t        j                  |j                  |j                  d   |j                  d   d«      d|«      }|j                  d«      j                  |«      }||z  S )N©i�ÿÿÿi˜ÿÿÿi­ÿÿÿi¿ÿÿÿiÏÿÿÿiÝÿÿÿiêÿÿÿiöÿÿÿr   é   é   é&   é5   éE   éY   éq   ©r!   rb   r   rl   r…   r   r€   r–   r¢   rƒ   rm   )rp   r˜   rÀ   rb   r   r~   ro   r‘   r    r†   rq   Úint64rs   ÚgatherÚexpandÚsqueeze)rz   r&   r'   r!   Úkvaluesr‰   rŠ   rš   s           r)   Údequantize_blocks_IQ4_NLrÑ   µ  s>  € Ü�l‰lÚRÜ�m‰mØ�}‰}ô€Gð
 �|‰|˜A‰€HÜ˜V QÓ'�E€A€rØ	�‰Œu�}‰}Ó× Ñ  Ó'€AØ	�‰�X˜r 1 j°A¡oÐ6Ó	7¼5¿<¹<Ø	
ˆAˆ�v—}‘}¬E¯K©Kô<ç�gˆlÓñ
€Bð ˆr‰'×	Ñ	˜H b˜>Ó	*×	-Ñ	-¬e¯k©kÓ	:€BØ�l‰l˜1˜a Ó$€GØ	�‰�bÓ	€BÜ	�‰�g—n‘n R§X¡X¨a¡[°"·(±(¸1±+¸rÓBÀAÀrÓ	J€BØ	�‰�B‹×	Ñ	˜5Ó	!€BØˆr‰6€Mr+   c                 ó   — t        j                  g d¢t         j                  | j                  ¬«      }| j                  d   }t        | ddt        dz  «      \  }}}}	|j                  t         j                  «      j                  |«      }|j                  t         j                  «      }|j                  |ddf«      t        j                  ddg| j                  t         j                  ¬	«      j                  d
«      z	  }|j                  |ddf«      t        j                  t        t        dz  «      D �
cg c]  }
d|
z  ‘Œ	 c}
| j                  t         j                  ¬	«      j                  d«      z	  }|j                  |df«      dz  }|j                  |df«      dz  }||dz  z  dz
  }||j                  |«      z  j                  |ddf«      }t        j                  ddg| j                  t         j                  ¬	«      j                  dddd«      }|	j                  |dddf«      |z	  }	|	dz  j                  |ddf«      j                  t         j                  «      }	|j                  dddd«      }|	j                  d«      }	t        j                   |j#                  |	j                  d   |	j                  d   |	j                  d   d«      d|	«      }	|	j%                  d«      j                  |«      }	||	z  j                  |d«      S c c}
w )NrÃ   rË   r   rl   r¥   r…   r   r€   r–   )r   r   rl   r•   )r   r…   r   rƒ   r   rm   )rp   r˜   rÀ   rb   r   r~   r©   ro   r‘   r    r¿   r†   rq   ÚrangerÌ   rs   rÍ   rÎ   rÏ   )rz   r&   r'   r!   rÐ   r‰   rŠ   Úscales_hÚscales_lrš   Úirˆ   r¸   Úshifts_qs                 r)   Údequantize_blocks_IQ4_XSrØ   É  s–  € Ü�l‰lÚRÜ�m‰mØ�}‰}ô€Gð
 �|‰|˜A‰€HÜ 0°¸¸A¼tÀr¹zÓ JÑ€A€x�˜2Ø	�‰Œu�}‰}Ó× Ñ  Ó'€AØ�}‰}œUŸ[™[Ó)€HØ×Ñ ¨2¨qÐ 1Ó2´e·l±lØ	
ˆAˆ�v—}‘}¬E¯K©Kô7ç�gˆiÓñ€Hð ×Ñ ¨1¨bÐ 1Ó2´e·l±lÜœd b™jÔ)Ó*Ñ)�1ˆˆQ‹Ð)Ñ*°6·=±=ÌÏÉô7ç�gˆjÓñ€Hð ×Ñ ¨2 Ó/°$Ñ6€HØ×Ñ ¨2 Ó/°$Ñ6€HØ˜( a™-Ñ(¨BÑ.€FØ
ˆf�i‰i˜ÓÑ
×	'Ñ	'¨°2°qÐ(9Ó	:€BÜ�|‰|˜Q ˜F¨6¯=©=ÄÇÁÔL×TÑTÐUVÐXYÐ[\Ð^_Ó`€HØ	�‰�X˜r 1 bÐ)Ó	*¨hÑ	6€BØ
ˆr‰'×	Ñ	˜H b¨"Ð-Ó	.×	1Ñ	1´%·+±+Ó	>€BØ�l‰l˜1˜a  BÓ'€GØ	�‰�bÓ	€BÜ	�‰�g—n‘n R§X¡X¨a¡[°"·(±(¸1±+¸r¿x¹xÈ¹{ÈBÓOÐQRÐTVÓ	W€BØ	�‰�B‹×	Ñ	˜5Ó	!€BØ�‰G×Ñ˜X rÓ*Ð*ùò 	+s   Ä5L
c                 ó(   — g | d d ¢| d   |z  |z  ‘­S )Nr…   r-   )r   r'   r&   s      r)   Ú_quant_shape_from_byte_shaperÚ   ú  s&   € Ø=ˆU�3�BˆZÐ=˜˜r™ iÑ/°*Ñ<Ñ=Ð=r+   c                 ór  — t        | d«      s| S | j                  }t        |   }t        |   \  }}| j	                  «       } | j                  t        j                  «      } t        | j                  ||«      }| j                  «       |z  }| j                  ||f«      } ||||«      }|j                  |«      }|S )NÚ
quant_type)re   rÜ   Údequantize_functionsr   r$   ro   rp   rq   rÚ   r   Únumelr†   )	r˜   rÜ   Ú
dequant_fnr&   r'   r   r‰   rz   Údequants	            r)   r   r   þ  s­   € Ü�6˜<Ô(Øˆà×"Ñ"€JÜ% jÑ1€Jä,¨ZÑ8Ñ€J�	ð ×ÑÓ€Fà�[‰[œŸ™Ó%€FÜ(¨¯©°yÀ*ÓM€Eà�|‰|‹~ Ñ*€HØ�^‰^˜X yÐ1Ó2€Fá˜ ¨YÓ7€GØ�o‰o˜eÓ$€Gà€Nr+   c                   óH   ‡ — e Zd Zdd„Zd„ Zed„ «       Zedˆ fd„	«       Zˆ xZ	S )rE   c                 óØ   — |�|nt        j                  d«      }t         j                  j                  | ||«      }||_        t
        |   \  }}t        |j                  ||«      |_        |S ©Nr   )	rp   ÚemptyÚTensorÚ_make_subclassrÜ   r   rÚ   r   Úquant_shape)ÚclsÚdataÚrequires_gradrÜ   Úselfr&   r'   s          r)   Ú__new__zGGUFParameter.__new__  s^   € ØÐ'‰t¬U¯[©[¸«^ˆÜ�|‰|×*Ñ*¨3°°mÓDˆØ$ˆŒÜ 0°Ñ <Ñˆ
�IÜ7¸¿
¹
ÀIÈzÓZˆÔàˆr+   c                 ót   — t         j                  j                  t         j                  | | j                  «      S ©N)rp   rå   ræ   rê   )rë   s    r)   r$   zGGUFParameter.as_tensor   s%   € Ü�|‰|×*Ñ*¬5¯<©<¸¸t×?QÑ?QÓRÐRr+   c                 ó¶   — | D ]T  }t        |t        «      r$t        |d   t        «      r|d   j                  c S t        |t        «      sŒH|j                  c S  y rã   )rD   rL   rE   rÜ   )r{   Úargs     r)   Ú_extract_quant_typez!GGUFParameter._extract_quant_type#  sN   € ó
 ˆCÜ˜#œtÔ$¬°C¸±F¼MÔ)JØ˜1‘v×(Ñ(Ò(Ü˜#œ}Õ-Ø—~‘~Ò%ð	 ð
 r+   c                 ó€  •— |€i }t         ‰	| �  ||||«      }t        |t        j                  «      r| j                  |«      } | ||¬«      S t        |«      t        t        fv rU| j                  |«      }|D �cg c](  }t        |t        j                  «      r
 | ||¬«      n|‘Œ* }} t        |«      |«      S |S c c}w )N)rÜ   )	ÚsuperÚ__torch_function__rD   rp   rå   rñ   rW   rL   Útuple)
rè   ÚfuncÚtypesr{   ÚkwargsÚresultrÜ   r   Úwrappedr1   s
            €r)   rô   z GGUFParameter.__torch_function__/  sº   ø€ àˆ>ØˆFä‘Ñ+¨D°%¸¸vÓFˆä�fœeŸl™lÔ+Ø×0Ñ0°Ó6ˆJÙ�v¨*Ô5Ð5ä�&‹\œd¤E˜]Ñ*à×0Ñ0°Ó6ˆJÙdjÓkÑdjÐ_`¼
À1ÄeÇlÁlÔ8S‘s˜1¨Õ4ÐYZÑZÐdjˆGÐkØ”4˜“< Ó(Ð(àˆMùò ls   Á9-B;)FN)r-   N)
r2   Ú
__module__Ú__qualname__rì   r$   Ústaticmethodrñ   Úclassmethodrô   Ú__classcell__©r1   s   @r)   rE   rE     s6   ø„ óòSð ñ	ó ð	ð ôó ôr+   rE   c                   óŠ   ‡ — e Zd Z	 	 	 d	 dˆ fd„Zdej
                  fd„Zdej
                  fd„Zdej
                  fd„Zˆ xZ	S )rR   c                 óF   •— t         ‰| �  ||||«       || _        || _        y rî   )ró   r6   rK   rb   )rë   rS   rT   rU   rK   rb   r1   s         €r)   r6   zGGUFLinear.__init__D  s'   ø€ ô 	‰Ñ˜ l°D¸&ÔAØ*ˆÔØˆ�r+   Úinputsc                 ó–   — t         �3| j                  j                  r|j                  r| j                  |«      S | j	                  |«      S rî   )r   r%   Úis_cudaÚforward_cudaÚforward_native)rë   r  s     r)   ÚforwardzGGUFLinear.forwardP  s;   € Üˆ?˜tŸ{™{×2Ò2°v·~²~Ø×$Ñ$ VÓ,Ð,Ø×"Ñ" 6Ó*Ð*r+   c                 ó"  — t        | j                  «      }|j                  | j                  «      }| j                  �%| j                  j                  | j                  «      nd }t
        j                  j                  j                  |||«      }|S rî   )	r   r%   r    rK   rU   rp   rP   Ú
functionalÚlinear)rë   r  r%   rU   Úoutputs        r)   r  zGGUFLinear.forward_nativeU  sj   € Ü'¨¯©Ó4ˆØ—‘˜4×-Ñ-Ó.ˆØ37·9±9Ð3Hˆt�y‰y�|‰|˜D×.Ñ.Ô/Èdˆä—‘×$Ñ$×+Ñ+¨F°F¸DÓAˆØˆr+   c                 óú   — | j                   j                  }t        |j                  | j                  «      | j                   |«      }| j
                  �(|| j
                  j                  | j                  «      z  }|S rî   )r%   rÜ   r*   r    rK   rU   )rë   r  rÜ   r  s       r)   r  zGGUFLinear.forward_cuda]  s_   € Ø—[‘[×+Ñ+ˆ
Ü$ V§Y¡Y¨t×/AÑ/AÓ%BÀDÇKÁKÐQ[Ó\ˆØ�9‰9Ð Ø�d—i‘i—l‘l 4×#5Ñ#5Ó6Ñ6ˆFØˆr+   )FNN)r   N)
r2   rû   rü   r6   rp   rå   r  r  r  rÿ   r   s   @r)   rR   rR   C  sM   ø„ ð
 ØØð
ð 
õ
ð+˜eŸl™ló +ð
 U§\¡\ó ð 5§<¡<÷ r+   rR   rî   )[r4   ÚosÚ
contextlibr   r   rp   Útorch.nnrP   Úutilsr   r   r/   r   Úaccelerate.hooksr   r	   ÚgetenvÚlowerÚcudaÚis_availableÚget_device_capabilityÚcan_use_cuda_kernelsÚkernelsr   r   r"   ÚF32ÚF16ÚBF16r   ÚQ4_0ÚQ4_1ÚQ5_0ÚQ5_1ÚQ8_0ÚQ8_1ÚSTANDARD_QUANT_TYPESÚQ2_KÚQ3_KÚQ4_KÚQ5_KÚQ6_KÚKQUANT_TYPESÚIQ1_MÚIQ1_SÚIQ2_XXSÚIQ2_XSÚIQ2_SÚIQ3_XXSÚIQ3_SÚIQ4_XSÚIQ4_NLÚIMATRIX_QUANT_TYPESr   ÚMMVQ_QUANT_TYPESÚMMQ_QUANT_TYPESrå   Úintr*   r@   rO   rf   r©   r®   rt   r~   r�   r“   rœ   rž   r    r£   r«   r±   r³   r¹   r½   rÁ   rÑ   rØ   r   rÝ   rL   r7   ÚSUPPORTED_GGUF_QUANT_TYPESrÚ   r   rd   rE   rQ   rR   r-   r+   r)   Ú<module>r8     sE  ðó Û 	Ý "ã Û Ý ç Bñ ÔÛÝ-ßLð €B‡I�IÐ+¨WÓ5×;Ñ;Ó=ÐAUÐUò 3Ø�
‰
×ÑÓ!ò3à�
‰
×(Ñ(Ó*¨1Ñ-°Ñ2ð ñ
 Ñ0Ô2Ý"á
�_Ó
%�Cà
€Cà×.Ñ.×2Ñ2°D×4MÑ4M×4QÑ4QÐSW×SlÑSl×SqÑSqÐrÐ à×Ñ×"Ñ"Ø×Ñ×"Ñ"Ø×Ñ×"Ñ"Ø×Ñ×"Ñ"Ø×Ñ×"Ñ"Ø×Ñ×"Ñ"ðÐ ð 	×Ñ×"Ñ"Ø×Ñ×"Ñ"Ø×Ñ×"Ñ"Ø×Ñ×"Ñ"Ø×Ñ×"Ñ"ð€ð 	×Ñ×#Ñ#Ø×Ñ×#Ñ#Ø×Ñ×%Ñ%Ø×Ñ×$Ñ$Ø×Ñ×#Ñ#Ø×Ñ×%Ñ%Ø×Ñ×#Ñ#Ø×Ñ×$Ñ$Ø×Ñ×$Ñ$ð
Ð ð % |Ñ3Ð6IÑI€Ø'¨,Ñ6Ð9LÑLÐ Ø&¨Ñ5€ð˜5Ÿ<™<ð °%·,±,ð Ècð ÐV[×VbÑVbó ò>ð" HJÐbdó ðB GIó !ðR €Ø€òQò
,ò
Cóóó&ó&ó
ó-ó82ó43ó(.óB&ó(Póó(+ð< ×(Ñ(Ð à×Ñ×$Ñ$Ð&>Ø×Ñ×$Ñ$Ð&>Ø×Ñ×"Ñ"Ð$:Ø×Ñ×"Ñ"Ð$:Ø×Ñ×"Ñ"Ð$:Ø×Ñ×"Ñ"Ð$:Ø×Ñ×"Ñ"Ð$:Ø×Ñ×"Ñ"Ð$:Ø×Ñ×"Ñ"Ð$:Ø×Ñ×"Ñ"Ð$:Ø×Ñ×"Ñ"Ð$:Ø×Ñ×"Ñ"Ð$:Ø×Ñ×"Ñ"Ð$:ðÐ ñ "Ð"6×";Ñ";Ó"=Ó>Ð ò>òô0*�E—H‘H×&Ñ&ô *ôZ�—‘õ r+   