code: def generate_csv(data):
      """Generate a CSV of the abilities for easy commenting."""
      print(
          ",".join(
              [
                  "ability_id",
                  "link_name",
                  "link_index",
                  "button_name",
                  "hotkey",
                  "friendly_name",
                  "remap_to",
                  "mismatch",
              ]
          )
      )
      for ability in sorted(
          data.abilities.values(), key=lambda a: sort_key(data, a)
      ):
          ab_id = ability.ability_id
          if ab_id in skip_abilities or (
              ab_id not in data.general_abilities
              and ab_id not in used_abilities
          ):
              continue
  
          general = ""
          if ab_id in data.general_abilities:
              general = "general"
          elif ability.remaps_to_ability_id:
              general = ability.remaps_to_ability_id
  
          mismatch = ""
          if ability.remaps_to_ability_id:
  
              def check_mismatch(ability, parent, attr):
                  if getattr(ability, attr) != getattr(parent, attr):
                      return "%s: %s" % (attr, getattr(ability, attr))
  
              parent = data.abilities[ability.remaps_to_ability_id]
              mismatch = "; ".join(
                  filter(
                      None,
                      [
                          check_mismatch(ability, parent, "available"),
                          check_mismatch(ability, parent, "target"),
                          check_mismatch(
                              ability, parent, "allow_minimap"
                          ),
                          check_mismatch(
                              ability, parent, "allow_autocast"
                          ),
                          check_mismatch(
                              ability, parent, "is_building"
                          ),
                          check_mismatch(
                              ability, parent, "footprint_radius"
                          ),
                          check_mismatch(
                              ability, parent, "is_instant_placement"
                          ),
                          check_mismatch(ability, parent, "cast_range"),
                      ],
                  )
              )
  
          print(
              ",".join(
                  map(
                      str,
                      [
                          ability.ability_id,
                          ability.link_name,
                          ability.link_index,
                          ability.button_name,
                          ability.hotkey,
                          ability.friendly_name,
                          general,
                          mismatch,
                      ],
                  )
              )
          )
  
file_path: pysc2/pysc2/bin/gen_actions.py
imports: import itertools
  from absl import app
  from absl import flags
  from pysc2 import maps
  from pysc2 import run_configs
  from pysc2.lib import static_data
  from s2clientprotocol import common_pb2
  from s2clientprotocol import data_pb2
  from s2clientprotocol import sc2api_pb2
label_desc: Use image node_id 4 for calling a global function with example usage: generate_csv(data) and returns: unknown