<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def print_themes(cls, path=THEMES):
 """ Prints a human-readable summary of the installed themes to stdout. This is intended to be used as a command-line utility, outside of the main curses display loop. """

        themes, errors = cls.list_themes(path=path + '/')

        print('\nInstalled ({0}):'.format(path))
        installed = [t for t in themes if t.source == 'installed']
        if installed:
            for theme in installed:
                line = '    {0:<20}[requires {1} colors]'
                print(line.format(theme.name, theme.required_colors))
        else:
            print('    (empty)')

        print('\nPresets:')
        preset = [t for t in themes if t.source == 'preset']
        for theme in preset:
            line = '    {0:<20}[requires {1} colors]'
            print(line.format(theme.name, theme.required_colors))

        print('\nBuilt-in:')
        built_in = [t for t in themes if t.source == 'built-in']
        for theme in built_in:
            line = '    {0:<20}[requires {1} colors]'
            print(line.format(theme.name, theme.required_colors))

        if errors:
            print('\nWARNING: Some files encountered errors:')
            for (source, name), error in errors.items():
                theme_info = '({0}) {1}'.format(source, name)
                # Align multi-line error messages with the right column
                err_message = six.text_type(error).replace('\n', '\n' + ' ' * 20)
                print('    {0:<20}{1}'.format(theme_info, err_message))

        print('')