Ë
    ÁS±j¬9  ã                  óÜ  — d Z ddlmZ ddlZddlZddlZddlZddlZddl	m
Z
 ddlZddlZddlZddlZddlZddlZ e
e«      j)                  «       j*                  d   Zej.                  j1                  d ee«      «       ddlmZmZ ddlmZ ddl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+ d
Z,dZ-dZ. e/dddddd¬«      Z0edz  Z1d„ Z2d„ Z3d„ Z4d„ Z5d„ Z6d-d„Z7d„ Z8d„ Z9d„ Z:d„ Z;d„ Z<d„ Z=d „ Z>d!„ Z?d"„ Z@eAd#k(  ru ej„                  e ¬$«      ZCeCj‰                  d% eed&z  «      ¬'«       eCj‰                  d( eed)z  «      ¬'«       eCj‰                  d*d+¬,«        e@eCj‹                  «       «       yy).zPIsolated, preregistered BTC4H chronological pipeline comparison; never promotes.é    )ÚannotationsN)ÚPathé   )Únet_returnsÚwindow_metrics)Ú_prepare_features)ÚFEATURE_COLSÚ_score_to_signalsÚmlp_forwardÚsave_mlp_artifactÚload_mlp_artifact)Úbuild_targetÚpretrainÚflatten_layersÚunflatten_layersÚrun_cmaÚTHRESHOLD_SCALE)ée   éÊ   )Ú	expandingÚ
three_yearÚ	five_year)iç  iè  ié  iê  é   é<   é   é€   i  )ÚfitsÚepochsÚgenerationsÚ
populationÚ
thresholdsÚtimeout_secondsz3docs/mlp_pipeline_comparison_protocol_2026_09_21.mdc                óv   — t        j                  t        | «      j                  «       «      j	                  «       S ©N)ÚhashlibÚsha256r   Ú
read_bytesÚ	hexdigest)Úpaths    úL/Users/jameslopez/projects/TradingBot25/tools/run_mlp_pipeline_comparison.pyÚdigestr+       s'   € Ü�>‰>œ$˜t›*×/Ñ/Ó1Ó2×<Ñ<Ó>Ð>ó    c                ó²   — t        | «      } | j                  j                  dd¬«       | j                  t	        j
                  |dt        d¬«      dz   «       y )NT©ÚparentsÚexist_oké   F)ÚindentÚdefaultÚ	allow_nanÚ
)r   ÚparentÚmkdirÚ
write_textÚjsonÚdumpsÚstr)r)   Úvalues     r*   Ú
write_jsonr=   $   sC   € Ü�‹:€DØ‡K�K×Ñ˜d¨TÐÔ2Ø‡O�O”D—J‘J˜u¨Q¼ÀuÔMÐPTÑTÕUr,   c                ó  — t        j                  | dd¬«      }|dk(  rt        j                  d«      n|t        j                  |dk(  rdnd¬«      z
  }t        |||t        j                  d¬«      z   |t        j                  d	¬
«      z
  |t        j                  d¬
«      z
  |t        j                  d¬
«      z
  |t        j                  d¬
«      z
  f|t        j                  d¬
«      z
  |t        j                  d	¬
«      z
  fg¬«      S )Nr   )ÚyearÚmonthÚdayr   ú
