Ë
    ÷v±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    új/Users/jameslopez/projects/TradingBot25/.worktrees/mlp-comparable-measurement/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               óL  — t        |«      j                  «       }g d¢}t        ||t        |«      ||D �	ci c](  }	|	t        t        |«      |	z  j                  «       «      “Œ* c}	¬«      }
t	        d„ t        t        |«      «      D «       «      } | ||d«      j                  «       }t        t        |j                  j                  «       «      t        |j                  j                  «       «      t        |«      ¬«      |
d<    | ||t        j                  |
dd¬	«      «      S c c}	w )
N)z	config.pyzstrategies/mlp_accounting.pyz!strategies/strategy_mlp_scores.pyz(strategies/strategy_activation_scores.pyz'strategies/library_activation_scores.pyzstrategies/mlp_comparison.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%   è ø€ ÐRÑ=Q¸˜1œd 1›g×0Ñ0Ó2Ô3Ñ=Qùs   ‚%'z{})ÚfirstÚlastÚbarsÚobserved_coverageTr   r   )r   r.   Údictr   ÚtupleÚsortedÚsetÚframer"   ÚtimeÚminÚmaxÚlenr   r   )ÚclsÚ	data_pathÚweightsÚrepor(   Útfr+   r    Úsourcesr0   Úmanifestr!   Úretaineds                r   ÚcapturezComparisonSnapshot.capture!   sû   € ä�I‹×)Ñ)Ó+ˆò2ˆô ˜e¨r¼vÀd»|ÐV^ÙY`Ó&aÑY`ÐTU q¬&´$°t³*¸q±.×1LÑ1LÓ1NÓ*OÑ'OÐY`Ñ&aôcˆäÑR¼VÄCÈÃLÔ=QÓRÓRˆ	Ù�t˜Y¨Ó-×3Ñ3Ó5ˆÜ(,Ü�h—m‘m×'Ñ'Ó)Ó*´°X·]±]×5FÑ5FÓ5HÓ1IÔPSÐT\ÓP]ô)_ˆÐ$Ñ%á�4˜¤D§J¡J¨xÀ4ÐT^Ô$_Ó`Ð`ùò 'bs   ´-D!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Úutcr;   z*Invalid or unordered comparison timestampséÿÿÿÿ)Údrop)ÚpdÚread_csvÚioÚBytesIOr    Úcolumnsr"   ÚlowerÚstripÚapiÚtypesÚis_numeric_dtyper;   Úto_datetimeÚdtÚtz_localizeÚisnaÚanyÚis_monotonic_increasingÚ
duplicatedÚ
ValueErrorÚilocÚcopyÚreset_index)r&   r:   rJ   s      r   r:   zComparisonSnapshot.frame0   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_hashes:   s+   € à37·>²>ÔB±>¡i d¨C�”f˜S“kÑ!°>ÒBÐBùÓBs   �*c                ó,   — t        | j                  «      S r   )r6   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)rk   rj   r
   )rh   r   Úloadsr_   r>   ÚnpÚasarrayÚfloatÚndimÚshapeÚisfiniteÚallr6   r   )	r&   rd   re   ÚpayloadÚwidthÚlayerrA   ÚbiasÚxs	            r   ÚartifactzComparisonSnapshot.artifactB   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   rq   r#   Úitemsr   r   r.   r_   )r&   rB   rd   Úexpecteds       r   Úvalidate_sourcesz#ComparisonSnapshot.validate_sourcesV   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   ÚclassmethodrG   r:   rf   rh   r~   r‚   © r   r   r   r      sv   … à
ƒKØ,Ó,ØÓàò3ó ð3ð ñaó ðaò=ð ñ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 )Úgetr_   rr   rw   rt   Únan)ÚrowÚkeys     r   Úrequire_replayr’   \   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   r6   rƒ   r"   )Ú__doc__Ú
__future__r   Údataclassesr   Ú	functoolsr   r	   rP   r   Úpathlibr   Únumpyrr   ÚpandasrN   r   r   r   r’   r‰   r   r   Ú<module>rš      sX   ðÙ LÝ "å !Ý %Û Û 	Û Ý ã Û ó-óUñ �$Ô÷AGð AGó ðAGóHr   