Return dict of parts forming `name`.  Raise `ValueError` if string
        `name` cannot be correctly parsed.

        The default implementation uses
        `NodeNamingPolicy._NODE_NAME_RE` to parse the name back into
        constituent parts.

        This is ideally the inverse of :meth:`_format` -- it should be
        able to parse a node name string into the parameter values
        that were used to form it.

def _parse(name):
        """
        Return dict of parts forming `name`.  Raise `ValueError` if string
        `name` cannot be correctly parsed.

        The default implementation uses
        `NodeNamingPolicy._NODE_NAME_RE` to parse the name back into
        constituent parts.

        This is ideally the inverse of :meth:`_format` -- it should be
        able to parse a node name string into the parameter values
        that were used to form it.
        """
        match = NodeNamingPolicy._NODE_NAME_RE.match(name)
        if match:
            return match.groupdict()
        else:
            raise ValueError(
                "Cannot parse node name `{name}`"
                    .format(name=name))