# Path: monty/termcolor.py
# def cprint(text, color=None, on_color=None, attrs=None, **kwargs):
#     """Print colorize text.
# 
#     It accepts arguments of print function.
#     """
#     try:
#         print((colored(text, color, on_color, attrs)), **kwargs)
#     except TypeError:
#         # flush is not supported by py2.7
#         kwargs.pop("flush", None)
#         print((colored(text, color, on_color, attrs)), **kwargs)
# 
# def cprint_map(text, cmap, **kwargs):
#     """
#     Print colorize text.
#     cmap is a dict mapping keys to color options.
#     kwargs are passed to print function
# 
#     Example:
#         cprint_map("Hello world", {"Hello": "red"})
#     """
#     try:
#         print(colored_map(text, cmap), **kwargs)
#     except TypeError:
#         # flush is not supported by py2.7
#         kwargs.pop("flush", None)
#         print(colored_map(text, cmap), **kwargs)
# 
# def enable(true_false):
#     """Enable/Disable ANSII Color formatting"""
#     global __ISON
#     __ISON = true_false
# 
# def get_terminal_size():
#     """
#     Return the size of the terminal as (nrow, ncols)
# 
#     Based on:
# 
#         http://stackoverflow.com/questions/566746/how-to-get-console-window-
#         width-in-python
#     """
#     try:
#         rc = os.popen("stty size", "r").read().split()
#         return int(rc[0]), int(rc[1])
#     except Exception:
#         pass
# 
#     env = os.environ
# 
#     def ioctl_GWINSZ(fd):
#         try:
# 
#             rc = struct.unpack("hh", fcntl.ioctl(fd, termios.TIOCGWINSZ, "1234"))
#             return rc
#         except Exception:
#             return None
# 
#     rc = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2)
# 
#     if not rc:
#         try:
#             fd = os.open(os.ctermid(), os.O_RDONLY)
#             rc = ioctl_GWINSZ(fd)
#             os.close(fd)
#         except Exception:
#             pass
# 
#     if not rc:
#         rc = (env.get("LINES", 25), env.get("COLUMNS", 80))
# 
#     return int(rc[0]), int(rc[1])
# 
# def stream_has_colours(stream):
#     """
#     True if stream supports colours. Python cookbook, #475186
#     """
#     if not hasattr(stream, "isatty"):
#         return False
# 
#     if not stream.isatty():
#         return False  # auto color only on TTYs
#     try:
#         curses.setupterm()
#         return curses.tigetnum("colors") > 2
#     except Exception:
#         return False  # guess false in case of error


import unittest
import os
import sys
from monty.termcolor import (
    cprint,
    cprint_map,
    enable,
    get_terminal_size,
    stream_has_colours,
)

        print("Test attributes:")
        cprint("Bold grey color", "grey", attrs=["bold"])
        cprint("Dark red color", "red", attrs=["dark"])
        cprint("Underline green color", "green", attrs=["underline"])
        cprint("Blink yellow color", "yellow", attrs=["blink"])
        cprint("Reversed blue color", "blue", attrs=["reverse"])
        cprint("Concealed Magenta color", "magenta", attrs=["concealed"])
        cprint(
            "Bold underline reverse cyan color",
            "cyan",
            attrs=["bold", "underline", "reverse"],
        )
        cprint(
            "Dark blink concealed white color",
            "white",
            attrs=["dark", "blink", "concealed"],
        )
        print("-" * 78)

        print("Test mixing:")
        cprint("Underline red on grey color", "red", "on_grey", ["underline"])
        cprint("Reversed green on red color", "green", "on_red", ["reverse"])

        # Test cprint_keys
        cprint_map("Hello world", {"Hello": "red"})
        cprint_map("Hello world", {"Hello": {"color": "blue", "on_color": "on_red"}})

        # Test terminal size.
        print("terminal size: %s", get_terminal_size())

