# ultra_meta_import_list = """
# registeel_xl,LOCK_ON,FOCUS_BLAST,FLASH_CANNON
# cresselia,PSYCHO_CUT,GRASS_KNOT,MOONBLAST
# talonflame_xl,INCINERATE,BRAVE_BIRD,FLAME_CHARGE
# abomasnow-shadow,POWDER_SNOW,WEATHER_BALL_ICE,ENERGY_BALL
# abomasnow_xl,POWDER_SNOW,WEATHER_BALL_ICE,ENERGY_BALL
# stunfisk_galarian_xl,MUD_SHOT,ROCK_SLIDE,EARTHQUAKE
# registeel,LOCK_ON,FOCUS_BLAST,FLASH_CANNON
# politoed_xl,MUD_SHOT,WEATHER_BALL_WATER,BLIZZARD
# giratina_altered,SHADOW_CLAW,DRAGON_CLAW,SHADOW_SNEAK
# mandibuzz_xl,SNARL,FOUL_PLAY,AERIAL_ACE
# swampert,MUD_SHOT,HYDRO_CANNON,EARTHQUAKE
# umbreon_xl,SNARL,FOUL_PLAY,LAST_RESORT
# ferrothorn_xl,BULLET_SEED,POWER_WHIP,FLASH_CANNON
# meganium_xl,VINE_WHIP,FRENZY_PLANT,EARTHQUAKE
# articuno,ICE_SHARD,ICY_WIND,HURRICANE
# perrserker_xl,SHADOW_CLAW,CLOSE_COMBAT,FOUL_PLAY
# swampert-shadow,MUD_SHOT,HYDRO_CANNON,EARTHQUAKE
# lapras,ICE_SHARD,SURF,ICE_BEAM
# regirock,LOCK_ON,STONE_EDGE,FOCUS_BLAST
# politoed-shadow,MUD_SHOT,WEATHER_BALL_WATER,BLIZZARD
# abomasnow-shadow,POWDER_SNOW,WEATHER_BALL_ICE,ENERGY_BALL
# clefable_xl,CHARM,MOONBLAST,METEOR_MASH
# drifblim_xl,HEX,SHADOW_BALL,ICY_WIND
# venusaur-shadow,VINE_WHIP,FRENZY_PLANT,SLUDGE_BOMB
# ninetales_alolan_xl,POWDER_SNOW,WEATHER_BALL_ICE,PSYSHOCK
# regice,LOCK_ON,BLIZZARD,EARTHQUAKE
# giratina_altered,SHADOW_CLAW,SHADOW_BALL,DRAGON_PULSE
# articuno-shadow,ICE_SHARD,ICY_WIND,HURRICANE
# shiftry-shadow,SNARL,LEAF_BLADE,FOUL_PLAY
# shiftry_xl,SNARL,LEAF_BLADE,FOUL_PLAY
# venusaur,VINE_WHIP,FRENZY_PLANT,SLUDGE_BOMB
# gengar,SHADOW_CLAW,SHADOW_BALL,SHADOW_PUNCH
# scrafty_xl,COUNTER,FOUL_PLAY,POWER-UP_PUNCH
# skarmory_xl,AIR_SLASH,BRAVE_BIRD,SKY_ATTACK
# muk_alolan,SNARL,DARK_PULSE,GUNK_SHOT
# abomasnow,POWDER_SNOW,WEATHER_BALL_ICE,ENERGY_BALL
# magnezone-shadow,SPARK,WILD_CHARGE,MIRROR_SHOT
# machamp,COUNTER,CROSS_CHOP,PAYBACK
# lapras-shadow,ICE_SHARD,SURF,ICE_BEAM
# lugia,DRAGON_TAIL,SKY_ATTACK,AEROBLAST
# gyarados,DRAGON_BREATH,AQUA_TAIL,CRUNCH
# ho_oh,INCINERATE,BRAVE_BIRD,EARTHQUAKE
# lapras,ICE_SHARD,SURF,ICE_BEAM
# meganium,VINE_WHIP,FRENZY_PLANT,EARTHQUAKE
# snorlax,LICK,BODY_SLAM,EARTHQUAKE
# machamp-shadow,COUNTER,CROSS_CHOP,PAYBACK
# obstagoon,COUNTER,NIGHT_SLASH,GUNK_SHOT
# sirfetchd,COUNTER,CLOSE_COMBAT,LEAF_BLADE
# zapdos-shadow,THUNDER_SHOCK,DRILL_PECK,THUNDERBOLT
# escavalier,COUNTER,MEGAHORN,DRILL_RUN
# politoed-shadow,MUD_SHOT,WEATHER_BALL_WATER,BLIZZARD
# virizion,QUICK_ATTACK,LEAF_BLADE,CLOSE_COMBAT
# gyarados-shadow,DRAGON_BREATH,AQUA_TAIL,CRUNCH
# electivire-shadow,THUNDER_SHOCK,WILD_CHARGE,ICE_PUNCH
# perrserker,SHADOW_CLAW,CLOSE_COMBAT,FOUL_PLAY
# charizard,DRAGON_BREATH,BLAST_BURN,DRAGON_CLAW
# snorlax-shadow,LICK,BODY_SLAM,EARTHQUAKE
# clefable,CHARM,MOONBLAST,METEOR_MASH
# lucario,COUNTER,POWER-UP_PUNCH,SHADOW_BALL
# genesect,FURY_CUTTER,X-SCISSOR,TECHNO_BLAST_BURN
# politoed,MUD_SHOT,WEATHER_BALL_WATER,BLIZZARD
# gliscor-shadow,FURY_CUTTER,NIGHT_SLASH,EARTHQUAKE
# sceptile,BULLET_SEED,LEAF_BLADE,EARTHQUAKE
# hariyama,COUNTER,CLOSE_COMBAT,HEAVY_SLAM
# sandslash_alolan_xl,POWDER_SNOW,ICE_PUNCH,BULLDOZE
# jellicent_xl,HEX,SHADOW_BALL,ICE_BEAM
# togekiss,CHARM,ANCIENT_POWER,FLAMETHROWER
# chesnaught,VINE_WHIP,SUPERPOWER,ENERGY_BALL
# ninetales-shadow,FIRE_SPIN,WEATHER_BALL_FIRE,PSYSHOCK
# typhlosion,SHADOW_CLAW,BLAST_BURN,SOLAR_BEAM
# heracross,COUNTER,CLOSE_COMBAT,MEGAHORN
# charizard-shadow,DRAGON_BREATH,BLAST_BURN,DRAGON_CLAW
# poliwrath-shadow,MUD_SHOT,DYNAMIC_PUNCH,ICE_PUNCH
# ferrothorn,BULLET_SEED,POWER_WHIP,FLASH_CANNON
# honchkrow,SNARL,BRAVE_BIRD,SKY_ATTACK
# hypno_xl,CONFUSION,FIRE_PUNCH,SHADOW_BALL
# drifblim,HEX,SHADOW_BALL,ICY_WIND
# mew,SHADOW_CLAW,OVERHEAT,PSYSHOCK
# shiftry,SNARL,LEAF_BLADE,FOUL_PLAY
# gardevoir-shadow,CHARM,SYNCHRONOISE,SHADOW_BALL
# ninetales_xl,FIRE_SPIN,WEATHER_BALL_FIRE,PSYSHOCK
# tangrowth,VINE_WHIP,POWER_WHIP,ROCK_SLIDE
# gliscor,FURY_CUTTER,NIGHT_SLASH,EARTHQUAKE
# raikou-shadow,VOLT_SWITCH,WILD_CHARGE,SHADOW_BALL
# altaria_xl,DRAGON_BREATH,SKY_ATTACK,DRAGON_PULSE
# raikou,VOLT_SWITCH,WILD_CHARGE,SHADOW_BALL
# zapdos,THUNDER_SHOCK,DRILL_PECK,THUNDERBOLT
# poliwrath,MUD_SHOT,DYNAMIC_PUNCH,ICE_PUNCH
# melmetal,THUNDER_SHOCK,ROCK_SLIDE,SUPERPOWER
# toxicroak_xl,COUNTER,MUD_BOMB,SLUDGE_BOMB
# magnezone,SPARK,WILD_CHARGE,MIRROR_SHOT
# empoleon,WATERFALL,HYDRO_CANNON,DRILL_PECK
# ninetales_alolan,POWDER_SNOW,WEATHER_BALL_ICE,PSYSHOCK
# ludicolo_xl,BUBBLE,ENERGY_BALL,ICE_BEAM
# toxicroak,COUNTER,MUD_BOMB,SLUDGE_BOMB
# electivire,THUNDER_SHOCK,WILD_CHARGE,ICE_PUNCH
# scizor-shadow,BULLET_PUNCH,NIGHT_SLASH,IRON_HEAD
# blaziken,COUNTER,BLAZE_KICK,STONE_EDGE
# dragonite-shadow,DRAGON_BREATH,DRAGON_CLAW,HURRICANE
# excadrill,MUD_SHOT,DRILL_RUN,ROCK_SLIDE
# """

# # if 0:
# #     lvl_50_5 = np.array([744,717,678,654,681,568,755,211,517,562,592,568,949,925,782,818,526,511,263,300,654,675,547,622,669,586,224,755,636,663,699,269,589,809,523,711,363,744,429,348,301,836,511,925,678,693,720,571,258,877,300,666,364,327,818,556,562,675,800,940,248,669,767,633,714,577,729,919,651,562,803,532,788,949,318,393,547,595,681,675,705,925,705,330,268,283,214,809,324,833,316,451,672,699,833,273,892,660,206,452])

# #     lvl_50_151414 = np.array([744,714,500,654,681,568,755,211,517,562,592,568,949,925,782,818,523,511,263,300,654,675,547,622,669,586,224,755,636,663,699,269,589,809,523,711,363,741,376,348,301,836,511,925,678,690,720,571,258,877,300,666,364,327,818,556,562,675,800,940,248,663,764,633,711,574,729,919,651,562,803,532,788,949,318,393,547,595,681,675,702,925,705,330,268,283,214,809,324,833,300,451,672,699,833,273,892,657,206,452])

# #     lvl_49_5 = np.array([742,658,321,652,679,565,754,211,514,559,586,565,949,925,610,817,520,508,263,300,652,673,541,616,667,583,224,754,634,661,694,269,586,808,520,709,363,739,373,348,298,835,508,925,676,688,715,568,258,877,300,664,361,327,817,553,556,673,799,940,248,661,763,631,709,571,727,919,646,559,802,529,784,949,318,393,544,592,679,673,700,925,703,330,265,283,214,808,324,832,300,451,670,697,832,273,892,655,206,452])

