Ë
    sw±já-  ã                   ó¼  — 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
 d dlZd dlZd dlmZmZ d dlmZ  ej(                  d¬«      d„ «       Zd„ Zd	„ Zej0                  j3                  d
ddg«      d„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#ej0                  j3                  dg d¢«      d„ «       Z$ej0                  j3                  dddg«      d„ «       Z%d„ Z&y)é    N)ÚCounter)Úreplace)ÚComparisonSnapshotÚrequire_replayT)Úautousec                 óê  ‡‡‡— ddl }|j                  ddd¬«      }t        j                  t	        |«      «      dz  }|j                  t        |j                  d«      j                  d	«      d
dt        j                  |«      z  z   ddt        j                  |«      z  z   t        j                  |«      t        j                  |«      d¬«      «      }| dz  Š|j                  ‰d¬«       | dz  Š‰j                  t        j                  t        dgt        dggdg¬«      gddgi ¬«      «      «       | dz  Š|j                  t        j                   t#        ‰«      «      g«      j                  ‰d¬«       |j%                  t        dˆfd„«       |j%                  t        dˆfd„«       |j%                  t        dˆfd„«       |j%                  t        dd «       |j%                  t        d!d«       ‰S )"zDSmall deterministic market/model fixtures; no private chart exports.r   Nú
2017-11-01z
2026-03-05Ú6h)Úfreqg)\�Âõ(¼?ÚsÚint64ç      Y@g      @g     @Y@ç        )ÚtimeÚcloseÚhighÚ
stoch_normÚstoch_peak_normÚmvrv_regimeúbars.csvF©Úindexz
model.jsonr   ç      ð?)ÚWÚbé   )Úfeature_colsÚlayersÚarchÚtrainingú
winner.csvÚ	data_pathc                 ó   •— ‰S ©N© )ÚtfÚdatas    €új/Users/jameslopez/projects/TradingBot25/.worktrees/mlp-comparable-measurement/tests/test_mlp_comparison.pyÚ<lambda>z#comparison_inputs.<locals>.<lambda>   s   ø€ ±tó    Úwinner_pathc                 ó   •— ‰S r$   r%   )r&   Úwinners    €r(   r)   z#comparison_inputs.<locals>.<lambda>   s   ø€ ¹r*   Úartifact_pathc                 ó   •— t        ‰«      S r$   )Ústr)r&   Úartifacts    €r(   r)   z#comparison_inputs.<locals>.<lambda>   s	   ø€ ¼3¸x¼=r*   ÚASSETÚCOINBASE_BTCUSDÚ_COMPARISON)ÚpandasÚ
date_rangeÚnpÚarangeÚlenÚ	DataFrameÚdictÚas_unitÚastypeÚsinÚcosÚto_csvÚ
write_textÚjsonÚdumpsÚsweepÚrecommended_from_artifactr0   Úsetattr)	Útmp_pathÚmonkeypatchÚpdÚtimesÚphaseÚframer1   r'   r-   s	         @@@r(   Úcomparison_inputsrM      s£  ú€ ó Ø�M‰M˜,¨¸4ˆMÓ@€EÜ�I‰I”c˜%“jÓ! CÑ'€EØ�L‰Lœ 5§=¡=°Ó#5×#<Ñ#<¸WÓ#EØ�Rœ"Ÿ&™& ›-Ñ'Ñ'¨d°R¼"¿&¹&À»-Ñ5GÑ.GÜ—6‘6˜%“=´"·&±&¸³-ÈRôQó R€Eð �jÑ €DØ	‡L�L�˜U€LÔ#Ø˜,Ñ&€HØ×ÑœŸ
™
¤4°l°^Ü˜˜�v " Ô&Ð'¨q°!¨f¸rô$Có Dô Eà˜Ñ$€FØ‡L�L”%×1Ñ1´#°h³-Ó@ÐAÓB×IÑIÈ&ÐX]ÐIÔ^Ø×Ñœ˜{«OÔ<Ø×Ñœ˜}Ó.?Ô@Ø×Ñœ˜Ó0HÔIØ×Ñœ˜wÐ(9Ô:Ø×Ñœ˜}¨dÔ3Ø€Kr*   c                  ó\   — t        dddddœddddd	d	dd
dddœ
¤Ž}|j                  | «       |S )NÚsameÚcompleteÚ	candidate)ÚComparison_FingerprintÚEvaluation_StatusÚsourceg      $@g       @r   r   r   é   g      @r   )
úP&L/DD RatioúCalmar RatiozTotal P&L %zFragile_0.05ÚSub1_CalmarÚSub2_CalmarÚWFO_Neg_FoldszOOS_Total TradesúOOS_Sortino RatioÚOOS_Bear_Pctr%   )r;   Úupdate)Ú	overridesÚrows     r(   Úvalidr`   $   sN   € Ü
ð ' fÀ
ÐS^ñ 'Ø"%°rÈ$Ø"#°BÀrØ#$¸!ÐRTØ"$ñ&ñ'€Cð
 ‡J�JˆyÔØ€Jr*   c                  óÄ  — t        «       } t        di dddœ¤Ž}t        di ddddœ¤Ž}t        j                  } || ||«      }|�sXd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	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                  |«      dœz  }t        t        j                  |«      «      ‚d x}}t        j                  }ddi}t        di |¤Ž} ||||«      }| }|�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                  t         «      rt        j                  t         «      ndt        j                  |«      t        j                  |«      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                  |«      dœz  }	t        t        j                  |	«      «      ‚d x}x}x}x}}t        j                  }d}t        |¬«      } ||||«      }| }|�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                  t         «      rt        j                  t         «      ndt        j                  |«      t        j                  |«      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                  |«      dœz  }	t        t        j                  |	«      «      ‚d x}x}x}x}}t        j                  }ddi}t        di |¤Ž} ||||«      }| }|�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                  t         «      rt        j                  t         «      ndt        j                  |«      t        j                  |«      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                  |«      dœz  }	t        t        j                  |	«      «      ‚d x}x}x}x}}t        j                  }d}t        |¬«      } |||«      }
|
 }|�sGddt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      dt        j                  «       v st        j                  t         «      rt        j                  t         «      ndt        j                  |«      t        j                  |«      d
t        j                  «       v st        j                  |«      rt        j                  |«      nd
t        j                  |
«      dœz  }t        t        j                  |«      «      ‚d x}x}x}x}
}y )Nr   g      "@)rW   rV   g     @�@g     8�@)rW   rV   r[   z^assert %(py7)s
{%(py7)s = %(py2)s
{%(py2)s = %(py0)s.promotable
}(%(py3)s, %(py4)s, %(py5)s)
}rD   rQ   Ú	incumbentÚ
historical)Úpy0Úpy2Úpy3Úpy4Úpy5Úpy7r[   z„assert not %(py11)s
{%(py11)s = %(py2)s
{%(py2)s = %(py0)s.promotable
}(%(py7)s
{%(py7)s = %(py3)s(**%(py5)s)
}, %(py8)s, %(py9)s)
}r`   )rd   re   rf   rh   ri   Úpy8Úpy9Úpy11r   )rZ   z�assert not %(py11)s
{%(py11)s = %(py2)s
{%(py2)s = %(py0)s.promotable
}(%(py7)s
{%(py7)s = %(py3)s(WFO_Neg_Folds=%(py5)s)
}, %(py8)s, %(py9)s)
}rX   r   Úother)rR   z�assert not %(py10)s
{%(py10)s = %(py2)s
{%(py2)s = %(py0)s.promotable
}(%(py7)s
{%(py7)s = %(py3)s(Comparison_Fingerprint=%(py5)s)
}, %(py8)s)
})rd   re   rf   rh   ri   rj   Úpy10r%   )
r`   rD   Ú
promotableÚ@py_builtinsÚlocalsÚ
@pytest_arÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)rQ   rb   rc   Ú@py_assert1Ú@py_assert6Ú@py_format8Ú@py_assert4Ú@py_assert10Ú@py_assert12Ú@py_format13Ú@py_assert9Ú@py_assert11Ú@py_format12s                r(   Ú1test_incompatible_high_history_is_provenance_onlyr�   .   sµ  € Ü“€IÜÑA¨¸RÑ@ÑA€IÜÑc¨%ÀÐ]aÑbÑc€JÜ×ÑÐ=Ñ˜I y°*Ó=Ð=Ò=×=×=×=×=Õ=Œ5×=×=Ó=Œ5×=×=Ô=Ð×=×=×=×=×=Ð=˜I×=×=Ó=˜I×=×=×=×=×=Ò= y×=×=Ó= y×=×=×=×=×=Ò=°*×=×=Ó=°*×=×=Ô=Ð=×=×=×=×=×=Ò=Ü×ÑÐZÐ)<¸bÐ(AÐZ¤Ñ BÐ(AÑ BÐZÑÐ BÀIÈzÓZÐZÐZÐZÐZÒZ×Z×Z×Z×ZÕZŒu×Z×ZÓZŒu×Z×ZÔZÐ×Z×Z×Z×Z×ZÐZ¤×Z×ZÓZ¤×Z×ZÔZÐ(A×Z×ZÒZÐ B×Z×Z×Z×Z×ZÐZÀI×Z×ZÓZÀI×Z×Z×Z×Z×ZÒZÈz×Z×ZÓZÈz×Z×ZÔZÐZ×Z×Z×Z×Z×Z×ZÐZÜ×ÑÐN°AÐN¤°AÔ 6ÐNÑÐ 6¸	À:ÓNÐNÐNÐNÐNÒN×N×N×N×NÕNŒu×N×NÓNŒu×N×NÔNÐ×N×N×N×N×NÐN¤×N×NÓN¤×N×NÔN°A×N×NÒNÐ 6×N×N×N×N×NÐN¸	×N×NÓN¸	×N×N×N×N×NÒNÀ:×N×NÓNÀ:×N×NÔNÐN×N×N×N×N×N×NÐNÜ×ÑÐT¨¸Ð(;ÐT¤Ñ <Ð(;Ñ <ÐTÑÐ <¸iÈÓTÐTÐTÐTÐTÒT×T×T×T×TÕTŒu×T×TÓTŒu×T×TÔTÐ×T×T×T×T×TÐT¤×T×TÓT¤×T×TÔTÐ(;×T×TÒTÐ <×T×T×T×T×TÐT¸i×T×TÓT¸i×T×T×T×T×TÒTÈ×T×TÓTÈ×T×TÔTÐT×T×T×T×T×T×TÐTÜ×ÑÐQ¸WÐQ¤¸WÔ EÐQÑÐ EÀyÓQÐQÐQÐQÐQÒQ×Q×Q×Q×QÕQŒu×Q×QÓQŒu×Q×QÔQÐ×Q×Q×Q×Q×QÐQ¤×Q×QÓQ¤×Q×QÔQ¸W×Q×QÒQÐ E×Q×Q×Q×Q×QÐQÀy×Q×QÓQÀy×Q×QÔQÐQ×Q×Q×Q×Q×Q×QÑQr*   ÚstatusÚfailedÚ
incompletec           	      óV  — t        | ¬«      }t        j                  }t        «       } |||«      }| }|�s3ddt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      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œz  }t        t        j                  |«      «      ‚d x}x}x}}t        j                  t        «      5  t        |«       d d d «       y # 1 sw Y   y xY w)N)rS   zpassert not %(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.promotable
}(%(py5)s
{%(py5)s = %(py3)s()
}, %(py6)s)
}rD   r`   rb   )rd   re   rf   rh   Úpy6rj   )r`   rD   ro   rp   rq   rr   rs   rt   ru   rv   ÚpytestÚraisesÚ
ValueErrorr   )r‚   rb   rw   rz   Ú@py_assert7r~   Ú@py_format10s          r(   Ú0test_failed_or_incomplete_incumbent_fails_closedrŒ   9   sç   € ä¨Ô/€IÜ×ÑÐ3¤£Ð3Ñ ¨Ó3Ð3Ð3Ð3Ð3Ò3×3×3×3×3Õ3Œu×3×3Ó3Œu×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Ü	�‰”zÕ	"Ü�yÔ!÷ 
#×	"Ñ	"ús   Æ
FÆF(c                 óà  — t        j                  dt        j                  d«      d   g«      }t        j                  t        j                  d«      «      }| j	                  t         d|«       i }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}}t         j
                  }
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                  |«      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                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddœz  }dd|iz  }t        t        j                  |«      «      ‚d x}
x}x}}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}}t        ||j                   dz   ¬«      }| j	                  t         d|«       t        j
                  d||«      d   }|d   }||k7  }|slt        j                  d|fd||f«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}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}}t#        j$                  |d   «      }t        |«      }t         j&                  }t        |«      }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                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      nd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}}d#„ |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}
}y )'NÚ6HÚmlp_weights_filer4   r   ©ú==)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr9   Úcache©rd   Úpy1rf   r†   úassert %(py8)srj   )za%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.evaluate
}(%(py4)s, %(py5)s, %(py6)s)
} == %(py10)srD   ÚparamsÚfirst)rd   re   rg   rh   r†   rj   rn   zassert %(py12)sÚpy12Ú )Úmanifest_jsonrR   ©ú!=)z%(py1)s != %(py4)s©r”   rg   úassert %(py6)sr†   rU   ÚPeriod_Measurementsé   ©z|%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == (%(py10)s
{%(py10)s = %(py5)s(%(py8)s
{%(py8)s = %(py6)s.WFO_FOLDS
})
} + %(py12)s)Úperiods©rd   r”   rf   rh   r†   rj   rn   r˜   úassert %(py15)sÚpy15c              3   óP   K  — | ]  }d |v xs |j                  d«      dk(  –— Œ  y­w)ÚentriesÚcoverageÚemptyN©Úget)Ú.0Úperiods     r(   Ú	<genexpr>z5test_snapshot_and_compatible_cache.<locals>.<genexpr>P   s.   è ø€ Ð^ÑV]ÈFˆy˜FÐ"ÒG f§j¡j°Ó&<ÀÑ&GÓGÑV]ùs   ‚$&ú,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úall©rd   re   rg   )rD   Úcapture_comparisonÚload_winnerÚnormalise_paramrF   Úevaluater9   rr   Ú_call_reprcomparerp   rq   rs   rt   ru   rv   r   rš   rB   ÚloadsÚ	WFO_FOLDSr°   )rH   Úsnapshotr–   r’   r—   Ú@py_assert2Ú@py_assert5rz   Ú@py_format7Ú@py_format9rw   Ú@py_assert3rŠ   r~   Ú@py_format11r}   ÚchangedÚ@py_assert0Ú@py_format5r¢   r   Ú@py_assert13Ú@py_format14Ú@py_format16s                           r(   Ú"test_snapshot_and_compatible_cacherÆ   A   sý  € Ü×'Ñ'¨¬u×/@Ñ/@ÀÓ/FÐGYÑ/ZÐ.[Ó\€HÜ×"Ñ"¤5×#4Ñ#4°TÓ#:Ó;€FØ×Ñœ˜}¨hÔ7Ø€EÜ�N‰N˜4 ¨Ó/€EÜˆu‹:Ð˜Ðˆ:˜‰?××Õˆ:˜×××××ÑŒ3××ÓŒ3×××××Òˆu××Óˆu××Ôˆ:××Ò˜××××××ÓÜ�>‰>Ð7˜$Ð7‰>˜$ ¨Ó.Ð7Ð.°%Ñ7×7×7Ö7Ð.°%×7×7×7×7×7Ñ7Œ5×7×7Ó7Œ5×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°%×7×7×7×7×7×7×7Üˆu‹:Ð˜Ðˆ:˜‰?××Õˆ:˜×××××ÑŒ3××ÓŒ3×××××Òˆu××Óˆu××Ôˆ:××Ò˜××××××ÓÜ�h¨h×.DÑ.DÀsÑ.JÔK€GØ×Ñœ˜}¨gÔ6Ü�>‰>˜$ ¨Ó.Ð/GÑHÐkÈEÐRjÑLkÐkÐHÐLkÑk×k×kÕkÐHÐLk×k×kÓkÐH×k×kÒkÐLk×k×k×k×k×k×kÓkÜˆu‹:Ð˜Ðˆ:˜‰?××Õˆ:˜×××××ÑŒ3××ÓŒ3×××××Òˆu××Óˆu××Ôˆ:××Ò˜××××××ÓÜ�j‰j˜Ð4Ñ5Ó6€GÜˆw‹<Ð3œuŸ™Ð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ˆw×3×3Ó3ˆw×3×3Ô3ˆ<×3×3×3×3×3Ð3œ3×3×3Ó3œ3×3×3×3×3×3Ò3œu×3×3Ó3œu×3×3Ô3˜×3×3Ò3Ð/×3×3Ò3°!×3×3×3×3×3×3×3Ñ3Ù^ÑV]Ó^Ð^Œ3Ð^Ó^Ð^Ñ^×^×^×^×^Õ^Œ3×^×^Ó^Œ3×^×^Ô^Ð^×^×^Ò^Ð^×^×^×^×^×^Ó^r*   c                 ób  — t        j                  d«      d   }t        j                  d|g«      }t        j                  |j
                  d   d   «      }t        j                  |d   d   d   d   d<   t        ||t        j                  |«      j                  «       ff¬«      }| j                  t         d|«       t        j                  t        «      5  t        t        j                   dt        j"                  t        j                  d«      «      i «      «       d d d «       y # 1 sw Y   y xY w)	NrŽ   r�   r   r   r   r   )Ú	artifactsr4   )rD   r³   r²   rB   r·   rÈ   r7   Únanr   rC   ÚencoderF   r‡   rˆ   r‰   r   rµ   r´   )rH   Úpathr¹   Úpayloads       r(   Útest_nan_model_is_failed_replayrÍ   S   sé   € Ü×Ñ˜TÓ"Ð#5Ñ6€DÜ×'Ñ'¨¨t¨fÓ5€HÜ�j‰j˜×+Ñ+¨AÑ.¨qÑ1Ó2€GÜ&(§f¡f€GˆHÑ�aÑ˜Ñ˜aÑ  Ñ#Ü�x¨T´4·:±:¸gÓ3F×3MÑ3MÓ3OÐ,PÐ+RÔS€HØ×Ñœ˜}¨hÔ7Ü	�‰”zÕ	"Ü”u—~‘~ d¬E×,AÑ,AÄ%×BSÑBSÐTXÓBYÓ,ZÐ\^Ó_Ô`÷ 
