class_docstr: Child-Sum TreeLSTM unit.
  
  .. warning::
  
      This feature is experimental. The interface can change in the future.
  
  This is a Child-Sum TreeLSTM unit as a chain.
  This link is a variable arguments function, which compounds
  the states of all children nodes into the new states of
  a current (parent) node. *states* denotes the cell state, :math:`c`,
  and the output, :math:`h`, which are produced by this link.
  This link doesn't keep cell and hidden states internally.
  
  For example, this link is called such as
  ``func(c1, c2, h1, h2, x)`` if the number of children nodes is 2,
  while ``func(c1, c2, c3, h1, h2, h3, x)`` if that is 3.
  This function is *independent* from an order of children nodes.
  Thus, the returns of ``func(c1, c2, h1, h2, x)`` equal to
  those of ``func(c2, c1, h2, h1, x)``.
  
  Args:
      in_size (int): Dimension of input vectors.
      out_size (int): Dimensionality of cell and output vectors.
  
  Attributes:
      W_x (chainer.links.Linear): Linear layer of
          connections from input vectors.
      W_h_aio (chainer.links.Linear): Linear layer of connections between
          (:math:`a`, :math:`i`, :math:`o`) and summation of children's
          output vectors. :math:`a`, :math:`i` and :math:`o` denotes
          input compound,
          input gate and output gate, respectively.
          :math:`a`, input compound, equals to :math:`u` in
          the paper by Tai et al.
      W_h_f (chainer.links.Linear): Linear layer of connections between
          forget gate :math:`f` and the output of each child.
  
  See the paper for details: `Improved Semantic Representations From
  Tree-Structured Long Short-Term Memory Networks
  <https://www.aclweb.org/anthology/P15-1150>`_.
class_docstr_tok: ["Child-Sum","TreeLSTM","unit",".","..","warning",":",":","This","feature","is","experimental",".","The","interface","can","change","in","the","future",".","This","is","a","Child-Sum","TreeLSTM","unit","as","a","chain",".","This","link","is","a","variable","arguments","function",",","which","compounds","the","states","of","all","children","nodes","into","the","new","states","of","a","current","(","parent",")","node",".","*","states","*","denotes","the","cell","state",",",":","math",":","`","c","`",",","and","the","output",",",":","math",":","`","h","`",",","which","are","produced","by","this","link",".","This","link","does","n't","keep","cell","and","hidden","states","internally",".","For","example",",","this","link","is","called","such","as","``","func","(","c1",",","c2",",","h1",",","h2",",","x",")","``","if","the","number","of","children","nodes","is","2",",","while","``","func","(","c1",",","c2",",","c3",",","h1",",","h2",",","h3",",","x",")","``","if","that","is","3",".","This","function","is","*","independent","*","from","an","order","of","children","nodes",".","Thus",",","the","returns","of","``","func","(","c1",",","c2",",","h1",",","h2",",","x",")","``","equal","to","those","of","``","func","(","c2",",","c1",",","h2",",","h1",",","x",")","``",".","Args",":","in_size","(","int",")",":","Dimension","of","input","vectors",".","out_size","(","int",")",":","Dimensionality","of","cell","and","output","vectors",".","Attributes",":","W_x","(","chainer.links.Linear",")",":","Linear","layer","of","connections","from","input","vectors",".","W_h_aio","(","chainer.links.Linear",")",":","Linear","layer","of","connections","between","(",":","math",":","`","a","`",",",":","math",":","`","i","`",",",":","math",":","`","o","`",")","and","summation","of","children's","output","vectors",".",":","math",":","`","a","`",",",":","math",":","`","i","`","and",":","math",":","`","o","`","denotes","input","compound",",","input","gate","and","output","gate",",","respectively",".",":","math",":","`","a","`",",","input","compound",",","equals","to",":","math",":","`","u","`","in","the","paper","by","Tai","et","al",".","W_h_f","(","chainer.links.Linear",")",":","Linear","layer","of","connections","between","forget","gate",":","math",":","`","f","`","and","the","output","of","each","child",".","See","the","paper","for","details",":","`","Improved","Semantic","Representations","From","Tree-Structured","Long","Short-Term","Memory","Networks","<","https",":","\/\/www.aclweb.org\/anthology\/P15-1150",">","`","_","."]
docstr: Returns new cell state and output of Child-Sum TreeLSTM.
  
  Args:
      cshsx (list of :class:`~chainer.Variable`): Variable arguments
          which include all cell vectors and all output vectors of
          variable children, and an input vector.
  
  Returns:
      tuple of ~chainer.Variable: Returns
      :math:`(c_{new}, h_{new})`, where :math:`c_{new}` represents
      new cell state vector, and :math:`h_{new}` is new output
      vector.