2017-12-01r   é   é   )Úyearsé   )Úmonthsé	   é   é   )ÚstartÚoriginÚendÚcalibrationÚ
validationÚfolds)ÚpdÚ	TimestampÚ
DateOffsetÚdict)r?   ÚarmrL   rK   s       r*   Ú
split_planrV   *   sÞ   € Ü�\‰\˜t¨1°!Ô4€FØ*-°Ò*<ŒB�L‰L˜Ô&À&Ì2Ï=É=ÐdgÐkwÒdwÑ_`Ð}~ÔKÑB€EÜ�e F°¼¿¹ÈQÔ9OÑ0OØ"¤R§]¡]¸!Ô%<Ñ<ÈÔRT×R_ÑR_ÐghÔRiÑIiØ¤§¡°bÔ!9Ñ9¸6ÄBÇMÁMÐY[ÔD\Ñ;\Ð]Ø¤§¡°bÔ!9Ñ9¸6ÄBÇMÁMÐYZÔD[Ñ;[Ð\ð^ô_ð _r,   c                ó:  — t        j                  | «      }|j                  j                  j	                  «       j                  j                  «       |_        |j                  j                  «       j                  «       rt        d«      ‚t         j                  j                  j                  |j                  «      r;t        j                  |j                  dd¬«      j                  j                  d «      n9t        j                  |j                  d¬«      j                  j                  d «      |d<   t        |j                  j                   d   «      }|j                   d d j#                  «       j%                  d¬«      }d	d
gt&        ¢}t)        t+        |«      t+        |j                  «      z
  «      }|rt        d|› �«      ‚|j                  j-                  «       j                  «       s>|j                  j.                  r(|j                  j                  «       j                  «       rt        d«      ‚t1        j2                  ||   j5                  t6        ¬«      «      j9                  d¬«      }|j                  «       st        d«      ‚|j                   t1        j:                  |«      d   d  j%                  d¬«      }t1        j2                  ||   j5                  t6        ¬«      «      j9                  «       r&|d	d
g   dk  j                  «       j                  «       rt        d«      ‚|j                  j                   d   t        j<                  d«      kD  s/|j                  j                   d   t        j<                  d«      k  rt        d«      ‚||fS )NzDuplicate CSV columnsÚsT)ÚunitÚutc)rZ   Útimeéÿÿÿÿ©ÚdropÚcloseÚhighzMissing feature/price columns: zInvalid timestamps©Údtyper   )ÚaxiszNo finite rowsr   z+Nonfinite interior feature or invalid pricerB   z
2026-01-02z Insufficient historical coverage)rQ   Úread_csvÚcolumnsr;   ÚlowerÚstripÚ
duplicatedÚanyÚ
ValueErrorÚapiÚtypesÚis_numeric_dtyper[   Úto_datetimeÚdtÚtz_localizeÚilocÚcopyÚreset_indexr	   ÚsortedÚsetÚisnaÚis_monotonic_increasingÚnpÚisfiniteÚto_numpyÚfloatÚallÚflatnonzerorR   )r)   ÚdfÚdroppedÚrequiredÚmissingÚfinites         r*   Úload_inputsrƒ   3   så  € Ü	�‰�TÓ	€BØ—‘—‘×%Ñ%Ó'×+Ñ+×1Ñ1Ó3€B„JØ	‡z�z×ÑÓ×"Ñ"Ô$ÜÐ0Ó1Ð1ÜUW×U[ÑU[×UaÑUa×UrÑUrÐsu×szÑszÔU{”—‘ §¡¨c°tÔ<×?Ñ?×KÑKÈDÔQô  BD÷  BPñ  BPð  QS÷  QXñ  QXð  ^bô  Bc÷  Bfñ  Bf÷  Brñ  Brð  swó  Bx€B€v�JÜ�"—'‘'—,‘,˜rÑ"Ó#€GØ	�‰��"ˆ×	Ñ	Ó	×	(Ñ	(¨dÐ	(Ó	3€BØ˜Ð/¤,Ð/€HÜ”S˜“]¤S¨¯©£_Ñ4Ó5€GÙÜÐ:¸7¸)ÐDÓEÐEØ	‡w�w‡|�|ƒ~×ÑÔ 2§7¡7×#BÒ#BÀbÇgÁg×FXÑFXÓFZ×F^ÑF^ÔF`ÜÐ-Ó.Ð.Ü�[‰[˜˜H™×.Ñ.´UÐ.Ó;Ó<×@Ñ@ÀaÐ@ÓH€FØ�:‰:Œ<ÜÐ)Ó*Ð*Ø	�‰”—‘ Ó'¨Ñ*Ð+Ð	,×	8Ñ	8¸dÐ	8Ó	C€BÜ�;‰;�r˜(‘|×,Ñ,´5Ð,Ó9Ó:×>Ñ>Ô@ÀRÈÐRXÐHYÑEZÐ^_ÑE_×DdÑDdÓDf×DjÑDjÔDlÜÐFÓGÐGØ	‡w�w‡|�|�A�œŸ™ lÓ3Ò3°r·w±w·|±|ÀBÑ7GÌ"Ï,É,ÐWcÓJdÒ7dÜÐ;Ó<Ð<Øˆwˆ;Ðr,   c                ó    — t        t        | d   «      t        | d   «      t        | d   «      t        | d   «      ddddddt        |«      ¬«      S )Nr   r   r1   rC   TF)Ú!i_long_entry_activation_thresholdÚ i_long_exit_activation_thresholdÚ-i_long_exit_activation_confirmation_thresholdÚi_trailing_stop_thresholdÚi_use_long_exit_confirmationÚi_use_long_entry_confirmationÚi_exit_score_windowÚi_entry_score_windowÚi_mvrv_suppress_bearÚi_regime_windowÚ_pine_time_start)rT   r{   r;   )r!   rK   s     r*   Ú
params_forr�   L   sW   € Ü´%¸
À1¹Ó2FÜ16°zÀ!±}Ó1EÜ>CÀJÈqÁMÓ>RÜ*/°
¸1±Ó*>Ø-1ÐQVØ$%¸AÐTYØ !´C¸³Jô@ð @r,   c           	     ó>  — | j                  «       }t        |t        «      }t        ||«      |d<   |€t	        ||«      ni |¥dt        |«      i¥}t        |||d d …df   |j                  j                  t        «      |j                  j                  t        «      «      S )NÚactivation_scorer�   rH   )rr   r   r	   r   r�   r;   r
   r_   rz   r{   r`   )ÚframeÚlayersr!   rK   ÚparamsÚdÚXÚps           r*   Úsignals_forr™   V   sŠ   € Ø�
‰
‹€AÜ˜!œ\Ó*€AÜ'¨¨6Ó2€AÐÑØ)/¨Œ
�:˜uÔ%Ð=gÀÐ=gÐHZÔ\_Ð`eÓ\fÑ=g€AÜ˜Q  1¢Q¨ T¡7¨A¯G©G×,<Ñ,<¼UÓ,CÀQÇVÁVÇ_Á_ÔUZÓE[Ó\Ð\r,   c                ór   — t        | |t        j                  |«      t        j                  d¬«      z
  ¬«      S )Nr   )Únanoseconds)rK   rM   )r   rQ   rR   Ú	Timedelta)ÚsignalsrK   rM   s      r*   Úmeasuredrž   ^   s)   € Ü˜'¨´B·L±LÀÓ4EÌÏÉÐabÔHcÑ4cÔdÐdr,   c                ó,   — | d   �| d   nd| d   | d   fS )NÚcalmarç        Úpnl_pctÚdd_pct© )Úmetricss    r*   Úselection_rankr¦   b   s-   € Ø!(¨Ñ!2Ð!>ˆG�HÒÀBÈÐPYÑHZÐ\cÐdlÑ\mÐnÐnr,   c              #  ó–  K  — t         j                  j                  d«      }t        j                  | t        ¬«      –— t        t        d   dz
  «      D ]q  }t        j                  |j                  dd«      |j                  dd«      |j                  dd«      |j                  t        j                  d	d
