Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

[code sharing] descriptive keyword arguments

I'm stuck using PSSE 34, and have a strong dislike for passing arguments using intgar and realar. So I made a little helper function.

def pssf(fun, *args, **kwargs):
    """
    pssf = pss function caller
    Call a psspy function with descriptive kw-args
    Eg. for machine_chng_2, we normally use intgar1=1 to changes the machine status, or realar1=100.0 to change the power (pg), like so:
        psspy.machine_chng_2(101, '1', intgar1=1, realar1=100.0)
    This function lets you do the following:
        pssf('machine_chng_2', 101, '1', stat=1, pg=100.0) 
    which I think is more readable.
    """
    fun = getattr(psspy, fun)
    doc = fun.__doc__
    kwargs_new = kwargs.copy()
    for k, v in kwargs.items():
        for t in 'INTGAR', 'REALAR', 'CHARAR':
            matches = re.search('^' + t + '\((\d+)\) ' + k.upper() + ',', s, re.MULTILINE)
            if matches:
                kwargs_new[t.lower() + matches.group(1)] = v
                kwargs_new.pop(k)
    return fun(*args, **kwargs_new)

Do newer versions of PSSE solve this problem? Did I waste my time making this?

[code sharing] descriptive keyword arguments

I'm stuck using PSSE 34, and have a strong dislike for passing arguments using intgar and realar. So I made a little helper function.

def pssf(fun, *args, **kwargs):
    """
    pssf = pss function caller
    Call a psspy function with descriptive kw-args
    Eg. for machine_chng_2, we normally use intgar1=1 to changes the machine status, or realar1=100.0 to change the power (pg), like so:
        psspy.machine_chng_2(101, '1', intgar1=1, realar1=100.0)
    This function lets you do the following:
        pssf('machine_chng_2', 101, '1', stat=1, pg=100.0) 
    which I think is more readable.
    """
    fun = getattr(psspy, fun)
    doc = fun.__doc__
    kwargs_new = kwargs.copy()
    for k, v in kwargs.items():
        for t in 'INTGAR', 'REALAR', 'CHARAR':
            matches = re.search('^' + t + '\((\d+)\) ' + k.upper() + ',', s, re.MULTILINE)
            if matches:
                kwargs_new[t.lower() + matches.group(1)] = v
                kwargs_new.pop(k)
                break
    return fun(*args, **kwargs_new)

Do newer versions of PSSE solve this problem? Did I waste my time making this?