code: def process_joint(args):
      cur_root = Path(args.data_root)
      assert all(
          (cur_root / f"en-{lang}").is_dir() for lang in MUSTC.LANGUAGES
      ), "do not have downloaded data available for all 8 languages"
      # Generate vocab
      vocab_size_str = (
          "" if args.vocab_type == "char" else str(args.vocab_size)
      )
      spm_filename_prefix = (
          f"spm_{args.vocab_type}{vocab_size_str}_{args.task}"
      )
      with NamedTemporaryFile(mode="w") as f:
          for lang in MUSTC.LANGUAGES:
              tsv_path = (
                  cur_root / f"en-{lang}" / f"train_{args.task}.tsv"
              )
              df = load_df_from_tsv(tsv_path)
              for t in df["tgt_text"]:
                  f.write(t + "\n")
          special_symbols = None
          if args.task == "st":
              special_symbols = [
                  f"<lang:{lang}>" for lang in MUSTC.LANGUAGES
              ]
          gen_vocab(
              Path(f.name),
              cur_root / spm_filename_prefix,
              args.vocab_type,
              args.vocab_size,
              special_symbols=special_symbols,
          )
      # Generate config YAML
      gen_config_yaml(
          cur_root,
          spm_filename=spm_filename_prefix + ".model",
          yaml_filename=f"config_{args.task}.yaml",
          specaugment_policy="ld",
          prepend_tgt_lang_tag=(args.task == "st"),
      )
      # Make symbolic links to manifests
      for lang in MUSTC.LANGUAGES:
          for split in MUSTC.SPLITS:
              src_path = (
                  cur_root / f"en-{lang}" / f"{split}_{args.task}.tsv"
              )
              desc_path = cur_root / f"{split}_{lang}_{args.task}.tsv"
              if not desc_path.is_symlink():
                  os.symlink(src_path, desc_path)
  
imports: import argparse
  import logging
  import os
  from pathlib import Path
  import shutil
  from itertools import groupby
  from tempfile import NamedTemporaryFile
  from typing import Tuple
  import numpy
  import pandas
  import soundfile
  from examples.speech_to_text.data_utils import create_zip, extract_fbank_features, filter_manifest_df, gen_config_yaml, gen_vocab, get_zip_manifest, load_df_from_tsv, save_df_to_tsv, cal_gcmvn_stats
  import torch
  from torch.utils.data import Dataset
  from tqdm import tqdm
  from fairseq.data.audio.audio_utils import get_waveform, convert_waveform
label_desc: Use image node_id 2 for calling a global function with example usage: process_joint(args) without return types