code: def MergeDataSets(self):
      
      rules = set()
      for (schedule, merge_map, zone_map) in ([self.feed_merger.a_schedule,
                                               self.feed_merger.a_merge_map,
                                               self.feed_merger.a_zone_map],
                                              [self.feed_merger.b_schedule,
                                               self.feed_merger.b_merge_map,
                                               self.feed_merger.b_zone_map]):
        for fare in schedule.GetFareAttributeList():
          for fare_rule in fare.GetFareRuleList():
            fare_id = merge_map[
                schedule.GetFareAttribute(fare_rule.fare_id)].fare_id
            route_id = (fare_rule.route_id and
                        merge_map[schedule.GetRoute(fare_rule.route_id)].route_id)
            origin_id = (fare_rule.origin_id and
                         zone_map[fare_rule.origin_id])
            destination_id = (fare_rule.destination_id and
                              zone_map[fare_rule.destination_id])
            contains_id = (fare_rule.contains_id and
                           zone_map[fare_rule.contains_id])
            rules.add((fare_id, route_id, origin_id, destination_id,
                       contains_id))
      for fare_rule_tuple in rules:
        migrated_fare_rule = transitfeed.FareRule(*fare_rule_tuple)
        self.feed_merger.merged_schedule.AddFareRuleObject(migrated_fare_rule)
  
      if rules:
        self.feed_merger.problem_reporter.FareRulesBroken(self)
      print('Fare Rules: union has %d fare rules' % len(rules))
      return True
docs: Merge the fare rule datasets.
  
      The fare rules are first migrated. Merging is done by removing any
      duplicate rules.
  
      Returns:
        True since fare rules can always be merged.