o
    0 iU                     @  s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 dejvrEeejjjjd  rEejd eeejjj d dlmZmZmZ edZd(ddZd)ddZd)ddZd*ddZd+dd Zd!d" Zd)d#d$Zd,d%d&Ze d'kre  dS dS )-    )annotationsN)Path)AnyZNO_LOCAL_GGUFzgguf-py)
GGUFReaderGGUFValueTypeReaderTensorz	gguf-dumpreaderr   returntuple[str, str]c                 C  s6   | j j}| jdkr|dkrdnd}||fS |}||fS )NSZLITTLEZBIG)Z	endianessnameZ
byte_order)r   file_endianhost_endian r   b/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/gguf/scripts/gguf_dump.pyget_file_host_endian   s   
r   argsargparse.NamespaceNonec                 C  s*  t | \}}td| d| d tdt| j d t| j dD ]\}}|js.d}n(|jd tjkrNt|jd }d	| t	|jd
 j
 d|  }nt	|jd
 j
}d|dd|ddt|jdd|j
 }|jr|jd }	|	tjkr| }
t|
dkr|
d d d }
|dt|
7 }n.|	| jv r|d| 7 }nt|td}
t|jdkr|
d d
 d }
|d|
7 }t| q$|jrd S tdt| j d t| jdD ]5\}}ddd t|jdgdt|j   D }td|dd|jdd| d|jj
dd|j
 
 qd S )Nz
* File is z  endian, script is running on a z endian host.z
* Dumping z key/value pair(s)   N/Ar   []z  5z: 10z | 8<   9   z...z = {0}   z, ...]z
 tensor(s), c                 s  s    | ]}d  |V  qdS )z{0:5}N)format).0dr   r   r   	<genexpr>A   s    z dump_metadata.<locals>.<genexpr>   7)r   printlenfields	enumeratevaluestypesr   ARRAYstrr   dataSTRINGcontentsr!   reprgguf_scalar_to_npslice
no_tensorstensorsjoinlistshape
n_elementstensor_type)r   r   r   r   nfieldpretty_type
nest_countZlog_message	curr_typecontenttensorZ
prettydimsr   r   r   dump_metadata    s@   "*



.6rC   c                 C  s  dd l }t| \}}i }i }|j|||d}t| j D ]C\}}	||	jr+|	jd jnd|	jd}
|
||	j< |	jd d t	j
gkrZdd |	jD dd  |
d< |jsSq|	 |
d	< q|	 |
d	< q|jst| jD ]\}}||j |jj|jjd
||j< qi||tj d S )Nr   )filenameZendianmetadatar6   UNKNOWN)indextypeoffsetr   c                 S  s   g | ]}|j qS r   )r   )r"   tr   r   r   
<listcomp>X   s    z&dump_metadata_json.<locals>.<listcomp>Zarray_typesvalue)rG   r9   rH   rI   )jsonr   modelr*   r)   r+   r,   r   rI   r   r-   Z
json_arrayr1   r5   r6   r9   tolistr;   r=   dumpsysstdout)r   r   rM   r   r   rE   r6   resultidxr=   currrB   r   r   r   dump_metadata_jsonE   s:   
rV   
header_maplist[dict[str, str]]r/   list[dict[str, Any]]c                   s
  ddddd	d
