def _getSubGraph(self, parent_name, graph_name, fail_noexist=False):
if not self.isMultigraph:<EOL><INDENT>raise AttributeError("<STR_LIT>")<EOL><DEDENT>if (parent_name in self._graphDict) is not None:<EOL><INDENT>subgraphs = self._subgraphDict.get(parent_name)<EOL>if subgraphs is not None:<EOL><INDENT>subgraph = subgraphs.get(graph_name)<EOL>if fail_noexist and subgraph is None:<EOL><INDENT>raise AttributeError("<STR_LIT>"<EOL>"<STR_LIT>"<EOL>% (graph_name, parent_name))<EOL><DEDENT>else:<EOL><INDENT>return subgraph<EOL><DEDENT><DEDENT>else:<EOL><INDENT>raise AttributeError("<STR_LIT>"<EOL>% (parent_name,))<EOL><DEDENT><DEDENT>else:<EOL><INDENT>raise AttributeError("<STR_LIT>"<EOL>"<STR_LIT>"<EOL>% (parent_name, graph_name))<EOL><DEDENT>
Private method for returning subgraph object with name graph_name 
        and parent graph with name parent_name. 

        @param  parent_name: Root Graph Name
        @param  graph_name:  Subgraph Name
        @param fail_noexist: If true throw exception if there is no subgraph 
                             with name graph_name.
        @return:             Graph Object or None