Ë
    Bp±j
  ã                   ó\   — d dl Zd dlmc mZ d dlmZmZm	Z	 d dl
mZ d„ Zd„ Zd„ Zd„ Zd„ Zy)	é    N)Úaggregate_fold_scoreÚrobust_objective_scoreÚthreshold_fragility_count)Úresolve_worker_countc            
      óÂ  — g d¢} d}t        | |«      }d}d}||z  }||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}x}}d}t        | |«      }d}||k(  }|�s
t        j                  d|fd||f«      dt        j                  «       v st        j
                  t         «      rt        j                  t         «      nd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}t        | |«      }d}d}d}||z  }||z  }||k(  }|�s2t        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                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}x}x}x}}y )N)ç      ð?ç        ç      @Úmeang      @r
   ©ú==)zF%(py5)s
{%(py5)s = %(py0)s(%(py1)s, %(py3)s)
} == (%(py8)s / %(py10)s)r   Úcalmars)Úpy0Úpy1Úpy3Úpy5Úpy8Úpy10úassert %(py13)sÚpy13Úminr	   )z9%(py5)s
{%(py5)s = %(py0)s(%(py1)s, %(py3)s)
} == %(py8)s)r   r   r   r   r   zassert %(py10)sr   Úmean_mingffffffæ?)zS%(py5)s
{%(py5)s = %(py0)s(%(py1)s, %(py3)s)
} == (%(py8)s * (%(py10)s / %(py12)s)))r   r   r   r   r   r   Úpy12zassert %(py16)sÚpy16)	r   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)r   Ú@py_assert2Ú@py_assert4Ú@py_assert7Ú@py_assert9Ú@py_assert11Ú@py_assert6Ú@py_format12Ú@py_format14Ú@py_format9Ú@py_format11Ú@py_assert13Ú@py_assert14Ú@py_format15Ú@py_format17s                  úe/Users/jameslopez/projects/TradingBot25/.worktrees/mlp-comparable-measurement/tests/test_train_mlp.pyÚtest_aggregate_fold_score_modesr2   	   sJ  € Ú€Gà)/Ð=Ô ¨Ó0Ð=°CÐ=¸#Ð=°C¸#±IÐ=Ð0°IÑ=×=×=Ö=Ð0°I×=×=×=×=×=Ñ=Ô×=×=Ó=Ô×=×=×=×=×=Ò= ×=×=Ó= ×=×=Ô=¨×=×=Ò=Ð0×=×=Ò=°C×=×=Ò=¸#×=×=×=×=×=×=×=Ñ=Ø).Ð6Ô ¨Ó/Ð6°3Ð6Ð/°3Ñ6×6×6Ö6Ð/°3×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°3×6×6×6×6×6×6Õ6Ø)3ÐIÔ ¨Ó4ÐI¸ÐI¸sÐIÀSÐI¸sÀS¹yÐI¸¸yÑ8IÐIÐ4Ð8IÑI×I×IÖIÐ4Ð8I×I×I×I×I×IÑIÔ×I×IÓIÔ×I×I×I×I×IÒI ×I×IÓI ×I×IÔI¨×I×IÒIÐ4×I×IÒI¸×I×IÒI¸s×I×IÒIÀS×I×I×I×I×I×I×IÖIó    c            	      óÄ  — g d¢} g d¢}d}t        | ||«      }d}||k(  }|�sKt        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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}t        | ||«      }d}||k(  }|�sKt        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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}}y )N)g      ð¿ç{®Gáz„¿g{®Gáz¤?gÍÌÌÌÌÌì?ç       @)r	   r   ç      $@gš™™™™™©?é   r   )zB%(py6)s
{%(py6)s = %(py0)s(%(py1)s, %(py2)s, %(py4)s)
} == %(py9)sr   ÚscoresÚ
thresholds)r   r   Úpy2Úpy4Úpy6Úpy9zassert %(py11)sÚpy11g)\�Âõ(¼?é   )	r   r   r   r   r   r   r    r!   r"   )r9   r:   Ú@py_assert3Ú@py_assert5Ú@py_assert8r%   Ú@py_format10r)   s           r1   Ú5test_threshold_fragility_count_uses_nearest_thresholdrE      s˜  € Ú*€FÚ!€Jà9=ÐCÔ$ V¨Z¸Ó>Ð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 V×C×C×C×C×CÒC¨Z×C×CÓC¨Z×C×CÔC¸×C×CÒCÐ>×C×CÒCÀ!×C×C×C×C×C×CÕCØ9=ÐCÔ$ V¨Z¸Ó>Ð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 V×C×C×C×C×CÒC¨Z×C×CÓC¨Z×C×CÔC¸×C×CÒCÐ>×C×CÒCÀ!×C×C×C×C×C×CÖCr3   c                  óL  — ddg} dddddœdddddœg}dd	d
ddœddd
ddœg}t        | |g d¢g d¢d«      \  }}t        | |g d¢g d¢d«      \  }}||k  }|sÆt        j                  d|fd||f«      dt        j                  «       v st        j
                  |«      rt        j                  |«      nddt        j                  «       v st        j
                  |«      rt        j                  |«      nddœz  }dd|iz  }	t        t        j                  |	«      «      ‚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   }|
