§
    Â¿j-  ã                  ó  — d Z ddlm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ddlZe
j                             e
j                             e
j                             e¦  «        d¦  «        ¦  «        Ze
j                             e
j                             e
j                             e¦  «        d¦  «        ¦  «        Zeej        vrej                             de¦  «         eej        vrej                             de¦  «         ddlmZmZmZmZmZ ddlmZ ddlmZ dd	l m!Z!m"Z"m#Z# dd
l$m%Z%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z.  G d„ d¦  «        Z/ G d„ d¦  «        Z0 G d„ d¦  «        Z1 G d„ d¦  «        Z2dS )a^  
Unit tests for FreeExile 6-Player Party Engine & Scaling System (Milestone 2).
Covers PartyService lifecycle, PartyScalingCalculator formulas, LootAllocationMode on GroundLootDrop,
LootDropService round-robin allocation, and MonsterScalingEngine integration.
Follows Engineering Standards 2026: Soft cap <= 350 lines, strictly typed, deterministic.
é    )ÚannotationsNz../../serverz../..)ÚLootAllocationModeÚPartyActionÚPartyMemberStateÚ	PartyRoleÚ
PartyState)ÚPartyScalingCalculator)ÚPartyService)ÚInventoryItemÚ
ItemRarityÚItemType)ÚGroundLootDropÚLootFilterConfig)ÚLootDropService)ÚCombatantType)ÚMonsterScalingEngine)ÚGameDesignMatrixServicec                  óJ   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd	„Z	dd
„Z
dS )ÚTestPartyLifecycleUnitz/Tests 6-player party lifecycle in PartyService.ÚreturnÚNonec                óÜ  — t          ¦   «         }|                     ddddd¦  «        }|j        }d}||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	œz  }d
d|iz  }t          t          j
        |¦  «        ¦  «        ‚d 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        }t          j        }
||
k    }|sÇt          j        d|fd||
f¦  «        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"          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}}t'          j        t*          d¬¦  «        5  |                     ddd¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NÚp1Ú	LeaderOneé#   Úzone_sanctuaryÚinst_1©ú==©z1%(py2)s
{%(py2)s = %(py0)s.leader_id
} == %(py5)sÚp©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7é   ©zM%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.members
})
} == %(py8)sÚlen©r#   Úpy1Úpy3r%   Úpy8úassert %(py10)sÚpy10©zH%(py3)s
{%(py3)s = %(py1)s.role
} == %(py7)s
{%(py7)s = %(py5)s.LEADER
}r   ©r,   r-   r%   r'   úassert %(py9)sÚpy9)zL%(py2)s
{%(py2)s = %(py0)s.loot_mode
} == %(py6)s
{%(py6)s = %(py4)s.SHORT
}r   ©r#   r$   Úpy4Úpy6úassert %(py8)sr.   zalready in a party)Úmatch)r
   Úcreate_partyÚ	leader_idÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚmembersr*   Úroler   ÚLEADERÚ	loot_moder   ÚSHORTÚpytestÚraisesÚ
ValueError)ÚselfÚsvcr!   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8Ú@py_assert2Ú@py_assert7Ú@py_assert6Ú@py_format9Ú@py_format11Ú@py_assert0Ú@py_format10Ú@py_assert5Ú@py_format7s                    ú6C:\Projects\FreeExile\tests\unit\test_party_scaling.pyÚ.test_create_party_and_double_create_preventionzETestPartyLifecycleUnit.test_create_party_and_double_create_prevention*   sò  € Ý‰nŒnˆØ×Ò˜T ;°Ð4DÀhÑOÔOˆØŒ{Ð"˜dÐ"ˆ{˜dÒ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆ{˜dÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆqÑ"Ô"Ð"Õ"Ô"ˆqÑ"Ô"Ð"Ð"Õ"Ô"ˆ{Ñ"Ô"Õ"Ô"˜dÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ø”9Ð"�s�9‰~Œ~Ð" Ð"ˆ~ Ò"Ð"Ð"Ñ"Õ"Ô"Ð"Ð"Ð"Ð"ˆ~ Ð"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"�sÑ"Ô"Ð"Õ"Ô"�sÑ"Ô"Ð"Ð"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"�1Ñ"Ô"Ð"Õ"Ô"�1Ñ"Ô"Ð"Ð"Õ"Ô"�9Ñ"Ô"Õ"Ô"ˆ~Ñ"Ô"Õ"Ô" Ñ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ØŒy˜ŒÐ7ˆÔ#Ð7¥yÔ'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¥yÑ7Ô7Ð7Õ7Ô7¥yÑ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ØŒ{Ð6Õ0Ô6Ð6ˆ{Ð6Ò6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6ˆ{Ð6Ð6Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6ˆqÑ6Ô6Ð6Õ6Ô6ˆqÑ6Ô6Ð6Ð6Õ6Ô6ˆ{Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6Õ0Ñ6Ô6Ð6Õ6Ô6Õ0Ñ6Ô6Ð6Ð6Õ6Ô6Ð6Ñ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6åŒ]�:Ð-AÐBÑBÔBð 	4ð 	4Ø×Ò˜T ;°Ñ3Ô3Ð3ð	4ð 	4ð 	4ñ 	4ô 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4øøøð 	4ð 	4ð 	4ð 	4ð 	4ð 	4s   Ð<Q!Ñ!Q%Ñ(Q%c                óð  — t          ¦   «         }|                     ddd¦  «        }t          dd¦  «        D �]ø}|j        }|j        }d}d|› �} ||||¦  «        }d}	||	u }
|
�s4t          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
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        t          j
        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}
}	|j        }|j        }d|› �}d|› �}d} |||||¦  «        }
d}|
|u }|�sGt          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
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        t          j
        |
¦  «        t          j
        |¦  «        dœ	z  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}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        }|j        }d}d} ||||¦  «        }d}	||	u }
|
�s4t          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
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        t          j
        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}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}}d S )NÚleadÚLeaderé(   é   é   ÚmT©Úis©z†%(py11)s
{%(py11)s = %(py2)s
{%(py2)s = %(py0)s.invite_player
}(%(py5)s
{%(py5)s = %(py3)s.party_id
}, %(py7)s, %(py9)s)
} is %(py14)srM   r!   ©r#   r$   r-   r%   r'   r4   Úpy11Úpy14úassert %(py16)sÚpy16ÚMemberé&   ©z�%(py13)s
{%(py13)s = %(py2)s
{%(py2)s = %(py0)s.accept_invite
}(%(py5)s
{%(py5)s = %(py3)s.party_id
}, %(py7)s, %(py9)s, %(py11)s)
} is %(py16)s©	r#   r$   r-   r%   r'   r4   ri   Úpy13rl   úassert %(py18)sÚpy18é   r   r)   r*   r+   r/   r0   Úm7F)r
   r:   ÚrangeÚinvite_playerÚparty_idr<   r=   r>   r?   r@   rA   rB   rC   Úaccept_inviterD   r*   )rL   rM   r!   ÚirN   rO   rU   Ú@py_assert8Ú@py_assert10Ú@py_assert13Ú@py_assert12Ú@py_format15Ú@py_format17Ú@py_assert15Ú@py_assert14Ú@py_format19rS   rT   rV   rW   s                       r\   Ú,test_invite_accept_and_max_capacity_boundaryzCTestPartyLifecycleUnit.test_invite_accept_and_max_capacity_boundary5   s•  € Ý‰nŒnˆØ×Ò˜V X¨rÑ2Ô2ˆÝ�q˜!‘”ð 	Tñ 	TˆAØÔ$ÐI Q¤ZÐI°ÐI¸¸Q¸¸ÐIÐ$Ð$ Z°¸ÑAÔAÐIÀTÐIÐAÀTÐIÐIÐIÑIÕIÔIÐIÐIÐIÐIÐAÀTÐIÑIÔIÐIÕIÔIÑIÔIÐIÐIÕIÔI�3ÑIÔIÐIÕIÔI�3ÑIÔIÐIÐIÕIÔIÐ$ÑIÔIÐIÕIÔIÑIÔIÐIÐIÕIÔI QÑIÔIÐIÕIÔI QÑIÔIÐIÐIÕIÔI ZÑIÔIÕIÔI°ÑIÔIÕIÔI¸ÑIÔIÕIÔIÐAÑIÔIÕIÔIÀTÑIÔIÐIÐIÑIÐIÐIÐIÐIÐIÑIÐIÕIÕIÔIÐIÑIÔIÑIÔIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIØÔ$ÐS Q¤ZÐS°°Q°°ÐS¸,À1¸,¸,ÐSÈÐSÐ$Ð$ Z°¸,ÈÑKÔKÐSÈtÐSÐKÈtÐSÐSÐSÑSÕSÔSÐSÐSÐSÐSÐKÈtÐSÑSÔSÐSÕSÔSÑSÔSÐSÐSÕSÔS�3ÑSÔSÐSÕSÔS�3ÑSÔSÐSÐSÕSÔSÐ$ÑSÔSÐSÕSÔSÑSÔSÐSÐSÕSÔS QÑSÔSÐSÕSÔS QÑSÔSÐSÐSÕSÔS ZÑSÔSÕSÔS°ÑSÔSÕSÔS¸,ÑSÔSÕSÔSÈÑSÔSÕSÔSÐKÑSÔSÕSÔSÈtÑSÔSÐSÐSÑSÐSÐSÐSÐSÐSÑSÐSÕSÕSÔSÐSÑSÔSÑSÔSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÑSØ”9Ð"�s�9‰~Œ~Ð" Ð"ˆ~ Ò"Ð"Ð"Ñ"Õ"Ô"Ð"Ð"Ð"Ð"ˆ~ Ð"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"�sÑ"Ô"Ð"Õ"Ô"�sÑ"Ô"Ð"Ð"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"�1Ñ"Ô"Ð"Õ"Ô"�1Ñ"Ô"Ð"Ð"Õ"Ô"�9Ñ"Ô"Õ"Ô"ˆ~Ñ"Ô"Õ"Ô" Ñ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ð Ô ÐC ¤ÐC¨VÐC°TÐCÐ Ð  ¨V°TÑ:Ô:ÐC¸eÐCÐ:¸eÐCÐCÐCÑCÕCÔCÐCÐCÐCÐCÐ:¸eÐCÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔCˆsÑCÔCÐCÕCÔCˆsÑCÔCÐCÐCÕCÔCÐ ÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔC ÑCÔCÐCÕCÔC ÑCÔCÐCÐCÕCÔC ÑCÔCÕCÔC¨VÑCÔCÕCÔC°TÑCÔCÕCÔCÐ:ÑCÔCÕCÔC¸eÑCÔCÐCÐCÑCÐCÐCÐCÐCÐCÑCÐCÕCÕCÔCÐCÑCÔCÑCÔCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCØ”9Ð"�s�9‰~Œ~Ð" Ð"ˆ~ Ò"Ð"Ð"Ñ"Õ"Ô"Ð"Ð"Ð"Ð"ˆ~ Ð"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"�sÑ"Ô"Ð"Õ"Ô"�sÑ"Ô"Ð"Ð"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"�1Ñ"Ô"Ð"Õ"Ô"�1Ñ"Ô"Ð"Ð"Õ"Ô"�9Ñ"Ô"Õ"Ô"ˆ~Ñ"Ô"Õ"Ô" Ñ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ó    c                óÌ  — t          ¦   «         }|                     ddd¦  «        }|j        }|j        }d}d} ||||¦  «        }d}||u }	|	�s4t	          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	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        d
