Ë
    ìqµjƒ  ã                   óV   — d dl Zd dlmc mZ d dlZd dlZd dl	Z
d dlZd„ Zd„ Zd„ Zd„ Zy)é    Nc            	      ó  — ddl m}  ddlm} t	        j
                  t        t	        j                  ddd¬«      g d¢g d	¢g d	¢¬
«      «      }t        ddddd¬«      } | ||t        j                  d«      |j                  j                  «       |j                  j                  «       |dg«      }|d   }|s8ddt        j                  |«      iz  }t        t        j                   |«      «      ‚d }|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t        j                  |«      t        j                  |«      t        j                  |	«      dœz  }dd|iz  }t        t        j                   |«      «      ‚d x}x}x}
}	d„ |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   ©Úassess_stability©Ú_score_to_signalsú
2020-01-01é   Ú6h©ÚperiodsÚfreq)ç      i@ç      I@g\�Âõ(@pÀg     €k@g      D@)ç      Y@ç     @Y@g     €Y@r   g      Z@©ÚtimeÚactivation_scoreÚcloseÚhighg     €V@g     @j@g     @pÀFç      4@)Ú!i_long_entry_activation_thresholdÚ i_long_exit_activation_thresholdÚ-i_long_exit_activation_confirmation_thresholdÚi_use_long_exit_confirmationÚi_trailing_stop_threshold)ÚISr   z
2020-01-02Úpassedúassert %(py1)sÚpy1Útrialsé   )ú==)z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sÚlen©Úpy0Úpy2Úpy4Úpy7úassert %(py9)sÚpy9c              3   ó8   K  — | ]  }|d    d   d   dk(  –— Œ y­w)r   r   Úchanged_action_barsN© )Ú.0Úts     úM/Users/jameslopez/projects/TradingBot25/tests/test_mlp_execution_stability.pyÚ	<genexpr>zBtest_identical_paths_pass_despite_raw_proximity.<locals>.<genexpr>   s&   è ø€ ÐUÑDT¸qˆq�‰|˜A‰Ð4Ñ5¸Õ:ÑDTùs   ‚ú,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úall©r&   r'   r(   )Ú"strategies.mlp_execution_stabilityr   Ústrategies.strategy_mlp_scoresr   ÚpdÚ	DataFrameÚdictÚ
date_rangeÚnpÚonesr   Úto_numpyr   Ú
@pytest_arÚ	_safereprÚAssertionErrorÚ_format_explanationr$   Ú_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_namer4   )r   r   ÚframeÚparamsÚreportÚ@py_assert0Ú@py_format2Ú@py_assert1Ú@py_assert3Ú@py_assert6Ú@py_assert5Ú@py_format8Ú@py_format10Ú@py_format5s                 r1   Ú/test_identical_paths_pass_despite_raw_proximityrS      s«  € ÝCÝ@Ü�L‰Lœ¤2§=¡=°ÀqÈtÔ#TÚ8Ú,Ò3QôSó T€Eô °CÐZ^Ø6;ÐZ_Ø"%ô'€Fñ ˜e V¬R¯W©W°Q«Z¸¿¹×9MÑ9MÓ9OÐQV×Q[ÑQ[×QdÑQdÓQfØÐ>Ð?óA€Fà�(ÑÐÑ××ÐÐ×××××Ø�hÑÐ&Œ3ÐÓ Ð& BÐ&Ð  BÑ&×&×&Õ&Ð  B×&×&×&×&×&Ñ&Œ3×&×&Ó&Œ3×&×&Ô&Ð×&×&Ò&Ð ×&×&Ò& B×&×&×&×&×&×&Õ&ÙUÀFÈ8ÒDTÓUÐUŒ3ÐUÓUÐUÑU×U×U×U×UÕUŒ3×U×UÓUŒ3×U×UÔUÐU×U×UÒUÐU×U×U×U×U×UÓUó    c                  ó  — ddl m}  dddœ} | |dddœ«      d   }| }|s8dd	t        j                  |«      iz  }t	        t        j
                  |«      «      ‚d x}} | |d
ddœ«      d   }|s8dd	t        j                  |«      iz  }t	        t        j
                  |«      «      ‚d } | |dddœ«      d   }|s8dd	t        j                  |«      iz  }t	        t        j
                  |«      «      ‚d } | |dddœ«      d   }| }|s8dd	t        j                  |«      iz  }t	        t        j
                  |«      «      ‚d x}}t        j                  t        «      5   | |t        d«      ddœ«       d d d «       y # 1 sw Y   y xY w)Nr   )Úperformance_changeg     ˆÃ@g      4À©Úpnl_pctÚdd_pctg     oÃ@Úharmfulúassert not %(py1)sr    g     $Ã@r   gš™™™™5Àg     pÇ@g      3ÀÚnan)
