Source code for layercake.variables.utils


"""

    Variables utility module
    ========================

    Defines useful functions.

"""


[docs] def combine_units(units1, units2, operation): """Combine units strings together with a given operation on the exponents. Parameters ---------- units1: str First units string to combine. units2: str Second units string to combine. operation: str Operation to perform on the units exponents. Presently can be `'-'` or `'+'`. Returns ------- str The resulting units string. """ if not units1 and not units2: return '' elif not units2: return units1 elif not units1: if operation == '+': return units2 else: return power_units(units2, -1) ul = units1.split('][') ul[0] = ul[0][1:] ul[-1] = ul[-1][:-1] ol = units2.split('][') ol[0] = ol[0][1:] ol[-1] = ol[-1][:-1] usl = list() for us in ul: up = us.split('^') if len(up) == 1: up.append("1") if up[0]: usl.append(tuple(up)) osl = list() for os in ol: op = os.split('^') if len(op) == 1: op.append("1") if op[0]: osl.append(tuple(op)) units_elements = list() for us in usl: new_us = [us[0]] i = 0 for os in osl: if os[0] == us[0]: if operation == '-': power = int(os[1]) - int(us[1]) else: power = int(os[1]) + int(us[1]) del osl[i] break i += 1 else: power = int(us[1]) if power != 0: new_us.append(str(power)) units_elements.append(new_us) if len(osl) != 0: units_elements += osl units = list() for us in units_elements: if us is not None: if int(us[1]) != 1: units.append("[" + us[0] + "^" + us[1] + "]") else: units.append("[" + us[0] + "]") return "".join(units)
[docs] def power_units(units, power): """Apply power to a units strings. Parameters ---------- units: str Units to take power of. power: int Power. Returns ------- str The resulting units string. """ if units: ul = units.split('][') ul[0] = ul[0][1:] ul[-1] = ul[-1][:-1] usl = list() for us in ul: up = us.split('^') if len(up) == 1: up.append("1") usl.append(tuple(up)) units_elements = list() for us in usl: units_elements.append(list((us[0], str(int(us[1]) * power)))) out_units = list() for us in units_elements: if us is not None: if int(us[1]) != 1: out_units.append("[" + us[0] + "^" + us[1] + "]") else: out_units.append("[" + us[0] + "]") return "".join(out_units) else: return ""