def partial_declaration_path(decl):
<EOL>if not decl:<EOL><INDENT>return []<EOL><DEDENT>if not decl.cache.partial_declaration_path:<EOL><INDENT>result = [decl.partial_name]<EOL>parent = decl.parent<EOL>while parent:<EOL><INDENT>if parent.cache.partial_declaration_path:<EOL><INDENT>result.reverse()<EOL>decl.cache.partial_declaration_path= parent.cache.partial_declaration_path + result<EOL>return decl.cache.partial_declaration_path<EOL><DEDENT>else:<EOL><INDENT>result.append(parent.partial_name)<EOL>parent = parent.parent<EOL><DEDENT><DEDENT>result.reverse()<EOL>decl.cache.partial_declaration_path = result<EOL>return result<EOL><DEDENT>return decl.cache.partial_declaration_path<EOL>
Returns a list of parent declarations names without template arguments that
have default value.

Args:
    decl (declaration_t): declaration for which the partial declaration
                          path should be calculated.

Returns:
    list[(str | basestring)]: list of names, where first item is the top
                              parent name and last item the inputted
                              declaration name.