from .database import * _key_map_23 = { 'UNITS' : 'FLOW_UNITS', 'PRESSURE' : 'PRESSURE_UNITS', 'HEADLOSS' : 'HEADLOSS_MODEL', 'QUALITY' : 'QUALITY_MODEL', 'UNBALANCED' : 'IF_UNBALANCED', 'PATTERN' : 'DEMAND_PATTERN', 'DEMAND MODEL' : 'DEMAND_MODEL', 'DEMAND MULTIPLIER' : 'DEMAND_MULTIPLIER', 'EMITTER EXPONENT' : 'EMITTER_EXPONENT', 'VISCOSITY' : 'SPECIFIC_VISCOSITY', 'DIFFUSIVITY' : 'SPECIFIC_DIFFUSIVITY', 'SPECIFIC GRAVITY' : 'SPECIFIC_GRAVITY', 'TRIALS' : 'MAXIMUM_TRIALS', 'ACCURACY' : 'RELATIVE_ACCURACY', #'HEADERROR' : '', 'FLOWCHANGE' : 'FLOW_CHANGE_LIMIT', 'MINIMUM PRESSURE' : 'MINIMUM_PRESSURE', 'REQUIRED PRESSURE' : 'SERVICE_PRESSURE', 'PRESSURE EXPONENT' : 'PRESSURE_EXPONENT', 'TOLERANCE' : 'QUALITY_TOLERANCE', 'HTOL' : 'HEAD_TOLERANCE', 'QTOL' : 'FLOW_TOLERANCE', #'RQTOL' : '', #'CHECKFREQ' : '', #'MAXCHECK' : '', #'DAMPLIMIT' : '', } _key_map_32 = { 'FLOW_UNITS' : 'UNITS', 'PRESSURE_UNITS' : 'PRESSURE', 'HEADLOSS_MODEL' : 'HEADLOSS', 'SPECIFIC_GRAVITY' : 'SPECIFIC GRAVITY', 'SPECIFIC_VISCOSITY' : 'VISCOSITY', 'MAXIMUM_TRIALS' : 'TRIALS', 'HEAD_TOLERANCE' : 'HTOL', 'FLOW_TOLERANCE' : 'QTOL', 'FLOW_CHANGE_LIMIT' : 'FLOWCHANGE', 'RELATIVE_ACCURACY' : 'ACCURACY', #'TIME_WEIGHT' : '', #'STEP_SIZING' : '', 'IF_UNBALANCED' : 'UNBALANCED', 'DEMAND_MODEL' : 'DEMAND MODEL', 'DEMAND_PATTERN' : 'PATTERN', 'DEMAND_MULTIPLIER' : 'DEMAND MULTIPLIER', 'MINIMUM_PRESSURE' : 'MINIMUM PRESSURE', 'SERVICE_PRESSURE' : 'REQUIRED PRESSURE', 'PRESSURE_EXPONENT' : 'PRESSURE EXPONENT', #'LEAKAGE_MODEL' : '', #'LEAKAGE_COEFF1' : '', #'LEAKAGE_COEFF2' : '', 'EMITTER_EXPONENT' : 'EMITTER EXPONENT', 'QUALITY_MODEL' : 'QUALITY', #'QUALITY_NAME' : '', #'QUALITY_UNITS' : '', #'TRACE_NODE' : '', 'SPECIFIC_DIFFUSIVITY' : 'DIFFUSIVITY', 'QUALITY_TOLERANCE' : 'TOLERANCE' } def generate_v2(cs: ChangeSet) -> ChangeSet: op = cs.operations[0] if op['type'] == 'option': return cs map = _key_map_32 cs_v2 = {} for key in op: if key == 'operation' or key == 'type': continue if key in map.keys(): if key != 'QUALITY_MODEL' and key != 'DEMAND_MODEL': cs_v2 |= { map[key] : op[key] } elif key == 'QUALITY_MODEL': if str(op[key]).upper() == 'TRACE' and 'TRACE_NODE' in op.keys(): cs_v2 |= { map[key] : f"TRACE {op['TRACE_NODE']}" } else: cs_v2 |= { map[key] : str(op[key]).upper() } elif key == 'DEMAND_MODEL': if op[key] == 'FIXED': cs_v2 |= { map[key] : 'DDA' } else: cs_v2 |= { map[key] : 'PDA' } if len(cs_v2) > 0: cs_v2 |= g_update_prefix | { 'type' : 'option' } return ChangeSet(cs_v2) return ChangeSet() def generate_v3(cs: ChangeSet) -> ChangeSet: op = cs.operations[0] if op['type'] == 'option_v3': return cs map = _key_map_23 cs_v3 = {} for key in op: if key == 'operation' or key == 'type': continue if key in map.keys(): if key != 'QUALITY' and key != 'DEMAND MODEL': cs_v3 |= { map[key] : op[key] } elif key == 'QUALITY': tokens = str(op[key]).split() if len(tokens) >= 1: cs_v3 |= { map[key] : tokens[0].upper() } if tokens[0].upper() == 'TRACE' and len(tokens) >= 2: cs_v3 |= { 'TRACE_NODE' : tokens[1] } elif key == 'DEMAND MODEL': cs_v3 |= { map[key] : 'POWER' } if len(cs_v3) > 0: cs_v3 |= g_update_prefix | { 'type' : 'option_v3' } return ChangeSet(cs_v3) return ChangeSet()