docs: def meta_project(self, attr_list=None, all_but=None, new_attr_dict=None):
          """
          *Wrapper of* ``PROJECT``
  
          Project the metadata based on a list of attribute names
          
          :param attr_list: list of the metadata fields to select
          :param all_but: list of metadata that must be excluded from the projection.
          :param new_attr_dict: an optional dictionary of the form {'new_field_1': function1,
                 'new_field_2': function2, ...} in which every function computes
                 the new field based on the values of the others
          :return: a new GMQLDataset
  
          Notice that if attr_list is specified, all_but cannot be specified and viceversa.
  
          Examples::
  
              new_dataset = dataset.meta_project(attr_list=['antibody', 'ID'],
                                                 new_attr_dict={'new_meta': dataset['ID'] + 100})
  
          """
          return self.project(projected_meta=attr_list, new_attr_dict=new_attr_dict, all_but_meta=all_but)