œz  }
dd|
iz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}	}|j        }|j        }d} |||¦  «        }d}||u }|�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	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }
t          t	          j        |
¦  «        ¦  «        ‚d x}x}x}x}x}}|j        }|j        }d}d}d} |||||¦  «        }	d}|	|u }|�sGt	          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	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |	¦  «        t	          j	        |¦  «        dœ	z  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}	x}}d S )Nr_   r`   ra   ÚguestTre   rg   rM   r!   rh   rk   rl   )z|%(py9)s
{%(py9)s = %(py2)s
{%(py2)s = %(py0)s.decline_invite
}(%(py5)s
{%(py5)s = %(py3)s.party_id
}, %(py7)s)
} is %(py12)s©r#   r$   r-   r%   r'   r4   Úpy12úassert %(py14)srj   ÚGuesté   Fro   rp   rr   rs   )r
   r:   rw   rx   r<   r=   r>   r?   r@   rA   rB   rC   Údecline_invitery   )rL   rM   r!   rN   rO   rU   r{   r|   r}   r~   r   r€   Ú@py_assert11Ú@py_format13r�   r‚   rƒ   s                    r\   Ú"test_decline_invite_and_expirationz9TestPartyLifecycleUnit.test_decline_invite_and_expirationA   sÞ  € Ý‰nŒnˆØ×Ò˜V X¨rÑ2Ô2ˆØÔ ÐE ¤ÐE¨VÐE°WÐEÐ Ð  ¨V°WÑ=Ô=ÐEÀÐEÐ=ÀÐEÐEÐEÑEÕEÔEÐEÐEÐEÐEÐ=ÀÐEÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔEˆsÑEÔEÐEÕEÔEˆsÑEÔEÐEÐEÕEÔEÐ ÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔE ÑEÔEÐEÕEÔE ÑEÔEÐEÐEÕEÔE ÑEÔEÕEÔE¨VÑEÔEÕEÔE°WÑEÔEÕEÔEÐ=ÑEÔEÕEÔEÀÑEÔEÐEÐEÑEÐEÐEÐEÐEÐEÑEÐEÕEÕEÔEÐEÑEÔEÑEÔEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEØÔ!Ð> !¤*Ð>¨gÐ>Ð!Ð! *¨gÑ6Ô6Ð>¸$Ð>Ð6¸$Ð>Ð>Ð>Ñ>Õ>Ô>Ð>Ð>Ð>Ð>Ð6¸$Ð>Ñ>Ô>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô>ˆsÑ>Ô>Ð>Õ>Ô>ˆsÑ>Ô>Ð>Ð>Õ>Ô>Ð!Ñ>Ô>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô> !Ñ>Ô>Ð>Õ>Ô> !Ñ>Ô>Ð>Ð>Õ>Ô> *Ñ>Ô>Õ>Ô>¨gÑ>Ô>Õ>Ô>Ð6Ñ>Ô>Õ>Ô>¸$Ñ>Ô>Ð>Ð>Ñ>Ð>Ð>Ð>Ð>Ð>Ñ>Ð>Õ>Õ>Ô>Ð>Ñ>Ô>Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>ØÔ ÐK ¤ÐK¨WÐK°gÐK¸rÐKÐ Ð  ¨W°g¸rÑBÔBÐKÀeÐKÐBÀeÐKÐKÐKÑKÕKÔKÐKÐKÐKÐKÐBÀeÐKÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔKˆsÑKÔKÐKÕKÔKˆsÑKÔKÐKÐKÕKÔKÐ ÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔK ÑKÔKÐKÕKÔK ÑKÔKÐKÐKÕKÔK ÑKÔKÕKÔK¨WÑKÔKÕKÔK°gÑKÔKÕKÔK¸rÑKÔKÕKÔKÐBÑKÔKÕKÔKÀeÑKÔKÐKÐKÑKÐKÐKÐKÐKÐKÑKÐKÕKÕKÔKÐKÑKÔKÑKÔKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKr…   c                óÈ  — t          ¦   «         }|                     ddd¦  «        }|                     |j        dd¦  «         |                     |j        ddd¦  «         |j        }|j        }d}d} ||||¦  «        }d}||u }	|	�s4t          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        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }
dd|
iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}	}|j        }|j        }d}d} ||||¦  «        }d}||u }	|	�s4t          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        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }
dd|
iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}	}|j        }d}||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œz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|j        d         }|j        }t"          j        }||k    }|sÇt          j        d|fd||f¦  «        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        d         }|j        }t"          j        }||k    }|sÇt          j        d|fd||f¦  «        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}}d S )Nr_   r`   ra   ÚsubÚ	SubLeaderé*   Fre   )z‡%(py11)s
{%(py11)s = %(py2)s
{%(py2)s = %(py0)s.promote_leader
}(%(py5)s
{%(py5)s = %(py3)s.party_id
}, %(py7)s, %(py9)s)
} is %(py14)srM   r!   rh   rk   rl   Tr   r    r"   r&   r'   r1   r   r2   r3   r4   )zH%(py3)s
{%(py3)s = %(py1)s.role
} == %(py7)s
{%(py7)s = %(py5)s.MEMBER
})r
   r:   rw   rx   ry   Úpromote_leaderr<   r=   r>   r?   r@   rA   rB   rC   r;   rD   rE   r   rF   ÚMEMBER)rL   rM   r!   rN   rO   rU   r{   r|   r}   r~   r   r€   rP   rQ   rR   rX   rS   rY   s                     r\   Ú,test_promote_leader_and_non_leader_rejectionzCTestPartyLifecycleUnit.test_promote_leader_and_non_leader_rejectionH   ss  € Ý‰nŒnˆØ×Ò˜V X¨rÑ2Ô2ˆØ×Ò˜!œ* f¨eÑ4Ô4Ð4Ø×Ò˜!œ* e¨[¸"Ñ=Ô=Ð=ð Ô!ÐE !¤*ÐE¨eÐE°VÐEÐ!Ð! *¨e°VÑ<Ô<ÐEÀÐEÐ<ÀÐEÐEÐEÑEÕEÔEÐEÐEÐEÐEÐ<ÀÐEÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔEˆsÑEÔEÐEÕEÔEˆsÑEÔEÐEÐEÕEÔEÐ!ÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔE !ÑEÔEÐEÕEÔE !ÑEÔEÐEÐEÕEÔE *ÑEÔEÕEÔE¨eÑEÔEÕEÔE°VÑEÔEÕEÔEÐ<ÑEÔEÕEÔEÀÑEÔEÐEÐEÑEÐEÐEÐEÐEÐEÑEÐEÕEÕEÔEÐEÑEÔEÑEÔEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEàÔ!ÐD !¤*ÐD¨fÐD°eÐDÐ!Ð! *¨f°eÑ<Ô<ÐDÀÐDÐ<ÀÐDÐDÐDÑDÕDÔDÐDÐDÐDÐDÐ<ÀÐDÑDÔDÐDÕDÔDÑDÔDÐDÐDÕDÔDˆsÑDÔDÐDÕDÔDˆsÑDÔDÐDÐDÕDÔDÐ!ÑDÔDÐDÕDÔDÑDÔDÐDÐDÕDÔD !ÑDÔDÐDÕDÔD !ÑDÔDÐDÐDÕDÔD *ÑDÔDÕDÔD¨fÑDÔDÕDÔD°eÑDÔDÕDÔDÐ<ÑDÔDÕDÔDÀÑDÔDÐDÐDÑDÐDÐDÐDÐDÐDÑDÐDÕDÕDÔDÐDÑDÔDÑDÔDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDØŒ{Ð#˜eÐ#ˆ{˜eÒ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆ{˜eÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆqÑ#Ô#Ð#Õ#Ô#ˆqÑ#Ô#Ð#Ð#Õ#Ô#ˆ{Ñ#Ô#Õ#Ô#˜eÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ØŒy˜ÔÐ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Õ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Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ØŒy˜Ô Ð9Ð Ô%Ð9­Ô)9Ð9Ð%Ð)9Ò9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð%Ð)9Ð9Ñ9Ô9Õ9Ô9Ð Ñ9Ô9Õ9Ô9Ð%Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9­Ñ9Ô9Ð9Õ9Ô9­Ñ9Ô9Ð9Ð9Õ9Ô9Ð)9Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9r…   c                ó	  — t          ¦   «         }|                     ddd¦  «        }|                     |j        dd¦  «         |                     |j        ddd¦  «         |                     d¦  «        }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  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}|j        }d}||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œz  }dd|iz  }
t          t          j        |
¦  «        ¦  «        ‚d x}x}	}|j        d         }|j        }t"          j        }||k    }|sÇt          j        d|fd||f¦  «        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}}|                     d¦  «        }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  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}|j        }|j        }||v}	|	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        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}	}d S ) Nr_   r`   ra   Úm2ÚMember2)úis not)z%(py0)s is not %(py3)sÚrem)r#   r-   zassert %(py5)sr%   r   r    r"   r&   r'   r1   r   r2   r3   r4   re   )z%(py0)s is %(py3)sÚdis©únot in©zQ%(py2)s
{%(py2)s = %(py0)s.party_id
} not in %(py6)s
{%(py6)s = %(py4)s.parties
}r!   rM   r5   r8   r.   )r
   r:   rw   rx   ry   Úleave_partyr<   r=   r>   r?   r@   rA   rB   rC   r;   rD   rE   r   rF   Úparties)rL   rM   r!   rœ   rS   rN   Ú@py_format4rQ   rO   rP   rR   rX   rU   rY   r�   rZ   r[   rV   s                     r\   Ú+test_leave_party_auto_promotion_and_disbandzBTestPartyLifecycleUnit.test_leave_party_auto_promotion_and_disbandV   s  € Ý‰nŒnˆØ×Ò˜V X¨rÑ2Ô2ˆØ×Ò˜!œ* f¨dÑ3Ô3Ð3Ø×Ò˜!œ* d¨I°rÑ:Ô:Ð:ð �oŠo˜fÑ%Ô%ˆØÐˆs˜$ˆÐÐÐÕÔÐÐÐÐˆs˜$ÐÑÔÐÕÔÑÔÐÐÕÔˆsÑÔÐÕÔˆsÑÔÐÐÕÔ˜$ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØŒ}Ð$ Ð$ˆ} Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆ} Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆsÑ$Ô$Ð$Õ$Ô$ˆsÑ$Ô$Ð$Ð$Õ$Ô$ˆ}Ñ$Ô$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ØŒ{˜4Ô Ð9Ð Ô%Ð9­Ô)9Ð9Ð%Ð)9Ò9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð%Ð)9Ð9Ñ9Ô9Õ9Ô9Ð Ñ9Ô9Õ9Ô9Ð%Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9­Ñ9Ô9Ð9Õ9Ô9­Ñ9Ô9Ð9Ð9Õ9Ô9Ð)9Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ð �oŠo˜dÑ#Ô#ˆØÐˆs�dˆ{ÐÐÐÕÔÐÐÐÐˆs�dÐÑÔÐÕÔÑÔÐÐÕÔˆsÑÔÐÕÔˆsÑÔÐÐÕÔ�dÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØŒzÐ, ¤Ð,ˆz Ð,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,ˆz Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆqÑ,Ô,Ð,Õ,Ô,ˆqÑ,Ô,Ð,Ð,Õ,Ô,ˆzÑ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô, Ñ,Ô,Ð,Õ,Ô, Ñ,Ô,Ð,Ð,Õ,Ô, Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,r…   c                ó�  — t          ¦   «         }|                     ddd¦  «        }|                     |j        dd¦  «         |                     |j        ddd¦  «         |j        }|j        }d}d} ||||¦  «        }d}||u }	|	�s4t          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        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }
