code: def node_name_matches(node_name, module_name):
      """Check for a match between graph node name and stored module name, accounting for formatting and DDP training differences"""
  
      # process: remove all punctuation, everything to lower case
      def process(name):
          return "".join(
              c for c in name if c not in string.punctuation
          ).lower()
  
      processed_node_name = process(node_name)
      processed_module_name = process(module_name)
  
      # module names start with 'module.' in distributed data-parallel training, but fx graph node names don't; check for both
      distributed_node_name = "module." + node_name
      distributed_processed_node_name = "module" + processed_node_name
  
      return (
          (node_name == module_name)
          or (distributed_node_name == module_name)
          or (processed_node_name == processed_module_name)
          or (distributed_processed_node_name == processed_module_name)
      )
  
imports: import os
  import torch
  import json
  import string
  import time
  import numpy
  import sys
  import builtins
  import io
label_desc: Use image node_id 3 for calling a global function with example usage: node_name_matches(node_name, module_name) and returns: unknown, str