Hd Charles, thank you very much for your help!
It appeared as simple as you mentioned. Now it makes sense why it is named floatfunctional. I thought I tried it at the beginning of efforts, but I think I made some mistake.
To add: dequantize() and quantize_per_tensor are comparatively straightforward to implement in primitive operations.
def manual_addition(xq1_int, scale1, zp1, xq2_int, scale2, zp2, scale_r, zp_r):
       # from int8 to float
       xdq = scale1 * (xq1_int.astype(np.float) - zp1)
       ydq = scale2 * (xq2_int.astype(np.float) - zp2)
       
       # float addition
       zdq = xdq + ydq
      
      # from float to int8
       zq_manual_int = (((zdq / scale_r).round()) + zp_r).round() 
       return zq_manual_int #clipping might be needed