d«      «      g«      –— Œs y ­w)Ni9(5ra   r!   r   i¨ýÿÿiX  iýÿÿiî  r   é2   rD   )rx   ÚrandomÚdefault_rngÚasarrayr{   ÚrangeÚBUDGETÚarrayÚuniformÚchoiceÚarange)ÚrecommendedÚrngÚ_s      r*   Úthreshold_candidatesrµ   f   s§   è ø€ Ü
�)‰)×
Ñ
 Ó
)€CÜ
�*‰*�[¬Ô
.Ò.Ü”6˜,Ñ'¨!Ñ+Ö,ˆÜ�h‰h˜Ÿ™ D¨#Ó.°·±¸DÀ#Ó0FÈÏÉÐTXÐZ]ÓH^Ð`c×`jÑ`jÔkm×ktÑktÐuvÐxzÐ|}Ók~Ó`ð  Aó  Bó  	Bñ -ùs   ‚CC	c                óR  ‡‡‡‡‡— | | j                   ‰d   k\  | j                   ‰d   k  z     j                  d¬«      Št        ‰t        «      }t	        ‰d«      \  }}d„ }t        |||‰j                   ddgt        d	   |‰d
   ‰j                   j                  d   |dd¬«      \  }}	t        t        «      dddgŠt        |«      Št        ||«      }
t        j                  t        j                  |
g d¢«      df   }t        j                  ‰|t        z  f   }dgŠˆˆˆˆˆfd„}t        ||dt        d   t        d   ||d¬«      }t!        |d   d t        ‰«       ‰«      }|d|› d�z  }‰d   t        d   t        d   z  k(  rdnd}t#        t%        |«      |ddt        t'        ||	t)        ‰«      d‰d   |¬«      ¬«       | | j                   ‰d   k\  | j                   ‰d    k  z     j+                  «       }g }t-        t/        |d!   «      «      D ]S  \  }}t1        t3        |||‰d   «      ‰d   ‰d    «      }|j5                  t'        |||j7                  «       |¬"«      «       ŒU t9        |d#|› d�z  |«       t;        |d$„ ¬%«      }i |¥t%        |«      t=        |«      ‰d   ||	d&   d'œ¥S )(NrK   rN   Tr]   é
   c                ó   — t        | d¬«      S )NT)Úflush)Úprint)Úmessages    r*   Ú<lambda>zfit_seed.<locals>.<lambda>q   s   € œ% ¨tÕ4r,   é   r   r   rO   r\   Úcpu)Útarget_horizonÚdevice_overrider   )r   éK   é   r¡   r   c                óD  •— ‰
dxx   dz  cc<   t        | d t        ‰«       ‰	«      }t        j                  | t        ‰«      d  t        z  g d¢g d¢«      }g }‰d   D ]K  \  }}t        ‰‰j                  |k     |||«      }t        |||«      }|j                  |d   �|d   nd«       ŒM t        t        j                  |«      «       dt        t        j                  | d t        ‰«       ‰z
  d	z  «      «      z  z   }t        j                  |«      st        d
