class_docstr: Don't peform any test, but provide the function to test the
  Rop to class that inherit from it.
docstr: Test the Rop/Lop when input is a matrix and the output is a vector
  
  :param y: the output variable of the op applied to self.mx
  :param out_shape: Used to generate a random tensor
                    corresponding to the evaluation point of the Rop
                    (i.e. the tensor with which you multiply the
                    Jacobian). It should be a tuple of ints.
  
  If the Op has more than 1 input, one of them must be mx, while
  others must be shared variables / constants. We will test only
  against the input self.mx, so you must call
  check_mat_rop_lop/check_rop_lop for the other inputs.
  
  We expect all inputs/outputs have dtype floatX.
  
  If you want to test an Op with an output matrix, add a sum
  after the Op you want to test.
docstr_tok: ["Test","the","Rop\/Lop","when","input","is","a","matrix","and","the","output","is","a","vector",":","param","y",":","the","output","variable","of","the","op","applied","to","self.mx",":","param","out_shape",":","Used","to","generate","a","random","tensor","corresponding","to","the","evaluation","point","of","the","Rop","(","i.e",".","the","tensor","with","which","you","multiply","the","Jacobian",")",".","It","should","be","a","tuple","of","ints",".","If","the","Op","has","more","than","1","input",",","one","of","them","must","be","mx",",","while","others","must","be","shared","variables","\/","constants",".","We","will","test","only","against","the","input","self.mx",",","so","you","must","call","check_mat_rop_lop\/check_rop_lop","for","the","other","inputs",".","We","expect","all","inputs\/outputs","have","dtype","floatX",".","If","you","want","to","test","an","Op","with","an","output","matrix",",","add","a","sum","after","the","Op","you","want","to","test","."]
code: def check_mat_rop_lop(self, y, out_shape):
      """
      Test the Rop/Lop when input is a matrix and the output is a vector
  
      :param y: the output variable of the op applied to self.mx
      :param out_shape: Used to generate a random tensor
                        corresponding to the evaluation point of the Rop
                        (i.e. the tensor with which you multiply the
                        Jacobian). It should be a tuple of ints.
  
      If the Op has more than 1 input, one of them must be mx, while
      others must be shared variables / constants. We will test only
      against the input self.mx, so you must call
      check_mat_rop_lop/check_rop_lop for the other inputs.
  
      We expect all inputs/outputs have dtype floatX.
  
      If you want to test an Op with an output matrix, add a sum
      after the Op you want to test.
      """
      vx = np.asarray(
          self.rng.uniform(size=self.mat_in_shape), theano.config.floatX
      )
      vv = np.asarray(
          self.rng.uniform(size=self.mat_in_shape), theano.config.floatX
      )
      yv = tensor.Rop(y, self.mx, self.mv)
      rop_f = function([self.mx, self.mv], yv, on_unused_input="ignore")
      sy, _ = theano.scan(
          lambda i, y, x, v: (tensor.grad(y[i], x) * v).sum(),
          sequences=tensor.arange(y.shape[0]),
          non_sequences=[y, self.mx, self.mv],
      )
      scan_f = function(
          [self.mx, self.mv], sy, on_unused_input="ignore"
      )
  
      v1 = rop_f(vx, vv)
      v2 = scan_f(vx, vv)
  
      assert np.allclose(v1, v2), "ROP mismatch: %s %s" % (v1, v2)
  
      self.check_nondiff_rop(
          theano.clone(y, replace={self.mx: break_op(self.mx)})
      )
  
      vv = np.asarray(
          self.rng.uniform(size=out_shape), theano.config.floatX
      )
      yv = tensor.Lop(y, self.mx, self.v)
      lop_f = function([self.mx, self.v], yv)
  
      sy = tensor.grad((self.v * y).sum(), self.mx)
      scan_f = function([self.mx, self.v], sy)
  
      v1 = lop_f(vx, vv)
      v2 = scan_f(vx, vv)
      assert np.allclose(v1, v2), "LOP mismatch: %s %s" % (v1, v2)
  
imports: from __future__ import absolute_import, print_function, division
  import unittest
  from theano.tests import unittest_tools
  from theano import function
  import theano
  from theano import tensor
  import itertools
  import numpy
  from theano.gof import Op, Apply
  from theano.gradient import grad_undefined
  from theano.tests.unittest_tools import SkipTest
  from theano.tensor.signal.pool import Pool
  from theano.tensor.nnet import conv, conv2d
label_desc: Use image node_id 3 for calling the RopLop_checker obj's underlying member method code with example usage: obj.check_mat_rop_lop(y, out_shape) without return types