§
    6¬j  ã                   ó~   — d Z ddlZddlmc mZ ddlZddlm	Z	 ddl
mZmZmZ ddlmZmZmZmZ  G d„ d¦  «        ZdS )uK  Tests for Auto-Arbitrage & Profit-Taking Orchestrator (Chu Ká»³ 7).
================================================================
Kiem thu toan dien:
- Hop nhat so du kho tien te (Wallet + Stash Currency Tab).
- Kiem chung nguong thanh ly an toan (Liquidation & Reserve Thresholds).
- Tinh toan ty gia doi ngoai te va thu tu uu tien lenh (Priority Ranking).
- Kiem soat khoa an toan Vang (INV-EXCHANGE-GOLD-TAX) va cat tia lenh.
- Ma tran phan tich rui ro kinh te (Economic Risk Matrix).
- In bao cao dinh luong tuan thu Rule 5: [MO PHONG THUAT TOAN HEADLESS - KHONG PHAI LIVE GAME].
é    N)ÚDict)ÚExchangeActionTypeÚExchangeOrderStatusÚExchangePortfolioConfig)ÚAutoProfitTakerÚEconomicRiskÚProfitTakingPlanÚProfitTakingThresholdsc                   ó2   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestAutoProfitTakerc                 óˆ  — t          ¦   «         }ddddœ}d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         }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 )zCKiem tra ham scan_holdings hop nhat chinh xac so du tu vi va Stash.é   é   é   )ú	Chaos OrbúOrb of AlchemyúExalted Orbéd   é-   é   )r   r   ú
Divine Orb)ÚwalletÚstash_currencyr   éx   ©ú==)z%(py1)s == %(py4)s)Úpy1Úpy4zassert %(py6)sÚpy6Nr   é<   r   r   )r   Úscan_holdingsÚ
@pytest_arÚ_call_reprcompareÚ	_safereprÚAssertionErrorÚ_format_explanation)
ÚselfÚprofit_takerr   ÚstashÚcombinedÚ@py_assert0Ú@py_assert3Ú@py_assert2Ú@py_format5Ú@py_format7s
             ú4C:\Projects\AutoPOE2\tests\test_auto_profit_taker.pyÚ*test_scan_holdings_merges_wallet_and_stashz>TestAutoProfitTaker.test_scan_holdings_merges_wallet_and_stash   sî  € å&Ñ(Ô(ˆØ!°RÈÐJÐJˆØ!°RÀqÐIÐIˆà×-Ò-°VÈEÐ-ÑRÔRˆØ˜Ô$Ð+¨Ð+Ð$¨Ò+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð$¨Ð+Ñ+Ô+Õ+Ô+Ð$Ñ+Ô+Õ+Ô+¨Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ØÐ(Ô)Ð/¨RÐ/Ð)¨RÒ/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð)¨RÐ/Ñ/Ô/Õ/Ô/Ð)Ñ/Ô/Õ/Ô/¨RÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ø˜Ô&Ð+¨!Ð+Ð&¨!Ò+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð&¨!Ð+Ñ+Ô+Õ+Ô+Ð&Ñ+Ô+Õ+Ô+¨!Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ø˜Ô%Ð*¨Ð*Ð%¨Ò*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð%¨Ð*Ñ*Ô*Õ*Ô*Ð%Ñ*Ô*Õ*Ô*¨Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ó    c                 óh  — t          ¦   «         }ddi}|                     |d¬¦  «        }|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di}