«      ‚|||fS )Nr   r   )é|üÿÿrÄ   rÄ   r   )é„  rÅ   rÅ   rÂ   rP   r    r¡   gü©ñÒMbP?r1   zNonfinite fitting objective)r   Úlenrx   Úclipr   r™   r[   rž   Úappendr{   Úmeanry   rj   )ÚthetaÚfittedÚthrÚvaluesrK   rM   ÚsigÚmetricÚ	objectiveÚarchÚcallsÚfitÚplanÚtheta_ws            €€€€€r*   Úfitnesszfit_seed.<locals>.fitness{   s  ø€ Øˆa‹�A‰‹Ü! %¨¬¨W«Ð"6¸Ó=ˆÜ�g‰g�eœC ›L˜MÐ*¬_Ñ<Ò>SÒUhÓiˆØˆØ˜wœ-‰JˆE�3Ü˜c #§(¡(¨S¡.Ñ1°6¸3ÀÓFˆCÜ˜c 5¨#Ó.ˆFØ�M‰M¨f°XÑ.>Ð.J˜& Ò*ÐPRÕSð (ô œ2Ÿ7™7 6›?Ó+Ð+¨d´U¼2¿7¹7ÀEÈ-Ì3ÈwË<ÐDXÐ[bÑDbÐghÑChÓ;iÓ5jÑ.jÑjˆ	Ü�{‰{˜9Ô%ÜÐ:Ó;Ð;Ø˜& #Ð%Ð%r,   gš™™™™™©?r    r   )ÚworkersrÊ   Úseedz.jsonÚgeneration_budgetÚcma_convergenceÚCOINBASE_BTCUSDÚ4H)rØ   Úphase1ÚsplitsÚtarget_kÚcma_evaluationsÚcma_stop_reason)ÚassetÚ	timeframeÚfeature_colsÚtrainingrL   rÌ   )rØ   Úindexr!   r¥   Úcalibration_seedc                ó   — t        | d   «      S ©Nr¥   ©r¦   ©Úrows    r*   r¼   zfit_seed.<locals>.<lambda>•   s   € ¤~°c¸)±nÔ'Er,   ©ÚkeyÚ
epochs_run)Úartifactr&   rà   rá   r   )r[   rs   r   r	   r   r   r­   rq   rÆ   r   r   rx   Úr_Ú
percentiler   r   r   r   r;   rT   Úserial_planrr   Ú	enumeraterµ   rž   r™   rÈ   Útolistr=   Úmaxr+   )r“   rÔ   rØ   Úoutr—   ÚyÚvalidÚlogr”   ÚmetaÚscoresr!   Útheta0rÖ   Úbestrð   Ústop_reasonÚcalibration_frameÚrowsræ   rÌ   r¥   ÚchosenrÑ   rÒ   rÓ   rÕ   s    `                     @@@@r*   Úfit_seedr  m   sí  ü€ Ø
�—‘˜t G™}Ñ,°·±¸dÀ=Ñ>QÑ1QÑRÑ
S×
_Ñ
_ÐeiÐ
_Ó
j€CÜ˜#œ|Ó,€AÜ˜C Ó$�H€A€uÙ
4€CÜ˜A˜q %¨¯©°B¸°7¼FÀ8Ñ<LÈdØ Ñ-¨s¯x©x¯}©}¸RÑ/@À#ÐVXÐjoôq�L€FˆDä”Ó˜r 1 aÐ(€DÜ˜VÓ$€GÜ˜˜FÓ#€FÜ—‘”r—}‘} Vª\Ó:¸BÐ>Ñ?€JÜ�U‰U�7˜J¬Ñ8Ð8Ñ9€FØˆC€E÷&ð &ô �7˜F C¬°Ñ)=¼vÀmÑ?TÐVZÐ\_ÐijÔk€DÜ˜d 7™m¨M¬S°«\Ð:¸DÓA€FØ�t˜D˜6 Ð'Ñ'€HØ).¨q©´V¸MÑ5JÌVÐT`ÑMaÑ5aÒ)aÑ%Ðgx€KÜ”c˜(“m VÐ3DÐPTÔcoÜ#¨°dÄ;ÈtÓCTÐ_aÐsxÐyzÑs{ð  NYô   Zõ[à˜uŸz™z¨T°'©]Ñ:¸u¿z¹zÈDÐQYÉNÑ?ZÑ[Ñ\×aÑaÓcÐØ€DÜÔ 4°T¸%±[Ó AÖB‰
ˆˆsÜœ;Ð'8¸&À#ÀtÈMÑGZÓ[Ð]aÐboÑ]pÐrvÐwñ  sAó  BˆØ�‰”D˜d¨%¸C¿J¹J»LÐRYÔZÕ[ð Cô ˆsÐ'¨ v¨UÐ3Ñ3°TÔ:Ü�ÑEÔF€Fð hˆfð  h¤# h£-¼6À(Ó;KÐ`eÐfgÑ`hð  ~Ið  UYð  Zfñ  Ugò  hð  hr,   c                óÜ   — | j                  «       D ����ci c]?  \  }}||dk(  r)|D ��cg c]  \  }}t        |«      t        |«      g‘Œ c}}n
t        |«      “ŒA c}}}}S c c}}w c c}}}}w )NrP   )Úitemsr;   )rÔ   rî   r<   ÚaÚbs        r*   ró   ró   ™   sa   € Øjn×jtÑjtÔjvÖwÑjvÑ\fÐ\_ÐafˆC¸Àº©uÔ5©u¡t q¨!”3�q“6œ3˜q›6Ò"¨uÓ5ÌSÐQVËZÑWÐjvÔwÐwùÓ5ùÕws   –A&
© A Á	A&
Á A&
c                ó<  — t        |d„ ¬«      }t        ||t        |«      t        t        «      ¬«      }t        | |«       t        t        | «      dz   «      j                  t        | «      dz   «       t        j                  t        | «      j                  «       «      S )Nc                ó   — t        | d   «      S ré   rê   rë   s    r*   r¼   z"freeze_selection.<locals>.<lambda>ž   s   € ¬^¸CÀ	¹NÔ-Kr,   rí   )ÚselectedÚ
candidatesrÞ   Úprotocol_sha256ú.sha256r5   )rö   rT   ró   r+   ÚPROTOCOLr=   r   r;   r8   r9   ÚloadsÚ	read_text)r)   r  rÔ   r  Úpayloads        r*   Úfreeze_selectionr  �   sv   € Ü�Ñ!KÔL€FÜ˜F¨zÄ+ÈdÓBSÔekÔltÓeuÔv€GÜˆt�WÔÜŒˆT‹�YÑ	Ó×*Ñ*¬6°$«<¸$Ñ+>Ô?Ü�:‰:”d˜4“j×*Ñ*Ó,Ó-Ð-r,   c                óÀ  — | j                  «       }|j                  |k\  }|dk(  rá|j                  d«      j                  j	                  d«      j                  «       }||j                  dd¬«      j                  «       kD  j                  d«      j                  d«      }|j                  j                  j                  «       j                  |«      j                  d«      j                  t        «      |j                  «       z  }n|j                  «       |dk(  z  }t        j                   d|d d	 f   }|j#                  t$        «      |d
<   || z  |d<   | |z  |d<   |S )NÚtrendr[   Ú1DéÈ   )Úmin_periodsr   FÚbuy_holdr\   ÚpositionÚexecute_entryÚexecute_exit)rr   r[   Ú	set_indexr_   ÚresampleÚlastÚrollingrÉ   ÚshiftÚfillnaro   Ú	normalizeÚmaprz   Úboolrx   rñ   ÚastypeÚint)	r“   rK   Úkindr–   ÚeligibleÚdailyr  ÚdesiredÚpriors	            r*   Úbaseline_signalsr,  ¥   s0  € Ø�
‰
‹€AØ�v‰v˜‰€HØˆw‚Ø—‘˜FÓ#×)Ñ)×2Ñ2°4Ó8×=Ñ=Ó?ˆØ˜Ÿ™ s¸˜Ó<×AÑAÓCÑC×JÑJÈ1ÓM×TÑTÐUZÓ[ˆØ—&‘&—)‘)×%Ñ%Ó'×+Ñ+¨EÓ2×9Ñ9¸%Ó@×IÑIÌ$ÓOÐRZ×RcÑRcÓReÑe‰à×#Ñ#Ó%¨°Ñ);Ñ<ˆÜ�E‰E�%˜  "˜Ð%Ñ&€EØ—N‘N¤3Ó'€A€j�MØ  E 6Ñ)€A€oÑØ ˜ 5Ñ(€A€nÑØ€Hr,   c                ó  — t        | «      }| j                  |k\  | j                  |k  z  }t        j                  ||   j	                  «       | j
                  |df   ¬«      }d|z   j                  d«      j                  «       dz
  S )Nr[   ©ræ   r   r  )r   r[   rQ   ÚSeriesrz   Úlocr  Úprod)r�   rK   rM   rÍ   ÚmaskrX   s         r*   Údaily_returnsr3  µ   su   € Ü˜Ó!€FØ�L‰L˜EÑ! g§l¡l°SÑ&8Ñ9€DÜ
