# Copyright (C) 2020 Arm Limited or its affiliates. All rights reserved.
#
# Copyright 2017 The TensorFlow Authors. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Description:
# Contains SoftMax
import math

import numpy as np

from . import fp_math
from . import scaling
from .data_type import DataType
from .operation import Operation
from .tensor import create_const_tensor
from .tensor import create_reshape_tensor
from .tensor import Tensor
from .tensor import TensorPurpose


class SoftMax:
    # Turn off black formatting for the LUT tables to keep them compact
    # fmt: off

    EXP_LUT = [
        0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002,
        0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002,
        0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002,
        0x00000002, 0x00000002, 0x00010002, 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000003,
        0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000003,
        0x00000003, 0x00000003, 0x00000003, 0x00010003, 0x00000004, 0x00000004, 0x00000004, 0x00000004,
        0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000004,
        0x00010004, 0x00000005, 0x00000005, 0x00000005, 0x00000005, 0x00000005, 0x00000005, 0x00000005,
        0x00000005, 0x00000005, 0x00010005, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006,
        0x00000006, 0x00000006, 0x00010006, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007,
        0x00000007, 0x00000007, 0x00010007, 0x00000008, 0x00000008, 0x00000008, 0x00000008, 0x00000008,
        0x00010008, 0x00000009, 0x00000009, 0x00000009, 0x00000009, 0x00000009, 0x00010009, 0x0000000a,
        0x0000000a, 0x0000000a, 0x0000000a, 0x0001000a, 0x0000000b, 0x0000000b, 0x0000000b, 0x0000000b,
        0x0001000b, 0x0000000c, 0x0000000c, 0x0000000c, 0x0001000c, 0x0000000d, 0x0000000d, 0x0000000d,
        0x0001000d, 0x0000000e, 0x0000000e, 0x0000000e, 0x0001000e, 0x0000000f, 0x0000000f, 0x0001000f,
        0x00000010, 0x00000010, 0x00010010, 0x00000011, 0x00000011, 0x00010011, 0x00000012, 0x00000012,
        0x00010012, 0x00000013, 0x00000013, 0x00010013, 0x00000014, 0x00010014, 0x00000015, 0x00000015,
        0x00010015, 0x00000016, 0x00010016, 0x00000017, 0x00010017, 0x00000018, 0x00010018, 0x00000019,
        0x00010019, 0x0000001a, 0x0001001a, 0x0000001b, 0x0001001b, 0x0000001c, 0x0001001c, 0x0000001d,
        0x0001001d, 0x0000001e, 0x0001001e, 0x0001001f, 0x00000020, 0x00010020, 0x00010021, 0x00000022,
        0x00010022, 0x00010023, 0x00000024, 0x00010024, 0x00000025, 0x00010025, 0x00010026, 0x00010027,
        0x00000028, 0x00020028, 0x0000002a, 0x0001002a, 0x0001002b, 0x0001002c, 0x0000002d, 0x0001002d,
        0x0001002e, 0x0001002f, 0x00010030, 0x00010031, 0x00010032, 0x00010033, 0x00010034, 0x00010035,
        0x00010036, 0x00010037, 0x00010038, 0x00020039, 0x0001003b, 0x0000003c, 0x0002003c, 0x0001003e,
        0x0002003f, 0x00000041, 0x00020041, 0x00010043, 0x00010044, 0x00020045, 0x00020047, 0x00010049,
        0x0001004a, 0x0002004b, 0x0001004d, 0x0002004e, 0x00010050, 0x00020051, 0x00020053, 0x00010055,
        0x00020056, 0x00020058, 0x0002005a, 0x0001005c, 0x0002005d, 0x0002005f, 0x00020061, 0x00020063,
        0x00020065, 0x00020067, 0x00020069, 0x0002006b, 0x0003006d, 0x00020070, 0x00020072, 0x00020074,
        0x00030076, 0x00020079, 0x0003007b, 0x0002007e, 0x00030080, 0x00020083, 0x00020085, 0x00040087,
        0x0002008b, 0x0003008d, 0x00030090, 0x00020093, 0x00030095, 0x00030098, 0x0003009b, 0x0004009e,
        0x000300a2, 0x000300a5, 0x000300a8, 0x000300ab, 0x000400ae, 0x000300b2, 0x000400b5, 0x000400b9,
        0x000300bd, 0x000400c0, 0x000400c4, 0x000400c8, 0x000400cc, 0x000400d0, 0x000500d4, 0x000400d9,
        0x000400dd, 0x000500e1, 0x000400e6, 0x000500ea, 0x000400ef, 0x000500f3, 0x000500f8, 0x000500fd,
        0x00050102, 0x00050107, 0x0005010c, 0x00060111, 0x00050117, 0x0006011c, 0x00060122, 0x00060128,
        0x0006012e, 0x00060134, 0x0006013a, 0x00070140, 0x00060147, 0x0007014d, 0x00060154, 0x0007015a,
        0x00070161, 0x00060168, 0x0008016e, 0x00070176, 0x0008017d, 0x00080185, 0x0007018d, 0x00090194,
        0x0008019d, 0x000801a5, 0x000801ad, 0x000901b5, 0x000901be, 0x000901c7, 0x000901d0, 0x000901d9,
        0x000a01e2, 0x000901ec, 0x000a01f5, 0x000b01ff, 0x000a020a, 0x000b0214, 0x000a021f, 0x000b0229,
        0x000b0234, 0x000b023f, 0x000c024a, 0x000c0256, 0x000c0262, 0x000c026e, 0x000c027a, 0x000d0286,
        0x000d0293, 0x000d02a0, 0x000e02ad, 0x000e02bb, 0x000e02c9, 0x000e02d7, 0x000f02e5, 0x000f02f4,
        0x000f0303, 0x000f0312, 0x00100321, 0x00100331, 0x00110341, 0x00100352, 0x00120362, 0x00110374,
        0x00120385, 0x00120397, 0x001203a9, 0x001303bb, 0x001303ce, 0x001403e1, 0x001403f5, 0x00140409,
        0x0015041d, 0x00150432, 0x00160447, 0x0016045d, 0x00160473, 0x00170489, 0x001704a0, 0x001904b7,
        0x001804d0, 0x001904e8, 0x00190501, 0x001a051a, 0x001a0534, 0x001b054e, 0x001b0569, 0x001c0584,
        0x001c05a0, 0x001d05bc, 0x001e05d9, 0x001e05f7, 0x001e0615, 0x00200633, 0x00200653, 0x00200673,
        0x00210693, 0x002206b4, 0x002306d6, 0x002306f9, 0x0024071c, 0x00240740, 0x00260764, 0x0026078a,
        0x002607b0, 0x002807d6, 0x002907fe, 0x00290827, 0x002a0850, 0x002a087a, 0x002c08a4, 0x002c08d0,
        0x002e08fc, 0x002e092a, 0x002f0958, 0x00310987, 0x003109b8, 0x003209e9, 0x00330a1b, 0x00340a4e,
        0x00350a82, 0x00350ab7, 0x00380aec, 0x00380b24, 0x003a0b5c, 0x003a0b96, 0x003c0bd0, 0x003d0c0c,
        0x003e0c49, 0x003f0c87, 0x00400cc6, 0x00420d06, 0x00430d48, 0x00440d8b, 0x00460dcf, 0x00480e15,
        0x00480e5d, 0x00490ea5, 0x004c0eee, 0x004d0f3a, 0x004e0f87, 0x00500fd5, 0x00511025, 0x00531076,
        0x005610c9, 0x0056111f, 0x00581175, 0x005a11cd, 0x005c1227, 0x005e1283, 0x005e12e1, 0x0061133f,
        0x006413a0, 0x00651404, 0x00671469, 0x006914d0, 0x006c1539, 0x006c15a5, 0x00701611, 0x00721681,
        0x007416f3, 0x00761767, 0x007917dd, 0x007a1856, 0x007d18d0, 0x0080194d, 0x008319cd, 0x00841a50,
        0x00881ad4, 0x00891b5c, 0x008d1be5, 0x00911c72, 0x00911d03, 0x00961d94, 0x00981e2a, 0x009c1ec2,
        0x009e1f5e, 0x00a21ffc, 0x00a4209e, 0x00a92142, 0x00ab21eb, 0x00ae2296, 0x00b22344, 0x00b523f6,
        0x00b924ab, 0x00be2564, 0x00c02622, 0x00c526e2, 0x00c827a7, 0x00cc286f, 0x00d0293b, 0x00d52a0b,
        0x00d72ae0, 0x00dd2bb7, 0x00e12c94, 0x00e62d75, 0x00eb2e5b, 0x00ef2f46, 0x00f23035, 0x00f83127,
        0x00fe321f, 0x0101331d, 0x0108341e, 0x010c3526, 0x01123632, 0x01173744, 0x011c385b, 0x01233977,
        0x01273a9a, 0x012e3bc1, 0x01343cef, 0x013a3e23, 0x01403f5d, 0x0146409d, 0x014c41e3, 0x0154432f,
        0x01594483, 0x016145dc, 0x0168473d, 0x016f48a5, 0x01764a14, 0x017d4b8a, 0x01854d07, 0x018d4e8c,
        0x01945019, 0x019d51ad, 0x01a4534a, 0x01ad54ee, 0x01b5569b, 0x01be5850, 0x01c75a0e, 0x01d05bd5,
        0x01d85da5, 0x01e35f7d, 0x01eb6160, 0x01f6634b, 0x01ff6541, 0x02096740, 0x02146949, 0x021e6b5d,
        0x02296d7b, 0x02336fa4, 0x023f71d7, 0x024a7416, 0x02567660, 0x026278b6, 0x026d7b18, 0x027a7d85,
    ]

    ONE_OVER_ONE_PLUS_X_LUT = [
        0xffc17fff, 0xffc07fc0, 0xffc27f80, 0xffc07f42, 0xffc17f02, 0xffc17ec3, 0xffc27e84, 0xffc27e46,
        0xffc27e08, 0xffc37dca, 0xffc27d8d, 0xffc37d4f, 0xffc37d12, 0xffc37cd5, 0xffc37c98, 0xffc47c5b,
        0xffc47c1f, 0xffc47be3, 0xffc57ba7, 0xffc57b6c, 0xffc37b31, 0xffc67af4, 0xffc57aba, 0xffc67a7f,
        0xffc57a45, 0xffc67a0a, 0xffc779d0, 0xffc67997, 0xffc6795d, 0xffc77923, 0xffc778ea, 0xffc778b1,
        0xffc87878, 0xffc77840, 0xffc87807, 0xffc877cf, 0xffc97797, 0xffc87760, 0xffc97728, 0xffc976f1,
        0xffc976ba, 0xffc87683, 0xffca764b, 0xffca7615, 0xffca75df, 0xffca75a9, 0xffca7573, 0xffcb753d,
        0xffca7508, 0xffcb74d2, 0xffcb749d, 0xffca7468, 0xffcc7432, 0xffcc73fe, 0xffcb73ca, 0xffcc7395,
        0xffcd7361, 0xffcc732e, 0xffcc72fa, 0xffcd72c6, 0xffcd7293, 0xffcd7260, 0xffcc722d, 0xffce71f9,
        0xffcd71c7, 0xffce7194, 0xffce7162, 0xffce7130, 0xffcf70fe, 0xffce70cd, 0xffce709b, 0xffcf7069,
        0xffcf7038, 0xffcf7007, 0xffcf6fd6, 0xffcf6fa5, 0xffd06f74, 0xffd06f44, 0xffd06f14, 0xffd06ee4,
        0xffd06eb4, 0xffd06e84, 0xffd16e54, 0xffd16e25, 0xffd16df6, 0xffd16dc7, 0xffd06d98, 0xffd26d68,
        0xffd16d3a, 0xffd26d0b, 0xffd26cdd, 0xffd26caf, 0xffd26c81, 0xffd26c53, 0xffd36c25, 0xffd26bf8,
        0xffd36bca, 0xffd36b9d, 0xffd36b70, 0xffd26b43, 0xffd46b15, 0xffd36ae9, 0xffd46abc, 0xffd46a90,
        0xffd46a64, 0xffd46a38, 0xffd46a0c, 0xffd469e0, 0xffd469b4, 0xffd56988, 0xffd5695d, 0xffd56932,
        0xffd56907, 0xffd568dc, 0xffd568b1, 0xffd56886, 0xffd6685b, 0xffd56831, 0xffd66806, 0xffd667dc,
        0xffd667b2, 0xffd76788, 0xffd6675f, 0xffd76735, 0xffd6670c, 0xffd766e2, 0xffd666b9, 0xffd7668f,
        0xffd86666, 0xffd6663e, 0xffd86614, 0xffd765ec, 0xffd865c3, 0xffd8659b, 0xffd86573, 0xffd8654b,
        0xffd86523, 0xffd864fb, 0xffd964d3, 0xffd864ac, 0xffd96484, 0xffd8645d, 0xffd96435, 0xffd9640e,
        0xffd963e7, 0xffd963c0, 0xffd96399, 0xffda6372, 0xffd9634c, 0xffda6325, 0xffda62ff, 0xffda62d9,
        0xffda62b3, 0xffda628d, 0xffda6267, 0xffdb6241, 0xffda621c, 0xffdb61f6, 0xffda61d1, 0xffdc61ab,
        0xffd96187, 0xffdc6160, 0xffdb613c, 0xffdb6117, 0xffdb60f2, 0xffdc60cd, 0xffdc60a9, 0xffdb6085,
        0xffdc6060, 0xffdc603c, 0xffdc6018, 0xffdc5ff4, 0xffdc5fd0, 0xffdd5fac, 0xffdc5f89, 0xffdc5f65,
        0xffdd5f41, 0xffdd5f1e, 0xffdd5efb, 0xffdd5ed8, 0xffdd5eb5, 0xffdd5e92, 0xffdd5e6f, 0xffdd5e4c,
        0xffdd5e29, 0xffde5e06, 0xffde5de4, 0xffdd5dc2, 0xffde5d9f, 0xffde5d7d, 0xffde5d5b, 0xffde5d39,
        0xffdf5d17, 0xffde5cf6, 0xffde5cd4, 0xffdf5cb2, 0xffdf5c91, 0xffde5c70, 0xffdf5c4e, 0xffdf5c2d,
        0xffde5c0c, 0xffe05bea, 0xffdf5bca, 0xffdf5ba9, 0xffdf5b88, 0xffdf5b67, 0xffe05b46, 0xffe05b26,
        0xffdf5b06, 0xffe05ae5, 0xffe05ac5, 0xffe05aa5, 0xffe05a85, 0xffe05a65, 0xffe05a45, 0xffe15a25,
        0xffe05a06, 0xffe059e6, 0xffe159c6, 0xffe159a7, 0xffe05988, 0xffe15968, 0xffe15949, 0xffe1592a,
        0xffe1590b, 0xffe158ec, 0xffe258cd, 0xffe158af, 0xffe15890, 0xffe25871, 0xffe15853, 0xffe25834,
        0xffe25816, 0xffe257f8, 0xffe157da, 0xffe257bb, 0xffe3579d, 0xffe25780, 0xffe25762, 0xffe25744,
        0xffe35726, 0xffe25709, 0xffe256eb, 0xffe356cd, 0xffe356b0, 0xffe35693, 0xffe25676, 0xffe35658,
        0xffe3563b, 0xffe3561e, 0xffe35601, 0xffe355e4, 0xffe455c7, 0xffe355ab, 0xffe4558e, 0xffe35572,
        0xffe45555, 0xffe35539, 0xffe4551c, 0xffe45500, 0xffe454e4, 0xffe454c8, 0xffe454ac, 0xffe45490,
        0xffe45474, 0xffe55458, 0xffe4543d, 0xffe45421, 0xffe55405, 0xffe553ea, 0xffe453cf, 0xffe553b3,
        0xffe45398, 0xffe5537c, 0xffe55361, 0xffe55346, 0xffe5532b, 0xffe55310, 0xffe552f5, 0xffe552da,
        0xffe652bf, 0xffe552a5, 0xffe5528a, 0xffe6526f, 0xffe55255, 0xffe6523a, 0xffe65220, 0xffe55206,
        0xffe651eb, 0xffe651d1, 0xffe651b7, 0xffe6519d, 0xffe65183, 0xffe65169, 0xffe7514f, 0xffe65136,
        0xffe6511c, 0xffe75102, 0xffe650e9, 0xffe750cf, 0xffe650b6, 0xffe7509c, 0xffe75083, 0xffe6506a,
        0xffe75050, 0xffe75037, 0xffe7501e, 0xffe75005, 0xffe74fec, 0xffe74fd3, 0xffe74fba, 0xffe74fa1,
        0xffe84f88, 0xffe74f70, 0xffe84f57, 0xffe74f3f, 0xffe84f26, 0xffe74f0e, 0xffe84ef5, 0xffe84edd,
        0xffe84ec5, 0xffe84ead, 0xffe74e95, 0xffe84e7c, 0xffe84e64, 0xffe94e4c, 0xffe84e35, 0xffe84e1d,
        0xffe84e05, 0xffe94ded, 0xffe84dd6, 0xffe84dbe, 0xffe94da6, 0xffe94d8f, 0xffe84d78, 0xffe84d60,
        0xffea4d48, 0xffe84d32, 0xffe94d1a, 0xffe94d03, 0xffe84cec, 0xffe94cd4, 0xffe94cbd, 0xffea4ca6,
        0xffe94c90, 0xffe84c79, 0xffea4c61, 0xffe94c4b, 0xffe94c34, 0xffea4c1d, 0xffe94c07, 0xffea4bf0,
        0xffe94bda, 0xffea4bc3, 0xffea4bad, 0xffe94b97, 0xffea4b80, 0xffea4b6a, 0xffea4b54, 0xffea4b3e,
        0xffea4b28, 0xffea4b12, 0xffea4afc, 0xffea4ae6, 0xffea4ad0, 0xffeb4aba, 0xffea4aa5, 0xffea4a8f,
        0xffeb4a79, 0xffea4a64, 0xffea4a4e, 0xffeb4a38, 0xffeb4a23, 0xffea4a0e, 0xffeb49f8, 0xffea49e3,
        0xffeb49cd, 0xffeb49b8, 0xffeb49a3, 0xffeb498e, 0xffea4979, 0xffeb4963, 0xffeb494e, 0xffec4939,
        0xffeb4925, 0xffea4910, 0xffec48fa, 0xffeb48e6, 0xffeb48d1, 0xffec48bc, 0xffeb48a8, 0xffec4893,
        0xffeb487f, 0xffec486a, 0xffeb4856, 0xffec4841, 0xffec482d, 0xffeb4819, 0xffec4804, 0xffec47f0,
        0xffec47dc, 0xffec47c8, 0xffec47b4, 0xffec47a0, 0xffec478c, 0xffec4778, 0xffec4764, 0xffec4750,
        0xffec473c, 0xffed4728, 0xffec4715, 0xffec4701, 0xffed46ed, 0xffec46da, 0xffed46c6, 0xffec46b3,
        0xffec469f, 0xffed468b, 0xffed4678, 0xffec4665, 0xffed4651, 0xffed463e, 0xffed462b, 0xffec4618,
        0xffed4604, 0xffed45f1, 0xffed45de, 0xffed45cb, 0xffed45b8, 0xffed45a5, 0xffed4592, 0xffed457f,
        0xffee456c, 0xffed455a, 0xffed4547, 0xffed4534, 0xffee4521, 0xffed450f, 0xffed44fc, 0xffee44e9,
        0xffed44d7, 0xffee44c4, 0xffee44b2, 0xffed44a0, 0xffee448d, 0xffee447b, 0xffed4469, 0xffee4456,
        0xffee4444, 0xffee4432, 0xffee4420, 0xffee440e, 0xffee43fc, 0xffee43ea, 0xffee43d8, 0xffee43c6,
        0xffee43b4, 0xffee43a2, 0xffee4390, 0xffef437e, 0xffee436d, 0xffee435b, 0xffef4349, 0xffee4338,
        0xffee4326, 0xffef4314, 0xffee4303, 0xffef42f1, 0xffee42e0, 0xffef42ce, 0xffee42bd, 0xffef42ab,
        0xffef429a, 0xffee4289, 0xfff04277, 0xffee4267, 0xffef4255, 0xffef4244, 0xffef4233, 0xffef4222,
        0xffee4211, 0xffef41ff, 0xfff041ee, 0xffef41de, 0xffef41cd, 0xffee41bc, 0xfff041aa, 0xffef419a,
        0xffef4189, 0xffef4178, 0xfff04167, 0xffef4157, 0xffef4146, 0xfff04135, 0xffef4125, 0xfff04114,
        0xffef4104, 0xfff040f3, 0xffef40e3, 0xfff040d2, 0xfff040c2, 0xffef40b2, 0xfff040a1, 0xfff04091,
        0xfff04081, 0xffef4071, 0xfff04060, 0xfff04050, 0xfff04040, 0xfff04030, 0xfff04020, 0xfff04010
    ]
    # fmt: on

    def __init__(self, op):
        self.op = op

    def generate_exp_table(self, beta, input_scale):
        integer_bits = 5
        total_signed_bits = 31
        # Calculate scaling
        real_beta = min(
            np.double(beta) * np.double(input_scale) * (1 << (31 - integer_bits)), np.double((1 << 31) - 1.0)
        )
        scale, shift = scaling.quantise_scale(real_beta)
        shift = 31 - shift
        diff_min = -1.0 * math.floor(
            1.0 * ((1 << integer_bits) - 1) * (1 << (total_signed_bits - integer_bits)) / (1 << shift)
        )
        # Generate the exp LUT
        lut = []
        for x in range(256):
            input_diff = x - 255
            if input_diff >= diff_min:
                rescale = fp_math.saturating_rounding_mul(input_diff * (1 << shift), scale)
                lut.append(fp_math.exp_on_negative_values(rescale))
            else:
                lut.append(0)
        return lut

    def get_graph(self):
        ifm = self.op.inputs[0]
        ofm = self.op.outputs[0]

        if ifm.dtype in (DataType.uint8, DataType.int8) and ofm.dtype == ifm.dtype:
            return self.get_graph_8bit(ifm, ofm)
        elif ifm.dtype == DataType.int16 and ofm.dtype == DataType.int16:
            return self.get_graph_int16(ifm, ofm)
        else:
            self.op.run_on_npu = False
            return self.op

    def get_graph_8bit(self, ifm, ofm):
        exp_lut = self.generate_exp_table(self.op.attrs.get("beta", 1.0), ifm.quantization.scale_f32)
        ifm = create_reshape_tensor(ifm, ifm.get_full_shape())
        ofm = create_reshape_tensor(ofm, ofm.get_full_shape(), False)
        no_scale_quant = ifm.quantization.clone()
        no_scale_quant.scale_f32 = None
        no_scale_quant.zero_point = 0
        one_scale_quant = ifm.quantization.clone()
        one_scale_quant.scale_f32 = 1.0
        one_scale_quant.zero_point = 0
        ifm.quantization.zero_point = 0

        # PASS 0 - Depthwise Maxpool
        maxpool_op = self.op.clone("_maxpool0")
        maxpool_op.type = "MaxPool"
        maxpool_h = ifm.shape[1] * ifm.shape[2]
        maxpool_w = ifm.shape[3]
        maxpool_ifm_shape = [1, maxpool_h, maxpool_w, 1]
        maxpool_op.attrs["padding"] = b"VALID"
        maxpool_op.attrs["stride_w"] = 1
        maxpool_op.attrs["stride_h"] = 1
        maxpool_op.attrs["filter_width"] = maxpool_w
        maxpool_op.attrs["filter_height"] = 1
        maxpool_op.attrs["strides"] = [1, maxpool_op.attrs["stride_h"], maxpool_op.attrs["stride_w"], 1]
        maxpool_op.attrs["ksize"] = [1, maxpool_op.attrs["filter_height"], maxpool_op.attrs["filter_width"], 1]
        maxpool_op.inputs = [create_reshape_tensor(ifm, maxpool_ifm_shape)]
        ifm_max = Tensor([1, maxpool_h, 1, 1], ifm.dtype, maxpool_op.name + "_0")
        ifm_max.quantization = no_scale_quant
        maxpool_op.set_output_tensor(ifm_max)

        # PASS 1 - Sub+LUT(exp)
        sub_op = Operation("SubAct", self.op.name + "_sub1")
        sub_op.add_input_tensor(ifm)
        sub_op.add_input_tensor(ifm_max)
        sub_op.set_activation_lut(
            create_const_tensor(
                sub_op.name + "_lut", [1, 1, 1, 256], DataType.int32, exp_lut, np.int32, TensorPurpose.LUT
            )
        )
        ifm_exp = Tensor(ifm.shape, DataType.int32, sub_op.name + "_0")
        ifm_exp.quantization = one_scale_quant.clone()
        ifm_exp.quantization.zero_point = 127
        ifm_exp.quantization.quant_min = -128
        ifm_exp.quantization.quant_max = 127
        sub_op.set_output_tensor(ifm_exp)

        # PASS 2 - SHR
        shr2_op = Operation("SHR", self.op.name + "_shr2")
        shr2_op.attrs["rounding_mode"] = b"NATURAL"
        shr2_op.add_input_tensor(ifm_exp)
        shr2_op.add_input_tensor(
            create_const_tensor(
                shr2_op.name + "_const", [1, 1, 1, 1], DataType.int32, [12], np.int32, quantization=no_scale_quant
            ),
        )
        rescaled_exp = Tensor(ifm.shape, ifm_exp.dtype, shr2_op.name + "_0")
        rescaled_exp.quantization = no_scale_quant
        shr2_op.set_output_tensor(rescaled_exp)

        # PASS 3 - Reduce sum
        reduce_sum_op = Operation("ReduceSum", self.op.name + "_reduce_sum3")
        reduce_sum_op.attrs["padding"] = b"VALID"
        reduce_sum_op.attrs["stride_w"] = 1
        reduce_sum_op.attrs["stride_h"] = 1
        reduce_sum_op.attrs["filter_width"] = 1
        reduce_sum_op.attrs["filter_height"] = 1
        reduce_sum_op.attrs["strides"] = [1, reduce_sum_op.attrs["stride_h"], reduce_sum_op.attrs["stride_w"], 1]
        reduce_sum_op.attrs["ksize"] = [1, reduce_sum_op.attrs["filter_height"], reduce_sum_op.attrs["filter_width"], 1]
        reduce_sum_op.add_input_tensor(rescaled_exp)

        reduce_sum_shape = [1, rescaled_exp.shape[1], rescaled_exp.shape[2], 1]
        sum_of_exp = Tensor(reduce_sum_shape, DataType.int32, reduce_sum_op.name + "_0")
        sum_of_exp.quantization = no_scale_quant
        reduce_sum_op.set_output_tensor(sum_of_exp)

        # PASS 4 - CLZ
        clz_op = Operation("CLZ", self.op.name + "_clz4")
        clz_op.add_input_tensor(sum_of_exp)
        headroom_plus_one = Tensor(reduce_sum_shape, DataType.int32, clz_op.name + "_0")
        headroom_plus_one.quantization = no_scale_quant
        clz_op.set_output_tensor(headroom_plus_one)

        # PASS 5 - Sub
        sub5_op = Operation("SubAct", self.op.name + "_sub5")
        sub5_op.add_input_tensor(
            create_const_tensor(
                "headroom_offset_const",
                [1, 1, 1, 1],
                DataType.int32,
                [12 + 31 - 8],
                np.int32,
                quantization=no_scale_quant,
            ),
        )
        sub5_op.add_input_tensor(headroom_plus_one)
        right_shift = Tensor(reduce_sum_shape, DataType.int32, sub5_op.name + "_0")
        right_shift.quantization = no_scale_quant
        sub5_op.set_output_tensor(right_shift)

        # PASS 6 - Sub
        one = create_const_tensor("one_const", [1, 1, 1, 1], DataType.int32, [1], np.int32, quantization=no_scale_quant)
        sub6_op = Operation("SubAct", self.op.name + "_sub6")
        sub6_op.add_input_tensor(headroom_plus_one)
        sub6_op.add_input_tensor(one)
        headroom = Tensor(reduce_sum_shape, DataType.int32, sub6_op.name + "_0")
        headroom.quantization = no_scale_quant
        sub6_op.set_output_tensor(headroom)

        # PASS 7 - SHL
        shl7_op = Operation("SHL", self.op.name + "_shl7")
        shl7_op.add_input_tensor(sum_of_exp)
        shl7_op.add_input_tensor(headroom)
        shifted_sum = Tensor(reduce_sum_shape, DataType.int32, shl7_op.name + "_0")
        shifted_sum.quantization = no_scale_quant
        shl7_op.set_output_tensor(shifted_sum)

        # PASS 8 - Sub
        sub8_op = Operation("SubAct", self.op.name + "_sub8")
        sub8_op.add_input_tensor(shifted_sum)
        sub8_op.add_input_tensor(
            create_const_tensor(
                "shifted_one_const", [1, 1, 1, 1], DataType.int32, [1 << 30], np.int32, quantization=no_scale_quant
            ),
        )
        shifted_sum_minus_one = Tensor(reduce_sum_shape, DataType.int32, sub8_op.name + "_0")
        shifted_sum_minus_one.quantization = no_scale_quant
        sub8_op.set_output_tensor(shifted_sum_minus_one)

        # PASS 9 - SHL
        shl9_op = Operation("SHL", self.op.name + "_shl9")
        shl9_op.add_input_tensor(shifted_sum_minus_one)
        shl9_op.add_input_tensor(one)
        shifted_sum_minus_one = Tensor(reduce_sum_shape, DataType.int32, shl9_op.name + "_0")
        shifted_sum_minus_one.quantization = no_scale_quant
        shl9_op.set_output_tensor(shifted_sum_minus_one)

        # PASS 10 - Add
        add10_op = Operation("AddAct", self.op.name + "_add10")
        add10_op.add_input_tensor(
            create_const_tensor(
                "F0_one_const", [1, 1, 1, 1], DataType.int32, [(1 << 31) - 1], np.int32, quantization=no_scale_quant
            ),
        )
        add10_op.add_input_tensor(shifted_sum_minus_one)
        add10_op.attrs["rescale"] = [1, 1]
        half_denominator = Tensor(reduce_sum_shape, DataType.int32, add10_op.name + "_0")
        half_denominator.quantization = one_scale_quant
        add10_op.set_output_tensor(half_denominator)

        # PASS 11 - Multiply
        mul11_op = Operation("MulAct", self.op.name + "_mul11")
        mul11_op.add_input_tensor(half_denominator)
        mul11_op.add_input_tensor(
            create_const_tensor(
                "neg_32_over_17_const",
                [1, 1, 1, 1],
                DataType.int32,
                [-1010580540],
                np.int32,
                quantization=one_scale_quant,
            ),
        )
        rescaled = Tensor(ifm_exp.shape, DataType.int32, mul11_op.name + "_0")
        rescaled.quantization = one_scale_quant.clone()
        rescaled.quantization.scale_f32 = 2.0
        mul11_op.set_output_tensor(rescaled)

        # PASS 12 - Add
        add12_op = Operation("AddAct", self.op.name + "_add12")
        add12_op.add_input_tensor(rescaled)
        add12_op.add_input_tensor(
            create_const_tensor(
                "48_over_17_const", [1, 1, 1, 1], DataType.int32, [1515870810], np.int32, quantization=no_scale_quant
            ),
        )
        rescale_w_offset = Tensor(reduce_sum_shape, DataType.int32, add12_op.name + "_0")
        rescale_w_offset.quantization = one_scale_quant
        add12_op.set_output_tensor(rescale_w_offset)

        nr_x = rescale_w_offset
        F2_one = create_const_tensor(
            "F2_one_const", [1, 1, 1, 1], DataType.int32, [(1 << 29)], np.int32, quantization=no_scale_quant
        )
        four = create_const_tensor(
            "four_const", [1, 1, 1, 1], DataType.int32, [4], np.int32, quantization=no_scale_quant
        )
        for i in range(3):
            # PASS 13, 18, 23 - MUL
            mul_op = Operation("MulAct", self.op.name + "_mul%d" % (13 + i * 5))
            mul_op.add_input_tensor(nr_x)
            mul_op.add_input_tensor(half_denominator)
            half_denominator_times_x = Tensor(ifm_exp.shape, DataType.int32, mul_op.name + "_0")
            half_denominator_times_x.quantization = one_scale_quant.clone()
            half_denominator_times_x.quantization.scale_f32 = 2.0
            mul_op.set_output_tensor(half_denominator_times_x)
            # PASS 14, 19, 24 - SUB
            sub_op = Operation("SubAct", self.op.name + "_sub%d" % (14 + i * 5))
            sub_op.add_input_tensor(F2_one)
            sub_op.add_input_tensor(half_denominator_times_x)
            one_minus_half_denominator_times_x = Tensor(reduce_sum_shape, DataType.int32, sub_op.name + "_0")
            one_minus_half_denominator_times_x.quantization = one_scale_quant
            sub_op.set_output_tensor(one_minus_half_denominator_times_x)
            # PASS 15, 20, 25 - MUL
            mul_op = Operation("MulAct", self.op.name + "_mul%d" % (15 + i * 5))
            mul_op.add_input_tensor(nr_x)
            mul_op.add_input_tensor(one_minus_half_denominator_times_x)
            to_rescale = Tensor(ifm_exp.shape, DataType.int32, mul_op.name + "_0")
            to_rescale.quantization = one_scale_quant.clone()
            to_rescale.quantization.scale_f32 = 2.0
            mul_op.set_output_tensor(to_rescale)
            # PASS 16, 21, 26 - MUL
            shl_op = Operation("MulAct", self.op.name + "_mul%d" % (16 + i * 5))
            shl_op.add_input_tensor(to_rescale)
            shl_op.add_input_tensor(four)
            to_add = Tensor(reduce_sum_shape, DataType.int32, shl_op.name + "_0")
            to_add.quantization = no_scale_quant
            shl_op.set_output_tensor(to_add)
            # PASS 17, 22, 27 - ADD
            add_op = Operation("AddAct", self.op.name + "_add%d" % (17 + i * 5))
            add_op.add_input_tensor(nr_x)
            add_op.add_input_tensor(to_add)
            nr_x = Tensor(reduce_sum_shape, DataType.int32, add_op.name + "_0")
            nr_x.quantization = one_scale_quant
            add_op.set_output_tensor(nr_x)

        # PASS 28 - Multiply
        mul28_op = Operation("MulAct", self.op.name + "_mul28")
        mul28_op.add_input_tensor(nr_x)
        mul28_op.add_input_tensor(
            create_const_tensor("two_const", [1, 1, 1, 1], DataType.int32, [2], np.int32, quantization=no_scale_quant)
        )
        scale_factor = Tensor(reduce_sum_shape, DataType.int32, mul28_op.name + "_0")
        scale_factor.quantization = one_scale_quant
        mul28_op.set_output_tensor(scale_factor)

        # PASS 29 - Multiply
        mul_op = Operation("MulAct", self.op.name + "_mul29")
        mul_op.add_input_tensor(ifm_exp)
        mul_op.add_input_tensor(scale_factor)
        scaled_exp = Tensor(ifm_exp.shape, DataType.int32, mul_op.name + "_0")
        scaled_exp.quantization = one_scale_quant.clone()
        scaled_exp.quantization.scale_f32 = 2.0
        mul_op.set_output_tensor(scaled_exp)

        # PASS 30 - SHR
        shr30_op = Operation("SHR", self.op.name + "_shr30")
        shr30_op.attrs["rounding_mode"] = b"NATURAL"
        shr30_op.add_input_tensor(scaled_exp)
        shr30_op.add_input_tensor(right_shift)
        shr30_op.set_output_tensor(ofm)

        return shr30_op

    def get_graph_int16(self, ifm, ofm):
        ifm = create_reshape_tensor(ifm, ifm.get_full_shape())
        ofm = create_reshape_tensor(ofm, ofm.get_full_shape(), False)
        no_scale_quant = ifm.quantization.clone()
        no_scale_quant.scale_f32 = None

        # PASS 0 - Depthwise Maxpool
        maxpool_op = self.op.clone("_maxpool0")
        maxpool_op.type = "MaxPool"
        maxpool_h = ifm.shape[1] * ifm.shape[2]
        maxpool_w = ifm.shape[3]
        maxpool_ifm_shape = [1, maxpool_h, maxpool_w, 1]
        maxpool_op.attrs["padding"] = b"VALID"
        maxpool_op.attrs["stride_w"] = 1
        maxpool_op.attrs["stride_h"] = 1
        maxpool_op.attrs["filter_width"] = maxpool_w
        maxpool_op.attrs["filter_height"] = 1
        maxpool_op.attrs["strides"] = [1, maxpool_op.attrs["stride_h"], maxpool_op.attrs["stride_w"], 1]
        maxpool_op.attrs["ksize"] = [1, maxpool_op.attrs["filter_height"], maxpool_op.attrs["filter_width"], 1]
        maxpool_op.inputs = [create_reshape_tensor(ifm, maxpool_ifm_shape)]
        maxpool_ofm = Tensor([1, maxpool_h, 1, 1], ifm.dtype, maxpool_op.name + "_0")
        maxpool_ofm.quantization = no_scale_quant
        maxpool_op.set_output_tensor(maxpool_ofm)

        # PASS 1 - Sub
        sub1_op = Operation("SubAct", self.op.name + "_sub1")
        sub1_op.add_input_tensor(ifm)
        sub1_op.add_input_tensor(create_reshape_tensor(maxpool_ofm, [1, ifm.shape[1], ifm.shape[2], 1]))
        sub1_ofm = Tensor(ifm.shape, DataType.int32, sub1_op.name + "_0")
        sub1_ofm.quantization = ifm.quantization.clone()
        sub1_op.set_output_tensor(sub1_ofm)

        # PASS 2 - Mul
        beta = self.op.attrs.get("beta", 1.0)
        mul2_out_range = 10.0 / 65535.0
        mul2_scale, _ = scaling.elementwise_mul_scale(sub1_ofm.quantization.scale_f32, beta, mul2_out_range)
        mul2_quant = ifm.quantization.clone()
        mul2_quant.scale_f32 = beta
        mul2_op = Operation("MulAct", self.op.name + "_mul2")
        mul2_op.add_input_tensor(sub1_ofm)
        mul2_op.add_input_tensor(
            create_const_tensor(
                mul2_op.name + "_const", [1, 1, 1, 1], DataType.int32, [mul2_scale], np.int32, quantization=mul2_quant
            ),
        )
        mul2_ofm = Tensor(ifm.shape, DataType.int32, mul2_op.name + "_0")
        mul2_ofm.quantization = ofm.quantization.clone()
        mul2_ofm.quantization.scale_f32 = mul2_out_range
        mul2_op.set_output_tensor(mul2_ofm)

        # PASS 3 - Add+LUT(exp)
        add_op = Operation("AddAct", self.op.name + "_add3")
        add_op.add_input_tensor(mul2_ofm)
        add_op.add_input_tensor(
            create_const_tensor(
                add_op.name + "_const", [1, 1, 1, 1], DataType.int32, [32767], np.int32, quantization=no_scale_quant
            ),
        )
        add_op.set_activation_lut(
            create_const_tensor(
                add_op.name + "_lut", [1, 1, 1, 512], DataType.int32, self.EXP_LUT, np.int32, TensorPurpose.LUT
            )
        )
        exp_ofm = Tensor(mul2_ofm.shape, DataType.int16, add_op.name + "_0")
        exp_ofm.quantization = mul2_ofm.quantization.clone()
        add_op.set_output_tensor(exp_ofm)

        # PASS 4 - Reduce sum
        reduce_sum_op = Operation("ReduceSum", self.op.name + "_reduce_sum4")
        reduce_sum_op.attrs["padding"] = b"VALID"
        reduce_sum_op.attrs["stride_w"] = 1
        reduce_sum_op.attrs["stride_h"] = 1
        reduce_sum_op.attrs["filter_width"] = 1
        reduce_sum_op.attrs["filter_height"] = 1
        reduce_sum_op.attrs["strides"] = [1, reduce_sum_op.attrs["stride_h"], reduce_sum_op.attrs["stride_w"], 1]
        reduce_sum_op.attrs["ksize"] = [1, reduce_sum_op.attrs["filter_height"], reduce_sum_op.attrs["filter_width"], 1]
        reduce_sum_op.add_input_tensor(exp_ofm)

        reduce_sum_shape = [1, exp_ofm.shape[1], exp_ofm.shape[2], 1]
        sum_of_exp = Tensor(reduce_sum_shape, DataType.int32, reduce_sum_op.name + "_0")
        sum_of_exp.quantization = no_scale_quant
        reduce_sum_op.set_output_tensor(sum_of_exp)

        # PASS 5 - CLZ
        clz_op = Operation("CLZ", self.op.name + "_clz5")
        clz_op.add_input_tensor(sum_of_exp)
        headroom_plus_one = Tensor(reduce_sum_shape, DataType.int32, clz_op.name + "_0")
        headroom_plus_one.quantization = no_scale_quant
        clz_op.set_output_tensor(headroom_plus_one)

        # PASS 6 - Sub
        sub6_op = Operation("SubAct", self.op.name + "_sub6")
        sub6_op.add_input_tensor(
            create_const_tensor(
                sub6_op.name + "_const", [1, 1, 1, 1], DataType.int32, [31], np.int32, quantization=no_scale_quant
            ),
        )
        sub6_op.add_input_tensor(headroom_plus_one)
        reciprocal_right_shift = Tensor(reduce_sum_shape, DataType.int32, sub6_op.name + "_0")
        reciprocal_right_shift.quantization = no_scale_quant
        sub6_op.set_output_tensor(reciprocal_right_shift)

        # PASS 7 - SHL
        shl7_op = Operation("SHL", self.op.name + "_shl7")
        shl7_op.add_input_tensor(
            create_const_tensor(
                shl7_op.name + "_const", [1, 1, 1, 1], DataType.int32, [1], np.int32, quantization=no_scale_quant
            ),
        )
        shl7_op.add_input_tensor(reciprocal_right_shift)
        constant_one = Tensor(reduce_sum_shape, DataType.int32, shl7_op.name + "_0")
        constant_one.quantization = no_scale_quant
        shl7_op.set_output_tensor(constant_one)

        # PASS 8 - Sub
        sub8_op = Operation("SubAct", self.op.name + "_sub8")
        sub8_op.add_input_tensor(sum_of_exp)
        sub8_op.add_input_tensor(constant_one)
        sum_of_exps_minus_one = Tensor(reduce_sum_shape, DataType.int32, sub8_op.name + "_0")
        sum_of_exps_minus_one.quantization = no_scale_quant
        sub8_op.set_output_tensor(sum_of_exps_minus_one)

        # PASS 9 - SHL
        shl9_op = Operation("SHL", self.op.name + "_shl9")
        shl9_op.add_input_tensor(sum_of_exps_minus_one)
        shl9_op.add_input_tensor(headroom_plus_one)
        shifted_sum_minus_one = Tensor(reduce_sum_shape, DataType.int32, shl9_op.name + "_0")
        shifted_sum_minus_one.quantization = no_scale_quant
        shl9_op.set_output_tensor(shifted_sum_minus_one)

        # PASS 10 - SHR
        shr10_op = Operation("SHR", self.op.name + "_shr10")
        shr10_op.add_input_tensor(shifted_sum_minus_one)
        shr10_op.add_input_tensor(
            create_const_tensor(
                shr10_op.name + "_const", [1, 1, 1, 1], DataType.int32, [15], np.int32, quantization=no_scale_quant
            ),
        )
        shifted_sum_minus_one_16 = Tensor(reduce_sum_shape, DataType.int32, shr10_op.name + "_0")
        shifted_sum_minus_one_16.quantization = shifted_sum_minus_one.quantization.clone()
        shr10_op.set_output_tensor(shifted_sum_minus_one_16)

        # PASS 11 - Sub+LUT(one over one plus x)
        sub11_op = Operation("SubAct", self.op.name + "_sub11")
        sub11_op.add_input_tensor(shifted_sum_minus_one_16)
        sub11_op.add_input_tensor(
            create_const_tensor(
                sub11_op.name + "_const", [1, 1, 1, 1], DataType.int32, [32768], np.int32, quantization=no_scale_quant
            ),
        )
        sub11_op.set_activation_lut(
            create_const_tensor(
                sub11_op.name + "_lut",
                [1, 1, 1, 512],
                DataType.int32,
                self.ONE_OVER_ONE_PLUS_X_LUT,
                np.int32,
                TensorPurpose.LUT,
            )
        )
        reciprocal_scale = Tensor(reduce_sum_shape, DataType.int16, sub11_op.name + "_0")
        reciprocal_scale.quantization = no_scale_quant
        sub11_op.set_output_tensor(reciprocal_scale)

        # PASS 12 - Multiply
        mul_op = Operation("MulAct", self.op.name + "_mul12")
        mul_op.add_input_tensor(exp_ofm)
        mul_op.add_input_tensor(reciprocal_scale)
        mul_ofm = Tensor(exp_ofm.shape, DataType.int32, mul_op.name + "_0")
        mul_ofm.quantization = no_scale_quant
        mul_op.set_output_tensor(mul_ofm)

        # PASS 13 - SHR
        shr13_op = Operation("SHR", self.op.name + "_shr13")
        shr13_op.add_input_tensor(mul_ofm)
        shr13_op.add_input_tensor(reciprocal_right_shift)
        shr13_op.set_output_tensor(ofm)

        return shr13_op
