code: def test_shadowing(self):
      x = ir.ApplyBinaryPrimOp("*", ir.Ref("row", tint32), ir.I32(2))
      sum = ir.ApplyBinaryPrimOp("+", x, x)
      inner = ir.Let("row", sum, sum)
      outer = ir.Let("row", ir.I32(5), inner)
      expected = (
          "(Let __cse_2 (I32 2)"
          " (Let row (I32 5)"
          " (Let __cse_1 (ApplyBinaryPrimOp `*` (Ref row) (Ref __cse_2))"
          " (Let row (ApplyBinaryPrimOp `+` (Ref __cse_1) (Ref __cse_1))"
          " (Let __cse_3 (ApplyBinaryPrimOp `*` (Ref row) (Ref __cse_2))"
          " (ApplyBinaryPrimOp `+` (Ref __cse_3) (Ref __cse_3)))))))"
      )
      assert expected == CSERenderer()(outer)
  
imports: import re
  import unittest
  import numpy
  from numpy.testing import assert_array_equal
  import hail
  import hail.ir
  from hail.ir.renderer import CSERenderer
  from hail.expr import construct_expr
  from hail.expr.types import tint32
  from hail.utils.java import Env
  from hail.utils import new_temp_file
  from test.hail.helpers import *
label_desc: Use image node_id 7 for calling the CSETests obj's underlying member method code with example usage: obj.test_shadowing() without return types