def build_fsm_spec_free_run():
    'Build a spec that results in a free-running FSM.\n\n    This will return an FSM spec with no given inputs.\n    In this case, the FSM is a free running state machine. \n    A maximum number of states are deployed.\n\n    Returns\n    -------\n    dict\n        The FSM spec that can be consumed by the FSM generator.\n    list\n        The output patterns associated with this FSM spec.\n\n    '
    input_pin = list(pin_dict.keys())[0]
    output_pins = list(pin_dict.keys())[1:interface_width]
    fsm_spec_inout = {'inputs': [], 'outputs': [], 'states': [], 'transitions': []}
    test_lanes = [[] for _ in range(len(output_pins))]
    num_states = FSM_MAX_NUM_STATES
    fsm_spec_inout['inputs'].append(('input0', input_pin))
    for i in range(len(output_pins)):
        fsm_spec_inout['outputs'].append(('output{}'.format(i), output_pins[i]))
    for i in range(num_states):
        current_state = 'S{}'.format(i)
        next_state = 'S{}'.format(((i + 1) % num_states))
        fsm_spec_inout['states'].append(current_state)
        output_pattern = ''
        for test_lane in test_lanes:
            random_1bit = '{}'.format(randint(0, 1))
            output_pattern += random_1bit
            test_lane += random_1bit
        transition = ['-', current_state, next_state, output_pattern]
        fsm_spec_inout['transitions'].append(transition)
    test_patterns = []
    for i in range(len(output_pins)):
        temp_string = ''.join(test_lanes[i])
        test_patterns.append(np.array(bitstring_to_int(wave_to_bitstring(temp_string))))
    return (fsm_spec_inout, test_patterns)
Build a spec that results in a free-running FSM.

This will return an FSM spec with no given inputs.
In this case, the FSM is a free running state machine. 
A maximum number of states are deployed.

Returns
-------
dict
    The FSM spec that can be consumed by the FSM generator.
list
    The output patterns associated with this FSM spec.
def build_fsm_spec_free_run():
    'Build a spec that results in a free-running FSM.\n\n    This will return an FSM spec with no given inputs.\n    In this case, the FSM is a free running state machine. \n    A maximum number of states are deployed.\n\n    Returns\n    -------\n    dict\n        The FSM spec that can be consumed by the FSM generator.\n    list\n        The output patterns associated with this FSM spec.\n\n    '
    input_pin = list(pin_dict.keys())[0]
    output_pins = list(pin_dict.keys())[1:interface_width]
    fsm_spec_inout = {'inputs': [], 'outputs': [], 'states': [], 'transitions': []}
    test_lanes = [[] for _ in range(len(output_pins))]
    num_states = FSM_MAX_NUM_STATES
    fsm_spec_inout['inputs'].append(('input0', input_pin))
    for i in range(len(output_pins)):
        fsm_spec_inout['outputs'].append(('output{}'.format(i), output_pins[i]))
    for i in range(num_states):
        current_state = 'S{}'.format(i)
        next_state = 'S{}'.format(((i + 1) % num_states))
        fsm_spec_inout['states'].append(current_state)
        output_pattern = 
        for test_lane in test_lanes:
            random_1bit = '{}'.format(randint(0, 1))
            output_pattern += random_1bit
            test_lane += random_1bit
        transition = ['-', current_state, next_state, output_pattern]
        fsm_spec_inout['transitions'].append(transition)
    test_patterns = []
    for i in range(len(output_pins)):
        temp_string = .join(test_lanes[i])
        test_patterns.append(np.array(bitstring_to_int(wave_to_bitstring(temp_string))))
    return (fsm_spec_inout, test_patterns)