text: # -*- coding: utf-8 -*-
  """Utilities for Halo library.
  """
  import codecs
  import platform
  import six
  try:
      from shutil import get_terminal_size
  except ImportError:
      from backports.shutil_get_terminal_size import get_terminal_size
  
  from colorama import init
  from termcolor import colored
  
  init(autoreset=True)
  
  
  def is_supported():
      """Check whether operating system supports main symbols or not.
  
      Returns
      -------
      boolean
          Whether operating system supports main symbols or not
      """
  
      os_arch = platform.system()
  
      if os_arch != 'Windows':
          return True
  
      return False
  
  
  def get_environment():
      """Get the environment in which halo is running
  
      Returns
      -------
      str
          Environment name
      """
      try:
          from IPython import get_ipython
      except ImportError:
          return 'terminal'
  
      try:
          shell = get_ipython().__class__.__name__
  
          if shell == 'ZMQInteractiveShell':  # Jupyter notebook or qtconsole
              return 'jupyter'
          elif shell == 'TerminalInteractiveShell':  # Terminal running IPython
              return 'ipython'
          else:
              return 'terminal'  # Other type (?)
  
      except NameError:
          return 'terminal'
  
  
  def colored_frame(frame, color):
      """Color the frame with given color and returns.
  
      Parameters
      ----------
      frame : str
          Frame to be colored
      color : str
          Color to be applied
  
      Returns
      -------
      str
          Colored frame
      """
      return colored(frame, color, attrs=['bold'])
  
  
  def is_text_type(text):
      """Check if given parameter is a string or not
  
      Parameters
      ----------
      text : *
          Parameter to be checked for text type
  
      Returns
      -------
      bool
          Whether parameter is a string or not
      """
      if isinstance(text, six.text_type) or isinstance(text, six.string_types):
          return True
  
      return False
  
  
  def decode_utf_8_text(text):
      """Decode the text from utf-8 format
  
      Parameters
      ----------
      text : str
          String to be decoded
  
      Returns
      -------
      str
          Decoded string
      """
      try:
          return codecs.decode(text, 'utf-8')
      except (TypeError, ValueError):
          return text
  
  
  def encode_utf_8_text(text):
      """Encodes the text to utf-8 format
  
      Parameters
      ----------
      text : str
          String to be encoded
  
      Returns
      -------
      str
          Encoded string
      """
      try:
          return codecs.encode(text, 'utf-8', 'ignore')
      except (TypeError, ValueError):
          return text
  
  
  def get_terminal_columns():
      """Determine the amount of available columns in the terminal
  
      Returns
      -------
      int
          Terminal width
      """
      terminal_size = get_terminal_size()
  
      # If column size is 0 either we are not connected
      # to a terminal or something else went wrong. Fallback to 80.
      if terminal_size.columns == 0:
          return 80
      else:
          return terminal_size.columns
  