
    rcj<                       S SK Jr  S SKrS SKrS SKrS SKJr  S SKJrJ	r	J
r
JrJr  S SKrS SKJr  SSKJr  \S:X  aB  S SKJr  \R,                  R/                  S \" \" \5      R4                  R4                  5      5        S S	KJrJrJrJrJ r J!r!J"r"J#r#  \RH                  " \5      r%S
\ /r& " S S\
5      r' " S S\
5      r( " S S5      r)g)    )annotationsN)OrderedDict)AnyLiteral
NamedTupleTypeVarUnion   )quant_shape_to_byte_shape__main__)Path)GGML_MAX_DIMSGGML_QUANT_SIZESGGUF_DEFAULT_ALIGNMENT
GGUF_MAGICGGUF_VERSIONGGMLQuantizationTypeGGUFValueType
GGUFEndian   c                  r    \ rS rSr% S\S'   S\S'   / rS\S'   S/rS	\S
'   / rS\S'   \" S5      4SS jjr	Sr
g)ReaderField(   intoffsetstrnamezlist[npt.NDArray[Any]]partsz	list[int]datazlist[GGUFValueType]typesNc                .   U R                   (       Gax  S nU R                   S   nU[        R                  :X  Ga  U R                   S   nU[        R                  :X  a^  U R                  U   n[        U[        5      (       a  U" U R                  U   5      $ U Vs/ s H  ob" U R                  U   5      PM     sn$ [        U[        5      (       a-  U R                  U R                  U      R                  5       S   $ U R                  U    VVs/ s H(  o`R                  U   R                  5         H  owPM     M*     snn$ U[        R                  :X  a  U" U R                  S   5      $ U R                  S   R                  5       S   $ g s  snf s  snnf )Nc                2    [        U R                  5       SS9$ )Nutf-8encoding)r   tobytes)xs    8/mnt/workspace/git/llama.cpp/gguf-py/gguf/gguf_reader.py<lambda>&ReaderField.contents.<locals>.<lambda><   s    #aiikG"D    r   r   )	r!   r   ARRAYSTRINGr    
isinstancer   r   tolist)selfindex_or_slice	to_string	main_typesub_typeindicesidxpvs           r)   contentsReaderField.contents:   sT   :::DI

1IM///::b>}333"ii7G!.#66(G)<==FMNgs	$**S/ :gNN  ".#66#zz$))N*CDKKMaPP.2ii.Gk.GsR\R\]`RaRhRhRjBRj.GkkM000 B00zz"~,,.q115  O&  ls   F/F )r2   zint | slicereturnr   )__name__
__module____qualname____firstlineno____annotations__r   r    r!   slicer9   __static_attributes__r;   r,   r)   r   r   (   sE    K I %'E!&
 dD)!#E#5:4[ ( (r,   r   c                  f    \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S\S
'   S\S'   S\S'   S\S'   Srg)ReaderTensore   r   r   r   tensor_typeznpt.NDArray[np.uint32]shaper   
n_elementsn_bytesdata_offsetnpt.NDArray[Any]r    r   fieldr;   N)r=   r>   r?   r@   rA   rC   r;   r,   r)   rE   rE   e   s/    
I%%!!OL
r,   rE   c                     \ rS rSr% SrS\S'   \rS\S'   S\S'   \R                  \
R                  \R                  \
R                  \R                  \
R                  \R                   \
R"                  \R$                  \
R&                  \R(                  \
R*                  \R,                  \
R.                  \R0                  \
R2                  \R4                  \
R6                  \R8                  \
R:                  \R<                  \
R>                  0r S\S	'   SSS
 jjr!\"" S\#RH                  S9r%SS jr&SS jr' S         SS jjr(SS S jjr)S!S jr*      S"S jr+S#S jr,S$S jr-S%S jr.S&S jr/Sr0g)'
GGUFReaderp   IzLiteral['I', 'S']
byte_orderr   	alignmentrK   z%dict[GGUFValueType, type[np.generic]]gguf_scalar_to_npc           
     0   [         R                  " XS9U l        SnU R                  U[         R                  SS9S   [
        :w  a  [        S5      eUS-  nU R                  U[         R                  5      nUS   S-  S:X  a;  SU l        UR                  UR                  R                  U R                  5      5      nUS   nU[        ;  a  [        S	U S
35      e[        R                  S:X  a!  [        R                  n[        R                   nO [        R                   n[        R                  nU R                  S:X  a  UOUU l        [%        5       U l        / U l        X0R+                  [-        USU/S/[.        R0                  /5      5      -  nU R                  U[         R2                  S5      nX0R+                  [-        USUS S /S/[.        R4                  /5      5      -  nX0R+                  [-        USUSS  /S/[.        R4                  /5      5      -  nUu  pU R7                  X:5      nU R9                  X95      u  p;U R&                  R;                  S5      nUb|  UR<                  [.        R0                  /:w  a  [        S5      eUR>                  S   S   U l         U R@                  S:X  d   U R@                  U R@                  S-
  -  S:w  a  [        S5      eX0R@                  -  nUS:w  a  X0R@                  U-
  -  nX0l!        U RE                  X;5        g )N)moder   <)override_orderzGGUF magic invalid   i  Sz"Sorry, file appears to be version z which we cannot handlelittlezGGUF.versionr   zGGUF.tensor_countr
   zGGUF.kv_countzgeneral.alignmentz$Bad type for general.alignment fieldr   z2Invalid alignment: must be a non-zero power of two)#npmemmapr    _getuint32r   
ValueErrorrR   viewdtypenewbyteorderREADER_SUPPORTED_VERSIONSsys	byteorderr   LITTLEBIG	endianessr   fieldstensors_push_fieldr   r   UINT32uint64UINT64_build_fields_build_tensor_infogetr!   r   rS   rK   _build_tensors)r1   pathrV   offstemp_versionversionhost_endianswapped_endiantemp_countstensor_countkv_counttensors_fields	new_alignpaddings                 r)   __init__GGUFReader.__init__   s   IId0	 99T299s9;A>*L122	 yyryy1?U"a' "DO',,\-?-?-L-LT__-]^Lq/33A'Jabcc==H$$++K'^^N %..K'..N+/??c+A{5@]+-  T>L>TUSVYfYmYmXn!opp iibii3  T3FUWVWHY\][^anauau`v!wxx  T?[QRQS_DUXYWZ]j]q]q\r!stt!,!!$1  $66tJKKOO$78	 =#7#7"88 !GHH&__R03DN~~"t~~!9K'LQR&R !UVV'a<NNW,,DD1r,   _DT)boundc                :    U R                   R                  US 5      $ N)rj   rr   )r1   keys     r)   	get_fieldGGUFReader.get_field   s    {{sD))r,   c                     U R                   U   $ r   )rk   )r1   r7   s     r)   
get_tensorGGUFReader.get_tensor   s    ||C  r,   Nc                4   [        U5      n[        [        R                  " / US9R                  5      nXU-  -   nU R                  X R                  US9S U nUR                  UR                  R                  Uc  U R                  5      5      $ U5      5      $ )N)rb   )	r   r\   emptyitemsizer    ra   rb   rc   rR   )r1   r   rb   countrX   r   end_offsarrs           r)   r^   GGUFReader._get   s     E
rxxE2;;<u,,ii(--E-:6EBxx		...BXtmnn^lmnnr,   c                    UR                   U R                  ;   a%  [        SUR                    SUR                   35      eXR                  UR                   '   U(       a  S$ [	        S UR
                   5       5      $ )Nz
Duplicate z already in list at offset r   c              3  L   #    U  H  n[        UR                  5      v   M     g 7fr   r   nbytes.0parts     r)   	<genexpr>)GGUFReader._push_field.<locals>.<genexpr>   s     %O;4c$++&6&6;   "$)r   rj   KeyErrorr   sumr   )r1   rM   skip_sums      r)   rl   GGUFReader._push_field   sa    ::$Z

|3Nu||n]^^
 ',KK

#qO#%O5;;%O"OOr,   c                    U R                  U[        R                  5      nX R                  US-   [        R                  US   5      4$ )N   r   )r^   r\   rn   uint8)r1   r   slens      r)   _get_strGGUFReader._get_str   s8    yy+YYvz288T!W===r,   c                X  ^ Un/ n[        U5      nUR                  U5        U[         R                  :X  a2  [        U R	                  U5      5      n[        S U 5       5      nXvS/U4$ U R                  R                  U5      nUb,  U R                  X85      n	[        U	R                  5      U	/S/U4$ U[         R                  :X  a  U R                  U[        R                  5      n
U[        U
R                  5      -  nU R                  U[        R                  5      nU[        UR                  5      -  nX/n/ n[        US   5       HJ  nU R!                  X:S   5      u  nnnnUS:X  a  UU-  n[#        U5      mUU-  nUU4S jU 5       -  nX?-  nML     X1-
  XU4$ [%        SU 35      e)Nc              3  L   #    U  H  n[        UR                  5      v   M     g 7fr   r   r   s     r)   r   .GGUFReader._get_field_parts.<locals>.<genexpr>   s     ;FDs4;;''Fr   r
   r   c              3  ,   >#    U  H	  oT-   v   M     g 7fr   r;   )r   r7   	idxs_offss     r)   r   r      s     C#Ios   zUnknown/unhandled field type )r   appendr.   listr   r   rT   rr   r^   r   r   r-   r\   r_   rn   range_get_field_partslenr`   )r1   	orig_offsraw_typeru   r!   gtypespartssizenptypeval	raw_itypealenaparts	data_idxsr7   	curr_size
curr_parts	curr_idxs
curr_typesr   s                      @r)   r   GGUFReader._get_field_parts   s    %'h'UM(((-1$--2E-FF;F;;D!e++''++E2))D)Cszz?SEA355M'''		$		2IC	(())D99T299-DC$$D.7->F#%IT!W~?C?T?TUYef[g?h<	:y*!8Z'EK	*$CCC	! & #V==8@AAr,   c           
        UnU R                  U5      u  p4U[        UR                  UR                  -   5      -  nU R                  U[        R
                  5      nU[        UR                  5      -  nUS   [        :  a  [        SUS    S[         S35      eU R                  U[        R                  US   5      nU[        UR                  5      -  nU R                  U[        R
                  5      nU[        UR                  5      -  nU R                  U[        R                  5      nU[        UR                  5      -  n[        U[        [        U5      SS9X4XVXx// SQ5      $ )Nr   zTensor dimensions count z exceeds GGML_MAX_DIMS ()r$   r%   )r
      rY      )r   r   r   r^   r\   r_   r   r`   rn   r   r   bytes)	r1   r   ru   name_len	name_datan_dimsdims	raw_dtypeoffset_tensors	            r)   _get_tensor_info_field!GGUFReader._get_tensor_info_field  sA    #mmD1HOOi&6&6677 4+FMM""!9}$7q	{BZ[hZiijkll yyryy&)4DKK   IIdBII.	I$$%% 		$		2M(())i W5&	I	
 	
r,   c                   [        U5       H  nUnU R                  U5      u  pVU[        UR                  UR                  -   5      -  nU R	                  U[
        R                  5      nU[        UR                  5      -  nXVU/n[        U5      n	U R                  XS   5      u  ppX-  nU R                  [        U[        [        U5      SS9UU Vs/ s H  oU	-   PM	     snU5      SS9  X-  nM     U$ s  snf )Nr   r$   r%   T)r   )r   r   r   r   r^   r\   r_   r   r   rl   r   r   r   )r1   ru   r   _r   kv_klenkv_kdataraw_kv_typer   r   
field_sizefield_parts
field_idxsfield_typesr7   s                  r)   rp   GGUFReader._build_fields$  s   uAI $d 3GC899D))D"))4KC**++D-4,LEE
I?C?T?TUYgh[i?j<JZ E[E(O8,67JSyJ7     D# $ 	 8s   C6c                    / n[        U5       HD  nU R                  U5      nU[        S UR                   5       5      -  nUR	                  U5        MF     X4$ )Nc              3  L   #    U  H  n[        UR                  5      v   M     g 7fr   r   r   s     r)   r   0GGUFReader._build_tensor_info.<locals>.<genexpr>=  s     A[TDKK(([r   )r   r   r   r   r   )r1   ru   r   tensor_fieldsr   rM   s         r)   rq   GGUFReader._build_tensor_info9  sW    uA//5ECAU[[AAAD  '  ""r,   c                   / n[        5       nU GH5  nUR                  u  pgpp[        [        U5      SS9nX;   a  [	        SU 35      eUR                  U5        [        U
S   5      nSnU	R                  5        H  nU[        U5      -  nM     [        [        U	R                  5       5      5      n[        U   u  nnUU-  U-  n[        XS   -   5      nU[        R                  :X  a  Un[        R                  nGOU[        R                  :X  a  Un[        R                   nOU[        R"                  :X  a  Un[        R$                  nOU[        R&                  :X  a  Un[        R(                  nOU[        R*                  :X  a  Un[        R,                  nOlU[        R.                  :X  a  Un[        R0                  nOEU[        R2                  :X  a  Un[        R4                  nOUn[        R6                  n[9        UU5      nUR;                  [=        UUU	UUUU R?                  UUU5      RA                  U5      US95        GM8     X0l!        g )Nr$   r%   z"Found duplicated tensor with name r   r
   )r   rG   rH   rI   rJ   rK   r    rM   )"setr   r   r   r`   addr   r0   r   tuplereversedr   F16r\   float16F32float32F64float64I8int8I16int16I32int32I64int64r   r   r   rE   r^   reshaperk   )r1   
start_offsrj   rk   tensor_namesrM   	_name_lenr   _n_dimsr   r   r   tensor_name	ggml_typen_elemsdimnp_dims
block_size	type_sizerJ   	data_offs
item_count	item_types                          r)   rs   GGUFReader._build_tensorsA  s   uELQKKII'eI.7CK* #Ek]!STT[),Yq\:IG{{}3s8# %HT[[]34G$4Y$?!J		)Z7GJq)99:I0444$
JJ	2666$
JJ	2666$
JJ	2555$
GG	2666$
HH	2666$
HH	2666$
HH	$
HH	3GYGNN<"'$!'yyIzBJJ7S	 	U h r,   )rS   rR   r    rK   ri   rj   rk   )r)rt   zos.PathLike[str] | strrV   zLiteral['r', 'r+', 'c'])r   r   r<   zUnion[ReaderField, None])r7   r   r<   rE   )r
   N)
r   r   rb   znpt.DTypeLiker   r   rX   zNone | Literal['I', 'S', '<']r<   rL   )F)rM   r   r   boolr<   r   )r   r   r<   z4tuple[npt.NDArray[np.uint64], npt.NDArray[np.uint8]])r   r   r   r   r<   zBtuple[int, list[npt.NDArray[Any]], list[int], list[GGUFValueType]])r   r   r<   r   )ru   r   r   r   r<   r   )ru   r   r   r   r<   ztuple[int, list[ReaderField]])r   r   rj   zlist[ReaderField]r<   None)1r=   r>   r?   r@   rR   rA   r   rS   r   UINT8r\   r   INT8r   UINT16uint16INT16r   rm   r_   INT32r   FLOAT32r   ro   rn   INT64r   FLOAT64r   BOOLbool_rT   r   r   npt	DTypeLiker   r   r   r^   rl   r   r   r   rp   rq   rs   rC   r;   r,   r)   rO   rO   p   ss   $'J!'+Is+ 	rxxrwwryyrxxryyrxxrzzryyrxxrzzrxx@< 52n %
/C*! rvoo"/o8;oQno	o	P>$B$B(+$B	K$BL
@*#7r,   rO   )*
__future__r   loggingosre   collectionsr   typingr   r   r   r   r	   numpyr\   numpy.typingr  quantsr   r=   pathlibr   rt   insertr   __file__parentgguf.constantsr   r   r   r   r   r   r   r   	getLoggerloggerrd   r   rE   rO   r;   r,   r)   <module>r     s   
 #  	 
 # ; ;   -z HHOOAs4>007789	 	 	 
		8	$- :* :z: H Hr,   