Getting error in using pm.LKJCorr.dist()

Hi all.

When I run the fllowing snippet, I get

ValueError: not enough values to unpack (expected 5, got 3)

Any Idea?

etas = [1, 4, 10, 20, 100]

for ii, eta in enumerate(etas):
rv = pm.LKJCorr.dist(n = 2, eta=eta, return_matrix=True)
samples = pm.draw(rv, 1000)
az.plot_dist(samples, color=f"C{ii}“, label=f"LKJCorr$(\eta={eta})$”)plt.legend()
plt.xlabel(“correlation”)
plt.ylabel(“density”)
plt.title(“LKJCorr distribution of correlations”);

It doesn’t fail for me. What version of PyMC/Arviz do you have? Try to upgrade.

Also if you could provide the whole traceback that would help.

Thank you for responding Ricardo. The whole traceback is as follows:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[13], line 1
----> 1 simulated_social_ties_model, simulated_social_ties_inference = fit_social_ties_model(simulated_gifts)

Cell In[12], line 18, in fit_social_ties_model(data, eta)
     16 # Single, global sigma
     17 sigma = pm.Exponential.dist(1)
---> 18 chol, corr, stds = pm.LKJCholeskyCov(
     19     "rho",
     20     eta=eta,
     21     n=n_correlated_features,
     22     sd_dist=sigma
     23 )
     25 # Record quantities for reporting
     26 pm.Deterministic("corrcoef_T", corr[0, 1])

File ~/anaconda3/envs/pymc_env/lib/python3.13/site-packages/pymc/distributions/multivariate.py:1471, in LKJCholeskyCov.__new__(cls, name, eta, n, sd_dist, compute_corr, store_in_trace, **kwargs)
   1470 def __new__(cls, name, eta, n, sd_dist, *, compute_corr=True, store_in_trace=True, **kwargs):
-> 1471     packed_chol = _LKJCholeskyCov(name, eta=eta, n=n, sd_dist=sd_dist, **kwargs)
   1472     if not compute_corr:
   1473         return packed_chol

File ~/anaconda3/envs/pymc_env/lib/python3.13/site-packages/pymc/distributions/distribution.py:529, in Distribution.__new__(cls, name, rng, dims, initval, observed, total_size, transform, default_transform, *args, **kwargs)
    526     elif observed is not None:
    527         kwargs["shape"] = tuple(observed.shape)
--> 529 rv_out = cls.dist(*args, **kwargs)
    531 rv_out = model.register_rv(
    532     rv_out,
    533     name,
   (...)    539     initval=initval,
    540 )
    542 # add in pretty-printing support

File ~/anaconda3/envs/pymc_env/lib/python3.13/site-packages/pymc/distributions/multivariate.py:1258, in _LKJCholeskyCov.dist(cls, n, eta, sd_dist, **kwargs)
   1255     raise TypeError("sd_dist must be a scalar or vector distribution variable")
   1257 check_dist_not_registered(sd_dist)
-> 1258 return super().dist([n, eta, sd_dist], **kwargs)

File ~/anaconda3/envs/pymc_env/lib/python3.13/site-packages/pymc/distributions/distribution.py:598, in Distribution.dist(cls, dist_params, shape, **kwargs)
    595     ndim_supp = cls.rv_op(*dist_params, **kwargs).owner.op.ndim_supp
    597 create_size = find_size(shape=shape, size=size, ndim_supp=ndim_supp)
--> 598 return cls.rv_op(*dist_params, size=create_size, **kwargs)

File ~/anaconda3/envs/pymc_env/lib/python3.13/site-packages/pymc/distributions/multivariate.py:1216, in _LKJCholeskyCovRV.rv_op(cls, n, eta, sd_dist, size)
   1213 # We flatten the size to make operations easier, and then rebuild it
   1214 flat_size = pt.prod(size, dtype="int64")
-> 1216 next_rng, C = LKJCorrRV._random_corr_matrix(rng=rng, n=n, eta=eta, flat_size=flat_size)
   1217 D_matrix = D.reshape((flat_size, n))
   1218 C *= D_matrix[..., :, None] * D_matrix[..., None, :]

File ~/anaconda3/envs/pymc_env/lib/python3.13/site-packages/pymc/distributions/multivariate.py:1576, in LKJCorrRV._random_corr_matrix(cls, rng, n, eta, flat_size)
   1574     P = P[..., 0:mp1, mp1].set(pt.sqrt(y[..., np.newaxis]) * z)
   1575     P = P[..., mp1, mp1].set(pt.sqrt(1.0 - y))
-> 1576 C = pt.einsum("...ji,...jk->...ik", P, P.copy())
   1577 return next_rng, C

File ~/anaconda3/envs/pymc_env/lib/python3.13/site-packages/pytensor/tensor/einsum.py:669, in einsum(subscripts, optimize, *operands)
    666     return operand.squeeze(squeeze_axes), "".join(names[i] for i in keep_axes)
    668 einsum_operands = list(tensor_operands)  # So we can pop
--> 669 for operand_indices, contracted_names, einstr, _, _ in contraction_list:
    670     contracted_names = sorted(contracted_names)
    671     assert len(contracted_names) == len(
    672         set(contracted_names)
    673     ), "The set was needed!"

ValueError: not enough values to unpack (expected 5, got 3)

I have the 5.25.1 version of pymc.

Can you try with the latest? Releases · pymc-devs/pymc · GitHub

Yes, it worked with the latest version. Thank you for your help.