class_docstr: Class storing data for an experiment.
  
  The dataframe is retrieved via the `df` property. The data can be stored
  to an external store for future use by attaching it to an experiment using
  `experiment.attach_data()` (this requires a description to be set.)
  
  
  Attributes:
      df: DataFrame with underlying data, and required columns. For BaseData, the
          one required column is "arm_name".
      description: Human-readable description of data.
class_docstr_tok: ["Class","storing","data","for","an","experiment",".","The","dataframe","is","retrieved","via","the","`","df","`","property",".","The","data","can","be","stored","to","an","external","store","for","future","use","by","attaching","it","to","an","experiment","using","`","experiment.attach_data","(",")","`","(","this","requires","a","description","to","be","set",".",")","Attributes",":","df",":","DataFrame","with","underlying","data",",","and","required","columns",".","For","BaseData",",","the","one","required","column","is","``","arm_name","''",".","description",":","Human-readable","description","of","data","."]
docstr: Compute hash of pandas DataFrame.
  
  This first serializes the DataFrame and computes the md5 hash on the
  resulting string. Note that this may cause performance issue for very large
  DataFrames.
  
  Args:
      df: The DataFrame for which to compute the hash.
  
  Returns
      str: The hash of the DataFrame.
docstr_tok: ["Compute","hash","of","pandas","DataFrame",".","This","first","serializes","the","DataFrame","and","computes","the","md5","hash","on","the","resulting","string",".","Note","that","this","may","cause","performance","issue","for","very","large","DataFrames",".","Args",":","df",":","The","DataFrame","for","which","to","compute","the","hash",".","Returns","str",":","The","hash","of","the","DataFrame","."]
code: def df_hash(self) -> str:
      """Compute hash of pandas DataFrame.
  
      This first serializes the DataFrame and computes the md5 hash on the
      resulting string. Note that this may cause performance issue for very large
      DataFrames.
  
      Args:
          df: The DataFrame for which to compute the hash.
  
      Returns
          str: The hash of the DataFrame.
  
      """
      return md5(
          not_none(self.df.to_json()).encode("utf-8")
      ).hexdigest()
  
imports: from __future__ import annotations
  import json
  from abc import abstractmethod
  from functools import reduce
  from hashlib import md5
  from typing import Any, Dict, Iterable, List, Optional, Set, Type, TypeVar, Union
  import numpy
  import pandas
  from ax.core.types import TFidelityTrialEvaluation, TTrialEvaluation
  from ax.utils.common.base import Base
  from ax.utils.common.serialization import extract_init_args, SerializationMixin, serialize_init_args, TClassDecoderRegistry, TDecoderRegistry
  from ax.utils.common.typeutils import checked_cast, not_none
label_desc: Use image node_id 10 for calling the BaseData obj's underlying member method code with example usage: obj.df_hash() and returns: md5