code: def create_output(
      stdout: TextIO | None = None, always_prefer_tty: bool = False
  ) -> Output:
      """
      Return an :class:`~prompt_toolkit.output.Output` instance for the command
      line.
  
      :param stdout: The stdout object
      :param always_prefer_tty: When set, look for `sys.stderr` if `sys.stdout`
          is not a TTY. Useful if `sys.stdout` is redirected to a file, but we
          still want user input and output on the terminal.
  
          By default, this is `False`. If `sys.stdout` is not a terminal (maybe
          it's redirected to a file), then a `PlainTextOutput` will be returned.
          That way, tools like `print_formatted_text` will write plain text into
          that file.
      """
      # Consider TERM, PROMPT_TOOLKIT_BELL, and PROMPT_TOOLKIT_COLOR_DEPTH
      # environment variables. Notice that PROMPT_TOOLKIT_COLOR_DEPTH value is
      # the default that's used if the Application doesn't override it.
      term_from_env = get_term_environment_variable()
      bell_from_env = get_bell_environment_variable()
      color_depth_from_env = ColorDepth.from_env()
  
      if stdout is None:
          # By default, render to stdout. If the output is piped somewhere else,
          # render to stderr.
          stdout = sys.stdout
  
          if always_prefer_tty:
              for io in [sys.stdout, sys.stderr]:
                  if io is not None and io.isatty():
                      # (This is `None` when using `pythonw.exe` on Windows.)
                      stdout = io
                      break
  
      # If the output is still `None`, use a DummyOutput.
      # This happens for instance on Windows, when running the application under
      # `pythonw.exe`. In that case, there won't be a terminal Window, and
      # stdin/stdout/stderr are `None`.
      if stdout is None:
          return DummyOutput()
  
      # If the patch_stdout context manager has been used, then sys.stdout is
      # replaced by this proxy. For prompt_toolkit applications, we want to use
      # the real stdout.
      from prompt_toolkit.patch_stdout import StdoutProxy
  
      while isinstance(stdout, StdoutProxy):
          stdout = stdout.original_stdout
  
      if sys.platform == "win32":
          from .conemu import ConEmuOutput
          from .win32 import Win32Output
          from .windows10 import Windows10_Output, is_win_vt100_enabled
  
          if is_win_vt100_enabled():
              return cast(
                  Output,
                  Windows10_Output(
                      stdout, default_color_depth=color_depth_from_env
                  ),
              )
          if is_conemu_ansi():
              return cast(
                  Output,
                  ConEmuOutput(
                      stdout, default_color_depth=color_depth_from_env
                  ),
              )
          else:
              return Win32Output(
                  stdout, default_color_depth=color_depth_from_env
              )
      else:
          from .vt100 import Vt100_Output
  
          # Stdout is not a TTY? Render as plain text.
          # This is mostly useful if stdout is redirected to a file, and
          # `print_formatted_text` is used.
          if not stdout.isatty():
              return PlainTextOutput(stdout)
  
          return Vt100_Output.from_pty(
              stdout,
              term=term_from_env,
              default_color_depth=color_depth_from_env,
              enable_bell=bell_from_env,
          )
  
imports: from __future__ import annotations
  import sys
  from typing import TextIO, cast
  from prompt_toolkit.utils import get_bell_environment_variable, get_term_environment_variable, is_conemu_ansi
  from .base import DummyOutput, Output
  from .color_depth import ColorDepth
  from .plain_text import PlainTextOutput
label_desc: Use image node_id 1 for calling a global function with example usage: create_output(stdout, always_prefer_tty) and returns: DummyOutput, Vt100_Output, cast, cast, Win32Output, PlainTextOutput