|  | 
 |  | 
 | import numpy as np | 
 | from caffe2.python import core, workspace | 
 | from caffe2.quantization.server import dnnlowp_pybind11  # type: ignore[attr-defined] | 
 |  | 
 |  | 
 | net = core.Net("test_net") | 
 |  | 
 | X = np.array([[1, 2], [3, 4]]).astype(np.float32) | 
 | W = np.array([[5, 6], [7, 8]]).astype(np.float32) | 
 | b = np.array([0, 1]).astype(np.float32) | 
 |  | 
 | workspace.FeedBlob("X", X) | 
 | workspace.FeedBlob("W", W) | 
 | workspace.FeedBlob("b", b) | 
 |  | 
 | Y = net.FC(["X", "W", "b"], ["Y"]) | 
 |  | 
 | dnnlowp_pybind11.ObserveMinMaxOfOutput("test_net.minmax", 1) | 
 | workspace.CreateNet(net) | 
 | workspace.RunNet(net) | 
 | print(workspace.FetchBlob("Y")) | 
 |  | 
 | workspace.ResetWorkspace() | 
 |  | 
 | workspace.FeedBlob("X", X) | 
 | workspace.FeedBlob("W", W) | 
 | workspace.FeedBlob("b", b) | 
 |  | 
 | dnnlowp_pybind11.ObserveHistogramOfOutput("test_net.hist", 1) | 
 | workspace.CreateNet(net) | 
 | workspace.RunNet(net) | 
 |  | 
 |  | 
 | workspace.FeedBlob("X", X) | 
 | workspace.FeedBlob("W", W) | 
 | workspace.FeedBlob("b", b) | 
 |  | 
 | dnnlowp_pybind11.AddOutputColumnMaxHistogramObserver( | 
 |     net._net.name, "test_net._col_max_hist", ["Y"] | 
 | ) | 
 | workspace.RunNet(net) |