Ë
    º_±jº+  ã                  ój  — 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	Z	ddl
mZ ddlZddlZddlmZ  ee«      j#                  «       j$                  d   Zej(                  j+                  d ee«      «       edz  Zd\  ZZdd	„Zdd
„Zdd„Zdd„Zd„ Zddd„Zdd„Z dd„Z!d„ Z"e#dk(  r e «        yy)a8  Reproduce the fixed-budget, non-promoting BTC6H comparison migration evidence.

Only writes a new output directory. Never calls training, sweep generation,
promotion, preset generation, or deployment. The archived evaluator snapshot
isolates old decisions; its imported accounting dependencies are current code.
é    )ÚannotationsN)ÚPath)ÚAnyé   z+results/mlp_comparison_migration_2026_09_21)ÚCOINBASE_BTCUSDÚ6Hc                ód   — t        j                  | j                  «       «      j                  «       S ©N)ÚhashlibÚsha256Ú
read_bytesÚ	hexdigest)Úpaths    ú(tools/verify_mlp_comparison_migration.pyÚdigestr      s!   € Ü�>‰>˜$Ÿ/™/Ó+Ó,×6Ñ6Ó8Ð8ó    c                óÒ  — t        | t        «      r6| j                  «       D ��ci c]  \  }}t        |«      t	        |«      “Œ c}}S t        | t
        t        f«      r| D �cg c]  }t	        |«      ‘Œ c}S t        | d«      rt	        | j                  «       «      S t        | t        «      rt        j                  | «      sy t        | t        «      rt        | «      S | S c c}}w c c}w )NÚitem)Ú
isinstanceÚdictÚitemsÚstrÚcleanÚlistÚtupleÚhasattrr   ÚfloatÚmathÚisfiniter   )ÚvalueÚkÚvs      r   r   r      s³   € Ü�%œÔØ-2¯[©[¬]Ô;©]¡T Q¨”�A“œ˜a›Ñ ¨]Ò;Ð;Ü�%œ$¤˜Ô'Ù"'Ó(¡%˜Q”�a• %Ñ(Ð(Üˆu�fÔÜ�U—Z‘Z“\Ó"Ð"Ü�%œÔ¬¯©°eÔ(<ØÜ�%œÔÜ�5‹zÐØ€Lùó <ùâ(s   ¤CÁ!C$c                ól   — | j                  t        j                  t        |«      ddd¬«      dz   «       y )Né   TF)ÚindentÚ	sort_keysÚ	allow_nanÚ
)Ú
write_textÚjsonÚdumpsr   )r   r    s     r   Ú
write_jsonr,   ,   s(   € Ø‡O�O”D—J‘Jœu U›|°AÀÐQVÔWÐZ^Ñ^Õ_r   c                 ó4  — t        j                  t        dz  j                  «       «      } | j	                  «       D ��cg c]3  \  }}t
        |z  j                  «       rt        t
        |z  «      |k7  r|‘Œ5 }}}|rt        d|› �«      ‚t        | «      S c c}}w )Núprotected_hashes.jsonzProtected inputs changed: )
r*   ÚloadsÚEVIDENCEÚ	read_textr   ÚREPOÚis_filer   ÚRuntimeErrorÚlen)ÚexpectedÚnameÚshaÚchangeds       r   Úverify_protectedr:   0   s�   € Ü�z‰zœ8Ð&=Ñ=×HÑHÓJÓK€HØ%-§^¡^Ô%5ô MÑ%5™	˜˜cÜ˜d‘{×+Ñ+Ô-´¼¸t¹Ó1DÈÒ1Kò Ð%5€Gñ MáÜÐ7¸°yÐAÓBÐBÜˆx‹=Ðùó	Ms   ¾8Bc                 óL  — t         j                  j                  dt        dz  «      } t         j                  j	                  | «      }|t
        j                  | j                  <   | j                  j                  |«       t        t        c|_
        |_        t        dz  |_        |S )NÚmigration_initial_sweepúinitial_sweep.pyzresults/winners)Ú	importlibÚutilÚspec_from_file_locationr0   Úmodule_from_specÚsysÚmodulesr7   ÚloaderÚexec_moduler2   ÚASSETÚ
