Parse signature declartion string

        Uses :py:attr:`signature_pattern` to parse out pieces of constraint
        signatures. Pattern should provide the following named groups:

            prefix
                Object prefix, such as a namespace

            member
                Object member name

            arguments
                Declaration arguments, if this is a callable constraint

        :param signature: construct signature
        :type signature: string

def parse_signature(cls, signature):
        """Parse signature declartion string

        Uses :py:attr:`signature_pattern` to parse out pieces of constraint
        signatures. Pattern should provide the following named groups:

            prefix
                Object prefix, such as a namespace

            member
                Object member name

            arguments
                Declaration arguments, if this is a callable constraint

        :param signature: construct signature
        :type signature: string
        """
        assert cls.signature_pattern is not None
        pattern = re.compile(cls.signature_pattern, re.VERBOSE)
        match = pattern.match(signature)
        if match:
            groups = match.groupdict()
            arguments = None
            if 'arguments' in groups and groups['arguments'] is not None:
                arguments = re.split(r'\,\s+', groups['arguments'])
            return DotNetSignature(
                prefix=groups.get('prefix', None),
                member=groups.get('member', None),
                arguments=arguments
            )
        raise ValueError('Could not parse signature: {0}'.format(signature))