Skip to content

subsets

Subsets and SubsetState dataclasses, including all relevant add/remove/rename/clone callbacks.

SubsetState = SubsetData() module-attribute #

Specific SubsetData instance used for app.

Subset dataclass #

Subset dataclass.

Attributes:

Name Type Description
name str

subset name

expresssion str

custom filter expression

dataset str

specific dataset

flags list[str]

toggled quick flags list

carton list[str]

selected targeting cartons

mapper list[str]

selected mapper programs

crossmatch str

multi-line string of crossmatch identifiers

cmtype str

type of crossmatch

df DataFrame

vaex dataframe, corresponds to dataset

columns list[str]

specific columns, used internally to guardrail users and reset valid columns

Source code in src/sdss_explorer/dashboard/dataclass/subsets.py
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
@dataclasses.dataclass(frozen=True)
class Subset:
    """Subset dataclass.

    Attributes:
        name: subset name
        expresssion: custom filter expression
        dataset: specific dataset
        flags: toggled quick flags list
        carton: selected targeting cartons
        mapper: selected mapper programs
        crossmatch: multi-line string of crossmatch identifiers
        cmtype: type of crossmatch
        df: vaex dataframe, corresponds to dataset
        columns: specific columns, used internally to guardrail users and reset valid columns

    """

    name: str = "A"
    expression: str = ""
    dataset: str = dataclasses.field(default_factory=State.get_default_dataset)
    flags: list[str] = dataclasses.field(
        default_factory=lambda: ["purely non-flagged"])
    carton: list[str] = dataclasses.field(default_factory=list)
    mapper: list[str] = dataclasses.field(default_factory=list)
    crossmatch: str = ""
    cmtype: str = "gaia_dr3"
    df: vx.DataFrame = State.df.value
    columns: list[str] = dataclasses.field(default_factory=list)

    def __repr__(self) -> str:
        return "\n".join(
            f"{k:15}: {v}" for k, v in {
                "name": self.name,
                "id": State.uuid,
                "df": hex(id(self.df)),
                "expression": self.expression,
                "dataset": self.dataset,
                "carton": self.carton,
                "mapper": self.mapper,
            }.items())

SubsetData #

User-facing subset reactive class, with functions for add/remove/etc.

Attributes:

Name Type Description
index Reactive[int]

index, used to ensure unique keys

subsets Reactive[dict[str, Subset]]

dictionary of keys to subsets

Source code in src/sdss_explorer/dashboard/dataclass/subsets.py
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
class SubsetData:
    """User-facing subset reactive class, with functions for add/remove/etc.

    Attributes:
        index (solara.Reactive[int]): index, used to ensure unique keys
        subsets (solara.Reactive[dict[str,Subset]]): dictionary of keys to subsets

    """

    def __init__(self):
        self.index = sl.reactive(1)
        self.subsets = sl.reactive({"s0": Subset()})

    def add_subset(self, name: str, **kwargs) -> bool:
        """Adds subset and subsetcard, generating new unique key for subset.

        Args:
            key: subset key
            kwargs (kwargs): keyword arguments to instantiate `Subset` with

        Returns:
            bool: `True` if successful, `False` if not.
        """
        for subset in self.subsets.value.values():
            if name == subset.name:
                Alert.update("Subset with name already exists!", color="error")
                return False
        if len(name) == 0:
            Alert.update("Please enter a name for the subset.",
                         color="warning")
            return False

        else:  # no name case
            # add subset
            key = self.index.value
            subsets = self.subsets.value.copy()
            subsets.update({"s" + str(key): Subset(name=name, **kwargs)})
            self.subsets.set(dict(**subsets))

            # iterate index
            self.index.set(self.index.value + 1)
            return True

    def update_subset(self, key: str, **kwargs) -> bool:
        """Updates subset of key with specified kwargs

        Args:
            key: subset key
            kwargs (kwargs): keyword arguments to update with

        Returns:
            bool: `True` if successful, `False` if not.
        """
        if key not in self.subsets.value.keys():
            Alert.update(
                f"BUG: subset update failed! Key {key} not in hashmap.",
                color="error")
            return False

        subsets = self.subsets.value.copy()
        subset = self.subsets.value[key]
        subsets[key] = dataclasses.replace(subset, **kwargs)
        self.subsets.set(dict(**subsets))
        return True

    def rename_subset(self, key: str, newname: str) -> bool:
        """Renames a subset.

        Args:
            key: subset key
            newname: new name for subset

        Returns:
            bool: `True` if successful, `False` if not.
        """
        if key not in self.subsets.value.keys():
            Alert.update("BUG: subset clone failed! Key not in hashmap.",
                         color="error")
            return False
        elif len(newname) == 0:
            Alert.update("Enter a name for the subset!", color="warning")
            return False
        elif newname == self.subsets.value[key].name:
            Alert.update("Name is the same!", color="warning")
            return False
        elif newname in [ss.name for ss in self.subsets.value.values()]:
            Alert.update("Name already exists!", color="warning")
            return False
        else:
            return self.update_subset(key, name=newname)

    def clone_subset(self, key: str) -> bool:
        """Clones a subset.

        Args:
            key: subset key

        Returns:
            bool: `True` if successful, `False` if not.
        """
        if key not in self.subsets.value.keys():
            Alert.update("BUG: subset clone failed! Key not in hashmap.",
                         color="error")
            return False
        else:
            subsets = self.subsets.value.copy()
            subset = self.subsets.value[key]
            # TODO: better name logic
            name = "copy of " + subset.name
            newkey = "s" + str(self.index.value)
            self.index.set(self.index.value + 1)

            subsets.update({newkey: dataclasses.replace(subset, name=name)})
            self.subsets.set(dict(**subsets))
            return True

    def remove_subset(self, key: str):
        """
        Removes a subset from the Subset master list.

        Args:
            key: subset key
        """
        # dict comprehension for reconstruction
        self.subsets.value = dict(**{
            k: v
            for k, v in self.subsets.value.items() if k != key
        })

