o
    0 i9                     @  s  d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
mZmZ d dlZd dlmZ ddlmZ edkrMd dlmZ ejd eeejj d d	lmZmZmZmZm Z m!Z!m"Z" e#eZ$d
egZ%G dd de
Z&G dd de
Z'G dd dZ(dS )    )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                   @  sV   e Zd ZU ded< ded< g Zded< dgZded	< g Zd
ed< edfdddZdS )ReaderFieldintoffsetstrnamezlist[npt.NDArray[Any]]partsz	list[int]datazlist[GGUFValueType]typesNindex_or_sliceint | slicereturnr   c                   s    j rhdd  j d }|tjkrS j d }|tjkr6 j| }t|tr, j| S  fdd|D S t|trG j j|   d S  fdd j| D S |tjkr_ jd S  jd  d S d S )Nc                 S  s   t |  ddS )Nutf-8encoding)r   tobytes)x r&   \/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/gguf/gguf_reader.py<lambda>;   s    z&ReaderField.contents.<locals>.<lambda>r   r   c                   s   g | ]	} j | qS r&   )r   .0idxselfZ	to_stringr&   r'   
<listcomp>G   s    z(ReaderField.contents.<locals>.<listcomp>c                   s$   g | ]} j |  D ]}|qqS r&   )r   tolist)r*   r+   pv)r-   r&   r'   r.   Z   s   $ )	r   r   ARRAYSTRINGr   
isinstancer   r   r/   )r-   r   Z	main_typeZsub_typeindicesr&   r,   r'   contents9   s"   







zReaderField.contents)r   r   r    r   )	__name__
__module____qualname____annotations__r   r   r   slicer5   r&   r&   r&   r'   r   '   s   
 r   c                   @  sN   e Zd ZU ded< ded< ded< ded< ded	< ded
< ded< ded< dS )ReaderTensorr   r   r   tensor_typeznpt.NDArray[np.uint32]shaper   
n_elementsn_bytesdata_offsetnpt.NDArray[Any]r   r   fieldN)r6   r7   r8   r9   r&   r&   r&   r'   r;   d   s   
 r;   c                   @  s  e Zd ZU dZded< eZded< ded< eje	j
eje	jeje	jeje	jeje	jeje	jeje	jeje	jeje	jeje	jeje	jiZded< dDdEddZ e!de"j#dZ$dFddZ%dGddZ&	dHdId%d&Z'dJdKd,d-Z(dLd/d0Z)dMd4d5Z*dNd6d7Z+dOd9d:Z,dPd<d=Z-dQdBdCZ.dS )R
GGUFReaderIzLiteral['I', 'S']
byte_orderr   	alignmentr@   z%dict[GGUFValueType, type[np.generic]]gguf_scalar_to_nprpathos.PathLike[str] | strmodeLiteral['r', 'r+', 'c']c              	   C  s  t j||d| _d}| j|t jddd tkrtd|d7 }| |t j}|d d@ dkr;d| _||j	
| j}|d }|tvrKtd	| d
tjdkrWtj}tj}ntj}tj}| jdkrd|n|| _t | _g | _|| t|d|gdgtjg7 }| |t jd}|| t|d|d d gdgtjg7 }|| t|d|dd  gdgtjg7 }|\}	}
| ||
}| ||	\}}| jd}|d ur|jtjgkrtd|jd d | _ || j  }|dkr|| j | 7 }|| _!| "|| d S )N)rK   r   <)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   )#npZmemmapr   _getuint32r   
ValueErrorrE   viewdtypenewbyteorderREADER_SUPPORTED_VERSIONSsys	byteorderr   ZLITTLEZBIGZ	endianessr   fieldstensors_push_fieldr   r   UINT32uint64UINT64_build_fields_build_tensor_infogetr   r   rF   r@   _build_tensors)r-   rI   rK   offsZtemp_versionversionZhost_endianZswapped_endianZtemp_countsZtensor_countZkv_countZtensors_fieldsZ	new_alignpaddingr&   r&   r'   __init__   sJ   
"**
zGGUFReader.__init___DT)boundkeyr   r    Union[ReaderField, None]c                 C  s   | j |d S N)r\   rd   )r-   rl   r&   r&   r'   	get_field   s   zGGUFReader.get_fieldr+   r;   c                 C  s
   | j | S rn   )r]   )r-   r+   r&   r&   r'   
