def setup_parent_sockets_data(self):
        """Store data and perform setups.

        Setups performed:

        - Organizing sockets into general tree structures
          of height 1
            Works by having sockets reference each other
            using 'parent' and 'children' attributes.

        - Store references for each parent
            We do so in order to be able to to easily
            retrieve data about socket trees whenever
            needed.
        """
        ### iterate over the data for each tree in the
        ### parent sockets data attribute, grabbing references
        ### for each socket in each tree and making it so parents
        ### reference the children and vice-versa;
        ###
        ### the parent of each tree is returned in the process and
        ### gathered in a list stored in the 'parents' attribute

        self.parents = [
            self.reference_parent_children(parent_data)
            for parent_data in self.parent_sockets_data
        ]

        ### create collections to temporarily store sockets and
        ### their nodes to be signaled after the sockets' segments are
        ### severed (check the sever_segment_between_sockets method to
        ### know more about their usage)

        self.parents_for_signaling = []
        self.children_for_signaling = []

        self.nodes_for_signaling = set()
Store data and perform setups.

        Setups performed:

        - Organizing sockets into general tree structures
          of height 1
            Works by having sockets reference each other
            using 'parent' and 'children' attributes.

        - Store references for each parent
            We do so in order to be able to to easily
            retrieve data about socket trees whenever
            needed.
        
nodezator/graphman/socketparenthood/main.py