
    ׄj	                     b    d dl Zd dlmc m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y)    N)TailRule#moving_block_bootstrap_matched_liftrelative_tail_labelstail_classifier_metrics#volatility_matched_downside_profilec            
         t        j                  dg di      } d}t        | |      }|j                  } |       }g d}||k(  }|s2t	        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                  |      t	        j                  |      t	        j                  |      d	z  }d
d|iz  }t        t	        j                  |            d x}x}x}x}x}}y )Nforward_return)g      g        皙?g      ?皙?)r   r   r      ==)zm%(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py0)s(%(py1)s, %(py3)s)
}.tolist
}()
} == %(py12)sr   frame)py0py1py3py5py7py9py12zassert %(py14)spy14)pd	DataFramer   tolist
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)	r   @py_assert2@py_assert4@py_assert6@py_assert8@py_assert11@py_assert10@py_format13@py_format15s	            {/Users/jameslopez/projects/TradingBot25/.worktrees/experiment-mlp-extreme-event-study/tests/test_mlp_tail_event_research.py)test_relative_tail_labels_mark_both_tailsr.      s    LL*,GHIE'+It,I,33I35I9II59IIIII59IIIIIIIIIIIIIIIIIIIIIItIII,III3III5III9IIIIIIIII    c            	         g } dD ]h  }t        d      D ]X  }|dk  }| j                  t        j                  | d      t        j                  d|z        z   |rdnd|rd	nd
|dz  d       Z j t        j
                  |       }t        |t        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}}g }|d   }d }||u}|}|r|d   }d}||kD  }|}|st        j                  d|fd||f      t        j                  |      t        j                  |      dz  }
dd|
iz  }|j                  |       |r_t        j                  dfd f      t        j                  |      t        j                  |      d!z  }d"d#|iz  }|j                  |       t        j                  |d$      i z  }d%d&|iz  }t        t        j                  |            d x}x}x}x}x}x}x}}y )'N)i  i        z-01-01   hours皙ɿ{Gz?            ?timer	   signal	rvol_normr<   lowr
   r      )tail_fractionbinsselected
   r   z%(py1)s == %(py4)sr   py4assert %(py6)spy6delta)is not)z%(py3)s is not %(py6)s)r   rH   z%(py8)spy8)>)z%(py11)s > %(py14)s)py11r   z%(py16)spy16r   zassert %(py19)spy19)rangeappendr   	Timestamp	Timedeltar   r   r   r   r   r"   r#   r$   _format_boolop)rowsyearindexrB   r   profile@py_assert0@py_assert3r%   @py_format5@py_format7@py_assert1@py_assert5r&   r*   @py_assert13@py_assert12@py_format9r,   @py_format17@py_format18@py_format20s                         r-   Atest_volatility_matched_profile_detects_incremental_downside_ratere      s   D2YEqyHKKvV_51u98UU+3%"*$"RZ	    LLE1%(ESV9WgkrstG:$"$"$$$$"$$$$$$"$$$$$$$B77B4B4'BGG,<BsB,<s,BBBB4BBBBBB4BBBBBBB,<sBBB,<BBBsBBBBBBBBBBBBBBr/   c                     t        j                  t        j                  dt              d      } t	        j
                  | t        j                  | dk  dt        j                  | dkD  dd            d	      }t         j                  |j                  d
<   t        |j                  d d |j                  dd  dg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   }||k\  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )NrC   )dtype   r?   r6      r   r
   )r<   r	   )r   r<   2   r<   r   )featuresr@   observations   r   rD   rE   rG   rH   down_pr_auctail_base_rate)>=)z%(py1)s >= %(py4)s)nptilearangefloatr   r   whereinflocr   ilocr   r   r"   r#   r$   )valuesr   metricsrY   rZ   r%   r[   r\   s           r-   5test_tail_classifier_handles_nonfinite_feature_valuesr{   &   sD   WWRYYr/3FLLFbhhvPQzSWY[YaYabhklblnqsvYw>xyzEVVEIIk%ejj"ouzz"#RZQ[kopG>"(b("b(((("b((("(((b(((((((=!>W-=%>>!%>>>>>!%>>>>!>>>%>>>>>>>>r/   c                  "   g } t        d      D ]e  }|dz  dk  }| j                  t        j                  d      t        j                  d|z        z   |rdn|dz  d	k(  rd
nd|rdnd|dz  dz  d       g t        j
                  |       }t        |t        ddd      ddd      }t        |t        ddd      dd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 }|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 )"Nx         z
2024-01-01r3   r4   r6   r1   ri   gٿr7   r8   r9   rC   r:   r<   r>   r
   r   rm   )r@   repetitionsseedr   )z%(py0)s == %(py2)sfirstsecond)r   py2zassert %(py4)srF   share_above_onerD   rE   rG   rH   )rP   rQ   r   rR   rS   r   r   r   r   r   r   r    r!   r"   r#   r$   )rU   rW   rB   r   r   r   r]   @py_format3r[   rY   rZ   r%   r\   s                r-   ?test_moving_block_bootstrap_is_deterministic_and_retains_signalr   1   s   Ds2:>LL.AI1NN&.dURZ1_TRV&dC"**	
 	  LLE/x%QT7Ueiwy  AB  CE05RU8Vfjxz  BC  DFF?5F55FF"#*s*#s****#s***#***s*******r/   )builtinsr   _pytest.assertion.rewrite	assertionrewriter   numpyrq   pandasr   "strategies.mlp_tail_event_researchr   r   r   r   r   r.   re   r{   r    r/   r-   <module>r      s0         JC&?+r/   