+The input to the DAG (respectively the produced output) is a nested
+table of inputs reflecting the structure of the nested table of
+modules given as argument to DAG:setInput (respectively DAG:setOutput)
+
+So for instance, in the example above, the model expects a tensor as
+input, since it is the input to the module a, and its output is a
+table composed of two tensors, corresponding to the outputs of d and e
+respectively.
+
+## Functions ##
+
+### nn.DAG() ###
+
+Create a new empty DAG, which inherits from nn.Container.
+
+### nn.DAG:connect(module1, module2 [, module3, [...]]) ###
+
+Add new nodes corresponding to the modules passed as arguments if they
+have not been already added in a previous call. Add edges between
+every two nodes associated to two successive modules in the
+arguments.
+
+Calling this function with n > 2 arguments is strictly equivalent to
+calling it n-1 times on the pairs of successive arguments.
+
+Accepting more than two arguments allows in particular to add
+anonymous modules, which are not associated to variables. In principle
+the only ones that have to be non-anonymous are those that have more
+than one successor / predecessor and/or are inputs / outputs.
+
+### nn.DAG:setInput(i) ###
+
+Define the content and structure of the input. The argument should be
+either a module, or a (nested) table of modules. The input to the DAG
+should be a (nested) table of inputs, with the corresponding
+structure.
+
+### nn.DAG:setOutput(o) ###
+
+Similar to DAG:setInput().
+
+### nn.DAG:print() ###
+
+Print the list of nodes.
+
+### nn.DAG:saveDot(filename) ###
+
+Save a dot file to be used by the Graphviz set of tools for graph
+visualization. This dot file can than be used for instance to produce
+a pdf file with
+
+```
+dot graph.dot -T pdf -o graph.pdf
+```
+
+### nn.DAG:setLabel(module, name) ###
+
+Add a label to the given module, that will be used for DAG:print() and DAG:saveDot()