§
    Š¬jÞ)  ã                  óº   — d Z ddlmZ ddlZddlZddlmZmZ ddlm	Z	m
Z
mZmZmZmZ ddlmZmZmZmZmZmZ e G d„ d¦  «        ¦   «         Z G d	„ d
¦  «        ZdS )uÆ  AutoPOE2 - Currency Portfolio Optimizer (Doc 43 / Doc 68 / Doc 69).
=====================================================================
Thuáº­t toÃ¡n tá»‘i Æ°u hÃ³a danh má»¥c tiá»�n tá»‡ theo mÃ´ hÃ¬nh ThÃ¡c LÅ©y Tiáº¿n (Currency Cascade Waterfall):
1. Táº§ng 1: Thu gom toÃ n bá»™ tháº·ng dÆ° currency cáº¥p tháº¥p & crafting (Tier 4 / Tier 3) Ä‘á»•i sang Chaos Orb.
2. Táº§ng 2: Khi Chaos Orb vÆ°á»£t ngÆ°á»¡ng dá»± trá»¯ an toÃ n (min_chaos_reserve) vÃ  Ä‘á»§ mua 1 Divine Orb -> Ä�á»•i sang Divine.
3. Táº§ng 3: Khi Divine Orb tÃ­ch lÅ©y vÆ°á»£t ngÆ°á»¡ng giÃ¡ Mirror of Kalandra -> Ä�á»•i sang Mirror of Kalandra.
4. Kiá»ƒm soÃ¡t ngÃ¢n sÃ¡ch VÃ ng (Gold Budget Interlock): Ä�áº£m báº£o tá»•ng phÃ­ giao dá»‹ch khÃ´ng xÃ¢m pháº¡m quá»¹ vÃ ng sinh tá»“n (min_gold_reserve).

TuÃ¢n thá»§ nghiÃªm ngáº·t:
- Rule 1: Cold Path Tier 2 (Python 3.11).
- Rule 4: Module hÃ³a, tráº§n file < 500 dÃ²ng.
- Báº¥t biáº¿n: INV-EXCHANGE-GOLD-TAX & INV-EXCHANGE-RESERVE-SAFE.
é    )ÚannotationsN)Ú	dataclassÚfield)ÚAnyÚDictÚListÚOptionalÚSetÚTuple)ÚCurrencyItemÚCurrencyTierÚExchangeActionTypeÚExchangeOrderÚExchangeOrderStatusÚExchangePortfolioConfigc                  ór   — e Zd ZU dZded<   ded<   ded<   ded<   ded	<   d
ed<    ee¬¦  «        Zded<   dS )ÚOptimizationResultu2   Káº¿t quáº£ tá»‘i Æ°u hÃ³a danh má»¥c tiá»�n tá»‡.zList[ExchangeOrder]ÚordersÚintÚtotal_gold_taxÚfloatÚnet_chaos_gainÚnet_divine_gainÚnet_mirror_gainÚboolÚis_affordable)Údefault_factoryz	List[str]Úsummary_notesN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   Úlistr   © ó    úPC:\Projects\AutoPOE2\src\assistant_tool\currency_exchange\portfolio_optimizer.pyr   r       s~   € € € € € € à<Ð<ØÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑØ$˜u°TÐ:Ñ:Ô:€MÐ:Ð:Ð:Ñ:Ð:Ð:r&   r   c                  ó$   — e Zd ZdZddd„Zdd„ZdS )ÚCurrencyPortfolioOptimizeru1   Bá»™ tá»‘i Æ°u danh má»¥c tiá»�n tá»‡ tá»± hÃ nh.NÚconfigú!Optional[ExchangePortfolioConfig]c                ó0   — |pt          ¦   «         | _        d S ©N)r   r*   )Úselfr*   s     r'   Ú__init__z#CurrencyPortfolioOptimizer.__init__/   s   € ØÐ9Õ 7Ñ 9Ô 9ˆŒˆˆr&   ÚwalletúDict[str, int]Úmarket_prices_in_chaosúDict[str, float]Úcurrent_goldr   Úreturnr   c                ó�
  — g }|| j         j        z
  }|dk    r<|                     d|› d| j         j        › d�¦  «         t          g ddddd|¬¦  «        S g }t	          |                     dd¦  «        ¦  «        }t          |                     d	d¦  «        ¦  «        }t          |                     d
