code: def argument(
      a: Union[Argument, SelfArgument, TensorOptionsArguments],
      *,
      is_out: bool,
      symint: bool,
  ) -> List[Binding]:
      # Ideally, we NEVER default native functions.  However, there are a number
      # of functions that call native:: directly and rely on the defaulting
      # existing.  So for BC, we generate defaults for non-out variants (but not
      # for out variants, where it is impossible to generate an appropriate
      # default)
      should_default = not is_out
      if isinstance(a, Argument):
          default: Optional[str] = None
          if should_default and a.default is not None:
              default = cpp.default_expr(
                  a.default, a.type, symint=symint
              )
          return [
              Binding(
                  nctype=argument_type(a, binds=a.name, symint=symint),
                  name=a.name,
                  default=default,
                  argument=a,
              )
          ]
      elif isinstance(a, SelfArgument):
          # Erase SelfArgument from the distinction
          return argument(a.argument, is_out=is_out, symint=symint)
      elif isinstance(a, TensorOptionsArguments):
          default = None
          if should_default:
              default = "{}"
          # TODO: Not sure why the arguments assigned here are for
          # TensorOptionsArguments and not the constituent pieces.  It seems
          # to matter
          return [
              Binding(
                  nctype=NamedCType(
                      "dtype", OptionalCType(BaseCType(scalarTypeT))
                  ),
                  name="dtype",
                  default=default,
                  argument=a,
              ),
              Binding(
                  nctype=NamedCType(
                      "layout", OptionalCType(BaseCType(layoutT))
                  ),
                  name="layout",
                  default=default,
                  argument=a,
              ),
              Binding(
                  nctype=NamedCType(
                      "device", OptionalCType(BaseCType(deviceT))
                  ),
                  name="device",
                  default=default,
                  argument=a,
              ),
              Binding(
                  nctype=NamedCType(
                      "pin_memory", OptionalCType(BaseCType(boolT))
                  ),
                  name="pin_memory",
                  default=default,
                  argument=a,
              ),
          ]
      else:
          assert_never(a)
  
file_path: pytorch/torchgen/api/native.py
imports: from typing import List, Optional, Sequence, Union
  from torchgen import local
  from torchgen.api import cpp
  from torchgen.api.types import ArgName, BaseCType, Binding, boolT, ConstRefCType, CType, deviceT, layoutT, ListCType, MutRefCType, NamedCType, OptionalCType, scalarT, scalarTypeT, tensorT
  from torchgen.model import Argument, FunctionSchema, Return, SelfArgument, TensorOptionsArguments, Type
  from torchgen.utils import assert_never
label_desc: Use image node_id 5 for calling a global function with example usage: argument(a) and returns: list, argument, list