dd|
iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}	}|j        }|j        }d}d} ||||¦  «        }d}||u }	|	�s4t          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        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }
dd|
iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}	}d}|j        }||v}|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  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|j        }|j        }d} |||¦  «        }d}||u }|�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        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }
t          t          j        |
¦  «        ¦  «        ‚d x}x}x}x}x}}|j        }|j        }||v}|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        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d S )Nr_   r`   ra   Ú	bad_actorÚTrollé
   Fre   )z„%(py11)s
{%(py11)s = %(py2)s
{%(py2)s = %(py0)s.kick_member
}(%(py5)s
{%(py5)s = %(py3)s.party_id
}, %(py7)s, %(py9)s)
} is %(py14)srM   r!   rh   rk   rl   Trž   )z3%(py1)s not in %(py5)s
{%(py5)s = %(py3)s.members
})r,   r-   r%   r&   r'   )z{%(py9)s
{%(py9)s = %(py2)s
{%(py2)s = %(py0)s.disband_party
}(%(py5)s
{%(py5)s = %(py3)s.party_id
}, %(py7)s)
} is %(py12)srˆ   rŠ   rj   r    r5   r8   r.   )r
   r:   rw   rx   ry   Úkick_memberr<   r=   r>   r?   r@   rA   rB   rC   rD   Údisband_partyr¢   )rL   rM   r!   rN   rO   rU   r{   r|   r}   r~   r   r€   rX   rS   rQ   rR   rŽ   r�   rZ   rP   r[   rV   s                         r\   Ú"test_kick_member_and_disband_partyz9TestPartyLifecycleUnit.test_kick_member_and_disband_partyg   së  € Ý‰nŒnˆØ×Ò˜V X¨rÑ2Ô2ˆØ×Ò˜!œ* f¨kÑ:Ô:Ð:Ø×Ò˜!œ* k°7¸BÑ?Ô?Ð?ð ŒÐC˜qœzÐC¨6ÐC°6ÐCˆˆ˜z¨6°6Ñ:Ô:ÐC¸eÐCÐ:¸eÐCÐCÐCÑCÕCÔCÐCÐCÐCÐCÐ:¸eÐCÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔCˆsÑCÔCÐCÕCÔCˆsÑCÔCÐCÐCÕCÔCˆÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔC˜qÑCÔCÐCÕCÔC˜qÑCÔCÐCÐCÕCÔC˜zÑCÔCÕCÔC¨6ÑCÔCÕCÔC°6ÑCÔCÕCÔCÐ:ÑCÔCÕCÔC¸eÑCÔCÐCÐCÑCÐCÐCÐCÐCÐCÑCÐCÕCÕCÔCÐCÑCÔCÑCÔCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCàŒÐG˜qœzÐG¨6ÐG°;ÐGˆˆ˜z¨6°;Ñ?Ô?ÐGÀ4ÐGÐ?À4ÐGÐGÐGÑGÕGÔGÐGÐGÐGÐGÐ?À4ÐGÑGÔGÐGÕGÔGÑGÔGÐGÐGÕGÔGˆsÑGÔGÐGÕGÔGˆsÑGÔGÐGÐGÕGÔGˆÑGÔGÐGÕGÔGÑGÔGÐGÐGÕGÔG˜qÑGÔGÐGÕGÔG˜qÑGÔGÐGÐGÕGÔG˜zÑGÔGÕGÔG¨6ÑGÔGÕGÔG°;ÑGÔGÕGÔGÐ?ÑGÔGÕGÔGÀ4Ñ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ÐGÐGØÐ+ !¤)Ð+ˆ{ )Ð+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+ˆ{ )Ð+Ñ+Ô+Õ+Ô+ˆ{Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ !Ñ+Ô+Ð+Õ+Ô+ !Ñ+Ô+Ð+Ð+Õ+Ô+ )Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ð Ô Ð< ¤Ð<¨VÐ<Ð Ð  ¨VÑ4Ô4Ð<¸Ð<Ð4¸Ð<Ð<Ð<Ñ<Õ<Ô<Ð<Ð<Ð<Ð<Ð4¸Ð<Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<ˆsÑ<Ô<Ð<Õ<Ô<ˆsÑ<Ô<Ð<Ð<Õ<Ô<Ð Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô< Ñ<Ô<Ð<Õ<Ô< Ñ<Ô<Ð<Ð<Õ<Ô< Ñ<Ô<Õ<Ô<¨VÑ<Ô<Õ<Ô<Ð4Ñ<Ô<Õ<Ô<¸Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<ØŒzÐ, ¤Ð,ˆz Ð,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,ˆz Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆqÑ,Ô,Ð,Õ,Ô,ˆqÑ,Ô,Ð,Ð,Õ,Ô,ˆzÑ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô, Ñ,Ô,Ð,Õ,Ô, Ñ,Ô,Ð,Ð,Õ,Ô, Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,r…   c                óØ	  — t          ¦   «         }|                     ddd¦  «        }|                     |j        dd¦  «         |                     |j        ddd¦  «         |j        }|j        }d}t          j        } ||||¦  «        }d}||u }	|	�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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}x}x}x}	}|j        }|j        }d}t          j        } ||||¦  «        }d}||u }	|	�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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}x}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}}d S )Nr_   r`   é2   r™   ÚM2Fre   )z²%(py12)s
{%(py12)s = %(py2)s
{%(py2)s = %(py0)s.set_loot_allocation_mode
}(%(py5)s
{%(py5)s = %(py3)s.party_id
}, %(py7)s, %(py10)s
{%(py10)s = %(py8)s.PERMANENT
})
} is %(py15)srM   r!   r   )	r#   r$   r-   r%   r'   r.   r0   r‰   Úpy15úassert %(py17)sÚpy17Tr   )zP%(py2)s
{%(py2)s = %(py0)s.loot_mode
} == %(py6)s
{%(py6)s = %(py4)s.PERMANENT
}r5   r8   r.   )r
   r:   rw   rx   ry   Úset_loot_allocation_moder   Ú	PERMANENTr<   r=   r>   r?   r@   rA   rB   rC   rG   )rL   rM   r!   rN   rO   rU   Ú@py_assert9rŽ   r‚   r}   Ú@py_format16Ú@py_format18rZ   rP   r[   rV   s                   r\   Ú)test_set_loot_allocation_mode_leader_onlyz@TestPartyLifecycleUnit.test_set_loot_allocation_mode_leader_onlyw   s.  € Ý‰nŒnˆØ×Ò˜V X¨rÑ2Ô2ˆØ×Ò˜!œ* f¨dÑ3Ô3Ð3Ø×Ò˜!œ* d¨D°"Ñ5Ô5Ð5àÔ+Ðd¨A¬JÐd¸ÐdÕ>PÔ>ZÐdÐ+Ð+¨J¸Ð>ZÑ[Ô[ÐdÐ_dÐdÐ[Ð_dÐdÐdÐdÑdÕdÔdÐdÐdÐdÐdÐ[Ð_dÐdÑdÔdÐdÕdÔdÑdÔdÐdÐdÕdÔdˆsÑdÔdÐdÕdÔdˆsÑdÔdÐdÐdÕdÔdÐ+ÑdÔdÐdÕdÔdÑdÔdÐdÐdÕdÔd¨AÑdÔdÐdÕdÔd¨AÑdÔdÐdÐdÕdÔd¨JÑdÔdÕdÔd¸ÑdÔdÐdÕdÔdÑdÔdÐdÐdÕdÔdÕ>PÑdÔdÐdÕdÔdÕ>PÑdÔdÐdÐdÕdÔdÐ>ZÑdÔdÕdÔdÐ[ÑdÔdÕdÔdÐ_dÑdÔdÐdÐdÑdÐdÐdÐdÐdÐdÑdÐdÕdÕdÔdÐdÑdÔdÑdÔdÐdÐdÐdÐdÐdÐdÐdÐdÐdÐdÐdÐdÐdÐdÐdØÔ+Ðe¨A¬JÐe¸ÐeÕ@RÔ@\ÐeÐ+Ð+¨J¸Ð@\Ñ]Ô]ÐeÐaeÐeÐ]ÐaeÐeÐeÐeÑeÕeÔeÐeÐeÐeÐeÐ]ÐaeÐeÑeÔeÐeÕeÔeÑeÔeÐeÐeÕeÔeˆsÑeÔeÐeÕeÔeˆsÑeÔeÐeÐeÕeÔeÐ+ÑeÔeÐeÕeÔeÑeÔeÐeÐeÕeÔe¨AÑeÔeÐeÕeÔe¨AÑeÔeÐeÐeÕeÔe¨JÑeÔeÕeÔe¸ÑeÔeÐeÕeÔeÑeÔeÐeÐeÕeÔeÕ@RÑeÔeÐeÕeÔeÕ@RÑeÔeÐeÐeÕeÔeÐ@\ÑeÔeÕeÔeÐ]ÑeÔeÕeÔeÐaeÑeÔeÐeÐeÑeÐeÐeÐeÐeÐeÑeÐeÕeÕeÔeÐeÑeÔeÑeÔeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeØŒ{Ð:Õ0Ô:Ð:ˆ{Ð:Ò:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:ˆ{Ð:Ð:Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:ˆqÑ:Ô:Ð:Õ:Ô:ˆqÑ:Ô:Ð:Ð:Õ:Ô:ˆ{Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:Õ0Ñ:Ô:Ð:Õ:Ô:Õ0Ñ:Ô:Ð:Ð:Õ:Ô:Ð:Ñ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:r…   N©r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r]   r„   r�   r—   r¤   r«   r·   © r…   r\   r   r   '   sª   € € € € € Ø9Ð9ð	4ð 	4ð 	4ð 	4ð
