code: def set_reference(self, reference):
          
          self.set_categorical_feature(reference.categorical_feature) \
              .set_feature_name(reference.feature_name) \
              ._set_predictor(reference._predictor)
          # we're done if self and reference share a common upstrem reference
          if self.get_ref_chain().intersection(reference.get_ref_chain()):
              return self
          if self.data is not None:
              self.reference = reference
              return self._free_handle()
          else:
              raise LightGBMError("Cannot set reference after freed raw data, "
                                  "set free_raw_data=False when construct Dataset to avoid this.")
docs: Set reference Dataset.
  
          Parameters
          ----------
          reference : Dataset
              Reference that is used as a template to construct the current Dataset.
  
          Returns
          -------
          self : Dataset
              Dataset with set reference.