get_tensor   s   
zGGUFReader.get_tensorr	   Nr   rW   npt.DTypeLikecountrN   None | Literal['I', 'S', '<']rA   c                 C  sj   t |}t tjg |dj}|||  }| j|| j|dd | }||j|d u r1| jS |S )N)rW   )	r   rR   emptyitemsizer   rV   rW   rX   rE   )r-   r   rW   rr   rN   ru   Zend_offsZarrr&   r&   r'   rS      s
   $zGGUFReader._getFrB   r   skip_sumboolc                 C  sh   |j | jv r td|j  d|j  || j|j d|j < n|| j|j < |r*dS tdd |jD S )NzDuplicate key z at offset z_{}r   c                 s      | ]}t |jV  qd S rn   r   nbytesr*   partr&   r&   r'   	<genexpr>       z)GGUFReader._push_field.<locals>.<genexpr>)r   r\   loggerwarningr   formatsumr   )r-   rB   rv   r&   r&   r'   r^      s
   zGGUFReader._push_field4tuple[npt.NDArray[np.uint64], npt.NDArray[np.uint8]]c                 C  s*   |  |tj}||  |d tj|d fS )N   r   )rS   rR   r`   uint8)r-   r   slenr&   r&   r'   _get_str   s   zGGUFReader._get_str	orig_offsraw_typeBtuple[int, list[npt.NDArray[Any]], list[int], list[GGUFValueType]]c                   s\  |}g }t |}|| |t jkr)t| |}tdd |D }||dg|fS | j|}|d urD| ||}	t	|	j
|	gdg|fS |t jkr| |tj}
|t	|
j
7 }| |tj}|t	|j
7 }|
|g}g }t|d D ]-}| ||
d \}}}}|dkr||7 }t| ||7 }| fdd|D 7 }||7 }qq|| |||fS td| )Nc                 s  rx   rn   ry   r{   r&   r&   r'   r}      r~   z.GGUFReader._get_field_parts.<locals>.<genexpr>r	   r   c                 3  s    | ]}|  V  qd S rn   r&   r)   Z	idxs_offsr&   r'   r}      s    zUnknown/unhandled field type )r   appendr2   listr   r   rG   rd   rS   r   rz   r1   rR   rT   r`   range_get_field_partslenrU   )r-   r   r   rf   r   gtypeZspartssizeZnptypevalZ	raw_itypealenZapartsZ	data_idxsr+   Z	curr_sizeZ
curr_partsZ	curr_idxsZ
curr_typesr&   r   r'   r      s:   



zGGUFReader._get_field_partsc           	   	   C  s   |}|  |\}}|t|j|j 7 }| |tj}|t|j7 }| |tj|d }|t|j7 }| |tj}|t|j7 }| |tj}|t|j7 }t|tt	|dd||||||gg dS )Nr   r!   r"   )r	      rO      )
r   r   rz   rS   rR   rT   r`   r   r   bytes)	r-   r   rf   Zname_len	name_dataZn_dimsdims	raw_dtypeoffset_tensorr&   r&   r'   _get_tensor_info_field   s"   z!GGUFReader._get_tensor_info_fieldrf   c              	     s   t |D ]Z}|}| |\}}|t|j|j 7 }| |tj}|t|j7 }|||g}t| | ||d \}	}
}}||
7 }| j	t
|tt|dd| fdd|D |dd ||	7 }q|S )Nr   r!   r"   c                   s   g | ]}|  qS r&   r&   r)   r   r&   r'   r.   -  s    z,GGUFReader._build_fields.<locals>.<listcomp>T)rv   )r   r   r   rz   rS   rR   rT   r   r   r^   r   r   r   )r-   rf   rr   _r   Zkv_klenZkv_kdataZraw_kv_typer   Z
field_sizeZfield_partsZ
field_idxsZfield_typesr&   r   r'   rb     s*   

zGGUFReader._build_fieldstuple[int, list[ReaderField]]c                 C  sF   g }t |D ]}| |}|tdd |jD 7 }|| q||fS )Nc                 s  rx   rn   ry   r{   r&   r&   r'   r}   7  r~   z0GGUFReader._build_tensor_info.<locals>.<genexpr>)r   r   r   r   r   )r-   rf   rr   Ztensor_fieldsr   rB   r&   r&   r'   rc   3  s   
zGGUFReader._build_tensor_info
start_offsr\   list[ReaderField]Nonec                 C  s  g }t  }|D ]}|j\}}}}	}
}tt|dd}||v r%td| || t|
d }tt	|	}t
t|	 }t| \}}|| | }t||d  }|tjkr^|}tj}nL|tjkri|}tj}nA|tjkrt|}tj}n6|tjkr|}tj}n+|tjkr|}tj}n |tjkr|}tj}n|tjkr|}tj}n
|}tj}t||}|t|||	||||  |||!||d q|| _"d S )Nr!   r"   z"Found duplicated tensor with name r   )r   r<   r=   r>   r?   r@   r   rB   )#setr   r   r   rU   addr   r   rR   prodtuplereversedr/   r   ZF16Zfloat16ZF32float32ZF64float64ZI8int8ZI16int16ZI32int32ZI64int64r   r
   r   r;   rS   Zreshaper]   )r-   r   r\   r]   Ztensor_namesrB   Z	_name_lenr   Z_n_dimsr   r   r   Ztensor_nameZ	ggml_typeZn_elemsZnp_dims
block_sizeZ	type_sizer?   Z	data_offs
item_countZ	item_typer&   r&   r'   re   ;  sb   











zGGUFReader._build_tensors)rH   )rI   rJ   rK   rL   )rl   r   r    rm   )r+   r   r    r;   )r	   N)
r   r   rW   rq   rr   r   rN   rs   r    rA   )F)rB   r   rv   rw   r    r   )r   r   r    r   )r   r   r   r   r    r   )r   r   r    r   )rf   r   rr   r   r    r   )rf   r   rr   r   r    r   )r   r   r\   r   r    r   )/r6   r7   r8   rE   r9   r   rF   r   ZUINT8rR   r   ZINT8r   ZUINT16Zuint16ZINT16r   r_   rT   ZINT32r   ZFLOAT32r   ra   r`   ZINT64r   ZFLOAT64r   ZBOOLZbool_rG   ri   r   nptZ	DTypeLikerj   ro   rp   rS   r^   r   r   r   rb   rc   re   r&   r&   r&   r'   rC   o   s:   
 4

	


&

rC   ))
__future__r   loggingosrZ   collectionsr   typingr   r   r   r   r   numpyrR   Znumpy.typingr   Zquantsr
   r6   pathlibr   rI   insertr   __file__parentZgguf.constantsr   r   r   r   r   r   r   	getLoggerr   rY   r   r;   rC   r&   r&   r&   r'   <module>   s$   $

=