�	‰	�&˜‘,×'Ñ'Ó)°·±¸TÀ6¸\Ñ1JÔK€AØ�‰E×Ñ˜DÓ!×&Ñ&Ó(¨1Ñ,Ð,r,   c                ó  — t        | j                  «      }|j                  «       r$t        |j	                  «       «      rt        d«      ‚|j                  dd¬«       t        | j                  «      \  }}dd l	}|j                  d«       |j                  d«       i }dD ]›  }t        j                  t        j                  t!        t"        dz  |z  «      gt"        dd¬«      }t%        |j&                  |j(                  |j*                  ¬	«      ||<   t-        |d
z  |«       |j&                  sŒŽt        d|› d�«      ‚ g d¢}t%        t!        | j                  «      t/        | j                  «      t/        t0        «      |D �	ci c]  }	|	t/        t"        |	z  «      “Œ c}	t%        t        j2                  t5        j4                  «       dddD �	ci c]"  }	|	t6        j8                  j3                  |	«      “Œ$ c}	¬«      t:        t<        t>        t@        tB        tE        |«      t!        |jF                  jH                  d   «      t!        |jF                  jH                  d   «      |tB        D �
�cg c]-  }
t@        D ]"  }t%        d>d|itK        tM        |
|«      «      ¤Ž‘Œ$ Œ/ c}}
¬«      }t-        |dz  |«       | jN                  rtQ        d«       y tG        jR                  «       }d„ }tU        jT                  tT        jV                  |«      }tU        jX                  t<        d   «       g i }}	 g }tB        D ]Š  }
t@        D ]  }tM        |
|«      }||
› d|› �z  }|j                  d¬«       t>        D �cg c]#  }t[        ||jF                  |d   k     |||«      ‘Œ% }}|j]                  |
||t_        |dz  ||«      f«       Œ� ŒŒ ta        jb                  t"        dz  «      jH                  d   je                  «       }t"        |d   z  }tg        t!        |«      «      }|d   t:        k7  rt        d«      ‚t-        |d z  t%        |t!        |«      t/        |«      d!¬"«      «       |D �]Í  \  }
}}}||
› d|› �z  dz  }t/        |«      t        t!        |«      d#z   «      ji                  «       jk                  «       k7  rt        d$«      ‚t        d%„ |d&   jm                  «       D «       «      rt        d'«      ‚|d(   }t/        |d)   «      |d*   k7  rt        d+«      ‚||jF                  |d,   k     jo                  «       }tg        |d)   «      d-   }tq        |||d.   |d   «      }|j]                  t%        d>|
|d/œts        ||d   |d,   «      ¤Ž«       tu        ||d   |d,   «      ||
› d|› �<   |t@        d   k(  s�ŒQd0D ]x  }	|	d1k(  rtq        ||d-   |d.   |d   |«      ntw        ||d   |	«      } |j]                  t%        d>|
|	d/œts        | |d   |d,   «      ¤Ž«       tu        | |d   |d,   «      ||
› d|	› �<   Œz �ŒÐ t-        |d2z  t%        d3tG        jR                  «       |z
  |¬4«      «       ta        jx                  |«      j{                  |d5z  d6¬7«       ta        jx                  |«      j{                  |d8z  d9¬:«       	 tU        jX                  d«       tU        jT                  tT        jV                  |«       y c c}	w c c}	w c c}}
