# Support symbolic eta parameter in LKJCholeskyCov.logp

**URL:** https://discourse.pymc.io/t/support-symbolic-eta-parameter-in-lkjcholeskycov-logp/17909
**Category:** Development
**Created:** [August 15, 2026, 5:21pm UTC](https://discourse.pymc.io/t/support-symbolic-eta-parameter-in-lkjcholeskycov-logp/17909 "2026-08-15T17:21:44Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![Ray729](https://avatars.discourse-cdn.com/v4/letter/r/a587f6/32.png) [@Ray729](https://discourse.pymc.io/u/Ray729)
#### Post date: [August 15, 2026, 5:21pm UTC](https://discourse.pymc.io/t/support-symbolic-eta-parameter-in-lkjcholeskycov-logp/17909/1 "2026-08-15T17:21:44Z")

</div>

Hi everyone,

I came across an open `TODO` in `pymc/distributions/multivariate.py` (around line 1297) for `_LKJCholeskyCovRV_logp`.

```auto
# TODO: _lkj_normalizing_constant currently requires `eta` and `n` to be constants
try:
    eta = float(get_underlying_scalar_constant_value(eta))
except NotScalarConstantError:
    raise NotImplementedError("logp only implemented for constant `eta`")

```

Currently, this raises a `NotImplementedError` whenever a user passes a symbolic tensor or prior (such as `pm.HalfNormal`) to `eta`. However, `_lkj_normalizing_constant` already relies on symbolic PyTensor operations (`gammaln`, `pt.switch`, `pt.log`), and `LKJCorr.logp` already supports dynamic `eta` while keeping `n` constant.

Should I make a PR lifting this scalar constant constraint and adding unit tests for symbolic `eta` support in `test_multivariate.py`?

Thanks!

---

<div class="post-metadata">

### Author: ![jessegrabowski](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.pymc.io/jessegrabowski/32/5010_2.png) [@jessegrabowski](https://discourse.pymc.io/u/jessegrabowski)
#### Post date: [August 15, 2026, 5:48pm UTC](https://discourse.pymc.io/t/support-symbolic-eta-parameter-in-lkjcholeskycov-logp/17909/2 "2026-08-15T17:48:00Z")

</div>

Do you have a specific model where this is blocking you?

---

<div class="post-metadata">

### Author: ![Ray729](https://avatars.discourse-cdn.com/v4/letter/r/a587f6/32.png) [@Ray729](https://discourse.pymc.io/u/Ray729)
#### Post date: [August 15, 2026, 6:21pm UTC](https://discourse.pymc.io/t/support-symbolic-eta-parameter-in-lkjcholeskycov-logp/17909/3 "2026-08-15T18:21:31Z")

</div>

It isn’t blocking a personal model of mine right now. I was exploring the codebase for open TODOs and areas to contribute, and I came across the `NotImplementedError` restriction on `eta` in `_LKJCholeskyCovRV_logp`.

The motivation is bringing `LKJCholeskyCov` into feature parity with `LKJCorr` (which already supports dynamic eta). In hierarchical modeling, users occasionally want to infer eta by putting a prior on it (for example, in [this discussion](https://discourse.pymc.io/t/weird-posterior-for-correlation-structure-using-lkj-distribution/1639)), and currently `LKJCholeskyCov` raises an error if eta is anything other than a static float constant.

I mainly wanted to check with the team first before opening an unprompted PR about whether this change was worth making. If this is something you’d like brought in for consistency, I’m happy to put up a PR, otherwise, no worries at all!
