Skip to content

vcdata

Virtual columns dataclass

VCData = VCList() module-attribute #

Specific VCList instance for each kernel.

VCList #

Virtual column data class

Attributes:

Name Type Description
columns dict[str, str]

list of virtual columns by their name and expression.

Source code in src/sdss_explorer/dashboard/dataclass/vcdata.py
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
class VCList:
    """Virtual column data class

    Attributes:
        columns (dict[str,str]): list of virtual columns by their name and expression.
    """

    def __init__(self) -> None:
        self.columns = sl.reactive({})

    def add_column(self, name, expression):
        """Add a virtual column to the DataFrame.

        Args:
            name (str): name of vc to add
            expression (str): custom expression
        """
        columns = self.columns.value.copy()
        columns.update({name: expression})
        self.columns.set(columns)

        State.df.value.add_virtual_column(name, expression)
        for subset in SubsetState.subsets.value.values():
            if name not in subset.df.virtual_columns.keys():
                logger.debug("adding vc " + str(name) + " to subset " +
                             str(subset.name))
                subset.df.add_virtual_column(name, expression)

    def delete_column(self, name):
        """Remove a virtual column from the DataFrame.

        Warning:
            This could lead to race conditions. Untested under high stress.

        Args:
            name (str): name of vc to remove
        """
        # trigger plot resets FIRST
        columns = self.columns.value.copy()
        columns.pop(name)

        # first, if any other VC's depend on this one, they go first
        removed = [name]
        for other_name in set(
                columns.keys()):  # prevents changing size during iteration
            if name in State.df.value[other_name].variables():
                columns.pop(other_name)  # drop from UI datastruct
                removed.append(other_name)  # save this removal for later

        # remove all in a single update to prevent race conditions
        self.columns.set(columns)

        # now delete all removed virtual columns from dataframe(s)
        for column in removed:
            State.df.value.delete_virtual_column(name)
            for subset in SubsetState.subsets.value.values():
                if column in subset.df.virtual_columns.keys():
                    subset.df.delete_virtual_column(column)

    def __repr__(self) -> str:
        return str(dict(self.columns.value))

add_column(name, expression) #

Add a virtual column to the DataFrame.

Parameters:

Name Type Description Default
name str

name of vc to add

required
expression str

custom expression

required
Source code in src/sdss_explorer/dashboard/dataclass/vcdata.py
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
def add_column(self, name, expression):
    """Add a virtual column to the DataFrame.

    Args:
        name (str): name of vc to add
        expression (str): custom expression
    """
    columns = self.columns.value.copy()
    columns.update({name: expression})
    self.columns.set(columns)

    State.df.value.add_virtual_column(name, expression)
    for subset in SubsetState.subsets.value.values():
        if name not in subset.df.virtual_columns.keys():
            logger.debug("adding vc " + str(name) + " to subset " +
                         str(subset.name))
            subset.df.add_virtual_column(name, expression)

delete_column(name) #

Remove a virtual column from the DataFrame.

Warning

This could lead to race conditions. Untested under high stress.

Parameters:

Name Type Description Default
name str

name of vc to remove

required
Source code in src/sdss_explorer/dashboard/dataclass/vcdata.py
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
def delete_column(self, name):
    """Remove a virtual column from the DataFrame.

    Warning:
        This could lead to race conditions. Untested under high stress.

    Args:
        name (str): name of vc to remove
    """
    # trigger plot resets FIRST
    columns = self.columns.value.copy()
    columns.pop(name)

    # first, if any other VC's depend on this one, they go first
    removed = [name]
    for other_name in set(
            columns.keys()):  # prevents changing size during iteration
        if name in State.df.value[other_name].variables():
            columns.pop(other_name)  # drop from UI datastruct
            removed.append(other_name)  # save this removal for later

    # remove all in a single update to prevent race conditions
    self.columns.set(columns)

    # now delete all removed virtual columns from dataframe(s)
    for column in removed:
        State.df.value.delete_virtual_column(name)
        for subset in SubsetState.subsets.value.values():
            if column in subset.df.virtual_columns.keys():
                subset.df.delete_virtual_column(column)