Skip to content

Error while creating MvNormal distributions with more than 31 random variables #145

Open
@k1nshuk

Description

@k1nshuk

I recently upgraded my chaospy version from 2.3.5 to 3.0.4, and noticed that I am no longer able to create MvNormal distributions with more than 31 random variables. Specifically, if I try to execute the lines in the interactive mode

jdist = cp.MvNormal(np.zeros(32), np.eye(32))
cp.E(jdist)

I get the following error

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/kinshuk/miniconda3/envs/check_chaospy/lib/python3.7/site-packages/chaospy/descriptives/expected.py", line 58, in E
    mom = dist.mom(numpy.array(keys).T, **kws)
  File "/home/kinshuk/miniconda3/envs/check_chaospy/lib/python3.7/site-packages/chaospy/distributions/baseclass.py", line 339, in mom
    out = [evaluation.evaluate_moment(self, kdata, cache) for kdata in K.T]
  File "/home/kinshuk/miniconda3/envs/check_chaospy/lib/python3.7/site-packages/chaospy/distributions/baseclass.py", line 339, in <listcomp>
    out = [evaluation.evaluate_moment(self, kdata, cache) for kdata in K.T]
  File "/home/kinshuk/miniconda3/envs/check_chaospy/lib/python3.7/site-packages/chaospy/distributions/evaluation/moment.py", line 93, in evaluate_moment
    out = distribution._mom(k_data, **parameters)
  File "/home/kinshuk/miniconda3/envs/check_chaospy/lib/python3.7/site-packages/chaospy/distributions/collection/mv_normal.py", line 110, in _mom
    K = numpy.mgrid[[slice(0,_+1,1) for _ in k]]
  File "/home/kinshuk/miniconda3/envs/check_chaospy/lib/python3.7/site-packages/numpy/lib/index_tricks.py", line 172, in __getitem__
    nn = _nx.indices(size, typ)
  File "/home/kinshuk/miniconda3/envs/check_chaospy/lib/python3.7/site-packages/numpy/core/numeric.py", line 1966, in indices
    res = empty((N,)+dimensions, dtype=dtype)
ValueError: sequence too large; cannot be greater than 32

I tried bypassing this situation by trying to create a joint distribution using cp.J as

dist1 = cp.MvNormal(np.zeros(31), np.eye(31))
dist2 = cp.MvNormal(np.zeros(31), np.eye(31))
jdist = cp.J(dist1, dist2)

But I get an Assertion Error

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/kinshuk/miniconda3/envs/check_chaospy/lib/python3.7/site-packages/chaospy/descriptives/expected.py", line 58, in E
    mom = dist.mom(numpy.array(keys).T, **kws)
  File "/home/kinshuk/miniconda3/envs/check_chaospy/lib/python3.7/site-packages/chaospy/distributions/baseclass.py", line 339, in mom
    out = [evaluation.evaluate_moment(self, kdata, cache) for kdata in K.T]
  File "/home/kinshuk/miniconda3/envs/check_chaospy/lib/python3.7/site-packages/chaospy/distributions/baseclass.py", line 339, in <listcomp>
    out = [evaluation.evaluate_moment(self, kdata, cache) for kdata in K.T]
  File "/home/kinshuk/miniconda3/envs/check_chaospy/lib/python3.7/site-packages/chaospy/distributions/evaluation/moment.py", line 93, in evaluate_moment
    out = distribution._mom(k_data, **parameters)
  File "/home/kinshuk/miniconda3/envs/check_chaospy/lib/python3.7/site-packages/chaospy/distributions/operators/joint.py", line 169, in _mom
    output *= evaluation.evaluate_moment(dist, kloc_, cache=cache)
  File "/home/kinshuk/miniconda3/envs/check_chaospy/lib/python3.7/site-packages/chaospy/distributions/evaluation/moment.py", line 74, in evaluate_moment
    "distribution %s is not of length %d" % (distribution, len(k_data)))
AssertionError: distribution MvNormal(loc=[0.0,....,0.0], scale=[[1.0,...,1.0]]) is not of length 1

I am using numpy 1.16.4, and scipy 1.2.1 to reproduce these errors. I have been treating chaospy as a black box so far, so would greatly appreciate your assistance in getting a workaround!

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions