code: def test_factorized_joint_logprob_multi_obs():
      a = pt.random.uniform(0.0, 1.0)
      b = pt.random.normal(0.0, 1.0)
  
      a_val = a.clone()
      b_val = b.clone()
  
      logp_res = conditional_logp({a: a_val, b: b_val})
      logp_res_combined = pt.add(*logp_res.values())
      logp_exp = logp(a, a_val) + logp(b, b_val)
  
      assert equal_computations([logp_res_combined], [logp_exp])
  
      x = pt.random.normal(0, 1)
      y = pt.random.normal(x, 1)
  
      x_val = x.clone()
      y_val = y.clone()
  
      logp_res = conditional_logp({x: x_val, y: y_val})
      exp_logp = conditional_logp({x: x_val, y: y_val})
      logp_res_comb = pt.sum(
          [pt.sum(factor) for factor in logp_res.values()]
      )
      exp_logp_comb = pt.sum(
          [pt.sum(factor) for factor in exp_logp.values()]
      )
  
      assert equal_computations([logp_res_comb], [exp_logp_comb])
  
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 2 for calling a global function with example usage: test_factorized_joint_logprob_multi_obs() without return types