code: func (g *Group) CopyState(from *Group) {
  	g.evaluationDuration = from.evaluationDuration
  
  	ruleMap := make(map[string][]int, len(from.rules))
  
  	for fi, fromRule := range from.rules {
  		nameAndLabels := nameAndLabels(fromRule)
  		l := ruleMap[nameAndLabels]
  		ruleMap[nameAndLabels] = append(l, fi)
  	}
  
  	for i, rule := range g.rules {
  		nameAndLabels := nameAndLabels(rule)
  		indexes := ruleMap[nameAndLabels]
  		if len(indexes) == 0 {
  			continue
  		}
  		fi := indexes[0]
  		g.seriesInPreviousEval[i] = from.seriesInPreviousEval[fi]
  		ruleMap[nameAndLabels] = indexes[1:]
  
  		ar, ok := rule.(*AlertingRule)
  		if !ok {
  			continue
  		}
  		far, ok := from.rules[fi].(*AlertingRule)
  		if !ok {
  			continue
  		}
  
  		for fp, a := range far.active {
  			ar.active[fp] = a
  		}
  	}
  }
docs: // CopyState copies the alerting rule and staleness related state from the given group.
  //
  // Rules are matched based on their name and labels. If there are duplicates, the
  // first is matched with the first, second with the second etc.