
    ށ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mZmZmZmZ d Zd Zd Zd Zd Zd Zd	 Zy)
    N)_windowcausal_event_framecalibrate_tailsprofile_featurerelative_tail_profilesc            	         t        j                  t        d      D  cg c]
  } dd| z  z    c} t        j                  t        j
                  dt              dz        t        j
                  dt              d      S c c} w )N(   i Sei`T  dtyped   )timeclosesignal)pd	DataFramerangenpexparangefloat)indexs    /Users/jameslopez/projects/TradingBot25/.worktrees/experiment-mlp-extreme-event-study/tests/test_mlp_extreme_bar_event_study.py_framer      sd    <<AFrK]Ve^3KVVBIIb6<=ii%0	
 Ks   A?c                  Z   t               } t        | dg      }|j                  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}}|j                  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}}t        j                  }	|j                  t!        |      dz
  df   }
 |	|
      }|sddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |	      t        j                  |
      t        j                  |      dz  }t        t        j                  |            d x}	x}
}y )Nr   )r   r   z2023-11-14 22:13:20==)zO%(py1)s == %(py9)s
{%(py9)s = %(py5)s
{%(py5)s = %(py3)s.Timestamp
}(%(py7)s)
}r   py1py3py5py7py9assert %(py11)spy11)r   forward_returng{Gz?zL%(py1)s == %(py9)s
{%(py9)s = %(py5)s
{%(py5)s = %(py3)s.approx
}(%(py7)s)
}pytest   r%   Fassert %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.isna
}(%(py4)s)
}py0py2py4py6)r   r   locr   	Timestamp
@pytest_ar_call_reprcompare	_saferepr@py_builtinslocals_should_repr_global_nameAssertionError_format_explanationr'   approxisnalen)dataframe@py_assert0@py_assert4@py_assert6@py_assert8@py_assert2@py_format10@py_format12@py_assert1@py_assert3@py_assert5@py_format7s                r   Htest_causal_frame_parses_epoch_seconds_and_aligns_feature_before_outcomerI      s   8DthZ0E99YF2<<F0EF<0E#FF#FFFFF#FFFFFFFFFF2FFF2FFF<FFF0EFFF#FFFFFFFF99()@V]]@4@]4-@@)-@@@@@)-@@@@)@@@@@@V@@@V@@@]@@@4@@@-@@@@@@@@77?599SZ!^-==>?7>????????2???2???7???>??????????    c                  F   t               j                  d d j                         } | j                  dxx   dz  cc<   t	        | dg      }t
        j                  }|j                  d   } ||      }|sddt        j                         v st        j                  t
              rt        j                  t
              ndt        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            d x}x}}y )	N   )   r   iK r   )r(   r%   r)   r   r*   )r   iloccopyr/   r   r   r:   r4   r5   r1   r6   r3   r7   r8   )r<   r=   rE   rF   rG   rH   s         r   8test_causal_frame_drops_a_label_that_crosses_a_chart_gaprP      s    8==!!!#DHHY;&thZ0E772599012712222222222222222722212222222222rJ   c                     t        t               j                  d d dg      } | j                  d   }t	        | d |      }|j
                  }|j                  } |       }dg}||k(  }|st        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}}y )NrL   r   )r(   r   r   r   )z`%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.index
}.tolist
}()
} == %(py9)swindow)r+   r,   r-   r.   r"   r#   r$   )r   r   rN   r/   r   r   tolistr1   r2   r4   r5   r6   r3   r7   r8   )
r=   endrR   rE   rF   rG   rA   @py_assert7rC   rD   s
             r   =test_window_excludes_an_outcome_that_crosses_its_end_boundaryrV   $   s    vx}}Ra08*=E
))I
CUD#&F<<'<' 'QC' C'''' C''''''6'''6'''<'''''' '''C''''''''rJ   c                  l   t        t               dg      } | j                  d d j                         }t	        |d      }| j
                  dd dfxx   dz  cc<   t	        |d      }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndd	t        j                         v st        j                  |      rt        j                  |      nd	d
z  }dd|iz  }t        t        j                  |            d }y )Nr      皙?r   i  r   )z%(py0)s == %(py2)safterbefore)r+   r,   zassert %(py4)sr-   )r   r   rN   rO   r   r/   r1   r2   r4   r5   r6   r3   r7   r8   )r=   	discoveryr[   rZ   rE   @py_format3@py_format5s          r   ?test_tail_thresholds_do_not_change_when_later_window_is_mutatedr_   -   s    vx(4E

3B$$&IY-F	IIbc7lu$It,EF?5F55FFrJ   c            	         t        j                  ddd      } t        j                  t        j                  dt
              d      }t        j                  |dk\  d	d
      }t        j                  | d||d      }t        |j                  d d d	      }t        |j                  d d |j                  dd |j                  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}}|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"   }d#}||kD  }|slt        j                  d$|fd%||f      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}}y )&N
2023-01-01<   6hperiodsfreq
   r
         rY   {Gz      Y@r   r   r   r%      -   r   up皙?)featureeventtailsfeature_tailsidehighr   z%(py1)s == %(py4)sr   r-   assert %(py6)sr.   cut@r&   r'   r   r#   r$   
validationlift      ?>z%(py1)s > %(py4)s)r   
date_ranger   tiler   r   wherer   r   rN   r   r1   r2   r3   r7   r8   r'   r9   r4   r5   r6   )r   valuesforwardr=   rs   profiler>   rF   rB   r^   rH   r?   r@   rA   rC   rD   s                   r   Ktest_profile_selects_discovery_direction_and_keeps_its_cut_in_later_windowsr   7   s   ==r=DWWRYYr/3Fhhv{D%0GLL$&\cdeEEJJsOT2Eejj"ouzz"R/@%**RS/[ckow|  LP  QG6?$f$?f$$$$?f$$$?$$$f$$$$$$$5>/V]]/3/]3//>/////>////>//////V///V///]///3///////////< (.3.(3....(3...(...3.......rJ   c                     t        j                  ddd      } t        j                  t        j                  dt
              d      }t        j                  |dk\  d	d
      }t        j                  | d||d      }t        |j                  d d |j                  dd |j                  dd  dg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}}|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   d"   d#   d$   }d%}||kD  }|slt        j                  d&|fd'||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}y )(Nra   Z   rc   rd   rg   r
   	   ri   rY   rj   rk   rl   rm   rb   r   rp   )featuresrt   tail_fractionro   r   ru   rv   r   rw   rx   ry   r.   rz   r{   r&   r'   r   r#   r$   windowsoosr}   r~   r   r   )r   r   r   r   r   r   r   r   r   rN   r1   r2   r3   r7   r8   r'   r9   r4   r5   r6   )r   r   r   r=   profilesr>   rF   rB   r^   rH   r?   r@   rA   rC   rD   s                  r   Itest_relative_tail_profiles_do_not_reselect_the_feature_cut_out_of_sampler   E   s	   ==r=DWWRYYr/3Fhhv{D%0GLL$&\cdeE%ejj"ouzz"R7H%**UWUX/emdn  ~B  RV  WHD>!V$..$....$...$..........D>!U#9v}}9S9}S'99#'99999#'9999#999999v999v999}999S999'99999999D>!Y'.v6<<6<<<<6<<<6<<<<<<<<<<rJ   )builtinsr4   _pytest.assertion.rewrite	assertionrewriter1   numpyr   pandasr   r'   %tools.run_mlp_extreme_bar_event_studyr   r   r   r   r   r   rI   rP   rV   r_   r   r    rJ   r   <module>r      sC          H  H@3(/
=rJ   