glmtools icon indicating copy to clipboard operation
glmtools copied to clipboard

Exception in glmtools/io/traversal:OneToManyTraversal

Open brian-m-rapp opened this issue 1 year ago • 0 comments

glmtools/io/traversal:OneToManyTraversal.__init__ has this loop:

        for (entity_var, parent_var) in self._descend():
            if dataset.dims[dataset[entity_var].dims[0]] == 0:
                # No data, so groupby will fail in xarray > 0.13
                entity_grouper = None
            else:
                entity_grouper = dataset.groupby(entity_var)
            self.entity_groups[entity_var] = entity_grouper
            if parent_var is None:
                parent_grouper = None
            else:
                if dataset.dims[dataset[parent_var].dims[0]] == 0:
                    # No data, so groupby will fail in xarray > 0.13
                    parent_grouper = None
                else:
                    parent_grouper = dataset.groupby(parent_var)
            self.parent_groups[parent_var] = parent_grouper
            self.child_to_parent[entity_var] = parent_var
            self.parent_to_child[parent_var] = entity_var
            self.parent_groups_by_entity[entity_var] = parent_grouper
            self.entity_groups_by_parent[parent_var] = entity_grouper

When dataset.dims[dataset[parent_var].dims[0]] == 0, parent_grouper is set to None and then assigned to self.parent_groups[parent_var]

In the check_parent_child method in the same file, these assignments are made:

trav = self
...
parent_grouper = trav.parent_groups[parent_var]
parent_ids = set(parent_grouper.groups.keys())

This can result in parent_grouper being assigned None. The next statement attempts to resolve parent_grouper.groups.keys(). When parent_grouper is None, this results in an exception.

brian-m-rapp avatar Jan 30 '25 19:01 brian-m-rapp