Pokémon have 3 core stats:
Every species of Pokémon has a base value for each of these stats calculated from the base stats of the main games.
Pokémon also have additional stats called Individual Values or IVs much like in the games. These stats are random for each individual specimen and are integer values that range from 0-15 and are added directly on to the Pokémon's base stats. Hatched Pokémon appear to have higher IVs on average.
Using CP_Multiplier (a constant value based on Pokémon level explained below), we get a Pokémon's core stats:
- Attack = (Base Attack + Individual Attack) * CP_Multiplier
- Defense = (Base Defense + Individual Defense) * CP_Multiplier
- Stamina = (Base Stamina + Individual Stamina) * CP_Multiplier
Stamina here is shown to the player in the form of HP!
A Pokémon's minimum level is 1, and its maximum level is equal to your trainer level + 1.5
Every time you power up, your Pokémon gains half a level.
You can roughly estimate a Pokémon's level by seeing how far the white dot is along the white semicircle above the Pokémon on their stats page where the leftmost tip is level 1 and the rightmost tip is your trainer level + 1.5, although the progressions get smaller and smaller the farther you get to the right side (does not vary linearly).
According to leaked game data, the highest level a Pokémon egg can hatch is level 20, the highest encounter level for Pokémon in the wild is level 30, and the maximum Pokémon level is level 40, reachable by powering up.
To find exactly what level your Pokémon is, power up your Pokémon following this chart until you're certain of your level from Stardust cost changes, or use an online calculator or the equations below to try values until only legal values remain.
From here on things get more complicated, so if you're not interested in the math, the tl;dr is that there's a formula that given Pokémon level, species, and IVs, calculates out your Pokémon's CP and how much CP it should gain every power up.
Every level also has a corresponding constant CP Multiplier value. When you first catch a Pokémon, it will have a Base CP Multiplier value that corresponds to that level. As it levels up from powering up, the CP_Multiplier will continue to match the correct values for each level.
- CPM = Base_CPM + Additional_CPM
You can view the table of level to CP_Multiplier conversions here.
You can think of Additional CP Multiplier as just adding levels to the original CP multiplier you caught it at, so it is equivalent to just catching it at the new level in the first place.
Now that we have values for Attack, Defense, and Stamina, we can determine CP:
- CP = (Attack * Defense^0.5 * Stamina^0.5 * CP_Multiplier^2) / 10
If CP would be less than 10, it is displayed as 10 instead. Using this information, we can conclude that the maximum CP at the level 40 cap and 15/15 in all IVs is:
- Max CP = ((Base_Attack + 15) * ((Base_Defense + 15)^0.5 * (Base_Stamina + 15)^0.5 * 0.7903001^2) / 10
Since every two power ups is one level, we can determine CP per power up (power up costs here):
- CP per Power Up = (CPM2 - CPM1) / 2
- CP per Power Up = ((A * D^0.5 * S^0.5 * CPM2^2) / 10 - (A * D^0.5 * S^0.5 * CPM1^2) / 10) / 2
- CP per Power Up =((A * D^0.5 * S^0.5) / 10)(CPM2^2 - CPM1^2) / 2
- CP per Power Up =(A * D^0.5 * S^0.5 * ((CPM2^2 - CPM1^2) / 2)) / 10
- CP per Power Up =(A * D^0.5 * S^0.5 * Half_Difference_of_Squared_Values) / 10
This also gives us CP Multiplier at half levels:
- CP + CP per Power Up =(A * D^0.5 * S^0.5 * CPM^2) / 10 + (A * D^0.5 * S^0.5 * Half_Difference_of_Squared_Values) / 10
- CP + CP per Power Up =((A * D^0.5 * S^0.5) / 10)(CPM^2 + Half_Difference_of_Squared_Values)
- CPM_Half = (CPM^2 + Half_Difference_of_Squared_Values)^(0.5)
Using this equation with the original CP equation, we can cancel out a Pokémon's unknown stats:
- CP =((A * D^0.5 * S^0.5) / 10)(CPM^2)
- CP / CPM^2 =((A * D^0.5 * S^0.5) / 10)
- CP per Power Up =((A * D^0.5 * S^0.5) / 10)(Half_Difference_of_Squared_Values)
- CP per Power Up / Half_Difference_of_Squared_Values =((A * D^0.5 * S^0.5) / 10)
- CP per Power Up / Half_Difference_of_Squared_Values = CP / CPM^2
- CP per Power Up = CP * Half_Difference_of_Squared_Values / CPM^2
Trying this out across multiple CP Multiplier values from its table, we get the following:
|Level||CP per Power Up|
|1-10||CP * 0.009426125469 / CP_Multiplier^2|
|10-20||CP * 0.008919025675 / CP_Multiplier^2|
|20-30||CP * 0.008924905903 / CP_Multiplier^2|
|30-40||CP * 0.00445946079 / CP_Multiplier^2|
Since the only information we can get from a Pokémon stats page are CP, CP per power up, and HP, this actually isn't enough information to solve for Attack and Defense IVs. CP and CP per power up vary independent from any IVs whatsoever, only varying on CP Multiplier. HP only varies on CP Multiplier and Stamina IV.
As such, the only way to get Attack and Defense IVs is to just try values until they are legal. By taking the original CP formula:
- CP = ((Base_Attack + Individual_Attack) * ((Base_Defense + Individual_Defense)^0.5 * (Base_Stamina + Individual_Stamina)^0.5 * CPM^2) / 10
We can plug in values for everything except for Attack and Defense IVs, and then rearrange the equations:
- Individual_Attack = (CP / ((Base_Defense + Individual_Defense)^0.5 * (Base_Stamina + Individual_Stamina)^(0.5) * CPM^2 / 10)) - Base_Attack
- Individual_Defense = (CP / ((Base_Attack + Individual_Attack) * (Base_Stamina + Individual_Stamina)^(0.5) * CPM^2 / 10))^2 - Base_Defense
We can use either equation to try integer values from 0 to 15 for Individual_Defense or Individual_Attack (whichever we're missing on the right side of the equation) in order to get all the possible legal pairs of values.