


"""simple docstring"""


import importlib
import sys
from argparse import REMAINDER, ArgumentParser
from pathlib import Path

import torch_xla.distributed.xla_multiprocessing as xmp


def _lowerCamelCase			(	):

			'''simple docstring'''




			__lowerCAmelCase       					=    ArgumentParser(
			    description=(
			        "PyTorch TPU distributed training launch helper utility that will spawn up multiple distributed processes"
			    )   )

			# Optional arguments for the launch helper
			parser.add_argument("--num_cores"					,				type=_UpperCamelCase					,				default=1					,				help="Number of TPU cores to use (1 or 8)."   )

			# positional
			parser.add_argument(
			    "training_script"					,				type=_UpperCamelCase					,				help=(
			        "The full path to the single TPU training "
			        "program/script to be launched in parallel, "
			        "followed by all the arguments for the "
			        "training script"
			    )					,				)

			# rest from the training program
			parser.add_argument("training_script_args"					,				nargs=_UpperCamelCase   )

			return parser.parse_args()


def _lowerCamelCase			(	):

			'''simple docstring'''




			__lowerCAmelCase       					=    parse_args()

			# Import training_script as a module.
			__lowerCAmelCase       					=    Path(args.training_script   )
			sys.path.append(str(script_fpath.parent.resolve()   )   )
			__lowerCAmelCase       					=    script_fpath.stem
			__lowerCAmelCase       					=    importlib.import_module(_UpperCamelCase   )

			# Patch sys.argv
			__lowerCAmelCase       					=    [args.training_script] + args.training_script_args + ["--tpu_num_cores", str(args.num_cores   )]

			xmp.spawn(mod._mp_fn					,				args=()					,				nprocs=args.num_cores   )


if __name__ == "__main__":
	main()








"""simple docstring"""


import flax.linen as nn
import jax
import jax.numpy as jnp
class 						_UpperCamelCase						(     nn.Module	):
							'''simple docstring'''







							__UpperCAmelCase		:					int
							__UpperCAmelCase		:					jnp.dtype          =jnp.floataa

							def     snake_case       (  self			):
										__lowerCAmelCase       					=    nn.Conv(
										    self.out_channels					,     kernel_size=(3, 3)					,     strides=(1, 1)					,     padding=((1, 1), (1, 1))					,     dtype=self.dtype					,     )



							def __call__(  self					,     __a			):
										__lowerCAmelCase					,			__lowerCAmelCase					,			__lowerCAmelCase					,			__lowerCAmelCase       					=    hidden_states.shape
										__lowerCAmelCase       					=    jax.image.resize(
										    __a					,     shape=(batch, height * 2, width * 2, channels)					,     method="nearest"					,     )
										__lowerCAmelCase       					=    self.conv(__a			)
										return hidden_states
class 						_UpperCamelCase						(     nn.Module	):
							'''simple docstring'''







							__UpperCAmelCase		:					int
							__UpperCAmelCase		:					jnp.dtype          =jnp.floataa

							def     snake_case       (  self			):
										__lowerCAmelCase       					=    nn.Conv(
										    self.out_channels					,     kernel_size=(3, 3)					,     strides=(2, 2)					,     padding=((1, 1), (1, 1))					,     dtype=self.dtype					,     )



							def __call__(  self					,     __a			):
										# pad = ((0, 0), (0, 1), (0, 1), (0, 0))  # pad height and width dim
										# hidden_states = jnp.pad(hidden_states, pad_width=pad)
										__lowerCAmelCase       					=    self.conv(__a			)
										return hidden_states
class 						_UpperCamelCase						(     nn.Module	):
							'''simple docstring'''







							__UpperCAmelCase		:					int
							__UpperCAmelCase		:					int          =None
							__UpperCAmelCase		:					float          =0.0
							__UpperCAmelCase		:					bool          =None
							__UpperCAmelCase		:					jnp.dtype          =jnp.floataa

							def     snake_case       (  self			):
										__lowerCAmelCase       					=    self.in_channels if self.out_channels is None else self.out_channels

										__lowerCAmelCase       					=    nn.GroupNorm(num_groups=32					,     epsilon=1e-5			)
										__lowerCAmelCase       					=    nn.Conv(
										    __a					,     kernel_size=(3, 3)					,     strides=(1, 1)					,     padding=((1, 1), (1, 1))					,     dtype=self.dtype					,     )

										__lowerCAmelCase       					=    nn.Dense(__a					,     dtype=self.dtype			)

										__lowerCAmelCase       					=    nn.GroupNorm(num_groups=32					,     epsilon=1e-5			)
										__lowerCAmelCase       					=    nn.Dropout(self.dropout_prob			)
										__lowerCAmelCase       					=    nn.Conv(
										    __a					,     kernel_size=(3, 3)					,     strides=(1, 1)					,     padding=((1, 1), (1, 1))					,     dtype=self.dtype					,     )

										__lowerCAmelCase       					=    self.in_channels != out_channels if self.use_nin_shortcut is None else self.use_nin_shortcut

										__lowerCAmelCase       					=    None
										if use_nin_shortcut:
													__lowerCAmelCase       					=    nn.Conv(
													    __a					,     kernel_size=(1, 1)					,     strides=(1, 1)					,     padding="VALID"					,     dtype=self.dtype					,     )



							def __call__(  self					,     __a					,     __a					,     __a=True			):
										__lowerCAmelCase       					=    hidden_states
										__lowerCAmelCase       					=    self.norma(__a			)
										__lowerCAmelCase       					=    nn.swish(__a			)
										__lowerCAmelCase       					=    self.conva(__a			)

										__lowerCAmelCase       					=    self.time_emb_proj(nn.swish(__a			)			)
										__lowerCAmelCase       					=    jnp.expand_dims(jnp.expand_dims(__a					,     1			)					,     1			)
										__lowerCAmelCase       					=    hidden_states + temb

										__lowerCAmelCase       					=    self.norma(__a			)
										__lowerCAmelCase       					=    nn.swish(__a			)
										__lowerCAmelCase       					=    self.dropout(__a					,     __a			)
										__lowerCAmelCase       					=    self.conva(__a			)

										if self.conv_shortcut is not None:
													__lowerCAmelCase       					=    self.conv_shortcut(__a			)

										return hidden_states + residual




