code: def test_denormalize_multiple_keys(self):
      table = Table(self.rows, self.column_names, self.column_types)
  
      normalized_table = table.denormalize(
          ["first_name", "last_name"], "property", "value"
      )
  
      normal_rows = (
          ("Jane", "Code", "female", 27),
          ("Jim", "Program", "male", None),
          ("Jim", "Bytes", None, 24),
      )
  
      self.assertRows(normalized_table, normal_rows)
      self.assertColumnNames(
          normalized_table, ["first_name", "last_name", "gender", "age"]
      )
      self.assertColumnTypes(
          normalized_table, [Text, Text, Text, Number]
      )
      self.assertRowNames(
          normalized_table,
          [("Jane", "Code"), ("Jim", "Program"), ("Jim", "Bytes")],
      )
  
file_path: agate/tests/test_table/test_denormalize.py
imports: from agate import Table
  from agate.data_types import Number, Text
  from agate.testcase import AgateTestCase
  from agate.type_tester import TypeTester
label_desc: Use image node_id 4 for calling the TestDenormalize obj's underlying member method code with example usage: obj.test_denormalize_multiple_keys() without return types