'Parse dependency tree to list all required command line arguments based on
current inputs.
:param namespace: The namespace container all current argument inputs
:param path: The current complex object path
:param required: Whether the args in this object path are required'

def _parse(self, namespace, path, required):

    required_args = []
    children = self._get_children(path)
    if (not required):
        if (not any([getattr(namespace, n) for n in children])):
            return []
    siblings = self._get_siblings(path)
    if (not siblings):
        raise ValueError('Invalid    argmuent    dependency    tree')
    dependencies = self._arg_tree[siblings[0]]['dependencies']
    for child_arg in children:
        if (child_arg in required_args):
            continue
        details = self._arg_tree[child_arg]
        if (full_name(details) in dependencies):
            required_args.append(child_arg)
        elif (details['path'] in dependencies):
            required_args.extend(self._parse(namespace, details['path'], True))
        elif (details['path'] == path):
            continue
        else:
            required_args.extend(self._parse(namespace, details['path'], False))
    return set(required_args)
