Ë
    VE±jp  ã                   ó,  — 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mZmZ d dlmZ  e«       ddd fd„Zd„ Zd„ Zd„ Zd„ Ze
j*                  j-                  d	d
dg«      e
j*                  j-                  dd dg«      d„ «       «       Zd„ Zd„ Zd„ Zd„ Zd„ Zy)é    N)ÚStatePolicyÚreplay_state_policy)Ú_score_to_signalsc                 ó~  — t        | «      }t        t        j                  | t        «      t        j                  |t        «      t        j                  |t        «      t        j
                  |«      d|€t        j                  |«      dz  nt        j                  |«      t        j                  |«      dz  |||¬«
      S )Nr   éd   )ÚpolicyÚrisk)Úlenr   ÚnpÚarrayÚboolÚzerosÚones)ÚentryÚexitsr   r	   ÚcloseÚtrailÚns          úF/Users/jameslopez/projects/TradingBot25/tests/test_mlp_state_policy.pyÚreplayr   	   s„   € ÜˆE‹
€AÜœrŸx™x¨¬tÓ4´b·h±h¸uÄdÓ6KÜ
�‰�œÓœrŸx™x¨›{¨AÀ5À=¬r¯w©w°q«z¸CÒ/?ÔVX×V^ÑV^Ð_dÓVeÜ
�‰�‹
�SÑ˜%¨°Tô;ð ;ó    c            	      óÊ  — t        dgdz  dgdz  t        d¬«      g d¢«      } | d   }|j                  } |«       }g d¢}||k(  }|s”t        j                  d	|fd
||f«      t        j
                  |«      t        j
                  |«      t        j
                  |«      t        j
                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}| d   }|j                  } |«       }dg}d}||z  }	ddg}
|	|
z   }||k(  }|s¼t        j                  d	|fd||f«      t        j
                  |«      t        j
                  |«      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}
}y )Né   é   r   é   ©Úmacro_memory©r   r   r   r   r   Úexecute_entry)FFFTF©ú==©zE%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.tolist
}()
} == %(py8)s©Úpy1Úpy3Úpy5Úpy8úassert %(py10)sÚpy10Úpolicy_actionÚ	stay_flaté   Ú
enter_longÚ	hold_long)z_%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.tolist
}()
} == ((%(py8)s * %(py10)s) + %(py13)s))r$   r%   r&   r'   r)   Úpy13úassert %(py16)sÚpy16©r   r   ÚtolistÚ
@pytest_arÚ_call_reprcompareÚ	_safereprÚAssertionErrorÚ_format_explanation)ÚresultÚ@py_assert0Ú@py_assert2Ú@py_assert4Ú@py_assert7Ú@py_assert6Ú@py_format9Ú@py_format11Ú@py_assert9Ú@py_assert11Ú@py_assert12Ú@py_assert14Ú@py_format15Ú@py_format17s                 r   Ú6test_macro_blocks_trigger_and_exactly_n_following_barsrG      sj  € Ü�Q�C˜‘E˜A˜3˜q™5¤+¸1Ô"=ºÓO€FØ�/Ñ"ÐQÐ"×)Ñ)ÐQÑ)Ó+ÐQÒ/QÐQÐ+Ð/QÑQ×Q×QÕQÐ+Ð/Q×Q×QÓQÐ"×Q×QÒQÐ)×Q×QÒQÐ+×Q×QÒQÐ/Q×Q×Q×Q×Q×Q×Q×QØ�/Ñ"Ð\Ð"×)Ñ)Ð\Ñ)Ó+Ð\°¨}Ð\¸QÐ\¨}¸Q©Ð\À,ÐP[ÐA\Ð\¨ÐA\Ñ/\Ð\Ð+Ð/\Ñ\×\×\Õ\Ð+Ð/\×\×\Ó\Ð"×\×\Ò\Ð)×\×\Ò\Ð+×\×\Ò\¨}×\×\Ò\¸Q×\×\Ò\ÐA\×\×\×\×\×\×\×\×\Ð\r   c                  óÀ  — t        dgdz  g d¢t        d¬«      «      } | d   }|j                  } |«       }g d¢}||k(  }|s”t        j                  d|fd	||f«      t        j
                  |«      t        j
                  |«      t        j
                  |«      t        j
                  |«      d
œz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )Nr   é   )r   r   r   r   r   r   r   )Úexit_cooldownÚposition)r   r   r   r   r   r   r    r"   r#   r(   r)   r2   ©r9   r:   r;   r<   r=   r>   r?   r@   s           r   Ú*test_exit_cooldown_and_no_same_bar_reentryrM      s¢   € Ü�Q�C˜‘EÒ-¬{ÈÔ/KÓL€FØ�*ÑÐ<Ð×$Ñ$Ð<Ñ$Ó&Ð<Ò*<Ð<Ð&Ð*<Ñ<×<×<Õ<Ð&Ð*<×<×<Ó<Ð×<×<Ò<Ð$×<×<Ò<Ð&×<×<Ò<Ð*<×<×<×<×<×<×<×<Ð<r   c                  ó¼  — t        g d¢g d¢t        d¬«      «      } | d   }|j                  } |«       }g d¢}||k(  }|s”t        j                  d|fd||f«      t        j
                  |«      t        j
                  |«      t        j
                  |«      t        j
                  |«      d	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )Nr   )r   r   r   r   r   r,   ©Úmin_holdrK   )r   r   r   r   r   r    r"   r#   r(   r)   r2   rL   s           r   Ú(test_hold_latches_exit_until_minimum_agerQ      s—   € Ü’O¢_´kÈ1Ô6MÓN€FØ�*ÑÐ9Ð×$Ñ$Ð9Ñ$Ó&Ð9ª/Ð9Ð&¨/Ñ9×9×9Õ9Ð&¨/×9×9Ó9Ð×9×9Ò9Ð$×9×9Ò9Ð&×9×9Ò9¨/×9×9×9×9×9×9×9Ð9r   c                  óÆ  — t        g d¢g d¢t        d¬«      g d¢d¬«      } | d   }|j                  } |«       }g d	¢}||k(  }|s”t        j                  d