w c c}w # t|        $ r?}!t-        |d;z  t%        d<t!        |!«      tG        jR                  «       |z
  ¬=«      «       ‚ d }!~!ww xY w# tU        jX                  d«       tU        jT                  tT        jV                  |«       w xY w)?NzGRefusing to overwrite nonempty experiment directory; choose a new --outTr.   r   r   )zsync_params.pyzcheck_pine.pyzvalidate_chart_data.pyÚtools)ÚcwdÚcapture_outputÚtext)Ú
returncodeÚstdoutÚstderrz
gates.jsonzStartup gate failed: z; see gates.json)z	config.pyz$tools/run_mlp_pipeline_comparison.pyztools/train_mlp.pyzstrategies/mlp_accounting.pyz!strategies/strategy_mlp_scores.pyz(strategies/strategy_activation_scores.pyr¾   )ÚnumpyÚpandasÚtorchÚcma)ÚpythonÚplatformÚdeviceÚdeterministic_algorithmsÚversionsr\   rU   )ÚdataÚdata_sha256r  Úcode_hashesÚenvironmenträ   ÚbudgetÚseedsÚarmsrE   r  Úfirstr  Údropped_final_rowÚplanszinput_manifest.jsonzHInput and chronological budget validation passed; no training performed.c                 ó   — t        d«      ‚)Nz9Preregistered30-minute whole-comparison deadline exceeded)ÚTimeoutError)r´   s    r*   Útimeoutzrun.<locals>.timeoutÚ   s   € ÜÐVÓWÐWr,   r"   r´   )r0   rL   zselection.jsonzNresults/winners/optimization_winner_strategy_mlp_scores_COINBASE_BTCUSD_4H.csvÚmlp_weights_filerä   z(Incumbent schema differs from experimentzincumbent_reference.jsonzhindsight-selected)r•   rð   r&   Úlabelr  zFrozen selection changedc              3  óL   K  — | ]  \  }}t        t        |z  «      |k7  –— Œ y ­wr$   )r+   ÚROOT)Ú.0Únamer<   s      r*   Ú	<genexpr>zrun.<locals>.<genexpr>ó   s%   è ø€ ÐcÑCb±K°D¸%”6œ$ ™+Ó&¨%Õ/ÑCbùs   ‚"$rG  z%Source code changed during experimentr
  rð   r&   zFrozen artifact changedrM   r”   r!   )r?   rU   )Úcashr  r  Úincumbent_hindsightrZ  zresults.jsonÚcomplete)ÚstatusÚruntime_secondsr  zresults.csvFr.  zdaily_returns.csvÚdate)Úindex_labelzstatus.jsonÚfailed)r\  Úreasonr]  r¤   )?r   r÷   Úexistsri   Úiterdirrj   r7   rƒ   rE  r>  Úset_num_threadsÚuse_deterministic_algorithmsÚ
