code: def start(
      ctx: typer.Context,
      name: str,
      # arguments with default parameters
      master_machine_type: Ann[
          str, Opt("--master-machine-type", "--master", "-m")
      ] = "n1-highmem-8",
      master_memory_fraction: Ann[
          float,
          Opt(
              help="Fraction of master memory allocated to the JVM. Use a smaller value to reserve more memory for Python."
          ),
      ] = 0.9,
      master_boot_disk_size: Ann[
          int, Opt(help="Disk size of master machine, in GB")
      ] = 100,
      num_master_local_ssds: Ann[
          int,
          Opt(
              help="Number of local SSDs to attach to the master machine."
          ),
      ] = 0,
      num_secondary_workers: NumSecondaryWorkersOption = 0,
      num_worker_local_ssds: Ann[
          int,
          Opt(
              help="Number of local SSDs to attach to each worker machine."
          ),
      ] = 0,
      num_workers: NumWorkersOption = 2,
      secondary_worker_boot_disk_size: Ann[
          int,
          Opt(
              "--secondary-worker-boot-disk-size",
              "--preemptible-worker-boot-disk-size",
              help="Disk size of secondary (preemptible) worker machines, in GB.",
          ),
      ] = 40,
      worker_boot_disk_size: Ann[
          int, Opt(help="Disk size of worker machines, in GB.")
      ] = 40,
      worker_machine_type: Ann[
          Optional[str],
          Opt(
              "--worker-machine-type",
              "--worker",
              help="Worker machine type (default: n1-standard-8, or n1-highmem-8 with --vep).",
          ),
      ] = None,
      region: Ann[
          Optional[str], Opt(help="Compute region for the cluster.")
      ] = None,
      zone: ZoneOption = None,
      properties: Ann[
          Optional[str],
          Opt(
              help="Additional configuration properties for the cluster."
          ),
      ] = None,
      metadata: Ann[
          Optional[str],
          Opt(
              help="Comma-separated list of metadata to add: KEY1=VALUE1,KEY2=VALUE2"
          ),
      ] = None,
      packages: Ann[
          Optional[str],
          Opt(
              "--packages",
              "--pkgs",
              help="Comma-separated list of Python packages to be installed on the master node.",
          ),
      ] = None,
      project: Ann[
          Optional[str],
          Opt(
              help="GCP project to start cluster (defaults to currently set project)."
          ),
      ] = None,
      configuration: Ann[
          Optional[str],
          Opt(
              help="Google Cloud configuration to start cluster (defaults to currently set configuration)."
          ),
      ] = None,
      max_idle: Ann[
          Optional[str],
          Opt(
              help="If specified, maximum idle time before shutdown (e.g. 60m)."
          ),
      ] = None,
      expiration_time: Ann[
          Optional[str],
          Opt(
              help="If specified, time at which cluster is shutdown (e.g. 2020-01-01T00:00:00Z)."
          ),
      ] = None,
      max_age: Ann[
          Optional[str],
          Opt(
              help="If specified, maximum age before shutdown (e.g. 60m)."
          ),
      ] = None,
      bucket: Ann[
          Optional[str],
          Opt(
              help="The Google Cloud Storage bucket to use for cluster temporary storage (just the bucket name, no gs:// prefix)."
          ),
      ] = None,
      temp_bucket: Ann[
          Optional[str],
          Opt(
              help="The Google Cloud Storage bucket to use for cluster temporary storage (just the bucket name, no gs:// prefix)."
          ),
      ] = None,
      network: Ann[
          Optional[str],
          Opt(help="The network for all nodes in this cluster."),
      ] = None,
      subnet: Ann[
          Optional[str],
          Opt(help="The subnet for all nodes in this cluster."),
      ] = None,
      service_account: Ann[
          Optional[str],
          Opt(
              help="The Google Service Account to use for cluster creation (default to the Compute Engine service account)."
          ),
      ] = None,
      master_tags: Ann[
          Optional[str],
          Opt(
              help="Comma-separated list of instance tags to apply to the master node"
          ),
      ] = None,
      scopes: Ann[
          Optional[str],
          Opt(help="Specifies access scopes for the node instances"),
      ] = None,
      wheel: Ann[
          Optional[str],
          Opt(
              help="Non-default Hail installation. Warning: experimental."
          ),
      ] = None,
      # initialization action flags
      init: Ann[
          str, Opt(help="Comma-separated list of init scripts to run.")
      ] = "",
      init_timeout: Ann[
          str,
          Opt(
              "--init_timeout",
              help="Flag to specify a timeout period for the initialization action",
          ),
      ] = "20m",
      vep: Ann[
          Optional[VepVersion],
          Opt(help="Install VEP for the specified reference genome."),
      ] = None,
      dry_run: DryRunOption = False,
      no_off_heap_memory: Ann[
          bool,
          Opt(
              "--no-off-heap-memory",
              help="Don't partition JVM memory between hail heap and JVM heap",
          ),
      ] = False,
      big_executors: Ann[
          bool,
          Opt(
              help="Double memory allocated per executor, using half the cores of the cluster with an extra large memory allotment per core."
          ),
      ] = False,
      off_heap_memory_fraction: Ann[
          float,
          Opt(
              help="Minimum fraction of worker memory dedicated to off-heap Hail values."
          ),
      ] = 0.6,
      off_heap_memory_hard_limit: Ann[
          bool,
          Opt(
              help="Limit off-heap allocations to the dedicated fraction"
          ),
      ] = False,
      yarn_memory_fraction: Ann[
          float,
          Opt(
              help="Fraction of machine memory to allocate to the yarn container scheduler."
          ),
      ] = 0.95,
      # requester pays
      requester_pays_allow_all: Ann[
          bool,
          Opt(help="Allow reading from all requester-pays buckets."),
      ] = False,
      requester_pays_allow_buckets: Ann[
          Optional[str],
          Opt(
              help="Comma-separated list of requester-pays buckets to allow reading from."
          ),
      ] = None,
      requester_pays_allow_annotation_db: Ann[
          bool,
          Opt(
              help="Allows reading from any of the requester-pays buckets that hold data for the annotation database."
          ),
      ] = False,
      debug_mode: Ann[
          bool,
          Opt(
              help="Enable debug features on created cluster (heap dump on out-of-memory error)"
          ),
      ] = False,
  ):
      """
      Start a Dataproc cluster configured for Hail.
      """
      assert num_secondary_workers is not None
      assert num_workers is not None
  
      dataproc_start(
          name,
          ctx.args,
          master_machine_type,
          master_memory_fraction,
          master_boot_disk_size,
          num_master_local_ssds,
          num_secondary_workers,
          num_worker_local_ssds,
          num_workers,
          secondary_worker_boot_disk_size,
          worker_boot_disk_size,
          worker_machine_type,
          region,
          zone,
          properties,
          metadata,
          packages,
          project,
          configuration,
          max_idle,
          expiration_time,
          max_age,
          bucket,
          temp_bucket,
          network,
          subnet,
          service_account,
          master_tags,
          scopes,
          wheel,
          init,
          init_timeout,
          vep,
          dry_run,
          no_off_heap_memory,
          big_executors,
          off_heap_memory_fraction,
          off_heap_memory_hard_limit,
          yarn_memory_fraction,
          requester_pays_allow_all,
          requester_pays_allow_buckets,
          requester_pays_allow_annotation_db,
          debug_mode,
          use_gcloud_beta,
      )
  
file_path: hail/hail/python/hailtop/hailctl/dataproc/cli.py
imports: import sys
  import typer
  from typer import Option, Argument
  from typing import List, Optional, Annotated
  from .connect import connect, DataprocConnectService
  from .submit import submit
  from .diagnose import diagnose
  from .modify import modify
  from .start import start, VepVersion
  from ..describe import describe
  from .None import gcloud
label_desc: Use image node_id 2 for calling a global function with example usage: start(ctx, name, master_machine_type, master_memory_fraction, master_boot_disk_size, num_master_local_ssds, num_secondary_workers, num_worker_local_ssds, num_workers, secondary_worker_boot_disk_size, worker_boot_disk_size, worker_machine_type, region, zone, properties, metadata, packages, project, configuration, max_idle, expiration_time, max_age, bucket, temp_bucket, network, subnet, service_account, master_tags, scopes, wheel, init, init_timeout, vep, dry_run, no_off_heap_memory, big_executors, off_heap_memory_fraction, off_heap_memory_hard_limit, yarn_memory_fraction, requester_pays_allow_all, requester_pays_allow_buckets, requester_pays_allow_annotation_db, debug_mode) without return types