def METHOD_NAME():
    """ test end to end adaround with weight 4 bits and output activations 8 bits quantized """
    def dummy_forward_pass(model: tf.keras.Model, _):
        """ Dummy forward pass """
        input_data = np.random.rand(32, 16, 16, 3)
        return model(input_data)
    np.random.seed(1)
    AimetLogger.set_level_for_all_areas(logging.DEBUG)
    model = keras_model()
    dataset_size = 32
    batch_size = 16
    possible_batches = dataset_size // batch_size
    input_data = np.random.rand(dataset_size, 16, 16, 3)
    dataset = tf.data.Dataset.from_tensor_slices(input_data)
    dataset = dataset.batch(batch_size=batch_size)
    params = AdaroundParameters(data_set=dataset, num_batches=possible_batches, default_num_iterations=10)
    # W4A8
    param_bw = 4
    output_bw = 8
    quant_scheme = QuantScheme.post_training_tf_enhanced
    adarounded_model = Adaround.apply_adaround(model, params, path='./', filename_prefix='dummy',
                                               default_param_bw=param_bw, default_quant_scheme=quant_scheme)
    # Read exported param encodings JSON file
    with open('./dummy.encodings') as json_file:
        encoding_data = json.load(json_file)
    encoding = encoding_data["conv2d/kernel:0"][0]
    before_min, before_max, before_delta, before_offset = encoding.get('min'), encoding.get('max'), \
                                                          encoding.get('scale'), encoding.get('offset')
    print(before_min, before_max, before_delta, before_offset)
    # Create QuantSim using adarounded_model, set and freeze parameter encodings and then invoke compute_encodings
    sim = QuantizationSimModel(adarounded_model, quant_scheme, default_output_bw=output_bw, default_param_bw=param_bw)
    sim.set_and_freeze_param_encodings(encoding_path='./dummy.encodings')
    sim.compute_encodings(dummy_forward_pass, None)
    conv_encoding = sim.model.layers[0].param_quantizers[0].encoding
    after_min, after_max, after_delta, after_offset = conv_encoding.min, conv_encoding.max, conv_encoding.delta,\
                                                      conv_encoding.offset
    print(after_min, after_max, after_delta, after_offset)
    assert np.allclose(before_min, after_min, atol=1e-6)
    assert np.allclose(before_max, after_max, atol=1e-6)
    assert np.allclose(before_delta, after_delta, atol=1e-4)
    assert before_offset == after_offset
    # Delete encodings file
    if os.path.exists("./dummy.encodings"):
        os.remove("./dummy.encodings")