code: def _parse_uri(self, uri: str) -> Tuple[str, str, Optional[str]]:
      url = urlparse(uri)
      query = dict(parse_qsl(url.query))
  
      bucket = url.netloc
      key = url.path[1:]  # strip leading slash
      version = query.get("versionId")
  
      return bucket, key, version
  
imports: import os
  import time
  from pathlib import PurePosixPath
  from typing import TYPE_CHECKING, Dict, Optional, Sequence, Tuple, Union
  from urllib.parse import parse_qsl, urlparse
  from wandb import util
  from wandb.errors import CommError
  from wandb.errors.term import termlog
  from wandb.sdk.artifacts.artifact_file_cache import get_artifact_file_cache
  from wandb.sdk.artifacts.artifact_manifest_entry import ArtifactManifestEntry
  from wandb.sdk.artifacts.storage_handler import DEFAULT_MAX_OBJECTS, StorageHandler
  from wandb.sdk.lib.hashutil import ETag
  from wandb.sdk.lib.paths import FilePathStr, StrPath, URIStr
label_desc: Use image node_id 4 for calling the S3Handler obj's underlying member method code with example usage: obj._parse_uri(uri) and returns: bucket,  key,  version