|fd||f«      t        j
                  |«      t        j
                  |«      t        j
                  |«      t        j
                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )N)r   r   r   )r   r   r   é   rO   )r   éP   rT   gš™™™™™¹?)r   r   Úexecute_exit)FTFr    r"   r#   r(   r)   r2   rL   s           r   Ú!test_trailing_stop_overrides_holdrV       s    € Ü’Išy¬+¸rÔ*BÊ-Ð_aÔb€FØ�.Ñ!Ð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   Úwindowr   r,   r   é
   c           	      óˆ  — t         j                  j                  d«      }t        j                  |j                  ddd«      t        j                  dd¬«      |j                  ddd«      t        j                  d«      d	z  d
œ«      }| |dddœ}|t        j                  d«      |j                  j                  «       |j                  j                  «       f}t        |j                  «       g|¢­Ž }t        |j                  «       g|¢­dt        «       iŽ}dD ](  }t         j                  j!                  ||   ||   «       Œ* y )Né   r   éÈ   i�  z
2020-01-01)ÚperiodsrT   r   ée   )Úactivation_scoreÚtimer   Úhighz
2020-02-01z
2020-11-01)Úi_exit_score_windowÚi_trailing_stop_thresholdÚ_pine_time_startÚ_pine_time_endÚstate_policy)rK   r   rU   )r   ÚrandomÚdefault_rngÚpdÚ	DataFrameÚnormalÚ
date_rangeÚuniformr   r   Úto_numpyr`   r   Úcopyr   ÚtestingÚassert_array_equal)	rW   r   ÚrngÚframeÚparamsÚargsÚbaseÚexperimentalÚcolumns	            r   Ú0test_null_policy_exactly_matches_existing_replayrx   %   s  € ô �)‰)×
Ñ
 Ó
#€CÜ�L‰L¨c¯j©j¸¸CÀÓ.EÜ"$§-¡-°ÀcÔ"JØ#&§;¡;¨r°3¸Ó#<ÄbÇgÁgÈcÃlÐSVÑFVñXó Y€Eð &,È%Ø".À,ñP€Fà”B—G‘G˜C“L %§+¡+×"6Ñ"6Ó"8¸%¿*¹*×:MÑ:MÓ:OÐP€DÜ˜UŸZ™Z›\Ð1¨DÒ1€DÜ$ U§Z¡Z£\ÐU°DÒUÄ{Ã}ÑU€LÛ?ˆÜ
�
‰
×%Ñ% d¨6¡l°LÀÑ4HÕIñ @r   c                  óð   — t        t        ddd¬«      ¬«      } t        dgdz  g d¢fdg d	¢i| ¤Ž}t        dgd
z  g d¢fdg d¢i| ¤Ž}|D ]+  }t        j                  j                  ||   d d
 ||   «       Œ- y )Nr   r,   )r   rJ   rP   )r   r   é   )r   r   r   r   r   r   r   r   r	   )r   r   r   r   r   r   r   r   é   ©r   r   r   r   )r   r   r   r   )Údictr   r   r   ro   rp   )ÚkwargsÚfullÚprefixrw   s       r   Útest_policy_is_prefix_causalr�   5   s}   € Üœ°!À1ÈqÔQÔR€FÜ�1�#�a‘%Ò1Ñ[Ò8PÐ[ÐTZÑ[€DÜ�Q�C˜‘Eš<ÑEªlÐE¸fÑE€FÛˆÜ
�
‰
×%Ñ% d¨6¡l°2°AÐ&6¸¸v¹ÕGñ r   c                  óx   — t        j                  t        «      5  t        d¬«       d d d «       y # 1 sw Y   y xY w)Néÿÿÿÿr   )ÚpytestÚraisesÚ
ValueErrorr   © r   r   Útest_negative_memory_rejectedrˆ   =   s"   € Ü	�‰”zÕ	"Ü Õ$÷ 
#×	"Ñ	"ús   š0°9c            
      óä  — t        dgdz  dgdz  t        d¬«      g d¢«      } t        j                  }| d   } ||«      }|j                  } |«       }dg}||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                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}x}x}x}x}}y )Nr   rI   r   r   r   )r   r   r   r   r   r   r   r   r    )z‡%(py10)s
{%(py10)s = %(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.flatnonzero
}(%(py4)s)
}.tolist
}()
} == %(py13)sr   )Úpy0Úpy2Úpy4Úpy6r'   r)   r/   zassert %(py15)sÚpy15)r   r   r   Úflatnonzeror3   r4   r5   Ú@py_builtinsÚlocalsÚ_should_repr_global_namer6   r7   r8   )
r9   Ú@py_assert1Ú@py_assert3Ú@py_assert5r=   rA   rC   rB   Ú@py_format14Ú@py_format16s
             r   Ú(test_repeated_macro_risk_refreshes_blockr˜   B   sò   € Ü�Q�C˜‘E˜A˜3˜q™5¤+¸1Ô"=Ò?QÓR€FÜ�>‰>ÐB˜& Ñ1ÐB‰>Ð1Ó2ÐBÐ2×9Ñ9ÐBÑ9Ó;ÐBÀ¸sÐBÐ;¸sÑB×B×BÖBÐ;¸s×B×B×B×B×BÑBŒ2×B×BÓBŒ2×B×BÔBˆ>×B×BÒBÐ1×B×BÒBÐ2×B×BÒBÐ9×B×BÒBÐ;×B×BÒB¸s×B×B×B×B×B×B×BÔBr   c                  óÞ  — t        t        j                  g d¢t        «      t        j                  g d¢t        «      t        j                  dt        «      t        j                  d«      dt        j
                  d«      dz  t        j
                  d«      dz  dt        d¬«      g d¢¬	«
      } | d
   }|j                  } |«       }g d¢}||k(  }|s”t        j                  d|fd||f«      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )N)r   r   r   r   r|   r{   r   r   r   rO   )TTFF)r   Útime_okrK   )r   r   r   r   r    r"   r#   r(   r)   )r   r   r   r   r   r   r   r3   r4   r5   r6   r7   r8   rL   s           r   Ú'test_deferred_exit_respects_time_windowr›   G   sï   € Ü ¤§¡ª,¼Ó!=¼r¿x¹xÊÔVZÓ?[Ü
�‰�”DÓœ2Ÿ8™8 A›;¨¬2¯7©7°1«:°c©>¼2¿7¹7À1»:Àc¹>È1Ü AÔ&Ò0JôL€Fð �*ÑÐ6Ð×$Ñ$Ð6Ñ$Ó&Ð6ª,Ð6Ð&¨,Ñ6×6×6Õ6Ð&¨,×6×6Ó6Ð×6×6Ò6Ð$×6×6Ò6Ð&×6×6Ò6¨,×6×6×6×6×6×6×6Ð6r   c                  ó¶  — t        j                  g d¢dgdz  dgdz  dœ«      } i t        j                  d«      | j                  j                  «       | j                  j                  «       f}t        | j                  «       g|¢­Ž }t        | j                  «       g|¢­dt        d¬«      iŽ}t        j                  }|j                  } ||«      }|j                  } |«       }dg}	||	k(  }
|
�sFt        j                  d	|
fd
||	f«      dt        j                   «       v st        j"                  t        «      rt        j$                  t        «      ndt        j$                  |«      dt        j                   «       v st        j"                  |«      rt        j$                  |«      ndt        j$                  |«      t        j$                  |«      t        j$                  |«      t        j$                  |«      t        j$                  |	«      dœz  }dd|iz  }t'        t        j(                  |«      «      ‚d x}x}x}x}x}x}
}	t        j                  }|j                  } ||«      }|j                  } |«       }dg}	||	k(  }
|
�sFt        j                  d	|
fd
||	f«      dt        j                   «       v st        j"                  t        «      rt        j$                  t        «      ndt        j$                  |«      dt        j                   «       v st        j"                  |«      rt        j$                  |«      ndt        j$                  |«      t        j$                  |«      t        j$                  |«      t        j$                  |«      t        j$                  |	«      dœz  }dd|iz  }t'        t        j(                  |«      «      ‚d x}x}x}x}x}x}
}	y )N)r[   r   r   r   r   r   r   g      Y@é   )r^   r   r`   re   r{   rO   r   r    )z©%(py11)s
{%(py11)s = %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py2)s
{%(py2)s = %(py0)s.flatnonzero
}(%(py5)s
{%(py5)s = %(py3)s.execute_exit
})
}.tolist
}()
} == %(py14)sr   Úbaseline)rŠ   r‹   r%   r&   Úpy7Úpy9Úpy11Úpy14r0   r1   r   Úheld)rh   ri   r   r   r   rm   r`   r   rn   r   r�   rU   r3   r4   r5   r�   r‘   r’   r6   r7   r8   )rr   rt   rž   r£   r“   r<   r>   Ú@py_assert8Ú@py_assert10Ú@py_assert13rC   rE   rF   s                r   Ú+test_policy_changes_real_score_signal_chainr§   N   sk  € Ü�L‰LÒ.EØ$( 6¨!¡8°d°V¸A±Xñ?ó @€Eà”—‘˜“
˜EŸK™K×0Ñ0Ó2°E·J±J×4GÑ4GÓ4IÐJ€DÜ  §¡£Ð5°Ò5€HÜ˜UŸZ™Z›\ÐW¨DÒW¼{ÐTUÔ?VÑW€DÜ�>‰>Ð@˜(×/Ñ/Ð@‰>Ð/Ó0Ð@Ð0×7Ñ7Ð@Ñ7Ó9Ð@¸a¸SÐ@Ð9¸SÑ@×@×@Ö@Ð9¸S×@×@×@×@×@Ñ@Œ2×@×@Ó@Œ2×@×@Ô@ˆ>×@×@×@×@×@Ð@˜(×@×@Ó@˜(×@×@Ô@Ð/×@×@Ò@Ð0×@×@Ò@Ð7×@×@Ò@Ð9×@×@Ò@¸S×@×@×@×@×@×@×@Ó@Ü�>‰>Ð<˜$×+Ñ+Ð<‰>Ð+Ó,Ð<Ð,×3Ñ3Ð<Ñ3Ó5Ð<¸!¸Ð<Ð5¸Ñ<×<×<Ö<Ð5¸×<×<×<×<×<Ñ<Œ2×<×<Ó<Œ2×<×<Ô<ˆ>×<×<×<×<×<Ð<˜$×<×<Ó<˜$×<×<Ô<Ð+×<×<Ò<Ð,×<×<Ò<Ð3×<×<Ò<Ð5×<×<Ò<¸×<×<×<×<×<×<×<Ô<r   )Úbuiltinsr�   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter4   Únumpyr   Úpandasrh   r„   Ústrategies.mlp_state_policyr   r   Ústrategies.strategy_mlp_scoresr   r   rG   rM   rQ   rV   ÚmarkÚparametrizerx   r�   rˆ   r˜   r›   r§   r‡   r   r   Ú<module>r²      s¤   ðß  „ Ó Û Û ç HÝ <ñ !,£°DÀÈAó ;ò]ò=ò
:ò
Cð
 ‡�×Ñ˜ A q 6Ó*Ø‡�×Ñ˜ 1 b 'Ó*ñJó +ó +ðJòHò%ò
Cò
7ó=r   