def forward(self, graph, feat, etypes):
        """Compute Gated Graph Convolution layer.

        Parameters
        ----------
        graph : DGLGraph
            The graph.
        feat : mxnet.NDArray
            The input feature of shape :math:`(N, D_{in})` where :math:`N`
            is the number of nodes of the graph and :math:`D_{in}` is the
            input feature size.
        etypes : torch.LongTensor
            The edge type tensor of shape :math:`(E,)` where :math:`E` is
            the number of edges of the graph.

        Returns
        -------
        mxnet.NDArray
            The output feature of shape :math:`(N, D_{out})` where :math:`D_{out}`
            is the output feature size.
        """
        with graph.local_scope():
            assert graph.is_homogeneous, (
                "not a homogeneous graph; convert it with to_homogeneous "
                "and pass in the edge type as argument"
            )
            zero_pad = nd.zeros(
                (feat.shape[0], self._out_feats - feat.shape[1]),
                ctx=feat.context,
            )
            feat = nd.concat(feat, zero_pad, dim=-1)

            for _ in range(self._n_steps):
                graph.ndata["h"] = feat
                for i in range(self._n_etypes):
                    eids = (etypes.asnumpy() == i).nonzero()[0]
                    eids = (
                        nd.from_numpy(eids, zero_copy=True)
                        .as_in_context(feat.context)
                        .astype(graph.idtype)
                    )
                    if len(eids) > 0:
                        graph.apply_edges(
                            lambda edges: {
                                "W_e*h": self.linears[i](edges.src["h"])
                            },
                            eids,
                        )
                graph.update_all(fn.copy_e("W_e*h", "m"), fn.sum("m", "a"))
                a = graph.ndata.pop("a")
                feat = self.gru(a, [feat])[0]
            return feat
Compute Gated Graph Convolution layer.

        Parameters
        ----------
        graph : DGLGraph
            The graph.
        feat : mxnet.NDArray
            The input feature of shape :math:`(N, D_{in})` where :math:`N`
            is the number of nodes of the graph and :math:`D_{in}` is the
            input feature size.
        etypes : torch.LongTensor
            The edge type tensor of shape :math:`(E,)` where :math:`E` is
            the number of edges of the graph.

        Returns
        -------
        mxnet.NDArray
            The output feature of shape :math:`(N, D_{out})` where :math:`D_{out}`
            is the output feature size.
        
python/dgl/nn/mxnet/conv/gatedgraphconv.py