d¦  «        ¦  «        }	|                     d	d¦  «        }
d}d
|v r|
dk    r|d
         |
z  }|                     ¦   «         D �]7\  }}|dv rŒ| j         j                             |d¦  «        }||z
  }|dk    rŒ7|                     |d¦  «        }|dk    rŒT||z  }|dk    rØt          t          j
        |¦  «        ¦  «        }|dk    r±|dz  }t          d|                     dd¦  «                             ¦   «         › dt          j        ¦   «         j        dd…         › �t"          j        ||d|t'          |d¦  «        |t(          j        d|› d|› d|› d|› d�	¬¦
  «
        }|                     |¦  «         ||z  }�Œ9|| j         j        z
  }||
k    r»t          ||
z  ¦  «        }t          ||
z  ¦  «        }|dz  }t          dt          j        ¦   «         j        dd…         › �t"          j        d|d	|t'          d|
z  d¦  «        |t(          j        d|› d| j         j        › d |› d!�¬¦
  «
        }|                     |¦  «         ||z  }||z  }|| j         j        z
  }||k    r®t          ||z  ¦  «        }t          ||z  ¦  «        }|d"z  }t          d#t          j        ¦   «         j        dd…         › �t"          j        d	|d
|t'          d|z  d¦  «        |t(          j        d$|› d%|› d&�¬¦
  «
        }|                     |¦  «         ||z  }|	|z  }	t5          d'„ |D ¦   «         ¦  «        }g } ||k    rµ|                     d(|› d)|› d*�¦  «         d+„ |D ¦   «         }!d,„ |D ¦   «         }"|"                     d-„ d.¬/¦  «         d}#|!D ]/}$|#|$j        z   |k    r|                      |$¦  «         |#|$j        z  }#Œ0|"D ]/}$|#|$j        z   |k    r|                      |$¦  «         |#|$j        z  }#Œ0|#}n|} ||                     dd¦  «        z
  }%||                     d	d¦  «        z
  }&|	|                     d
d¦  «        z
  }'|                     d0t;          | ¦  «        › d1|› d2|%d3›d4|&d5›d6|'d5›d7�¦  «         t          | |t'          |%d8¦  «        |&|'d.|¬¦  «        S )9u   
        PhÃ¢n tÃ­ch sá»‘ dÆ° vÃ­, Ä‘á»‘i soÃ¡t giÃ¡ thá»‹ trÆ°á»�ng vÃ  sinh danh sÃ¡ch lá»‡nh giao dá»‹ch tá»‘i Æ°u.
        r   u0   KhÃ³a an toÃ n VÃ ng: Quá»¹ vÃ ng hiá»‡n táº¡i (u   ) <= ngÆ°á»¡ng báº£o vá»‡ (u    ). Tá»« chá»‘i giao dá»‹ch sÃ n.g        F)r   r   r   r   r   r   r   ú	Chaos Orbú
