code: def common(
      self,
      fn,
      args,
      expected_matches,
      expected_nodes,
      additional_check=lambda code: None,
  ):
      counters.clear()
      torch.manual_seed(42)
      expected = fn(*args)
      torch.manual_seed(42)
      actual, codes = run_and_get_code(torch.compile(fn), *args)
      if len(codes) == 1:
          codes = codes[0]
      torch.testing.assert_close(actual, expected)
  
      self.assertEqual(
          counters["inductor"]["pattern_matcher_count"],
          expected_matches,
      )
      self.assertEqual(
          counters["inductor"]["pattern_matcher_nodes"], expected_nodes
      )
      additional_check(codes)
      counters.clear()
  
imports: import copy
  import unittest
  import torch
  import torch._dynamo.config
  import torch._inductor.config
  from torch._dynamo.test_case import run_tests, TestCase
  from torch._dynamo.utils import count_calls, counters
  from torch._higher_order_ops.out_dtype import out_dtype
  from torch._inductor.fx_passes import joint_graph
  from torch._inductor.fx_passes.serialized_patterns.central_index import get_serialized_pattern
  from torch._inductor.pattern_matcher import _TargetExpr, Arg, CallFunction, gen_pattern, KeywordArg, Match, PatternExpr, PatternMatcherPass, PatternPrettyPrinter, register_graph_pattern, stable_topological_sort
  from torch._inductor.utils import run_and_get_code
  from torch._inductor.virtualized import V
  from torch.testing import FileCheck
  from torch.testing._internal.common_cuda import SM80OrLater
  from torch.testing._internal.common_utils import IS_LINUX, skipIfRocm
  from torch.testing._internal.inductor_utils import HAS_CUDA
label_desc: Use image node_id 1 for calling the TestPatternMatcher obj's underlying member method code with example usage: obj.common(fn, args, expected_matches, expected_nodes, additional_check) without return types