class_docstr: Concrete class for homomorphism with domain a submodule of a free module
  or a quotient thereof.
  
  Do not instantiate; the constructor does not check that your data is well
  defined. Use the ``homomorphism`` function instead:
  
  >>> from sympy import QQ
  >>> from sympy.abc import x
  >>> from sympy.polys.agca import homomorphism
  
  >>> M = QQ.old_poly_ring(x).free_module(2)*x
  >>> homomorphism(M, M, [[1, 0], [0, 1]])
  Matrix([
  [1, 0], : <[x, 0], [0, x]> -> <[x, 0], [0, x]>
  [0, 1]])
class_docstr_tok: ["Concrete","class","for","homomorphism","with","domain","a","submodule","of","a","free","module","or","a","quotient","thereof",".","Do","not","instantiate",";","the","constructor","does","not","check","that","your","data","is","well","defined",".","Use","the","``","homomorphism","``","function","instead",":",">",">",">","from","sympy","import","QQ",">",">",">","from","sympy.abc","import","x",">",">",">","from","sympy.polys.agca","import","homomorphism",">",">",">","M","=","QQ.old_poly_ring","(","x",")",".free_module","(","2",")","*","x",">",">",">","homomorphism","(","M",",","M",",","[","[","1",",","0","]",",","[","0",",","1","]","]",")","Matrix","(","[","[","1",",","0","]",",",":","<","[","x",",","0","]",",","[","0",",","x","]",">","-",">","<","[","x",",","0","]",",","[","0",",","x","]",">","[","0",",","1","]","]",")"]
code: def _kernel(self):
      syz = self.image().syzygy_module()
      return self.domain.submodule(
          *[
              sum(xi * gi for xi, gi in zip(s, self.domain.gens))
              for s in syz.gens
          ]
      )
  
imports: from sympy.polys.agca.modules import Module, FreeModule, QuotientModule, SubModule, SubQuotientModule
  from sympy.polys.polyerrors import CoercionFailed
label_desc: Use image node_id 3 for calling the SubModuleHomomorphism obj's underlying member method code with example usage: obj._kernel() and returns: self