docs: def generate_warning_text(self):
          """
          generates warnings for the current specimen then adds them to the
          current warning text for the GUI which will be rendered on a call to
          update_warning_box.
          """
          self.warning_text = ""
          if self.s in list(self.pmag_results_data['specimens'].keys()):
              for fit in self.pmag_results_data['specimens'][self.s]:
                  beg_pca, end_pca = self.get_indices(
                      fit, fit.tmin, fit.tmax, self.s)
                  if beg_pca == None or end_pca == None:
                      self.warning_text += "%s to %s are invalid bounds, to fit %s.\n" % (
                          fit.tmin, fit.tmax, fit.name)
                  elif end_pca - beg_pca < 2:
                      self.warning_text += "there are not enough points between %s to %s, on fit %s.\n" % (
                          fit.tmin, fit.tmax, fit.name)
                  else:
                      check_duplicates = []
                      warning_issued = []  # keep track of warnings issued to avoid redundant warnings
  
                      # if within range, attempt to go one additional step beyond
                      # tmax so that duplicates at the upper bound are caught
                      if (end_pca + 2) < len(self.Data[self.s]['zijdblock_steps']):
                          check_endpoint = end_pca + 2
                      else:
                          check_endpoint = end_pca + 1
  
                      for s, f in zip(self.Data[self.s]['zijdblock_steps'][beg_pca:check_endpoint],
                                      self.Data[self.s]['measurement_flag'][beg_pca:check_endpoint]):
                          if f == 'g' and [s, 'g'] in check_duplicates:
                              if s == fit.tmin and s not in warning_issued:
                                  self.warning_text += ("There are multiple good %s " +
                                                        "steps at the upper bound of Fit %s. The first " +
                                                        "measurement will be used as the lower bound.\n") % (
                                                            s, fit.name)
                                  # warning_issued_low.append(s)
                                  warning_issued.append(s)
                              elif s == fit.tmax and s not in warning_issued:
                                  self.warning_text += ("There are multiple good %s " +
                                                        "steps at the upper bound of Fit %s. The first " +
                                                        "measurement will be used as the upper bound.\n") % (
                                                            s, fit.name)
                                  # warning_issued_high.append(s)
                                  warning_issued.append(s)
                              elif s not in warning_issued:
                                  self.warning_text += ("Within Fit %s, there are " +
                                                        "multiple good measurements at the %s step. All " +
                                                        "good measurements are included in the fit.\n") % (
                                                            fit.name, s)
                                  warning_issued.append(s)
                              else:
                                  pass
                          else:
                              check_duplicates.append([s, f])
          if self.s in list(self.Data.keys()):
              if not self.Data[self.s]['zijdblock_geo']:
                  self.warning_text += "There is no geographic data for this specimen.\n"
              if not self.Data[self.s]['zijdblock_tilt']:
                  self.warning_text += "There is no tilt-corrected data for this specimen.\n"