|kD  }|slt        j                  d |fd!|
|f«      t        j                  |
«      t        j                  |«      dœz  }	dd|	iz  }t        t        j                  |«      «      ‚d x}
x}}|d"   }
|d"   }|
|kD  }|slt        j                  d |fd!|
|f«      t        j                  |
«      t        j                  |«      dœz  }	dd|	iz  }t        t        j                  |«      «      ‚d x}
x}}|d#   }
|d#   }|
|kD  }|slt        j                  d |fd!|
|f«      t        j                  |
«      t        j                  |«      dœz  }	dd|	iz  }t        t        j                  |«      «      ‚d x}
x}}y )$Nr   ç      à?é   g      >Àr6   )zTotal TradeszMax Drawdown %zP&L/DD RatiozCalmar Ratiog     €AÀé   g     €QÀr	   gš™™™™™Ù¿é   g      NÀ)r7   g      4@g      >@)r	   r   r6   r	   é
   )r5   rG   g®Gáz®ï?)Ú<)z%(py0)s < %(py2)sÚ
weak_scoreÚclean_score)r   r;   zassert %(py4)sr<   Úpnl_dd_penaltyr   )z%(py1)s == %(py4)s)r   r<   zassert %(py6)sr=   Údrawdown_penalty)Ú>)z%(py1)s > %(py4)sÚtrade_penaltyÚfragility_penalty)	r   r   r   r   r   r   r    r!   r"   )r   Úclean_metricsÚweak_metricsrN   Úclean_penaltiesrM   Úweak_penaltiesÚ@py_assert1Ú@py_format3Ú@py_format5Ú@py_assert0rA   r#   Ú@py_format7s                 r1   ÚDtest_robust_objective_penalizes_drawdown_pnl_dd_trades_and_fragilityr]      s­  € Ø�Cˆj€Gà¨uÀcÐ[^Ñ_Ø¨uÀcÐ[^Ñ_ð€Mð
 ¨eÀSÐZ^Ñ_Ø¨eÀSÐZ]Ñ^ð€Lô
 $:Ø�Ò 2Ò4HÈ"ó$Ñ €K�ô "8Ø�Ò1Ò3GÈó"Ñ€J�ð ˜Ñ#×#×#Õ#ˆ:˜×#×#×#×#×#Ñ#ˆ:×#×#Ó#ˆ:×#×#×#×#×#Ò#˜×#×#Ó#˜×#×#×#×#×#×#Ñ#ØÐ+Ñ,Ð3°Ð3Ð,°Ñ3×3×3Õ3Ð,°×3×3Ó3Ð,×3×3Ò3°×3×3×3×3×3×3Ó3ØÐ*Ñ+Ð2¨sÐ2Ð+¨sÑ2×2×2Õ2Ð+¨s×2×2Ó2Ð+×2×2Ò2¨s×2×2×2×2×2×2Ó2ØÐ,Ñ-ÐS°Ð@RÑ0SÐSÐ-Ð0SÑS×S×SÕSÐ-Ð0S×S×SÓSÐ-×S×SÒSÐ0S×S×S×S×S×S×SÓSØ˜/Ñ*ÐM¨_¸_Ñ-MÐMÐ*Ð-MÑM×M×MÕMÐ*Ð-M×M×MÓMÐ*×M×MÒMÐ-M×M×M×M×M×M×MÓMØÐ-Ñ.ÐU°ÐATÑ1UÐUÐ.Ð1UÑU×U×UÕUÐ.Ð1U×U×UÓUÐ.×U×UÒUÐ1U×U×U×U×U×U×UÔUr3   c            
      ó<  — 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	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}}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	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}}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	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}}y )Nr   éd   rG   é   )Úworkload_sizeÚworker_fractionÚ	cpu_countrJ   r   )zv%(py10)s
{%(py10)s = %(py0)s(%(py2)s, workload_size=%(py4)s, worker_fraction=%(py6)s, cpu_count=%(py8)s)
} == %(py13)sr   )r   r;   r<   r=   r   r   r   zassert %(py15)sÚpy15r@   g      Ð?é   ©	r   r   r   r   r   r   r    r!   r"   )	rX   rA   rB   r%   r&   Ú@py_assert12r'   r*   Ú@py_format16s	            r1   Ú=test_resolve_worker_count_auto_uses_fraction_and_workload_capri   3   sN  € Ø !Ð]°Ð]ÀcÐ]ÐUWÐ]Ô °ÀcÐUWÔXÐ]Ð\]Ð]ÐXÐ\]Ñ]×]×]Ö]ÐXÐ\]×]×]×]×]×]Ñ]Ô×]×]Ó]Ô×]×]Ô] ×]×]Ò]°×]×]Ò]Àc×]×]Ò]ÐUW×]×]Ò]ÐX×]×]Ò]Ð\]×]×]×]×]×]×]×]Ó]Ø !Ð[°Ð[ÀCÐ[ÐSUÐ[Ô °ÀCÐSUÔVÐ[ÐZ[Ð[ÐVÐZ[Ñ[×[×[Ö[ÐVÐZ[×[×[×[×[×[Ñ[Ô×[×[Ó[Ô×[×[Ô[ ×[×[Ò[°×[×[Ò[ÀC×[×[Ò[ÐSU×[×[Ò[ÐV×[×[Ò[ÐZ[×[×[×[×[×[×[×[Ó[Ø !Ð^°Ð^ÀdÐ^ÐVXÐ^Ô °ÀdÐVXÔYÐ^Ð]^Ð^ÐYÐ]^Ñ^×^×^Ö^ÐYÐ]^×^×^×^×^×^Ñ^Ô×^×^Ó^Ô×^×^Ô^ ×^×^Ò^°×^×^Ò^Àd×^×^Ò^ÐVX×^×^Ò^ÐY×^×^Ò^Ð]^×^×^×^×^×^×^×^Ô^r3   c            	      ó   — 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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} 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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} 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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}}y )Né   r_   r`   )ra   rc   r   )z[%(py8)s
{%(py8)s = %(py0)s(%(py2)s, workload_size=%(py4)s, cpu_count=%(py6)s)
} == %(py11)sr   )r   r;   r<   r=   r   r?   r   r   re   é   rf   )rX   rA   rB   r%   Ú@py_assert10r&   r)   r*   s           r1   ÚDtest_resolve_worker_count_manual_overrides_auto_and_caps_to_workloadrn   9   s  € Ø !ÐH°ÐHÀÐHÔ °ÀÔCÐHÀqÐHÐCÀqÑH×H×HÕHÐCÀq×H×H×H×H×HÑHÔ×H×HÓHÔ×H×HÔH ×H×HÒH°×H×HÒHÀ×H×HÒHÐC×H×HÒHÀq×H×H×H×H×H×H×HÑHØ !ÐF°ÐF¸bÐFÔ °¸bÔAÐFÀQÐFÐAÀQÑF×F×FÕFÐAÀQ×F×F×F×F×FÑFÔ×F×FÓFÔ×F×FÔF ×F×FÒF°×F×FÒF¸b×F×FÒFÐA×F×FÒFÀQ×F×F×F×F×F×F×FÑFØ !ÐH°ÐHÀÐHÔ °ÀÔCÐHÀqÐHÐCÀqÑH×H×HÕHÐCÀq×H×H×H×H×HÑHÔ×H×HÓHÔ×H×HÔH ×H×HÒH°×H×HÒHÀ×H×HÒHÐC×H×HÒHÀq×H×H×H×H×H×H×HÒHr3   )Úbuiltinsr   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter   Útools.train_mlpr   r   r   Útools.worker_utilsr   r2   rE   r]   ri   rn   © r3   r1   Ú<module>rv      s7   ðß  „ ÷ ñ õ
 4òJòDòVò4_óIr3   