#########################################################
# Copyright (C) 2024 SiMa Technologies, Inc.
#
# This material is SiMa proprietary and confidential.
#
# This material may not be copied or distributed without
# the express prior written permission of SiMa.
#
# All rights reserved.
#########################################################
# Code owner: Christopher Rodrigues
#########################################################
"""
The entry point of the requantization hoisting transformation.
"""
from afe.ir.net import AwesomeNet
from afe.ir.transform.base_transform import BaseTransform
from afe.ir.transform.requantization_hoisting.requantization_use_analysis import analyze_needs
from afe.ir.transform.requantization_hoisting.hoisting_transform import move_requantization_in_model_graph
[docs]
def do_requantization_hoisting(net: AwesomeNet) -> None:
needs, subgraph_inputs = analyze_needs(net)
new_net = move_requantization_in_model_graph(net, needs, subgraph_inputs)
# The original net must be modified in-place.
# Copy all fields to the original object.
net.__dict__.update(new_net.__dict__)
[docs]
class HoistRequantization(BaseTransform):
"""
Moves requantization nodes as early as possible in the net.
"""
def __init__(self):
pass
def __call__(self, net: AwesomeNet) -> None:
do_requantization_hoisting(net)