# Path: monty/termcolor.py
# def cprint(text, color=None, on_color=None, attrs=None, **kwargs):
#     """Print colorize text.
# 
#     It accepts arguments of print function.
#     """
#     try:
#         print((colored(text, color, on_color, attrs)), **kwargs)
#     except TypeError:
#         # flush is not supported by py2.7
#         kwargs.pop("flush", None)
#         print((colored(text, color, on_color, attrs)), **kwargs)
# 
# def cprint_map(text, cmap, **kwargs):
#     """
#     Print colorize text.
#     cmap is a dict mapping keys to color options.
#     kwargs are passed to print function
# 
#     Example:
#         cprint_map("Hello world", {"Hello": "red"})
#     """
#     try:
#         print(colored_map(text, cmap), **kwargs)
#     except TypeError:
#         # flush is not supported by py2.7
#         kwargs.pop("flush", None)
#         print(colored_map(text, cmap), **kwargs)
# 
# def enable(true_false):
#     """Enable/Disable ANSII Color formatting"""
#     global __ISON
#     __ISON = true_false
# 
# def get_terminal_size():
#     """
#     Return the size of the terminal as (nrow, ncols)
# 
#     Based on:
# 
#         http://stackoverflow.com/questions/566746/how-to-get-console-window-
#         width-in-python
#     """
#     try:
#         rc = os.popen("stty size", "r").read().split()
#         return int(rc[0]), int(rc[1])
#     except Exception:
#         pass
# 
#     env = os.environ
# 
#     def ioctl_GWINSZ(fd):
#         try:
# 
#             rc = struct.unpack("hh", fcntl.ioctl(fd, termios.TIOCGWINSZ, "1234"))
#             return rc
#         except Exception:
#             return None
# 
#     rc = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2)
# 
#     if not rc:
#         try:
#             fd = os.open(os.ctermid(), os.O_RDONLY)
#             rc = ioctl_GWINSZ(fd)
#             os.close(fd)
#         except Exception:
#             pass
# 
#     if not rc:
#         rc = (env.get("LINES", 25), env.get("COLUMNS", 80))
# 
#     return int(rc[0]), int(rc[1])
# 
# def stream_has_colours(stream):
#     """
#     True if stream supports colours. Python cookbook, #475186
#     """
#     if not hasattr(stream, "isatty"):
#         return False
# 
#     if not stream.isatty():
#         return False  # auto color only on TTYs
#     try:
#         curses.setupterm()
#         return curses.tigetnum("colors") > 2
#     except Exception:
#         return False  # guess false in case of error


# Path: tests/test_termcolor.py
import unittest
import os
import sys
from monty.termcolor import (
    cprint,
    cprint_map,
    enable,
    get_terminal_size,
    stream_has_colours,
)


        print("Test attributes:")
        cprint("Bold grey color", "grey", attrs=["bold"])
        cprint("Dark red color", "red", attrs=["dark"])
        cprint("Underline green color", "green", attrs=["underline"])
        cprint("Blink yellow color", "yellow", attrs=["blink"])
        cprint("Reversed blue color", "blue", attrs=["reverse"])
        cprint("Concealed Magenta color", "magenta", attrs=["concealed"])
        cprint(
            "Bold underline reverse cyan color",
            "cyan",
            attrs=["bold", "underline", "reverse"],
        )
        cprint(
            "Dark blink concealed white color",
            "white",
            attrs=["dark", "blink", "concealed"],
        )
        print("-" * 78)

        print("Test mixing:")
        cprint("Underline red on grey color", "red", "on_grey", ["underline"])
        cprint("Reversed green on red color", "green", "on_red", ["reverse"])

        # Test cprint_keys
        cprint_map("Hello world", {"Hello": "red"})
        cprint_map("Hello world", {"Hello": {"color": "blue", "on_color": "on_red"}})

        # Test terminal size.
        print("terminal size: %s", get_terminal_size())

        enable(False)