i t | D ]%\} t fdd|D ddd }t d d }||kr1|n||< qg }|dfddt | D  |dfddt | D  |D ]|dfddt | D  q^d}|D ]
}|d| d7 }qx|S )Npaddingint	alignMode
str | NonestrValr.   c                 S  sX   |dkr	| | S |dkr|| d d S |dkr#d|| d  S d|| d  S )Ncenterrightr    left)r_   rjustljust)rZ   r\   r^   r   r   r   strAlignm   s   
z7markdown_table_with_alignment_support.<locals>.strAlignc                 S  sT   |dkrdd| d   d S |dkrd| d  d S |dkr&dd| d   S d|  S )Nr_   :-   r`   r   rb   r   )rZ   r\   r   r   r   	dashAlignw   s   z8markdown_table_with_alignment_support.<locals>.dashAlignc                   s6   g | ]}|  D ]\}}| d  krtt|qqS )key_name)itemsr(   r.   )r"   r#   kv)columnEntryr   r   rK      s   6 z9markdown_table_with_alignment_support.<locals>.<listcomp>r   defaultrh   header_name|c                 3  s2    | ]\}} | | d t|d V  qdS )alignrq   Ngetr.   r"   rG   rn   )rowsPaddingre   r   r   r$      s   0 z8markdown_table_with_alignment_support.<locals>.<genexpr>c                 3  s(    | ]\}} | | d V  qdS )rs   N)ru   rv   )ri   rw   r   r   r$      s   & c                 3  s6    | ]\}}| | d t |d  V  qdS )rs   rj   Nrt   rv   )itemrw   re   r   r   r$      s   4  z|
)rZ   r[   r\   r]   r^   r.   )rZ   r[   r\   r]   )r*   maxr(   appendr7   )rW   r/   rG   ZpadCountZheaderPadCountrowsZtableStringrowr   )rn   ri   rx   rw   re   r   %markdown_table_with_alignment_supporti   s    


$$(r~   countr[   r.   c                 C  s   | dkr| d }d}n0| dkr| d }d}n%| dkr!| d }d	}n| d
kr,| d }d}n| dkr7| d }d}n| }d}| dkrAdnd t | | S )Ng  4&kCgV瞯<Qg   mBg-q=Tg    eAg&.>Bg    .Agư>Mg     @@gMbP?Kry   ~)round)r   Zscaled_amountZscale_suffixr   r   r   element_count_rounded_notation   s$    r   c                 C  s   |  d}i dddddddd	d
ddddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/}g }|D ]}|  }||v rc|||   qM||  qMd0|S )1N.Z
token_embdzToken embeddingZpos_embdzPosition embeddingZoutput_normzOutput normalizationoutputOutputZ	attn_normzAttention normalizationZattn_norm_2Zattn_qkvzAttention query-key-valueZattn_qzAttention queryZattn_kzAttention keyZattn_vzAttention valueZattn_outputzAttention outputZffn_normz"Feed-forward network normalizationZffn_upzFeed-forward network "up"Zffn_gatezFeed-forward network "gate"Zffn_downzFeed-forward network "down"Zffn_gate_inpzMExpert-routing layer for the Feed-forward network in Mixture of Expert modelsZffn_gate_expzHFeed-forward network "gate" layer per expert in Mixture of Expert modelszHFeed-forward network "down" layer per expert in Mixture of Expert modelszFFeed-forward network "up" layer per expert in Mixture of Expert modelsz#State space model input projectionszState space model rolling/shiftz+State space model selective parametrizationz#State space model state compressionz!State space model skip connectionzState space model time stepz#State space model output projectionZBlockZEncoderZDecoder)Zffn_down_expZ
ffn_up_expZssm_inZ
ssm_conv1dZssm_xZssm_aZssm_dZssm_dtZssm_outblkencdecra   )splitstriplowerr{   titler7   )r   wordsZabbreviation_dictionaryZexpanded_wordswordZ	word_normr   r   r   translate_tensor_name   sp   
	
 
r   c           0        s  t | \}}d}|d|j d7 }|d| d7 }|d7 }|d7 }|dt| j d	7 }|d7 }g }t| j d
D ]>\}}|jsEd}n(|jd tjkret|jd
 }	d|	 t	|jd j
 d|	  }nt	|jd j
}dd }
t|j}d}t|jd
kr|jd }|tjkrd}t	t|jd dd}t||kr|
|d |d  }|
|| d d  }dj||d}n|
|}n|| jv rt	|jd d }n|jd tjkrm|jd
 }g }|tjkr2td|}t|D ]D}d}t	t|jd|| d
 d   dd}t||kr'|
|d |d  }|
|| d d  }dj||d}n|
|}|| qn%|| jv rWtd|}t|D ]}|t	|jd|| d
   d  qAdd|  |t|krhdnd d}|||||j
|d q:d d!d"d#d$d%d&d#d'd(d"d#d)d*d&d#d+d,d&d#g}|t||7 }|d7 }|jsg }i }i }td-d. | jD }t| jD ]e\}}|j
d/}d0}|d d1kr|d  d/|d
  }n+|d d2v r|d
 d1kr|d  d/|d
  d/|d  }n|d d2v r|d  }||vrg ||< || || | |||j
< q|d3t| d47 }|d5| d67 }|d7 }|D ]&}|| }td7d. |D }|d8t| d9t| d:|d/d; d<7 }q7|d7 }|d=7 }|d7 }|d>7 }|d7 }g } t| jD ]\}}d?|j}!d?|j}"| ||j
|!|"d@ qydAdBd"d#dCdDd&d#dEdFd"d#dGdHd"d#g}#|t|#| 7 }|d7 }|D ]}|| }tdId. |D }|| dJ }$|dK|d/d; dLt| dMt| dN7 }d
}%d
}&i  |D ]?}t |%tt	t|j!}%t |&tt	|j!}&tt"|j#d
gdOt|j#   D ]\}'}(t  $|'d
tt	|( |'< qqg })|D ]Y}t|j
dPdQdRdS}*dT fdUd.tt"|j#d
gdOt|j#   D }+dVt|j!dW|% dX},|, dY|j!dW|& }-|j%j
 }.|)||j
 |j
|*|-|+|.dZ q1dAdBd"d#dCdDd&d#d[d\d&d#d]d^d&d#d_d`d&d#dadbd&d#g}/|t|/|)7 }|d7 }|dc| ddt|dedf| d7 }|dg|$dhdi7 }|dj7 }qt&| d S )kNry   z# z - GGUF Internal File Dump

z
- Endian: z endian

z## Key Value Metadata Store

