code: def dropout_inshape(module_masks, mask):
      if module_masks.input_mask is None:
          module_masks.set_input_mask(mask)
          module_masks.set_output_mask(mask)
          return module_masks.output_mask
      # if alreay visited
      assert module_masks.input_mask <= mask
      # It should be the same, we pass the masks by the reference(not the value),
      # so they acutually are two references of the same object(mask,
      # module_masks.input_mask). So we should continue pass the mask
      # to the following nodes even module_masks.input_mask == mask.
      # if pass the mask by copy.deepcopy(), then we can stop when
      # module_masks.input_mask == mask.
      # if module_masks.input_mask == mask:
      #     return None
      module_masks.set_input_mask(mask)
      module_masks.set_output_mask(mask)
      return module_masks.output_mask
  
imports: import logging
  import torch
label_desc: Use image node_id 2 for calling a global function with example usage: dropout_inshape(module_masks, mask) and returns: module_masks, module_masks