class_docstr: Class for storing a causal estimand, as a result of the identification step using the ID algorithm.
  The object stores a list of estimators(self._product) whose porduct must be obtained and a list of variables (self._sum) over which the product must be marginalized.
class_docstr_tok: ["Class","for","storing","a","causal","estimand",",","as","a","result","of","the","identification","step","using","the","ID","algorithm",".","The","object","stores","a","list","of","estimators","(","self._product",")","whose","porduct","must","be","obtained","and","a","list","of","variables","(","self._sum",")","over","which","the","product","must","be","marginalized","."]
code: def __str__(self):
      string = self._print_estimator(
          prefix="", estimator=self, start=True
      )
      if string is None:
          return "The graph is not identifiable."
      else:
          return string
  
file_path: dowhy/dowhy/causal_identifier/id_identifier.py
imports: from typing import Dict, List, Optional, Set, Union
  import networkx
  import numpy
  from dowhy.graph import get_adjacency_matrix
  from dowhy.utils.api import parse_state
  from dowhy.utils.graph_operations import find_ancestor, find_c_components, induced_graph
  from dowhy.utils.ordered_set import OrderedSet
label_desc: Use image node_id 6 for calling the IDExpression obj's underlying member method code with example usage: obj.__str__() and returns: str, string