code: def test_shape_error(self):
      with pytest.raises(pm.exceptions.ShapeError) as exinfo:
          raise pm.exceptions.ShapeError("Just the message.")
      assert "Just" in exinfo.value.args[0]
  
      with pytest.raises(pm.exceptions.ShapeError) as exinfo:
          raise pm.exceptions.ShapeError("With shapes.", actual=(2, 3))
      assert "(2, 3)" in exinfo.value.args[0]
  
      with pytest.raises(pm.exceptions.ShapeError) as exinfo:
          raise pm.exceptions.ShapeError(
              "With shapes.", expected="(2,3) or (5,6)"
          )
      assert "(5,6)" in exinfo.value.args[0]
  
      with pytest.raises(pm.exceptions.ShapeError) as exinfo:
          raise pm.exceptions.ShapeError(
              "With shapes.", actual=(), expected="(5,4) or (?,?,6)"
          )
      assert "(?,?,6)" in exinfo.value.args[0]
  
imports: import re
  import arviz
  import numpy
  import pytest
  import xarray
  from cachetools import cached
  import pymc
  from pymc.distributions.transforms import Transform
  from pymc.util import UNSET, _get_seeds_per_chain, dataset_to_point_list, drop_warning_stat, get_value_vars_from_user_vars, hash_key, hashable, locally_cachedmethod
label_desc: Use image node_id 1 for calling the TestExceptions obj's underlying member method code with example usage: obj.test_shape_error() without return types