#×	"Ñ	"ús   ÃAD%Ä%D.c                 ó˜  ‡%— | dz  }ddl m} |j                   |t        j                  d«      d   «      j                  «       «       d}t        j                  d|dt        |«      g¬«      }i }|D ]W  }|d	   d
k(  sŒ|j                  |d   g «      j                  |j                  «       D ��ci c]  \  }}|dk7  sŒ||“Œ c}}«       ŒY 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}}
t)        |j+                  «       «      Š%ˆ%fd„‰%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   D �ch c]  }|d   |d   f’Œ }}h d£}	||	k(  }|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}}	t/        d „ ‰%d   D «       «      }|j*                  }	 |	«       }t1        |«      }|j*                  } |«       }t3        |«      }||z
  }d!}||k  }|�sät        j                  d"|fd#||f«      d$t        j                  «       v st        j                   t0        «      rt        j"                  t0        «      nd$d%t        j                  «       v st        j                   |«      rt        j"                  |«      nd%t        j"                  |	«      t        j"                  |«      t        j"                  |«      d&t        j                  «       v st        j                   t2        «      rt        j"                  t2        «      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}x}x}x}}‰%d   }t        |«      }t        |«      }||z  }||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"                  |«      d+t        j                  «       v st        j                   |«      rt        j"                  |«      nd+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"                  |«      d,œz  } d-d.| iz  }!t%        t        j&                  |!«      «      ‚d x}x}x}