add_subset(name, **kwargs) #

Adds subset and subsetcard, generating new unique key for subset.

Parameters:

Name Type Description Default
key

subset key

required
kwargs kwargs

keyword arguments to instantiate Subset with

{}

Returns:

Name Type Description
bool bool

True if successful, False if not.

Source code in src/sdss_explorer/dashboard/dataclass/subsets.py
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
def add_subset(self, name: str, **kwargs) -> bool:
    """Adds subset and subsetcard, generating new unique key for subset.

    Args:
        key: subset key
        kwargs (kwargs): keyword arguments to instantiate `Subset` with

    Returns:
        bool: `True` if successful, `False` if not.
    """
    for subset in self.subsets.value.values():
        if name == subset.name:
            Alert.update("Subset with name already exists!", color="error")
            return False
    if len(name) == 0:
        Alert.update("Please enter a name for the subset.",
                     color="warning")
        return False

    else:  # no name case
        # add subset
        key = self.index.value
        subsets = self.subsets.value.copy()
        subsets.update({"s" + str(key): Subset(name=name, **kwargs)})
        self.subsets.set(dict(**subsets))

        # iterate index
        self.index.set(self.index.value + 1)
        return True

clone_subset(key) #

Clones a subset.

Parameters:

Name Type Description Default
key str

subset key

required

Returns:

Name Type Description
bool bool

True if successful, False if not.

Source code in src/sdss_explorer/dashboard/dataclass/subsets.py
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
def clone_subset(self, key: str) -> bool:
    """Clones a subset.

    Args:
        key: subset key

    Returns:
        bool: `True` if successful, `False` if not.
    """
    if key not in self.subsets.value.keys():
        Alert.update("BUG: subset clone failed! Key not in hashmap.",
                     color="error")
        return False
    else:
        subsets = self.subsets.value.copy()
        subset = self.subsets.value[key]
        # TODO: better name logic
        name = "copy of " + subset.name
        newkey = "s" + str(self.index.value)
        self.index.set(self.index.value + 1)

        subsets.update({newkey: dataclasses.replace(subset, name=name)})
        self.subsets.set(dict(**subsets))
        return True

remove_subset(key) #

Removes a subset from the Subset master list.

Parameters:

Name Type Description Default
key str

subset key

required
Source code in src/sdss_explorer/dashboard/dataclass/subsets.py
171
172
173
174
175
176
177
178
179
180
181
182
def remove_subset(self, key: str):
    """
    Removes a subset from the Subset master list.

    Args:
        key: subset key
    """
    # dict comprehension for reconstruction
    self.subsets.value = dict(**{
        k: v
        for k, v in self.subsets.value.items() if k != key
    })

rename_subset(key, newname) #

Renames a subset.

Parameters:

Name Type Description Default
key str

subset key

required
newname str

new name for subset

required

Returns:

Name Type Description
bool bool

True if successful, False if not.

Source code in src/sdss_explorer/dashboard/dataclass/subsets.py
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
def rename_subset(self, key: str, newname: str) -> bool:
    """Renames a subset.

    Args:
        key: subset key
        newname: new name for subset

    Returns:
        bool: `True` if successful, `False` if not.
    """
    if key not in self.subsets.value.keys():
        Alert.update("BUG: subset clone failed! Key not in hashmap.",
                     color="error")
        return False
    elif len(newname) == 0:
        Alert.update("Enter a name for the subset!", color="warning")
        return False
    elif newname == self.subsets.value[key].name:
        Alert.update("Name is the same!", color="warning")
        return False
    elif newname in [ss.name for ss in self.subsets.value.values()]:
        Alert.update("Name already exists!", color="warning")
        return False
    else:
        return self.update_subset(key, name=newname)

update_subset(key, **kwargs) #

Updates subset of key with specified kwargs

Parameters:

Name Type Description Default
key str

subset key

required
kwargs kwargs

keyword arguments to update with

{}

Returns:

Name Type Description
bool bool

True if successful, False if not.

Source code in src/sdss_explorer/dashboard/dataclass/subsets.py
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
def update_subset(self, key: str, **kwargs) -> bool:
    """Updates subset of key with specified kwargs

    Args:
        key: subset key
        kwargs (kwargs): keyword arguments to update with

    Returns:
        bool: `True` if successful, `False` if not.
    """
    if key not in self.subsets.value.keys():
        Alert.update(
            f"BUG: subset update failed! Key {key} not in hashmap.",
            color="error")
        return False

    subsets = self.subsets.value.copy()
    subset = self.subsets.value[key]
    subsets[key] = dataclasses.replace(subset, **kwargs)
    self.subsets.set(dict(**subsets))
    return True