Revision history  [back]

I just wrote this a couple hours ago for a similar problem. So it can probably be cleaned up:

def get_next_free_busnum():
    """
    get the next free bus number
    """
    # find largest bus number

    ierr, all_buses = psspy.abusint(
            sid=-1,    # all buses in the case.
            flag=2,    # in-service and out-of-service buses
            string=["NUMBER"]
            )
    # transpose from 2D array to 1D list.
    all_buses = zip(*all_buses)[0]
    busnum = max(all_buses) + 1

    return busnum

I guess you could do something smart like:

  busnum = min(set(range(15000)) - set(all_buses))
  # where 15000 is highest busnum you want to use

This will return 0, which I'm not sure is a valid number or not.

I just wrote this a couple hours ago for a similar problem. So it can probably be cleaned up:

def get_next_free_busnum():
    """
    get the next free bus number
    """
    # find largest bus number

    ierr, all_buses = psspy.abusint(
            sid=-1,    # all buses in the case.
            flag=21,    # in-service and out-of-service buses
            string=["NUMBER"]
            )
    # transpose from 2D array to 1D list.
    all_buses = zip(*all_buses)[0]
    busnum = max(all_buses) + 1

    return busnum

I guess you could do something smart like:

  busnum = min(set(range(15000)) - set(all_buses))
  # where 15000 is highest busnum you want to use

This will return 0, which I'm not sure is a valid number or not.

I just wrote this a couple hours ago for a similar problem. So it can probably be cleaned up:

def get_next_free_busnum():
    """
    get the next free bus number
    """
    # find largest bus number

    ierr, all_buses = psspy.abusint(
            sid=-1,    # all buses in the case.
            flag=1,
            string=["NUMBER"]
            )
    # transpose from 2D array to 1D list.
    all_buses = zip(*all_buses)[all_buses = all_buses[0]
    busnum = max(all_buses) + 1

    return busnum

I guess you could do something smart like:

  busnum = min(set(range(15000)) - set(all_buses))
  # where 15000 is highest busnum you want to use

This will return 0, which I'm not sure is a valid number or not.

I just wrote this a couple hours ago for a similar problem. So it can probably be cleaned up:

def get_next_free_busnum():
    """
    get the next free bus number
    """
    # find largest bus number
    sid = 1
    ierr = psspy.bsys(
            sid=sid,
            usekv=1,
            basekv=[0, 1000],
            )

    ierr, all_buses = psspy.abusint(
            sid=-1=sid,    # all buses in the case.
            flag=1,
            string=["NUMBER"]
            )
    all_buses = all_buses[0]
    busnum = max(all_buses) + 1

    return busnum

I guess you could do something smart like:

  busnum = min(set(range(15000)) - set(all_buses))
  # where 15000 is highest busnum you want to use

This will return 0, which I'm not sure is a valid number or not.

I just wrote this a couple hours ago for a similar problem. So it can probably be cleaned up:

def get_next_free_busnum():
    """
    get the next free bus number
    """
    # find largest bus number
    sid = 1
    ierr = psspy.bsys(
            sid=sid,
            usekv=1,
            basekv=[0, 1000],
            )

    ierr, all_buses = psspy.abusint(
            sid=sid,
            flag=1,
            string=["NUMBER"]
            )
    all_buses = all_buses[0]
    busnum = max(all_buses) + 1

    return busnum

I guess you could do something smart like:

  busnum = min(set(range(15000)) - set(all_buses))
  # where 15000 is highest busnum you want to use

This will return 0, which I'm not sure is a valid number or not.