示例#1
0
 def __getitem__(self, dimension_name):
     subgrid_name, dimension_name_without_subgrid_name = Dimension.split_dimension_name(
         dimension_name)
     if subgrid_name is None:
         return self.dimensions_dict.get(dimension_name, None)
     subgrid = self.subgrids_by_name[subgrid_name]
     return subgrid[dimension_name_without_subgrid_name]
示例#2
0
    def join(self, subgrid: Hypergrid, on_external_dimension: Dimension):
        """ Joins the subgrid on the specified dimension.

        :param subgrid:
        :param on_external_dimension:
        :return:
        """
        if subgrid is None:
            return self
        assert on_external_dimension is not None

        if subgrid.name in self.dimensions_dict.keys():
            raise ValueError(f"{subgrid.name} collides with a dimension name.")

        external_dimension = on_external_dimension
        join_dimension_name = external_dimension.name
        subgrid_name, dimension_name_without_subgrid_name = Dimension.split_dimension_name(join_dimension_name)
        if subgrid_name is None:
            self.add_subgrid_on_external_dimension(other_hypergrid=subgrid, external_dimension=external_dimension)
        else:
            existing_subgrid = self.subgrids_by_name.get(subgrid_name, None)
            assert existing_subgrid is not None
            external_dimension = external_dimension.copy()
            external_dimension.name = dimension_name_without_subgrid_name
            self.subgrids_by_name[subgrid_name] = existing_subgrid.join(
                subgrid=subgrid,
                on_external_dimension=external_dimension
            )
        return self
示例#3
0
 def __contains__(self, dimension_name):
     subgrid_name, dimension_name_without_subgrid_name = Dimension.split_dimension_name(dimension_name)
     if subgrid_name is None:
         return dimension_name in self.dimension_value_dict
     if subgrid_name not in self.dimension_value_dict:
         return False
     return dimension_name_without_subgrid_name in self[subgrid_name]
示例#4
0
 def __getitem__(self, dimension_name):
     if dimension_name not in self:
         raise KeyError(f"This Point does not have a value along dimension: {dimension_name}")
     subgrid_name, dimension_name_without_subgrid_name = Dimension.split_dimension_name(dimension_name)
     if subgrid_name is None:
         return self.dimension_value_dict[dimension_name]
     return self[subgrid_name][dimension_name_without_subgrid_name]
示例#5
0
 def __getitem__(self, dimension_name):
     if dimension_name not in self:
         return None
     subgrid_name, dimension_name_without_subgrid_name = Dimension.split_dimension_name(
         dimension_name)
     if subgrid_name is None:
         return self.dimension_value_dict.get(dimension_name, None)
     return self[subgrid_name][dimension_name_without_subgrid_name]
示例#6
0
 def __setitem__(self, dimension_name, value):
     subgrid_name, dimension_name_without_subgrid_name = Dimension.split_dimension_name(dimension_name)
     if subgrid_name is None:
         self.dimension_value_dict[dimension_name] = value
     else:
         point_in_subgrid = self.dimension_value_dict.get(subgrid_name, Point())
         point_in_subgrid[dimension_name_without_subgrid_name] = value
         self.dimension_value_dict[subgrid_name] = point_in_subgrid
示例#7
0
 def __getitem__(self, dimension_or_subgrid_name):
     subgrid_name, name_without_subgrid_name = Dimension.split_dimension_name(dimension_or_subgrid_name)
     if subgrid_name is None:
         if name_without_subgrid_name in self.dimensions_dict.keys():
             return self.dimensions_dict[dimension_or_subgrid_name]
         if name_without_subgrid_name in self.subgrids_by_name.keys():
             return self.subgrids_by_name[name_without_subgrid_name]
         raise KeyError(f"{dimension_or_subgrid_name} does not match any dimension names nor any subgrid names.")
     subgrid = self.subgrids_by_name[subgrid_name]
     return subgrid[name_without_subgrid_name]
示例#8
0
    def flat_copy(self):
        """ Creates a copy of the point but all dimension names are flattened.

        :return:
        """
        flat_dict = {
            Dimension.flatten_dimension_name(dimension_name): value
            for dimension_name, value in self
        }
        return Point(**flat_dict)
示例#9
0
 def __setattr__(self, name, value):
     if name == "dimension_value_dict":
         self.__dict__[name] = value
     else:
         dimension_name = name
         subgrid_name, dimension_name_without_subgrid_name = Dimension.split_dimension_name(dimension_name)
         if subgrid_name is None:
             self.dimension_value_dict[dimension_name] = value
         else:
             point_in_subgrid = self.dimension_value_dict.get(subgrid_name, Point())
             point_in_subgrid[dimension_name_without_subgrid_name] = value
             self.dimension_value_dict[subgrid_name] = point_in_subgrid
示例#10
0
    def join(self, subgrid: Hypergrid, on_external_dimension: Dimension):
        """ Joins the subgrid on the specified dimension.

        :param subgrid:
        :param on_external_dimension:
        :return:
        """
        assert on_external_dimension is not None

        external_dimension = on_external_dimension
        pivot_dimension_name = external_dimension.name
        subgrid_name, dimension_name_without_subgrid_name = Dimension.split_dimension_name(
            pivot_dimension_name)
        if subgrid_name is None:
            self.add_subgrid_on_external_dimension(
                other_hypergrid=subgrid, external_dimension=external_dimension)
        else:
            existing_subgrid = self.subgrids_by_name.get(subgrid_name, None)
            assert existing_subgrid is not None
            external_dimension = external_dimension.copy()
            external_dimension.name = dimension_name_without_subgrid_name
            self.subgrids_by_name[subgrid_name] = existing_subgrid.join(
                subgrid=subgrid, on_external_dimension=external_dimension)
        return self