def run_merge_move_NEW(self, hmodel, SS, evBound, mPairIDs=None):
    from MergeMove import run_many_merge_moves

    if self.hasMove('birth') and len(self.BirthCompIDs) > 0:
      compList = [x for x in self.BirthCompIDs] # need a copy
    else:
      compList = list()

    nMergeTrials = self.algParams['merge']['mergePerLap']

    hmodel, SS, newEvBound, MTracker = run_many_merge_moves(
                        hmodel, None, SS, evBound=evBound,
                        mPairIDs=mPairIDs, 
                        randstate=self.PRNG, nMergeTrials=nMergeTrials,
                        compList=compList, savedir=self.savedir,
                        **self.algParams['merge'])

    msg = 'MERGE: %3d/%3d accepted.' % (MTracker.nSuccess, MTracker.nTrial)
    if MTracker.nSuccess > 0:
      msg += ' ev improved + %.3e' % (newEvBound - evBound)
    if self.algParams['merge']['doVerbose'] >= 0:
      self.print_msg(msg)
    
    if self.algParams['merge']['doVerbose'] > 0:
      for msg in MTracker.InfoLog:
        self.print_msg(msg)

    # ------ Adjust indexing for counter that determines which comp to target
    if self.hasMove('birth'):
      for kA, kB in MTracker.acceptedIDs:
        self._adjustLapsSinceLastBirthForMerge(MTracker, kA, kB)
    # ------ Record accepted moves, so can adjust memoized stats later
    self.MergeLog = list()
    for kA, kB in MTracker.acceptedIDs:
      self.MergeLog.append(dict(kA=kA, kB=kB))
    # ------ Reset all precalculated merge terms
    if SS.hasMergeTerms():
      SS.setMergeFieldsToZero()

    return hmodel, SS, newEvBound
Override in "template" tasks which themselves are supposed to be
dataset/ETHPy150Open daeilkim/refinery/refinery/bnpy/bnpy-dev/bnpy/learnalg/MemoizedOnlineVBLearnAlg.py/MemoizedOnlineVBLearnAlg.run_merge_move_NEW--crossover with--dataset/ETHPy150Open spotify/luigi/luigi/task.py/Task._requires