code: def tri(N, M=None, k=0, dtype=float, *, like=None):
      """
      An array with ones at and below the given diagonal and zeros elsewhere.
  
      Parameters
      ----------
      N : int
          Number of rows in the array.
      M : int, optional
          Number of columns in the array.
          By default, `M` is taken equal to `N`.
      k : int, optional
          The sub-diagonal at and below which the array is filled.
          `k` = 0 is the main diagonal, while `k` < 0 is below it,
          and `k` > 0 is above.  The default is 0.
      dtype : dtype, optional
          Data type of the returned array.  The default is float.
      ${ARRAY_FUNCTION_LIKE}
  
          .. versionadded:: 1.20.0
  
      Returns
      -------
      tri : ndarray of shape (N, M)
          Array with its lower triangle filled with ones and zero elsewhere;
          in other words ``T[i,j] == 1`` for ``j <= i + k``, 0 otherwise.
  
      Examples
      --------
      >>> np.tri(3, 5, 2, dtype=int)
      array([[1, 1, 1, 0, 0],
             [1, 1, 1, 1, 0],
             [1, 1, 1, 1, 1]])
  
      >>> np.tri(3, 5, -1)
      array([[0.,  0.,  0.,  0.,  0.],
             [1.,  0.,  0.,  0.,  0.],
             [1.,  1.,  0.,  0.,  0.]])
  
      """
      if like is not None:
          return _tri_with_like(like, N, M=M, k=k, dtype=dtype)
  
      if M is None:
          M = N
  
      m = greater_equal.outer(
          arange(N, dtype=_min_int(0, N)),
          arange(-k, M - k, dtype=_min_int(-k, M - k)),
      )
  
      # Avoid making a copy if the requested type is already bool
      m = m.astype(dtype, copy=False)
  
      return m
  
imports: import functools
  import operator
  from numpy._core.numeric import asanyarray, arange, zeros, greater_equal, multiply, ones, asarray, where, int8, int16, int32, int64, intp, empty, promote_types, diagonal, nonzero, indices
  from numpy._core.overrides import set_array_function_like_doc, set_module
  from numpy._core import overrides
  from numpy._core import iinfo
  from numpy.lib._stride_tricks_impl import broadcast_to
label_desc: Use image node_id 9 for calling a global function with example usage: tri(N, M, k, dtype) and returns: m, _tri_with_like