def generateDiscretizedValue(value, point_ranges, min_value, max_value):
    """
    Generate discrete symbol based on range

    This function computes the discrete symbol representation of the value based
    on the point ranges supplied. The representation will be lowerRange..upperRange.
    Note: point_ranges must be sorted already.

    Parameters
    ----------
    value: float
        The value to be transformed
    point_ranges: list
        List of ranges
    min_value: float
        The minimum value of the range
    max_value: float
        The maximum value of the range

    Returns
    -------
    str
        Discretize symbol representation of value
    """
    str_format = "{:.3f}..{:.3f}"
    # No ranges
    if (len(point_ranges) == 0):
        return (str_format.format(min_value, max_value))

    # Value is below all point_ranges
    if (value < point_ranges[0]):
        return (str_format.format(min_value, point_ranges[0]))

    # value is between point_ranges
    for i in range(1, len(point_ranges)):
        if (value < point_ranges[i]):
            return(str_format.format(point_ranges[i - 1], point_ranges[i]))

    # value is above all point_ranges
    return (str_format.format(point_ranges[len(point_ranges) - 1], max_value))