WINNER_DIR)ÚspecÚmodules     r   Ú
old_modulerJ   9   sz   € Ü�>‰>×1Ñ1Ð2KÌXÐXjÑMjÓk€DÜ�^‰^×,Ñ,¨TÓ2€FØ#„C‡K�K�—	‘	ÑØ‡K�K×Ñ˜FÔ#Ü $¤eÐ€F„K�”ÜÐ0Ñ0€FÔØ€Mr   c                óD  ‡‡— |xs i Šˆˆfd„}t        | j                  dd«      «      dk\  xr,  |dd«      dk\  xr t        | j                  dd«      «      dk  }| j                  d«      dk7  t        | d	   «      dkD  t        | d
   «      dk(  t        | d   «      dkD  xr t        | d   «      dkD  t        | d   «      dk(   |d	d«       |dd«      t        | d	   «       |d	d«      k\  t        | d   «       |dd«      k\  || xs t        | d   «       |dd«      dz
  k\  dœS )zGExpose preserved substantive conditions independently of evaluator API.c           	     ó€   •— t        t        ‰j                  | |«      «      t        ‰j                  | |«      «      «      S r
   )Úmaxr   Úget)ÚkeyÚdefaultÚ
historicalÚ	references     €€r   Ú<lambda>z"gate_diagnostics.<locals>.<lambda>F   s.   ø€ ¤¤U¨9¯=©=¸¸gÓ+FÓ%GÌÈzÏ~É~Ð^aÐcjÓOkÓIlÔ!mr   zOOS_Total Tradesr   r   ÚOOS_Bear_PctéU   ÚsourceÚcurrentzP&L/DD RatiozFragile_0.05ÚSub1_CalmarÚSub2_CalmarÚWFO_Neg_FoldsúCalmar RatioiöÿÿÿzOOS_Sortino Ratio)Úcandidate_not_incumbentÚpositive_pnl_ddÚ
nonfragileÚboth_subperiods_positiveÚno_negative_qualifying_wfoÚpnl_dd_floorÚcalmar_floorÚpnl_dd_meets_floorÚcalmar_meets_floorÚoos_gate_appliesÚoos_sortino_protected)r   rN   Úint)ÚrowrR   ÚstoredÚfloorÚoos_appliesrQ   s    `   @r   Úgate_diagnosticsrl   C   sQ  ù€ à’˜2€JÜm€EÜ˜Ÿ™Ð!3°QÓ7Ó8¸AÑ=ò >ÙÐ/°Ó3°qÑ8ò>ä˜SŸW™W ^°QÓ7Ó8¸2Ñ=ð ð $'§7¡7¨8Ó#4¸	Ñ#AÜ   ^Ñ!4Ó5¸Ñ9Ü˜C Ñ/Ó0°AÑ5Ü$)¨#¨mÑ*<Ó$=ÀÑ$AÒ$cÄeÈCÐP]ÑL^ÓF_ÐbcÑFcÜ&)¨#¨oÑ*>Ó&?À1Ñ&DÙ˜n¨aÓ0Ù˜n¨cÓ2Ü# C¨Ñ$7Ó8¹EÀ.ÐRSÓ<TÑTÜ# C¨Ñ$7Ó8¹EÀ.ÐRUÓ<VÑVØ'Ø%0 Ò!z´E¸#Ð>QÑ:RÓ4SÑW\Ð]pÐruÓWvÐyzÑWzÑ4zñð r   c                 óÒ  ‡(‡)‡*‡+— t        j                  t        ¬«      } | j                  dt        d¬«       | j                  «       }|j                  j                  «       }|j                  «       r$t        |j                  «       «      rt        d«      ‚|j                  dd¬«       t        «       }dD ]Š  }t        j                  t         j"                  t%        t&        dz  |z  «      gt&        dd¬	«      }||› d
�z  j)                  |j*                  |j,                  z   «       |j.                  sŒ~t1        d|› �«      ‚ ddlmŠ+ ddlm} t8        ‰+_        t;        «       Š)‰)j=                  t>        «      }‰)jA                  |«      }d|d<   d|fg}	dD ]p  }
dD ]i  }t&        dt8        › dt>        › d|
› d|› d�	z  }‰)jA                  ‰)jC                  t%        |«      «      «      }|
› d|› �|d<   |	jE                  |d   |f«       Œk Œr tG        |dz  |	«       tI        ‰+|	«      \  Š(}tG        |dz  |«       i }|	D ��ci c]  \  }}|‰)jK                  t>        ||«      “Œ c}}Š*‰(d   }|jM                  t8        t>        «      }|d   |d   k(  sJ ‚tO        jP                  |d   |d   d¬«      sJ ‚|jS                  t>        |d   |d   ¬«      }|jU                  |||«      }|dk(  sJ ‚tW        ‰*ˆ)ˆ*fd„d¬ «      }tW        ‰(ˆ(ˆ+fd!„d¬ «      }g }|	D �]t  \  }}‰*|   ‰(|   }}‰)jY                  |‰*d   |«      }‰)jY                  |||«      }‰+jY                  |||«      }t[        |||«      }t[        ||«      }|j]                  «       D � �!ci c]  \  } }!|!||    k7  r	| ||    |!d"œ“Œ }"} }!|jE                  |||||j_                  |«      d#z   |j_                  |«      d#z   |||"|j]                  «       D �#�$cg c]  \  }#}$|$d$u sŒ|#d%k7  sŒ|#‘Œ c}$}#|j]                  «       D �#�$ci c]J  \  }#}$|#|v rAta        ||#   «      ta        |$«      k7  r'|#ta        |jc                  |#«      «      ta        |$«      d"œ“ŒL c}$}#te        ||||"«      d&œ«       �Œw t        «       }%g d'¢}&|&t&        dz  jg                  d(«      D �cg c]   }t%        |ji                  t&        «      «      ‘Œ" c}z  }&tW        tk        |&«      tk        |d)   «      z  «      }&|&D ]D  }|dz  |z  }'|'jl                  j                  dd¬«       to        jp                  t&        |z  |'«       ŒF to        jp                  tr        d*z  |d+z  «       to        jp                  tr        d,z  |d,z  «       tG        |d-z  i d.d/“d0t8        “d1t>        “d2tu        |	«      “d3d“d4d“d5d6“d)|&D �ci c]  }|tw        t&        |z  «      “Œ c}“d7tw        tr        d*z  «      “d8|“d9|%“d:|“d;‰*“d<‰(“d=|“d>|d   |d   |d?œ“d@g dA¢“«       ty        t{        j|                  d/tu        |	«      t%        |«      dBœ«      «       y c c}}w c c}!} w c c}$}#w c c}$}#w c c}w c c}w )CN)Údescriptionz--outputT)ÚtypeÚrequiredzOutput directory must be empty)ÚparentsÚexist_ok)zsync_params.pyzcheck_pine.pyÚtools)ÚcwdÚcapture_outputÚtextz.logzPrerequisite failed: r   )Úrun_mlp_deep_sweep)Úrun_mlp_adaptiverW   rV   Ú	incumbent)Ú
grouped_v1Úrandom_sparse_v1Úhybrid_grouped_v1)i‚#  iç#  iL$  z"strategies/params/mlp/mlp_weights_Ú_Ú_seedz.jsonzfrozen_configurations.jsonzcomparison_manifest.jsonÚComparison_Fingerprintr[   gê-�™—q=)Úrel_tol)Úcomparison_fingerprintÚlast_calmarc                ó,   •— ‰j                  ‰|    «      S r
   ©Ú
rank_tuple)r7   ÚoldÚold_rowss    €€r   rS   zmain.<locals>.<lambda>…   s   ø€ °#·.±.ÀÈ$ÁÔ2Pr   )rO   Úreversec                ó,   •— ‰j                  ‰|    «      S r
   r„   )r7   Úcorrected_rowsÚsweeps    €€r   rS   zmain.<locals>.<lambda>†   s   ø€ ¸e×>NÑ>NÈ~Ð^bÑOcÔ>dr   )r†   Ú	correctedr   Fre   )ÚmodelÚold_promotableÚ old_policy_on_corrected_evidenceÚcorrected_promotableÚold_rankÚcorrected_rankÚold_gates_on_corrected_evidenceÚcorrected_gatesÚchanged_reference_conditionsÚfailed_preserved_conditionsÚchanged_replay_metricsÚexplanation)ztools/run_mlp_deep_sweep.pyztools/run_mlp_adaptive.pyz(tools/verify_mlp_comparison_migration.pyzstrategies/mlp_accounting.pyzstrategies/mlp_comparison.pyz!strategies/strategy_mlp_scores.pyz	config.pyzmlp_comparison*.pyÚsource_hashesr=   zsource/initial_sweep.pyr.   zcomparison.jsonÚstatusÚpassedÚassetÚtfÚmodelsÚ%additional_threshold_trials_per_modelÚ
promotionsÚhistorical_search_budgetz�Unequal; 66 dense bb50 + 36 bull surviving BTC6H artifacts versus three seeds per alternative family. These are artifact counts, not complete search ledgers.Úold_sweep_source_sha256Ú#protected_artifacts_verified_beforeÚ"protected_artifacts_verified_afterÚhistorical_winner_unchangedÚold_replaysÚcorrected_replaysÚ	decisionsÚadaptive_identity)ÚfingerprintÚcalmarÚunchanged_incumbent_deltaÚlimitations)z|Old evaluator snapshot imports current shared accounting; it is the pre-migration comparison path, not pre-audit accounting.zFHistorical BTC6H saved/replayed return discrepancy remains unresolved.z]Common older data is valid for a historical comparison; recency alone is not incompatibility.z6No untouched holdout or live TradingView parity claim.)rš   rž   Úoutput)?ÚargparseÚArgumentParserÚ__doc__Úadd_argumentr   Ú
parse_argsr®   ÚresolveÚexistsÚanyÚiterdirÚ
SystemExitÚmkdirr:   Ú
subprocessÚrunrB   Ú
executabler   r2   r)   ÚstdoutÚstderrÚ
returncoder4   rs   rw   rx   rF   rJ   Úload_winnerÚTFÚnormalise_paramÚrecommended_from_artifactÚappendr,   Úevaluate_correctedÚevaluateÚread_winner_evidencer   ÚiscloseÚTFStateÚcomparison_deltaÚsortedÚ
promotablerl   r   Úindexr   rN   Údecision_explanationÚglobÚrelative_toÚsetÚparentÚshutilÚcopyfiler0   r5   r   Úprintr*   r+   ),ÚparserÚargsÚoutÚbeforeÚscriptr»   Úadaptiveri   Úincumbent_paramsÚconfigsÚfamilyÚseedr   ÚparamsÚmanifestÚ	old_cacher7   rW   Úadaptive_currentÚstateÚdeltaÚ	old_orderÚcorrected_orderr¨   r}   Úold_rowrh   Úold_decisionÚold_policy_same_evidenceÚnew_decisionÚ	old_gatesÚ	new_gatesrO   ÚvalÚdifferencesr!   r"   ÚafterÚsourcesÚtargetrŠ   r†   r‡   r‹   s,                                           @@@@r   Úmainró   Y   s  û€ Ü×$Ñ$´Ô9€FØ
×Ñ˜
¬¸ÐÔ=Ø×ÑÓ€DØ
�+‰+×
Ñ
Ó
€CØ
‡z�z„|œ˜CŸK™K›MÔ*ÜÐ9Ó:Ð:Ø‡I�I�d T€IÔ*ÜÓ€FÛ5ˆÜ�n‰nœcŸn™n¬c´$¸±.À6Ñ2IÓ.JÐKÔQUØ,0°tô=ˆà	�&�˜ˆÑ	×*Ñ*¨3¯:©:¸¿
¹
Ñ+BÔCØ�>‹>ÜÐ!6°v°hÐ?Ó@Ð@ð 6õ 2Ý2ä€E„KÜ
‹,€CØ�_‰_œRÓ €FØ×*Ñ*¨6Ó2ÐØ!*Ð�XÑØÐ-Ð.Ð/€GÛIˆÛ&ˆDÜÐ>¼u¸gÀQÄrÀdÈ!ÈFÈ8ÐSXÐY]ÐX^Ð^cÐdÑdˆDØ×(Ñ(¨×)FÑ)FÄsÈ4ÃyÓ)QÓRˆFØ"( ¨¨t¨fÐ5ˆF�8ÑØ�N‰N˜F 8Ñ,¨fÐ5Õ6ñ	 'ð Jô ˆsÐ1Ñ1°7Ô;ä1°%¸ÓAÑ€N�HÜˆsÐ/Ñ/°Ô:Ø€IÙNUÔVÉg¹l¸dÀF��c—l‘l¤2 v¨yÓ9Ñ9ÈgÒV€HØ˜[Ñ)€GØ×4Ñ4´U¼BÓ?ÐØÐ4Ñ5¸ÐAYÑ9ZÒZÐZÐZÜ�<‰<Ð(¨Ñ8¸'À.Ñ:QÐ[`ÕaÐaÐaØ×ÑœR¸Ð@XÑ8YØ)0°Ñ)@ð ó B€Eà×%Ñ% e¨WÐ6FÓG€EØ�AŠ:Ðˆ:Ü�xÔ%PÐZ^Ô_€IÜ˜^Ô1dÐnrÔs€OØ€IÜ‰ˆˆaØ ‘~ ~°dÑ';�ˆØ—~‘~ g¨x¸Ñ/DÀfÓMˆØ#&§>¡>°#°wÀÓ#GÐ Ø×'Ñ'¨¨W°fÓ=ˆÜ$ S¨'°6Ó:ˆ	Ü$ S¨'Ó2ˆ	à'0§¡Ô'8ôSÙ'8™8˜3 ¸CÀ9ÈSÁ>Ò<Qð  I¨c¡NÀÑEÑEØ'8ð 	ñ Sà×Ñ 4¸<Ø>VØ2>Ø&/§o¡o°dÓ&;¸aÑ&?Ø,;×,AÑ,AÀ$Ó,GÈ!Ñ,KØ=FØ-6ÐXcØHQÏÉÔHYô  :EÑHYÁÀÀ1Ð]^ÐbgÒ]gÐlmð  rDó  mDº!ÐHYò  :Eà*-¯)©)¬+ô5iÙ*5¡$ ! Q¸¸g¹Ì%ÐPWÐXYÑPZÓJ[Ô_dÐefÓ_gÒJgð 67ÄÀgÇkÁkÐRSÃnÓ@UÔdiÐjkÓdlÑ8mÑ5mØ*5ò5iä)=¸lÐLdÐfrÐtó  *Añ
Bö 
	Cð ô( Ó€EòA€Gà¼À¹×8MÑ8MÐNbÔ8cÓdÑ8c°”�D×$Ñ$¤TÓ*Õ+Ð8cÑdÑd€GÜ”S˜“\¤C¨°Ñ(AÓ$BÑBÓC€GÛˆØ�x‘ $Ñ&ˆØ�‰×Ñ D°4ÐÔ8Ü�‰œ˜t™ VÕ,ð ô ‡O�O”HÐ1Ñ1°3Ð9RÑ3RÔSÜ
‡O�O”HÐ6Ñ6¸Ð>UÑ8UÔVÜˆsÐ&Ñ&ð )SØ�(ð)SØ#¤Uð)SØ,0´"ð)SØ6>ÄÀGÃð)Sà/°ð)Sà4@À!ð)Sð 	#ð  %Dð)Sð 	ÁÓHÁ¸˜$¤¤t¨d¡{Ó 3Ñ3ÀÑHð	)Sð
 	"¤6¬(Ð5GÑ*GÓ#Hð)Sð 	.¨vð)Sð 8\Ð]bð)Sð 	& vð)Sð 0=¸hð)Sð I\Ð]kð)Sð 	�Yð)Sð !4ÀWÐMeÑEfØ˜nÑ-ÈEñ6Sð)Sð 	ò Rð)Sô Tô 
Œ$�*‰* ´C¸³LÌCÐPSËHÑUÓ
VÕWùós Wùó&Sùó :Eùó5iùò eùò Is1   È;"YÎYÏ/YÏ<YÐYÐAY Ò.%YÖ9Y$c                óÒ   — g }|r|j                  d«       | |k7  r|j                  d«       ||k7  r|j                  d«       | |k(  r|j                  d«       dj                  |«      S )NzfStored incompatible metric maxima are removed; changed reference conditions are enumerated explicitly.zœThe legacy evaluator and corrected snapshot/coverage evaluator change the decision before changing the reference policy; inspect saved complete replay rows.zUOn identical corrected replay rows the reference/evidence policy changes eligibility.z&Final promotion decision is unchanged.Ú )rÄ   Újoin)r†   ÚisolatedÚnewrï   Úpartss        r   rÎ   rÎ   ¸   sg   € Ø€EÙØ�‰Ð}Ô~Ø
ˆh‚Ø�‰ð  tô  	uØ�3‚Ø�‰ÐlÔmØ
ˆc‚zØ�‰Ð=Ô>Ø�8‰8�E‹?Ðr   c           
     ó  — | j                   }	 | j                  t        |D ��cg c]
  \  }}|d   ‘Œ c}}«      }|| _         i }|D ��ci c]  \  }}|| j                  t        ||«      “Œ }}}| j	                  |d   «       |j                  t        «       t        |j                  «       D �	ch c]  }	|	d   ’Œ	 c}	«      dk(  sJ ‚|t        j                  |j                  «      f|| _         S c c}}w c c}}w c c}	w # || _         w xY w)NÚmlp_weights_filery   r   r   )Ú_COMPARISONÚcapture_comparisonrÁ   rÆ   Úrequire_replayÚvalidate_sourcesr2   r5   Úvaluesr*   r/   Úmanifest_json)
