code: def test_joint_logp_basic():
      """Make sure we can compute a log-likelihood for a hierarchical model with transforms."""
  
      with pm.Model() as m:
          a = pm.Uniform("a", 0.0, 1.0)
          c = pm.Normal("c")
          b_l = c * a + 2.0
          b = pm.Uniform("b", b_l, b_l + 1.0)
  
      a_value_var = m.rvs_to_values[a]
      assert m.rvs_to_transforms[a]
  
      b_value_var = m.rvs_to_values[b]
      assert m.rvs_to_transforms[b]
  
      c_value_var = m.rvs_to_values[c]
  
      (b_logp,) = transformed_conditional_logp(
          (b,),
          rvs_to_values=m.rvs_to_values,
          rvs_to_transforms=m.rvs_to_transforms,
      )
  
      # There shouldn't be any `RandomVariable`s in the resulting graph
      assert_no_rvs(b_logp)
  
      res_ancestors = list(ancestors((b_logp,)))
      assert b_value_var in res_ancestors
      assert c_value_var in res_ancestors
      assert a_value_var in res_ancestors
  
imports: import warnings
  import numpy
  import pytensor
  import pytensor.tensor
  import pytest
  import scipy.stats.distributions
  from pytensor.graph.basic import ancestors, equal_computations
  from pytensor.tensor.random.op import RandomVariable
  from pytensor.tensor.subtensor import AdvancedIncSubtensor, AdvancedIncSubtensor1, IncSubtensor
  import pymc
  from pymc.logprob.basic import conditional_logp, icdf, logcdf, logp, transformed_conditional_logp
  from pymc.logprob.transforms import LogTransform
  from pymc.logprob.utils import replace_rvs_by_values
  from pymc.testing import assert_no_rvs
label_desc: Use image node_id 8 for calling a global function with example usage: test_joint_logp_basic() without return types