docs: def weighting(self, landscape=None):
          """ Define a weighting function, 
                  for stability results to hold, the function must be 0 at y=0.    
          """
  
          # TODO: Implement a logistic function
          # TODO: use self.weighting_type to choose function
  
          if landscape is not None:
              if len(landscape) > 0:
                  maxy = np.max(landscape[:, 1])
              else: 
                  maxy = 1
  
          def linear(interval):
              # linear function of y such that f(0) = 0 and f(max(y)) = 1
              d = interval[1]
              return (1 / maxy) * d if landscape is not None else d
  
          def pw_linear(interval):
              """ This is the function defined as w_b(t) in the original PI paper
  
                  Take b to be maxy/self.ny to effectively zero out the bottom pixel row
              """
  
              t = interval[1]
              b = maxy / self.ny
  
              if t <= 0:
                  return 0
              if 0 < t < b:
                  return t / b
              if b <= t:
                  return 1
  
          return linear