File size: 2,242 Bytes
1e054bd
 
b28a0c6
 
1e054bd
56f97d6
1e054bd
f670049
 
 
1e054bd
 
56f97d6
f670049
 
 
1e054bd
 
 
 
f670049
1e054bd
f670049
 
 
 
 
56f97d6
 
f670049
4671427
b28a0c6
6cbf624
 
 
4671427
 
 
 
 
 
 
 
 
b28a0c6
 
35d044c
f670049
 
 
 
 
 
1e054bd
 
 
56f97d6
 
f670049
267e844
 
 
 
 
 
56f97d6
 
 
1e054bd
 
f670049
 
 
35d044c
f670049
b28a0c6
f670049
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import streamlit as st

# TODO: rename everything


def select_int_interval(param_name, limits_list, defaults, **kwargs):
    st.sidebar.subheader(param_name)
    min_max_interval = st.sidebar.slider(
        "", limits_list[0], limits_list[1], defaults, key=hash(param_name)
    )
    return min_max_interval


def select_several_ints(
    param_name, subparam_names, limits_list, defaults_list, **kwargs
):
    st.sidebar.subheader(param_name)
    result = []
    assert len(limits_list) == len(defaults_list)
    assert len(subparam_names) == len(defaults_list)

    for name, limits, defaults in zip(subparam_names, limits_list, defaults_list):
        result.append(
            st.sidebar.slider(
                name, limits[0], limits[1], defaults, key=hash(param_name + name)
            )
        )
    return tuple(result)


def select_min_max(param_name, limits_list, defaults_list, min_diff=0, **kwargs):
    assert len(param_name) == 2
    result = list(
        select_int_interval(" & ".join(param_name), limits_list, defaults_list)
    )
    if result[1] - result[0] < min_diff:
        diff = min_diff - result[1] + result[0]
        if result[1] + diff <= limits_list[1]:
            result[1] = result[1] + diff
        elif result[0] - diff >= limits_list[0]:
            result[0] = result[0] - diff
        else:
            result = limits_list
    return tuple(result)


def select_RGB(param_name, **kwargs):
    result = select_several_ints(
        param_name,
        subparam_names=["Red", "Green", "Blue"],
        limits_list=[[0, 255], [0, 255], [0, 255]],
        defaults_list=[0, 0, 0],
    )
    return tuple(result)


def select_radio(param_name, options_list, **kwargs):
    st.sidebar.subheader(param_name)
    result = st.sidebar.radio("", options_list)
    return result


def select_checkbox(param_name, defaults, **kwargs):
    st.sidebar.subheader(param_name)
    result = st.sidebar.checkbox("True", defaults)
    return result


# dict from param name to function showing this param
param2func = {
    "int_interval": select_int_interval,
    "several_ints": select_several_ints,
    "radio": select_radio,
    "rgb": select_RGB,
    "checkbox": select_checkbox,
    "min_max": select_min_max,
}