def METHOD_NAME(self, activation: torch.Tensor) -> torch.FloatTensor:
    r"""
    Multiply APoT quantized weight and uniformly quantized activation (dtype: quint8)
    with bitshifting instead of matrix multiplication.
    Result has dtype torch.float32
    Args:
        activation (Tensor): uniformly quantized activation tensor
    """
    assert activation.dim() == 2
    weight_rows = self.weight_transposed.size()[0]
    weight_cols = self.weight_transposed.size()[1]
    decomposed_weight = np.empty(shape=(weight_rows, weight_cols), dtype=object)
    for row in range(weight_rows):
        for col in range(weight_cols):
            decomposed_weight[row][col] = self.decompose_APoT(bin(self.weight_transposed[row][col]))
    result = self.matmul(decomposed_weight, activation).type(torch.FloatTensor)
    return result