code: def parse_wheels_filename(
      filename: str,
  ) -> Tuple[Optional[str], Optional[Tuple[int, int]]]:
      """Parse filename and return Ray version + python version"""
      matched = re.search(
          r"ray-([0-9a-z\.]+)-cp([0-9]{2,3})-cp([0-9]{2,3})m?-manylinux2014_x86_64\.whl$",
          filename,
      )
      if not matched:
          return None, None
  
      ray_version = matched.group(1)
      py_version_str = matched.group(2)
  
      try:
          python_version = parse_python_version(py_version_str)
      except Exception:
          return ray_version, None
  
      return ray_version, python_version
  
imports: import importlib
  import os
  import re
  import shlex
  import subprocess
  import sys
  from datetime import datetime
  import tempfile
  import time
  import urllib.request
  from typing import Optional, List, Tuple
  from ray_release.config import parse_python_version
  from ray_release.test import DEFAULT_PYTHON_VERSION
  from ray_release.template import set_test_env_var
  from ray_release.exception import RayWheelsUnspecifiedError, RayWheelsNotFoundError, RayWheelsTimeoutError, ReleaseTestSetupError
  from ray_release.logger import logger
  from ray_release.util import url_exists, python_version_str, resolve_url
  from ray_release.aws import upload_to_s3
label_desc: Use image node_id 4 for calling a global function with example usage: parse_wheels_filename(filename) and returns: ray_version,  python_version, None,  None, ray_version,  None