code: def fill_missing_attributes_from_default_parameter(self, param):
          
          if not self.exists(param.name) or not ParameterScenarioSet.default_scenario in self.parameter_sets[
              param.name].scenarios.keys():
              logger.warning(
                  f'No default value for param {param.name} found.')
              return
          default = self.parameter_sets[param.name][ParameterScenarioSet.default_scenario]
          for att_name, att_value in default.__dict__.items():
              if att_name in ['unit', 'label', 'comment', 'source', 'tags']:
  
                  if att_name == 'tags' and default.tags != param.tags:
                      logger.warning(
                          f'For param {param.name} for scenarios {param.source_scenarios_string}, tags is different from default parameter tags. Overwriting with default values.')
                      setattr(param, att_name, att_value)
  
                  if not getattr(param, att_name):
                      logger.debug(
                          f'For param {param.name} for scenarios {param.source_scenarios_string}, populating attribute {att_name} with value {att_value} from default parameter.')
  
                      setattr(param, att_name, att_value)
docs: Empty fields in Parameter definitions in scenarios are populated with default values.
  
          E.g. in the example below, the source for the Power_TV variable in the 8K scenario would also be EnergyStar.
  
          | name     | scenario | val | tags   | source     |
          |----------|----------|-----|--------|------------|
          | Power_TV |          | 60  | UD, TV | EnergyStar |
          | Power_TV | 8K       | 85  | new_tag|            |
  
          **Note** tags must not differ. In the example above, the 8K scenario variable the tags value would be overwritten
          with the default value.
  
          :param param:
          :return: