Ë
    :v±jm  ã                   ó¾   — d Z ddlZddlmc 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mZ ddlmZ ddlmZ dddd	œd
„Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Z d„ Z!y)zISynthetic preregistration checks; these never load incumbent market data.é    N)ÚSimpleNamespace)Úmlp_entry_loss)Únet_returns)Ú_score_to_signals)Úrun_mlp_entry_loss_experimentçš™™™™™¹?)ÚhighÚlossc                ó†  ‡— t        |«      }t        j                  t        t        j                  d|d¬«      |¬«      «      }t        t        j                  |t        «      t        j                  |xs dg|z  t        «      t        j                  |t        «      t        j                  |«      dt        j                  |t        «      dd¬«      Š| j                  t        d	ˆfd
„«       t        j                  |i t        j                  |«      t        j                  |«      t        j                  |xs |«      |¬«      S )Nú
2020-01-01Ú6h©ÚperiodsÚfreq)ÚtimeÚcloseFéÒ   gš™™™™™É?)ÚentryÚexitÚfallbackÚ
score_exitÚexit_thresholdÚtime_okÚ	dead_zoneÚtrailr   c                  ó   •— ‰S ©N© )ÚaÚkwÚops     €úD/Users/jameslopez/projects/TradingBot25/tests/test_mlp_entry_loss.pyÚ<lambda>zreplay.<locals>.<lambda>   s   ø€ Ábó    ©Úloss_fraction)ÚlenÚpdÚ	DataFrameÚdictÚ
date_rangeÚnpÚarrayÚboolÚzerosÚonesÚsetattrÚpolicyÚentry_loss_signals)	Úmonkeypatchr   r   Ú
exit_flagsr	   r
   ÚnÚframer!   s	           @r"   Úreplayr8      sÝ   ø€ ÜˆE‹
€AÜ�L‰Lœ¤2§=¡=°ÀqÈtÔ#TÐ\aÔbÓc€EÜ	”B—H‘H˜U¤DÓ)´·±¸Ò9PÈÀwÈqÁyÔRVÓ0WÜ—‘˜!œTÓ"¬r¯x©x¸«{È3Ü—‘˜œ4Ó ¨E¸ô
>€Bð ×ÑœÐ 3Ó5HÔIÜ×$Ñ$ U¨B´·±¸³¼R¿X¹XÀe»_ÌbÏhÉhÐW[ÒWdÐ_dÓNeÐuyÔzÐzr$   c                 ó0	  — t        | g d¢g d¢«      }|j                  }|j                  } |«       }g d¢}||k(  }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd	|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}|j                  }|j                  } |«       }g d
¢}||k(  }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd	|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}|j                  j                  d   }	d}|	|k(  }
|
slt        j                  d|
fd|	|f«      t        j                  |	«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}	x}
}t        |«      }
|
j                  } |«       }t        j                   }g d¢} ||«      }||k(  }|�s�t        j                  d|fd||f«      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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}x}x}x}}y )N)éd   éZ   é_   )TTT)TFT©ú==)zh%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.execute_entry
}.tolist
}()
} == %(py9)sÚtrace©Úpy0Úpy2Úpy4Úpy6Úpy9úassert %(py11)sÚpy11)FTF)zg%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.execute_exit
}.tolist
}()
} == %(py9)sé   r   ©z%(py1)s == %(py4)s©Úpy1rC   úassert %(py6)srD   )r   g)\�Âõ(¼¿r   ©z¢%(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py0)s(%(py1)s)
}.tolist
}()
} == %(py15)s
{%(py15)s = %(py11)s
{%(py11)s = %(py9)s.approx
}(%(py13)s)
}r   Úpytest©	rA   rK   Úpy3Úpy5Úpy7rE   rG   Úpy13Úpy15úassert %(py17)sÚpy17)r8   Úexecute_entryÚtolistÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚexecute_exitÚentry_loss_overshoot_pctÚilocr   rN   Úapprox)r4   r?   Ú@py_assert1Ú@py_assert3Ú@py_assert5Ú@py_assert8Ú@py_assert7Ú@py_format10Ú@py_format12Ú@py_assert0Ú@py_assert2Ú@py_format5Ú@py_format7Ú@py_assert4Ú@py_assert6Ú@py_assert10Ú@py_assert12Ú@py_assert14Ú@py_format16Ú@py_format18s                       r"   Ú4test_equality_first_held_bar_and_no_same_bar_reentryrw      sÀ  € Ü�;¢Ò/AÓB€EØ×ÑÐ>Ð×%Ñ%Ð>Ñ%Ó'Ð>Ò+>Ð>Ð'Ð+>Ñ>×>×>Õ>Ð'Ð+>×>×>×>×>×>Ñ>ˆ5×>×>Ó>ˆ5×>×>Ô>Ð×>×>Ò>Ð%×>×>Ò>Ð'×>×>Ò>Ð+>×>×>×>×>×>×>×>Ø×ÑÐ>Ð×$Ñ$Ð>Ñ$Ó&Ð>Ò*>Ð>Ð&Ð*>Ñ>×>×>Õ>Ð&Ð*>×>×>×>×>×>Ñ>ˆ5×>×>Ó>ˆ5×>×>Ô>Ð×>×>Ò>Ð$×>×>Ò>Ð&×>×>Ò>Ð*>×>×>×>×>×>×>×>Ø×)Ñ)×.Ñ.¨qÑ1Ð6°QÐ6Ð1°QÑ6×6×6Õ6Ð1°Q×6×6Ó6Ð1×6×6Ò6°Q×6×6×6×6×6×6Ó6Ü�uÓÐEÐ×$Ñ$ÐEÑ$Ó&ÐE¬&¯-©-ÐEºÐE©-¸Ó*EÐEÐ&Ð*EÑE×E×EÖEÐ&Ð*E×E×E×E×E×EÑEŒ;×E×EÓEŒ;×E×E×E×E×EÒE�u×E×EÓE�u×E×EÔEÐ×E×EÒEÐ$×E×EÒEÐ&×E×E×E×E×EÐE¬&×E×EÓE¬&×E×EÔE¨-×E×EÒE¸×E×EÒEÐ*E×E×E×E×E×E×E×EÔEr$   c                 ón  — t        | g d¢g d¢g d¢g d¢¬«      }|j                  j                  d   }| }|s8ddt        j                  |«      iz  }t        t        j                  |«      «      ‚d x}}|j                  j                  d   }d	}||k(  }|slt        j                  d
|fd||f«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}|j                  dg d¢f   }|j                  } |«       }|s`dt        j                  |«      t        j                  |«      t        j                  |«      dœz  }	t        t        j                  |	«      «      ‚d x}x}}|j                  j                  d   }t        j                  }d}
 ||
«      }||k(  }|sÝt        j                  d
|fd||f«      t        j                  |«      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}x}
}y )N)r:   é[   éF   )TFF)FFT)r:   éÈ   r:   )r	   rH   zassert not %(py1)srK   r:   r=   rI   rJ   rL   rD   é   )Úscore_exit_flagÚtrailing_exit_flagÚentry_loss_flagz>assert %(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.all
}()
})rK   rP   rQ   é   )zL%(py1)s == %(py9)s
{%(py9)s = %(py5)s
{%(py5)s = %(py3)s.approx
}(%(py7)s)
}rN   )rK   rP   rQ   rR   rE   rF   rG   )r8   ra   rc   rY   r^   r_   r`   Ú
trade_highrZ   ÚlocÚallrb   rN   rd   r[   r\   r]   )r4   r?   rl   rm   Ú@py_format3rf   rn   ro   rp   Ú@py_format6rq   rh   rj   rk   s                 r"   Ú3test_simultaneous_overshoot_fill_bar_high_exclusionr†       sÂ  € Ü�;¢Ò/CÒEYÒ`oÔp€EØ×!Ñ!×&Ñ& qÑ)Ð)Ð)Ð)Ð)Ñ)×)×)Ð)Ð)×)×)×)×)×)Ñ)Ø×Ñ× Ñ  Ñ#Ð* sÐ*Ð# sÑ*×*×*Õ*Ð# s×*×*Ó*Ð#×*×*Ò* s×*×*×*×*×*×*Ó*Ø�9‰9�QÒTÐTÑUÐ[ÐU×YÑYÐ[ÑYÓ[Ð[Ñ[×[×[ÐU×[×[Ò[ÐY×[×[Ò[Ð[×[×[×[×[×[Ô[Ø×)Ñ)×.Ñ.¨qÑ1ÐF´V·]±]ÐFÀ2ÐF±]À2Ó5FÐFÐ1Ð5FÑF×F×FÕFÐ1Ð5F×F×FÓFÐ1×F×F×F×F×FÐF´V×F×FÓF´V×F×FÔF°]×F×FÒFÀ2×F×FÒFÐ5F×F×F×F×F×F×F×FÐFr$   c                 ó–  — t        | ddgddgddg«      }|j                  }|j                  } |«       }| }|s¡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}}|j                  }|j                  } |«       }ddg}||k(  }|sÕt        j                  d	|fd
||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}x}x}}t        |«      }
|
j                  } |«       }t        j                  }ddg} ||«      }||k(  }|�s�t        j                  d	|fd||f«      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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}x}x}x}}y )Nr:   én   TFúdassert not %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.execute_exit
}.any
}()
}r?   ©rA   rB   rC   rD   rH   r=   ©zc%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.position
}.tolist
}()
} == %(py9)sr@   rF   rG   r   gR¸…ëQ¸?rM   r   rN   rO   rU   rV   )r8   ra   Úanyr[   r\   rY   r]   r^   r_   r`   ÚpositionrX   rZ   r   rN   rd   )r4   r?   re   rf   rg   ri   Ú@py_format8rh   rj   rk   rm   rp   rq   rr   rs   rt   ru   rv   s                     r"   Ú(test_terminal_mark_and_no_entry_bar_exitr�   (   sK  € Ü�;  c 
¨T°5¨M¸DÀ%¸=ÓI€EØ×!Ñ!Ð'Ð!×%Ñ%Ð'Ñ%Ó'Ð'Ð'Ð'Ð'Ñ'×'×'×'×'Õ'ˆu×'×'Ó'ˆu×'×'Ô'Ð!×'×'Ò'Ð%×'×'Ò'Ð'×'×'×'×'×'Ö'Ø�>‰>Ð,ˆ>× Ñ Ð,Ñ Ó"Ð, q¨! fÐ,Ð" fÑ,×,×,Õ,Ð" f×,×,×,×,×,Ñ,ˆ5×,×,Ó,ˆ5×,×,Ô,ˆ>×,×,Ò,Ð ×,×,Ò,Ð"×,×,Ò, f×,×,×,×,×,×,×,Ü�uÓÐBÐ×$Ñ$ÐBÑ$Ó&ÐB¬&¯-©-ÐB¸¸D¸	ÐB©-¸	Ó*BÐBÐ&Ð*BÑB×B×BÖBÐ&Ð*B×B×B×B×B×BÑBŒ;×B×BÓBŒ;×B×B×B×B×BÒB�u×B×BÓB�u×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×B×B×B×B×B×BÔBr$   c                 óP  — t         j                  j                  d«      }dt        j                  t        j                  |j                  dd| «      «      «      z  }t        j                  t        t        j                  d| d¬«      ||dz  |j                  d	d
| «      ¬«      «      S )NiÝ  r:   r   g¸…ëQ¸®?r   r   r   g¤p=
×£ð?ipþÿÿi�  ©r   r   r	   Úactivation_score)r,   ÚrandomÚdefault_rngÚexpÚcumsumÚnormalr(   r)   r*   r+   Úuniform)r6   Úrngr   s      r"   Úsynthetic_framerš   /   s�   € Ü
�)‰)×
Ñ
 Ó
$€CØ”—‘”r—y‘y §¡¨A¨s°AÓ!6Ó7Ó8Ñ8€EÜ�<‰<œ¤"§-¡-°ÀaÈdÔ"SØ˜% ™*°s·{±{À4ÈÈaÓ7PôRó Sð Sr$   c            
      ó  — t        «       } t        t        j                  «      }|t	        j
                  t        | «      «      | j                  j                  «       | j                  j                  «       f}t        | j                  «       g|¢­Ž }t        j                  | j                  «       g|¢­Ž }dD ](  }t        j                  j                  ||   ||   «       Œ* t        j                  j                  t!        |«      t!        |«      «       t        j                  | j                  «       g|¢­ddiŽ}t#        dt        | «      «      D ]®  }t        j                  | j$                  d | j                  «       |t	        j
                  |«      | j                  j                  «       d | | j                  j                  «       d | d¬«      }t&        j                  j)                  ||j$                  d | «       Œ° y )N©r�   rW   ra   r&   r   rH   r%   )rš   r*   ÚrunnerÚFROZENr,   r/   r'   r   Úto_numpyr	   r   Úcopyr2   r3   ÚtestingÚassert_array_equalr   Úrangerc   r(   Úassert_frame_equal)	r7   ÚparamsÚargsÚ	canonicalÚcontrolÚkeyÚfullr6   Úprefixs	            r"   Ú-test_control_equivalence_and_prefix_causalityr¬   6   sw  € ÜÓ€EÜ”&—-‘-Ó €FØ”B—H‘HœS ›ZÓ(¨%¯+©+×*>Ñ*>Ó*@À%Ç*Á*×BUÑBUÓBWÐX€DÜ! %§*¡*£,Ð6°Ò6€IÜ×'Ñ'¨¯
©
«Ð<°tÒ<€GÛ<ˆÜ
�
‰
×%Ñ% i°¡n°g¸c±lÕCð =ä‡J�J×!Ñ!¤+¨iÓ"8¼+ÀgÓ:NÔOÜ×$Ñ$ U§Z¡Z£\ÐL°DÒLÈÑL€DÜ�1”c˜%“jÖ!ˆÜ×*Ñ*¨5¯:©:°b°q¨>×+>Ñ+>Ó+@À&Ì"Ï(É(ÐSTË+Ø�K‰K× Ñ Ó" 2 AÐ&¨¯
©
×(;Ñ(;Ó(=¸b¸qÐ(AÐQTôVˆä
�
‰
×%Ñ% f¨d¯i©i¸¸¨mÕ<ñ "r$   c                 óÄ  — t        | ddgdgdz  z   dgdgdz  z   «      }t        |«      |d<   t        j                  |j                  j                  d	d¬
«      j                  t        «      |j                  j                  t        «      z   z  |d<   t        j                  ||«      }d„ |d   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}}|d   d   d   d   d   }|s8ddt        j                  |«      iz  }t!        t        j"                  |«      «      ‚d }|j$                  dd …dfxx   t'        j(                  d¬«      z  cc<   d„ t        j                  ||«      d   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}}t        j                  |j*                  d d |j*                  d d «      d   d   d   d   d   }d}||k(  }|slt        j,                  d|fd||f«      t        j                  |«      t        j                  |«      dœz  }d d!|iz  }	t!        t        j"                  |	«      «      ‚d x}x}}y )"Nr:   r;   éi   é   TFé   Ú
net_returnrH   )Ú
fill_valueÚ
fee_returnc              3   ó*   K  — | ]  }|d    du –— Œ y­w)ÚcensoredNr   ©Ú.0Úxs     r"   Ú	<genexpr>z8test_diagnostics_censors_gaps_and_end.<locals>.<genexpr>K   s   è ø€ ÐSÑ.R¨ˆq�‰} Ô$Ñ.Rùs   ‚Úexit_eventsr   Ú
recoveriesz,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}rƒ   )rA   rB   rC   Úrecovered_entryzassert %(py1)srK   é   r   é   )Úhoursc              3   ó,   K  — | ]  }|d    dk(  –— Œ y­w)rµ   ÚgapNr   r¶   s     r"   r¹   z8test_diagnostics_censors_gaps_and_end.<locals>.<genexpr>N   s   è ø€ ÐnÑ-m¨ˆq�‰}˜eÕ#Ñ-mùs   ‚rµ   Úend_of_datar=   rI   rJ   rL   rD   )r8   r   r�   ÚCOMMISSION_RATErW   ÚshiftÚastypeÚfloatra   Údiagnosticsrƒ   r[   r\   rY   r]   r^   r_   r`   r‚   r(   Ú	Timedeltarc   rZ   )
r4   r?   Údiagre   rf   rn   rl   Ú@py_format2rm   ro   s
             r"   Ú%test_diagnostics_censors_gaps_and_endrË   F   s•  € Ü�;  b 	¨3¨%°©(Ñ 2°T°F¸E¸7À2¹:Ñ4EÓF€EÜ% eÓ,€Eˆ,ÑÜ ×0Ñ0°%×2EÑ2E×2KÑ2KÈAÐZ_Ð2KÓ2`×2gÑ2gÔhmÓ2nÐot÷  pBñ  pB÷  pIñ  pIô  JOó  pPñ  3Pñ  Q€Eˆ,ÑÜ×Ñ˜e UÓ+€DÙS¨d°=Ñ.AÀ!Ñ.DÀ\Ò.RÓSÐSŒ3ÐSÓSÐSÑS×S×S×S×SÕSŒ3×S×SÓSŒ3×S×SÔSÐS×S×SÒSÐS×S×S×S×S×SÒSØ�Ñ˜qÑ! ,Ñ/°Ñ2Ð3DÑEÐEÑE×E×EÐEÐE×E×E×E×E×EØ	‡I�Iˆa‰b�&ˆjÓœRŸ\™\°Ô2Ñ2ÓÙn¬V×-?Ñ-?ÀÀuÓ-MÈmÑ-\Ð]^Ñ-_Ð`lÒ-mÓnÐnŒ3ÐnÓnÐnÑn×n×n×n×nÕnŒ3×n×nÓnŒ3×n×nÔnÐn×n×nÒnÐn×n×n×n×n×nÒnÜ×Ñ˜eŸj™j¨¨!˜n¨e¯j©j¸¸!¨nÓ=¸mÑLÈQÑOÐP\Ñ]Ð^_Ñ`ÐakÑlÐ{Ðn{Ð{ÐlÐn{Ñ{×{×{Õ{ÐlÐn{×{×{Ó{Ðl×{×{Ò{Ðn{×{×{×{×{×{×{Ô{r$   c                 ó  ‡ ‡!— t         j                  Š!t        d«      Š t        j                  dt        ‰ «      d¬«      ‰ d<   t        dddi¬	«      }d4ˆ ˆ!fd
„	}| j                  t         d|«       t        t         j                  dd¬«      }t        j                  ||d d¬«      }t        j                  ||d «      }t        j                  ||«       t        j                  |d   |d«      }t        j                  |t        |d¬«      d«      \  }}t        j                  ||d«      }|d   }	|d   }
|	|
k7  }|slt        j                  d|fd|	|
f«      t        j                  |	«      t        j                  |
«      dœz  }dd|iz  }t!        t        j"                  |«      «      ‚d x}	x}}
|d   }	|d   }
|	|
k(  }|slt        j                  d|fd|	|
f«      t        j                  |	«      t        j                  |
«      dœz  }dd|iz  }t!        t        j"                  |«      «      ‚d x}	x}}
d}t%        |«      }|j&                  }|d    } ||«      }t        |«      } ‰!«       }|j(                  }t        |«      }d!}||z   }||k(  }|�s(t        j                  d|fd"||f«      d#t+        j,                  «       v st        j.                  t
        «      rt        j                  t
        «      nd#d$t+        j,                  «       v st        j.                  t$        «      rt        j                  t$        «      nd$t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      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                  |«      t        j                  |«      d&œz  }d'd(|iz  }t!        t        j"                  |«      «      ‚d x}x}x}x}x}x}x}x}x}x}x}}t        j0                   ‰!«       ||«      d)   }	 ‰!«       }|j2                  } |||«      }|	|k(  }|�sWt        j                  d|fd*|	|f«      t        j                  |	«      d%t+        j,                  «       v st        j.                  ‰!«      rt        j                  ‰!«      nd%t        j                  |«      t        j                  |«      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  }d,d-|iz  }t!        t        j"                  |«      «      ‚d x}	x}x}x}} ‰!«       }|j4                  }
|
t4        u }|sút        j                  d.|fd/|
t4        f«      d%t+        j,                  «       v st        j.                  ‰!«      rt        j                  ‰!«      nd%t        j                  |«      t        j                  |
«      d0t+        j,                  «       v st        j.                  t4        «      rt        j                  t4        «      nd0d1œz  }d2d3|iz  }t!        t        j"                  |«      «      ‚d x}x}
}y )5Ni°6  z
2017-01-01r   r   r   zsynthetic-contractÚ	syntheticÚsha)ÚfingerprintÚartifact_hashesc                 ó.   •—  ‰| |«      }ˆfd„|_         |S )Nc                  ó¨   •— ‰t        j                  t        ‰«      «      ‰j                  j	                  «       ‰j
                  j	                  «       fS r   )r,   r/   r'   r   rŸ   r	   )r   r7   s    €r"   r#   zatest_evaluator_integration_control_metrics_identity_and_gates.<locals>.isolated.<locals>.<lambda>Y   s8   ø€ ¨u´b·h±h¼sÀ5»zÓ6JÈEÏKÉK×L`ÑL`ÓLbÐdi×dnÑdn×dwÑdwÓdyÑ.zr$   )Úload_scored_frame)ÚsnapshotÚsignalÚmoduler7   Úoriginals      €€r"   ÚisolatedzOtest_evaluator_integration_control_metrics_identity_and_gates.<locals>.isolatedW   s   ø€ Ù˜( FÓ+ˆÛ#zˆÔ Øˆr$   Ú	evaluatorÚcurrent)Úmlp_weights_fileÚsourceT)r§   r   ÚbaselineÚ	candidate)rÜ   r   Úentry_loss_10pctÚEvaluation_Key)ú!=)z%(py1)s != %(py4)srJ   rL   rD   ÚComparison_Fingerprintr=   rI   ÚjsonÚPeriod_Measurementsé   )zô%(py13)s
{%(py13)s = %(py0)s(%(py11)s
{%(py11)s = %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py1)s(%(py3)s)
}.loads
}(%(py9)s)
})
} == (%(py22)s
{%(py22)s = %(py15)s(%(py20)s
{%(py20)s = %(py18)s
{%(py18)s = %(py16)s()
}.WFO_FOLDS
})
} + %(py24)s)r'   Ú
__import__r×   )rA   rK   rP   rQ   rR   rE   rG   rS   rT   Úpy16Úpy18Úpy20Úpy22Úpy24zassert %(py27)sÚpy27Ú	qualifies)zr%(py1)s == %(py11)s
{%(py11)s = %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s()
}.promotable
}(%(py8)s, %(py9)s)
})rK   rP   rQ   rR   Úpy8rE   rG   zassert %(py13)srS   )Úis)zP%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s()
}._score_to_signals
} is %(py6)sr   rŠ   zassert %(py8)srî   )NN)r�   rÙ   rš   r(   r+   r'   r   r1   r*   rž   Úevaluate_policyÚassert_controlÚidentifyrY   rZ   r^   r_   r`   ræ   ÚloadsÚ	WFO_FOLDSr[   r\   r]   Úgate_decisionsÚ
promotabler   )"r4   rÔ   rØ   r¥   r§   ÚdisabledrÝ   rÞ   Ú_rl   rf   rm   rn   ro   rp   rq   rh   rr   rs   Ú@py_assert17Ú@py_assert19Ú@py_assert21Ú@py_assert23Ú@py_assert25rt   Ú@py_format26Ú@py_format28rk   Ú@py_format14re   rg   Ú@py_format9r7   r×   s"                                   @@r"   Ú=test_evaluator_integration_control_metrics_identity_and_gatesr  R   sÛ  ù€ Ü×Ñ€HÜ˜EÓ"€EÜ—M‘M ,¼¸E»
ÈÔN€Eˆ&�MÜÐ+?ÐR]Ð_dÐQeÔf€Höð ×Ñœ ¨XÔ6Ü”&—-‘-°+ÀiÔP€FÜ×&Ñ& x°¸ÈÔN€IÜ×%Ñ% h°¸Ó=€HÜ
×Ñ˜) XÔ.Ü�‰˜x¨™{¨H°jÓA€HÜ×)Ñ)¨(´D¸ÈÔ4TÐVYÓZ�L€IˆqÜ—‘ 	¨8Ð5GÓH€IØÐ%Ñ&ÐD¨(Ð3CÑ*DÐDÐ&Ð*DÑD×D×DÕDÐ&Ð*D×D×DÓDÐ&×D×DÒDÐ*D×D×D×D×D×D×DÓDØÐ-Ñ.ÐT°(Ð;SÑ2TÐTÐ.Ð2TÑT×T×TÕTÐ.Ð2T×T×TÓTÐ.×T×TÒTÐ2T×T×T×T×T×T×TÓTØ ÐiŒz˜&Ó!ÐiÐ!×'Ñ'Ði¨	Ð2GÑ(HÐiÑ'Ð(HÓIÐiŒ3ÐIÓJÐiÑRZÓR\ÐiÐR\×RfÑRfÐiÌcÐRfÓNgÐiÐhiÐiÐNgÐhiÑNiÐiÐJÐNiÑi×i×iÖiÐJÐNi×i×i×i×i×iÑiŒ3×i×iÓiŒ3×i×i×i×i×iÒiŒz×i×iÓiŒz×i×iÔi˜&×i×iÒiÐ!×i×iÒiÐ'×i×iÒiÐ(H×i×iÒiÐI×i×iÒiÐJ×i×i×i×i×iÐiÌc×i×iÓiÌc×i×i×i×i×iÒiÐRZ×i×iÓiÐRZ×i×iÔiÐR\×i×iÒiÐRf×i×iÒiÐNg×i×iÒiÐhi×i×i×i×i×i×i×i×iÕiÜ× Ñ ¡£¨Y¸ÓAÀ+ÑNÐ|ÑRZÓR\Ð|ÐR\×RgÑRgÐ|ÑRgÐhqÐs{ÓR|Ð|ÐNÐR|Ñ|×|×|Ö|ÐNÐR|×|×|Ó|ÐN×|×|×|×|×|Ð|ÐRZ×|×|Ó|ÐRZ×|×|Ô|ÐR\×|×|Ò|ÐRg×|×|×|×|×|Ð|Ðhq×|×|Ó|Ðhq×|×|×|×|×|Ò|Ðs{×|×|Ó|Ðs{×|×|Ô|ÐR|×|×|×|×|×|×|×|Ù‹:Ð<ˆ:×'Ñ'Ð<Ð'Ô+<Ð<×<×<Õ<Ð'Ô+<×<×<×<×<×<Ñ<ˆ8×<×<Ó<ˆ8×<×<Ô<ˆ:×<×<Ò<Ð'×<×<×<×<×<Ð<Ô+<×<×<Ó<Ô+<×<×<×<×<×<×<Ö<r$   c            	      ó–   — t        j                  t        «      5  t        j                  d d d d d d¬«       d d d «       y # 1 sw Y   y xY w)Ng333333³?r%   )rN   ÚraisesÚ
ValueErrorr2   r3   r   r$   r"   Útest_reject_other_percentagesr  j   s2   € Ü	�‰”zÕ	"Ü×!Ñ! $¨¨d°D¸$ÈdÕS÷ 
#×	"Ñ	"ús	   š?¿Ac            	      ó,  — t        j                  t        t        j                  ddd¬«      g d¢g d¢g d¢¬«      «      } t        t        j
                  dd	¬
«      }|t        j                  d«      | j                  j                  «       | j                  j                  «       f}t        j                  | j                  «       g|¢­ddiŽ}t        j                  | j                  «       g|¢­Ž }t        | j                  «       g|¢­Ž }|j                  }|j                   } |«       }g d¢}	||	k(  }
|
sÕt#        j$                  d|
fd||	f«      dt'        j(                  «       v st#        j*                  |«      rt#        j,                  |«      ndt#        j,                  |«      t#        j,                  |«      t#        j,                  |«      t#        j,                  |	«      dœz  }dd|iz  }t/        t#        j0                  |«      «      ‚d x}x}x}x}
}	|j2                  }|j                   } |«       }g d¢}	||	k(  }
|
sÕt#        j$                  d|
fd||	f«      dt'        j(                  «       v st#        j*                  |«      rt#        j,                  |«      ndt#        j,                  |«      t#        j,                  |«      t#        j,                  |«      t#        j,                  |	«      dœz  }dd|iz  }t/        t#        j0                  |«      «      ‚d x}x}x}x}
}	|j4                  }|j6                  } |«       }| }
|
s¡ddt'        j(                  «       v st#        j*                  |«      rt#        j,                  |«      ndt#        j,                  |«      t#        j,                  |«      t#        j,                  |«      dœz  }t/        t#        j0                  |«      «      ‚d x}x}x}}
dD ](  }t        j8                  j;                  ||   ||   «       Œ* y )Nr   rå   r   r   )ç      Y@r  g     €Q@g      N@)r  r  r  r  )r  g        g     ÀrÀg      yÀr‘   z2020-01-01 06:00)Ú_pine_time_startÚ_pine_time_endr&   r   )FFTTr=   )zj%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.entry_loss_flag
}.tolist
}()
} == %(py9)srÞ   r@   rF   rG   )r   rH   rH   rH   r‹   r‰   rŠ   rœ   )r(   r)   r*   r+   r�   rž   r,   r/   r   rŸ   r	   r2   r3   r    r   r   rX   rY   rZ   r[   r\   r]   r^   r_   r`   r�   ra   rŒ   r¡   r¢   )r7   r¥   r¦   rÞ   r¨   r§   re   rf   rg   rh   ri   rj   rk   rŽ   r©   s                  r"   Ú*test_time_window_disallows_close_after_endr  o   s«  € Ü�L‰Lœ¤2§=¡=°ÀqÈtÔ#TÚ$Ò+CÚ1ô3ó 4€Eô ”&—-‘-°,ÐOaÔb€FØ”B—H‘H˜Q“K §¡×!5Ñ!5Ó!7¸¿¹×9LÑ9LÓ9NÐO€DÜ×)Ñ)¨%¯*©*«,ÐQ¸ÒQÈSÑQ€IÜ×'Ñ'¨¯
©
«Ð<°tÒ<€GÜ! %§*¡*£,Ð6°Ò6€IØ×$Ñ$ÐKÐ$×+Ñ+ÐKÑ+Ó-ÐKÒ1KÐKÐ-Ð1KÑK×K×KÕKÐ-Ð1K×K×K×K×K×KÑKˆ9×K×KÓKˆ9×K×KÔKÐ$×K×KÒKÐ+×K×KÒKÐ-×K×KÒKÐ1K×K×K×K×K×K×K×KØ×ÑÐ6Ð×$Ñ$Ð6Ñ$Ó&Ð6ª,Ð6Ð&¨,Ñ6×6×6Õ6Ð&¨,×6×6×6×6×6Ñ6ˆ9×6×6Ó6ˆ9×6×6Ô6Ð×6×6Ò6Ð$×6×6Ò6Ð&×6×6Ò6¨,×6×6×6×6×6×6×6Ø×%Ñ%Ð+Ð%×)Ñ)Ð+Ñ)Ó+Ð+Ð+Ð+Ð+Ñ+×+×+×+×+Õ+ˆy×+×+Ó+ˆy×+×+Ô+Ð%×+×+Ò+Ð)×+×+Ò+Ð+×+×+×+×+×+Ö+Û<ˆÜ
�
‰
×%Ñ% g¨c¡l°I¸c±NÕCñ =r$   r   )éP   )"Ú__doc__Úbuiltinsr[   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterY   Útypesr   Únumpyr,   Úpandasr(   rN   Ú
strategiesr   r2   Ústrategies.mlp_accountingr   Ústrategies.strategy_mlp_scoresr   Útoolsr   r�   r8   rw   r†   r�   rš   r¬   rË   r  r  r  r   r$   r"   Ú<module>r     si   ðÙ Oß  „ Õ !ã Û Û å /Ý 1Ý <Ý 9ð{¸tÈ#ô {òFòGòCóSò=ò 	|ò=ò0Tó
Dr$   