Skip to content

High-Order 1-Dimensional Gaussian Quadrature Bug #420

@ehsansaleh

Description

@ehsansaleh

Describe the bug
1-dimensional Gaussian quadrature with orders more than 118 throws out a numpoly error.

To Reproduce

>>> import chaospy

>>> chaospy.__version__
'4.3.13'

>>> cpy_dist = chaospy.Iid(chaospy.Uniform(0, 1), 1)
>>> ex_quadx_np, ex_quadw_np = chaospy.generate_quadrature(
...     order=128, dist=cpy_dist, rule='gaussian', 
...     recurrence_algorithm='stieltjes', sparse=False)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "./venv/lib/python3.8/site-packages/chaospy/quadrature/frontend.py", line 171, in generate_quadrature
    abscissas, weights = _generate_quadrature(
  File "./venv/lib/python3.8/site-packages/chaospy/quadrature/frontend.py", line 287, in _generate_quadrature
    abscissas, weights = quad_function(order, dist, **parameters)
  File "./venv/lib/python3.8/site-packages/chaospy/quadrature/gaussian.py", line 81, in gaussian
    coefficients = chaospy.construct_recurrence_coefficients(
  File "./venv/lib/python3.8/site-packages/chaospy/recurrence/frontend.py", line 117, in construct_recurrence_coefficients
    coeffs, _, _ = stieltjes(order, dist, rule=rule, tolerance=tolerance)
  File "./venv/lib/python3.8/site-packages/chaospy/recurrence/stieltjes.py", line 68, in stieltjes
    return analytical_stieltjes(order=order, dist=dist)
  File "./venv/lib/python3.8/site-packages/chaospy/recurrence/stieltjes.py", line 180, in analytical_stieltjes
    orth = numpoly.polynomial(orth[1:]).T
  File "./venv/lib/python3.8/site-packages/numpoly/construct/polynomial.py", line 137, in polynomial
    poly = compose_polynomial_array(
  File "./venv/lib/python3.8/site-packages/numpoly/construct/compose.py", line 41, in compose_polynomial_array
    [
  File "./venv/lib/python3.8/site-packages/numpoly/construct/compose.py", line 42, in <listcomp>
    numpoly.expand_dims(numpoly.aspolynomial(array, dtype=dtype), axis=0)
  File "./venv/lib/python3.8/site-packages/numpoly/array_function/expand_dims.py", line 38, in expand_dims
    return numpoly.polynomial(out, names=a.indeterminants)
  File "./venv/lib/python3.8/site-packages/numpoly/construct/polynomial.py", line 104, in polynomial
    poly = numpoly.ndpoly.from_attributes(
  File "./venv/lib/python3.8/site-packages/numpoly/baseclass.py", line 387, in from_attributes
    return numpoly.polynomial_from_attributes(
  File "./venv/lib/python3.8/site-packages/numpoly/construct/from_attributes.py", line 72, in polynomial_from_attributes
    exponents, coefficients, names = clean.postprocess_attributes(
  File "./venv/lib/python3.8/site-packages/numpoly/construct/clean.py", line 106, in postprocess_attributes
    raise PolynomialConstructionError(
numpoly.construct.clean.PolynomialConstructionError: expected len(exponents) == len(coefficients_); found 119 != 120
>>>

Expected behavior
It should not raise any errors. This is concerning since smaller orders may be suffering from a related bug.

Desktop (please complete the following information):

  • OS: Linux (CentOS 7.9)
  • Python version: 3.8.8
  • Chaospy version: 4.3.13

Additional context
None

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions