diff --git a/.gitignore b/.gitignore index e8d4321..8c35753 100644 --- a/.gitignore +++ b/.gitignore @@ -166,6 +166,5 @@ venv-pokemon/ # showdown pokemon-showdown/ -# Outputs +# Outputs outputs/* - diff --git a/.gitmodules b/.gitmodules index de318d3..6c4d528 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "showdown"] - path = showdown - url = git@github.com:phinate/showdown.git [submodule "poke-env"] path = poke-env url = git@github.com:AoifeHughes/poke-env.git diff --git a/src/p2lab/poke_stats/POKE_STATS.md b/poke_stats/POKE_STATS.md similarity index 100% rename from src/p2lab/poke_stats/POKE_STATS.md rename to poke_stats/POKE_STATS.md diff --git a/poke_stats/__init__.py b/poke_stats/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/p2lab/poke_stats/delete_pngs.py b/poke_stats/delete_pngs.py similarity index 91% rename from src/p2lab/poke_stats/delete_pngs.py rename to poke_stats/delete_pngs.py index 932c24e..e611786 100644 --- a/src/p2lab/poke_stats/delete_pngs.py +++ b/poke_stats/delete_pngs.py @@ -1,6 +1,7 @@ +from __future__ import annotations + import os import pickle -import re # Directory path where the files are located directory = "/Users/lfrance/OneDrive - The Alan Turing Institute/002_Projects/Pokemon/poke-images/pokesprite/pokemon-gen8/regular" @@ -25,4 +26,4 @@ if pokemon_name not in pokemon_names: # Delete the file os.remove(file_path) - print(f"Deleted file: {filename}") \ No newline at end of file + print(f"Deleted file: {filename}") diff --git a/poke_stats/poke_1v1_fighter.py b/poke_stats/poke_1v1_fighter.py new file mode 100644 index 0000000..f17e5bd --- /dev/null +++ b/poke_stats/poke_1v1_fighter.py @@ -0,0 +1,166 @@ +# 1v1 fights for the pokemon for stats. +# Author: Edmund Dable-Heath +""" + Setting each of the 150 pokemon to fight each other pokemon until either a cutoff is + reached or the variation of the win ratio over a history of s fights falls below a + threshold. +""" + +# Imports include reference to potential scripts +# import pop_gen +# import fight_sim +from __future__ import annotations + +import asyncio +import pickle +from itertools import combinations_with_replacement as cwr +from pathlib import Path +from typing import TYPE_CHECKING + +import numpy as np +from poke_env import PlayerConfiguration +from poke_env.player import SimpleHeuristicsPlayer +from run import generate_gen_1_teams, import_pool, run_battles + +from p2lab.gen_data import gen_1_pokemon + +if TYPE_CHECKING: + from p2lab.team import Team + +# Actual code ========================================================================== + + +def gen_pop() -> list[Team]: + """Generate the population of 151 pokemon objects ready to fight. + + NB: This can be done more explicity here, i.e. implement the rejection sampling + in this script, but I will simplify away from that for now. + """ + pool = import_pool(team_string=gen_1_pokemon()) + return generate_gen_1_teams(pool) + + +async def duel(poke_1, poke_2, player_1, player_2) -> bool: + """Simulate a fight between a pair of pokemon, with a result of True if poke_1 + wins. + + Args: + poke_1 (poke_object): pokemon_1 (IN THE RED CORNER) + poke_2 (poke_object): pokemon_2 (IN THE BLUE CORNER) + + Returns: + bool: True if pokemon 1 is victorious. + """ + return await run_battles([[0, 1]], [poke_1, poke_2], player_1, player_2, 1) + + +async def duel_to_convergence( + poke_1, + poke_2, + p1, + p2, + cutoff: int, +) -> tuple(float, float): + """DUEL TO THE DEATH! (or at least a converged win ratio.....) + + For two pokemon, duel until the win ration converges or cutoff is reached. + Return ratios scaled by number of fights. + + TODO: make lookback function of number of fights? + + Args: + poke_1 (poke_object): pokemon_1 (GLADIATOR, READY!) + poke_2 (poke_object): pokemon_2 (GLADIATOR, READY!) + var_threshold (float): threshold for convergence of win ratio variance. + look_back: how man previous ratio values to consider. + cutoff: max iters to run this. + + Returns: + (poke_wins_1, poke_wins_2) tuple(float, float): + poke_wins_i = (no wins of poke_i) / (no of duels) f + """ + count = 0 + poke_win_1 = 0 + poke_win_2 = 0 + while count < cutoff: + count += 1 + res = await duel(poke_1, poke_2, p1, p2) + if bool(res[0][0]): + poke_win_1 += 1 + else: + poke_win_2 += 1 + return poke_win_1 / count, poke_win_2 / count + + +async def main(**kwargs): + # Generate a population + pokemons = gen_pop() + poke_num = len(pokemons) + + # Read the poke_dict for results + with Path.open("poke_base_stats.pkl", "rb") as f: + poke_dict = pickle.load(f) + + conversion_dict = { + "mr-mime": "mr. mime", + "farfetchd": "farfetch'd", + "nidoran-m": "nidoran♂", + "nidoran-f": "nidoran♀", + } + # flip the dict + conversion_dict = {v: k for k, v in conversion_dict.items()} + poke_names = [] + for poke in pokemons: + if poke.first_name.lower() in conversion_dict: + print("sgewrojoiwjhgnwil") + poke_names.append(conversion_dict[poke.first_name.lower()]) + else: + poke_names.append(poke.first_name.lower()) + + # print(poke_names) + # print(poke_dict.keys()) + assert set(poke_names) == set(poke_dict.keys()) + + # Instantiate results matrix (we know n = 151) + res_arr = np.zeros((poke_num, poke_num)) + + # Instantiate players + player_1 = SimpleHeuristicsPlayer( + PlayerConfiguration("Player 1", None), battle_format="gen7anythinggoes" + ) + player_2 = SimpleHeuristicsPlayer( + PlayerConfiguration("Player 2", None), battle_format="gen7anythinggoes" + ) + # Duel to convergence to get stats + for dueling_partners_id in cwr(list(range(len(pokemons))), 2): + i, j = dueling_partners_id + # print(f"IN THE RED CORNER: {poke_names[i]}") + # print(f"IN THE BLUE CORNER: {poke_names[j]}") + poke_ratio_1, poke_ratio_2 = await duel_to_convergence( + pokemons[i], + pokemons[j], + player_1, + player_2, + kwargs["cutoff"], + ) + if i == j: + res_arr[i, i] += poke_ratio_1 + res_arr[i, j] += poke_ratio_1 + res_arr[j, i] += poke_ratio_2 + + # Average over to get stats + avg_win_ratio = np.mean(res_arr, axis=0) + for i in range(len(poke_names)): + poke_dict[poke_names[i]]["average_win_ratio"] = avg_win_ratio[i] + + # Write poke dict to storage + with Path.open("poke_fight_results.pkl", "wb") as fp: + pickle.dump(poke_dict, fp) + return poke_dict + + +if __name__ == "__main__": + # Pars hardcoded in for now as should be single run. + pars = {"cutoff": 10} + + asyncio.get_event_loop().run_until_complete(main(**pars)) diff --git a/src/p2lab/poke_stats/poke_base_stats.pkl b/poke_stats/poke_base_stats.pkl similarity index 92% rename from src/p2lab/poke_stats/poke_base_stats.pkl rename to poke_stats/poke_base_stats.pkl index 285f6d1..758227e 100644 Binary files a/src/p2lab/poke_stats/poke_base_stats.pkl and b/poke_stats/poke_base_stats.pkl differ diff --git a/poke_stats/poke_fight_results.pkl b/poke_stats/poke_fight_results.pkl new file mode 100644 index 0000000..a09255c Binary files /dev/null and b/poke_stats/poke_fight_results.pkl differ diff --git a/src/p2lab/poke_stats/poke_stats.ipynb b/poke_stats/poke_stats.ipynb similarity index 99% rename from src/p2lab/poke_stats/poke_stats.ipynb rename to poke_stats/poke_stats.ipynb index 2616f85..0cdb8eb 100644 --- a/src/p2lab/poke_stats/poke_stats.ipynb +++ b/poke_stats/poke_stats.ipynb @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 107, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 108, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -65,7 +65,7 @@ }, { "cell_type": "code", - "execution_count": 109, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -77,26 +77,26 @@ }, { "cell_type": "code", - "execution_count": 110, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'tier': 'D',\n", - " 'type': ['Normal', 'Flying'],\n", - " 'stats': {'hp': 52, 'atk': 65, 'def': 55, 'spa': 58, 'spd': 58, 'spe': 60},\n", - " 'base_stat_total': 348}" + "{'tier': 'F',\n", + " 'type': ['Bug', 'Poison'],\n", + " 'stats': {'hp': 40, 'atk': 35, 'def': 30, 'spa': 20, 'spd': 20, 'spe': 50},\n", + " 'base_stat_total': 195}" ] }, - "execution_count": 110, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test with the obligatory snorlax\n", - "poke_dict[\"farfetchd\"]" + "poke_dict[\"weedle\"]" ] }, { diff --git a/src/p2lab/poke_stats/poke_stats.py b/poke_stats/poke_stats.py similarity index 99% rename from src/p2lab/poke_stats/poke_stats.py rename to poke_stats/poke_stats.py index a52a9ec..1487f76 100644 --- a/src/p2lab/poke_stats/poke_stats.py +++ b/poke_stats/poke_stats.py @@ -552,7 +552,7 @@ }, }, { - "name": "Mr. Mime", + "name": "Mr-Mime", "hp": 40, "atk": 45, "def": 65, @@ -2799,7 +2799,7 @@ }, }, { - "name": "Farfetch'd", + "name": "Farfetchd", "hp": 52, "atk": 65, "def": 55, @@ -3182,9 +3182,21 @@ poke_stats = {} + format_to_tier = { + "Uber": "S", + "OU": "A", + "UUBL": "B+", + "UU": "B", + "NUBL": "C+", + "NU": "C", + "PU": "D", + "NFE": "E", + "LC": "F", + } + for d in list_of_poke_dicts: poke_stats[d["name"].lower()] = { - "tier": d["formats"], + "tier": format_to_tier[d["formats"][0]], "type": d["types"], "stats": { "hp": d["hp"], @@ -3195,18 +3207,9 @@ "spe": d["spe"], }, } - # print(f'some poke_stats {poke_stats}') - # print(poke_stats[d['name'].lower()]) poke_stats[d["name"].lower()]["base_stat_total"] = sum( poke_stats[d["name"].lower()]["stats"].values() ) - # poke_choice = input("Which pokemon you wanna know about?") - - # print(type(poke_choice)) - - # print(f"stats for {str(poke_choice)}: {poke_stats[str(poke_choice)]}") - with open("poke_base_stats.pkl", "wb") as fp: pickle.dump(poke_stats, fp) - diff --git a/run.py b/poke_stats/run.py similarity index 98% rename from run.py rename to poke_stats/run.py index c9b5789..a6c8229 100644 --- a/run.py +++ b/poke_stats/run.py @@ -116,8 +116,9 @@ async def run_battles( player_2.reset_battles() return np.array(results) + def generate_gen_1_teams(pool): - return [Team([pkmn]) for pkmn in pool] + return [Team([pkmn]) for pkmn in pool] async def main( @@ -131,12 +132,13 @@ async def main( # pool = generate_pool(pool_size, export=True) # new_pool = import_pool(filename="pool.txt") pool = import_pool(team_string=gen_1_pokemon()) - print(f"pool: {pool}") + # print(f"pool: {pool}") print(f"pool shape: {pool.shape}") # print(f"new pool: {new_pool}") # print(f"new pool shape: {new_pool.shape}") # teams = generate_teams(pool, num_teams=num_teams, team_size=team_size) teams = generate_gen_1_teams(pool) + print(teams[0].pokemon) matches = dense(teams) print(f"matches: {matches}") print(f"matches shape: {matches.shape}") diff --git a/src/p2lab/poke_stats/sprites/abra.png b/poke_stats/sprites/abra.png similarity index 100% rename from src/p2lab/poke_stats/sprites/abra.png rename to poke_stats/sprites/abra.png diff --git a/src/p2lab/poke_stats/sprites/aerodactyl.png b/poke_stats/sprites/aerodactyl.png similarity index 100% rename from src/p2lab/poke_stats/sprites/aerodactyl.png rename to poke_stats/sprites/aerodactyl.png diff --git a/src/p2lab/poke_stats/sprites/alakazam.png b/poke_stats/sprites/alakazam.png similarity index 100% rename from src/p2lab/poke_stats/sprites/alakazam.png rename to poke_stats/sprites/alakazam.png diff --git a/src/p2lab/poke_stats/sprites/arbok.png b/poke_stats/sprites/arbok.png similarity index 100% rename from src/p2lab/poke_stats/sprites/arbok.png rename to poke_stats/sprites/arbok.png diff --git a/src/p2lab/poke_stats/sprites/arcanine.png b/poke_stats/sprites/arcanine.png similarity index 100% rename from src/p2lab/poke_stats/sprites/arcanine.png rename to poke_stats/sprites/arcanine.png diff --git a/src/p2lab/poke_stats/sprites/articuno.png b/poke_stats/sprites/articuno.png similarity index 100% rename from src/p2lab/poke_stats/sprites/articuno.png rename to poke_stats/sprites/articuno.png diff --git a/src/p2lab/poke_stats/sprites/beedrill.png b/poke_stats/sprites/beedrill.png similarity index 100% rename from src/p2lab/poke_stats/sprites/beedrill.png rename to poke_stats/sprites/beedrill.png diff --git a/src/p2lab/poke_stats/sprites/bellsprout.png b/poke_stats/sprites/bellsprout.png similarity index 100% rename from src/p2lab/poke_stats/sprites/bellsprout.png rename to poke_stats/sprites/bellsprout.png diff --git a/src/p2lab/poke_stats/sprites/blastoise.png b/poke_stats/sprites/blastoise.png similarity index 100% rename from src/p2lab/poke_stats/sprites/blastoise.png rename to poke_stats/sprites/blastoise.png diff --git a/src/p2lab/poke_stats/sprites/bulbasaur.png b/poke_stats/sprites/bulbasaur.png similarity index 100% rename from src/p2lab/poke_stats/sprites/bulbasaur.png rename to poke_stats/sprites/bulbasaur.png diff --git a/src/p2lab/poke_stats/sprites/butterfree.png b/poke_stats/sprites/butterfree.png similarity index 100% rename from src/p2lab/poke_stats/sprites/butterfree.png rename to poke_stats/sprites/butterfree.png diff --git a/src/p2lab/poke_stats/sprites/caterpie.png b/poke_stats/sprites/caterpie.png similarity index 100% rename from src/p2lab/poke_stats/sprites/caterpie.png rename to poke_stats/sprites/caterpie.png diff --git a/src/p2lab/poke_stats/sprites/chansey.png b/poke_stats/sprites/chansey.png similarity index 100% rename from src/p2lab/poke_stats/sprites/chansey.png rename to poke_stats/sprites/chansey.png diff --git a/src/p2lab/poke_stats/sprites/charizard.png b/poke_stats/sprites/charizard.png similarity index 100% rename from src/p2lab/poke_stats/sprites/charizard.png rename to poke_stats/sprites/charizard.png diff --git a/src/p2lab/poke_stats/sprites/charmander.png b/poke_stats/sprites/charmander.png similarity index 100% rename from src/p2lab/poke_stats/sprites/charmander.png rename to poke_stats/sprites/charmander.png diff --git a/src/p2lab/poke_stats/sprites/charmeleon.png b/poke_stats/sprites/charmeleon.png similarity index 100% rename from src/p2lab/poke_stats/sprites/charmeleon.png rename to poke_stats/sprites/charmeleon.png diff --git a/src/p2lab/poke_stats/sprites/clefable.png b/poke_stats/sprites/clefable.png similarity index 100% rename from src/p2lab/poke_stats/sprites/clefable.png rename to poke_stats/sprites/clefable.png diff --git a/src/p2lab/poke_stats/sprites/clefairy.png b/poke_stats/sprites/clefairy.png similarity index 100% rename from src/p2lab/poke_stats/sprites/clefairy.png rename to poke_stats/sprites/clefairy.png diff --git a/src/p2lab/poke_stats/sprites/cloyster.png b/poke_stats/sprites/cloyster.png similarity index 100% rename from src/p2lab/poke_stats/sprites/cloyster.png rename to poke_stats/sprites/cloyster.png diff --git a/src/p2lab/poke_stats/sprites/cubone.png b/poke_stats/sprites/cubone.png similarity index 100% rename from src/p2lab/poke_stats/sprites/cubone.png rename to poke_stats/sprites/cubone.png diff --git a/src/p2lab/poke_stats/sprites/dewgong.png b/poke_stats/sprites/dewgong.png similarity index 100% rename from src/p2lab/poke_stats/sprites/dewgong.png rename to poke_stats/sprites/dewgong.png diff --git a/src/p2lab/poke_stats/sprites/diglett.png b/poke_stats/sprites/diglett.png similarity index 100% rename from src/p2lab/poke_stats/sprites/diglett.png rename to poke_stats/sprites/diglett.png diff --git a/src/p2lab/poke_stats/sprites/ditto.png b/poke_stats/sprites/ditto.png similarity index 100% rename from src/p2lab/poke_stats/sprites/ditto.png rename to poke_stats/sprites/ditto.png diff --git a/src/p2lab/poke_stats/sprites/dodrio.png b/poke_stats/sprites/dodrio.png similarity index 100% rename from src/p2lab/poke_stats/sprites/dodrio.png rename to poke_stats/sprites/dodrio.png diff --git a/src/p2lab/poke_stats/sprites/doduo.png b/poke_stats/sprites/doduo.png similarity index 100% rename from src/p2lab/poke_stats/sprites/doduo.png rename to poke_stats/sprites/doduo.png diff --git a/src/p2lab/poke_stats/sprites/dragonair.png b/poke_stats/sprites/dragonair.png similarity index 100% rename from src/p2lab/poke_stats/sprites/dragonair.png rename to poke_stats/sprites/dragonair.png diff --git a/src/p2lab/poke_stats/sprites/dragonite.png b/poke_stats/sprites/dragonite.png similarity index 100% rename from src/p2lab/poke_stats/sprites/dragonite.png rename to poke_stats/sprites/dragonite.png diff --git a/src/p2lab/poke_stats/sprites/dratini.png b/poke_stats/sprites/dratini.png similarity index 100% rename from src/p2lab/poke_stats/sprites/dratini.png rename to poke_stats/sprites/dratini.png diff --git a/src/p2lab/poke_stats/sprites/drowzee.png b/poke_stats/sprites/drowzee.png similarity index 100% rename from src/p2lab/poke_stats/sprites/drowzee.png rename to poke_stats/sprites/drowzee.png diff --git a/src/p2lab/poke_stats/sprites/dugtrio.png b/poke_stats/sprites/dugtrio.png similarity index 100% rename from src/p2lab/poke_stats/sprites/dugtrio.png rename to poke_stats/sprites/dugtrio.png diff --git a/src/p2lab/poke_stats/sprites/eevee.png b/poke_stats/sprites/eevee.png similarity index 100% rename from src/p2lab/poke_stats/sprites/eevee.png rename to poke_stats/sprites/eevee.png diff --git a/src/p2lab/poke_stats/sprites/ekans.png b/poke_stats/sprites/ekans.png similarity index 100% rename from src/p2lab/poke_stats/sprites/ekans.png rename to poke_stats/sprites/ekans.png diff --git a/src/p2lab/poke_stats/sprites/electabuzz.png b/poke_stats/sprites/electabuzz.png similarity index 100% rename from src/p2lab/poke_stats/sprites/electabuzz.png rename to poke_stats/sprites/electabuzz.png diff --git a/src/p2lab/poke_stats/sprites/electrode.png b/poke_stats/sprites/electrode.png similarity index 100% rename from src/p2lab/poke_stats/sprites/electrode.png rename to poke_stats/sprites/electrode.png diff --git a/src/p2lab/poke_stats/sprites/exeggcute.png b/poke_stats/sprites/exeggcute.png similarity index 100% rename from src/p2lab/poke_stats/sprites/exeggcute.png rename to poke_stats/sprites/exeggcute.png diff --git a/src/p2lab/poke_stats/sprites/exeggutor.png b/poke_stats/sprites/exeggutor.png similarity index 100% rename from src/p2lab/poke_stats/sprites/exeggutor.png rename to poke_stats/sprites/exeggutor.png diff --git a/src/p2lab/poke_stats/sprites/farfetchd.png b/poke_stats/sprites/farfetchd.png similarity index 100% rename from src/p2lab/poke_stats/sprites/farfetchd.png rename to poke_stats/sprites/farfetchd.png diff --git a/src/p2lab/poke_stats/sprites/fearow.png b/poke_stats/sprites/fearow.png similarity index 100% rename from src/p2lab/poke_stats/sprites/fearow.png rename to poke_stats/sprites/fearow.png diff --git a/src/p2lab/poke_stats/sprites/flareon.png b/poke_stats/sprites/flareon.png similarity index 100% rename from src/p2lab/poke_stats/sprites/flareon.png rename to poke_stats/sprites/flareon.png diff --git a/src/p2lab/poke_stats/sprites/gastly.png b/poke_stats/sprites/gastly.png similarity index 100% rename from src/p2lab/poke_stats/sprites/gastly.png rename to poke_stats/sprites/gastly.png diff --git a/src/p2lab/poke_stats/sprites/gengar.png b/poke_stats/sprites/gengar.png similarity index 100% rename from src/p2lab/poke_stats/sprites/gengar.png rename to poke_stats/sprites/gengar.png diff --git a/src/p2lab/poke_stats/sprites/geodude.png b/poke_stats/sprites/geodude.png similarity index 100% rename from src/p2lab/poke_stats/sprites/geodude.png rename to poke_stats/sprites/geodude.png diff --git a/src/p2lab/poke_stats/sprites/gloom.png b/poke_stats/sprites/gloom.png similarity index 100% rename from src/p2lab/poke_stats/sprites/gloom.png rename to poke_stats/sprites/gloom.png diff --git a/src/p2lab/poke_stats/sprites/golbat.png b/poke_stats/sprites/golbat.png similarity index 100% rename from src/p2lab/poke_stats/sprites/golbat.png rename to poke_stats/sprites/golbat.png diff --git a/src/p2lab/poke_stats/sprites/goldeen.png b/poke_stats/sprites/goldeen.png similarity index 100% rename from src/p2lab/poke_stats/sprites/goldeen.png rename to poke_stats/sprites/goldeen.png diff --git a/src/p2lab/poke_stats/sprites/golduck.png b/poke_stats/sprites/golduck.png similarity index 100% rename from src/p2lab/poke_stats/sprites/golduck.png rename to poke_stats/sprites/golduck.png diff --git a/src/p2lab/poke_stats/sprites/golem.png b/poke_stats/sprites/golem.png similarity index 100% rename from src/p2lab/poke_stats/sprites/golem.png rename to poke_stats/sprites/golem.png diff --git a/src/p2lab/poke_stats/sprites/graveler.png b/poke_stats/sprites/graveler.png similarity index 100% rename from src/p2lab/poke_stats/sprites/graveler.png rename to poke_stats/sprites/graveler.png diff --git a/src/p2lab/poke_stats/sprites/grimer.png b/poke_stats/sprites/grimer.png similarity index 100% rename from src/p2lab/poke_stats/sprites/grimer.png rename to poke_stats/sprites/grimer.png diff --git a/src/p2lab/poke_stats/sprites/growlithe.png b/poke_stats/sprites/growlithe.png similarity index 100% rename from src/p2lab/poke_stats/sprites/growlithe.png rename to poke_stats/sprites/growlithe.png diff --git a/src/p2lab/poke_stats/sprites/gyarados.png b/poke_stats/sprites/gyarados.png similarity index 100% rename from src/p2lab/poke_stats/sprites/gyarados.png rename to poke_stats/sprites/gyarados.png diff --git a/src/p2lab/poke_stats/sprites/haunter.png b/poke_stats/sprites/haunter.png similarity index 100% rename from src/p2lab/poke_stats/sprites/haunter.png rename to poke_stats/sprites/haunter.png diff --git a/src/p2lab/poke_stats/sprites/hitmonchan.png b/poke_stats/sprites/hitmonchan.png similarity index 100% rename from src/p2lab/poke_stats/sprites/hitmonchan.png rename to poke_stats/sprites/hitmonchan.png diff --git a/src/p2lab/poke_stats/sprites/hitmonlee.png b/poke_stats/sprites/hitmonlee.png similarity index 100% rename from src/p2lab/poke_stats/sprites/hitmonlee.png rename to poke_stats/sprites/hitmonlee.png diff --git a/src/p2lab/poke_stats/sprites/horsea.png b/poke_stats/sprites/horsea.png similarity index 100% rename from src/p2lab/poke_stats/sprites/horsea.png rename to poke_stats/sprites/horsea.png diff --git a/src/p2lab/poke_stats/sprites/hypno.png b/poke_stats/sprites/hypno.png similarity index 100% rename from src/p2lab/poke_stats/sprites/hypno.png rename to poke_stats/sprites/hypno.png diff --git a/src/p2lab/poke_stats/sprites/ivysaur.png b/poke_stats/sprites/ivysaur.png similarity index 100% rename from src/p2lab/poke_stats/sprites/ivysaur.png rename to poke_stats/sprites/ivysaur.png diff --git a/src/p2lab/poke_stats/sprites/jigglypuff.png b/poke_stats/sprites/jigglypuff.png similarity index 100% rename from src/p2lab/poke_stats/sprites/jigglypuff.png rename to poke_stats/sprites/jigglypuff.png diff --git a/src/p2lab/poke_stats/sprites/jolteon.png b/poke_stats/sprites/jolteon.png similarity index 100% rename from src/p2lab/poke_stats/sprites/jolteon.png rename to poke_stats/sprites/jolteon.png diff --git a/src/p2lab/poke_stats/sprites/jynx.png b/poke_stats/sprites/jynx.png similarity index 100% rename from src/p2lab/poke_stats/sprites/jynx.png rename to poke_stats/sprites/jynx.png diff --git a/src/p2lab/poke_stats/sprites/kabuto.png b/poke_stats/sprites/kabuto.png similarity index 100% rename from src/p2lab/poke_stats/sprites/kabuto.png rename to poke_stats/sprites/kabuto.png diff --git a/src/p2lab/poke_stats/sprites/kabutops.png b/poke_stats/sprites/kabutops.png similarity index 100% rename from src/p2lab/poke_stats/sprites/kabutops.png rename to poke_stats/sprites/kabutops.png diff --git a/src/p2lab/poke_stats/sprites/kadabra.png b/poke_stats/sprites/kadabra.png similarity index 100% rename from src/p2lab/poke_stats/sprites/kadabra.png rename to poke_stats/sprites/kadabra.png diff --git a/src/p2lab/poke_stats/sprites/kakuna.png b/poke_stats/sprites/kakuna.png similarity index 100% rename from src/p2lab/poke_stats/sprites/kakuna.png rename to poke_stats/sprites/kakuna.png diff --git a/src/p2lab/poke_stats/sprites/kangaskhan.png b/poke_stats/sprites/kangaskhan.png similarity index 100% rename from src/p2lab/poke_stats/sprites/kangaskhan.png rename to poke_stats/sprites/kangaskhan.png diff --git a/src/p2lab/poke_stats/sprites/kingler.png b/poke_stats/sprites/kingler.png similarity index 100% rename from src/p2lab/poke_stats/sprites/kingler.png rename to poke_stats/sprites/kingler.png diff --git a/src/p2lab/poke_stats/sprites/koffing.png b/poke_stats/sprites/koffing.png similarity index 100% rename from src/p2lab/poke_stats/sprites/koffing.png rename to poke_stats/sprites/koffing.png diff --git a/src/p2lab/poke_stats/sprites/krabby.png b/poke_stats/sprites/krabby.png similarity index 100% rename from src/p2lab/poke_stats/sprites/krabby.png rename to poke_stats/sprites/krabby.png diff --git a/src/p2lab/poke_stats/sprites/lapras.png b/poke_stats/sprites/lapras.png similarity index 100% rename from src/p2lab/poke_stats/sprites/lapras.png rename to poke_stats/sprites/lapras.png diff --git a/src/p2lab/poke_stats/sprites/lickitung.png b/poke_stats/sprites/lickitung.png similarity index 100% rename from src/p2lab/poke_stats/sprites/lickitung.png rename to poke_stats/sprites/lickitung.png diff --git a/src/p2lab/poke_stats/sprites/machamp.png b/poke_stats/sprites/machamp.png similarity index 100% rename from src/p2lab/poke_stats/sprites/machamp.png rename to poke_stats/sprites/machamp.png diff --git a/src/p2lab/poke_stats/sprites/machoke.png b/poke_stats/sprites/machoke.png similarity index 100% rename from src/p2lab/poke_stats/sprites/machoke.png rename to poke_stats/sprites/machoke.png diff --git a/src/p2lab/poke_stats/sprites/machop.png b/poke_stats/sprites/machop.png similarity index 100% rename from src/p2lab/poke_stats/sprites/machop.png rename to poke_stats/sprites/machop.png diff --git a/src/p2lab/poke_stats/sprites/magikarp.png b/poke_stats/sprites/magikarp.png similarity index 100% rename from src/p2lab/poke_stats/sprites/magikarp.png rename to poke_stats/sprites/magikarp.png diff --git a/src/p2lab/poke_stats/sprites/magmar.png b/poke_stats/sprites/magmar.png similarity index 100% rename from src/p2lab/poke_stats/sprites/magmar.png rename to poke_stats/sprites/magmar.png diff --git a/src/p2lab/poke_stats/sprites/magnemite.png b/poke_stats/sprites/magnemite.png similarity index 100% rename from src/p2lab/poke_stats/sprites/magnemite.png rename to poke_stats/sprites/magnemite.png diff --git a/src/p2lab/poke_stats/sprites/magneton.png b/poke_stats/sprites/magneton.png similarity index 100% rename from src/p2lab/poke_stats/sprites/magneton.png rename to poke_stats/sprites/magneton.png diff --git a/src/p2lab/poke_stats/sprites/mankey.png b/poke_stats/sprites/mankey.png similarity index 100% rename from src/p2lab/poke_stats/sprites/mankey.png rename to poke_stats/sprites/mankey.png diff --git a/src/p2lab/poke_stats/sprites/marowak.png b/poke_stats/sprites/marowak.png similarity index 100% rename from src/p2lab/poke_stats/sprites/marowak.png rename to poke_stats/sprites/marowak.png diff --git a/src/p2lab/poke_stats/sprites/meowth.png b/poke_stats/sprites/meowth.png similarity index 100% rename from src/p2lab/poke_stats/sprites/meowth.png rename to poke_stats/sprites/meowth.png diff --git a/src/p2lab/poke_stats/sprites/metapod.png b/poke_stats/sprites/metapod.png similarity index 100% rename from src/p2lab/poke_stats/sprites/metapod.png rename to poke_stats/sprites/metapod.png diff --git a/src/p2lab/poke_stats/sprites/mew.png b/poke_stats/sprites/mew.png similarity index 100% rename from src/p2lab/poke_stats/sprites/mew.png rename to poke_stats/sprites/mew.png diff --git a/src/p2lab/poke_stats/sprites/mewtwo.png b/poke_stats/sprites/mewtwo.png similarity index 100% rename from src/p2lab/poke_stats/sprites/mewtwo.png rename to poke_stats/sprites/mewtwo.png diff --git a/src/p2lab/poke_stats/sprites/moltres.png b/poke_stats/sprites/moltres.png similarity index 100% rename from src/p2lab/poke_stats/sprites/moltres.png rename to poke_stats/sprites/moltres.png diff --git a/src/p2lab/poke_stats/sprites/mr-mime.png b/poke_stats/sprites/mr-mime.png similarity index 100% rename from src/p2lab/poke_stats/sprites/mr-mime.png rename to poke_stats/sprites/mr-mime.png diff --git a/src/p2lab/poke_stats/sprites/muk.png b/poke_stats/sprites/muk.png similarity index 100% rename from src/p2lab/poke_stats/sprites/muk.png rename to poke_stats/sprites/muk.png diff --git a/src/p2lab/poke_stats/sprites/nidoking.png b/poke_stats/sprites/nidoking.png similarity index 100% rename from src/p2lab/poke_stats/sprites/nidoking.png rename to poke_stats/sprites/nidoking.png diff --git a/src/p2lab/poke_stats/sprites/nidoqueen.png b/poke_stats/sprites/nidoqueen.png similarity index 100% rename from src/p2lab/poke_stats/sprites/nidoqueen.png rename to poke_stats/sprites/nidoqueen.png diff --git a/src/p2lab/poke_stats/sprites/nidoran-f.png b/poke_stats/sprites/nidoran-f.png similarity index 100% rename from src/p2lab/poke_stats/sprites/nidoran-f.png rename to poke_stats/sprites/nidoran-f.png diff --git a/src/p2lab/poke_stats/sprites/nidoran-m.png b/poke_stats/sprites/nidoran-m.png similarity index 100% rename from src/p2lab/poke_stats/sprites/nidoran-m.png rename to poke_stats/sprites/nidoran-m.png diff --git a/src/p2lab/poke_stats/sprites/nidorina.png b/poke_stats/sprites/nidorina.png similarity index 100% rename from src/p2lab/poke_stats/sprites/nidorina.png rename to poke_stats/sprites/nidorina.png diff --git a/src/p2lab/poke_stats/sprites/nidorino.png b/poke_stats/sprites/nidorino.png similarity index 100% rename from src/p2lab/poke_stats/sprites/nidorino.png rename to poke_stats/sprites/nidorino.png diff --git a/src/p2lab/poke_stats/sprites/ninetales.png b/poke_stats/sprites/ninetales.png similarity index 100% rename from src/p2lab/poke_stats/sprites/ninetales.png rename to poke_stats/sprites/ninetales.png diff --git a/src/p2lab/poke_stats/sprites/oddish.png b/poke_stats/sprites/oddish.png similarity index 100% rename from src/p2lab/poke_stats/sprites/oddish.png rename to poke_stats/sprites/oddish.png diff --git a/src/p2lab/poke_stats/sprites/omanyte.png b/poke_stats/sprites/omanyte.png similarity index 100% rename from src/p2lab/poke_stats/sprites/omanyte.png rename to poke_stats/sprites/omanyte.png diff --git a/src/p2lab/poke_stats/sprites/omastar.png b/poke_stats/sprites/omastar.png similarity index 100% rename from src/p2lab/poke_stats/sprites/omastar.png rename to poke_stats/sprites/omastar.png diff --git a/src/p2lab/poke_stats/sprites/onix.png b/poke_stats/sprites/onix.png similarity index 100% rename from src/p2lab/poke_stats/sprites/onix.png rename to poke_stats/sprites/onix.png diff --git a/src/p2lab/poke_stats/sprites/paras.png b/poke_stats/sprites/paras.png similarity index 100% rename from src/p2lab/poke_stats/sprites/paras.png rename to poke_stats/sprites/paras.png diff --git a/src/p2lab/poke_stats/sprites/parasect.png b/poke_stats/sprites/parasect.png similarity index 100% rename from src/p2lab/poke_stats/sprites/parasect.png rename to poke_stats/sprites/parasect.png diff --git a/src/p2lab/poke_stats/sprites/persian.png b/poke_stats/sprites/persian.png similarity index 100% rename from src/p2lab/poke_stats/sprites/persian.png rename to poke_stats/sprites/persian.png diff --git a/src/p2lab/poke_stats/sprites/pidgeot.png b/poke_stats/sprites/pidgeot.png similarity index 100% rename from src/p2lab/poke_stats/sprites/pidgeot.png rename to poke_stats/sprites/pidgeot.png diff --git a/src/p2lab/poke_stats/sprites/pidgeotto.png b/poke_stats/sprites/pidgeotto.png similarity index 100% rename from src/p2lab/poke_stats/sprites/pidgeotto.png rename to poke_stats/sprites/pidgeotto.png diff --git a/src/p2lab/poke_stats/sprites/pidgey.png b/poke_stats/sprites/pidgey.png similarity index 100% rename from src/p2lab/poke_stats/sprites/pidgey.png rename to poke_stats/sprites/pidgey.png diff --git a/src/p2lab/poke_stats/sprites/pikachu.png b/poke_stats/sprites/pikachu.png similarity index 100% rename from src/p2lab/poke_stats/sprites/pikachu.png rename to poke_stats/sprites/pikachu.png diff --git a/src/p2lab/poke_stats/sprites/pinsir.png b/poke_stats/sprites/pinsir.png similarity index 100% rename from src/p2lab/poke_stats/sprites/pinsir.png rename to poke_stats/sprites/pinsir.png diff --git a/src/p2lab/poke_stats/sprites/poliwag.png b/poke_stats/sprites/poliwag.png similarity index 100% rename from src/p2lab/poke_stats/sprites/poliwag.png rename to poke_stats/sprites/poliwag.png diff --git a/src/p2lab/poke_stats/sprites/poliwhirl.png b/poke_stats/sprites/poliwhirl.png similarity index 100% rename from src/p2lab/poke_stats/sprites/poliwhirl.png rename to poke_stats/sprites/poliwhirl.png diff --git a/src/p2lab/poke_stats/sprites/poliwrath.png b/poke_stats/sprites/poliwrath.png similarity index 100% rename from src/p2lab/poke_stats/sprites/poliwrath.png rename to poke_stats/sprites/poliwrath.png diff --git a/src/p2lab/poke_stats/sprites/ponyta.png b/poke_stats/sprites/ponyta.png similarity index 100% rename from src/p2lab/poke_stats/sprites/ponyta.png rename to poke_stats/sprites/ponyta.png diff --git a/src/p2lab/poke_stats/sprites/porygon.png b/poke_stats/sprites/porygon.png similarity index 100% rename from src/p2lab/poke_stats/sprites/porygon.png rename to poke_stats/sprites/porygon.png diff --git a/src/p2lab/poke_stats/sprites/primeape.png b/poke_stats/sprites/primeape.png similarity index 100% rename from src/p2lab/poke_stats/sprites/primeape.png rename to poke_stats/sprites/primeape.png diff --git a/src/p2lab/poke_stats/sprites/psyduck.png b/poke_stats/sprites/psyduck.png similarity index 100% rename from src/p2lab/poke_stats/sprites/psyduck.png rename to poke_stats/sprites/psyduck.png diff --git a/src/p2lab/poke_stats/sprites/raichu.png b/poke_stats/sprites/raichu.png similarity index 100% rename from src/p2lab/poke_stats/sprites/raichu.png rename to poke_stats/sprites/raichu.png diff --git a/src/p2lab/poke_stats/sprites/rapidash.png b/poke_stats/sprites/rapidash.png similarity index 100% rename from src/p2lab/poke_stats/sprites/rapidash.png rename to poke_stats/sprites/rapidash.png diff --git a/src/p2lab/poke_stats/sprites/raticate.png b/poke_stats/sprites/raticate.png similarity index 100% rename from src/p2lab/poke_stats/sprites/raticate.png rename to poke_stats/sprites/raticate.png diff --git a/src/p2lab/poke_stats/sprites/rattata.png b/poke_stats/sprites/rattata.png similarity index 100% rename from src/p2lab/poke_stats/sprites/rattata.png rename to poke_stats/sprites/rattata.png diff --git a/src/p2lab/poke_stats/sprites/rhydon.png b/poke_stats/sprites/rhydon.png similarity index 100% rename from src/p2lab/poke_stats/sprites/rhydon.png rename to poke_stats/sprites/rhydon.png diff --git a/src/p2lab/poke_stats/sprites/rhyhorn.png b/poke_stats/sprites/rhyhorn.png similarity index 100% rename from src/p2lab/poke_stats/sprites/rhyhorn.png rename to poke_stats/sprites/rhyhorn.png diff --git a/src/p2lab/poke_stats/sprites/sandshrew.png b/poke_stats/sprites/sandshrew.png similarity index 100% rename from src/p2lab/poke_stats/sprites/sandshrew.png rename to poke_stats/sprites/sandshrew.png diff --git a/src/p2lab/poke_stats/sprites/sandslash.png b/poke_stats/sprites/sandslash.png similarity index 100% rename from src/p2lab/poke_stats/sprites/sandslash.png rename to poke_stats/sprites/sandslash.png diff --git a/src/p2lab/poke_stats/sprites/scyther.png b/poke_stats/sprites/scyther.png similarity index 100% rename from src/p2lab/poke_stats/sprites/scyther.png rename to poke_stats/sprites/scyther.png diff --git a/src/p2lab/poke_stats/sprites/seadra.png b/poke_stats/sprites/seadra.png similarity index 100% rename from src/p2lab/poke_stats/sprites/seadra.png rename to poke_stats/sprites/seadra.png diff --git a/src/p2lab/poke_stats/sprites/seaking.png b/poke_stats/sprites/seaking.png similarity index 100% rename from src/p2lab/poke_stats/sprites/seaking.png rename to poke_stats/sprites/seaking.png diff --git a/src/p2lab/poke_stats/sprites/seel.png b/poke_stats/sprites/seel.png similarity index 100% rename from src/p2lab/poke_stats/sprites/seel.png rename to poke_stats/sprites/seel.png diff --git a/src/p2lab/poke_stats/sprites/shellder.png b/poke_stats/sprites/shellder.png similarity index 100% rename from src/p2lab/poke_stats/sprites/shellder.png rename to poke_stats/sprites/shellder.png diff --git a/src/p2lab/poke_stats/sprites/slowbro.png b/poke_stats/sprites/slowbro.png similarity index 100% rename from src/p2lab/poke_stats/sprites/slowbro.png rename to poke_stats/sprites/slowbro.png diff --git a/src/p2lab/poke_stats/sprites/slowpoke.png b/poke_stats/sprites/slowpoke.png similarity index 100% rename from src/p2lab/poke_stats/sprites/slowpoke.png rename to poke_stats/sprites/slowpoke.png diff --git a/src/p2lab/poke_stats/sprites/snorlax.png b/poke_stats/sprites/snorlax.png similarity index 100% rename from src/p2lab/poke_stats/sprites/snorlax.png rename to poke_stats/sprites/snorlax.png diff --git a/src/p2lab/poke_stats/sprites/spearow.png b/poke_stats/sprites/spearow.png similarity index 100% rename from src/p2lab/poke_stats/sprites/spearow.png rename to poke_stats/sprites/spearow.png diff --git a/src/p2lab/poke_stats/sprites/squirtle.png b/poke_stats/sprites/squirtle.png similarity index 100% rename from src/p2lab/poke_stats/sprites/squirtle.png rename to poke_stats/sprites/squirtle.png diff --git a/src/p2lab/poke_stats/sprites/starmie.png b/poke_stats/sprites/starmie.png similarity index 100% rename from src/p2lab/poke_stats/sprites/starmie.png rename to poke_stats/sprites/starmie.png diff --git a/src/p2lab/poke_stats/sprites/staryu.png b/poke_stats/sprites/staryu.png similarity index 100% rename from src/p2lab/poke_stats/sprites/staryu.png rename to poke_stats/sprites/staryu.png diff --git a/src/p2lab/poke_stats/sprites/tangela.png b/poke_stats/sprites/tangela.png similarity index 100% rename from src/p2lab/poke_stats/sprites/tangela.png rename to poke_stats/sprites/tangela.png diff --git a/src/p2lab/poke_stats/sprites/tauros.png b/poke_stats/sprites/tauros.png similarity index 100% rename from src/p2lab/poke_stats/sprites/tauros.png rename to poke_stats/sprites/tauros.png diff --git a/src/p2lab/poke_stats/sprites/tentacool.png b/poke_stats/sprites/tentacool.png similarity index 100% rename from src/p2lab/poke_stats/sprites/tentacool.png rename to poke_stats/sprites/tentacool.png diff --git a/src/p2lab/poke_stats/sprites/tentacruel.png b/poke_stats/sprites/tentacruel.png similarity index 100% rename from src/p2lab/poke_stats/sprites/tentacruel.png rename to poke_stats/sprites/tentacruel.png diff --git a/src/p2lab/poke_stats/sprites/vaporeon.png b/poke_stats/sprites/vaporeon.png similarity index 100% rename from src/p2lab/poke_stats/sprites/vaporeon.png rename to poke_stats/sprites/vaporeon.png diff --git a/src/p2lab/poke_stats/sprites/venomoth.png b/poke_stats/sprites/venomoth.png similarity index 100% rename from src/p2lab/poke_stats/sprites/venomoth.png rename to poke_stats/sprites/venomoth.png diff --git a/src/p2lab/poke_stats/sprites/venonat.png b/poke_stats/sprites/venonat.png similarity index 100% rename from src/p2lab/poke_stats/sprites/venonat.png rename to poke_stats/sprites/venonat.png diff --git a/src/p2lab/poke_stats/sprites/venusaur.png b/poke_stats/sprites/venusaur.png similarity index 100% rename from src/p2lab/poke_stats/sprites/venusaur.png rename to poke_stats/sprites/venusaur.png diff --git a/src/p2lab/poke_stats/sprites/victreebel.png b/poke_stats/sprites/victreebel.png similarity index 100% rename from src/p2lab/poke_stats/sprites/victreebel.png rename to poke_stats/sprites/victreebel.png diff --git a/src/p2lab/poke_stats/sprites/vileplume.png b/poke_stats/sprites/vileplume.png similarity index 100% rename from src/p2lab/poke_stats/sprites/vileplume.png rename to poke_stats/sprites/vileplume.png diff --git a/src/p2lab/poke_stats/sprites/voltorb.png b/poke_stats/sprites/voltorb.png similarity index 100% rename from src/p2lab/poke_stats/sprites/voltorb.png rename to poke_stats/sprites/voltorb.png diff --git a/src/p2lab/poke_stats/sprites/vulpix.png b/poke_stats/sprites/vulpix.png similarity index 100% rename from src/p2lab/poke_stats/sprites/vulpix.png rename to poke_stats/sprites/vulpix.png diff --git a/src/p2lab/poke_stats/sprites/wartortle.png b/poke_stats/sprites/wartortle.png similarity index 100% rename from src/p2lab/poke_stats/sprites/wartortle.png rename to poke_stats/sprites/wartortle.png diff --git a/src/p2lab/poke_stats/sprites/weedle.png b/poke_stats/sprites/weedle.png similarity index 100% rename from src/p2lab/poke_stats/sprites/weedle.png rename to poke_stats/sprites/weedle.png diff --git a/src/p2lab/poke_stats/sprites/weepinbell.png b/poke_stats/sprites/weepinbell.png similarity index 100% rename from src/p2lab/poke_stats/sprites/weepinbell.png rename to poke_stats/sprites/weepinbell.png diff --git a/src/p2lab/poke_stats/sprites/weezing.png b/poke_stats/sprites/weezing.png similarity index 100% rename from src/p2lab/poke_stats/sprites/weezing.png rename to poke_stats/sprites/weezing.png diff --git a/src/p2lab/poke_stats/sprites/wigglytuff.png b/poke_stats/sprites/wigglytuff.png similarity index 100% rename from src/p2lab/poke_stats/sprites/wigglytuff.png rename to poke_stats/sprites/wigglytuff.png diff --git a/src/p2lab/poke_stats/sprites/zapdos.png b/poke_stats/sprites/zapdos.png similarity index 100% rename from src/p2lab/poke_stats/sprites/zapdos.png rename to poke_stats/sprites/zapdos.png diff --git a/src/p2lab/poke_stats/sprites/zubat.png b/poke_stats/sprites/zubat.png similarity index 100% rename from src/p2lab/poke_stats/sprites/zubat.png rename to poke_stats/sprites/zubat.png diff --git a/pool.txt b/pool.txt new file mode 100644 index 0000000..0be6b69 --- /dev/null +++ b/pool.txt @@ -0,0 +1,8 @@ +Bronzong @ Light Clay +Ability: Levitate +Level: 84 +EVs: 85 HP / 85 Atk / 85 Def / 85 SpA / 85 SpD / 85 Spe +- Light Screen +- Reflect +- Toxic +- Iron Head diff --git a/src/p2lab/gen_data.py b/src/p2lab/gen_data.py index 8017cd8..48e6bd9 100644 --- a/src/p2lab/gen_data.py +++ b/src/p2lab/gen_data.py @@ -1,3 +1,6 @@ +from __future__ import annotations + + def gen_1_pokemon(): return """Bulbasaur @ Leftovers Ability: Chlorophyll @@ -83,14 +86,14 @@ def gen_1_pokemon(): EVs: 252 Atk / 4 Def / 252 Spe Jolly Nature - String Shot -- Bug Bite +- Bug Bite Metapod @ Eviolite Ability: Shed Skin EVs: 252 HP / 252 Def / 4 SpD Impish Nature - String Shot -- Bug Bite +- Bug Bite Butterfree @ Focus Sash Ability: Compound Eyes @@ -106,7 +109,7 @@ def gen_1_pokemon(): Jolly Nature - Poison Sting - String Shot -- Bug Bite +- Bug Bite Kakuna @ Eviolite Ability: Shed Skin @@ -114,7 +117,7 @@ def gen_1_pokemon(): Impish Nature - Poison Sting - String Shot -- Bug Bite +- Bug Bite Beedrill @ Choice Scarf Ability: Sniper @@ -122,7 +125,7 @@ def gen_1_pokemon(): Jolly Nature - Poison Sting - String Shot -- Bug Bite +- Bug Bite Pidgey @ Focus Sash Ability: Tangled Feet @@ -1325,4 +1328,4 @@ def gen_1_pokemon(): - Will-O-Wisp - Soft-Boiled - Transform -""" \ No newline at end of file +""" diff --git a/src/p2lab/poke_stats/poke_1v1_fighter.py b/src/p2lab/poke_stats/poke_1v1_fighter.py deleted file mode 100644 index d146e91..0000000 --- a/src/p2lab/poke_stats/poke_1v1_fighter.py +++ /dev/null @@ -1,219 +0,0 @@ -# 1v1 fights for the pokemon for stats. -# Author: Edmund Dable-Heath -""" - Setting each of the 150 pokemon to fight each other pokemon until either a cutoff is - reached or the variation of the win ratio over a history of s fights falls below a - threshold. -""" - -# Imports include reference to potential scripts -# import pop_gen -# import fight_sim -from __future__ import annotations - -import pickle -from itertools import combinations_with_replacement as cwr - -import numpy as np - -# Actual code ========================================================================== - -# def gen_pop() -> list(poke_objects): -# """Generate the population of 151 pokemon objects ready to fight. - -# NB: This can be done more explicity here, i.e. implement the rejection sampling -# in this script, but I will simplify away from that for now. -# """ -# return pop_gen.gen_pop - -# # def duel_to_convergence( -# poke_1: poke_object, -# poke_2: poke_object, -# var_threshold: float, -# look_back: int, -# cutoff: int, -# ) -> tuple(float, float): -# """DUEL TO THE DEATH! (or at least a converged win ratio.....) - -# For two pokemon, duel until the win ration converges or cutoff is reached. -# Return ratios scaled by number of fights. - -# TODO: make lookback function of number of fights? - -# Args: -# poke_1 (poke_object): pokemon_1 (GLADIATOR, READY!) -# poke_2 (poke_object): pokemon_2 (GLADIATOR, READY!) -# var_threshold (float): threshold for convergence of win ratio variance. -# look_back: how man previous ratio values to consider. -# cutoff: max iters to run this. - -# Returns: -# (poke_wins_1, poke_wins_2) tuple(float, float): -# poke_wins_i = (no wins of poke_i) / (no of duels) -# """ -# count = 0 -# variance = 100 -# poke_win_1 = 1 # Start with one win each to avoid /0 errors.... -# poke_win_2 = 1 -# ratios = [] -# while (count < cutoff) or (variance > var_threshold): -# count += 1 -# if duel(poke_1, poke_2): -# poke_win_1 += 1 -# else: -# poke_win_2 += 1 -# ratios.append(poke_win_1 / poke_win_2) -# if len(ratios) < look_back: -# variance = np.var(ratios) -# else: -# variance = np.var(ratios[-look_back:]) -# return poke_win_1 / count, poke_win_2 / count - -# def duel(poke_1: poke_object, poke_2: poke_object) -> bool: -# """Simulate a fight between a pair of pokemon, with a result of True if poke_1 -# wins. - -# Args: -# poke_1 (poke_object): pokemon_1 (IN THE RED CORNER) -# poke_2 (poke_object): pokemon_2 (IN THE BLUE CORNER) - -# Returns: -# bool: True if pokemon 1 is victorious. -# """ -# winner = fight_sim.fight(poke_1, poke_2) -# return winner == poke_1 - - -# def main(**kwargs): -# # Generate a population -# poke_pop = gen_pop - -# # Instantiate results matrix (we know n = 151) -# res_arr = np.zeros(151, 151) - -# # Duel to convergence to get stats -# for dueling_partners_id in cwr(list(range(len(poke_pop))), 2): -# i, j = dueling_partners_id -# poke_ratio_1, poke_ratio_2 = duel_to_convergence( -# poke_pop[i], -# poke_pop[j], -# kwargs["var_threshold"], -# kwargs["look_back"], -# kwargs["cutoff"], -# ) -# if i == j: -# res_arr[i, i] += poke_ratio_1 -# res_arr[i, j] += poke_ratio_1 -# res_arr[j, i] += poke_ratio_2 - -# # Average over to get stats -# avg_win_ratio = np.mean(res_arr, axis=0) -# return avg_win_ratio - -# Dummy Code =========================================================================== - - -def dummy_gen_pop() -> list(str): - """Create a dummy list of pokemon.""" - with open("poke_base_stats.pkl", "rb") as f: - p_dict = pickle.load(f) - return p_dict - - -def dummy_duel(poke_1: str, poke_2: str) -> bool: - """Dummy duel method""" - rng = np.random.default_rng(seed=int("".join(str(ord(c)) for c in poke_1 + poke_2))) - prob = rng.random(1)[0] - # print(prob) - # print(1 - prob) - return rng.choice(a=[True, False], p=[prob, 1 - prob]) - - -def dummy_duel_to_convergence( - poke_1: str, - poke_2: str, - var_threshold: float, - look_back: int, - cutoff: int, -) -> tuple(float, float): - """DUEL TO THE DEATH! (or at least a converged win ratio.....) - - For two pokemon, duel until the win ration converges or cutoff is reached. - Return ratios scaled by number of fights. - - TODO: make lookback function of number of fights? - - Args: - poke_1 (poke_object): pokemon_1 (GLADIATOR, READY!) - poke_2 (poke_object): pokemon_2 (GLADIATOR, READY!) - var_threshold (float): threshold for convergence of win ratio variance. - look_back: how man previous ratio values to consider. - cutoff: max iters to run this. - - Returns: - (poke_wins_1, poke_wins_2) tuple(float, float): - poke_wins_i = (no wins of poke_i) / (no of duels) - """ - count = 0 - variance = 100 - poke_win_1 = 1 # Start with one win each to avoid /0 errors.... - poke_win_2 = 1 - ratios = [] - # print(cutoff) - while count < cutoff and variance > var_threshold: # or variance - # print(count) - count += 1 - if dummy_duel(poke_1, poke_2): - poke_win_1 += 1 - else: - poke_win_2 += 1 - ratios.append(poke_win_1 / poke_win_2) - if count > 2: - if len(ratios) < look_back: - variance = np.var(ratios) - else: - variance = np.var(ratios[-look_back:]) - print(variance) - return poke_win_1 / count, poke_win_2 / count - - -def main(**kwargs): - # Generate a population - poke_dict = dummy_gen_pop() - poke_names = list(poke_dict.keys()) - - # Instantiate results matrix (we know n = 151) - res_arr = np.zeros((151, 151)) - - # Duel to convergence to get stats - for dueling_partners_id in cwr(list(range(len(poke_names))), 2): - i, j = dueling_partners_id - print(f"IN THE RED CORNER: {poke_names[i]}") - print(f"IN THE BLUE CORNER: {poke_names[j]}") - poke_ratio_1, poke_ratio_2 = dummy_duel_to_convergence( - poke_names[i], - poke_names[j], - kwargs["var_threshold"], - kwargs["look_back"], - kwargs["cutoff"], - ) - if i == j: - res_arr[i, i] += poke_ratio_1 - res_arr[i, j] += poke_ratio_1 - res_arr[j, i] += poke_ratio_2 - - # Average over to get stats - avg_win_ratio = np.mean(res_arr, axis=0) - for i in range(len(poke_names)): - poke_dict[poke_names[i]]["average_win_ratio"] = avg_win_ratio[i] - # print(poke_dict) - print("for Magikarp:") - print(poke_dict["magikarp"]) - return poke_dict - - -if __name__ == "__main__": - # Pars hardcoded in for now as should be single run. - pars = {"var_threshold": 1e-14, "look_back": 2, "cutoff": 100} - - main(**pars) diff --git a/src/p2lab/team.py b/src/p2lab/team.py index 8d808c3..a6c0afd 100644 --- a/src/p2lab/team.py +++ b/src/p2lab/team.py @@ -6,6 +6,7 @@ class Team: def __init__(self, pokemon) -> None: self.pokemon = np.array(pokemon) + self.first_name = self.pokemon[0].formatted.split("|")[0] def to_packed_str(self): return "]".join([mon.formatted for mon in self.pokemon]) diff --git a/timings.py b/timings.py index d15cf45..6ec397a 100644 --- a/timings.py +++ b/timings.py @@ -1,12 +1,15 @@ -from p2lab.genetic.fitness import BTmodel, win_percentages -from p2lab.genetic.operations import build_crossover_fn, locus_swap, slot_swap, mutate -from p2lab.team import Team -from p2lab.genetic.matching import dense +from __future__ import annotations import random +import time from itertools import permutations + import numpy as np -import time + +from p2lab.genetic.fitness import BTmodel, win_percentages +from p2lab.genetic.matching import dense +from p2lab.genetic.operations import build_crossover_fn, mutate, slot_swap +from p2lab.team import Team # Constants N_TEAM = 3 @@ -18,28 +21,26 @@ # Function to check timings def main(): - # Simulate teams poke_pop = list(range(POP_SIZE)) teams = [] for _iter in range(N_TEAM): teams.append(Team(random.choices(poke_pop, k=N_POKEMON))) - + # Run for many rounds for round in range(NUM_ROUND): - # Log print(f"Round: {round}") - + # All vs all matches matches = dense(teams) n_match = matches.shape[0] # Simulate Results - perms = np.array(list(permutations(range(BATTLES_PER_PAIR+1), 2))) - outcomes = perms[np.sum(perms, axis=1) == 3,:] + perms = np.array(list(permutations(range(BATTLES_PER_PAIR + 1), 2))) + outcomes = perms[np.sum(perms, axis=1) == 3, :] num_outcome = outcomes.shape[1] - results = outcomes[random.choices(range(num_outcome), k=n_match),:] + results = outcomes[random.choices(range(num_outcome), k=n_match), :] # Logging step 1 print(f"Number of matches: {n_match}") @@ -93,7 +94,7 @@ def main(): ) t1_mut = time.perf_counter() print(f"Ran mutate in {t1_mut - t0_mut:0.4f} seconds") - + if __name__ == "__main__": - main() \ No newline at end of file + main()