docs: def _qnwcheb1(n, a, b):
      """
      Compute univariate Guass-Checbychev 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 ``qnwcheb1`` in CompEcon toolbox by
      Miranda and Fackler
  
      References
      ----------
      Miranda, Mario J, and Paul L Fackler. Applied Computational
      Economics and Finance, MIT Press, 2002.
  
      """
      nodes = (b+a)/2 - (b-a)/2 * np.cos(np.pi/n * np.linspace(0.5, n-0.5, n))
  
      # Create temporary arrays to be used in computing weights
      t1 = np.arange(1, n+1) - 0.5
      t2 = np.arange(0.0, n, 2)
      t3 = np.concatenate((np.array([1.0]),
                          -2.0/(np.arange(1.0, n-1, 2)*np.arange(3.0, n+1, 2))))
  
      # compute weights and return
      weights = ((b-a)/n)*np.cos(np.pi/n*np.outer(t1, t2)) @ t3
  
      return nodes, weights