Divine OrbúMirror of Kalandrag     Àb@g      |@)r7   r8   r9   g      ð?é   é   Ú	ORD_SELL_ú Ú_Né   é   u   Thu gom tháº·ng dÆ° u    (dá»± trá»¯ an toÃ n: z) sang z Chaos.)
Úorder_idÚaction_typeÚsell_currencyÚsell_amountÚbuy_currencyÚexpected_buy_amountÚmarket_rateÚestimated_gold_taxÚstatusÚreasoni^  ÚORD_CONV_DIVINE_u   TÃ­ch lÅ©y u    Chaos (giá»¯ láº¡i u    Chaos cÆ¡ sá»Ÿ) Ä‘á»•i láº¥y z Divine Orb.iˆ  ÚORD_CONV_MIRROR_u#   Ä�á»‰nh cao tÃ i sáº£n: TÃ­ch lÅ©y u    Divine Orb Ä‘á»•i láº¥y z Mirror of Kalandra!c              3  ó$   K  — | ]}|j         V — Œd S r-   )rH   )Ú.0Úords     r'   ú	<genexpr>z@CurrencyPortfolioOptimizer.optimize_portfolio.<locals>.<genexpr>³   s%   è è € ÐKÐK°3˜Ô.ÐKÐKÐKÐKÐKÐKr&   u    Cáº£nh bÃ¡o: Tá»•ng phÃ­ vÃ ng (u   ) > ngÃ¢n sÃ¡ch kháº£ dá»¥ng (u   ). Ä�iá»�u chá»‰nh danh má»¥c.c                ó<   — g | ]}|j         t          j        k    ¯|‘ŒS r%   ©rB   r   ÚSELL_TO_CHAOS©rN   Úos     r'   ú
<listcomp>zACurrencyPortfolioOptimizer.optimize_portfolio.<locals>.<listcomp>º   s(   € ÐnÐnÐn 1¸A¼MÕM_ÔMmÒ<mÐ<m˜QÐ<mÐ<mÐ<mr&   c                ó<   — g | ]}|j         t          j        k    ¯|‘ŒS r%   rR   rT   s     r'   rV   zACurrencyPortfolioOptimizer.optimize_portfolio.<locals>.<listcomp>»   s(   € ÐmÐmÐm !¸1¼=ÕL^ÔLlÒ;lÐ;l˜AÐ;lÐ;lÐ;lr&   c                ó<   — | j         t          d| j        ¦  «        z  S )Nr:   )rF   ÚmaxrH   )rU   s    r'   ú<lambda>z?CurrencyPortfolioOptimizer.optimize_portfolio.<locals>.<lambda>½   s   € ¨AÔ,AÅCÈÈ1ÔK_ÑD`ÔD`Ñ,`€ r&   T)ÚkeyÚreverseu   Káº¿ hoáº¡ch giao dá»‹ch: u    lá»‡nh | PhÃ­ vÃ ng: u     Gold | TÃ i sáº£n tÄƒng rÃ²ng: z+.1fz Chaos, z+dz	 Divine, z Mirror.é   )r*   Úmin_gold_reserveÚappendr   r   Úgetr   ÚitemsÚdefault_reservesÚmathÚfloorr   ÚreplaceÚupperÚuuidÚuuid4Úhexr   rS   Úroundr   ÚPENDINGÚmin_chaos_reserveÚCONVERT_CHAOS_TO_DIVINEÚmin_divine_reserveÚCONVERT_DIVINE_TO_MIRRORÚsumÚsortrH   Úlen)(r.   r0   r2   r4   ÚnotesÚavailable_goldÚcandidate_ordersÚprojected_chaosÚprojected_divineÚprojected_mirrorÚdivine_rate_in_chaosÚmirror_rate_in_divineÚnameÚqtyÚmin_resÚsurplusÚunit_chaos_valÚtotal_val_chaosÚexpected_chaosÚgold_taxÚorderÚtradable_chaosÚdivines_to_buyÚchaos_to_spendÚdivine_gold_taxÚorder_divineÚtradable_divineÚmirrors_to_buyÚdivine_to_spendÚmirror_gold_taxÚorder_mirrorÚ	total_taxÚfinal_ordersÚhigh_priorityÚlow_priorityÚacc_taxrU   Ú	net_chaosÚ
net_divineÚ
net_mirrors(                                           r'   Úoptimize_portfolioz-CurrencyPortfolioOptimizer.optimize_portfolio2   sF  € ð ˆØ%¨¬Ô(DÑDˆð ˜QÒÐØ�LŠLðhÀ<ð hð hØ)-¬Ô)Eðhð hð hñô ð õ &ØØ Ø"Ø !Ø !Ø#Ø#ðñ ô ð ð 13ÐÝ §
¢
¨;¸Ñ :Ô :Ñ;Ô;ˆÝ˜vŸzšz¨,¸Ñ:Ô:Ñ;Ô;ÐÝ˜vŸzšzÐ*>ÀÑBÔBÑCÔCÐð  6×9Ò9¸,ÈÑNÔNÐØ %ÐØÐ#9Ð9Ð9Ð>RÐUVÒ>VÐ>VØ$:Ð;OÔ$PÐSgÑ$gÐ!ð
  Ÿš™œð  	6ñ  	6‰IˆD�#ØÐHÐHÐHØà”kÔ2×6Ò6°t¸QÑ?Ô?ˆGØ˜G‘mˆGØ˜!Š|ˆ|Øà3×7Ò7¸¸cÑBÔBˆNØ Ò$Ð$Øà%¨Ñ6ˆOà #Ò%Ð%Ý!$¥T¤Z°Ñ%@Ô%@Ñ!AÔ!A�Ø! QÒ&Ð&Ø&¨™|�HÝ)Ø!d¨T¯\ª\¸#¸sÑ-CÔ-C×-IÒ-IÑ-KÔ-KÐ!dÐ!dÍdÌjÉlÌlÔN^Ð_aÐ`aÐ_aÔNbÐ!dÐ!dÝ$6Ô$DØ&*Ø$+Ø%0Ø,:Ý$)¨.¸!Ñ$<Ô$<Ø+3Ý2Ô:ð  E°gð   Eð   EÀð   Eð   EÐ]dð   Eð   EÐm{ð   Eð   Eð   Eðñ ô �Eð %×+Ò+¨EÑ2Ô2Ð2Ø# ~Ñ5�Oùð
 )¨4¬;Ô+HÑHˆØÐ1Ò1Ð1Ý  Ð3GÑ!GÑHÔHˆNÝ  Ð2FÑ!FÑGÔGˆNØ,¨sÑ2ˆOå(ØB­D¬J©L¬LÔ,<¸R¸a¸RÔ,@ÐBÐBÝ.ÔFØ)Ø*Ø)Ø$2Ý! #Ð(<Ñ"<¸aÑ@Ô@Ø#2Ý*Ô2ð c ^ð  cð  cÈÌÔIfð  cð  cð  GUð  cð  cð  cðñ ô ˆLð ×#Ò# LÑ1Ô1Ð1Ø˜~Ñ-ˆOØ Ñ.Ðð
 +¨T¬[Ô-KÑKˆØÐ3Ò3Ð3Ý  Ð4IÑ!IÑJÔJˆNÝ! .Ð3HÑ"HÑIÔIˆOØ,¨tÑ3ˆOå(ØB­D¬J©L¬LÔ,<¸R¸a¸RÔ,@ÐBÐBÝ.ÔGØ*Ø+Ø1Ø$2Ý! #Ð(=Ñ"=¸qÑAÔAØ#2Ý*Ô2ð L¸_ð  Lð  LÐguð  Lð  Lð  Lðñ ô ˆLð ×#Ò# LÑ1Ô1Ð1Ø Ñ/ÐØ Ñ.Ðõ
 ÐKÐKÐ:JÐKÑKÔKÑKÔKˆ	ð -/ˆØ�~Ò%Ð%Ø�LŠLð  T¸Ið  Tð  TÐesð  Tð  Tð  Tñ  Uô  Uð  UànÐnÐ(8ÐnÑnÔnˆMØmÐmÐ'7ÐmÑmÔmˆLà×ÒÐ"`Ð"`ÐjnÐÑoÔoÐoàˆGØ"ð 4ð 4�Ø˜QÔ1Ñ1°^ÒCÐCØ ×'Ò'¨Ñ*Ô*Ð*Ø˜qÔ3Ñ3�Gøà!ð 4ð 4�Ø˜QÔ1Ñ1°^ÒCÐCØ ×'Ò'¨Ñ*Ô*Ð*Ø˜qÔ3Ñ3�GøàˆIˆIà+ˆLà# f§j¢j°¸aÑ&@Ô&@Ñ@ˆ	Ø%¨¯
ª
°<ÀÑ(CÔ(CÑCˆ
Ø%¨¯
ª
Ð3GÈÑ(KÔ(KÑKˆ
à�Šðo­¨\Ñ):Ô):ð oð oÐR[ð oð oØ'0Ðnðoð oØ?IÐnðoð oØWaÐnðoð oð oñ	
ô 	
ð 	
õ
 "ØØ$Ý  ¨AÑ.Ô.Ø&Ø&ØØð
ñ 
ô 
ð 	
r&   r-   )r*   r+   )r0   r1   r2   r3   r4   r   r5   r   )r   r    r!   r"   r/   r–   r%   r&   r'   r)   r)   ,   sM   € € € € € Ø;Ð;ð:ð :ð :ð :ð :ðm
ð m
ð m
ð m
ð m
ð m
r&   r)   )r"   Ú
__future__r   rc   rg   Údataclassesr   r   Útypingr   r   r   r	   r
   r   Ú+src.assistant_tool.currency_exchange.modelsr   r   r   r   r   r   r   r)   r%   r&   r'   ú<module>r›      s=  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð;ð ;ð ;ð ;ð ;ñ ;ô ;ñ „ð;ðs
ð s
ð s
ð s
ð s
ñ s
ô s
ð s
ð s
ð s
r&   