§
    Šª½jÜ  ã            
       óB  — d Z ddlZddlmc mZ ddlZddlZddl	Z	ddl
Z
e	j                             dej                             ej                             ej                             e¦  «        d¦  «        ¦  «        ¦  «         ddlmZmZ ddlmZ  G d„ d¦  «        ZdS )zØ
Unit tests for Wilderness Encounter Density and Spatial Pack Clustering.
Verifies zone encounter densities, minion radial distribution (1.2m - 3.2m),
endgame map tier pack scaling, and safe haven 0-pack guarantees.
é    Nz../../server)ÚWildernessEncounterEngineÚZONE_DENSITY_SPECS)ÚMonsterRankc                   ó6   — e Zd Zdd„Zdd„Zdd„Zdd„Zdd„ZdS )	ÚTestWildernessEncounterDensityÚreturnNc                 ó  — t          ¦   «         }g d¢}|D �]s}|                     |¦  «        }d}||u}|s¯t          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }t          j        d|› �¦  «        dz   d	|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}}|d
         }	d}
|	|
k    }|slt          j        d|fd|	|
f¦  «        t          j        |	¦  «        t          j        |
¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}	x}}
|d         }t          |¦  «        }
d}|
|k    }|sÇt          j        d|fd|
|f¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |
¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}
x}}|                     |¦  «        }t          |¦  «        }|d
         }||k    }|sòt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}�ŒudS )zNVerifies each canonical outer wilderness zone has at least 3 packs configured.)Úzone_tang_kiem_nhaiÚzone_ancient_sword_barrowÚzone_boundless_sandstormÚzone_blood_scale_ruinsN©úis not)z%(py0)s is not %(py3)sÚspec)Úpy0Úpy3zMissing density spec for z
