Skip to content

Exception in glmtools/io/traversal:OneToManyTraversal #104

@brian-m-rapp

Description

@brian-m-rapp

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions