@compatibility(is_backward_compatible=True)
def format_node(self, placeholder_names: List[str]=None, maybe_return_typename: List[str]=None) -> Optional[str]:
    "\n        Return a descriptive string representation of ``self``.\n\n        This method can be used with no arguments as a debugging\n        utility.\n\n        This function is also used internally in the ``__str__`` method\n        of ``Graph``. Together, the strings in ``placeholder_names``\n        and ``maybe_return_typename`` make up the signature of the\n        autogenerated ``forward`` function in this Graph's surrounding\n        GraphModule. ``placeholder_names`` and ``maybe_return_typename``\n        should not be used otherwise.\n\n        Args:\n            placeholder_names: A list that will store formatted strings\n                representing the placeholders in the generated\n                ``forward`` function. Internal use only.\n            maybe_return_typename: A single-element list that will store\n                a formatted string representing the output of the\n                generated ``forward`` function. Internal use only.\n\n        Returns:\n            str: If 1) we're using ``format_node`` as an internal helper\n                in the ``__str__`` method of ``Graph``, and 2) ``self``\n                is a placeholder Node, return ``None``. Otherwise,\n                return a  descriptive string representation of the\n                current Node.\n        "
    if (self.op == 'placeholder'):
        assert isinstance(self.target, str)
        arg_str = self.target
        arg_str += ((arg_str + f': {_type_repr(self.type)}') if self.type else '')
        if placeholder_names:
            placeholder_names.append(arg_str)
            return None
        maybe_typename = (f'{_type_repr(self.type)} ' if self.type else '')
        default_val = ((('(default=' + str(self.args[0])) + ')') if self.args else '')
        return f'%{self.name} : {maybe_typename}[#users={len(self.users)}] = {self.op}[target={self.target}]{default_val}'
    elif (self.op == 'get_attr'):
        maybe_typename = (f'{_type_repr(self.type)} ' if (self.type is not None) else '')
        return f'%{self.name} : {maybe_typename}[#users={len(self.users)}] = {self.op}[target={self._pretty_print_target(self.target)}]'
    elif (self.op == 'output'):
        if (self.type and maybe_return_typename):
            maybe_return_typename[0] = f' -> {_type_repr(self.type)}'
        return f'return {self.args[0]}'
    else:
        maybe_typename = (f'{_type_repr(self.type)} ' if (self.type is not None) else '')
        return f'%{self.name} : {maybe_typename}[#users={len(self.users)}] = {self.op}[target={self._pretty_print_target(self.target)}](args = {_format_arg(self.args)}, kwargs = {_format_arg(self.kwargs)})'
Return a descriptive string representation of ``self``.

This method can be used with no arguments as a debugging
utility.

This function is also used internally in the ``__str__`` method
of ``Graph``. Together, the strings in ``placeholder_names``
and ``maybe_return_typename`` make up the signature of the
autogenerated ``forward`` function in this Graph's surrounding
GraphModule. ``placeholder_names`` and ``maybe_return_typename``
should not be used otherwise.

Args:
    placeholder_names: A list that will store formatted strings
        representing the placeholders in the generated
        ``forward`` function. Internal use only.
    maybe_return_typename: A single-element list that will store
        a formatted string representing the output of the
        generated ``forward`` function. Internal use only.

Returns:
    str: If 1) we're using ``format_node`` as an internal helper
        in the ``__str__`` method of ``Graph``, and 2) ``self``
        is a placeholder Node, return ``None``. Otherwise,
        return a  descriptive string representation of the
        current Node.
@compatibility(is_backward_compatible=True)
def format_node(self, placeholder_names: List[str]=None, maybe_return_typename: List[str]=None) -> Optional[str]:
    "\n        Return a descriptive string representation of ``self``.\n\n        This method can be used with no arguments as a debugging\n        utility.\n\n        This function is also used internally in the ``__str__`` method\n        of ``Graph``. Together, the strings in ``placeholder_names``\n        and ``maybe_return_typename`` make up the signature of the\n        autogenerated ``forward`` function in this Graph's surrounding\n        GraphModule. ``placeholder_names`` and ``maybe_return_typename``\n        should not be used otherwise.\n\n        Args:\n            placeholder_names: A list that will store formatted strings\n                representing the placeholders in the generated\n                ``forward`` function. Internal use only.\n            maybe_return_typename: A single-element list that will store\n                a formatted string representing the output of the\n                generated ``forward`` function. Internal use only.\n\n        Returns:\n            str: If 1) we're using ``format_node`` as an internal helper\n                in the ``__str__`` method of ``Graph``, and 2) ``self``\n                is a placeholder Node, return ``None``. Otherwise,\n                return a  descriptive string representation of the\n                current Node.\n        "
    if (self.op == 'placeholder'):
        assert isinstance(self.target, str)
        arg_str = self.target
        arg_str += ((arg_str + f': {_type_repr(self.type)}') if self.type else )
        if placeholder_names:
            placeholder_names.append(arg_str)
            return None
        maybe_typename = (f'{_type_repr(self.type)} ' if self.type else )
        default_val = ((('(default=' + str(self.args[0])) + ')') if self.args else )
        return f'%{self.name} : {maybe_typename}[#users={len(self.users)}] = {self.op}[target={self.target}]{default_val}'
    elif (self.op == 'get_attr'):
        maybe_typename = (f'{_type_repr(self.type)} ' if (self.type is not None) else )
        return f'%{self.name} : {maybe_typename}[#users={len(self.users)}] = {self.op}[target={self._pretty_print_target(self.target)}]'
    elif (self.op == 'output'):
        if (self.type and maybe_return_typename):
            maybe_return_typename[0] = f' -> {_type_repr(self.type)}'
        return f'return {self.args[0]}'
    else:
        maybe_typename = (f'{_type_repr(self.type)} ' if (self.type is not None) else )
        return f'%{self.name} : {maybe_typename}[#users={len(self.users)}] = {self.op}[target={self._pretty_print_target(self.target)}](args = {_format_arg(self.args)}, kwargs = {_format_arg(self.kwargs)})'