docs: def h_from_V(self, V, method='spline'):
          r'''Method to calculate the height of liquid in a fully defined tank
          given a specified volume of liquid in it `V`. `V` must be under the
          maximum volume. If the method is 'spline', and the interpolation table
          is not yet defined, creates it by calling the method set_table. If the
          method is 'chebyshev', and the coefficients have not yet been 
          calculated, they are created by calling `set_chebyshev_approximators`.
  
          Parameters
          ----------
          V : float
              Volume of liquid in the tank up to the desired height, [m^3]
          method : str
              One of 'spline', 'chebyshev', or 'brenth'
  
          Returns
          -------
          h : float
              Height of liquid at which the volume is as desired, [m]
          '''
          if method == 'spline':
              if not self.table:
                  self.set_table()
              return float(self.interp_h_from_V(V))
          elif method == 'chebyshev':
              if not self.chebyshev:
                  self.set_chebyshev_approximators()
              return self.h_from_V_cheb(V)
          elif method == 'brenth':
              to_solve = lambda h : self.V_from_h(h, method='full') - V
              return brenth(to_solve, self.h_max, 0)
          else:
              raise Exception("Allowable methods are 'full' or 'chebyshev', "
                              "or 'brenth'.")