class_docstr: A renderable for a tree structure.
  
  Args:
      label (RenderableType): The renderable or str for the tree label.
      style (StyleType, optional): Style of this tree. Defaults to "tree".
      guide_style (StyleType, optional): Style of the guide lines. Defaults to "tree.line".
      expanded (bool, optional): Also display children. Defaults to True.
      highlight (bool, optional): Highlight renderable (if str). Defaults to False.
class_docstr_tok: ["A","renderable","for","a","tree","structure",".","Args",":","label","(","RenderableType",")",":","The","renderable","or","str","for","the","tree","label",".","style","(","StyleType",",","optional",")",":","Style","of","this","tree",".","Defaults","to","``","tree","''",".","guide_style","(","StyleType",",","optional",")",":","Style","of","the","guide","lines",".","Defaults","to","``","tree.line","''",".","expanded","(","bool",",","optional",")",":","Also","display","children",".","Defaults","to","True",".","highlight","(","bool",",","optional",")",":","Highlight","renderable","(","if","str",")",".","Defaults","to","False","."]
code: def __rich_console__(
      self, console: "Console", options: "ConsoleOptions"
  ) -> "RenderResult":
      stack: List[Iterator[Tuple[bool, Tree]]] = []
      pop = stack.pop
      push = stack.append
      new_line = Segment.line()
  
      get_style = console.get_style
      null_style = Style.null()
      guide_style = (
          get_style(self.guide_style, default="") or null_style
      )
      SPACE, CONTINUE, FORK, END = range(4)
  
      ASCII_GUIDES = ("    ", "|   ", "+-- ", "`-- ")
      TREE_GUIDES = [
          ("    ", "│   ", "├── ", "└── "),
          ("    ", "┃   ", "┣━━ ", "┗━━ "),
          ("    ", "║   ", "╠══ ", "╚══ "),
      ]
      _Segment = Segment
  
      def make_guide(index: int, style: Style) -> Segment:
          """Make a Segment for a level of the guide lines."""
          if options.ascii_only:
              line = ASCII_GUIDES[index]
          else:
              guide = (
                  1 if style.bold else (2 if style.underline2 else 0)
              )
              line = TREE_GUIDES[
                  0 if options.legacy_windows else guide
              ][index]
          return _Segment(line, style)
  
      levels: List[Segment] = [make_guide(CONTINUE, guide_style)]
      push(iter(loop_last([self])))
  
      guide_style_stack = StyleStack(get_style(self.guide_style))
      style_stack = StyleStack(get_style(self.style))
      remove_guide_styles = Style(bold=False, underline2=False)
  
      depth = 0
  
      while stack:
          stack_node = pop()
          try:
              last, node = next(stack_node)
          except StopIteration:
              levels.pop()
              if levels:
                  guide_style = levels[-1].style or null_style
                  levels[-1] = make_guide(FORK, guide_style)
                  guide_style_stack.pop()
                  style_stack.pop()
              continue
          push(stack_node)
          if last:
              levels[-1] = make_guide(
                  END, levels[-1].style or null_style
              )
  
          guide_style = guide_style_stack.current + get_style(
              node.guide_style
          )
          style = style_stack.current + get_style(node.style)
          prefix = levels[(2 if self.hide_root else 1) :]
          renderable_lines = console.render_lines(
              Styled(node.label, style),
              options.update(
                  width=options.max_width
                  - sum(level.cell_length for level in prefix),
                  highlight=self.highlight,
                  height=None,
              ),
              pad=options.justify is not None,
          )
  
          if not (depth == 0 and self.hide_root):
              for first, line in loop_first(renderable_lines):
                  if prefix:
                      yield from _Segment.apply_style(
                          prefix,
                          style.background_style,
                          post_style=remove_guide_styles,
                      )
                  yield from line
                  yield new_line
                  if first and prefix:
                      prefix[-1] = make_guide(
                          SPACE if last else CONTINUE,
                          prefix[-1].style or null_style,
                      )
  
          if node.expanded and node.children:
              levels[-1] = make_guide(
                  SPACE if last else CONTINUE,
                  levels[-1].style or null_style,
              )
              levels.append(
                  make_guide(
                      END if len(node.children) == 1 else FORK,
                      guide_style,
                  )
              )
              style_stack.push(get_style(node.style))
              guide_style_stack.push(get_style(node.guide_style))
              push(iter(loop_last(node.children)))
              depth += 1
  
file_path: rich/rich/tree.py
imports: from typing import Iterator, List, Optional, Tuple
  from ._loop import loop_first, loop_last
  from .console import Console, ConsoleOptions, RenderableType, RenderResult
  from .jupyter import JupyterMixin
  from .measure import Measurement
  from .segment import Segment
  from .style import Style, StyleStack, StyleType
  from .styled import Styled
label_desc: Use image node_id 3 for calling the Tree obj's underlying member method code with example usage: obj.__rich_console__(console, options) and returns: _Segment