class_docstr: Quantized version of `torch.nn.Softmax`. Adds quantization-specific arguments on top of `torch.nn.Softmax`.
  
  Args:
      output_bit (`int`):
          Bitwidth for the layer output activation.
      quant_mode (`bool`, *optional*, defaults to `False`):
          Whether or not the layer is quantized.
      force_dequant (`str`, *optional*, defaults to `"none"`):
          Force dequantize the layer if either "softmax" or "nonlinear" is given.
class_docstr_tok: ["Quantized","version","of","`","torch.nn.Softmax","`",".","Adds","quantization-specific","arguments","on","top","of","`","torch.nn.Softmax","`",".","Args",":","output_bit","(","`","int","`",")",":","Bitwidth","for","the","layer","output","activation",".","quant_mode","(","`","bool","`",",","*","optional","*",",","defaults","to","`","False","`",")",":","Whether","or","not","the","layer","is","quantized",".","force_dequant","(","`","str","`",",","*","optional","*",",","defaults","to","`","``","none","''","`",")",":","Force","dequantize","the","layer","if","either","``","softmax","''","or","``","nonlinear","''","is","given","."]
code: def int_exp(self, x_int, scaling_factor):
      with torch.no_grad():
          x0_int = torch.floor(self.x0 / scaling_factor)
      x_int = torch.max(x_int, self.const * x0_int)
  
      q = floor_ste.apply(x_int / x0_int)
      r = x_int - x0_int * q
      exp_int, exp_scaling_factor = self.int_polynomial(
          r, scaling_factor
      )
      exp_int = torch.clamp(
          floor_ste.apply(exp_int * 2 ** (self.const - q)), min=0
      )
      scaling_factor = exp_scaling_factor / 2**self.const
      return exp_int, scaling_factor
  
imports: import decimal
  import numpy
  import torch
  from torch import nn
  from torch.autograd import Function
  from ...utils import logging
label_desc: Use image node_id 3 for calling the IntSoftmax obj's underlying member method code with example usage: obj.int_exp(x_int, scaling_factor) and returns: exp_int,  scaling_factor