subprocessÚrunÚsysÚ
executabler;   rU  rT   r9  r:  r;  r=   r+   r  ÚversionrA  Ú	importlibÚmetadatar	   r­   ÚSEEDSÚARMSÚYEARSrÆ   r[   rq   ró   rV   Úvalidate_onlyrº   Ú	monotonicÚsignalÚSIGALRMÚalarmr  rÈ   r  rQ   rd   Úto_dictr   r  rg   r  rr   r™   rž   r3  r,  Ú	DataFrameÚto_csvÚ	Exception)"Úargsr÷   r~   r   r>  ÚgatesÚscriptÚresultÚcoderW  r?   rU   ÚmanifestÚstart_clockrQ  Úold_handlerr  ÚreturnsÚfrozenrÔ   ÚcellrØ   r  ÚwinnerÚincumbent_pathÚ	incumbentÚfreezeÚselection_pathr  r“   r”   rÎ   ÚbaseÚexcs"                                     r*   rg  rg  ¼   s  € Ü
ˆt�x‰x‹.€CØ
‡z�z„|œ˜CŸK™K›MÔ*ÜÐbÓcÐcØ‡I�I�d T€IÔ*Ü˜dŸi™iÓ(�K€BˆÛØ	×Ñ˜!ÔØ	×&Ñ& tÔ,Ø€EÛOˆÜ—‘¤§¡´´T¸G±^ÀfÑ5LÓ1MÐ NÔTXÐimÐtxÔyˆÜ¨×(9Ñ(9À&Ç-Á-ÐX^×XeÑXeÔfˆˆf‰Ü�3˜Ñ% uÔ-Ø×ÓÜÐ4°V°HÐ<LÐMÓNÐNð Pò}€Däœ˜TŸY™Y›´V¸D¿I¹IÓ5FÔX^Ô_gÓXhÙGKÓ LÁt¸t ¤v¬d°T©kÓ':Ñ!:ÀtÑ LÜ $¬C¯K©KÄ(×BSÑBSÓBUÐ^cð  Cñ cFó  /Gñ  cFÐZ^¨t´Y×5GÑ5G×5OÑ5OÐPTÓ5UÑ/Uð  cFñ  /Gô!Hä!-´fÄEÔPTÔ\aÜ˜R›¬¨B¯G©G¯L©L¸©OÓ(<Ä3ÀrÇwÁwÇ|Á|ÐTVÑGWÓCXÐlsÝ[`ÔqÑ[`ÐSW×lpÐehœ4ÑN CÐN¬;´zÀ$ÈÓ7LÓ+MÓNÐlpÐNÐ[`Òqôs€Hô ˆsÐ*Ñ*¨HÔ5Ø×ÒÜÐXÔYØÜ—.‘.Ó"€KòXä—-‘-¤§¡°Ó8€KÜ
‡L�L”Ð)Ñ*Ô+Ø˜ˆ'€Dð+3àˆßˆDß�Ü! $¨Ó,�Ø ˜v Q s e˜_Ñ,�Ø—
‘
 D�
Ô)ÝchÓiÑchÐ[_œh r¨"¯'©'°D¸±NÑ*BÑ'CÀTÈ4ÐQUÕVÐch�
ÐiØ—‘˜t S¨$Ô0@ÀÐHXÑAXÐZdÐfjÓ0kÐlÕmñ ð ô —‘œTÐ$tÑtÓu×zÑzÐ{|Ñ}÷  Fñ  Fó  HˆÜ Ð'9Ñ :Ñ:ˆÜ%¤c¨.Ó&9Ó:ˆ	Ø�^Ñ$¬Ò4ÜÐGÓHÐHÜ�3Ð3Ñ3´TÀÔRUÐVdÓReÔntð  vDó  oEð  Maô  6bô  	cÜ'-Ñ#ˆD�#�t˜VØ  d V¨1¨S¨E ?Ñ2Ð5EÑEˆNÜ�nÓ%¬¬c°.Ó.AÀIÑ.MÓ)N×)XÑ)XÓ)Z×)`Ñ)`Ó)bÒbÜ Ð!;Ó<Ð<ÜÑcÀ8ÈMÑCZ×C`ÑC`ÔCbÓcÔcÜ Ð!HÓIÐIØ˜JÑ'ˆFÜ�f˜ZÑ(Ó)¨V°HÑ-=Ò=Ü Ð!:Ó;Ð;Ø�r—w‘w  e¡Ñ,Ñ-×2Ñ2Ó4ˆEÜ& v¨jÑ'9Ó:¸8ÑDˆFÜ˜e V¨V°LÑ-AÀ4ÈÁ>ÓRˆCØ�K‰KœÐ^ $¨CÑ^´8¸CÀÀhÁÐQUÐV[ÑQ\Ó3]Ñ^Ô_Ü'4°S¸$¸x¹.È$ÈuÉ+Ó'VˆG�t�f˜A˜c˜U�OÑ$Ø”d˜1‘gŒ~ÛP�DØtxð  }Rò  uRœ; u¨i¸Ñ.AÀ6È,ÑCWÐY]Ð^fÑYgÐioÔpô  Xhð  inð  ptð  u}ñ  p~ð  @Dó  XE�DØ—K‘K¤Ð h¨$°DÑ h¼HÀTÈ4ÐPXÉ>Ð[_Ð`eÑ[fÓ<gÑ hÔiÜ0=¸dÀDÈÁNÐTXÐY^ÑT_Ó0`�G˜t˜f A d VÐ,Ò-ò Qð (.ô& 	�3˜Ñ'¬°ZÔQU×Q_ÑQ_ÓQaÐbmÑQmÐtxÔ)yÔzÜ
�‰�TÓ×!Ñ! #¨Ñ"5¸UÐ!ÔCÜ
�‰�WÓ×$Ñ$ SÐ+>Ñ%>ÈFÐ$ÕSô
 	�‰�QŒÜ�‰”f—n‘n kÕ2ùòw !Mùò /Gùó rùò& jøô< ò Ü�3˜Ñ&¬°HÄSÈÃXÔ_c×_mÑ_mÓ_oÐp{Ñ_{Ô(|Ô}Øûðûô 	�‰�QŒÜ�‰”f—n‘n kÕ2úsQ   Æ [%Ç	'[*É&2[/&Ì$A[: Í(([5ÎH[: Ö(D[: Û5[: Û:	]Ü:\=Ü=]Ý] Ý;^ Ú__main__)Údescriptionz--dataz!data/mlp/COINBASE_BTCUSD, 240.csv)r3   z--outz1results/mlp_measurement_audit_2026_09_21/pipelinez--validate-onlyÚ
store_true)Úactionr$   )FÚ__doc__Ú
__future__r   Úargparser%   Úimportlib.metadatark  r9   rA  Úpathlibr   rr  rf  rh  r[   r<  rx   r=  rQ   Ú__file__Úresolver/   rU  r)   Úinsertr;   Ústrategies.mlp_accountingr   r   Ú%strategies.strategy_activation_scoresr   Ústrategies.strategy_mlp_scoresr	   r
   r   r   r   Útools.train_mlpr   r   r   r   r   r   rm  rn  ro  rT   r­   r  r+   r=   rV   rƒ   r�   r™   rž   r¦   rµ   r  ró   r  r,  r3  rg  Ú__name__ÚArgumentParserÚparserÚadd_argumentÚ
parse_argsr¤   r,   r*   Ú<module>r      s|  ðÙ VÝ "ã Û Û Û Û Ý Û Û Û 
Û ã Û áˆHƒ~×ÑÓ×'Ñ'¨Ñ*€Ø ‡�‡��‘3�t“9Ô ß AÝ Cß }Õ }ß n× nà€Ø/€Ø €Ù	�2˜b¨a¸AÈ#Ð_cÔ	d€ØÐGÑG€ò?òVò_òò2@ó]òeòoòBò)hòXxò.òò -òN3ðb ˆzÒØ$ˆX×$Ñ$°Ô9€FØ
×Ñ˜©#¨dÐ5XÑ.XÓ*YÐÔZØ
×Ñ˜©¨TÐ4gÑ-gÓ)hÐÔiØ
×ÑÐ)°,ÐÔ?Ùˆ×ÑÓÕð r,   