# #     lvl_50_151515 = np.array([747,717,500,684,681,571,758,211,517,562,592,568,949,925,782,818,526,511,263,300,684,675,547,622,672,589,224,755,639,663,699,269,589,809,526,714,363,744,429,348,301,836,511,925,678,693,720,571,258,877,300,669,364,327,818,556,562,675,800,940,248,669,767,633,714,577,729,919,651,562,803,532,788,949,318,393,547,598,684,675,705,925,705,330,268,283,214,809,324,833,300,451,711,699,833,273,892,660,206,452])

# #     lvl_50_151515.mean()
# #     lvl_49_5.mean()
# #     lvl_50_5.mean()
# #     lvl_50_151414.mean()

# #     (lvl_50_151414 - lvl_50_151515).mean()
# #     (lvl_49_5 - lvl_50_151515).mean()
# #     (lvl_50_5 - lvl_50_151515).mean()

# #     (lvl_49_5 > 500).astype(np.uint8).sum()
# #     (lvl_50_5 > 500).astype(np.uint8).sum()
# #     (lvl_50_151515 > 500).astype(np.uint8).sum()

# ult_prem = """
# jellicent_xl,BUBBLE,BUBBLE_BEAM,SHADOW_BALL
# stunfisk_galarian_xl,MUD_SHOT,ROCK_SLIDE,EARTHQUAKE
# machamp-shadow,COUNTER,CROSS_CHOP,ROCK_SLIDE
# scrafty_xl,COUNTER,FOUL_PLAY,POWER-UP_PUNCH
# abomasnow-shadow,POWDER_SNOW,WEATHER_BALL_ICE,ENERGY_BALL
# mandibuzz_xl,SNARL,FOUL_PLAY,AERIAL_ACE
# swampert-shadow,MUD_SHOT,HYDRO_CANNON,SLUDGE_WAVE
# politoed-shadow,MUD_SHOT,WEATHER_BALL_WATER,EARTHQUAKE
# sirfetchd,COUNTER,LEAF_BLADE,BRAVE_BIRD
# talonflame_xl,INCINERATE,BRAVE_BIRD,FLAME_CHARGE
# umbreon_xl,SNARL,FOUL_PLAY,LAST_RESORT
# venusaur-shadow,VINE_WHIP,FRENZY_PLANT,SLUDGE_BOMB
# ferrothorn_xl,BULLET_SEED,POWER_WHIP,FLASH_CANNON
# meganium_xl,VINE_WHIP,FRENZY_PLANT,EARTHQUAKE
# skarmory_xl,AIR_SLASH,BRAVE_BIRD,SKY_ATTACK
# drifblim_xl,HEX,ICY_WIND,SHADOW_BALL
# escavalier,COUNTER,DRILL_RUN,MEGAHORN
# altaria_xl,DRAGON_BREATH,SKY_ATTACK,DRAGON_PULSE
# magnezone-shadow,SPARK,WILD_CHARGE,MIRROR_SHOT
# ninetales_alolan_xl,POWDER_SNOW,WEATHER_BALL_ICE,PSYSHOCK
# lapras,ICE_SHARD,SURF,SKULL_BASH
# perrserker_xl,SHADOW_CLAW,CLOSE_COMBAT,FOUL_PLAY
# snorlax-shadow,LICK,BODY_SLAM,SUPERPOWER
# gallade,CONFUSION,CLOSE_COMBAT,LEAF_BLADE
# gengar,SHADOW_CLAW,SHADOW_BALL,SHADOW_PUNCH
# hariyama,COUNTER,CLOSE_COMBAT,HEAVY_SLAM
# electivire-shadow,THUNDER_SHOCK,WILD_CHARGE,ICE_PUNCH
# toxicroak_xl,COUNTER,MUD_BOMB,SLUDGE_BOMB
# blaziken,COUNTER,BLAZE_KICK,BLAST_BURN
# heracross,COUNTER,CLOSE_COMBAT,MEGAHORN
# galvantula_xl,VOLT_SWITCH,LUNGE,DISCHARGE
# dragonite-shadow,DRAGON_BREATH,DRAGON_CLAW,HURRICANE
# raichu_xl,VOLT_SWITCH,WILD_CHARGE,BRICK_BREAK
# clefable_xl,CHARM,METEOR_MASH,MOONBLAST
# hypno_xl,CONFUSION,THUNDER_PUNCH,SHADOW_BALL
# obstagoon,COUNTER,NIGHT_SLASH,GUNK_SHOT
# empoleon,WATERFALL,HYDRO_CANNON,DRILL_PECK
# lucario,COUNTER,CLOSE_COMBAT,SHADOW_BALL
# muk_alolan,SNARL,DARK_PULSE,SLUDGE_WAVE
# chesnaught,VINE_WHIP,SUPERPOWER,ENERGY_BALL
# gyarados-shadow,DRAGON_BREATH,AQUA_TAIL,CRUNCH
# bouffalant,MUD_SHOT,STOMP,SKULL_BASH
# flygon-shadow,MUD_SHOT,DRAGON_CLAW,EARTH_POWER
# bronzong_xl,CONFUSION,PSYSHOCK,BULLDOZE
# poliwrath,MUD_SHOT,DYNAMIC_PUNCH,ICE_PUNCH
# honchkrow,SNARL,BRAVE_BIRD,SKY_ATTACK
# tangrowth,VINE_WHIP,POWER_WHIP,ROCK_SLIDE
# typhlosion,INCINERATE,BLAST_BURN,SOLAR_BEAM
# charizard,FIRE_SPIN,BLAST_BURN,DRAGON_CLAW
# gliscor,WING_ATTACK,NIGHT_SLASH,EARTHQUAKE
# primeape,COUNTER,CLOSE_COMBAT,CROSS_CHOP
# hitmonchan,COUNTER,CLOSE_COMBAT,ICE_PUNCH
# ampharos,VOLT_SWITCH,THUNDER_PUNCH,FOCUS_BLAST
# sandslash_alolan_xl,POWDER_SNOW,ICE_PUNCH,BULLDOZE
# sceptile,BULLET_SEED,LEAF_BLADE,EARTHQUAKE
# togekiss,CHARM,AERIAL_ACE,FLAMETHROWER
# kingdra,DRAGON_BREATH,OUTRAGE,OCTAZOOKA
# shiftry-shadow,SNARL,LEAF_BLADE,FOUL_PLAY
# zebstrika,SPARK,WILD_CHARGE,FLAME_CHARGE
# pinsir-shadow,FURY_CUTTER,CLOSE_COMBAT,X-SCISSOR
# excadrill,MUD_SHOT,DRILL_RUN,ROCK_SLIDE
# crustle_xl,SMACK_DOWN,ROCK_SLIDE,X-SCISSOR
# magneton-shadow,THUNDER_SHOCK,MAGNET_BOMB,DISCHARGE
# granbull_xl,CHARM,CLOSE_COMBAT,CRUNCH
# magmortar-shadow,KARATE_CHOP,FIRE_PUNCH,THUNDERBOLT
# seismitoad,MUD_SHOT,EARTH_POWER,MUDDY_WATER
# golem_alolan,VOLT_SWITCH,ROCK_BLAST,WILD_CHARGE
# froslass_xl,POWDER_SNOW,AVALANCHE,SHADOW_BALL
# breloom,COUNTER,SEED_BOMB,SLUDGE_BOMB
# feraligatr,WATERFALL,HYDRO_CANNON,CRUNCH
# serperior_xl,VINE_WHIP,GRASS_KNOT,AERIAL_ACE
# hitmontop,COUNTER,CLOSE_COMBAT,STONE_EDGE
# scizor-shadow,BULLET_PUNCH,NIGHT_SLASH,IRON_HEAD
# roserade,BULLET_SEED,WEATHER_BALL_FIRE,GRASS_KNOT
# staraptor,WING_ATTACK,BRAVE_BIRD,CLOSE_COMBAT
# ludicolo_xl,BUBBLE,ENERGY_BALL,ICE_BEAM
# rapidash_galarian,PSYCHO_CUT,BODY_SLAM,PSYCHIC
# conkeldurr,COUNTER,DYNAMIC_PUNCH,STONE_EDGE
# darmanitan,INCINERATE,ROCK_SLIDE,OVERHEAT
# eelektross,SPARK,DRAGON_CLAW,THUNDERBOLT
# dewgong_xl,ICE_SHARD,ICY_WIND,WATER_PULSE
# luxray,SPARK,WILD_CHARGE,CRUNCH
# vaporeon,WATER_GUN,AQUA_TAIL,LAST_RESORT
# magmar-shadow,KARATE_CHOP,FIRE_PUNCH,FLAMETHROWER
# forretress,BUG_BITE,MIRROR_SHOT,EARTHQUAKE
# haxorus,COUNTER,DRAGON_CLAW,NIGHT_SLASH
# mamoswine,POWDER_SNOW,AVALANCHE,STONE_EDGE
# arcanine-shadow,SNARL,WILD_CHARGE,FLAMETHROWER
# hydreigon,DRAGON_BREATH,DARK_PULSE,DRAGON_PULSE
# durant,BUG_BITE,X-SCISSOR,STONE_EDGE
# victreebel-shadow,RAZOR_LEAF,LEAF_BLADE,SLUDGE_BOMB
# vileplume-shadow,RAZOR_LEAF,SLUDGE_BOMB,MOONBLAST
# skuntank,POISON_JAB,CRUNCH,SLUDGE_BOMB
# nidoqueen,POISON_JAB,EARTH_POWER,STONE_EDGE
# porygon2,LOCK_ON,TRI_ATTACK,ZAP_CANNON
# probopass_xl,SPARK,ROCK_SLIDE,THUNDERBOLT
# klinklang,THUNDER_SHOCK,MIRROR_SHOT,ZAP_CANNON
# relicanth,WATER_GUN,AQUA_TAIL,ANCIENT_POWER
# scolipede,POISON_JAB,X-SCISSOR,MEGAHORN
# bellossom,BULLET_SEED,LEAF_BLADE,RETURN
# """

# # if 0:

# #     lvl_50_5 = np.array([220,568,251,589,654,562,211,526,300,211,747,678,681,568,622,949,809,547,699,877,925,268,363,669,511,818,758,562,316,678,269,633,327,592,248,654,556,511,833,238,651,803,833,206,436,250,451,429,764,720,675,393,273,648,919,248,925,547,364,571,803,711,318,770,547,818,253,639,604,627,809,645,925,788,669,714,622,633,714,212,562,301,666,675,767,627,729,636,224,681,949,300,925,663,452,607,705,158,257,508])

# #     lvl_50_151414 = np.array([202,568,251,589,654,562,211,523,300,211,747,500,681,568,622,949,809,547,699,877,925,268,363,669,511,818,758,562,300,678,269,633,327,592,248,654,553,511,833,238,651,803,833,206,436,250,451,376,764,720,675,393,273,648,919,248,925,547,364,571,803,711,318,770,547,818,253,639,604,627,809,642,925,788,669,714,622,633,711,212,562,301,666,675,764,627,729,636,224,678,949,300,925,663,452,607,702,158,257,526])

# #     lvl_49_5 = np.array([202,565,242,586,652,559,201,520,300,211,745,321,679,565,616,949,808,541,694,877,925,265,363,667,360,817,757,556,300,676,269,631,327,586,248,652,550,360,832,219,646,802,832,206,423,250,451,373,763,715,673,393,273,646,919,248,925,544,361,568,802,709,318,769,544,817,253,637,601,625,808,640,925,784,667,712,619,631,709,212,559,298,664,673,763,625,727,634,224,676,949,300,925,661,452,604,700,158,257,523])