>assert %(py5)sÚpy5Ú
base_packsé   ©ú>=)z%(py1)s >= %(py4)s)Úpy1Úpy4zassert %(py6)sÚpy6Únative_genusé   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} >= %(py7)sÚlen©r   Úpy2r   Úpy7úassert %(py9)sÚpy9)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sÚpacks©r   r   r   r   úassert %(py8)sÚpy8)r   Úget_zone_density_specÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚ_format_assertmsgÚAssertionErrorÚ_format_explanationr   Úgenerate_zone_encounter_packs)ÚselfÚengineÚcanonical_zonesÚz_idr   Ú@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6Ú@py_assert0Ú@py_assert3Ú@py_format5Ú@py_format7Ú@py_assert6Ú@py_assert5Ú@py_format8Ú@py_format10r#   Ú@py_assert4Ú@py_format9s                       úEC:\Projects\FreeExile\tests\unit\test_wilderness_encounter_density.pyÚ2test_outer_zones_have_configured_encounter_densityzQTestWildernessEncounterDensity.test_outer_zones_have_configured_encounter_density   s  € å*Ñ,Ô,ˆð
ð 
ð 
ˆð $ð 	4ñ 	4ˆDØ×/Ò/°Ñ5Ô5ˆDØ#ÐG�4˜tÐ#ÐGÐGÐGÕGÔGÐGÐGÐGÐG�4˜tÐGÑGÔGÐGÕGÔGÑGÔGÐGÐGÕGÔG�4ÑGÔGÐGÕGÔG�4ÑGÔGÐGÐGÕGÔG˜tÑGÔGÐGÐGÑGÐGÕGÔGÐ%GÀÐ%GÐ%GÑGÔGÐGÑGÐGÐGÐGÑGÐGÕGÕGÔGÐGÑGÔGÑGÔGÐGÐGÐGÐGÐGØ˜Ô%Ð*¨Ð*Ð%¨Ò*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð%¨Ð*Ñ*Ô*Õ*Ô*Ð%Ñ*Ô*Õ*Ô*¨Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø˜NÔ+Ð1•3Ð+Ñ,Ô,Ð1°Ð1Ð,°Ò1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð,°Ð1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1•3Ñ1Ô1Ð1Õ1Ô1•3Ñ1Ô1Ð1Ð1Õ1Ô1Ð+Ñ1Ô1Õ1Ô1Ð,Ñ1Ô1Õ1Ô1°Ñ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ø×8Ò8¸Ñ>Ô>ˆEÝ�u‘:”:Ð3  lÔ!3Ð3�:Ð!3Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3�:Ð!3Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3•3Ñ3Ô3Ð3Õ3Ô3•3Ñ3Ô3Ð3Ð3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�uÑ3Ô3Ð3Õ3Ô3�uÑ3Ô3Ð3Ð3Õ3Ô3�:Ñ3Ô3Õ3Ô3Ð!3Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ñ3ð	4ð 	4ó    c           
      óh  — t          ¦   «         }|                     d¦  «        }t          |¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}}|D �]ù}|j        }	d
}|	|u}
|
sªt          j        d|
fd|	|f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}	x}
}|j        }	|	j        }
d}|
|u }|s½t          j        d|fd|
|f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |
¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}	x}
x}}|j        }	|	j        }
t          j        }|
|k    }|�st          j        d|fd|
|f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |
¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}	x}
x}}|j        }t          |¦  «        }d}||k    }|�st          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d œz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}x}}|j        D �]õ}|j        }	d!}|	|u }
|
sªt          j        d|
fd"|	|f¦  «        d#t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd#t          j        |	¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}	x}
}|j        }	t          j        }|	|k    }
|
sòt          j        d|
fd$|	|f¦  «        d#t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd#t          j        |	¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        d%œz  }dd	|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}	x}
}|j        }	|j        }|j        }|	|k    }
|
sût          j        d|
fd&|	|f¦  «        d#t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd#t          j        |	¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}	x}
x}}�Œ÷�Œûd
S )'zEVerifies generated packs contain 1 Rare leader and 3+ Common minions.r
   r   ©ú>)z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)sr   r#   r$   r%   r&   Nr   )z2%(py2)s
{%(py2)s = %(py0)s.leader
} is not %(py5)sÚpack)r   r   r   zassert %(py7)sr    T)Úis)zR%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.leader
}.is_pack_leader
} is %(py7)sr   r!   r"   ©ú==)zb%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.leader
}.rank
} == %(py8)s
{%(py8)s = %(py6)s.RARE
}r   )r   r   r   r   r&   úassert %(py10)sÚpy10r   r   )zM%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.minions
})
} >= %(py8)s)r   r   r   r   r&   F)z6%(py2)s
{%(py2)s = %(py0)s.is_pack_leader
} is %(py5)sÚminion)zH%(py2)s
{%(py2)s = %(py0)s.rank
} == %(py6)s
{%(py6)s = %(py4)s.COMMON
})r   r   r   r   )zr%(py2)s
{%(py2)s = %(py0)s.pack_leader_id
} == %(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py4)s.leader
}.monster_id
})r   r1   r   r(   r)   r*   r+   r,   r-   r/   r0   ÚleaderÚis_pack_leaderÚrankr   ÚRAREÚminionsÚCOMMONÚpack_leader_idÚ
monster_id)r2   r3   r#   r6   r?   rB   r=   rC   rJ   r7   r;   r9   r@   r>   rA   Ú@py_assert7Ú@py_format11rP   s                     rD   Ú(test_monster_pack_has_leader_and_minionszGTestWildernessEncounterDensity.test_monster_pack_has_leader_and_minions'   sþ  € å*Ñ,Ô,ˆØ×4Ò4Ð5JÑKÔKˆÝ�5‰zŒzÐ˜AÐˆz˜AŠ~ÐÐÐÕÔÐÐÐÐˆz˜AÐÑÔÐÕÔÑÔÐÐÕÔ�sÑÔÐÕÔ�sÑÔÐÐÐÕÔÑÔÐÐÕÔ�5ÑÔÐÕÔ�5ÑÔÐÐÕÔˆzÑÔÕÔ˜AÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐàð 	Gñ 	GˆDØ”;Ð* dÐ*�; dÐ*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*�; dÐ*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*�4Ñ*Ô*Ð*Õ*Ô*�4Ñ*Ô*Ð*Ð*Õ*Ô*�;Ñ*Ô*Õ*Ô* dÑ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø”;Ð5�;Ô-Ð5°Ð5Ð-°Ð5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5Ð-°Ð5Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5�4Ñ5Ô5Ð5Õ5Ô5�4Ñ5Ô5Ð5Ð5Õ5Ô5�;Ñ5Ô5Õ5Ô5Ð-Ñ5Ô5Õ5Ô5°Ñ5Ô5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ø”;Ð7�;Ô#Ð7¥{Ô'7Ð7Ð#Ð'7Ò7Ð7Ð7Ñ7Õ7Ô7Ð7Ð7Ð7Ð7Ð#Ð'7Ð7Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7�4Ñ7Ô7Ð7Õ7Ô7�4Ñ7Ô7Ð7Ð7Õ7Ô7�;Ñ7Ô7Õ7Ô7Ð#Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7¥{Ñ7Ô7Ð7Õ7Ô7¥{Ñ7Ô7Ð7Ð7Õ7Ô7Ð'7Ñ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ø”|Ð)•3�|Ñ$Ô$Ð)¨Ð)Ð$¨Ò)Ð)Ð)Ñ)Õ)Ô)Ð)Ð)Ð)Ð)Ð$¨Ð)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)•3Ñ)Ô)Ð)Õ)Ô)•3Ñ)Ô)Ð)Ð)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)�tÑ)Ô)Ð)Õ)Ô)�tÑ)Ô)Ð)Ð)Õ)Ô)�|Ñ)Ô)Õ)Ô)Ð$Ñ)Ô)Õ)Ô)¨Ñ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Øœ,ð Gñ G�ØÔ,Ð5°Ð5Ð,°Ð5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5Ð,°Ð5Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5�vÑ5Ô5Ð5Õ5Ô5�vÑ5Ô5Ð5Ð5Õ5Ô5Ð,Ñ5Ô5Õ5Ô5°Ñ5Ô5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ø”{Ð8¥kÔ&8Ð8�{Ð&8Ò8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8�{Ð&8Ð8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8�vÑ8Ô8Ð8Õ8Ô8�vÑ8Ô8Ð8Ð8Õ8Ô8�{Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8¥kÑ8Ô8Ð8Õ8Ô8¥kÑ8Ô8Ð8Ð8Õ8Ô8Ð&8Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ØÔ,ÐF°´ÐF°Ô0FÐFÐ,Ð0FÒFÐFÐFÐFÕFÔFÐFÐFÐFÐFÐ,Ð0FÐFÑFÔFÐFÕFÔFÑFÔFÐFÐFÕFÔF�vÑFÔFÐFÕFÔF�vÑFÔFÐFÐFÕFÔFÐ,ÑFÔFÐFÕFÔFÑFÔFÐFÐFÕFÔF°ÑFÔFÐFÕFÔF°ÑFÔFÐFÐFÕFÔF°ÑFÔFÕFÔFÐ0FÑFÔFÐFÐFÑFÐFÐFÐFÐFÐFÑFÐFÕFÕFÔFÐFÑFÔFÑFÔFÐFÐFÐFÐFÐFÐFÐFÐFÐFÑFñGð	Gð 	GrF   c           	      óä  — t          ¦   «         }|                     d¦  «        }|d         }|j                             |¦  «        }|d         }|dd…         }|D �]}t	          j        |j        |j        z
  |j        |j        z
  ¦  «        }d}	|	|k    }
