
    5h9                       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"  \RF                  " \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_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/home/james-whalen/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.contents9   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 )r1   zint | slicereturnr   )__name__
__module____qualname____firstlineno____annotations__r   r   r    slicer8   __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)ReaderTensord   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?   r@   rB   r:   r+   r(   rD   rD   d   s/    
I%%!!OL
r+   rD   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)'
GGUFReadero   IzLiteral['I', 'S']
byte_orderr   	alignmentrJ   z%dict[GGUFValueType, type[np.generic]]gguf_scalar_to_npc           
        [         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bA  UR<                  [.        R0                  /:w  a  [        S5      eUR>                  S   S   U l         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   )#npmemmapr   _getuint32r   
ValueErrorrQ   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   rR   rJ   _build_tensors)r0   pathrU   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'a<NNW,,DD1r+   _DT)boundc                :    U R                   R                  US 5      $ N)ri   rq   )r0   keys     r(   	get_fieldGGUFReader.get_field   s    {{sD))r+   c                     U R                   U   $ r   )rj   )r0   r6   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)ra   )	r   r[   emptyitemsizer   r`   ra   rb   rQ   )r0   r   ra   countrW   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                x   UR                   U R                  ;   ad  [        R                  SUR                    SUR                   35        XR                  UR                   SR                  UR                  5      -   '   OXR                  UR                   '   U(       a  S$ [        S UR                   5       5      $ )NzDuplicate key z at offset z_{}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   ri   loggerwarningr   formatsumr   )r0   rL   skip_sums      r(   rk   GGUFReader._push_field   s    ::$ NN^EJJ<{5<<.QRCHKK

U\\%,,%??@&+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[   rm   uint8)r0   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   r6   	idxs_offss     r(   r   r      s     C#Ios   zUnknown/unhandled field type )r   appendr-   listr   r   rS   rq   r]   r   r   r,   r[   r^   rm   range_get_field_partslenr_   )r0   	orig_offsraw_typert   r    gtypespartssizenptypeval	raw_itypealenaparts	data_idxsr6   	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 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   r#   r$   )r
      rX      )
r   r   r   r]   r[   r^   rm   r   r   bytes)	r0   r   rt   name_len	name_datan_dimsdims	raw_dtypeoffset_tensors	            r(   _get_tensor_info_field!GGUFReader._get_tensor_info_field   s    #mmD1HOOi&6&6677 4+FMM"" 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   rk   r   r   r   )r0   rt   r   _r   kv_klenkv_kdataraw_kv_typer   r   
field_sizefield_parts
field_idxsfield_typesr6   s                  r(   ro   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>7  s     A[TDKK(([r   )r   r   r   r   r   )r0   rt   r   tensor_fieldsr   rL   s         r(   rp   GGUFReader._build_tensor_info3  sW    uA//5ECAU[[AAAD  '  ""r+   c                   / n[        5       nU GH,  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[        [        R                  " U	5      5      n[        [        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OkU[        R0                  :X  a  Un[        R2                  nODU[        R4                  :X  a  Un[        R6                  nOUn[        R8                  n[;        X5      nUR=                  [?        UUU	UUUU RA                  UUU5      RC                  U5      US95        GM/     X0l"        g )Nr#   r$   z"Found duplicated tensor with name r   )r   rF   rG   rH   rI   rJ   r   rL   )#setr   r   r   r_   addr   r   r[   prodtuplereversedr/   r   F16float16F32float32F64float64I8int8I16int16I32int32I64int64r   r   r   rD   r]   reshaperj   )r0   
start_offsri   rj   tensor_namesrL   	_name_lenr   _n_dimsr   r   r   tensor_name	ggml_typen_elemsnp_dims
block_size	type_sizerI   	data_offs
item_count	item_types                         r(   rr   GGUFReader._build_tensors;  s   uELQKKII'eI.7CK* #Ek]!STT[),Yq\:I"''$-(G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	3GGNN<"'$!'yyIzBJJ7S	 	O b r+   )rR   rQ   r   rJ   rh   ri   rj   )r)rs   zos.PathLike[str] | strrU   zLiteral['r', 'r+', 'c'])r   r   r;   zUnion[ReaderField, None])r6   r   r;   rD   )r
   N)
r   r   ra   znpt.DTypeLiker   r   rW   zNone | Literal['I', 'S', '<']r;   rK   )F)rL   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   )rt   r   r   r   r;   r   )rt   r   r   r   r;   ztuple[int, list[ReaderField]])r   r   ri   zlist[ReaderField]r;   None)1r<   r=   r>   r?   rQ   r@   r   rR   r   UINT8r[   r   INT8r   UINT16uint16INT16r   rl   r^   INT32r   FLOAT32r   rn   rm   INT64r   FLOAT64r   BOOLbool_rS   r   r   npt	DTypeLiker   r   r   r]   rk   r   r   r   ro   rp   rr   rB   r:   r+   r(   rN   rN   o   sr   $'J!'+Is+ 	rxxrwwryyrxxryyrxxrzzryyrxxrzzrxx@< 22h %
/C*! rvoo"/o8;oQno	o	P>$B$B(+$B	K$BL
<*#4r+   rN   ))
__future__r   loggingosrd   collectionsr   typingr   r   r   r   r	   numpyr[   numpy.typingr  quantsr   r<   pathlibr   rs   insertr   __file__parentgguf.constantsr   r   r   r   r   r   r   	getLoggerr   rc   r   rD   rN   r:   r+   r(   <module>r     s   
 #  	 
 # ; ;   -z HHOOAs4>007789   
		8	$- :* :z: @ @r+   