@staticmethod
def requiredInputFor(output):
    if (isinstance(output, list) and output and isinstance(output[0], str)):
        unresolved = {o for o in output if (not mbconv.canProduce(o))}
        canProduce = (o for o in output if mbconv.canProduce(o))
        additionalInput = (set(implemented[o]['req']) for o in canProduce)
        return list(set.union(unresolved, *additionalInput))
    elif isinstance(output, str):
        if (output in implemented):
            return implemented[output]['req']
        else:
            return [output]
    else:
        raise TypeError('Output should be token or list of tokens')
@staticmethod
def requiredInputFor(output):
    if (isinstance(output, list) and output and isinstance(output[0], str)):
        unresolved = {o for o in output if (not mbconv.canProduce(o))}
        canProduce = (o for o in output if mbconv.canProduce(o))
        additionalInput = (set(implemented[o]['req']) for o in canProduce)
        return list(set.union(unresolved, *additionalInput))
    elif isinstance(output, str):
        if (output in implemented):
            return implemented[output]['req']
        else:
            return [output]
    else:
        raise TypeError('Output should be token or list of tokens')