docstr_tok: ["Returns","new","cell","state","and","output","of","Child-Sum","TreeLSTM",".","Args",":","cshsx","(","list","of",":","class",":","`","~chainer.Variable","`",")",":","Variable","arguments","which","include","all","cell","vectors","and","all","output","vectors","of","variable","children",",","and","an","input","vector",".","Returns",":","tuple","of","~chainer.Variable",":","Returns",":","math",":","`","(","c_","{","new","}",",","h_","{","new","}",")","`",",","where",":","math",":","`","c_","{","new","}","`","represents","new","cell","state","vector",",","and",":","math",":","`","h_","{","new","}","`","is","new","output","vector","."]
code: def forward(self, *cshsx):
      """Returns new cell state and output of Child-Sum TreeLSTM.
  
      Args:
          cshsx (list of :class:`~chainer.Variable`): Variable arguments
              which include all cell vectors and all output vectors of
              variable children, and an input vector.
  
      Returns:
          tuple of ~chainer.Variable: Returns
          :math:`(c_{new}, h_{new})`, where :math:`c_{new}` represents
          new cell state vector, and :math:`h_{new}` is new output
          vector.
  
      """
  
      cs = cshsx[: len(cshsx) // 2]
      hs = cshsx[len(cshsx) // 2 : -1]
      x = cshsx[-1]
      assert len(cshsx) % 2 == 1
      assert len(cs) == len(hs)
  
      if x is None:
          if any(c is not None for c in cs):
              base = [c for c in cs if c is not None][0]
          elif any(h is not None for h in hs):
              base = [h for h in hs if h is not None][0]
          else:
              raise ValueError("All inputs (cs, hs, x) are None.")
          batchsize, dtype = base.shape[0], base.dtype
          x = self.xp.zeros((batchsize, self.in_size), dtype=dtype)
  
      W_x_in = self.W_x(x)
      W_x_aio_in, W_x_f_in = split_axis.split_axis(
          W_x_in, [3 * self.state_size], axis=1
      )
  
      if len(hs) == 0:
          aio_in = W_x_aio_in
          a, i, o = split_axis.split_axis(aio_in, 3, axis=1)
          c = sigmoid.sigmoid(i) * tanh.tanh(a)
          h = sigmoid.sigmoid(o) * tanh.tanh(c)
          return c, h
  
      hs = self._pad_zero_nodes(
          hs, (x.shape[0], self.state_size), dtype=x.dtype
      )
      cs = self._pad_zero_nodes(
          cs, (x.shape[0], self.state_size), dtype=x.dtype
      )
  
      aio_in = self.W_h_aio(sum(hs)) + W_x_aio_in
      W_h_fs_in = concat.concat(
          split_axis.split_axis(
              self.W_h_f(concat.concat(hs, axis=0)), len(hs), axis=0
          ),
          axis=1,
      )
      f_in = W_h_fs_in + concat.concat([W_x_f_in] * len(hs), axis=1)
      tree_lstm_in = concat.concat([aio_in, f_in], axis=1)
  
      return tree_lstm.tree_lstm(*(cs + (tree_lstm_in,)))
  
file_path: chainer/chainer/links/rnn/tree_lstm.py
imports: import numpy
  from chainer.functions.activation import sigmoid
  from chainer.functions.activation import tanh
  from chainer.functions.array import concat
  from chainer.functions.array import split_axis
  from chainer.functions.rnn import tree_lstm
  from chainer import link
  from chainer.links.connection import linear
label_desc: Use image node_id 2 for calling the ChildSumTreeLSTM obj's underlying member method code with example usage: obj.forward() and returns: tree_lstm, c,  h