Skip to content

PolynomialChaosExpansion: TypeError: only 0-dimensional arrays can be converted to Python scalars #123

@asher-m

Description

@asher-m

This was a bug found by Eli a few months ago. As I'm in the process of migrating UncertainSCI to numpy>=2, I thought this would get collected and fixed in the process, but this is turning out to be a bit more complicated than I anticipated.

Here's the MWE Eli provided:

import numpy as np
from UncertainSCI.distributions import BetaDistribution
from UncertainSCI.pce import PolynomialChaosExpansion

beta1 = BetaDistribution(alpha=2.0, beta=5.0, domain=np.array([0.0, 1.0]))
beta2 = BetaDistribution(alpha=3.0, beta=4.0, domain=np.array([0.0, 1.0]))
pce = PolynomialChaosExpansion(
    distribution=[beta1, beta2],
    order=3,
    plabels=["test_param1", "test_param2"],
)

pce.generate_samples()

which yields:

Console Log
Traceback (most recent call last):
  File "/home/elichild01/src/koi-utils/scratch/uncertainscibug.py", line 13, in <module>
    pce.generate_samples()
    ~~~~~~~~~~~~~~~~~~~~^^
  File "/home/elichild01/src/koi-utils/scratch/.venv/lib/python3.14/site-packages/UncertainSCI/pce.py", line 222, in generate_samples
    p_standard = self.distribution.polys.wafp_sampling(
                  self.index_set.get_indices(), **self.sampling_options)
  File "/home/elichild01/src/koi-utils/scratch/.venv/lib/python3.14/site-packages/UncertainSCI/opolynd.py", line 220, in wafp_sampling
    x = self.idist_mixture_sampling(K, indices, weights=weights,
                                    fast_sampler=fast_sampler)
  File "/home/elichild01/src/koi-utils/scratch/.venv/lib/python3.14/site-packages/UncertainSCI/opolynd.py", line 164, in idist_mixture_sampling
    x[:, qd] = idistinv(np.random.random(M), Lambdas[:, qd])
              ~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/elichild01/src/koi-utils/scratch/.venv/lib/python3.14/site-packages/UncertainSCI/families.py", line 463, in fidistinv
    data = self.fidistinv_jacobi_setup(max(n[:]), data)
  File "/home/elichild01/src/koi-utils/scratch/.venv/lib/python3.14/site-packages/UncertainSCI/families.py", line 428, in fidistinv_jacobi_setup
    data.append(fidistinv_setup_helper2(ug, idistinv, exponents, 10, self.alpha, self.beta))  # , E_n?
                ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/elichild01/src/koi-utils/scratch/.venv/lib/python3.14/site-packages/UncertainSCI/families.py", line 189, in fidistinv_setup_helper2
    xgrid[:, q] = idistinv(ugrid[:, q])
                  ~~~~~~~~^^^^^^^^^^^^^
  File "/home/elichild01/src/koi-utils/scratch/.venv/lib/python3.14/site-packages/UncertainSCI/families.py", line 426, in idistinv
    return self.idistinv(u, nn)
          ~~~~~~~~~~~~~^^^^^^^
  File "/home/elichild01/src/koi-utils/scratch/.venv/lib/python3.14/site-packages/UncertainSCI/families.py", line 364, in idistinv
    x = idistinv_driver(u, n, primitive, ab, supp)
  File "/home/elichild01/src/koi-utils/scratch/.venv/lib/python3.14/site-packages/UncertainSCI/opoly1d.py", line 322, in idistinv_driver
    x[j] = optimize.bisect(lambda xx: primitive(xx) - u[j], intervals[j, 0], intervals[j, 1])
          ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/elichild01/src/koi-utils/scratch/.venv/lib/python3.14/site-packages/scipy/optimize/_zeros_py.py", line 595, in bisect
    r = _zeros._bisect(f, a, b, xtol, rtol, maxiter, args, full_output, disp)
  File "/home/elichild01/src/koi-utils/scratch/.venv/lib/python3.14/site-packages/scipy/optimize/_zeros_py.py", line 94, in f_raise
    fx = f(x, *args)
  File "/home/elichild01/src/koi-utils/scratch/.venv/lib/python3.14/site-packages/UncertainSCI/opoly1d.py", line 322, in <lambda>
    x[j] = optimize.bisect(lambda xx: primitive(xx) - u[j], intervals[j, 0], intervals[j, 1])
                                      ~~~~~~~~~^^^^
  File "/home/elichild01/src/koi-utils/scratch/.venv/lib/python3.14/site-packages/UncertainSCI/families.py", line 361, in primitive
    return self.idist(xx, n, M=M)
          ~~~~~~~~~~^^^^^^^^^^^^
  File "/home/elichild01/src/koi-utils/scratch/.venv/lib/python3.14/site-packages/UncertainSCI/families.py", line 335, in idist
    F[np.where(x <= mrs_centroid)] = jacobi_idist_driver(x[np.where(x <= mrs_centroid)], n, self.alpha, self.beta, M)
                                                                    ^^^^^^^^^^^^^^^^^
TypeError: only 0-dimensional arrays can be converted to Python scalars

I'm currently having trouble reproducing this bug on my laptop due to some platform-specific bugs (I think, i.e., I'm getting SystemError: <function> returned a result with exception set; having repro'd this bug on my other machine and searching thus far suggests to me this is not related to UncertainSCI and is instead something with the dependency builds for my laptop, which is itself unrelated but worth investigating). Nonetheless, I verified this on different hardware and can confirm that the bump to numpy>=2 causes this bug to appear.

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingnumpy2Bugs introduced by bump to numpy2

Type

No fields configured for Bug.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions