

"""simple docstring"""






from typing import List, Optional, Tuple, Union

from . import logging
from .import_utils import is_torch_available, is_torch_version


if is_torch_available():
						import torch

lowerCamelCase__				:  str													=  logging.get_logger(__name__)  # pylint: disable=invalid-name

try:
						from torch._dynamo import allow_in_graph as maybe_allow_in_graph
except (ImportError, ModuleNotFoundError):
						def       UpperCamelCase					(			cls     :						Union[str, Any] )				->			Optional[int]:
							return cls
def       UpperCamelCase					(			_lowerCAmelCase     :						Union[Tuple, List],  _lowerCAmelCase     :						Optional[Union[List["torch.Generator"], "torch.Generator"]] = None,  _lowerCAmelCase     :						Optional["torch.device"] = None,  _lowerCAmelCase     :						Optional["torch.dtype"] = None,  _lowerCAmelCase     :						Optional["torch.layout"] = None,  )				->			List[str]:
	_UpperCAmelCase    :							Optional[Any]									=					device
	_UpperCAmelCase    :							Dict									=					shape[0]

	_UpperCAmelCase    :							List[str]									=					layout or torch.strided
	_UpperCAmelCase    :							Any									=					device or torch.device("""cpu""" )

	if generator is not None:
		_UpperCAmelCase    :							List[str]									=					generator.device.type if not isinstance(_lowerCAmelCase,  _lowerCAmelCase ) else generator[0].device.type
		if gen_device_type != device.type and gen_device_type == "cpu":
			_UpperCAmelCase    :							Union[str, Any]									=					"""cpu"""
			if device != "mps":
				logger.info(
				    f'''The passed generator was created on \'cpu\' even though a tensor on {device} was expected.'''
				    f''' Tensors will be created on \'cpu\' and then moved to {device}. Note that one can probably'''
				    f''' slighly speed up this function by passing a generator that was created on the {device} device.''' )
		elif gen_device_type != device.type and gen_device_type == "cuda":
			raise ValueError(f'''Cannot generate a {device} tensor from a generator of type {gen_device_type}.''' )

	if isinstance(_lowerCAmelCase,  _lowerCAmelCase ):
		_UpperCAmelCase    :							List[Any]									=					(1,) + shape[1:]
		_UpperCAmelCase    :							int									=					[
		    torch.randn(_lowerCAmelCase,  generator=generator[i],  device=_lowerCAmelCase,  dtype=_lowerCAmelCase,  layout=_lowerCAmelCase )
		    for i in range(_lowerCAmelCase )
		]
		_UpperCAmelCase    :							Optional[Any]									=					torch.cat(_lowerCAmelCase,  dim=0 ).to(_lowerCAmelCase )
	else:
		_UpperCAmelCase    :							int									=					torch.randn(_lowerCAmelCase,  generator=_lowerCAmelCase,  device=_lowerCAmelCase,  dtype=_lowerCAmelCase,  layout=_lowerCAmelCase ).to(_lowerCAmelCase )

	return latents





def       UpperCamelCase					(			_lowerCAmelCase     :						int )				->			Any:
	if is_torch_version("""<""",  """2.0.0""" ) or not hasattr(_lowerCAmelCase,  """_dynamo""" ):
		return False
	return isinstance(_lowerCAmelCase,  torch._dynamo.eval_frame.OptimizedModule )








"""simple docstring"""






import safs






class     _UpperCAmelCase			(		safs.SaFileSystem):
			pass





