parameters: (self, x_list, expands)
return_statement: return rets
docstring: Update node embeddings.
  
      x_list = [nodes, hop1, hop2, ... , hopK-1, hopK]
                 |   /  |   /  |   /        |    /
                 |  /   |  /   |  /         |   /
                 | /    | /    | /          |  /
      output = [ret0,  ret1, ret2, ... , retK-1]
  
      Args:
        x_list: A list of tensors, representing input nodes and their K-hop neighbors.
          If len(x_list) is K+1, that means x_list[0], x_list[1], ... , x_list[K]
          are the hidden embedding values at each hop. Tensors in x_list[i] are
          the neighbors of that in x_list[i-1]. In this layer, we will do
          convolution for each adjencent pair and return a list with length K.
  
          The shape of x_list[0] is `[n, input_dim_0]`, and the shape of x_list[i]
          is `[n * k_1 * ... * k_i, input_dim_i]`, where `k_i` means the neighbor
          count of each node at (i-1)th hop. Each `input_dim_i` must match with
          `input_dim` parameter when layer construction.
  
        expands: An integer list of neighbor count at each hop. For the above
          x_list, expands = [k_1, k_2, ... , k_K]
  
      Return:
        A list with K tensors, and the ith shape is
        `[n * k_1 * ... * k_i, output_dim]`.
docstring_summary: Update node embeddings.
docstring_tokens: Update node embeddings .
function: def forward(self, x_list, expands):
      """ Update node embeddings.
  
      x_list = [nodes, hop1, hop2, ... , hopK-1, hopK]
                 |   /  |   /  |   /        |    /
                 |  /   |  /   |  /         |   /
                 | /    | /    | /          |  /
      output = [ret0,  ret1, ret2, ... , retK-1]
  
      Args:
        x_list: A list of tensors, representing input nodes and their K-hop neighbors.
          If len(x_list) is K+1, that means x_list[0], x_list[1], ... , x_list[K]
          are the hidden embedding values at each hop. Tensors in x_list[i] are
          the neighbors of that in x_list[i-1]. In this layer, we will do
          convolution for each adjencent pair and return a list with length K.
  
          The shape of x_list[0] is `[n, input_dim_0]`, and the shape of x_list[i]
          is `[n * k_1 * ... * k_i, input_dim_i]`, where `k_i` means the neighbor
          count of each node at (i-1)th hop. Each `input_dim_i` must match with
          `input_dim` parameter when layer construction.
  
        expands: An integer list of neighbor count at each hop. For the above
          x_list, expands = [k_1, k_2, ... , k_K]
  
      Return:
        A list with K tensors, and the ith shape is
        `[n * k_1 * ... * k_i, output_dim]`.
      """
      assert len(self.convs) == (len(x_list) - 1)
      assert len(self.convs) == len(expands)
  
      rets = []
      for i in range(1, len(x_list)):
        x = x_list[i - 1]
        neighbors = x_list[i]
        ret = self.convs[i - 1](x, neighbors, expands[i - 1])
        rets.append(ret)
      return rets
function_tokens: def forward ( self , x_list , expands ) : assert len ( self . convs ) == ( len ( x_list ) - 1 ) assert len ( self . convs ) == len ( expands ) rets = [ ] for i in range ( 1 , len ( x_list ) ) : x = x_list [ i - 1 ] neighbors = x_list [ i ] ret = self . convs [ i - 1 ] ( x , neighbors , expands [ i - 1 ] ) rets . append ( ret ) return rets