#ð 
#ð 
#ð 
#ðLð Lð Lð Lð:ð :ð :ð :ð-ð -ð -ð -ð"-ð -ð -ð -ð ;ð ;ð ;ð ;ð ;ð ;r…   r   c                  ó:   — e Zd ZdZd
d„Zd
d„Zd
d„Zd
d„Zd
d„Zd	S )ÚTestPartyScalingCalculatorUnitz;Tests PoE2 mathematical formulas in PartyScalingCalculator.r   r   c           
     ó„  — t          ddddddd¬¦  «        }t          dd	dddd
d¬¦  «        }t          ddddddd¬¦  «        }t          ddddddd¬¦  «        }t          ddddddd¬¦  «        }t          dddddddd¬¦  «        }||||||g}t          j        |ddd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}}
d#„ |D ¦   «         }g }d}	|	|v }|}|rd}||v }|}|�sXt	          j        d$|fd%|	|f¦  «        t	          j	        |	¦  «        d&t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd&d'œz  }d(d)|iz  }|                     |¦  «         |r‹t	          j        d$|fd*||f¦  «        t	          j	        |¦  «        d&t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd&d+œz  }d,d-|iz  }|                     |¦  «         t	          j        |d.¦  «        i z  }d/d0|iz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}x}	x}x}}d S )1Nr   ÚAr­   Ú	zone_wildr   ç        )ÚwxÚwyÚp2ÚBç      $@g\�Âõ(\&@Úp3ÚCg…ëQ¸.@Úp4ÚDÚinst_2Úp5ÚEÚ	zone_townÚp6ÚFF)rÄ   rÅ   Ú	is_onlineg      .@)Úradiusrb   r   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr*   Únearby©r#   r,   r-   r7   r8   r.   c                ó   — g | ]	}|j         ‘Œ
S r½   )Ú	player_id)Ú.0rd   s     r\   ú
<listcomp>z_TestPartyScalingCalculatorUnit.test_nearby_spatial_membership_and_filtering.<locals>.<listcomp>�   s   € Ð,Ð,Ð, �”Ð,Ð,Ð,r…   )Úin)z%(py3)s in %(py5)sÚpids)r-   r%   z%(py7)sr'   )z%(py10)s in %(py12)s)r0   r‰   z%(py14)srj   r   r°   r±   )r   r	   Úcalculate_nearby_membersr*   r<   r=   r>   r?   r@   rA   rB   rC   ÚappendÚ_format_boolop)rL   Úm1r™   Úm3Úm4Úm5Úm6rD   rÕ   rS   rZ   rO   r[   rV   rÜ   rN   rX   r´   rŽ   rQ   rR   r�   r   rµ   r¶   s                            r\   Ú,test_nearby_spatial_membership_and_filteringzKTestPartyScalingCalculatorUnit.test_nearby_spatial_membership_and_filtering…   sõ  € Ý˜d C¨¨[¸(ÀsÈsÐSÑSÔSˆÝ˜d C¨¨[¸(ÀtÐPUÐVÑVÔVˆÝ˜d C¨¨[¸(ÀuÐQTÐUÑUÔUˆÝ˜d C¨¨[¸(ÀsÈsÐSÑSÔSˆÝ˜d C¨¨[¸(ÀsÈsÐSÑSÔSˆÝ˜d C¨¨[¸(ÀsÈsÐ^cÐdÑdÔdˆà�r˜2˜r 2 rÐ*ˆÝ'Ô@ÀÈ#ÈsÐT_ÐaiÐrvÐwÑwÔwˆÝ�6‰{Œ{Ð˜aÐˆ{˜aÒÐÐÐÕÔÐÐÐÐˆ{˜aÐÑÔÐÕÔÑÔÐÐÕÔ�sÑÔÐÕÔ�sÑÔÐÐÐÕÔÑÔÐÐÕÔ�6ÑÔÐÕÔ�6ÑÔÐÐÕÔˆ{ÑÔÕÔ˜aÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØ,Ð, VÐ,Ñ,Ô,ˆØ,Ð,ˆtÐ,ˆt�tˆ|Ð,Ð,Ð,Ð,Ð, Ð, ¨ Ð,Ð,Ð,Ð,Ñ,Õ,Ô,Ð,Ð,Ð,Ð,ˆt�tÐ,Ñ,Ô,Õ,Ô,ˆtÑ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,�tÑ,Ô,Ð,Õ,Ô,�tÑ,Ô,Ð,Ð,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Ð,×,Ò,Ð,Ñ,Ô,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð, ¨Ð,Ñ,Ô,Õ,Ô, Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,¨Ñ,Ô,Ð,Õ,Ô,¨Ñ,Ô,Ð,Ð,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Ð,×,Ò,Ð,Ñ,Ô,Ð,Õ,Ô,Ð,Ð,Ñ,Ô,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,r…   c           	     ój  — t          ddddd¦  «        }t          ddddd¦  «        }t          j        d	||g¦  «        }|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
        |¦  «        t          j
        |¦  «        dœz  }	dd|	iz  }
