#!/usr/bin/env python3 # -*- coding: utf-8 -*- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # IMPORTS # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ import os; import sys sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))); from code.core.log import *; from code.core.config import *; from code.display.display import *; from code.algorithms.exports import *; # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # GLOBAL VARIABLES/CONSTANTS # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ parser: argparse.ArgumentParser; PATH_TO_CONFIG: str = 'code/config.yml'; # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # MAIN PROCESS # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def enter(quiet: bool, debug: bool, path: Union[str, Any], **_): SetQuietMode(quiet); SetDebugMode(debug); configpath = PATH_TO_CONFIG if args.path is None else args.path; if args.all is not None: LoopThroughCases(path=configpath); else: parser.print_help(); return; # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # SECONDARY PROCESSES # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def LoopThroughCases(path: str): ''' Durchlauf aller Testfälle. ''' config = ReadConfigFile(path); cases = GetAttribute(config, 'parts', 'cases', expectedtype=list, default=[]); for caseindex, case in enumerate(cases): DisplayCase(caseindex); command = GetAttribute(case, 'command', expectedtype=str, default=''); inputs = GetAttribute(case, 'inputs', expectedtype=dict, default={}); try: if command == 'algorithm-search-sequential': SequentialSearch(L=inputs['L'], x=inputs['x']); elif command == 'algorithm-search-binary': BinarySearch(L=inputs['L'], x=inputs['x']); elif command == 'algorithm-search-interpolation': InterpolationSearch(L=inputs['L'], x=inputs['x'], u=0, v=len(inputs['L'])-1); elif command == 'algorithm-search-jump': JumpSearchLinear(L=inputs['L'], x=inputs['x'], m=inputs['m']); else: raise ValueError('Command \033[1m{}\033[0m nicht erkannt'.format(command)); except Exception as e: logError(e); return; # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # EXECUTE CODE # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if __name__ == '__main__': sys.tracebacklimit = 0; cli_args = sys.argv[1:]; parser = argparse.ArgumentParser( prog='code/main.py', description=''' \033[2;1mBeschreibung:\033[0m \033[2mEin Programm, das verschiedene Algorithmen aus dem Kurs AlgoDat I testet.\033[0m ''', ); parser.add_argument('all', nargs='?', help='Führt alle Testfälle in der config.yml Datei durch.'); parser.add_argument('--path', nargs=1, type=str, help='Pfad zur alternativen Configdatei.'); parser.add_argument('config', nargs='?', help='Führt alle Testfälle in der config.yml Datei durch.'); parser.add_argument('--debug', action='store_true', help='Debugging Messages stummschalten.') parser.add_argument('-q', '--quiet', action='store_true', help='Alle console-messages bis auf Errors stummschalten.') args = parser.parse_args(cli_args); enter(quiet=args.quiet, debug=args.debug, path=args.path);