class_docstr: Scenario for the entity data imputation task.
  
  This scenario supports the Restaurant and Buy datasets from
  https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=9458712. We process the datasets
  as explained in the paper: remove all rows with NaN values and manually select 10% of the rows
  to serve as a test set. A categorical column from this set will be imputed. 20% of the remaining data
  is validation data.
  
  Entity data imputation is a core preprocessing step in structured data ETL pipelines. The task
  is as follows. Given a structured relation A with possible incomplete/NaN call values,
  determine what value should be used to fill in the cell. This task has traditionally relied
  on relational dependencies (e.g., if city = 'San Francisco' then state = 'CA') to infer missing
  values or some ML model trained to learn dependencies between cell values.
  
  An example is
  
      Input: title: adobe creative suite cs3 design premium upsell [ mac ] | price: 1599.0 | manufacturer:
  
  Reference [CORRECT]: adobe
  
  The above example highlights the model will need to reason over input titles and possibly external
  knowledge (e.g. that creative suite is from adobe) to generate the answer.
docstr: Generate train, valid, test splits.
  
  Following https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=9458712,
  we select 10% of rows to be our test set. One column of this data will be
  imputed. Of the remaining 90% of the data, 20% is validation and 80% is training.
docstr_tok: ["Generate","train",",","valid",",","test","splits",".","Following","https",":","\/\/ieeexplore.ieee.org\/stamp\/stamp.jsp","?","tp=","&","arnumber=9458712",",","we","select","10","%","of","rows","to","be","our","test","set",".","One","column","of","this","data","will","be","imputed",".","Of","the","remaining","90","%","of","the","data",",","20","%","is","validation","and","80","%","is","training","."]
code: def get_splits(
      self, table: pd.DataFrame
  ) -> Tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame]:
      """Generate train, valid, test splits.
  
      Following https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=9458712,
      we select 10% of rows to be our test set. One column of this data will be
      imputed. Of the remaining 90% of the data, 20% is validation and 80% is training.
      """
      # Split into datasets
      test = table.sample(frac=0.1, random_state=self.seed)
      remaining = table.drop(test.index)
      valid = remaining.sample(frac=0.2, random_state=self.seed)
      train = remaining.drop(valid.index)
      return train, valid, test
  
file_path: H2O/h2o_hf/helm/src/helm/benchmark/scenarios/entity_data_imputation_scenario.py
imports: from io import StringIO
  import pandas
  from pathlib import Path
  from typing import List, Tuple
  from helm.common.hierarchical_logger import hlog
  from helm.common.general import ensure_file_downloaded
  from .scenario import Scenario, Instance, Reference, TRAIN_SPLIT, VALID_SPLIT, TEST_SPLIT, CORRECT_TAG, Input, Output
label_desc: Use image node_id 3 for calling the EntityDataImputationScenario obj's underlying member method code with example usage: obj.get_splits(table) and returns: train,  valid,  test