Ë
    goµj}  ã                  ó¢   — d Z ddlmZ ddlmZ ddlm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„Zdd„Z ed	¬
«       G d„ d«      «       Zd„ Zy)zFContent-addressed immutable inputs for comparable MLP replay evidence.é    )Úannotations)Ú	dataclass)Úcached_propertyN)ÚPathc                óH   — t        j                  | «      j                  «       S ©N)ÚhashlibÚsha256Ú	hexdigest©Úvalues    úD/Users/jameslopez/projects/TradingBot25/strategies/mlp_comparison.pyÚdigestr      s   € Ü�>‰>˜%Ó ×*Ñ*Ó,Ð,ó    c                ó`   — t        t        j                  | dd¬«      j                  «       «      S )NT©Ú,Ú:©Ú	sort_keysÚ
separators)r   ÚjsonÚdumpsÚencoder   s    r   Úfingerprintr      s#   € Ü”$—*‘*˜U¨d¸zÔJ×QÑQÓSÓTÐTr   T)Úfrozenc                  ó€   — e Zd ZU ded<   ded<   ded<   edd„«       Zed„ «       Zd	„ Zed
„ «       Z	ed„ «       Z
d„ Zd„ Zy)ÚComparisonSnapshotÚbytesÚdataztuple[tuple[str, bytes], ...]Ú	artifactsÚstrÚmanifest_jsonc                óH   — t        | j                  j                  «       «      S r   )r   r#   r   ©Úselfs    r   r   zComparisonSnapshot.fingerprint   s   € ä�d×(Ñ(×/Ñ/Ó1Ó2Ð2r   c               ó`  — t        |«      j                  «       }g d¢}t        ||t        |«      ||D �	ci c](  }	|	t        t        |«      |	z  j                  «       «      “Œ* c}	¬«      }
 | |t	        d„ t        t        |«      «      D «       «      t        j                  |
dd¬«      «      S c c}	w )N)	z	config.pyzstrategies/mlp_accounting.pyz%strategies/mlp_execution_stability.pyz!strategies/strategy_mlp_scores.pyz(strategies/strategy_activation_scores.pyz'strategies/library_activation_scores.pyzstrategies/mlp_comparison.pyz#strategies/mlp_temporal_features.pyztools/run_mlp_deep_sweep.py)ÚassetÚ	timeframeÚdata_sha256ÚcontractÚsource_hashesc              3  óR   K  — | ]  }|t        |«      j                  «       f–— Œ! y ­wr   )r   Ú
read_bytes)Ú.0Úps     r   Ú	<genexpr>z-ComparisonSnapshot.capture.<locals>.<genexpr>*   s%   è ø€ ÐWÑBV¸Q ¤4¨£7×#5Ñ#5Ó#7Ô8ÑBVùs   ‚%'Tr   r   )	r   r.   Údictr   ÚtupleÚsortedÚsetr   r   )ÚclsÚ	data_pathÚweightsÚrepor(   Útfr+   r    Úsourcesr0   Úmanifests              r   ÚcapturezComparisonSnapshot.capture!   s£   € ä�I‹×)Ñ)Ó+ˆòYˆô ˜e¨r¼vÀd»|ÐV^ÙY`Ó&aÑY`ÐTU q¬&´$°t³*¸q±.×1LÑ1LÓ1NÓ*OÑ'OÐY`Ñ&aôcˆá�4œÑWÄ&ÌÈWËÔBVÓWÓWÜ—:‘:˜h°$À:ÔNóPð 	Pùò 'bs   ´-B+c                ó  — t        j                  t        j                  | j                  «      «      }|j
                  j                  j                  «       j                  j                  «       |_        t         j                  j                  j                  |j                  «      rdnd }t        j                  |j                  |d¬«      j                  j                  d «      |d<   |j                  j!                  «       j#                  «       s>|j                  j$                  r(|j                  j'                  «       j#                  «       rt)        d«      ‚|j*                  d d j-                  «       j/                  d¬«      S )NÚsT)ÚunitÚutcÚtimez*Invalid or unordered comparison timestampséÿÿÿÿ)Údrop)ÚpdÚread_csvÚioÚBytesIOr    Úcolumnsr"   ÚlowerÚstripÚapiÚtypesÚis_numeric_dtyperB   Úto_datetimeÚdtÚtz_localizeÚisnaÚanyÚis_monotonic_increasingÚ
