def _get_fill_color_transform(table, geometry_column_names):
    column_name, name_parts = _prepare_column_name(
        FILL_COLOR_COLUMN_PATTERN, table.columns)
    if not column_name:
        return
    color_scheme, summary_type = name_parts
    local_property_name = 'fillColor'
    if color_scheme == 'color':
        summarize = _define_summarize_colors(summary_type or 'mean')
        normalize = rgb2hex
    else:
        hex_array = _get_hex_array(color_scheme)
        summarize = _define_summarize_numbers(summary_type or 'sum')
        normalize_number = define_normalize(_get_summary_domain(
            table, geometry_column_names, column_name, summarize), [0, 8.9999])

        def normalize(x):
            index_string = floor(normalize_number(x))
            try:
                index = int(index_string)
            except ValueError:
                index = 0
            return hex_array[index]

    return _define_transform(
        column_name, local_property_name, normalize, summarize)
def _get_radius_transform(table, geometry_column_names):
    column_name, name_parts = _prepare_column_name(
        RADIUS_COLUMN_PATTERN, table.columns)
    if not column_name:
        return
    scale, has_range, y_min, y_max, summary_type = name_parts
    local_property_name = 'radius_in_' + scale
    summarize = _define_summarize_numbers(summary_type or 'sum')
    normalize = define_normalize(_get_summary_domain(
        table, geometry_column_names, column_name, summarize,
    ), [float(y_min), float(y_max)]) if has_range else lambda x: x
    return _define_transform(
        column_name, local_property_name, normalize, summarize)