# #     lvl_50_151515 = np.array([220,571,251,589,684,562,211,526,300,211,747,500,681,568,622,949,809,547,699,877,925,268,363,672,511,818,758,562,300,678,269,633,327,592,248,684,556,511,833,238,651,803,833,206,436,250,451,429,764,720,675,393,273,648,919,248,925,547,364,574,803,714,318,770,547,818,253,639,604,627,809,645,925,788,669,714,625,633,714,212,562,301,666,675,767,627,729,639,224,681,949,300,925,663,452,610,705,158,257,511])

# #     print(lvl_50_151515.mean())
# #     print(lvl_49_5.mean())
# #     print(lvl_50_5.mean())
# #     print(lvl_50_151414.mean())

# #     (lvl_50_151414 - lvl_50_151515).mean()
# #     (lvl_49_5 - lvl_50_151515).mean()
# #     (lvl_50_5 - lvl_50_151515).mean()

# #     (lvl_49_5 > 500).astype(np.uint8).sum()
# #     (lvl_50_5 > 500).astype(np.uint8).sum()
# #     (lvl_50_151515 > 500).astype(np.uint8).sum()
# #     (lvl_50_151414 > 500).astype(np.uint8).sum()

# #     list(ub.compress(meta_mons, (lvl_50_151515 < 500)))
# #     (set(map(lambda x: x.name, ub.compress(meta_mons, (lvl_49_5 < 500))))) - (set(map(lambda x: x.name, ub.compress(meta_mons, (lvl_50_151414 < 500)))))