duplicatedÚ
ValueErrorÚilocÚcopyÚreset_index)r&   Úframer@   s      r   rZ   zComparisonSnapshot.frame-   s  € Ü—‘œBŸJ™J t§y¡yÓ1Ó2ˆØŸ™×)Ñ)×/Ñ/Ó1×5Ñ5×;Ñ;Ó=ˆŒÜ—f‘f—l‘l×3Ñ3°E·J±JÔ?‰sÀTˆÜŸ™ u§z¡z¸À$ÔG×JÑJ×VÑVÐW[Ó\ˆˆf‰Ø�:‰:�?‰?Ó× Ñ Ô"¨%¯*©*×*LÒ*LÐPU×PZÑPZ×PeÑPeÓPg×PkÑPkÔPmÜÐIÓJÐJà�z‰z˜#˜2ˆ×#Ñ#Ó%×1Ñ1°tÐ1Ó<Ð<r   c                ó`   — | j                   D ��ci c]  \  }}|t        |«      “Œ c}}S c c}}w r   )r!   r   )r&   ÚpathÚraws      r   Úartifact_hashesz"ComparisonSnapshot.artifact_hashes7   s+   € à37·>²>ÔB±>¡i d¨C�”f˜S“kÑ!°>ÒBÐBùÓBs   �*c                ó,   — t        | j                  «      S r   )r2   r!   r%   s    r   Úartifact_bytesz!ComparisonSnapshot.artifact_bytes;   s   € ä�D—N‘NÓ#Ð#r   c                óÌ  — | j                   |   }t        j                  |«      }|d   st        d«      ‚t	        |d   «      }|d   D �]   }t        j                  |d   t        ¬«      }t        j                  |d   t        ¬«      }|j                  dk7  s/|j                  d   |k7  s|j                  |j                  d	   fk7  rt        d
«      ‚|j                  d	   }t        j                  t        j                  |d   t        ¬«      «      j                  «       rAt        j                  t        j                  |d   t        ¬«      «      j                  «       r�Œt        d«      ‚ |dk7  rt        d«      ‚t        |d   |d   D �cg c]>  }t        j                  |d   t        ¬«      t        j                  |d   t        ¬«      f‘Œ@ c}t        |«      ¬«      S c c}w )NÚlayerszEmpty model layersÚfeature_colsÚW)ÚdtypeÚbé   é   r   zIncompatible model dimensionszNonfinite model weightsz"Model output dimension must be one)rc   rb   r
   )r`   r   ÚloadsrV   ÚlenÚnpÚasarrayÚfloatÚndimÚshapeÚisfiniteÚallr2   r   )	r&   r\   r]   ÚpayloadÚwidthÚlayerr8   ÚbiasÚxs	            r   ÚartifactzComparisonSnapshot.artifact?   s¶  € Ø×!Ñ! $Ñ'ˆÜ—*‘*˜S“/ˆØ�xÒ ÜÐ1Ó2Ð2Ü�G˜NÑ+Ó,ˆØ˜XÕ&ˆEÜ—j‘j  s¡´5Ô9ˆGÜ—:‘:˜e C™j´Ô6ˆDØ�|‰|˜qÒ  G§M¡M°!Ñ$4¸Ò$=ÀÇÁÐPW×P]ÑP]Ð^_ÑP`ÐObÒAbÜ Ð!@ÓAÐAØ—M‘M !Ñ$ˆEÜ—;‘;œrŸz™z¨%°©*¼EÔBÓC×GÑGÔIÔQS×Q\ÑQ\Ô]_×]gÑ]gÐhmÐnqÑhrÔzô  ^Aó  RB÷  RFñ  RFö  RHÜ Ð!:Ó;Ð;ð 'ð �AŠ:ÜÐAÓBÐBÜ ¨Ñ!8à%,¨XÒ%6ó8Ù%6 ô  ŸZ™Z¨¨#©´eÔ<¼b¿j¹jÈÈ3ÉÔW\Ô>]Ò^Ø%6ñ8Ü@FÀsÃôMð 	Mùò8s   ÆAG!
c                óà   — t        j                  | j                  «      d   j                  «       D ];  \  }}t	        t        |«      |z  j                  «       «      |k7  sŒ/t        d|› �«      ‚ y )Nr,   zComparison source changed: )r   ri   r#   Úitemsr   r   r.   rV   )r&   r9   r\   Úexpecteds       r   Úvalidate_sourcesz#ComparisonSnapshot.validate_sourcesS   s`   € Ü"Ÿj™j¨×);Ñ);Ó<¸_ÑM×SÑSÖU‰NˆD�(Ü”t˜D“z DÑ(×4Ñ4Ó6Ó7¸8ÓCÜ Ð#>¸t¸fÐ!EÓFÐFñ Vr   N)Úreturnr"   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   r   Úclassmethodr=   rZ   r^   r`   rw   r{   © r   r   r   r      sv   … à
ƒKØ,Ó,ØÓàò3ó ð3ð ñ	Pó ð	Pò=ð ñCó ðCð ñ$ó ð$òMó(Gr   r   c           	     ó  — | j                  d«      r| j                  d«      dk7  rt        d«      ‚dD ]L  }t        j                  t	        | j                  |t        j
                  «      «      «      rŒ@t        d|› �«      ‚ | S )NÚComparison_FingerprintÚEvaluation_StatusÚcompletez4Incumbent replay failed or has insufficient coverage)zCalmar RatiozP&L/DD RatiozTotal P&L %zIncumbent replay has invalid )ÚgetrV   rk   rp   rm   Únan)ÚrowÚkeys     r   Úrequire_replayr‹   Y   sq   € Ø�7‰7Ð+Ô,°·±Ð8KÓ0LÐPZÒ0ZÜÐOÓPÐPÛ>ˆÜ�{‰{œ5 §¡¨¬b¯f©fÓ!5Ó6Õ7ÜÐ<¸S¸EÐBÓCÐCð ?ð €Jr   )r   r   r|   r"   )r   r2   r|   r"   )Ú__doc__Ú
__future__r   Údataclassesr   Ú	functoolsr   r	   rG   r   Úpathlibr   Únumpyrk   ÚpandasrE   r   r   r   r‹   r‚   r   r   Ú<module>r“      sU   ðÙ LÝ "å !Ý %Û Û 	Û Ý ã Û ó-óUñ �$Ô÷>Gð >Gó ð>GóBr   