text: # coding=utf-8
  # Copyright 2022 The Google Research Authors.
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  
  """Main file for running audio experiments."""
  
  from absl import app
  from absl import flags
  from absl import logging
  from clu import platform
  import jax
  from ml_collections import config_flags
  import tensorflow as tf
  from autoregressive_diffusion.experiments.audio import train
  
  
  flags.DEFINE_string('experiment_dir', None, 'Experiment output directory.')
  flags.DEFINE_string('executable_name', None, 'Executable name.')
  flags.DEFINE_string('work_unit_dir', None, 'Directory to store model data.')
  
  config_flags.DEFINE_config_file(
      'config',
      None,
      'File path to the training hyperparameter configuration.',
      lock_config=False)
  
  flags.mark_flags_as_required(['config', 'work_unit_dir'])
  
  FLAGS = flags.FLAGS
  
  
  def main(argv):
    if len(argv) > 1:
      raise app.UsageError('Too many command-line arguments.')
  
    # Hide any GPUs form TensorFlow. Otherwise TF might reserve memory and make
    # it unavailable to JAX.
    tf.config.experimental.set_visible_devices([], 'GPU')
  
    logging.info('JAX process: %d / %d', jax.process_index(), jax.process_count())
    logging.info('JAX local devices: %r', jax.local_devices())
  
    # Add a note so that we can tell which task is which JAX host.
    # (Depending on the platform task 0 is not guaranteed to be host 0)
    platform.work_unit().set_task_status(f'process_index: {jax.process_index()}, '
                                         f'process_count: {jax.process_count()}')
    platform.work_unit().create_artifact(platform.ArtifactType.DIRECTORY,
                                         FLAGS.work_unit_dir, 'work_unit_dir')
  
    run_fn = getattr(train, FLAGS.executable_name)
    run_fn(FLAGS.config, FLAGS.work_unit_dir)
  
  
  if __name__ == '__main__':
    app.run(main)
  