code: def test_CustomData(self) -> None:
      CustomData = custom_data_class(
          column_data_types={
              "metadata": str,
              "created_time": pd.Timestamp,
          },
          required_columns={"metadata"},
      )
      data_entry = {
          "arm_name": "0_1",
          "mean": 3.7,
          "sem": 0.5,
          "metric_name": "b",
          "metadata": "42",
          "created_time": "2018-09-20",
      }
      data = CustomData(df=pd.DataFrame([data_entry]))
      self.assertNotEqual(data, Data(self.df))
      self.assertTrue(
          isinstance(data.df.iloc[0]["created_time"], pd.Timestamp)
      )
  
      data_entry2 = {
          "arm_name": "0_1",
          "mean": 3.7,
          "sem": 0.5,
          "metric_name": "b",
          "created_time": "2018-09-20",
      }
  
      # Test without required column
      with self.assertRaises(ValueError):
          CustomData(df=pd.DataFrame([data_entry2]))
  
      # Try making regular data with extra column
      with self.assertRaises(ValueError):
          Data(df=pd.DataFrame([data_entry2]))
  
imports: import random
  import pandas
  from ax.core.data import clone_without_metrics, custom_data_class, Data, set_single_trial
  from ax.utils.common.testutils import TestCase
  from ax.utils.common.timeutils import current_timestamp_in_millis
label_desc: Use image node_id 6 for calling the DataTest obj's underlying member method code with example usage: obj.test_CustomData() without return types