text: r"""
  Sage's IPython Configuration
  
  TESTS:
  
  We check that Sage stdin can be piped in even if stdout is a tty; In that case
  the IPython simple prompt is being used::
  
      sage: cmd = 'print([sys.stdin.isatty(), sys.stdout.isatty()])'
      sage: import pexpect
      sage: output = pexpect.run(
      ....:     'bash -c \'echo "{0}" | sage\''.format(cmd),
      ....: )
      sage: 'In [1]: [False, True]' in output
      True
  """
  
  #*****************************************************************************
  #       Copyright (C) 2016 Volker Braun <vbraun.name@gmail.com>
  #
  #  Distributed under the terms of the GNU General Public License (GPL)
  #  as published by the Free Software Foundation; either version 2 of
  #  the License, or (at your option) any later version.
  #                  http://www.gnu.org/licenses/
  #*****************************************************************************
  
  from __future__ import absolute_import
  
  import sys
  import copy
  from traitlets.config.loader import Config
  
  from sage.repl.prompts import SagePrompts
  
  
  # Name of the Sage IPython extension
  SAGE_EXTENSION = 'sage'
  
  
  class SageIpythonConfiguration(object):
  
      def _doctest_mode(self):
          """
          Whether we are in doctest mode
  
          This returns ``True`` during doctests.
  
          EXAMPLES::
          
              sage: from sage.repl.configuration import sage_ipython_config
              sage: sage_ipython_config._doctest_mode()
              True
          """
          from sage.doctest import DOCTEST_MODE
          return DOCTEST_MODE
      
      def _allow_ansi(self):
          """
          Whether to allow ANSI escape sequences
  
          This returns ``False`` during doctests to avoid ANSI escape 
          sequences.
  
          EXAMPLES::
          
              sage: from sage.repl.configuration import sage_ipython_config
              sage: sage_ipython_config._allow_ansi()
              False
          """
          return (not self._doctest_mode()) and sys.stdin.isatty() and sys.stdout.isatty()
  
      def colors(self):
          """
          Return the IPython color palette
  
          This returns ``'NoColor'`` during doctests to avoid ANSI escape 
          sequences.
  
          EXAMPLES::
          
              sage: from sage.repl.configuration import sage_ipython_config
              sage: sage_ipython_config.simple_prompt()
              True
          """
          return 'LightBG' if self._allow_ansi() else 'NoColor'
  
      def simple_prompt(self):
          """
          Return whether to use the simple prompt
  
          This returns ``True`` during doctests to avoid ANSI escape sequences.
  
          EXAMPLES::
          
              sage: from sage.repl.configuration import sage_ipython_config
              sage: sage_ipython_config.simple_prompt()
              True
          """
          return not self._allow_ansi()
  
      def term_title(self):
          """
          Return whether to set the terminal title
  
          This returns false during doctests to avoid ANSI escape sequences.
  
          EXAMPLES::
          
              sage: from sage.repl.configuration import sage_ipython_config
              sage: sage_ipython_config.term_title()
              False
          """
          return self._allow_ansi()
  
      def default(self):
          """
          Return a new default configuration object
  
          EXAMPLES::
          
              sage: from sage.repl.configuration import sage_ipython_config
              sage: sage_ipython_config.default()
              {'InteractiveShell': {'colors': ...
          """
          from sage.repl.interpreter import SageTerminalInteractiveShell
          cfg = Config(
              TerminalIPythonApp=Config(
                  display_banner=False,
                  verbose_crash=True,
                  test_shell=False,
                  shell_class=SageTerminalInteractiveShell,
              ),
              InteractiveShell=Config(
                  prompts_class=SagePrompts,
                  ast_node_interactivity='all',
                  colors=self.colors(),
                  simple_prompt=self.simple_prompt(),
                  term_title=self.term_title(),
                  confirm_exit=False,
                  separate_in=''
              ),
              InteractiveShellApp=Config(extensions=[SAGE_EXTENSION]),
          )
          if self._doctest_mode():
              # Using the file-backed history causes problems in parallel tests
              cfg.HistoryManager = Config(hist_file=':memory:')
          return cfg
  
      def copy(self):
          """
          Return a copy of the current configuration
  
          EXAMPLES::
          
              sage: from sage.repl.configuration import sage_ipython_config
              sage: sage_ipython_config.copy()
              {'InteractiveShell': {'colors': ...
          """
          try:
              return copy.deepcopy(get_ipython().config)
          except NameError:
              return self.default()
  
  
  sage_ipython_config = SageIpythonConfiguration()
  