r6   rV   r?   r@   rA   rB   ÚpytestÚraisesÚ
ValueErrorÚfloat)rV   ÚbaserJ   Ú@py_assert2Ú@py_format3rK   s         r1   Ú;test_harm_is_relative_wealth_not_absolute_compounded_returnrd      s&  € ÝEØ¨Ñ.€DÙ! $°EÀTÑ(JÓKÈIÑVÐVÐVÐVÐVÑV×V×VÐVÐV×V×V×V×V×VÑVÙ˜d°ÀÑ$FÓGÈ	ÑRÐRÑR×R×RÐRÐR×R×R×R×R×RÙ˜d°À%Ñ$HÓIÈ)ÑTÐTÑT×T×TÐTÐT×T×T×T×T×TÙ! $°FÀdÑ(KÓLÈYÑWÐWÐWÐWÐWÑW×W×WÐWÐW×W×W×W×W×WÑWÜ	�‰”zÕ	"Ù˜4¬U°5«\ÀTÑ!JÔK÷ 
#×	"Ñ	"ús   ÅE:Å:Fc            	      óv  — ddl m}  ddlm} t	        j
                  t        t	        j                  ddd¬«      g d¢g d	¢g d	¢¬
«      «      }t        ddddd¬«      } | ||t        j                  d«      |j                  j                  «       |j                  j                  «       |dg«      }|d   }| }|s8ddt        j                  |«      iz  }t        t        j                   |«      «      ‚d x}}|d   D ��	cg c]  }|d   D ]
  }	|	d   sŒ	|	‘Œ Œ }
}}	d„ |
D «       }t#        |«      }d}||kD  }|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                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                   |«      «      ‚d 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 c c}	}w )$Nr   r   r   r   é   r
   r   )r   g{®Gáz¤?g=
×£pýh@r   )r   r   r   r   r   r   g      Œ@g      ŒÀé   r   )r   r   r   Úi_entry_score_windowr   )r   r   r   r   r[   r    r!   r   rZ   c              3   ó&   K  — | ]	  }|d    –— Œ y­w)Úwealth_loss_pctNr.   ©r/   Úps     r1   r2   zStest_smoothed_entry_with_zero_proximity_can_fail_execution_guard.<locals>.<genexpr>.   s   è ø€ Ð5©W¨ˆqÐ"Õ#©Wùs   ‚é(   )Ú>)z/%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} > %(py7)sÚmaxr%   r*   r+   c              3   ó,   K  — | ]  }|d    dkD  –— Œ y­w)r-   r   Nr.   rk   s     r1   r2   zStest_smoothed_entry_with_zero_proximity_can_fail_execution_guard.<locals>.<genexpr>/   s   è ø€ Ð=±W°ˆqÐ&Ñ'¨!Õ+±Wùs   ‚r3   r4   r5   )r6   r   r7   r   r8   r9   r:   r;   r<   Úzerosr   r>   r   r?   r@   rA   rB   ro   rC   rD   rE   rF   r4   )r   r   rG   rH   rI   rJ   rb   rc   r0   rl   rZ   rL   rM   rN   rO   rP   rQ   rR   s                     r1   Ú@test_smoothed_entry_with_zero_proximity_can_fail_execution_guardrr   #   sâ  € ÝCÝ@Ü�L‰Lœ¤2§=¡=°ÀqÈtÔ#TÚ2Ò:MÒTgôió j€Eä°DÐ[_Ø6;ÐRSÐorôt€Fá˜e V¬R¯X©X°a«[¸%¿+¹+×:NÑ:NÓ:PÐRW×R\ÑR\×ReÑReÓRgØÐ>Ð?óA€Fà�hÑÐÐÐÐÑ××ÐÐ×××××ÑØ  Ò*ÔQÑ*�Q°A°i´L¨qÀAÀiÃLŠq°LˆqÐ*€GÑQÙ5©WÓ5Ð:Œ3Ð5Ó5Ð:¸Ð:Ð5¸Ñ:×:×:Õ:Ð5¸×:×:×:×:×:Ñ:Œ3×:×:Ó:Œ3×:×:Ô:Ð5×:×:Ò:Ð5×:×:Ò:¸×:×:×:×:×:×:Õ:Ù=±WÓ=Ð=Œ3Ð=Ó=Ð=Ñ=×=×=×=×=Õ=Œ3×=×=Ó=Œ3×=×=Ô=Ð=×=×=Ò=Ð=×=×=×=×=×=Ó=ùó Rs   Ã;J5ÄJ5c                  ó�  — ddl m} m}m}m}m} t        dd¬«      } | |«      }| }|sº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        d	d
dœd	d
dœ¬«      }	t        |d|D �
����cg c]?  }
|D ]8  }t        |
| |«       D ���cg c]  \  }}}t        |	|||¬«      ‘Œ c}}}¬«      ‘Œ: ŒA c}}}}}
¬«      }|j                  dddt        j                   |«      ¬«        | |«      }|sº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 }d}t        ||¬«      } | |«      }| }|�s+d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                  |«      t        j                  |«      t        j                  |«      dœz  }t        t        j                  |«      «      ‚d x}x}x}}d}t        ||¬«      } | |«      }| }|�s+d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                  |«      t        j                  |«      t        j                  |«      dœz  }t        t        j                  |«      «      ‚d x}x}x}}d}t        ||¬«      } | |«      }| }|�s+d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                  |«      t        j                  |«      t        j                  |«      dœz  }t        t        j                  |«      «      ‚d x}x}x}}y c c}}}w c c}}}}}
w )Nr   )Ústability_passesÚstability_periodsÚVERSIONÚ
THRESHOLDSÚDELTASÚrowÚcontext)ÚEvaluation_KeyÚComparison_Fingerprintz0assert not %(py3)s
{%(py3)s = %(py0)s(%(py1)s)
}rt   )r&   r    Úpy3r   g      $ÀrW   )ÚcenterÚ	perturbedT)ÚnameÚstartÚend)Ú	thresholdÚdeltar   )Úversionr   r!   r   )ÚStability_Evaluation_KeyÚStability_ContextÚStability_StatusÚStability_Reportz,assert %(py3)s
{%(py3)s = %(py0)s(%(py1)s)
}Úother)r{   zfassert not %(py8)s
{%(py8)s = %(py0)s(%(py6)s
{%(py6)s = %(py1)s(%(py2)s, Evaluation_Key=%(py4)s)
})
}r:   )r&   r    r'   r(   Úpy6Úpy8Úunassessed_ineligible)rˆ   zhassert not %(py8)s
{%(py8)s = %(py0)s(%(py6)s
{%(py6)s = %(py1)s(%(py2)s, Stability_Status=%(py4)s)
})
}z{})r‰   zhassert not %(py8)s
{%(py8)s = %(py0)s(%(py6)s
{%(py6)s = %(py1)s(%(py2)s, Stability_Report=%(py4)s)
})
})r6   rt   ru   rv   rw   rx   r:   rD   rE   r?   rF   r@   rA   rB   ÚupdateÚjsonÚdumps)rt   ru   rv   rw   rx   ry   rb   Ú@py_assert4rR   ÚperiodÚkÚdÚnÚsÚerI   Ú@py_format4rM   rO   Ú@py_assert7Ú@py_assert9rQ   s                         r1   Ú2test_gate_requires_current_bound_complete_evidencer›   2   sÜ  € ßsÕsÜ
˜e¸IÔ
F€CÙ Ó$Ð$Ð$Ð$Ð$Ñ$×$×$×$×$Õ$Ð×$×$Ó$Ð×$×$×$×$×$Ò$ ×$×$Ó$ ×$×$Ô$Ð$×$×$×$×$×$Ò$Ü T°TÑ:ÐRVÐbfÑFgÔh€FÜ˜'¨$á:D÷VÙ:D°QËfÈô ˜q¨Ù,Ô.õ40Ù.‘��1�aô 59¸ÀaÈqÐVWÖ4XØ.ó40ö 1ØNTð1Ø:DõVôW€Fð ‡J�J¨ÀÐ]eÜ $§
¡
¨6Ó 2ð ô 4á˜CÓ Ð Ñ × × × × Õ Ð× × Ó Ð× × × × × Ò ˜C× × Ó ˜C× × Ô Ð × × × × × Ð Ø9@ÐB¤ S¸Ô AÐBÑÐ AÓBÐBÐBÐBÐBÒB×B×B×B×BÕBÐ×B×BÓBÐ×B×B×B×B×BÒB¤×B×BÓB¤×B×B×B×B×BÒB S×B×BÓB S×B×BÔB¸×B×BÒBÐ A×B×BÒBÐB×B×B×B×B×BÖBØ;RÐT¤ SÐ;RÔ SÐTÑÐ SÓTÐTÐTÐTÐTÒT×T×T×T×TÕTÐ×T×TÓTÐ×T×T×T×T×TÒT¤×T×TÓT¤×T×T×T×T×TÒT S×T×TÓT S×T×TÔTÐ;R×T×TÒTÐ S×T×TÒTÐT×T×T×T×T×TÖTØ;?ÐA¤ S¸4Ô @Ð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×A×AÒA S×A×AÓA S×A×AÔA¸4×A×AÒAÐ @×A×AÒAÐA×A×A×A×A×A×Aùô40ùö Vs   Ä	X?Ä%X8(Ä?X?Ø8X?)ÚbuiltinsrD   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter?   r�   Únumpyr<   Úpandasr8   r]   rS   rd   rr   r›   r.   rT   r1   Ú<module>r¢      s,   ðß  „ ƒã Û Û òVò Lò>óBrT   