code: def calculate_acl(data, m=5, dtype=int):
      r
  
      # sanity check output data type
      if dtype not in [int, float]:
          raise ValueError("The dtype must be either int or float.")
  
      # if we have only a single point, just return 1
      if len(data) < 2:
          return 1
  
      # calculate ACF that is normalized by the zero-lag value
      acf = calculate_acf(data)
  
      cacf = 2 * acf.numpy().cumsum() - 1
      win = m * cacf <= numpy.arange(len(cacf))
      if win.any():
          acl = cacf[numpy.where(win)[0][0]]
          if dtype == int:
              acl = int(numpy.ceil(acl))
      else:
          acl = numpy.inf
      return acl
docs: r"""Calculates the autocorrelation length (ACL).
  
      Given a normalized autocorrelation function :math:`\rho[i]` (by normalized,
      we mean that :math:`\rho[0] = 1`), the ACL :math:`\tau` is:
  
      .. math::
  
          \tau = 1 + 2 \sum_{i=1}^{K} \rho[i].
  
      The number of samples used :math:`K` is found by using the first point
      such that:
  
      .. math::
  
          m \tau[K] \leq K,
  
      where :math:`m` is a tuneable parameter (default = 5). If no such point
      exists, then the given data set it too short to estimate the ACL; in this
      case ``inf`` is returned.
  
      This algorithm for computing the ACL is taken from:
  
      N. Madras and A.D. Sokal, J. Stat. Phys. 50, 109 (1988).
  
      Parameters
      -----------
      data : TimeSeries or array
          A TimeSeries of data.
      m : int
          The number of autocorrelation lengths to use for determining the window
          size :math:`K` (see above).
      dtype : int or float
          The datatype of the output. If the dtype was set to int, then the
          ceiling is returned.
  
      Returns
      -------
      acl : int or float
          The autocorrelation length. If the ACL cannot be estimated, returns
          ``numpy.inf``.