z
There are z key-value pairs in this file
r   r   r   r   r   r   c                 S  sZ   t dd td| D dd}d|d  }| ds| dr%d|  d} | |  | S )	Nc                 s  s    | ]
}t |d V  qdS )r   N)r(   group)r"   matchr   r   r   r$      s    zNdump_markdown_metadata.<locals>.escape_markdown_inline_code.<locals>.<genexpr>z`+r   ro   `r   ra   )rz   refinditer
startswithendswith)value_stringZmax_backticksZinline_code_markerr   r   r   escape_markdown_inline_code   s
   z;dump_markdown_metadata.<locals>.escape_markdown_inline_coder   zutf-8)encodingrh   z{head}...{tail})headtail         z[ r    z, ...z ])r<   r>   total_elements
field_namerL   r<   ZPOSr`   )rj   rq   rs   r>   ZTYPErb   r   ZCountr   KeyrL   Valuec                 s      | ]}|j V  qd S Nr:   r"   rB   r   r   r   r$   ?      z)dump_markdown_metadata.<locals>.<genexpr>r   baser   )r   r   z## Tensors Overview z Elements

z)Total number of elements in all tensors: z
 Elements
c                 s  r   r   r   r   r   r   r   r$   ^  r   z- [z Tensor Group - z Elements](#_z)
z### Tensor Data Offset
zJThis table contains the offset and data segment relative to start of file
z{0:#16x})t_id
layer_namedata_offset	data_sizer   ZT_IDr   zTensor Layer Namer   zData Offset (B)r   zData Size (B)c                 s  r   r   r   r   r   r   r   r$   z  r   d   z### <a name="z">z Tensor Group : z Elements</a>

r%   z.weightz.(W)z.biasz.(B)z x c                 3  s*    | ]\}}t |d  |  V  qdS )>N)r.   )r"   ir#   Zprettify_dimension_max_widthsr   r   r$     s   ( (r   )ra   )r   r   human_layer_nameelement_countpretty_dimensionr;   r   z Human Friendly Tensor Layer Namer   ZElementsr   ZShaper;   Typez- Total elements in z: (z>4z) z - Percentage of total elements: z.2fz%
z

)'r   rN   r(   r)   r*   r+   r,   r   r-   r.   r   r/   r0   bytespartsr!   r3   minranger{   r7   r   r~   r5   sumr6   r   r   r   replacer   Zn_bytesrz   r:   r8   r9   ru   r;   r'   )0r   r   r   r   Zmarkdown_contentZkv_dump_tabler<   r=   r>   r?   r   r   rL   r@   Ztruncate_lengthr   r   r   Zarray_elementsZrender_elementZelement_posZkv_dump_table_header_mapZtensor_prefix_orderZtensor_name_to_keyZtensor_groupskeyrB   Ztensor_componentsZtensor_group_namer   r6   Zgroup_elementsZtensor_mapping_tableZdata_offset_prettyZdata_size_prettyZ tensors_mapping_table_header_mapZgroup_percentageZprettify_element_est_count_sizeZprettify_element_count_sizer   Zdimension_sizeZtensor_dump_tableZhuman_friendly_namer   Zelement_count_estZelement_count_stringZtype_name_stringZtensor_dump_table_header_mapr   r   r   dump_markdown_metadata   s  "






&
(,




"


0




,*"6
$





	"r   c                  C  sX  t jdd} | jdtdd | jdddd	 | jd
ddd	 | jdddd	 | jdddd	 | jdddd	 | jdddd	 | jdddd	 | ttjdkrQd ndg}tj	|j
r]tjntjd |jsw|jsw|jsw|jswtd|j  t|jd}|jrt|| d S |jrt|| d S |jrt|j d S |jrt|j d S t|| d S )NzDump GGUF file metadata)descriptionrN   zGGUF format model filename)rH   helpz--no-tensors
store_truezDon't dump tensor metadata)actionr   z--jsonzProduce JSON outputz--json-arrayz/Include full array values in JSON output (long)z--data-offsetzStart of data offsetz--data-alignmentz-Data alignment applied globally to data fieldz
--markdownzProduce markdown outputz	--verbosezincrease output verbosityr   z--help)levelz* Loading: r)argparseArgumentParseradd_argumentr.   
parse_argsr(   rQ   argvloggingbasicConfigverboseDEBUGINFOrM   markdownr   Zdata_alignmentloggerinforN   r   rV   r   r'   Z	alignmentrC   )parserr   r   r   r   r   main  s.   r   __main__)r   r   r	   r
   )r   r   r   r   r	   r   )rW   rX   r/   rY   )r   r[   r	   r.   )r	   r   )!
__future__r   r   r   osr   rQ   pathlibr   typingr   environ__file__parentexistspathinsertr.   Zggufr   r   r   	getLoggerr   r   rC   rV   r~   r   r   r   r   __name__r   r   r   r   <module>   s0   "



%
$
0
/ 
B 
