
    뒇j
                     `    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 d Zd Zd Zd Zd Zy)    Nc                     t        j                  g d      } t        j                  | dd      }dg}||k(  }|st	        j
                  d|fd||f      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}}y )N)              Y@     @@r   r      )leftrightr      r   ==)z%(py0)s == %(py3)spivots)py0py3zassert %(py5)spy5)nparraystudyconfirmed_pivot_highs
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)scoresr   @py_assert2@py_assert1@py_format4@py_format6s         P/Users/jameslopez/projects/TradingBot25/tests/test_mlp_score_peak_event_study.pyAtest_confirmed_pivots_are_not_available_before_right_confirmationr$      s    XX56F((aqAF#_$6_$$$$6_$$$$$$6$$$6$$$_$$$$$$$    c                  n   g d} t        j                  | d      }|D cg c]  }|d   	 }}ddg}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|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}}|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 c c}w )N)r
   )           @o@
      r)   )            i@)       r)   ).   0   r      horizonevent_indexr,   r1   r   z%(py1)s == %(py4)spy1py4assert %(py6)spy6r   first_scorer   second_scorer)   r   detect_deterioration_eventsr   r   r   r   r   r   eventsevent@py_assert0@py_assert3r   @py_format5@py_format7s           r#   =test_event_rules_enforce_thresholds_spacing_and_deduplicationrI      s3   	F ..vrBF.45fUE- fA5"bA5AAAA5AAA5AAAAAAAAAA!9]#,u,#u,,,,#u,,,#,,,u,,,,,,,!9^$--$----$---$---------- 6s   F2c                  b   g d} t        j                  | d      }|D cg c]  }|d   	 }}ddg}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}y c c}w )N)r
   r*   )      r/   )      r/   r4   r5   r7   r,   rN   r   r8   r9   r<   r=   r@   rB   s           r#   =test_dedup_allows_the_first_event_after_the_inclusive_horizonrO   "   s    F ..vrBF.45fUE- fA5"bA5AAAA5AAA5AAAAAAAAAA5s   B,c                     t        j                  g d      } t        j                  | dd      }|d   d   }t        j
                  }d} ||      }||k(  }|st        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}}|d   d   }t        j
                  }d} ||      }||k(  }|st        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}}|d   d   }t        j
                  }d} ||      }||k(  }|st        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}}|d   d   }t        j
                  }d}| } ||      }	||	k(  }|st        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}x}}	y )N)r   r   r   r   g     [@g     V@g      ^@   )   rQ   )r7   horizonsrR   
return_pctg      $@r   )zL%(py1)s == %(py9)s
{%(py9)s = %(py5)s
{%(py5)s = %(py3)s.approx
}(%(py7)s)
}pytest)r:   r   r   py7py9zassert %(py11)spy11mae_pctr   g      4@)zO%(py1)s == %(py10)s
{%(py10)s = %(py5)s
{%(py5)s = %(py3)s.approx
}(-%(py7)s)
})r:   r   r   rV   py10assert %(py12)spy12)r   r   r   forward_metricsrU   approxr   r   r   r   r   r   r   r   )closesmetricsrE   @py_assert4@py_assert6@py_assert8r   @py_format10@py_format12@py_assert9@py_format11@py_format13s               r#   Etest_forward_returns_and_mae_are_close_to_close_and_capped_at_horizonri   /   s   XXFGF##FFKG1:l#:v}}:T:}T'::#':::::#'::::#::::::v:::v:::}:::T:::'::::::::1:i 6FMM6#6M#$66 $66666 $6666 666666F666F666M666#666$666666661:l#:v}}:T:}T'::#':::::#'::::#::::::v:::v:::}:::T:::'::::::::1:i 8FMM8484%8M%$88 $88888 $8888 888888F888F888M8884888$888888888r%   c                     t        j                  ddd      } t        j                  | t        j                  dd      d      }dddg}t        j                  ||d	d
d      }t        |      }d}||k(  }|st        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                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d   }	h d}
|	|
v}|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            d x}	x}}
|j                   |d   df   }d}
||
z
  }t#        |      }d
}||k  }|st        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                  |      dz  }d d!|iz  }t        t        j                  |            d x}x}
x}x}x}}y )"Nz
2024-01-01r0   6h)periodsfreqr/   )timeactivation_scorer+   )r7   event_scorerQ   g      I@)r6   
score_bandregion_daysrR   r   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slencontrols)r   r:   r   r=   zassert %(py8)spy8r   >   r+   r(   r,      )not in)z%(py1)s not in %(py4)sr9   r<   r=   ro   )<=)z=%(py7)s
{%(py7)s = %(py0)s((%(py2)s - %(py4)s))
} <= %(py10)sabs)r   py2r;   rV   rZ   r[   r\   )pd
date_range	DataFramer   fullr   match_controlsrs   r   r   r   r   r   r   r   r   locry   )timesframerC   rt   r   @py_assert5ra   rH   @py_format9rE   rF   rG   r    rb   rf   rc   rg   rh   s                     r#   Ftest_controls_are_score_matched_same_region_and_exclude_event_horizonsr   9   s   MM,>ELL%RWWR=OPQE 78F##E61[]^Hx=A=A=A33xx=AA;...;.....;....;...........yy!&889JEJ9EAJ3ABJdJBdJJJJBdJJJJJJ3JJJ3JJJ9JJJEJJJBJJJdJJJJJJJJr%   )builtinsr   _pytest.assertion.rewrite	assertionrewriter   numpyr   pandasr{   rU   $tools.run_mlp_score_peak_event_studyrun_mlp_score_peak_event_studyr   r$   rI   rO   ri   r    r%   r#   <module>r      s1          4%.&
B9	Kr%   