This is what the graph of a simple conv + relu pattern looks like: l__self___conv_weight = self.L__self___conv_weight l__self___conv_bias = self.L__self___conv_bias convolution_default = torch.ops.aten.convolution.default(arg2_1, l__self___conv_weight, l__self___conv_bias, [1, 1], [
(partitions, quant_config)
| 15 | |
| 16 | |
| 17 | def _annotate_conv_relu(partitions, quant_config): |
| 18 | """ |
| 19 | This is what the graph of a simple conv + relu pattern looks like: |
| 20 | l__self___conv_weight = self.L__self___conv_weight |
| 21 | l__self___conv_bias = self.L__self___conv_bias |
| 22 | convolution_default = torch.ops.aten.convolution.default(arg2_1, l__self___conv_weight, l__self___conv_bias, [1, 1], [1, 1], [1, 1], False, [0, 0], 1); arg2_1 = l__self___conv_weight = l__self___conv_bias = None |
| 23 | relu_default = torch.ops.aten.relu.default(convolution_default); convolution_default = None |
| 24 | """ |
| 25 | |
| 26 | conv_node = partitions[0].output_nodes[0] |
| 27 | input_node = conv_node.args[0] |
| 28 | relu_node = partitions[1].output_nodes[0] |
| 29 | weight_node = conv_node.args[1] |
| 30 | |
| 31 | if _nodes_are_annotated([conv_node, relu_node]): |
| 32 | return |
| 33 | |
| 34 | _annotate_nodes( |
| 35 | [(conv_node, input_node)], quant_config.input_quant_spec, input_node=True |
| 36 | ) |
| 37 | _annotate_nodes( |
| 38 | [(conv_node, weight_node)], quant_config.weight_quant_spec, input_node=True |
| 39 | ) |
| 40 | _annotate_nodes([(relu_node,)], quant_config.output_quant_spec) |
| 41 | |
| 42 | |
| 43 | @dataclass |
nothing calls this directly
no test coverage detected