code: def _prep_polyphase(ratio, x_len, final_len, window):
      if isinstance(window, str) and window == "auto":
          window = ("kaiser", 5.0)  # SciPy default
      up = final_len
      down = x_len
      g_ = gcd(up, down)
      up = up // g_
      down = down // g_
      # Figure out our signal neighborhood and design window (adapted from SciPy)
      if not isinstance(window, (list, np.ndarray)):
          # Design a linear-phase low-pass FIR filter
          max_rate = max(up, down)
          f_c = 1.0 / max_rate  # cutoff of FIR filter (rel. to Nyquist)
          half_len = (
              10 * max_rate
          )  # reasonable cutoff for sinc-like function
          window = signal.firwin(2 * half_len + 1, f_c, window=window)
      return up, down, window
  
imports: from collections import Counter
  from copy import deepcopy
  from functools import partial
  from math import gcd
  import numpy
  from scipy import fft, signal
  from scipy.stats import f
  from ._fiff.pick import _picks_to_idx
  from ._ola import _COLA
  from .cuda import _fft_multiply_repeated, _fft_resample, _setup_cuda_fft_multiply_repeated, _setup_cuda_fft_resample, _smart_pad
  from .parallel import parallel_func
  from .utils import _check_option, _check_preload, _ensure_int, _pl, _validate_type, logger, sum_squared, verbose, warn
label_desc: Use image node_id 25 for calling a global function with example usage: _prep_polyphase(ratio, x_len, final_len, window) and returns: up,  down,  window