<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def start(self, datas):
 """ Starts the pipeline by connecting the input ``Pipers`` of the pipeline to the input data, connecting the pipeline and starting the ``NuMap`` instances. The order of items in the "datas" argument sequence should correspond to the order of the input ``Pipers`` defined by ``Dagger._cmp`` and ``Piper.ornament``. Arguments: - datas(sequence) A sequence of external input data in the form of sequences or iterators. """

        if not self._started.isSet() and \
           not self._running.isSet() and \
           not self._pausing.isSet():
            # Plumber statistics
            self.stats = {}
            self.stats['start_time'] = None
            self.stats['run_time'] = None
            # connects input pipers to external data
            self.connect_inputs(datas)
            # connects pipers within the pipeline
            self.connect()
            # make pointers to results collected for pipers by imaps
            self.stats['pipers_tracked'] = {}
            for piper in self.postorder():
                if hasattr(piper.imap, '_tasks_tracked') and piper.track:
                    self.stats['pipers_tracked'][piper] = \
                    [piper.imap._tasks_tracked[t.task] for t in piper.imap_tasks]

            self.stats['start_time'] = time()
            # starts the Dagger
            # this starts Pipers and NuMaps
            super(Plumber, self).start()
            # transitioning to started state
            self._started.set()
            self._finished.clear()
        else:
            raise PlumberError