def _resolve_assignment_parts(parts, assign_path, context):
assign_path = assign_path[:]<EOL>index = assign_path.pop(<NUM_LIT:0>)<EOL>for part in parts:<EOL><INDENT>assigned = None<EOL>if isinstance(part, nodes.Dict):<EOL><INDENT>try:<EOL><INDENT>assigned, _ = part.items[index]<EOL><DEDENT>except IndexError:<EOL><INDENT>return<EOL><DEDENT><DEDENT>elif hasattr(part, "<STR_LIT>"):<EOL><INDENT>index_node = nodes.Const(index)<EOL>try:<EOL><INDENT>assigned = part.getitem(index_node, context)<EOL><DEDENT>except (exceptions.AstroidTypeError, exceptions.AstroidIndexError):<EOL><INDENT>return<EOL><DEDENT><DEDENT>if not assigned:<EOL><INDENT>return<EOL><DEDENT>if not assign_path:<EOL><INDENT>yield assigned<EOL><DEDENT>elif assigned is util.Uninferable:<EOL><INDENT>return<EOL><DEDENT>else:<EOL><INDENT>try:<EOL><INDENT>yield from _resolve_assignment_parts(<EOL>assigned.infer(context), assign_path, context<EOL>)<EOL><DEDENT>except exceptions.InferenceError:<EOL><INDENT>return<EOL><DEDENT><DEDENT><DEDENT>
recursive function to resolve multiple assignments