code: def c_code(self, node, name, inp, out, sub):
      a, b = inp
      (z,) = out
      debug = 0
      return """
          //printf("executing c_code\\n");
          if (PyArray_NDIM(%(a)s) != 2) {PyErr_SetString(PyExc_NotImplementedError, "rank(a) != 2"); %(fail)s;}
          if (PyArray_NDIM(%(b)s) != 2) {PyErr_SetString(PyExc_NotImplementedError, "rank(b) != 2"); %(fail)s;}
  
          if (PyArray_DESCR(%(a)s)->type_num != NPY_FLOAT)
          {PyErr_SetString(PyExc_NotImplementedError, "a dtype not NPY_FLOAT"); %(fail)s;}
  
          if (PyArray_DESCR(%(b)s)->type_num != NPY_FLOAT)
          {PyErr_SetString(PyExc_NotImplementedError, "b's dtype not NPY_FLOAT"); %(fail)s;}
  
          if (PyArray_DIMS(%(a)s)[0] != PyArray_DIMS(%(a)s)[1])
          {PyErr_SetString(PyExc_NotImplementedError, "a is not square"); %(fail)s;}
  
          if (PyArray_DIMS(%(b)s)[0] != PyArray_DIMS(%(b)s)[1])
          {PyErr_SetString(PyExc_NotImplementedError, "b is not square"); %(fail)s;}
  
          if (PyArray_DIMS(%(a)s)[0] != PyArray_DIMS(%(b)s)[0])
          {PyErr_SetString(PyExc_NotImplementedError, "a and b have different dimensions"); %(fail)s;}
  
          // We do not check for c_contiguous property here
          if (%(debug)s)
          {
              if (!%(z)s)
                  printf("%(z)s is not there, %%p \\n", %(z)s);
              else if (PyArray_DIMS(%(z)s)[0] != PyArray_DIMS(%(b)s)[0])
                  printf("Dimension 0 mismatch for %(z)s and %(b)s\\n");
              else if (PyArray_DIMS(%(z)s)[1] != PyArray_DIMS(%(b)s)[1])
                  printf("Dimension 1 mismatch for %(z)s and %(b)s\\n");
              else
                  printf("Reusing %(z)s\\n");
          }
  
          if ((!%(z)s)
              || (PyArray_DIMS(%(z)s)[0] != PyArray_DIMS(%(b)s)[0])
              || (PyArray_DIMS(%(z)s)[1] != PyArray_DIMS(%(b)s)[1])
              )
          {
              Py_XDECREF(%(z)s);
              npy_intp dims[] = {0, 0};
              dims[0] = PyArray_DIMS(%(b)s)[0];
              dims[1] = PyArray_DIMS(%(b)s)[1];
              %(z)s = (PyArrayObject*) PyArray_SimpleNew(2, dims, PyArray_DESCR(%(b)s)->type_num);
          }
  
          // Let us assume that %(z)s is c_contiguous
          {
              dtype_%(z)s * z = ((dtype_%(z)s*)(PyArray_GETPTR2(%(z)s,0,0)));
              for (int i=0; i<PyArray_DIMS(%(b)s)[0]; i++)
              {
                  for (int j=0; j<PyArray_DIMS(%(b)s)[1]; j++)
                  {
                      *z = ((float*)PyArray_GETPTR2(%(a)s, i, j))[0] +
                           ((float*)PyArray_GETPTR2(%(b)s, i, j))[0] ;
                      z++;
                  }
              }
          }
          """ % dict(
          locals(), **sub
      )
  
imports: from __future__ import absolute_import, print_function, division
  import sys
  import unittest
  from nose.plugins.skip import SkipTest
  import numpy
  from six import reraise
  from theano import config
  from theano import gof
  import theano
  from theano.compat import exc_message
  from theano.compile import debugmode
  import theano.tensor
  from theano.tests import unittest_tools
label_desc: Use image node_id 4 for calling the BrokenCImplementationAdd obj's underlying member method code with example usage: obj.c_code(node, name, inp, out, sub) and returns: unknown