docs: def get_variation_for_feature(self, feature, user_id, attributes=None):
      """ Returns the experiment/variation the user is bucketed in for the given feature.
  
      Args:
        feature: Feature for which we are determining if it is enabled or not for the given user.
        user_id: ID for user.
        attributes: Dict representing user attributes.
  
      Returns:
        Decision namedtuple consisting of experiment and variation for the user.
      """
  
      experiment = None
      variation = None
      bucketing_id = self._get_bucketing_id(user_id, attributes)
  
      # First check if the feature is in a mutex group
      if feature.groupId:
        group = self.config.get_group(feature.groupId)
        if group:
          experiment = self.get_experiment_in_group(group, bucketing_id)
          if experiment and experiment.id in feature.experimentIds:
            variation = self.get_variation(experiment, user_id, attributes)
  
            if variation:
              self.logger.debug('User "%s" is in variation %s of experiment %s.' % (
                user_id,
                variation.key,
                experiment.key
              ))
              return Decision(experiment, variation, enums.DecisionSources.FEATURE_TEST)
        else:
          self.logger.error(enums.Errors.INVALID_GROUP_ID_ERROR.format('_get_variation_for_feature'))
  
      # Next check if the feature is being experimented on
      elif feature.experimentIds:
        # If an experiment is not in a group, then the feature can only be associated with one experiment
        experiment = self.config.get_experiment_from_id(feature.experimentIds[0])
        if experiment:
          variation = self.get_variation(experiment, user_id, attributes)
  
          if variation:
            self.logger.debug('User "%s" is in variation %s of experiment %s.' % (
              user_id,
              variation.key,
              experiment.key
            ))
            return Decision(experiment, variation, enums.DecisionSources.FEATURE_TEST)
  
      # Next check if user is part of a rollout
      if feature.rolloutId:
        rollout = self.config.get_rollout_from_id(feature.rolloutId)
        return self.get_variation_for_rollout(rollout, user_id, attributes)
      else:
        return Decision(None, None, enums.DecisionSources.ROLLOUT)