code: def test_graph_sizes_dynamic(self, records):
      def fn(a, b):
          return a @ b
  
      fn_opt = torch._dynamo.optimize("eager", dynamic=False)(fn)
      fn_opt(torch.randn(10, 20), torch.randn(20, 30))
  
      fn_opt2 = torch._dynamo.optimize("eager", dynamic=True)(fn)
      fn_opt2(torch.randn(5, 10), torch.randn(10, 15))
  
      self.assertEqual(len(records), 2)
      self.assertNotIn("concrete", records[0].getMessage())
      lines = records[1].getMessage().split("\n")
      for line in lines:
          if "concrete" in line:
              self.assertIsNotNone(
                  re.search(r"\(concrete\): \(\d+, \d+\)", line)
              )
  
imports: import atexit
  import contextlib
  import functools
  import logging
  import os
  import re
  import unittest.mock
  import torch
  import torch._dynamo.test_case
  import torch._dynamo.testing
  import torch.distributed
  from torch._dynamo.testing import skipIfNotPy311
  from torch.nn.parallel import DistributedDataParallel
  from torch.testing._internal.common_utils import find_free_port, munge_exc
  from torch.testing._internal.inductor_utils import HAS_CUDA
  from torch.testing._internal.logging_utils import LoggingTestCase, make_logging_test, make_settings_test
label_desc: Use image node_id 21 for calling the LoggingTests obj's underlying member method code with example usage: obj.test_graph_sizes_dynamic(records) and returns: unknown