class_docstr: Applies a linear tranformation to the incoming data.
  
  .. math::
      \mathbf{x}^{\prime} = \mathbf{x} \mathbf{W}^{\top} + \mathbf{b}
  
  In contrast to :class:`torch.nn.Linear`, it supports lazy initialization
  and customizable weight and bias initialization.
  
  Args:
      in_channels (int): Size of each input sample. Will be initialized
          lazily in case it is given as :obj:`-1`.
      out_channels (int): Size of each output sample.
      bias (bool, optional): If set to :obj:`False`, the layer will not learn
          an additive bias. (default: :obj:`True`)
      weight_initializer (str, optional): The initializer for the weight
          matrix (:obj:`"glorot"`, :obj:`"uniform"`, :obj:`"kaiming_uniform"`
          or :obj:`None`).
          If set to :obj:`None`, will match default weight initialization of
          :class:`torch.nn.Linear`. (default: :obj:`None`)
      bias_initializer (str, optional): The initializer for the bias vector
          (:obj:`"zeros"` or :obj:`None`).
          If set to :obj:`None`, will match default bias initialization of
          :class:`torch.nn.Linear`. (default: :obj:`None`)
  
  Shapes:
      - **input:** features :math:`(*, F_{in})`
      - **output:** features :math:`(*, F_{out})`
class_docstr_tok: ["Applies","a","linear","tranformation","to","the","incoming","data",".","..","math",":",":","\\mathbf","{","x","}","^","{","\\prime","}","=","\\mathbf","{","x","}","\\mathbf","{","W","}","^","{","\\top","}","+","\\mathbf","{","b","}","In","contrast","to",":","class",":","`","torch.nn.Linear","`",",","it","supports","lazy","initialization","and","customizable","weight","and","bias","initialization",".","Args",":","in_channels","(","int",")",":","Size","of","each","input","sample",".","Will","be","initialized","lazily","in","case","it","is","given","as",":","obj",":","`","-1","`",".","out_channels","(","int",")",":","Size","of","each","output","sample",".","bias","(","bool",",","optional",")",":","If","set","to",":","obj",":","`","False","`",",","the","layer","will","not","learn","an","additive","bias",".","(","default",":",":","obj",":","`","True","`",")","weight_initializer","(","str",",","optional",")",":","The","initializer","for","the","weight","matrix","(",":","obj",":","`","``","glorot","''","`",",",":","obj",":","`","``","uniform","''","`",",",":","obj",":","`","``","kaiming_uniform","''","`","or",":","obj",":","`","None","`",")",".","If","set","to",":","obj",":","`","None","`",",","will","match","default","weight","initialization","of",":","class",":","`","torch.nn.Linear","`",".","(","default",":",":","obj",":","`","None","`",")","bias_initializer","(","str",",","optional",")",":","The","initializer","for","the","bias","vector","(",":","obj",":","`","``","zeros","''","`","or",":","obj",":","`","None","`",")",".","If","set","to",":","obj",":","`","None","`",",","will","match","default","bias","initialization","of",":","class",":","`","torch.nn.Linear","`",".","(","default",":",":","obj",":","`","None","`",")","Shapes",":","-","*","*","input",":","*","*","features",":","math",":","`","(","*",",","F_","{","in","}",")","`","-","*","*","output",":","*","*","features",":","math",":","`","(","*",",","F_","{","out","}",")","`"]
code: def __deepcopy__(self, memo):
      # PyTorch<1.13 cannot handle deep copies of uninitialized parameters :(
      # TODO Drop this code once PyTorch 1.12 is no longer supported.
      out = Linear(
          self.in_channels,
          self.out_channels,
          self.bias is not None,
          self.weight_initializer,
          self.bias_initializer,
      ).to(self.weight.device)
  
      if self.in_channels > 0:
          out.weight = copy.deepcopy(self.weight, memo)
  
      if self.bias is not None:
          out.bias = copy.deepcopy(self.bias, memo)
  
      return out
  
imports: import copy
  import math
  from typing import Any, Dict, Optional, Union
  import torch
  import torch.nn.functional
  from torch import Tensor
  from torch.nn.parameter import Parameter
  import torch_geometric.backend
  import torch_geometric.typing
  from torch_geometric import is_compiling
  from torch_geometric.nn import inits
  from torch_geometric.typing import pyg_lib
  from torch_geometric.utils import index_sort, scatter
  from torch_geometric.utils.sparse import index2ptr
label_desc: Use image node_id 2 for calling the Linear obj's underlying member method code with example usage: obj.__deepcopy__(memo) and returns: out