def METHOD_NAME(self, gc, dc):
    for bdim, axis in [
        ((3, 4), 1),  # broadcasting intermediate dimensions
        ((2,), 0),  # broadcasting the first dimension
        ((1, 4, 1), 1),
    ]:
        # broadcasting with single elem dimensions at both ends
        min_ = -100
        max_ = min_ + 255
        A = np.round(np.random.rand(2, 3, 4, 5) * (max_ - min_) + min_)
        A = A.astype(np.float32)
        B = np.round(np.random.rand(*bdim) * 255 / 2 - 64).astype(np.float32)
        A.flat[0] = min_
        A.flat[1] = max_
        B.flat[0] = -64
        B.flat[1] = 127.0 / 2
        Output = collections.namedtuple("Output", ["Y", "op_type", "engine"])
        outputs = []
        op_engine_list = [("Add", ""), ("Add", "DNNLOWP"), ("Int8Add", "DNNLOWP")]
        for op_type, engine in op_engine_list:
            net = core.Net("test_net")
            add = core.CreateOperator(
                op_type,
                ["A", "B"],
                ["Y"],
                engine=engine,
                device_option=gc,
                broadcast=1,
                axis=axis,
                dequantize_output=1,
            )
            net.Proto().op.extend([add])
            self.ws.create_blob("A").feed(A, device_option=gc)
            self.ws.create_blob("B").feed(B, device_option=gc)
            self.ws.run(net)
            outputs.append(
                Output(Y=self.ws.blobs["Y"].fetch(), op_type=op_type, engine=engine)
            )
        check_quantized_results_close(outputs)