
    +jn                     X    d dl Z d dlZd dlmZ d dlmZ d dlmZ d Zd Zd Z	d Z
d	 ZdS )
    N)HuffmanCodec)tqdm)copyc                 4   i }|                      t          j                  }|dz	  dz  }t          j        |d          \  }}t	          |                                |                                          D ]
\  }}|||<   t          j        |          }||fS )N      T)return_counts)viewtorchint16uniqueziptolistr   from_frequencies)	weightcounterWexponent_8bitsvalsfreqsvfcodecs	            Z/home/wildlama/comfy/ComfyUI/.venv/lib/python3.11/site-packages/dfloat11/dfloat11_utils.py	get_codecr      s    GEK  A1f_N,~TBBBKD%DKKMM5<<>>22  1

)'22E'>    c                     t          j        |           }|                                }d}|                                D ]\  }\  }}t	          ||          }|}| }d}t          j        t          |                                                     }	|dk    rt          j	        |	|          d |         }
|dz  }t          j        t          | 
                                                    |
         }t          |           }|D ]}d||<   t          j        |          }|                                }d}|                                D ]\  }\  }}t	          ||          }t          |dz
  |           |dk    |||fS )Nr             )r   r   get_code_tableitemsmaxnparraylistvaluesargpartitionkeysr   print)r   r   tablemax_len_lcompressed_codeccompressed_countermin_kfreqmin_indicesmin_keysks                r   get_32bit_codecr6   %   s   )'22E  ""EG[[]] " "	6Aqgq// E8D))**++D
B,,odE226E6:
8D0011+>!']] 	& 	&A$%q!!'89KLL //11 	& 	&IAv1'1ooGGeai!!! B,,  /66r   c           	         dg}|                                  D ]r\  }\  }}t          |t                    rUt          |          dd                              |d          d |dz
  dz  dz           }||vr|                    |           s|                    t                     t          j	        t          |          dft          j
                  }t          |          D ]q\  }}i }	t          |          dz  }
|                                  D ]\  }\  }}t          |t                    rt          |          dd                              |d          }|                    |          r|dz
  dz  |
k    r2t          ||
dz  d                              dd          d          }|}nGt          ||
dz  |
dz  dz            d          }d|                    |d |
dz  dz                      z
  }||	v r!|	|         |k    rt          d	| d
|	           ||	|<   t!          |	           t#          d          D ]}||	v r|	|         }||||f<   st          j	        dt          j
                  }|                                  D ]$\  }\  }}t          |t                    r||d|f<   %t%          j        t          j        ||fd                    S )N r   0r       )key   dtypezKey z already exists in )r    r<   r   )axis)r"   
isinstanceintbinrjustappendsortlenr$   zerosuint8	enumerate
startswithljustindex
ValueErrorr*   ranger   
from_numpyconcatenate)r+   prefixesr;   bitsvalprefixlutspip
bytes_dictplbin_valdict_key
dict_valueicurr_vallenss                    r   get_lutsra   D   s   tH!KKMM ( ([dCc3 	(XXabb\''c223IdQh1_q5H3IJFX%%'''MMcM8S]]C(999D8$$ # #A
VVq[ % 	: 	:C$#s## :c((122,,,T377%%a(( :qQ",,#&wQyy'9'?'?3'G'G#K#K%(

#&wQa!/D'Eq#I#I%(8>>'-BFQJ-:P+Q+Q%Q
:--*X2F*2T2T()Y)Y)YZ)Y)YZZZ/9
8,js 	# 	#AJ%a="DQKK	#
 8HBH---D!KKMM ! ![dCc3 	! DSM
d|!,,,  r   c                 n   g }g }g }d}d}d}	d}
t          |           D ]}|	d|z  z  dz   t          |          k    r$|                    |	|	d|z  z  d|z  z  z
             |	d|z  |z  z  dz   t          |          k    r|                    |
           |j        |         \  }}||z  |z   }||z  }|	|z  }	|
dz  }
|dk    r3||dz
  z	  }|                    |           |||dz
  z  z
  }|dz  }|dk    3|dk    r|	d|z  z  dz   t          |          k    r$|                    |	|	d|z  z  d|z  z  z
             |	d|z  |z  z  dz   t          |          k    r|                    |
           |j        |j                 \  }}||z  |z   }||z  }|dk    r	||dz
  z	  }n|d|z
  z  }|                    |           |                    t          |                      t          t          j        t          |          ||z  z                      }|                    dg||z  t          |          z
  z             d |D             }d |D             }t          j	        t          |          t          j                  t          j        |          t          j        |t          j                  fS )Nr   r:   r    c                 .    g | ]}t          |d           S )05b)format).0gaps     r   
<listcomp>zencode.<locals>.<listcomp>   s"    :::cvc5)):::r   c                 6    g | ]}|D ]}t          |          S  )rB   )rf   binarybits      r   rh   zencode.<locals>.<listcomp>   s+    LLLVLLc3s88LLLLr   r=   )r   rG   rE   _table_eofrB   r$   ceilextend
frombufferbytesrI   packbitsr%   uint32)datar   bytes_per_threadthreads_per_blockencodedgapsoutput_positionsbuffersize
total_sizeelement_countsbr   byteblocks_per_gridbinary_str_gapsbinary_gapss                     r   encoder   v   s!   GDFDJM$ZZ  !../!3c$ii??KK
ZA8H4H%IQQaMa%bbccc!..1BBCaG#N^J_J___##M222|A1A+"	a
aiidQh'DNN4   tq12FAID	 aii axx!../!3c$ii??KK
ZA8H4H%IQQaMa%bbccc!..1BBCaG#N^J_J___##M222|EJ'1A+"	199dQh'DDa$h'DtCII&&&"'#g,,2CFV2V"WXXYYOKK(?:SYYFGHHH::T:::OLL/LLLK=wrx888"+k:R:RTVT\]muwu~TTTr   c                 J   t          j        t          j        t          t	          d |                               d          d d         }t          j        |                               t           j                  }|dz	  dz                      t           j	                  }|dz	  dz  |d	z  z                      t           j	                  }t          t	          t           j
        t          |                                |||                              \  }}	}
t          d
|                                |                                z   |
                                dz  z   |	                                z   dz  |                                dz  z  dd           |||
|	|fS )Nc                 *    |                                  S )N)numel)xs    r   <lambda>z encode_weights.<locals>.<lambda>   s    qwwyy r   r   )dimr?   r   r   r:         zCompression factor:    d   r   z.2f%)r   cumsum
LongTensorr&   mapcatr
   r   torI   rP   r   r   r*   r   )weightsr   rv   rw   split_positions
W_combinedr   other_8bitsrx   ry   rz   s              r   encode_weightsr      s   l5#3D=P=PRY9Z9Z4[4[#\#\bcdddehfhehiO7##((55J!Q$.225;??N!Q$.*t2CDHHUUK&*3~$$&&/?ARSS, , ' '#GT#
 
  _'--//K4E4E4G4G"GJZJ`J`JbJbefJf"fimisisiuiu"uy|!|  AK  AQ  AQ  AS  AS  VW  AW  "X  _  _  _  _  `  `  `K!14HHr   )r   numpyr$   	dahuffmanr   r   r   r   r6   ra   r   r   rj   r   r   <module>r      s         " " " " " "            
 
 
7 7 7>/ / /d4@ 4@ 4@nI I I I Ir   