code: def connect(self, datas=None):
          
          # if data connect inputs
          if datas:
              self.connect_inputs(datas)
          # connect the remaining pipers
          postorder = self.postorder()
          self.log.debug('%s trying to connect in the order %s' % \
                        (repr(self), repr(postorder)))
          for piper in postorder:
              if not piper.connected and self[piper].nodes():
                  # 1. sort inputs by index in postorder
                  inputs = [p for p in postorder if p in self[piper].nodes()]
                  # 2. sort postorder so that all parents come before children
                  # mind that the top of a pipeline is a child!
                  inputs.sort(cmp=self.children_after_parents)
                  # 2. branch age sorted inputs
                  piper.connect(inputs)
          self.log.debug('%s succesfuly connected' % repr(self))
docs: Connects ``Pipers`` in the order input -> output. See ``Piper.connect``.
          According to the pipes (topology). If "datas" is given will connect the
          input ``Pipers`` to the input data see: ``Dagger.connect_inputs``.
          
          Argumensts:
          
            - datas(sequence) [default: ``None``] valid sequence of input data.
              see: ``Dagger.connect_inputs``.