docs: def append_columns(self, colnames, values, **kwargs):
          """Append new columns to the table.
  
          When appending a single column, ``values`` can be a scalar or an
          array of either length 1 or the same length as this array (the one
          it's appended to). In case of multiple columns, values must have
          the shape ``list(arrays)``, and the dimension of each array
          has to match the length of this array.
  
          See the docs for ``numpy.lib.recfunctions.append_fields`` for an
          explanation of the remaining options.
          """
          n = len(self)
          if np.isscalar(values):
              values = np.full(n, values)
  
          values = np.atleast_1d(values)
          if not isinstance(colnames, str) and len(colnames) > 1:
              values = np.atleast_2d(values)
              self._check_column_length(values, n)
  
          if values.ndim == 1:
              if len(values) > n:
                  raise ValueError("New Column is longer than existing table!")
              elif len(values) > 1 and len(values) < n:
                  raise ValueError(
                      "New Column is shorter than existing table, "
                      "but not just one element!"
                  )
              elif len(values) == 1:
                  values = np.full(n, values[0])
          new_arr = rfn.append_fields(
              self, colnames, values, usemask=False, asrecarray=True, **kwargs
          )
          return self.__class__(
              new_arr,
              h5loc=self.h5loc,
              split_h5=self.split_h5,
              name=self.name,
              h5singleton=self.h5singleton
          )