§
    tÆ½jþ  ã                  ó~   — d Z ddlmZ ddlZddlmZ ddlmZ  edd¬¦  «         G d„ d	¦  «        ¦   «         Zdd„Z	dS )zš
Level progression experience curve calculation for FreeExile.
Pure mathematical 7-segment piecewise exponential formula adhering to PoE2 2026 Standards.
é    )ÚannotationsN)Ú	dataclass)ÚDictT)ÚslotsÚfrozenc                  óp   — e Zd ZU dZded<   ded<   ded<   ded<   ded<   d	Zded
<   dZded<   dZded<   dS )ÚLevelExpBenchmarkzKCanonical mathematical experience benchmark for a specific character level.ÚintÚlevelÚ
target_expÚexp_to_next_levelÚcumulative_expÚfloatÚdeath_penalty_ratioé   Úlevel_gap_safe_rangeç333333ã?Úlevel_gap_penalty_expé   Úmonster_benchmark_expN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   r   r   © ó    ú=C:\Projects\FreeExile\server\world\level_progression_curve.pyr	   r	      s„   € € € € € € àUÐUØ€J€J�JØ€O€O�OØÐÐÑØÐÐÑØÐÐÑØ !ÐÐ!Ð!Ð!Ñ!Ø#'ÐÐ'Ð'Ð'Ñ'Ø!#ÐÐ#Ð#Ð#Ñ#Ð#Ð#r   r	   ÚreturnúDict[int, LevelExpBenchmark]c                 ód  ‡— i Št          dd¦  «        D ]2} t          t          j        d| dz  z  d| z  z   ¦  «        ¦  «        ‰| <   Œ3‰d         }t          dd¦  «        D ]5} t          t          j        |dd| dz
  z  z   d	z  z  ¦  «        ¦  «        ‰| <   Œ6‰d
         }t          dd¦  «        D ]A} t          t          j        |t          j        d| d
z
  z  ¦  «        z  ¦  «        ¦  «        ‰| <   ŒB‰d         }t          dd¦  «        D ]2} t          t          j        |d|z  | dz
  z  z   ¦  «        ¦  «        ‰| <   Œ3‰d         }t          dd¦  «        D ]A} t          t          j        |t          j        d| dz
  z  ¦  «        z  ¦  «        ¦  «        ‰| <   ŒB‰d         }t          dd¦  «        D ]A} t          t          j        |t          j        d| dz
  z  ¦  «        z  ¦  «        ¦  «        ‰| <   ŒBt          ˆfd„t          dd¦  «        D ¦   «         ¦  «        }t          t          j        d|z  ¦  «        ¦  «        ‰d<   d‰d<   i }d}t          dd¦  «        D ]X} ‰|          }	| dk    rd}
n&| dk    rd}
n| dk    rd}
n| dk    rd}
n| dk    rd }
nd}
t          | ||	||
d!d"d#¬$¦  «        || <   ||	z  }ŒY|S )%aç  Generates canonical 1-100 benchmarks across 7 progression segments.
    
    Segments:
      1: Levels 1-20 (Tutorial acceleration, < 0.1% total EXP)
      2: Levels 21-40 (Acts I-II Storyline deceleration)
      3: Levels 41-60 (Acts III-IV & Endgame prep)
      4: Levels 61-80 (Atlas T1-T10 linear slope 0.12)
      5: Levels 81-90 (Late Atlas T11-T13)
      6: Levels 91-98 (Red Maps T14-T16 steep incline)
      7: Level 99->100 (Hardcore soft-wall >= 30% of lifetime 1-98 EXP)
    é   é   iô  gffffff@éd   é   é)   gÃõ(\�Âµ?g333333@é(   é=   gZd;ßO�·?é<   éQ   g¸…ëQ¸¾?éP   é[   g�Âõ(\�Â?éZ   éc   g¸…ëQ¸Î?c              3  ó(   •K  — | ]}‰|         V — Œd S )Nr   )Ú.0ÚkÚdeltass     €r   ú	<genexpr>z0calculate_piecewise_exp_curve.<locals>.<genexpr>E   s'   øè è € Ð3Ð3 �6˜!”9Ð3Ð3Ð3Ð3Ð3Ð3r   gffffffÖ?r   ée   g        gš™™™™™©?éY   gš™™™™™¹?éb   g333333Ã?g      Ð?r   r   r   )r   r   r   r   r   r   r   r   )Úranger
   ÚmathÚfloorÚexpÚsumr	   )ÚlvlÚd20Úd40Úd60Úd80Úd90Úsum_1_98Ú
benchmarksÚcurrent_cumÚnext_expÚpenaltyr2   s              @r   Úcalculate_piecewise_exp_curverG      s"  ø€ ð  €Fõ �Q˜‰|Œ|ð Fð FˆÝ�$œ* S¨C°3©JÑ%7¸#À¹)Ñ%CÑDÔDÑEÔEˆˆs‰ˆð �Œ*€CÝ�R˜‰}Œ}ð Oð OˆÝ�$œ* S¨Q°¸#À¹(Ñ1CÑ-CÈÑ,KÑ%LÑMÔMÑNÔNˆˆs‰ˆð �Œ*€CÝ�R˜‰}Œ}ð Jð JˆÝ�$œ* S­4¬8°E¸SÀ2¹XÑ4FÑ+GÔ+GÑ%GÑHÔHÑIÔIˆˆs‰ˆð �Œ*€CÝ�R˜‰}Œ}ð Eð EˆÝ�$œ* S¨4°#©:¸¸r¹Ñ+BÑ%BÑCÔCÑDÔDˆˆs‰ˆð �Œ*€CÝ�R˜‰}Œ}ð Jð JˆÝ�$œ* S­4¬8°E¸SÀ2¹XÑ4FÑ+GÔ+GÑ%GÑHÔHÑIÔIˆˆs‰ˆð �Œ*€CÝ�R˜‰}Œ}ð Jð JˆÝ�$œ* S­4¬8°E¸SÀ2¹XÑ4FÑ+GÔ+GÑ%GÑHÔHÑIÔIˆˆs‰ˆõ Ð3Ð3Ð3Ð3¥e¨A¨r¡l¤lÐ3Ñ3Ô3Ñ3Ô3€HÝ•T”Z  x¡Ñ0Ô0Ñ1Ô1€Fˆ2�JØ€Fˆ3�Kà/1€JØ€Kå�Q˜‰}Œ}ð  ð  ˆØ˜#”;ˆà�"Š9ˆ9ØˆGˆGØ�BŠYˆYØˆGˆGØ�BŠYˆYØˆGˆGØ�BŠYˆYØˆGˆGØ�BŠYˆYØˆGˆGàˆGå+ØØ"Ø&Ø&Ø 'Ø!"Ø"&Ø"$ð	
ñ 	
ô 	
ˆ
�3‰ð 	�xÑˆˆàÐr   )r   r    )
r   Ú
__future__r   r8   Údataclassesr   Útypingr   r	   rG   r   r   r   ú<module>rK      s¸   ððð ð
 #Ð "Ð "Ð "Ð "Ð "Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð ð €�˜dÐ#Ñ#Ô#ð	$ð 	$ð 	$ð 	$ð 	$ñ 	$ô 	$ñ $Ô#ð	$ðOð Oð Oð Oð Oð Or   