#!/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.setup.display import *; from code.setup.cli import *; from code.algorithms.exports import *; # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # GLOBAL VARIABLES/CONSTANTS # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PATH_TO_CONFIG: str = 'code/config.yml'; # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # MAIN PROCESS # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def enter(quiet: bool, debug: bool, mode: str, path: Any, **_): SetQuietMode(quiet); SetDebugMode(debug); configpath = path if isinstance(path, str) else PATH_TO_CONFIG; if mode == 'all': LoopThroughCases(path=configpath); else: DisplayHelpMessage(); 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): DisplayStartOfCase(caseindex); command = GetAttribute(case, 'command', expectedtype=str, default=''); inputs = GetAttribute(case, 'inputs', expectedtype=dict, default={}); try: if command == 'algorithm-sum-maxsub': MaxSubSum(L=inputs['L']); elif command == 'algorithm-sum-maxsub-dc': MaxSubSumDC(L=inputs['L']); elif 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']); elif command == 'algorithm-search-ith-element': FindIthSmallest(L=inputs['L'], i=inputs['i']); elif command == 'algorithm-search-ith-element-dc': FindIthSmallestDC(L=inputs['L'], i=inputs['i']); else: raise ValueError('Command \033[1m{}\033[0m nicht erkannt'.format(command)); except Exception as e: logError(e); DisplayEndOfCase(); return; # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # EXECUTE CODE # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if __name__ == '__main__': sys.tracebacklimit = 0; try: args = GetArgumentsFromCli(sys.argv[1:]); except: DisplayHelpMessage(); exit(1); enter(quiet=args.quiet, debug=args.debug, mode=args.mode[0], path=args.path);