|                     |
d¬¦  «        }|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}||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}}|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 )zOKiem tra chi thanh ly phan thang du vuot nguong, bao toan 100% dinh muc du tru.r   é   é'  ©Úcurrent_goldr   r   )zL%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.orders
})
} == %(py8)sÚlenÚ
plan_below)Úpy0r   Úpy3Úpy5Úpy8zassert %(py10)sÚpy10Né2   r   Ú
plan_above)z5%(py2)s
{%(py2)s = %(py0)s.sell_currency
} == %(py5)sÚord_alch©r:   Úpy2r<   úassert %(py7)sÚpy7é   )z3%(py2)s
{%(py2)s = %(py0)s.sell_amount
} == %(py5)sr   )z4%(py2)s
{%(py2)s = %(py0)s.buy_currency
} == %(py5)sr   )z;%(py2)s
{%(py2)s = %(py0)s.expected_buy_amount
} == %(py5)s)r   Úevaluate_profit_takingÚordersr8   r"   r#   Ú@py_builtinsÚlocalsÚ_should_repr_global_namer$   r%   r&   Úsell_currencyÚsell_amountÚbuy_currencyÚexpected_buy_amount)r'   r(   Úholdings_belowr9   r-   Ú@py_assert4Ú@py_assert7Ú@py_assert6Ú@py_format9Ú@py_format11Úholdings_abover@   rA   Ú@py_assert1r,   Ú@py_format6Ú@py_format8s                    r0   Ú4test_liquidation_thresholds_preserves_safety_reservezHTestAutoProfitTaker.test_liquidation_thresholds_preserves_safety_reserve)   sn  € å&Ñ(Ô(ˆð +¨BÐ/ˆØ!×8Ò8¸ÐV[Ð8Ñ\Ô\ˆ
ØÔ$Ð*�sÐ$Ñ%Ô%Ð*¨Ð*Ð%¨Ò*Ð*Ð*Ñ*Õ*Ô*Ð*Ð*Ð*Ð*Ð%¨Ð*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*�sÑ*Ô*Ð*Õ*Ô*�sÑ*Ô*Ð*Ð*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*�:Ñ*Ô*Ð*Õ*Ô*�:Ñ*Ô*Ð*Ð*Õ*Ô*Ð$Ñ*Ô*Õ*Ô*Ð%Ñ*Ô*Õ*Ô*¨Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ð +¨BÐ/ˆØ!×8Ò8¸ÐV[Ð8Ñ\Ô\ˆ
ØÔ$Ð*�sÐ$Ñ%Ô%Ð*¨Ð*Ð%¨Ò*Ð*Ð*Ñ*Õ*Ô*Ð*Ð*Ð*Ð*Ð%¨Ð*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*�sÑ*Ô*Ð*Õ*Ô*�sÑ*Ô*Ð*Ð*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*�:Ñ*Ô*Ð*Õ*Ô*�:Ñ*Ô*Ð*Ð*Õ*Ô*Ð$Ñ*Ô*Õ*Ô*Ð%Ñ*Ô*Õ*Ô*¨Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ØÔ$ QÔ'ˆØÔ%Ð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ˆxÑ9Ô9Ð9Õ9Ô9ˆxÑ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ØÔ#Ð) rÐ)Ð# rÒ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð# rÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆxÑ)Ô)Ð)Õ)Ô)ˆxÑ)Ô)Ð)Ð)Õ)Ô)Ð#Ñ)Ô)Õ)Ô) rÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÔ$Ð3¨Ð3Ð$¨Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð$¨Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆxÑ3Ô3Ð3Õ3Ô3ˆxÑ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ØÔ+Ð1¨rÐ1Ð+¨rÒ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð+¨rÐ1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1ˆxÑ1Ô1Ð1Õ1Ô1ˆxÑ1Ô1Ð1Ð1Õ1Ô1Ð+Ñ1Ô1Õ1Ô1¨rÑ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Ð1r2   c                 ó>	  — 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        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„ |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         }	|	j        }
d}|
|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}}dS )!zGKiem tra thu tu uu tien lenh: Ban thang du -> Mua Divine -> Mua Mirror.é,  r   r?   )r   r   ú	Regal Orbi N  r6   é   ©ú>=)z4%(py2)s
{%(py2)s = %(py0)s.total_orders
} >= %(py5)sÚplanrB   rD   rE   Nr   r   )zV%(py3)s
{%(py3)s = %(py1)s.action_type
} == %(py7)s
{%(py7)s = %(py5)s.SELL_TO_CHAOS
}r   )r   r;   r<   rE   zassert %(py9)sÚpy9r   c                 ó<   — g | ]}|j         t          j        k    ¯|‘ŒS © )Úaction_typer   ÚCONVERT_CHAOS_TO_DIVINE)Ú.0Úos     r0   ú
<listcomp>zQTestAutoProfitTaker.test_order_priority_ranking_and_waterfall.<locals>.<listcomp>R   s(   € ÐoÐoÐo˜q°1´=ÕDVÔDnÒ3nÐ3n˜Ð3nÐ3nÐ3nr2   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr8   Údivine_orders)r:   r   r;   r   zassert %(py8)sr=   r   )z;%(py3)s
{%(py3)s = %(py1)s.expected_buy_amount
} >= %(py6)s)r   r;   r   )r   rG   Útotal_ordersr"   r#   rI   rJ   rK   r$   r%   r&   rH   re   r   ÚSELL_TO_CHAOSr8   rO   )r'   r(   Úholdingsra   rW   rQ   r,   rX   rY   r+   r-   rS   Ú@py_format10rj   Ú@py_assert5r/   rT   s                    r0   Ú)test_order_priority_ranking_and_waterfallz=TestAutoProfitTaker.test_order_priority_ranking_and_waterfall=   s8  € å&Ñ(Ô(ˆð Ø!Øð
ð 
ˆð ×2Ò2°8È%Ð2ÑPÔPˆØÔ Ð% AÐ%Ð  AÒ%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%Ð  AÐ%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%ˆtÑ%Ô%Ð%Õ%Ô%ˆtÑ%Ô%Ð%Ð%Õ%Ô%Ð Ñ%Ô%Õ%Ô% AÑ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ð Œ{˜1Œ~ÐMˆ~Ô)ÐMÕ-?Ô-MÐMÐ)Ð-MÒMÐMÐMÐMÕMÔMÐMÐMÐMÐMÐ)Ð-MÐMÑMÔMÕMÔMˆ~ÑMÔMÕMÔMÐ)ÑMÔMÐMÕMÔMÑMÔMÐMÐMÕMÔMÕ-?ÑMÔMÐMÕMÔMÕ-?ÑMÔMÐMÐMÕMÔMÐ-MÑMÔMÐMÐMÑMÐMÐMÐMÐMÐMÑMÐMÕMÕMÔMÐMÑMÔMÑMÔMÐMÐMÐMÐMÐMÐMÐMÐMÐMØŒ{˜1Œ~ÐMˆ~Ô)ÐMÕ-?Ô-MÐMÐ)Ð-MÒMÐMÐMÐMÕMÔMÐMÐMÐMÐMÐ)Ð-MÐMÑMÔMÕMÔMˆ~ÑMÔMÕMÔMÐ)ÑMÔMÐMÕMÔMÑMÔMÐMÐMÕMÔMÕ-?ÑMÔMÐMÕMÔMÕ-?ÑMÔMÐMÐMÕMÔMÐ-MÑMÔMÐMÐMÑMÐMÐMÐMÐMÐMÑMÐMÕMÕMÔMÐMÑMÔMÑMÔMÐMÐMÐMÐMÐMÐMÐMÐMÐMð pÐo D¤KÐoÑoÔoˆÝ�=Ñ!Ô!Ð& QÐ&Ð! QÒ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð! QÐ&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&�sÑ&Ô&Ð&Õ&Ô&�sÑ&Ô&Ð&Ð&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&�=Ñ&Ô&Ð&Õ&Ô&�=Ñ&Ô&Ð&Ð&Õ&Ô&Ð!Ñ&Ô&Õ&Ô& QÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø˜QÔÐ8ÐÔ3Ð8°qÐ8Ð3°qÒ8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8Ð3°qÐ8Ñ8Ô8Õ8Ô8ÐÑ8Ô8Õ8Ô8Ð3Ñ8Ô8Õ8Ô8°qÑ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Ð8r2   c                 ó†  — 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}}d„ |j        D ¦   «         }t          |¦  «        }|s•ddt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }	t          t          j
        |	¦  «        ¦  «        ‚d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 )zHKiem tra khoa an toan Vang INV-EXCHANGE-GOLD-TAX va co che cat tia lenh.éÈ   iô  r\   )r   úOrb of Transmutationr   i”  r6   r   r   )z4%(py2)s
{%(py2)s = %(py0)s.total_orders
} == %(py5)sÚplan_blockedrB   rD   rE   Nc              3   ó,   K  — | ]}|j         d k    V — ŒdS )ÚGOLD_DEPLETION_RISKN©Ú	risk_type©rg   Úrs     r0   ú	<genexpr>zSTestAutoProfitTaker.test_gold_safety_interlock_and_order_pruning.<locals>.<genexpr>c   s*   è è € ÐTÐT¸A�1”;Ð"7Ò7ÐTÐTÐTÐTÐTÐTr2   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úany)r:   rC   r   ip  iè  )ú<=)z@%(py2)s
{%(py2)s = %(py0)s.total_estimated_gold_tax
} <= %(py5)sÚplan_partialéˆ  r_   ©z>%(py2)s
{%(py2)s = %(py0)s.remaining_gold_balance
} >= %(py5)s)r   rG   rk   r"   r#   rI   rJ   rK   r$   r%   r&   Úrisksr|   Útotal_estimated_gold_taxÚremaining_gold_balance)r'   r(   rm   rt   rW   rQ   r,   rX   rY   r.   r~   s              r0   Ú,test_gold_safety_interlock_and_order_pruningz@TestAutoProfitTaker.test_gold_safety_interlock_and_order_pruningV   s¼  € å&Ñ(Ô(ˆð "Ø$'Øð
ð 
ˆð $×:Ò:¸8ÐRVÐ:ÑWÔWˆØÔ(Ð-¨AÐ-Ð(¨AÒ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð(¨AÐ-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-ˆ|Ñ-Ô-Ð-Õ-Ô-ˆ|Ñ-Ô-Ð-Ð-Õ-Ô-Ð(Ñ-Ô-Õ-Ô-¨AÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ØTÐTÀÔASÐTÑTÔTÐT�sÐTÑTÔTÐTÐTÐTÐTÐTÕTÔTÑTÔTÐTÐTÕTÔT�sÑTÔTÐTÕTÔT�sÑTÔTÐTÐTÕTÔTÐTÑTÔTÕTÔTÐTÑTÔTÐTÐTÑTÐTÕTÕTÔTÐTÑTÔTÑTÔTÐTÐTÐTÐTÐTð $×:Ò:¸8ÐRVÐ:ÑWÔWˆØÔ4Ð<¸Ð<Ð4¸Ò<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<Ð4¸Ð<Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<ˆ|Ñ<Ô<Ð<Õ<Ô<ˆ|Ñ<Ô<Ð<Ð<Õ<Ô<Ð4Ñ<Ô<Õ<Ô<¸Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<ØÔ2Ð:°dÐ:Ð2°dÒ:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð2°dÐ:Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:ˆ|Ñ:Ô:Ð:Õ:Ô:ˆ|Ñ:Ô:Ð:Ð:Õ:Ô:Ð2Ñ:Ô:Õ:Ô:°dÑ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:r2   c                 óÂ  — t          ¦   «         }dddœ}|                     |d¬¦  «        }d„ |j        D ¦   «         }d}||v }|s—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          t          j
        |¦  «        ¦  «        ‚dx}}dS )zLKiem tra phat hien cac rui ro kinh te (Crafting starvation, Gold depletion).r   r?   )r   r   r5   r6   c                 ó   — g | ]	}|j         ‘Œ
S rd   rw   ry   s     r0   ri   zKTestAutoProfitTaker.test_economic_risk_matrix_detection.<locals>.<listcomp>t   s   € Ð6Ð6Ð6 a�a”kÐ6Ð6Ð6r2   ÚCRAFTING_STARVATION_RISK©Úin©z%(py1)s in %(py3)sÚ
risk_types©r   r;   úassert %(py5)sr<   N)r   rG   r�   r"   r#   r$   rI   rJ   rK   r%   r&   )	r'   r(   rm   ra   r‹   r+   r-   Ú@py_format4rX   s	            r0   Ú#test_economic_risk_matrix_detectionz7TestAutoProfitTaker.test_economic_risk_matrix_detectionj   s  € å&Ñ(Ô(ˆð !Øð
ð 
ˆð ×2Ò2°8È%Ð2ÑPÔPˆØ6Ð6¨4¬:Ð6Ñ6Ô6ˆ
Ø)Ð7Ð)¨ZÐ7Ð7Ð7Ð7Õ7Ô7Ð7Ð7Ð7Ð7Ð)¨ZÐ7Ñ7Ô7Õ7Ô7Ð)Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7¨ZÑ7Ô7Ð7Õ7Ô7¨ZÑ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Ð7r2   c                 ó~  — t          ¦   «         }ddddddddœ}|                     |d	¬
¦  «        }|                     |¦  «        }t          d|z   ¦  «         d}||v }|s—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          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}|
|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 )z¤
        Mo phong lap ke hoach chot loi toan dien va in bao cao dinh luong.
        Ghi chu bat buoc: [MO PHONG THUAT TOAN HEADLESS - KHONG PHAI LIVE GAME]
        r\   é–   r   é(   r   iÂ  r^   )rs   zOrb of Alterationr   r]   r   r   r   i¨a  r6   ú
