
    Pi                     v    d dl Z d dl mZ ddZdedefd	Zded
efdZded
efdZded
edefdZdedefdZdS )    N)TensorT      c                 T   g }|| rdndz
  }d||z
  z  dz
  }t          |          D ]}t          | rd||z   |z
  z  dz   nd||z   |z
  dz   z  dz             }t          j        dd|          }|dd         |dd         z   dz  }	|d|dz
   |z   z  |	z                                  z  }| r%|d|dz
   |z   z   |	z                                  z  }|dk    r|t          j        dd|dz             }|dd         |dd         z   dz  }	|d|dz
   |z   z  |	z                                  z  }| r%|d|dz
   |z   z   |	z                                  z  }|                    d           |                    d	           t          |          d|z  k    sJ |                                 |S )
a+  
    Creates the dynamic quantiztion map.

    The dynamic data type is made up of a dynamic exponent and
    fraction. As the exponent increase from 0 to -7 the number
    of bits available for the fraction shrinks.

    This is a generalization of the dynamic type where a certain
    number of the bits and be reserved for the linear quantization
    region (the fraction). n determines the maximum number of
    exponent bits.

    For more details see
    (8-Bit Approximations for Parallelism in Deep Learning)[https://arxiv.org/abs/1511.04561]
          g?Ng       @
   r   g      ?)rangeinttorchlinspacetolistappendlensort)
signedmax_exponent_bits
total_bitsdatanon_sign_bitsadditional_itemsifraction_items
boundariesmeanss
             m/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torchao/optim/quant_utils.pycreate_dynamic_mapr      s3   " D v"4!!15M]->>?!C$%% 
O 
OFA!m#&7781<<q=(+<<q@AAE
 

 ^CN;;
CRC:abb>1S8",q01A56%?GGIII 	Or 1A 56:;<uDLLNNND!^C,<q,@AA
CRC:abb>1S8",q01A56%?GGIII 	Or 1A 56:;<uDLLNNNDKKNNNKKt99:%%%%IIKKKK    input
block_sizec                    | j         }|                     d|          } |                                                     d                              d          }| |                    dd          z  } |                     |          |fS )z(Scale tensor so that max(abs(input)) = 1r	   g-q=r   )shapeviewabsamaxclip)r    r!   r#   scales       r   scale_tensorr)   ?   sv    KE JJr:&&EIIKKR  %%e,,EEJJr1%%%E::ee##r   qmapc                 0   t          j        | |d         k    dd          }|t          j        | ||dz            k    dd          z  }|t          j        | ||dz            k    dd          z  }|t          j        | ||dz            k    dd          z  }|t          j        | ||dz            k    dd          z  }|t          j        | ||dz            k    dd          z  }|t          j        | ||dz            k    dd          z  }|t          j        | ||d	z            k    d	d          z  }|d	z                       d
          }||         }||         }| |z
  }t          j        |||z
  dz  k    ||          }|                    t           j                  S )N   r   @          r      r   r      max      ?r   wherer'   touint8r    r*   codescodes_upval_downval_upresiduals          r   quantize_8bit_with_qmapr?   J   s    Kc*C33E	U[$urz"22B:::E	U[$urz"22B:::E	U[$urz"22B:::E	U[$uqy/11a888E	U[$uqy/11a888E	U[$uqy/11a888E	U[$uqy/11a888E 	C((HE{H(^FxHKVh%6#$==xOOE88EK   r   c                     t          j        | |d         k    dd          }|t          j        | ||dz            k    dd          z  }|t          j        | ||dz            k    dd          z  }|t          j        | ||dz            k    dd          z  }|dz                       d          }||         }||         }| |z
  }t          j        |||z
  dz  k    ||          }|                    t           j                  S )	Nr   r   r0   r   r      r2   r4   r5   r9   s          r   quantize_4bit_with_qmaprB   `   s     Ka(!Q//E	U[$uqy/11a888E	U[$uqy/11a888E	U[$uqy/11a888E 	B''HE{H(^FxHKVh%6#$==xOOE88EK   r   r:   r(   c                     ||                                                               |j        d         d          |                    dd          z  }|                    | j                  S )Nr   r	   r   )r   r$   r#   )r:   r*   r(   outs       r   dequant_with_qmaprE   r   sQ    
uyy{{

 
 Q
4
4uzz"a7H7H
HC88EK   r   x_f32returnc                 J   t          j        dd| j        | j        t           j                  }|                     t           j                  }|dz  }|dz  }t          j        ||k     |dz   |          }|                    t           j                                                  S )Nr   i   )devicedtypei  l      )	r   randintr#   rI   int32r$   r6   float32bfloat16)rF   
rand_16bit
x_f32_bits
x_fractionx_bf16_towards_zeros        r   _fp32_to_bf16_srrS   x   s     	7EKEK  J EK((Jf$J$z1Z
		 J ??5=))22444r   )Tr   r   )	r   r   r   r   r)   r?   rB   rE   rS    r   r   <module>rU      s          
0 0 0 0f$ $C $ $ $ $!6 ! ! ! ! !,!6 ! ! ! ! !$!V !6 !& ! ! ! !5F 5v 5 5 5 5 5 5r   