def atom_from_issue_value(issue: str, value: str) ->str:
    """
    takes a tuple representation of an issue value asignement and converts it into an atmoic one.
    Also correctly handles atoms that include . in the name, e.g. ("float","0.9") which can trip up
    ProbLog. This is the inverse of :func:`issue_value_tuple_from_atom`.

    >>> issue_value_tuple_from_atom(("Boolean","True))
    'Boolean_True'
    >>> issue_value_tuple_from_atom(('float', '0.9'))
    "'float_0.9'"


    :param issue: The issue
    :type issue: str
    :param value: the value
    :type value: str
    :raises ValueError: if the given atom does not have a valid format
    :return: A tuple containing the issue and value respectively.
    :rtype: str
    """
    if '_' in issue or '_' in value:
        raise ValueError(f'{issue} or {value} contained illigal character: _')
    if '.' in str(value):
        return f"'{issue}_{value}'"
    return f'{issue}_{value}'