r‹   rÝ   Úpreviousr}   rà   ÚsnapshotÚcacher7   Úrowsrh   s
             r   rÅ   rÅ   Å   s  € Ø× Ñ €Hð
%Ø×+Ñ+¬BÑ]dÔ0eÑ]dÑPYÐPQÐSY°Ð8JÓ1KÐ]dÒ0eÓfˆØ$ˆÔØˆÙLSÔTÉG¹L¸DÀ&��e—n‘n¤R¨°Ó7Ñ7ÈGˆÑTØ×Ñ˜T +Ñ.Ô/Ø×!Ñ!¤$Ô'Ü¸T¿[¹[¼]ÓK¹]°c�CÐ0Ó1¸]ÑKÓLÐPQÒQÐQÐQØ”T—Z‘Z × 6Ñ 6Ó7Ð7à$ˆÕùó 1fùó Uùò Løð %ˆÕús4   ŽC> £C-²C> Á"C3Á*AC> Â-C9Â9,C> Ã-C> Ã>	DÚ__main__)r   r   Úreturnr   )r    r   r  r   )r   r   r    r   r  ÚNone)r  rg   r
   )rh   r   rR   r   ri   zdict | Noner  r   )r  r  )
r†   Úboolr÷   r	  rø   r	  rï   r   r  r   )$r±   Ú
__future__r   r¯   r   Úimportlib.utilr>   r*   r   rÓ   Úpathlibr   rº   rB   Útypingr   Ú__file__r´   rq   r2   r   Úinsertr   r0   rF   rÁ   r   r   r,   r:   rJ   rl   ró   rÎ   rÅ   Ú__name__© r   r   Ú<module>r     s¹   ðñõ #ã Û Û Û Û Û Ý Û Û 
Ý áˆHƒ~×ÑÓ×'Ñ'¨Ñ*€Ø ‡�‡��‘3�t“9Ô ØÐ?Ñ?€Ø#�	€€ró9óó`óòôó,\Xó~
ò%ð ˆzÒÙ…Fð r   