t          t          j        |
¦  «        ¦  «        ‚d x}x}x}x}}|d         }|d         }d}||z  }||k    }|st          j        d|fd||f¦  «        t          j
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}}d S )NÚlowÚLowé   Úz1Úi1ÚhighÚHighéP   é'  iÈ2  )ú<=)zd%(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.values
}()
})
} <= %(py10)sÚsumÚres)r#   r,   r-   r%   r'   r0   zassert %(py12)sr‰   r¨   ©ú>)z%(py1)s > (%(py4)s * %(py6)s))r,   r6   r7   r3   r4   )r   r	   Úcalculate_party_expÚvaluesrñ   r<   r=   r>   r?   r@   rA   rB   rC   )rL   rà   r™   rò   rS   rO   rU   r´   r{   rW   r�   rX   rP   rZ   rT   rR   rY   s                    r\   Ú)test_exp_scaling_pool_and_level_weightingzHTestPartyScalingCalculatorUnit.test_exp_scaling_pool_and_level_weighting“   ss  € Ý˜e U¨B°°dÑ;Ô;ˆÝ˜f f¨b°$¸Ñ=Ô=ˆÝ$Ô8¸ÀÀRÀÑIÔIˆà”:Ð)�:�:‘<”<Ð)�s�<Ñ Ô Ð) EÐ)Ð  EÒ)Ð)Ð)Ñ)Õ)Ô)Ð)Ð)Ð)Ð)Ð  EÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)�sÑ)Ô)Ð)Õ)Ô)�sÑ)Ô)Ð)Ð)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)�3Ñ)Ô)Ð)Õ)Ô)�3Ñ)Ô)Ð)Ð)Õ)Ô)�:Ñ)Ô)Õ)Ô)�<Ñ)Ô)Õ)Ô)Ð Ñ)Ô)Õ)Ô) EÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ø�6Œ{Ð,˜S œZÐ,¨"Ð,˜Z¨"™_Ð,ˆ{˜_Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,ˆ{˜_Ð,Ñ,Ô,Õ,Ô,ˆ{Ñ,Ô,Õ,Ô,˜ZÑ,Ô,Õ,Ô,¨"Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,r…   c                ód  — t          ddddd¦  «        g}t          j        d|d¬¦  «        }|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 S )Nr   ÚSoloré   rê   rë   iè  r­   )Úmonster_leveléd   )ú<)z%(py1)s < %(py4)s©r,   r6   úassert %(py6)sr7   )r   r	   rõ   r<   r=   rA   rB   rC   )rL   rd   rò   rX   rP   rS   Ú@py_format5r[   s           r\   Ú test_exp_scaling_level_gap_decayz?TestPartyScalingCalculatorUnit.test_exp_scaling_level_gap_decay›   sÜ   € Ý˜d F¨B°°dÑ;Ô;Ð<ˆå$Ô8¸¸qÐPRÐSÑSÔSˆØ�4ŒyÐ˜3Ðˆy˜3ŠÐÐÐÕÔÐÐÐÐˆy˜3ÐÑÔÕÔˆyÑÔÕÔ˜3ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐÐÐr…   c                óœ	  — t          dd¦  «        D �]¹}t          j        |¦  «        \  }}}t          j        }d}d}d}||z
  }	||	z  }
||
z   } |||¦  «        }|�sJddt          j        ¦   «         v st          j        t          ¦  «        rt          j	        t          ¦  «        ndt          j	        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j	        |¦  «        ndt          j	        |¦  «        t          j	        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j	        |¦  «        ndt          j	        |¦  «        t          j	        |¦  «        d	œz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}	x}
x}}t          j        }d}d}d}||z
  }	||	z  }
||
z   } |||¦  «        }|�sJddt          j        ¦   «         v st          j        t          ¦  «        rt          j	        t          ¦  «        ndt          j	        |¦  «        d
t          j        ¦   «         v st          j        |¦  «        rt          j	        |¦  «        nd
t          j	        |¦  «        t          j	        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j	        |¦  «        ndt          j	        |¦  «        t          j	        |¦  «        d	œz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}	x}
x}}t          j        }d}d}d}||z
  }	||	z  }