d}||k    }|
r|sÆt          j	        d|
|fd|	||f¦  «        t          j
        |	¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j
        |¦  «        nd	t          j
        |¦  «        d
œz  }t          j        d|d›d�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}
x}}�ŒdS )zJVerifies minions are placed radially around the leader within 1.2m - 3.5m.r
   r   é   Ngffffffò?g      @©ú<=r_   )z%(py1)s <= %(py4)sz%(py4)s <= %(py6)sÚdist)r   r   r   zMinion distance z.2fz,m outside radial cluster bounds [1.2m, 3.5m]z
>assert %(py8)sr&   )r   r1   Úprocedural_engineÚcreate_pack_runtime_statesÚmathÚhypotÚ	current_xÚ	current_yr(   r)   r-   r*   r+   r,   r.   r/   r0   )r2   r3   r#   rJ   Úruntime_statesÚ	leader_stÚminion_statesÚm_str`   r:   r6   r?   r;   r=   rC   s                  rD   Ú"test_pack_minion_radial_clusteringzATestWildernessEncounterDensity.test_pack_minion_radial_clustering7   s´  € å*Ñ,Ô,ˆØ×4Ò4Ð5JÑKÔKˆØ�QŒxˆàÔ1×LÒLÈTÑRÔRˆØ" 1Ô%ˆ	Ø& q r rÔ*ˆà!ð 	rñ 	rˆDÝ”:˜dœn¨yÔ/BÑBÀDÄNÐU^ÔUhÑDhÑiÔiˆDØÐq�4˜4Ò&Ðq 3Ðq˜4 3Ò&ÐqÐqÐqÐqÐqÕqÔqÐqÐqÐqÐqÐq�4˜4 3ÐqÑqÔqÕqÔq�4ÑqÔqÐqÕqÔqÑqÔqÐqÐqÕqÔq˜4ÑqÔqÐqÕqÔq˜4ÑqÔqÐqÐqÕqÔq 3ÑqÔqÐqÐqÑqÐqÕqÔqÐ(q¸4Ð(qÐ(qÐ(qÐ(qÑqÔqÐqÑqÐqÐqÐqÑqÐqÕqÕqÔqÐqÑqÔqÑqÔqÐqÐqÐqÐqÐqÐqÐqÐqÐqÑqð	rð 	rrF   c                 ó¬  — t          ¦   «         }|                     dd¬¦  «        }|                     dd¬¦  «        }|                     dd¬¦  «        }t          |¦  «        }t          |¦  «        }||k    }t          |¦  «        }||k    }	|r|	�st          j        d||	fd|||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndd	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndd
t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœ	z  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}	x}}t          |¦  «        }t          |¦  «        }||k    }|�sxt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndd	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}dS )zHVerifies pack density scales upwards with endgame Map Tiers (T1 -> T16).r
   r]   )Úmap_tieré   é   r^   )zN%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} <= %(py9)s
{%(py9)s = %(py6)s(%(py7)s)
}zR%(py9)s
{%(py9)s = %(py6)s(%(py7)s)
} <= %(py13)s
{%(py13)s = %(py10)s(%(py11)s)
}r   Úpacks_t1Úpacks_t8Ú	packs_t16)	r   r   r   r   r    r"   rO   Úpy11Úpy13zassert %(py15)sÚpy15NrH   )zM%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py8)s
{%(py8)s = %(py5)s(%(py6)s)
})r   r   r   r   r   r&   rN   rO   ©r   r1   r   r(   r)   r*   r+   r,   r-   r/   r0   )r2   r3   rp   rq   rr   r6   Ú@py_assert8rB   Ú@py_assert12r?   Ú@py_format14Ú@py_format16rY   rC   rZ   s                  rD   Útest_endgame_tier_pack_scalingz=TestWildernessEncounterDensity.test_endgame_tier_pack_scalingE   s9  € å*Ñ,Ô,ˆØ×7Ò7Ð8MÐXYÐ7ÑZÔZˆØ×7Ò7Ð8MÐXYÐ7ÑZÔZˆØ×8Ò8Ð9NÐY[Ð8Ñ\Ô\ˆ	å�8‰}Œ}Ð?¥ H¡¤Ð?ˆ} Ò?Ð?µ°Y±´Ð? °Ò?Ð?Ð?Ð?Ð?Ñ?Õ?Ô?Ð?Ð?Ð?Ð?Ð?ˆ} °Ð?Ñ?Ô?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?�sÑ?Ô?Ð?Õ?Ô?�sÑ?Ô?Ð?Ð?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?�8Ñ?Ô?Ð?Õ?Ô?�8Ñ?Ô?Ð?Ð?Õ?Ô?ˆ}Ñ?Ô?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?¥Ñ?Ô?Ð?Õ?Ô?¥Ñ?Ô?Ð?Ð?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô? HÑ?Ô?Ð?Õ?Ô? HÑ?Ô?Ð?Ð?Õ?Ô? Ñ?Ô?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?µÑ?Ô?Ð?Õ?Ô?µÑ?Ô?Ð?Ð?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?°YÑ?Ô?Ð?Õ?Ô?°YÑ?Ô?Ð?Ð?Õ?Ô?°Ñ?Ô?Ð?Ð?Ñ?Ð?Ð?Ð?Ð?Ð?Ñ?Ð?Õ?Õ?Ô?Ð?Ñ?Ô?Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ý�9‰~Œ~Ð-¥ H¡¤Ð-ˆ~ Ò-Ð-Ð-Ñ-Õ-Ô-Ð-Ð-Ð-Ð-ˆ~ Ð-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-�sÑ-Ô-Ð-Õ-Ô-�sÑ-Ô-Ð-Ð-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-�9Ñ-Ô-Ð-Õ-Ô-�9Ñ-Ô-Ð-Ð-Õ-Ô-ˆ~Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-¥Ñ-Ô-Ð-Õ-Ô-¥Ñ-Ô-Ð-Ð-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô- HÑ-Ô-Ð-Õ-Ô- HÑ-Ô-Ð-Ð-Õ-Ô- Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-rF   c                 óº  — t          ¦   «         }|                     d¦  «        }|                     d¦  «        }t          |¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }d	d
|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}t          |¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }d	d
|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}dS )z=Verifies Safe Havens produce exactly 0 hostile monster packs.Úzone_player_hideoutÚzone_boundless_sanctuaryr   rL   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   Úhideout_packsr$   r%   r&   NÚsanctuary_packsrv   )	r2   r3   r   r€   r6   r?   rB   r=   rC   s	            rD   Ú(test_safe_haven_density_is_strictly_zerozGTestWildernessEncounterDensity.test_safe_haven_density_is_strictly_zeroO   s{  € å*Ñ,Ô,ˆØ×<Ò<Ð=RÑSÔSˆØ ×>Ò>Ð?YÑZÔZˆå�=Ñ!Ô!Ð& QÐ&Ð! QÒ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð! QÐ&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&�sÑ&Ô&Ð&Õ&Ô&�sÑ&Ô&Ð&Ð&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&�=Ñ&Ô&Ð&Õ&Ô&�=Ñ&Ô&Ð&Ð&Õ&Ô&Ð!Ñ&Ô&Õ&Ô& QÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ý�?Ñ#Ô#Ð( qÐ(Ð# qÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð# qÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(�sÑ(Ô(Ð(Õ(Ô(�sÑ(Ô(Ð(Ð(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(�?Ñ(Ô(Ð(Õ(Ô(�?Ñ(Ô(Ð(Ð(Õ(Ô(Ð#Ñ(Ô(Õ(Ô( qÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(rF   )r   N)Ú__name__Ú
__module__Ú__qualname__rE   r[   rk   r{   r�   © rF   rD   r   r      s€   € € € € € ð4ð 4ð 4ð 4ð"Gð Gð Gð Gð rð rð rð rð.ð .ð .ð .ð)ð )ð )ð )ð )ð )rF   r   )Ú__doc__Úbuiltinsr*   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter(   rc   ÚosÚsysÚpytestÚpathÚinsertÚabspathÚjoinÚdirnameÚ__file__Ú!world.wilderness_encounter_enginer   r   Úworld.monster_typesr   r   r…   rF   rD   ú<module>r–      s	  ððð ð € € € € € € € € € € € € €€€€Ø 	€	€	€	Ø 
€
€
€
Ø €€€à „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ>Ñ#ZÔ#ZÑ[Ô[Ñ \Ô \Ð \ðð ð ð ð ð ð ð ð ,Ð +Ð +Ð +Ð +Ð +ðA)ð A)ð A)ð A)ð A)ñ A)ô A)ð A)ð A)ð A)rF   