# # umbreon,SNARL,FOUL_PLAY,LAST_RESORT
# # talonflame,INCINERATE,BRAVE_BIRD,FLAME_CHARGE

# def read_ultra_rankings():
#     import ubelt as ub
#     fpath = '/home/joncrall/Downloads/premier Rankings (1).csv'

#     fpath = '/home/joncrall/Downloads/classic Rankings.csv'
#     # fpath = ub.expandpath('~/code/pypogo/pypogo/ultra_premier_rankings.csv')
#     import pandas as pd
#     data = pd.read_csv(fpath)
#     from pypogo.pokemon import Pokemon

#     max_cp = 2500
#     max_cp = np.inf

#     meta_mons = []

#     rows = list(data.iterrows())

#     for rx, row in ub.ProgIter(rows):
#         orig_name = row['Pokemon']
#         parts = orig_name.split(' (')
#         name = parts[0]
#         suffix = ' ('.join(parts[1:]).lower()
#         shadow = 'shadow' in suffix

#         moves = [row['Fast Move'], row['Charged Move 1'], row['Charged Move 2']]
#         level = row['Level']
#         mon = Pokemon(name, hints=orig_name, level=level, moves=moves, shadow=shadow)

#         if 'XL' in orig_name:
#             mon.maximize(2500, ivs=[10, 10, 10], max_level=50)
#         else:
#             mon.maximize(2500, ivs=[10, 10, 10], max_level=40)