||
z   } |||¦  «        }|�sJddt          j        ¦   «         v st          j        t          ¦  «        rt          j	        t          ¦  «        ndt          j	        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j	        |¦  «        ndt          j	        |¦  «        t          j	        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j	        |¦  «        ndt          j	        |¦  «        t          j	        |¦  «        d	œz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}	x}
x}}�Œ»d S )Nr(   rc   ç      ð?g      à?zyassert %(py15)s
{%(py15)s = %(py2)s
{%(py2)s = %(py0)s.isclose
}(%(py3)s, (%(py5)s + (%(py7)s * (%(py8)s - %(py10)s))))
}ÚmathÚitem_qÚn)r#   r$   r-   r%   r'   r.   r0   r¯   Úcurr_qg333333Ó?Úrar)rv   r	   Úcalculate_loot_multipliersr  Úiscloser>   r?   r<   r@   rA   rB   rC   )rL   r  r  r  r  rN   rO   rU   r´   rŽ   r~   r}   r‚   rµ   s                 r\   Ú#test_loot_multipliers_linear_growthzBTestPartyScalingCalculatorUnit.test_loot_multipliers_linear_growth¡   s  € Ý�q˜!‘”ð 	;ñ 	;ˆAÝ"8Ô"SÐTUÑ"VÔ"VÑˆF�F˜CÝ”<Ð=¨Ð=¨dÐ=¸!Ð=°a¸!±eÐ=¨d°e©nÐ=¨¨nÑ(<Ð=�<�< Ð(<Ñ=Ô=Ð=Ð=Ñ=Ð=Ð=Õ=Ô=Ñ=Ô=Ð=Ð=Õ=Ô=•4Ñ=Ô=Ð=Õ=Ô=•4Ñ=Ô=Ð=Ð=Õ=Ô=�<Ñ=Ô=Ð=Õ=Ô=Ñ=Ô=Ð=Ð=Õ=Ô= Ñ=Ô=Ð=Õ=Ô= Ñ=Ô=Ð=Ð=Õ=Ô=¨Ñ=Ô=Õ=Ô=¨dÑ=Ô=Ð=Õ=Ô=Ñ=Ô=Ð=Ð=Õ=Ô=°aÑ=Ô=Ð=Õ=Ô=°aÑ=Ô=Ð=Ð=Õ=Ô=¸!Ñ=Ô=Õ=Ô=Ð=Ñ=Ô=Ð=Ð=Ñ=Ð=Õ=Õ=Ô=Ð=Ñ=Ô=Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ý”<Ð=¨Ð=¨dÐ=¸!Ð=°a¸!±eÐ=¨d°e©nÐ=¨¨nÑ(<Ð=�<�< Ð(<Ñ=Ô=Ð=Ð=Ñ=Ð=Ð=Õ=Ô=Ñ=Ô=Ð=Ð=Õ=Ô=•4Ñ=Ô=Ð=Õ=Ô=•4Ñ=Ô=Ð=Ð=Õ=Ô=�<Ñ=Ô=Ð=Õ=Ô=Ñ=Ô=Ð=Ð=Õ=Ô= Ñ=Ô=Ð=Õ=Ô= Ñ=Ô=Ð=Ð=Õ=Ô=¨Ñ=Ô=Õ=Ô=¨dÑ=Ô=Ð=Õ=Ô=Ñ=Ô=Ð=Ð=Õ=Ô=°aÑ=Ô=Ð=Õ=Ô=°aÑ=Ô=Ð=Ð=Õ=Ô=¸!Ñ=Ô=Õ=Ô=Ð=Ñ=Ô=Ð=Ð=Ñ=Ð=Õ=Õ=Ô=Ð=Ñ=Ô=Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ý”<Ð: SÐ:¨4Ð:°qÐ:°1°q±5Ð:¨4°5©>Ð: S¨>Ñ%9Ð:�<�< Ð%9Ñ:Ô:Ð:Ð:Ñ:Ð:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:•4Ñ:Ô:Ð:Õ:Ô:•4Ñ:Ô:Ð:Ð:Õ:Ô:�<Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô: Ñ:Ô:Ð:Õ:Ô: Ñ:Ô:Ð:Ð:Õ:Ô: SÑ:Ô:Õ:Ô:¨4Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:°1Ñ:Ô:Ð:Õ:Ô:°1Ñ:Ô:Ð:Ð:Õ:Ô:°qÑ:Ô:Õ:Ô:Ð:Ñ:Ô:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ñ:ð		;ð 	;r…   c                óÎ  — t          j        dd¬¦  «        }t          j        dd¬¦  «        }t          j        dd¬¦  «        }t          j        }|d         }d} |||¦  «        }|s»dd	t	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd	t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d
œz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}x}}t          j        }|d         }d} |||¦  «        }|s»dd	t	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd	t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d
œz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}x}}t          j        }|d         }d} |||¦  «        }|s»dd	t	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd	t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d
œz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}x}}t          j        }|d         }d} |||¦  «        }|s»dd	t	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd	t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d
œz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}x}}t          j        }|d         }d} |||¦  «        }|s»dd	t	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd	t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d
œz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}x}}t          j        ddd¬¦  «        }	|	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         }
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 S )NÚCOMMONrt   )Ú
party_sizeÚRAREÚBOSSÚhp_multg      @zRassert %(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.isclose
}(%(py4)s, %(py6)s)
}r  )r#   r$   r6   r7   r.   g      @ç      @Ú
armor_multç      ø?Ú	res_bonusrÈ   rï   )Úbase_hpÚrankÚparty_countÚ	scaled_hpi`ê  r   ©z%(py1)s == %(py4)srý   rþ   r7   Ú	poise_maxg     ”Á@)r	   Úcalculate_monster_scalingr  r	  r>   r?   r<   r@   rA   rB   rC   r=   )rL   ÚcÚrÚbrN   rP   rZ   rT   rV   ÚsrX   rS   rÿ   r[   s                 r\   Ú'test_monster_scaling_hp_armor_and_poisezFTestPartyScalingCalculatorUnit.test_monster_scaling_hp_armor_and_poise¨   s  € Ý"Ô<¸XÐRSÐTÑTÔTˆÝ"Ô<¸VÐPQÐRÑRÔRˆÝ"Ô<¸VÐPQÐRÑRÔRˆÝŒ|Ð/˜A˜iœLÐ/¨$Ð/ˆ|ˆ|˜L¨$Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/�tÑ/Ô/Ð/Õ/Ô/�tÑ/Ô/Ð/Ð/Õ/Ô/ˆ|Ñ/Ô/Õ/Ô/˜LÑ/Ô/Õ/Ô/¨$Ñ/Ô/Õ/Ô/Ð/Ñ/Ô/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ÝŒ|Ð/˜A˜iœLÐ/¨$Ð/ˆ|ˆ|˜L¨$Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/�tÑ/Ô/Ð/Õ/Ô/�tÑ/Ô/Ð/Ð/Õ/Ô/ˆ|Ñ/Ô/Õ/Ô/˜LÑ/Ô/Õ/Ô/¨$Ñ/Ô/Õ/Ô/Ð/Ñ/Ô/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ÝŒ|Ð/˜A˜iœLÐ/¨$Ð/ˆ|ˆ|˜L¨$Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/�tÑ/Ô/Ð/Õ/Ô/�tÑ/Ô/Ð/Ð/Õ/Ô/ˆ|Ñ/Ô/Õ/Ô/˜LÑ/Ô/Õ/Ô/¨$Ñ/Ô/Õ/Ô/Ð/Ñ/Ô/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ÝŒ|Ð2˜A˜lœOÐ2¨TÐ2ˆ|ˆ|˜O¨TÑ2Ô2Ð2Ð2Ð2Ð2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2�tÑ2Ô2Ð2Õ2Ô2�tÑ2Ô2Ð2Ð2Õ2Ô2ˆ|Ñ2Ô2Õ2Ô2˜OÑ2Ô2Õ2Ô2¨TÑ2Ô2Õ2Ô2Ð2Ñ2Ô2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2ÝŒ|Ð1˜A˜kœNÐ1¨DÐ1ˆ|ˆ|˜N¨DÑ1Ô1Ð1Ð1Ð1Ð1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1�tÑ1Ô1Ð1Õ1Ô1�tÑ1Ô1Ð1Ð1Õ1Ô1ˆ|Ñ1Ô1Õ1Ô1˜NÑ1Ô1Õ1Ô1¨DÑ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õ #Ô<ÀUÐQWÐefÐgÑgÔgˆØ�Œ~Ð& Ð&ˆ~ Ò&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ~ Ð&Ñ&Ô&Õ&Ô&ˆ~Ñ&Ô&Õ&Ô& Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø�Œ~Ð' Ð'ˆ~ Ò'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'ˆ~ Ð'Ñ'Ô'Õ'Ô'ˆ~Ñ'Ô'Õ'Ô' Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'r…   Nr¸   )	r¹   rº   r»   r¼   rå   r÷   r   r
  r   r½   r…   r\   r¿   r¿   ‚   s~   € € € € € ØEÐEð-ð -ð -ð -ð-ð -ð -ð -ðð ð ð ð;ð ;ð ;ð ;ð(ð (ð (ð (ð (ð (r…   r¿   c                  ó2   — e Zd ZdZd
d„Zdd„Zdd„Zdd„Zd	S )Ú$TestLootAllocationAndDropServiceUnitzFTests GroundLootDrop allocation rules and LootDropService integration.r   r   c           
     óX   — t          dddt          j        t          j        ddd¬¦  «        S )NÚitem_test_1Úwpn_sword_1u   Tháº§n Kiáº¿méK   r(   é   )Ú	item_uuidÚitem_idÚnameÚ	item_typeÚrarityÚ
item_levelÚwidthÚheight)r   r   ÚWEAPONr   ÚCUC_PHAM)rL   s    r\   Ú
_make_itemz/TestLootAllocationAndDropServiceUnit._make_item»   s6   € ÝØ#Ø!Ø Ý”oÝÔ&ØØØð	
ñ 	
ô 	
ð 		
r…   r   c           
     ó¨  — t          d|                      ¦   «         dddddt          j        ¬¦  «        }|j        }d}d} |||¬¦  «        }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
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }	t          t          j        |	¦  «        ¦  «        ‚d x}x}x}x}x}}|j        }d}d} |||¬¦  «        }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
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }	t          t          j        |	¦  «        ¦  «        ‚d x}x}x}x}x}}d S )NÚd1rÃ   ú#fbbf24éx   r   )Údrop_idÚitemÚworld_xÚworld_yÚ
beam_colorÚbeam_heightÚallocated_player_idÚallocation_modeç      Y@©Úcurrent_timeTre   )zn%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.can_player_pickup
}(%(py4)s, current_time=%(py6)s)
} is %(py11)sÚdrop)r#   r$   r6   r7   r.   ri   zassert %(py13)srq   rÆ   g    €‡Ã@F)r   r2  r   r³   Úcan_player_pickupr<   r=   r>   r?   r@   rA   rB   rC   )
rL   rB  rN   rP   rZ   rT   r|   r´   Ú@py_format12Ú@py_format14s
             r\   Ú+test_permanent_allocation_pickup_permissionzPTestLootAllocationAndDropServiceUnit.test_permanent_allocation_pickup_permissionÇ   s¿  € ÝØØ—’Ñ"Ô"ØØØ ØØ $Ý.Ô8ð	
ñ 	
ô 	
ˆð Ô%ÐG dÐG¸ÐGÐ%Ð% d¸Ð?Ñ?Ô?ÐGÀ4ÐGÐ?À4ÐGÐGÐGÐGÕGÔGÐGÐGÐGÐGÐ?À4ÐGÑGÔGÐGÕGÔGÑGÔGÐGÐGÕGÔGˆtÑGÔGÐGÕGÔGˆtÑGÔGÐGÐGÕGÔGÐ%ÑGÔGÕGÔG dÑGÔGÕGÔG¸ÑGÔGÕGÔGÐ?ÑGÔGÕGÔGÀ4Ñ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ØÔ%ÐI dÐI¸ÐIÐ%Ð% d¸Ð@Ñ@Ô@ÐIÀEÐIÐ@ÀEÐIÐIÐIÐIÕIÔIÐIÐIÐIÐIÐ@ÀEÐIÑIÔIÐIÕIÔIÑIÔIÐIÐIÕIÔIˆtÑIÔIÐIÕIÔIˆtÑIÔIÐIÐIÕIÔIÐ%ÑIÔIÕIÔI dÑIÔIÕIÔI¸ÑIÔIÕIÔIÐ@ÑIÔIÕIÔIÀEÑIÔIÐIÐIÑIÐIÐIÐIÐIÐIÑIÐIÕIÕIÔIÐIÑIÔIÑIÔIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIr…   c                óx  — d}t          d|                      ¦   «         dddddt          j        |dz   |¬¦
  «
        }|j        }d}d	}||z   } |||¬
¦  «        }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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}x}x}x}	}|j        }d}d}||z   } |||¬
¦  «        }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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}x}x}x}	}|j        }d}d}||z   } |||¬
¦  «        }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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}x}x}x}	}d S )Nr?  Úd2rÃ   r5  r6  r   g      @)
r7  r8  r9  r:  r;  r<  r=  r>  Úallocation_expires_atÚ
spawned_atr  r@  Tre   )z|%(py10)s
{%(py10)s = %(py2)s
{%(py2)s = %(py0)s.can_player_pickup
}(%(py4)s, current_time=(%(py5)s + %(py7)s))
} is %(py13)srB  Út0)r#   r$   r6   r%   r'   r0   rq   zassert %(py15)sr¯   rÆ   gö(\�Âõ@F)r   r2  r   rH   rC  r<   r=   r>   r?   r@   rA   rB   rC   )rL   rK  rB  rN   rP   rU   r{   r´   r~   rŽ   rE  rµ   s               r\   Ú)test_short_allocation_5s_timer_transitionzNTestLootAllocationAndDropServiceUnit.test_short_allocation_5s_timer_transitionÕ   sç  € ØˆÝØØ—’Ñ"Ô"ØØØ ØØ $Ý.Ô4Ø"$ s¡(Øð
ñ 
ô 
ˆð Ô%ÐJ dÐJ¸cÐJ¸¸c¹ÐJÐ%Ð% d¸ÐBÑBÔBÐJÀdÐJÐBÀdÐJÐJÐJÑJÕJÔJÐJÐJÐJÐJÐBÀdÐJÑJÔJÐJÕJÔJÑJÔJÐJÐJÕJÔJˆtÑJÔJÐJÕJÔJˆtÑJÔJÐJÐJÕJÔJÐ%ÑJÔJÕJÔJ dÑJÔJÐJÕJÔJÑJÔJÐJÐJÕJÔJ¸ÑJÔJÐJÕJÔJ¸ÑJÔJÐJÐJÕJÔJ¸cÑJÔJÕJÔJÐBÑJÔJÕJÔJÀdÑJÔJÐJÐJÑJÐJÐJÐJÐJÐJÑJÐJÕJÕJÔJÐJÑJÔJÑJÔJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJØÔ%ÐL dÐL¸dÐL¸¸d¹ÐLÐ%Ð% d¸ÐCÑCÔCÐLÀuÐLÐCÀuÐLÐLÐLÑLÕLÔLÐLÐLÐLÐLÐCÀuÐLÑLÔLÐLÕLÔLÑLÔLÐLÐLÕLÔLˆtÑLÔLÐLÕLÔLˆtÑLÔLÐLÐLÕLÔLÐ%ÑLÔLÕLÔL dÑLÔLÐLÕLÔLÑLÔLÐLÐLÕLÔL¸ÑLÔLÐLÕLÔL¸ÑLÔLÐLÐLÕLÔL¸dÑLÔLÕLÔLÐCÑLÔLÕLÔLÀuÑLÔLÐLÐLÑLÐLÐLÐLÐLÐLÑLÐLÕLÕLÔLÐLÑLÔLÑLÔLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLØÔ%ÐK dÐK¸dÐK¸¸d¹ÐKÐ%Ð% d¸ÐCÑCÔCÐKÀtÐKÐCÀtÐKÐKÐKÑKÕKÔKÐKÐKÐKÐKÐCÀtÐKÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔKˆtÑKÔKÐKÕKÔKˆtÑKÔKÐKÐKÕKÔKÐ%ÑKÔKÕKÔK dÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔK¸ÑKÔKÐKÕKÔK¸ÑKÔKÐKÐKÕKÔK¸dÑKÔKÕKÔKÐCÑKÔKÕKÔKÀtÑKÔKÐKÐKÑKÐKÐKÐKÐKÐKÑKÐKÕKÕKÔKÐKÑKÔKÑKÔKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKr…   c           	     óÚ  — t          ¦   «         }g d¢}|                     ddddt          j        |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„ |D ¦   «         }	|	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         }
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         }
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 �]…}|j        }d}||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œz  }d d!|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|j        }d"}||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œz  }d d!|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}�Œ‡d S )%N)Úhero_1Úhero_2Úhero_3Ú
mon_boss_1rî   T)rÈ   rÈ   g       @)Ú
monster_idrú   Úis_bossÚdrop_posr>  Úparty_membersÚitem_quantity_multr'  )ú>=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sr*   ÚdropsrÖ   r8   r.   c                ó   — g | ]	}|j         ‘Œ
S r½   )r=  )rÙ   Úds     r\   rÚ   zfTestLootAllocationAndDropServiceUnit.test_loot_drop_service_round_robin_assignment.<locals>.<listcomp>õ   s   € Ð9Ð9Ð9¨a�AÔ)Ð9Ð9Ð9r…   r   rN  r   r  rý   rþ   r7   r(   rO  rb   rP  rH   )z7%(py2)s
{%(py2)s = %(py0)s.allocation_mode
} == %(py5)srZ  r"   r&   r'   rÃ   ró   )z<%(py2)s
{%(py2)s = %(py0)s.allocation_expires_at
} > %(py5)s)r   Úgenerate_monster_dropsr   rH   r*   r<   r=   r>   r?   r@   rA   rB   rC   r>  rI  )rL   rM   ÚpartyrX  rS   rZ   rO   r[   rV   ÚassignedrX   rP   rÿ   rZ  rN   rQ   rR   s                    r\   Ú-test_loot_drop_service_round_robin_assignmentzRTestLootAllocationAndDropServiceUnit.test_loot_drop_service_round_robin_assignmentç   sF  € ÝÑÔˆØ.Ð.Ð.ˆØ×*Ò*Ø#ØØØ!Ý.Ô4ØØ"ð +ñ 
ô 
ˆõ �5‰zŒzÐ˜QÐˆz˜QŠÐÐÐÕÔÐÐÐÐˆz˜QÐÑÔÐÕÔÑÔÐÐÕÔ�sÑÔÐÕÔ�sÑÔÐÐÐÕÔÑÔÐÐÕÔ�5ÑÔÐÕÔ�5ÑÔÐÐÕÔˆzÑÔÕÔ˜QÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐà9Ð9°5Ð9Ñ9Ô9ˆØ˜Œ{Ð&˜hÐ&ˆ{˜hÒ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ{˜hÐ&Ñ&Ô&Õ&Ô&ˆ{Ñ&Ô&Õ&Ô&˜hÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø˜Œ{Ð&˜hÐ&ˆ{˜hÒ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ{˜hÐ&Ñ&Ô&Õ&Ô&ˆ{Ñ&Ô&Õ&Ô&˜hÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø˜Œ{Ð&˜hÐ&ˆ{˜hÒ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ{˜hÐ&Ñ&Ô&Õ&Ô&ˆ{Ñ&Ô&Õ&Ô&˜hÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Øð 	1ñ 	1ˆAØÔ$Ð/¨Ð/Ð$¨Ò/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð$¨Ð/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/�1Ñ/Ô/Ð/Õ/Ô/�1Ñ/Ô/Ð/Ð/Õ/Ô/Ð$Ñ/Ô/Õ/Ô/¨Ñ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ØÔ*Ð0¨SÐ0Ð*¨SÒ0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0Ð*¨SÐ0Ñ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0�1Ñ0Ô0Ð0Õ0Ô0�1Ñ0Ô0Ð0Ð0Õ0Ô0Ð*Ñ0Ô0Õ0Ô0¨SÑ0Ô0Ð0Ð0Ñ0Ð0Ð0Ð0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ñ0ð	1ð 	1r…   N)r   r   r¸   )r¹   rº   r»   r¼   r2  rF  rL  r^  r½   r…   r\   r"  r"  ¸   sr   € € € € € ØPÐPð

ð 

ð 

ð 

ðJð Jð Jð JðLð Lð Lð Lð$1ð 1ð 1ð 1ð 1ð 1r…   r"  c                  ó"   — e Zd ZdZdd„Zdd„ZdS )Ú&TestMonsterScalingAndMatrixServiceUnitzOTests MonsterScalingEngine party scaling and GameDesignMatrixService integrity.r   r   c                ó&  — t          ¦   «         }|                     dt          j        d¬¦  «        }|                     dt          j        d¬¦  «        }t          j        }|j        }|j        }d}||z  }d}	 ||||	¬¦  «        }
|
�s]dd	t          j        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        nd	t          j        |¦  «        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        |¦  «        t          j        |	¦  «        t          j        |
¦  «        dœ	z  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}	}
t          j        }|j        }|j        }d}||z  }d}	 ||||	¬¦  «        }
|
�s]dd	t          j        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        nd	t          j        |¦  «        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        |¦  «        t          j        |	¦  «        t          j        |
¦  «        dœ	z  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}	}
d S )Nr­   r(   )Úlevelr  r  rt   r  gü©ñÒMbP?)Úrel_tolz¯assert %(py15)s
{%(py15)s = %(py2)s
{%(py2)s = %(py0)s.isclose
}(%(py5)s
{%(py5)s = %(py3)s.max_life
}, (%(py8)s
{%(py8)s = %(py6)s.max_life
} * %(py10)s), rel_tol=%(py13)s)
}r  Ú	party_defÚsolo_def)	r#   r$   r-   r%   r7   r.   r0   rq   r¯   r  z«assert %(py15)s
{%(py15)s = %(py2)s
{%(py2)s = %(py0)s.isclose
}(%(py5)s
{%(py5)s = %(py3)s.armour
}, (%(py8)s
{%(py8)s = %(py6)s.armour
} * %(py10)s), rel_tol=%(py13)s)
})r   Úcreate_monster_defenser   r  r  r	  Úmax_lifer>   r?   r<   r@   rA   rB   rC   Úarmour)rL   Úenginere  rd  rN   rO   rT   r´   rŽ   r~   r‚   rµ   s               r\   Ú)test_monster_scaling_engine_party_defensezPTestMonsterScalingAndMatrixServiceUnit.test_monster_scaling_engine_party_defense  s—  € Ý%Ñ'Ô'ˆØ×0Ò0°rÅÔ@RÐ_`Ð0ÑaÔaˆØ×1Ò1¸ÅÔASÐ`aÐ1ÑbÔbˆ	åŒ|ÐV˜IÔ.ÐV°Ô0AÐVÀCÐVÐ0AÀCÑ0GÐVÐQUÐVˆ|ˆ|Ð.Ð0GÐQUÐVÑVÔVÐVÐVÑVÐVÐVÕVÔVÑVÔVÐVÐVÕVÔV�tÑVÔVÐVÕVÔV�tÑVÔVÐVÐVÕVÔVˆ|ÑVÔVÐVÕVÔVÑVÔVÐVÐVÕVÔV˜IÑVÔVÐVÕVÔV˜IÑVÔVÐVÐVÕVÔVÐ.ÑVÔVÐVÕVÔVÑVÔVÐVÐVÕVÔV°ÑVÔVÐVÕVÔV°ÑVÔVÐVÐVÕVÔVÐ0AÑVÔVÕVÔVÀCÑVÔVÕVÔVÐQUÑVÔVÕVÔVÐVÑVÔVÐVÐVÑVÐVÕVÕVÔVÐVÑVÔVÑVÔVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÝŒ|ÐR˜IÔ,ÐR¨h¬oÐRÀÐR¨oÀÑ.CÐRÈTÐRˆ|ˆ|Ð,Ð.CÈTÐRÑRÔRÐRÐRÑRÐRÐRÕRÔRÑRÔRÐRÐRÕRÔR�tÑRÔRÐRÕRÔR�tÑRÔRÐRÐRÕRÔRˆ|ÑRÔRÐRÕRÔRÑRÔRÐRÐRÕRÔR˜IÑRÔRÐRÕRÔR˜IÑRÔRÐRÐRÕRÔRÐ,ÑRÔRÐRÕRÔRÑRÔRÐRÐRÕRÔR¨hÑRÔRÐRÕRÔR¨hÑRÔRÐRÐRÕRÔR¨oÑRÔRÕRÔRÀÑRÔRÕRÔRÈTÑRÔRÕRÔRÐRÑRÔRÐRÐRÑRÐRÕRÕRÔRÐRÑRÔRÑRÔRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRr…   c                óL  — t          ¦   «         }|                     ¦   «         }|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          |¦  «        }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}
}	|                     ¦   «          d S )NTre   )z0%(py2)s
{%(py2)s = %(py0)s.is_valid
} is %(py5)sÚreportr"   r&   r'   r   r   )zP%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.violations
})
} == %(py8)sr*   r+   r/   r0   )r   Úverify_matrix_integrityÚis_validr<   r=   r>   r?   r@   rA   rB   rC   Ú
violationsr*   Úclose)rL   Ú
matrix_svcrl  rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   s                r\   Ú2test_game_design_matrix_service_verification_aliaszYTestMonsterScalingAndMatrixServiceUnit.test_game_design_matrix_service_verification_alias	  sQ  € Ý,Ñ.Ô.ˆ
Ø×3Ò3Ñ5Ô5ˆØŒÐ& $Ð&ˆ $Ð&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ $Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆvÑ&Ô&Ð&Õ&Ô&ˆvÑ&Ô&Ð&Ð&Õ&Ô&ˆÑ&Ô&Õ&Ô& $Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ØÔ$Ð*�sÐ$Ñ%Ô%Ð*¨Ð*Ð%¨Ò*Ð*Ð*Ñ*Õ*Ô*Ð*Ð*Ð*Ð*Ð%¨Ð*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*�sÑ*Ô*Ð*Õ*Ô*�sÑ*Ô*Ð*Ð*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*�6Ñ*Ô*Ð*Õ*Ô*�6Ñ*Ô*Ð*Ð*Õ*Ô*Ð$Ñ*Ô*Õ*Ô*Ð%Ñ*Ô*Õ*Ô*¨Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø×ÒÑÔÐÐÐr…   Nr¸   )r¹   rº   r»   r¼   rj  rr  r½   r…   r\   r`  r`  þ   sF   € € € € € ØYÐYðSð Sð Sð Sðð ð ð ð ð r…   r`  )3r¼   Ú
__future__r   Úbuiltinsr>   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter<   r  ÚosÚsysÚtimerI   ÚpathÚabspathÚjoinÚdirnameÚ__file__Ú_server_dirÚ	_root_dirÚinsertÚparty.party_typesr   r   r   r   r   Úparty.party_scaling_calculatorr	   Úparty.party_servicer
   Úinventory.inventory_typesr   r   r   Úinventory.loot_filter_typesr   r   Úinventory.loot_drop_servicer   Úcombat.combat_typesr   Úcombat.monster_scalingr   Ú world.game_design_matrix_servicer   r   r¿   r"  r`  r½   r…   r\   ú<module>rŒ     sº  ððð ð #Ð "Ð "Ð "Ð "Ð "Ø  € € € € € € € € € € € € €€€€Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø €€€àŒg�oŠo˜bœgŸlšl¨2¬7¯?ª?¸8Ñ+DÔ+DÀnÑUÔUÑVÔV€ØŒG�OŠO˜BœGŸLšL¨¬¯ª¸Ñ)BÔ)BÀGÑLÔLÑMÔM€	Ø�c”hÐÐØ„H‡O‚O�A�{Ñ#Ô#Ð#Ø�C”HÐÐØ„H‡O‚O�A�yÑ!Ô!Ð!ðð ð ð ð ð ð ð ð ð ð ð ð ð ð BÐ AÐ AÐ AÐ AÐ AØ ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø -Ð -Ð -Ð -Ð -Ð -Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø DÐ DÐ DÐ DÐ DÐ DðX;ð X;ð X;ð X;ð X;ñ X;ô X;ð X;ðv3(ð 3(ð 3(ð 3(ð 3(ñ 3(ô 3(ð 3(ðlC1ð C1ð C1ð C1ð C1ñ C1ô C1ð C1ðLð ð ð ð ñ ô ð ð ð r…   