<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def quad_golub_welsch(order, dist, accuracy=100, **kws):
 """ Golub-Welsch algorithm for creating quadrature nodes and weights. Args: order (int):
 Quadrature order dist (Dist):
 Distribution nodes and weights are found for with `dim=len(dist)` accuracy (int):
 Accuracy used in discretized Stieltjes procedure. Will be increased by one for each iteration. Returns: (numpy.ndarray, numpy.ndarray):
 Optimal collocation nodes with `x.shape=(dim, order+1)` and weights with `w.shape=(order+1,)`. Examples: [[-2.3344 -0.742 0.742 2.3344]] [0.0459 0.4541 0.4541 0.0459] [[0.2113 0.2113 0.7887 0.7887] [0.2113 0.7887 0.2113 0.7887]] [0.25 0.25 0.25 0.25] """

    order = numpy.array(order)*numpy.ones(len(dist), dtype=int)+1
    _, _, coeff1, coeff2 = chaospy.quad.generate_stieltjes(
        dist, numpy.max(order), accuracy=accuracy, retall=True, **kws)

    dimensions = len(dist)
    abscisas, weights = _golbub_welsch(order, coeff1, coeff2)

    if dimensions == 1:
        abscisa = numpy.reshape(abscisas, (1, order[0]))
        weight = numpy.reshape(weights, (order[0],))
    else:
        abscisa = chaospy.quad.combine(abscisas).T
        weight = numpy.prod(chaospy.quad.combine(weights), -1)

    assert len(abscisa) == dimensions
    assert len(weight) == len(abscisa.T)
    return abscisa, weight