#         meta_mons.append(mon)

#     blocklist = {
#         'zangoose',
#         'blastoise',
#         'suicune',
#         # zapdos,
#         # lugia,
#         'steelix',
#         'lickilicky',
#         'milotic',
#         'deoxys',
#         'mewtwo',  # TODO armored
#     }

#     seen = set()

#     i = 0
#     mon_iter = iter(meta_mons)
#     # while i < 30:
#     while i < 100:
#         mon = next(mon_iter)
#         if mon.name not in seen:
#             seen.add(mon.name)
#             if mon.name not in blocklist:
#                 line = mon.to_pvpoke_import_line()
#                 print(line)
#                 i += 1


# def read_ultra_rankings():
#     import ubelt as ub
#     fpath = '/home/joncrall/Downloads/premier Rankings (1).csv'
#     # fpath = ub.expandpath('~/code/pypogo/pypogo/ultra_premier_rankings.csv')
#     import pandas as pd
#     data = pd.read_csv(fpath)
#     from pypogo.pokemon import Pokemon

#     meta_mons = []

#     rows = list(data.iterrows())

#     for rx, row in ub.ProgIter(rows):
#         orig_name = row['Pokemon']
#         parts = orig_name.split(' (')
#         name = parts[0]
#         suffix = ' ('.join(parts[1:]).lower()
#         shadow = 'shadow' in suffix

#         moves = [row['Fast Move'], row['Charged Move 1'], row['Charged Move 2']]
#         level = row['Level']
#         mon = Pokemon(name, hints=orig_name, level=level, moves=moves, shadow=shadow)

#         if 'XL' in orig_name:
#             mon.maximize(2500, ivs=[10, 10, 10], max_level=50)
#         else:
#             mon.maximize(2500, ivs=[10, 10, 10], max_level=40)

#         meta_mons.append(mon)

#     blocklist = {
#         'zangoose',
#         'blastoise',
#         'suicune',
#         # zapdos,
#         # lugia,
#         'steelix',
#         'lickilicky',
#         'milotic',
#         'deoxys',
#         'mewtwo',  # TODO armored
#     }

#     seen = set()

#     i = 0
#     mon_iter = iter(meta_mons)
#     # while i < 30:
#     while i < 100:
#         mon = next(mon_iter)
#         if mon.name not in seen:
#             seen.add(mon.name)
#             if mon.name not in blocklist:
#                 line = mon.to_pvpoke_import_line()
#                 print(line)
#                 i += 1


# master_meta = """
# groudon,MUD_SHOT,EARTHQUAKE,FIRE_PUNCH
# melmetal,THUNDER_SHOCK,SUPERPOWER,ROCK_SLIDE
# snorlax-shadow,LICK,BODY_SLAM,SUPERPOWER
# giratina_origin,SHADOW_CLAW,SHADOW_BALL,OMINOUS_WIND
# dialga,DRAGON_BREATH,IRON_HEAD,DRACO_METEOR
# dragonite-shadow,DRAGON_BREATH,DRAGON_CLAW,HURRICANE
# ho_oh,INCINERATE,BRAVE_BIRD,EARTHQUAKE
# palkia,DRAGON_BREATH,AQUA_TAIL,DRACO_METEOR
# zekrom,DRAGON_BREATH,CRUNCH,WILD_CHARGE
# lugia,DRAGON_TAIL,SKY_ATTACK,AEROBLAST
# gyarados-shadow,DRAGON_BREATH,AQUA_TAIL,CRUNCH
# swampert,MUD_SHOT,HYDRO_CANNON,EARTHQUAKE
# garchomp,MUD_SHOT,OUTRAGE,EARTHQUAKE
# togekiss,CHARM,ANCIENT_POWER,FLAMETHROWER
# kyogre,WATERFALL,SURF,BLIZZARD
# mamoswine-shadow,POWDER_SNOW,AVALANCHE,BULLDOZE
# landorus_incarnate,MUD_SHOT,ROCK_SLIDE,EARTH_POWER
# reshiram,DRAGON_BREATH,CRUNCH,OVERHEAT
# zapdos,THUNDER_SHOCK,DRILL_PECK,THUNDERBOLT
# metagross,BULLET_PUNCH,METEOR_MASH,EARTHQUAKE
# """
