class_docstr: Class for storing a causal estimand, typically as a result of the identification step.
code: def __str__(
      self,
      only_target_estimand: bool = False,
      show_all_backdoor_sets: bool = False,
  ):
      if self.no_directed_path:
          s = "No directed path from {0} to {1} in the causal graph.".format(
              self.treatment_variable, self.outcome_variable
          )
          s += "\nCausal effect is zero."
          return s
      s = "Estimand type: {0}\n".format(self.estimand_type)
      i = 1
      has_valid_backdoor = sum(
          "backdoor" in key for key in self.estimands.keys()
      )
      for k, v in self.estimands.items():
          if show_all_backdoor_sets:
              # Do not show backdoor key unless it is the only backdoor set.
              if k == "backdoor" and has_valid_backdoor > 1:
                  continue
          else:
              # Just show the default backdoor set
              if k.startswith("backdoor") and k != "backdoor":
                  continue
          if only_target_estimand and k != self.identifier_method:
              continue
          s += "\n### Estimand : {0}\n".format(i)
          s += "Estimand name: {0}".format(k)
          if k == self.default_backdoor_id:
              s += " (Default)"
          s += "\n"
          if v is None:
              s += "No such variable(s) found!\n"
          else:
              sp_expr_str = sp.pretty(v["estimand"], use_unicode=True)
              s += "Estimand expression:\n{0}\n".format(sp_expr_str)
              j = 1
              for ass_name, ass_str in v["assumptions"].items():
                  s += "Estimand assumption {0}, {1}: {2}\n".format(
                      j, ass_name, ass_str
                  )
                  j += 1
          i += 1
      return s
  
file_path: dowhy/dowhy/causal_identifier/identified_estimand.py
imports: import copy
  from typing import List, Optional
  import sympy
  from dowhy.utils.api import parse_state
label_desc: Use image node_id 9 for calling the IdentifiedEstimand obj's underlying member method code with example usage: obj.__str__(only_target_estimand, show_all_backdoor_sets) and returns: s, s