code: def proportional_weights(self, fraction_stdev=1.0, wmax=100.0,
                               leave_zero=True):
          
          new_weights = []
          for oval, ow in zip(self.observation_data.obsval,
                              self.observation_data.weight):
              if leave_zero and ow == 0.0:
                  ow = 0.0
              elif oval == 0.0:
                  ow = wmax
              else:
                  nw = 1.0 / (np.abs(oval) * fraction_stdev)
                  ow = min(wmax, nw)
              new_weights.append(ow)
          self.observation_data.weight = new_weights
docs: setup  weights inversely proportional to the observation value
  
          Parameters
          ----------
          fraction_stdev : float
              the fraction portion of the observation
              val to treat as the standard deviation.  set to 1.0 for
              inversely proportional
          wmax : float
              maximum weight to allow
          leave_zero : bool
              flag to leave existing zero weights