code: def random_normal(
      *,
      mean: Union[float, torch.Tensor] = 0.0,
      std: Union[float, torch.Tensor] = 1.0,
      shape: Optional[Union[ivy.NativeShape, Sequence[int]]] = None,
      dtype: torch.dtype,
      seed: Optional[int] = None,
      device: torch.device = None,
      out: Optional[torch.Tensor] = None,
  ) -> torch.Tensor:
      _check_valid_scale(std)
      shape = _check_bounds_and_get_shape(mean, std, shape).shape
      dtype = ivy.as_native_dtype(dtype)
      if seed:
          torch.manual_seed(seed)
      if isinstance(mean, (int, float)) and isinstance(
          std, (int, float)
      ):
          return (
              torch.normal(mean, std, shape, out=out)
              .type(dtype)
              .to(device)
          )
      return torch.normal(mean, std, out=out).type(dtype).to(device)
  
file_path: ivy/ivy/functional/backends/torch/random.py
imports: import torch
  from typing import Optional, Union, Sequence
  import ivy
  from ivy.functional.ivy.random import _check_bounds_and_get_shape, _randint_check_dtype_and_bound, _check_valid_scale
  from ivy.func_wrapper import with_unsupported_dtypes
  from .None import backend_version
label_desc: Use image node_id 2 for calling a global function with example usage: random_normal() and returns: torch, torch