docs: def _qnwtrap1(n, a, b):
      """
      Compute univariate trapezoid rule quadrature nodes and weights
  
      Parameters
      ----------
      n : int
          The number of nodes
  
      a : int
          The lower endpoint
  
      b : int
          The upper endpoint
  
      Returns
      -------
      nodes : np.ndarray(dtype=float)
          An n element array of nodes
  
      nodes : np.ndarray(dtype=float)
          An n element array of weights
  
      Notes
      -----
      Based of original function ``qnwtrap1`` in CompEcon toolbox by
      Miranda and Fackler
  
      References
      ----------
      Miranda, Mario J, and Paul L Fackler. Applied Computational
      Economics and Finance, MIT Press, 2002.
  
      """
      if n < 1:
          raise ValueError("n must be at least one")
  
      nodes = np.linspace(a, b, n)
      dx = nodes[1] - nodes[0]
  
      weights = dx * np.ones(n)
      weights[0] *= 0.5
      weights[-1] *= 0.5
  
      return nodes, weights