code: def tril(m, k=0):
      """
      Lower triangle of an array.
  
      Return a copy of an array with elements above the `k`-th diagonal zeroed.
  
      Parameters
      ----------
      m : array_like, shape (M, N)
          Input array.
      k : int, optional
          Diagonal above which to zero elements.  `k = 0` (the default) is the
          main diagonal, `k < 0` is below it and `k > 0` is above.
  
      Returns
      -------
      tril : ndarray, shape (M, N)
          Lower triangle of `m`, of same shape and data-type as `m`.
  
      See Also
      --------
      triu : same thing, only for the upper triangle
  
      Examples
      --------
      >>> np.tril([[1,2,3],[4,5,6],[7,8,9],[10,11,12]], -1)
      array([[ 0,  0,  0],
             [ 4,  0,  0],
             [ 7,  8,  0],
             [10, 11, 12]])
  
      """
      m = asanyarray(m)
      mask = tri(*m.shape[-2:], k=k, dtype=bool)
  
      return where(mask, m, zeros(1, m.dtype))
  
imports: from __future__ import division, absolute_import, print_function
  import functools
  from numpy.core.numeric import absolute, asanyarray, arange, zeros, greater_equal, multiply, ones, asarray, where, int8, int16, int32, int64, empty, promote_types, diagonal, nonzero
  from numpy.core.overrides import set_module
  from numpy.core import overrides
  from numpy.core import iinfo, transpose
label_desc: Use image node_id 11 for calling a global function with example usage: tril(m, k) and returns: where