def get_input_op_table_args(ipa):
    """Creates an input operator from an Input Pipeline Analyzer proto.

  Args:
    ipa: An input_pipeline_pb2.InputPipelineAnalysisResult.

  Returns:
    Returns a gviz_api.DataTable
  """
    table_description = [('opName', 'string', 'Input Op'), ('count',
        'number', 'Count'), ('timeInMs', 'number', 'Total Time (in ms)'), (
        'timeInPercent', 'number',
        'Total Time (as % of total input-processing time)'), (
        'selfTimeInMs', 'number', 'Total Self Time (in ms)'), (
        'selfTimeInPercent', 'number',
        'Total Self Time (as % of total input-processing time)'), (
        'category', 'string', 'Category')]
    data = []
    for details in ipa.input_op_details:
        row = [details.op_name, details.count, details.time_in_ms, details.
            time_in_percent / 100.0, details.self_time_in_ms, details.
            self_time_in_percent / 100.0, details.category]
        data.append(row)
    enqueue_us = '{:.3f}'.format(ipa.input_time_breakdown.enqueue_us)
    demanded_file_read_us = '{:.3f}'.format(ipa.input_time_breakdown.
        demanded_file_read_us)
    advanced_file_read_us = '{:.3f}'.format(ipa.input_time_breakdown.
        advanced_file_read_us)
    preprocessing_us = '{:.3f}'.format(ipa.input_time_breakdown.
        preprocessing_us)
    unclassified_non_enqueue_us = '{:.3f}'.format(ipa.input_time_breakdown.
        unclassified_non_enqueue_us)
    custom_properties = {'enqueue_us': enqueue_us, 'demanded_file_read_us':
        demanded_file_read_us, 'advanced_file_read_us':
        advanced_file_read_us, 'preprocessing_us': preprocessing_us,
        'unclassified_nonequeue_us': unclassified_non_enqueue_us}
    return table_description, data, custom_properties