x}}t        |«      }	t        |«      }"d!}t        |«      }||z  }||z   }|"|z  }|	|k(  }|�sst        j                  d|fd/|	|f«      dt        j                  «       v st        j                   t        «      rt        j"                  t        «      ndd0t        j                  «       v st        j                   |«      rt        j"                  |«      nd0t        j"                  |	«      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+t        j                  «       v st        j                   |«      rt        j"                  |«      nd+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"                  |«      d1œz  }#d2d3|#iz  }$t%        t        j&                  |$«      «      ‚d x}	x}x}"x}x}x}x}}y c c}}w c c}w )4Nzcomparison-model.jsonr   )ÚPathrŽ   r�   é   éM   )Úextra_weightsrT   Úequal_tuningrU   )ú>=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sr9   Ú	per_modelr“   r•   rj   c              3   ó.   •K  — | ]  }|‰d    k(  –— Œ y­w)r   Nr%   )r¬   ÚrowsÚvaluess     €r(   r®   z9test_equal_additional_threshold_budget.<locals>.<genexpr>k   s   øè ø€ Ð4©V Tˆt�v˜a‘yÕ ©Vùs   ƒr¯   r°   r±   Úi_use_long_entry_confirmationÚi_use_long_exit_confirmation>   ©FF©FT©TF©TTr�   )z%(py0)s == %(py3)sÚpairs)rd   rf   úassert %(py5)srh   c              3   ó0   K  — | ]  }|d    |d   f–— Œ y­w)rÙ   rÚ   Nr%   )r¬   Úrs     r(   r®   z9test_equal_additional_threshold_budget.<locals>.<genexpr>n   s%   è ø€ ÐuÑktÐfg˜1Ð<Ñ=¸qÐA_Ñ?`ÔaÑktùs   ‚r   )ú<=)zÇ(%(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.values
}()
})
} - %(py15)s
{%(py15)s = %(py8)s(%(py13)s
{%(py13)s = %(py11)s
{%(py11)s = %(py9)s.values
}()
})
}) <= %(py19)sÚmaxÚpair_countsÚmin)rd   r”   rf   rh   ri   rj   rk   rl   Úpy13r¥   Úpy19zassert %(py21)sÚpy21)z]%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == (%(py6)s // %(py10)s
{%(py10)s = %(py7)s(%(py8)s)
})Úsamples)rd   re   rg   r†   ri   rj   rn   úassert %(py13)srç   )z—%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == (%(py8)s
{%(py8)s = %(py5)s(%(py6)s)
} * (%(py10)s + (%(py11)s // %(py15)s
{%(py15)s = %(py12)s(%(py13)s)
})))Ú
candidates)rd   r”   rf   rh   r†   rj   rn   rl   r˜   rç   r¥   zassert %(py20)sÚpy20)ÚpathlibrÏ   Úwrite_bytesrD   r³   Ú
read_bytesÚgenerate_candidatesr0   Ú
setdefaultÚappendÚitemsr9   rr   r¶   rp   rq   rs   rt   ru   rv   ÚlistrØ   r°   r   rä   ræ   )&rG   r1   rÏ   rê   rì   rÕ   r_   ÚkÚvrº   r»   rz   r¼   r½   rw   r¾   rÂ   rß   Ú@py_format4Ú@py_format6rå   rx   r{   r|   Ú@py_assert14Ú@py_assert16Ú@py_assert18Ú@py_assert17Ú@py_format20Ú@py_format22r~   r   r€   rÄ   rŠ   Ú@py_format19Ú@py_format21rØ   s&                                        @r(   Ú&test_equal_additional_threshold_budgetr  ^   s,  ø€ ØÐ1Ñ1€HÝØ×Ñ™œe×/Ñ/°Ó5Ð6HÑIÓJ×UÑUÓWÔXØ€GÜ×*Ñ*¨4°¸"ÜˆH‹ðMô €Jà€IÛˆØˆx‰=˜NÓ*Ø× Ñ  Ð%7Ñ!8¸"Ó=×DÑDÐUX×U^ÑU^ÔU`ÔE|ÑU`ÉcÈaÐPQÐdeÐi{Ód{ÀaÈÁcÐU`ÒE|Õ}ð ô ˆy‹>Ð˜QÐˆ>˜QÑ××Õˆ>˜Q×××××ÑŒ3××ÓŒ3×××××Òˆy××Óˆy××Ôˆ>××Ò˜Q××××××ÓÜ�)×"Ñ"Ó$Ó%€FÛ4©VÓ4Ð4Œ3Ð4Ó4Ð4Ñ4×4×4×4×4Õ4Œ3×4×4Ó4Œ3×4×4Ô4Ð4×4×4Ò4Ð4×4×4×4×4×4Ò4ØdjÐklÒdmÓnÑdmÐ]`ˆcÐ1Ñ2°CÐ8VÑ4WÒXÐdm€EÐnÚPÐPˆ5ÐPÑP×P×PÕPˆ5ÐP×P×P×P×P×PÑPˆ5×P×PÓPˆ5×P×PÔPÐP×P×P×P×P×P×PÑPÜÑuÐkqÐrsÒktÓuÓu€KØ×!Ñ!ÐEÑ!Ó#ÐEŒ3Ð#Ó$ÐE¨;×+=Ñ+=ÐEÑ+=Ó+?ÐE¤sÐ+?Ó'@ÐEÐ$Ð'@Ñ@ÐEÀAÐEÐ@ÀAÑE×E×EÖEÐ@ÀA×E×E×E×E×EÑEŒ3×E×EÓEŒ3×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¤s×E×E×E×E×EÒE¨;×E×EÓE¨;×E×EÔEÐ+=×E×EÒEÐ+?×E×EÒEÐ'@×E×EÒEÀA×E×E×E×E×E×E×E×EØ�a‰yÐ6Œ3ˆy‹>Ð6¬¨I«Ð6˜W¨Ñ6Ð6ˆ>Ð6Ñ6×6×6Ö6ˆ>Ð6×6×6×6×6×6Ñ6Œ3×6×6Ó6Œ3×6×6Ô6ˆy×6×6Ò6ˆ>×6×6×6×6×6Ð6˜W×6×6Ó6˜W×6×6×6×6×6Ò6¬×6×6Ó6¬×6×6×6×6×6Ò6¨I×6×6Ó6¨I×6×6Ô6¨×6×6×6×6×6×6×6Üˆz‹?ÐNœc )›nÐN°ÐN¼sÀ9»~ÐN°G¸~Ñ4MÐN°Ð4MÑ0MÐN˜nÐ0MÑNÐNˆ?ÐNÑN×N×NÖNˆ?ÐN×N×N×N×N×NÑNŒ3×N×NÓNŒ3×N×N×N×N×NÒNˆz×N×NÓNˆz×N×NÔNˆ?×N×N×N×N×NÐNœc×N×NÓNœc×N×N×N×N×NÒN )×N×NÓN )×N×NÔN˜n×N×NÒN°×N×N×N×N×NÐN°G×N×NÓN°G×N×N×N×N×NÒN¼s×N×NÓN¼s×N×N×N×N×NÒNÀ9×N×NÓNÀ9×N×NÔN¸~×N×N×N×N×N×N×NÖNùó F}ùò os   Â.iÂ<iÊ,ic                 óX  — t         j                  }t        j                  dt        j                  d«      d   g«      }| dz  }|j	                  |j
                  dz   «       t        j                  |j                  «      d   }|j                  d   d   }t        j                  ||g|t         j                  d|¬«      }|j                  }|j                  }||k7  }	|	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}	}t        j                  |j                  «      }|d   D ]F  }| |z  }|j,                  j/                  dd¬«       |j	                  ||z  j1                  «       «       ŒH | dz  j3                  d«       |j	                  |j
                  «       t        j                  ||g| t         j                  d|¬«      }|j                  }|j                  }||k7  }	|	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}	}y )NrŽ   r�   r   ó   
Úcontractr   )ÚrepoÚassetr&   r  r›   )zT%(py2)s
{%(py2)s = %(py0)s.fingerprint
} != %(py6)s
{%(py6)s = %(py4)s.fingerprint
}Úchanged_dataÚoriginal)rd   re   rg   r†   r•   rj   Úsource_hashesT)ÚparentsÚexist_okzstrategies/mlp_accounting.pyz# changed accountingÚchanged_accounting)rD   ÚREPOr²   r³   rï   r'   rB   r·   rš   rÈ   r   Úcapturer2   Úfingerprintrr   r¶   rp   rq   rs   rt   ru   rv   ÚparentÚmkdirrð   rA   )rG   r  r	  rT   r  r1   r  rw   r»   r¾   r¼   r½   ÚmanifestrË   Útargetr  s                   r(   Ú*test_data_and_source_hashes_change_contextr  t   s†  € Ü�:‰:€DÜ×'Ñ'¨¬u×/@Ñ/@ÀÓ/FÐGYÑ/ZÐ.[Ó\€HØ˜
Ñ"€FØ
×Ñ�x—}‘} uÑ,Ô-Ü�z‰z˜(×0Ñ0Ó1°*Ñ=€HØ×!Ñ! !Ñ$ QÑ'€HÜ%×-Ñ-¨f°x°jÀtÜŸ+™+¨$¸ôC€Là×#Ñ#Ð; x×';Ñ';Ð;Ð#Ð';Ñ;×;×;Õ;Ð#Ð';×;×;×;×;×;Ñ;ˆ<×;×;Ó;ˆ<×;×;Ô;Ð#×;×;×;×;×;Ð; x×;×;Ó; x×;×;Ô;Ð';×;×;×;×;×;×;Ó;Ü�z‰z˜(×0Ñ0Ó1€HØ˜Ô)ˆØ˜D‘ˆØ�‰×Ñ D°4ÐÔ8Ø×Ñ˜D 4™K×3Ñ3Ó5Õ6ð *ð Ð.Ñ.×:Ñ:Ð;QÔRØ
×Ñ�x—}‘}Ô%Ü+×3Ñ3°F¸X¸JÈXÜŸ+™+¨$¸ôCÐà×)Ñ)ÐA¨X×-AÑ-AÐAÐ)Ð-AÑA×A×AÕAÐ)Ð-A×A×A×A×A×AÑAÐ×A×AÓAÐ×A×AÔAÐ)×A×A×A×A×AÐA¨X×A×AÓA¨X×A×AÔAÐ-A×A×A×A×A×A×AÔAr*   c                 ó*  — dd l }dd l}t        j                  d«      }t        j                  d|d   g«      }|j                  |j                  |j                  «      «      j                  d d }t        ||j                  d¬«      j                  «       ¬«      }| j                  t        d|«       t        j                  dt        j                  |«      i «      }|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}	}t)        j*                  t,        «      5  t/        |«       d d d «       y # 1 sw Y   y xY w)Nr   rŽ   r�   éd   Fr   )r'   r4   rS   r„   r�   ©z%(py1)s == %(py4)sr�   rž   r†   )Úior5   rD   r³   r²   Úread_csvÚBytesIOr'   Úilocr   r@   rÊ   rF   rµ   r´   rr   r¶   rt   ru   rv   r‡   rˆ   r‰   r   )rH   r  rI   r-   r¹   rL   r_   rÁ   r¾   rº   rÂ   r¼   s               r(   Ú!test_truncated_data_is_incompleter  Š   s  € ÛÛÜ×Ñ˜tÓ$€FÜ×'Ñ'¨¨vÐ6HÑ/IÐ.JÓK€HØ�K‰K˜Ÿ
™
 8§=¡=Ó1Ó2×7Ñ7¸¸Ð=€EÜ�x e§l¡l¸ lÓ&?×&FÑ&FÓ&HÔI€HØ×Ñœ˜}¨hÔ7Ü
�.‰.˜œu×4Ñ4°VÓ<¸bÓ
A€CØÐ"Ñ#Ð3 |Ð3Ð# |Ñ3×3×3Õ3Ð# |×3×3Ó3Ð#×3×3Ò3 |×3×3×3×3×3×3Ó3Ü	�‰”zÕ	"Ü�sÔ÷ 
#×	"Ñ	"ús   Å4F	Æ	Fc           	      ó$  ‡— t         j                  Šˆfd„}| j                  t         d|«       | j                  t         dd„ «       t        j                  t
        d¬«      5  t        j                  ddd	d
dd¬«       d d d «       y # 1 sw Y   y xY w)Nc                 óN   •—  ‰| ||«      }|j                  d«      dk(  rd|d<   |S )NrT   Úcurrentrƒ   rS   rª   )r&   r–   r’   r_   r	  s       €r(   rƒ   z;test_force_does_not_bypass_failed_incumbent.<locals>.failedš   s2   ø€ Ù�r˜6 5Ó)ˆØ�:‰:�hÓ 9Ò,Ø'/ˆCÐ#Ñ$Øˆ
r*   rµ   Úwrite_winnerc                  ó,   — t        j                  d«      S ©Nzmust not write©r‡   Úfail©Úargss    r(   r)   z=test_force_does_not_bypass_failed_incumbent.<locals>.<lambda>    ó   € ¼V¿[¹[ÐIYÔ=Zr*   zIncumbent replay©ÚmatchrŽ   r   r   é
   FT)Úforce_promote©rD   rµ   rF   r‡   rˆ   r‰   Úrun_tf)rH   rƒ   r	  s     @r(   Ú+test_force_does_not_bypass_failed_incumbentr/  ˜   si   ø€ Ü�~‰~€Hôð
 ×Ñœ˜z¨6Ô2Ø×Ñœ˜~Ñ/ZÔ[Ü	�‰”zÐ);Ö	<Ü�‰�T˜1˜a  U¸$Õ?÷ 
=×	<Ñ	<ús   Á!BÂBc                 ó(  ‡‡— t         j                  ŠdŠˆˆfd„}| j                  t         d|«       | j                  t         dd„ «       t        j                  t
        d¬«      5  t        j                  ddd	d
d«       d d d «       y # 1 sw Y   y xY w)Nr   c                 óh   •—  ‰| ||«      }|j                  d«      dk(  r‰dz  Š|dxx   ‰z  cc<   |S )NrT   r   r   rW   rª   )r&   r–   r’   r_   Úcountr	  s       €€r(   Úunstablez>test_run_tf_rejects_nonreproducing_incumbent.<locals>.unstable¨   s@   ø€ á�r˜6 5Ó)ˆØ�:‰:�hÓ 9Ò,Ø�Q‰JˆEØ�Ó 5Ñ(ÓØˆ
r*   rµ   r!  c                  ó,   — t        j                  d«      S r#  r$  r&  s    r(   r)   z>test_run_tf_rejects_nonreproducing_incumbent.<locals>.<lambda>°   r(  r*   znot reproducibler)  rŽ   r   r+  Fr-  )rH   r3  r2  r	  s     @@r(   Ú,test_run_tf_rejects_nonreproducing_incumbentr5  ¥   sl   ù€ Ü�~‰~€HØ€Eõð ×Ñœ˜z¨8Ô4Ø×Ñœ˜~Ñ/ZÔ[Ü	�‰”zÐ);Ö	<Ü�‰�T˜1˜a  UÔ+÷ 
=×	<Ñ	<ús   Á%BÂBc                  óÂ   — t        j                  d«      } d| d<   t        j                  t        d¬«      5  t        j
                  | «       d d d «       y # 1 sw Y   y xY w)NrŽ   rÉ   Ú!i_long_entry_activation_thresholdzNonfinite parameterr)  )rD   r³   r‡   rˆ   r‰   r´   )r-   s    r(   Ú.test_nonfinite_incumbent_parameter_is_rejectedr8  µ   sG   € Ü×Ñ˜tÓ$€FØ27€FÐ.Ñ/Ü	�‰”zÐ)>Ö	?Ü×Ñ˜fÔ%÷ 
@×	?Ñ	?ús   ¶AÁAc                 óð   ‡— | dz  Š‰j                  d«       |j                  t        dˆfd„«       t        j                  t
        d¬«      5  t        j                  d«       d d d «       y # 1 sw Y   y xY w)Nr!   zmlp_weights_file,Calmar Ratio
r+   c                 ó   •— ‰S r$   r%   )r&   rË   s    €r(   r)   z?test_existing_empty_winner_is_not_a_new_asset.<locals>.<lambda>¿   s   ø€ ¹r*   zno replayable rowr)  rŽ   )rA   rF   rD   r‡   rˆ   r‰   r³   )rG   rH   rË   s     @r(   Ú-test_existing_empty_winner_is_not_a_new_assetr;  ¼   sU   ø€ Ø�lÑ"€DØ‡O�OÐ5Ô6Ø×Ñœ˜}«oÔ>Ü	�‰”zÐ)<Ö	=Ü×Ñ˜$Ô÷ 
>×	=Ñ	=ús   ÁA,Á,A5zasset,start,status))r3   r	   rP   )ÚCOINBASE_ETHUSDz
2017-12-02r„   )r3   z
2020-01-01r„   )ÚBINANCE_SOLUSDú
2020-04-01rP   )ÚBINANCE_LINKUSDz
2019-01-01rP   )r=  z
2020-10-01r„   )r?  z
2021-01-01r„   c           
      óˆ
  — dd l }|j                  | «      }|j                  |j                  |j	                  |«      j                  «       k\     }|j                  | d¬«       |j                  t        d|«       t        j                  t        j                  d«      «      }t        j                  d|d   g«      }|j                  t        d|«       t        j                  d|i «      }	|	d   }
|
|k(  }|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}
}t+        j,                  |j.                  «      }|d   d   }
|j                  } ||«      }t1        |«      }|
|k(  }|�s_t        j                  d	|fd|
|f«      t        j                  |
«      dt!        j"                  «       v st        j$                  t0        «      rt        j                  t0        «      nd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œz  }dd|iz  }t'        t        j(                  |«      «      ‚d x}
x}x}x}}|d   d   }
t3        |«      }d}||z
  }|
|k(  }|�s
t        j                  d	|fd|
|f«      t        j                  |
«      dt!        j"                  «       v st        j$                  t2        «      rt        j                  t2        «      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}x}x}}|j5                  d «      rd!nd"}|d#   d$   d%   }
|
|k(  }|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}
}y )'Nr   Fr   r2   rŽ   r�   r4   rS   r�   )z%(py1)s == %(py3)sr‚   )r”   rf   rà   rh   Úobserved_coverager—   )zo%(py1)s == %(py11)s
{%(py11)s = %(py3)s(%(py9)s
{%(py9)s = %(py6)s
{%(py6)s = %(py4)s.Timestamp
}(%(py7)s)
})
}r0   rI   Ústart)r”   rf   rg   r†   ri   rk   rl   rë   rç   Úbarsr   )z<%(py1)s == (%(py6)s
{%(py6)s = %(py3)s(%(py4)s)
} - %(py8)s)r9   rL   )r”   rf   rg   r†   rj   zassert %(py11)srl   ÚBINANCEzbounded-available-historyzfull-score-windowr  Úhistory_coverageÚkindÚexpected_kind)r5   r  Úlocr   Ú	TimestampÚ	timestampr@   rF   rD   r´   r³   r²   rµ   rr   r¶   rt   rp   rq   rs   ru   rv   rB   r·   rš   r0   r9   Ú
startswith)rM   rH   r  rB  r‚   rI   rL   r–   r¹   r_   rÁ   rº   rø   rù   r  r»   Ú@py_assert8r{   r€   rÄ   rŠ   r~   r‹   rG  s                           r(   Ú"test_explicit_asset_history_boundsrM  Ä   sO  € ó Ø�K‰KÐ)Ó*€EØ�I‰I�e—j‘j B§L¡L°Ó$7×$AÑ$AÓ$CÑCÑD€EØ	‡L�LÐ"¨%€LÔ0Ø×Ñœ˜w¨Ô.Ü×"Ñ"¤5×#4Ñ#4°TÓ#:Ó;€FÜ×'Ñ'¨¨vÐ6HÑ/IÐ.JÓK€HØ×Ñœ˜}¨hÔ7Ü
�.‰.˜˜v rÓ
*€CØÐ"Ñ#Ð-Ð# vÑ-×-×-Õ-Ð# v×-×-Ó-Ð#×-×-×-×-×-Ð- v×-×-Ó- v×-×-×-×-×-×-Ó-Ü�z‰z˜(×0Ñ0Ó1€HØÐ'Ñ(¨Ñ1ÐM¸¿¹ÐM¹ÀeÓ9LÐM´SÐ9LÓ5MÐMÐ1Ð5MÑM×M×MÖMÐ1Ð5M×M×MÓMÐ1×M×M×M×M×MÐM´S×M×MÓM´S×M×M×M×M×MÒM¸×M×MÓM¸×M×MÔM¸×M×M×M×M×MÐMÀe×M×MÓMÀe×M×MÔMÐ9L×M×MÒMÐ5M×M×M×M×M×M×M×MØÐ'Ñ(¨Ñ0ÐB´C¸³JÐBÀÐB°JÀ±NÐBÐ0°NÑB×B×BÖBÐ0°N×B×BÓBÐ0×B×B×B×B×BÐB´C×B×BÓB´C×B×B×B×B×BÒB¸×B×BÓB¸×B×BÔB°J×B×BÒBÀ×B×B×B×B×B×B×BØ38×3CÑ3CÀIÔ3NÑ/ÐTg€MØ�JÑÐ 2Ñ3°FÑ;ÐLÐ;¸}ÑL×L×LÕLÐ;¸}×L×LÓLÐ;×L×L×L×L×LÐL¸}×L×LÓL¸}×L×L×L×L×L×LÔLr*   Úendz
2026-02-27z2026-03-01 06:00c           	      ó&  — dd l }|j                  | «      }|j                  |j                  |j	                  d«      j                  «       k\  |j                  |j	                  |«      j                  «       k  z     }|j                  | d¬«       |j                  t        dd«       t        j                  t        j                  d«      «      }|j                  t        dt        j                  d|d	   g«      «       t        j                  d|i «      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}}y )Nr   r>  Fr   r2   r=  rŽ   r4   r�   rS   r„   r�   r  r�   rž   r†   )r5   r  rH  r   rI  rJ  r@   rF   rD   r´   r³   r²   rµ   rr   r¶   rt   ru   rv   )rM   rH   rN  rI   rL   r–   rÁ   r¾   rº   rÂ   r¼   s              r(   Ú6test_short_history_still_requires_training_end_and_oosrP  ß   s+  € ãØ�K‰KÐ)Ó*€EØ�I‰I�u—z‘z R§\¡\°,Ó%?×%IÑ%IÓ%KÑKØ—z‘z R§\¡\°#Ó%6×%@Ñ%@Ó%BÑBñDñ E€Eà	‡L�LÐ"¨%€LÔ0Ø×Ñœ˜wÐ(8Ô9Ü×"Ñ"¤5×#4Ñ#4°TÓ#:Ó;€FØ×Ñœ˜}¬e×.FÑ.FÀtÈfÐUgÑNhÐMiÓ.jÔkÜ�>‰>˜$ ¨Ó+Ð,?Ñ@ÐPÀLÐPÐ@ÀLÑP×P×PÕPÐ@ÀL×P×PÓPÐ@×P×PÒPÀL×P×P×P×P×P×PÔPr*   c                 ó¬  ‡‡— dd l m} |j                  Šg Šdˆˆfd„	}| j                  |d|«       t	        j
                  t	        j                  d«      «      }| j                  t        dt	        j                  d|d   g«      «       t	        j                  d|i «      }t        ‰«      }t        j                  }t        |«      }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                   |«      d
t        j                  «       v st        j                  t        «      rt        j                   t        «      nd
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}}	d„ t'        j(                  |d   «      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}}y )Nr   c                 óp   •— ‰j                  || j                  j                  «       f«        ‰| ||¬«      S )N)rB  rN  )ró   r   rä   )ÚsignalsrB  rN  ÚcallsÚreals      €€r(   Úmeasuredz1test_each_window_accounted_once.<locals>.measuredð   s0   ø€ Ø�‰�e˜WŸ\™\×-Ñ-Ó/Ð0Ô1Ù�G 5¨cÔ2Ð2r*   Úwindow_metricsrŽ   r4   r�   r    r�   r¡   r9   rT  rD   r£   r¤   r¥   c              3   ó$   K  — | ]  }d |v –— Œ
 y­w)Úpnl_pctNr%   )r¬   Úps     r(   r®   z2test_each_window_accounted_once.<locals>.<genexpr>ø   s   è ø€ ÐNÑ'M !ˆy˜AŒ~Ñ'Mùs   ‚rŸ   r¯   r°   r±   )NN)Ústrategies.mlp_accountingÚmlp_accountingrW  rF   rD   r´   r³   r²   rµ   r9   r¸   rr   r¶   rp   rq   rs   rt   ru   rv   rB   r·   r°   )rH   Ú
accountingrV  r–   r_   rº   rŠ   r~   r   rÃ   rz   rÄ   rÅ   rw   r¾   rÂ   rT  rU  s                   @@r(   Útest_each_window_accounted_oncer^  ì   s÷  ù€ Ý2Ø×$Ñ$€DØ€Eö3ð ×Ñ˜
Ð$4°hÔ?Ü×"Ñ"¤5×#4Ñ#4°TÓ#:Ó;€FØ×Ñœ˜}¬e×.FÑ.FÀtÈfÐUgÑNhÐMiÓ.jÔkÜ
�.‰.˜˜v rÓ
*€CÜˆu‹:Ð1œUŸ_™_Ð1œ˜_Ó-Ð1°Ð1Ð-°Ñ1Ð1ˆ:Ð1Ñ1×1×1Ö1ˆ:Ð1×1×1×1×1×1Ñ1Œ3×1×1Ó1Œ3×1×1×1×1×1Ò1ˆu×1×1Ó1ˆu×1×1Ô1ˆ:×1×1×1×1×1Ð1œ×1×1Ó1œ×1×1×1×1×1Ò1œU×1×1Ó1œU×1×1Ô1˜_×1×1Ò1Ð-×1×1Ò1°×1×1×1×1×1×1×1Ñ1ÙN¤t§z¡z°#Ð6KÑ2LÔ'MÓNÐNŒ3ÐNÓNÐNÑN×N×N×N×NÕNŒ3×N×NÓNŒ3×N×NÔNÐN×N×NÒNÐN×N×N×N×N×NÓNr*   )'Úbuiltinsrp   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterr   rB   Úcollectionsr   Údataclassesr   Únumpyr7   r‡   Ústrategies.mlp_comparisonr   r   Útools.run_mlp_deep_sweepÚrun_mlp_deep_sweeprD   ÚfixturerM   r`   r�   ÚmarkÚparametrizerŒ   rÆ   rÍ   r  r  r  r/  r5  r8  r;  rM  rP  r^  r%   r*   r(   Ú<module>rl     s  ðß  „ ƒÝ Ý ã Û ç HÝ (ð €‡�˜Ôñó ðò.òRð ‡�×Ñ˜ H¨lÐ#;Ó<ñ"ó =ð"ò_ò$aòOò,Bò,ò
@ò,ò &ò ð ‡�×ÑÐ-ò 0ó ñMóðMð$ ‡�×Ñ˜ Ð/AÐ BÓCñ	Qó Dð	QóOr*   