code: def update_columns_dict(self, kwargs):
          
          # make sure to do the geometric things that are needed for some of the
          # ComputedColumns first
          for key in ('triangles', 'vertices', 'centers', 'vnormals', 'tnormals'):
              if key in kwargs.keys():
                  self.__setitem__(key, kwargs.pop(key))
  
          for k, v in kwargs.items():
              if isinstance(v, float) and k not in self._scalar_fields:
                  # Then let's make an array with the correct length full of this
                  # scalar
  
                  # NOTE: this won't work for Nx3's, but that
                  # really shouldn't ever happen since they should be set
                  # within the init.
                  # v = np.ones(self.Ntriangles)*v
                  if self._compute_at_vertices:
                      v = np.full(self.Nvertices, v)
                  else:
                      v = np.full(self.Ntriangles, v)
  
              self.__setitem__(k, v)
  
              if isinstance(v, ComputedColumn):
                  # then let's update the mesh instance to correctly handle
                  # inheritance
                  self.__getitem__(k)._mesh = self
docs: Update the value of a column or multiple columns by passing as a dict.
          For observable columns, provide the label of the observable itself and
          it will be found (so long as it does not conflict with an existing
          non-observable column).