code: def test_unbroadcast(self):
      for _ in range(self.test_epoch):
          # scaler, matrix
          x0 = self._rand_gen("scalar")
          x1 = self._rand_gen()
          # function
          f_str = "x0 + x0 + x1 + x1"
          # gradient
          self._assert_grad_equal(f_str, [x0, x1], rtol=1e-2)
  
          # col_vector, matrix
          x0 = self._rand_gen("col")
          x1 = self._rand_gen()
          # function
          f_str = "x0 + x0 + x1 + x1 + x0"
          # gradient
          self._assert_grad_equal(f_str, [x0, x1], rtol=1e-2)
  
          # row_vector, matrix
          x0 = self._rand_gen("row")
          x1 = self._rand_gen()
          # function
          f_str = "x0 + x0 + x1 + x1 + x0"
          # gradient
          self._assert_grad_equal(f_str, [x0, x1], rtol=1e-2)
  
          # scalar, row, col and matrix
          x0 = self._rand_gen("scalar")
          x1 = self._rand_gen("row")
          x2 = self._rand_gen("col")
          x3 = self._rand_gen()
          # function
          f_str = "x0 + x1 + x3 * x2 + x0 + be.tanh(x1) + x3"
          # gradient
          self._assert_grad_equal(f_str, [x0, x1, x2, x3], rtol=1e-2)
  
imports: from builtins import zip
  import numpy
  import pprint
  import pytest
  from neon import NervanaObject
  from neon.backends.autodiff import Autodiff
  from utils import allclose_with_out
label_desc: Use image node_id 12 for calling the TestAutodiff obj's underlying member method code with example usage: obj.test_unbroadcast() without return types