class_docstr: Some pruners may prune the input channel of the convolutional
  layers. While pruning the input channel of the convolutional layers,
  the layers that share the same input tensor should prune the same
  channels, and we say these layers that share the same input tensor/channel
  has the input channel dependency. If we only prune the input channel of one
  layer in the dependency set, there will be a shape conflict for the other
  layers in the same dependency set, which may trigger a runtime error.
  Here we judge whether the application will truncate the dependency by analyzing
  whether the number of channels before and after the operation has changed.
  If not, the input channel dependency will be passed to the following nodes.
class_docstr_tok: ["Some","pruners","may","prune","the","input","channel","of","the","convolutional","layers",".","While","pruning","the","input","channel","of","the","convolutional","layers",",","the","layers","that","share","the","same","input","tensor","should","prune","the","same","channels",",","and","we","say","these","layers","that","share","the","same","input","tensor\/channel","has","the","input","channel","dependency",".","If","we","only","prune","the","input","channel","of","one","layer","in","the","dependency","set",",","there","will","be","a","shape","conflict","for","the","other","layers","in","the","same","dependency","set",",","which","may","trigger","a","runtime","error",".","Here","we","judge","whether","the","application","will","truncate","the","dependency","by","analyzing","whether","the","number","of","channels","before","and","after","the","operation","has","changed",".","If","not",",","the","input","channel","dependency","will","be","passed","to","the","following","nodes","."]
docstr: Build the input channel dependencies.
  The `InputChannelDependency` indicates the layers that have
  dependencies when pruning the input channel of the conv layers.
  In contrast, `ChannelDependency` indicates the dependent layers
  when pruning the output channles of conv layers (for example, L1FilterPruner).
docstr_tok: ["Build","the","input","channel","dependencies",".","The","`","InputChannelDependency","`","indicates","the","layers","that","have","dependencies","when","pruning","the","input","channel","of","the","conv","layers",".","In","contrast",",","`","ChannelDependency","`","indicates","the","dependent","layers","when","pruning","the","output","channles","of","conv","layers","(","for","example",",","L1FilterPruner",")","."]
code: def build_dependency(self):
      """
      Build the input channel dependencies.
      The `InputChannelDependency` indicates the layers that have
      dependencies when pruning the input channel of the conv layers.
      In contrast, `ChannelDependency` indicates the dependent layers
      when pruning the output channles of conv layers (for example, L1FilterPruner).
      """
      # unpack the tuple or list manually
      self.graph.unpack_manually()
      for tensor in self.graph.input_to_node:
          # start from this tensor, find all the conv layers that
          # take this tensor as input. Similar to the `ChannelDependency`
          # the conv layer will truncate the dependencies
          layers = self._get_following_convs(tensor)
          dependency_set = set(layers)
          for layer in layers:
              if layer in self.dependency:
                  dependency_set.update(self.dependency[layer])
          for layer in dependency_set:
              self.dependency[layer] = dependency_set
  
imports: import csv
  import logging
label_desc: Use image node_id 3 for calling the InputChannelDependency obj's underlying member method code with example usage: obj.build_dependency() without return types