z5[MO PHONG THUAT TOAN HEADLESS - KHONG PHAI LIVE GAME]rˆ   rŠ   Ú
report_strrŒ   r�   r<   Nr   )ú>)z3%(py2)s
{%(py2)s = %(py0)s.total_orders
} > %(py5)sra   rB   rD   rE   r_   )z?%(py2)s
{%(py2)s = %(py0)s.projected_divine_bought
} >= %(py5)sr   r€   )r   rG   Úformat_ascii_planÚprintr"   r#   r$   rI   rJ   rK   r%   r&   rk   Úprojected_divine_boughtrƒ   )r'   Úcapsysr(   rm   ra   r”   r+   r-   rŽ   rX   rW   rQ   r,   rY   s                 r0   Ú-test_print_profit_taking_plan_rule5_compliantzATestAutoProfitTaker.test_print_profit_taking_plan_rule5_compliantw   sã  € õ
 'Ñ(Ô(ˆð %(Ø!$Ø!ØØØØð
ð 
ˆð ×2Ò2°8È%Ð2ÑPÔPˆØ!×3Ò3°DÑ9Ô9ˆ
Ýˆd�ZÑÑ Ô Ð ð GÐTÐFÈ*ÐTÐTÐTÐTÕTÔTÐTÐTÐTÐTÐFÈ*ÐTÑTÔTÕTÔTÐFÑTÔTÐTÕTÔTÑTÔTÐTÐTÕTÔTÈ*ÑTÔTÐTÕTÔTÈ*ÑTÔTÐTÐTÐTÐTÑTÐTÐTÐTÐTÐTÑTÐTÕTÕTÔTÐTÑTÔTÑTÔTÐTÐTÐTÐTÐTØÔ Ð$ 1Ð$Ð  1Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$Ð  1Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆtÑ$Ô$Ð$Õ$Ô$ˆtÑ$Ô$Ð$Ð$Õ$Ô$Ð Ñ$Ô$Õ$Ô$ 1Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ØÔ+Ð0¨qÐ0Ð+¨qÒ0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0Ð+¨qÐ0Ñ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0ˆtÑ0Ô0Ð0Õ0Ô0ˆtÑ0Ô0Ð0Ð0Õ0Ô0Ð+Ñ0Ô0Õ0Ô0¨qÑ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ØÔ*Ð2¨dÐ2Ð*¨dÒ2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð*¨dÐ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¨dÑ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Ð2r2   N)	Ú__name__Ú
__module__Ú__qualname__r1   rZ   rp   r„   r�   rš   rd   r2   r0   r   r      sn   € € € € € ð
+ð 
+ð 
+ð2ð 2ð 2ð(9ð 9ð 9ð2;ð ;ð ;ð(8ð 8ð 8ð3ð 3ð 3ð 3ð 3r2   r   )Ú__doc__ÚbuiltinsrI   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter"   ÚpytestÚtypingr   Ú+src.assistant_tool.currency_exchange.modelsr   r   r   Ú6src.assistant_tool.currency_exchange.auto_profit_takerr   r   r	   r
   r   rd   r2   r0   ú<module>r§      sð   ðð	ð 	ð € € € € € € € € € € € € €€€€Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð ðt3ð t3ð t3ð t3ð t3ñ t3ô t3ð t3ð t3ð t3r2   