code: def kaiser(M, beta):
      """Return the Kaiser window.
      The Kaiser window is a taper formed by using a Bessel function.
  
      .. math::  w(n) = I_0\\left( \\beta \\sqrt{1-\\frac{4n^2}{(M-1)^2}}
                 \\right)/I_0(\\beta)
  
      with
  
      .. math:: \\quad -\\frac{M-1}{2} \\leq n \\leq \\frac{M-1}{2}
  
      where :math:`I_0` is the modified zeroth-order Bessel function.
  
       Args:
          M (int):
              Number of points in the output window. If zero or less, an empty
              array is returned.
          beta (float):
              Shape parameter for window
  
      Returns:
          ~cupy.ndarray:  The window, with the maximum value normalized to one
          (the value one appears only if the number of samples is odd).
  
      .. seealso:: :func:`numpy.kaiser`
      """
      if M == 1:
          return cupy.array([1.0])
      if M <= 0:
          return cupy.array([])
      alpha = (M - 1) / 2.0
      out = cupy.empty(M, dtype=cupy.float64)
      return _kaiser_kernel(beta, alpha, out)
  
imports: import numpy
  import cupy
  from cupy import _core
label_desc: Use image node_id 5 for calling a global function with example usage: kaiser(M, beta) and returns: _kaiser_kernel, cupy, cupy