code: def detect(self, sampfrom=0, sampto='end', learn=True, verbose=True):
          
          if sampfrom < 0:
              raise ValueError("'sampfrom' cannot be negative")
          self.sampfrom = sampfrom
  
          if sampto == 'end':
              sampto = self.sig_len
          elif sampto > self.sig_len:
              raise ValueError("'sampto' cannot exceed the signal length")
          self.sampto = sampto
          self.verbose = verbose
  
          # Don't attempt to run on a flat signal
          if np.max(self.sig) == np.min(self.sig):
              self.qrs_inds = np.empty(0)
              if self.verbose:
                  print('Flat signal. Detection skipped.')
              return
  
          # Get/set signal configuration fields from Conf object
          self._set_conf()
          # Bandpass filter the signal
          self._bandpass()
          # Compute moving wave integration of filtered signal
          self._mwi()
  
          # Initialize the running parameters
          if learn:
              self._learn_init_params()
          else:
              self._set_default_init_params()
  
          # Run the detection
          self._run_detection()
docs: Detect qrs locations between two samples.
  
          Parameters
          ----------
          sampfrom : int, optional
              The starting sample number to run the detection on.
          sampto : int, optional
              The final sample number to run the detection on. Set as
              'end' to run on the entire signal.
          learn : bool, optional
              Whether to apply learning on the signal before running the
              main detection. If learning fails or is not conducted, the
              default configuration parameters will be used to initialize
              these variables. See the `XQRS._learn_init_params` docstring
              for details.
          verbose : bool, optional
              Whether to display the stages and outcomes of the detection
              process.