
    Ujk                     L    S r SSKrSSKJs  Jr  SSKrSSK	J
r
Jr  S rS rS rg)uZ   
Тесты микроструктурных функций: Yang-Zhang vol, Roll spread.
    N)_compute_yang_zhang_vol_compute_roll_spreadc            
         SSK n [        R                  R                  S5      nSnS[        R                  " UR                  SSU5      5      -   nU R                  USUR                  SSU5      -   -  USUR                  SSU5      -
  -  [        R                  " US   /USS /5      US.5      n[        USS	9nUR                  ob4ovU:H  o(       d  [        R                  " S
U4SXg45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                   " U5      OS[        R                   " U5      [        R                   " U5      S.-  n	[        R"                  " SU SUR                   35      S-   SU	0-  n
[%        [        R&                  " U
5      5      eS=n=p[        R(                  oeSS nSoU:  o" U5      o(       Gd  [        R                  " SU4SX45      [        R                   " U5      [        R                   " U5      S.-  n
[        R"                  " S5      S-   S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                   " [        5      OS[        R                   " U5      U
[        R                   " U5      S.-  n[%        [        R&                  " U5      5      eS=n=n=n=p[        R(                  n[        R*                  ow" U5      o" U5      nU(       Gd  [        R"                  " S5      S-   S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                   " [        5      OS[        R                   " U5      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                   " [        5      OS[        R                   " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                   " U5      OS[        R                   " U5      [        R                   " U5      S.-  n[%        [        R&                  " U5      5      eS=n=n=nn[        R,                  oeSS o" U5      nSnUU:  o(       Gd  [        R                  " SU4SUU45      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                   " [        5      OS[        R                   " U5      [        R                   " U5      [        R                   " U5      [        R                   " U5      S.-  n[        R"                  " S5      S -   S!U0-  n[%        [        R&                  " U5      5      eS=n=n=n=nng)"uk   YZ vol возвращает корректную форму и положительные значения.r   Nd      g{Gz?HighLowOpenClose   period==z-%(py2)s
{%(py2)s = %(py0)s.shape
} == %(py5)syzpy0py2py5Expected shape (,), got 
>assert %(py7)spy7>=)z%(py4)s >= %(py7)s)py4r   zYZ vol must be non-negativezI
>assert %(py11)s
{%(py11)s = %(py2)s
{%(py2)s = %(py0)s.all
}(%(py9)s)
}np)r   r   py9py11zYZ vol must be finite
>assert %(py10)s
{%(py10)s = %(py2)s
{%(py2)s = %(py0)s.all
}(%(py8)s
{%(py8)s = %(py5)s
{%(py5)s = %(py3)s.isfinite
}(%(py6)s)
})
}r   r   py3r   py6py8py10)>)zL%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.nanmean
}(%(py4)s)
} > %(py9)s)r   r   r   r&   r!   zYZ vol mean must be positivez
>assert %(py11)sr"   )pandasr    randomdefault_rngcumsumnormal	DataFrameuniformconcatenater   shape
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_saferepr_format_assertmsgAssertionError_format_explanationallisfinitenanmean)pdrngnpxdfr   @py_assert1@py_assert4@py_assert3@py_format6@py_format8@py_assert6@py_assert5@py_assert10@py_format12@py_assert7@py_assert9@py_format11@py_assert8@py_format10s                       :/home/ai/projects/AI_Strategy/tests/test_microstructure.py&test_yang_zhang_vol_shape_and_positiverS      sr   
))


"CA	ryyAq!,-	-B	a#++aq112QQa001ACR12	 
B 
!B	/B88EtEtEEEE8EEEEEE2EEEE2EEE8EEEtEEEE/s(288*EEEEEEEE66>RS'>Q>Q,>6>>>>>'>>>'>>>Q>>>>!>>>>>>>2>>>>2>>>6>>>>>>>>>>66;"++;+b/;6/";";;$;;;;;;;2;;;;2;;;6;;;;;;";;;;";;;+;;;;;;b;;;;b;;;/;;;";;;;;;::BgB:gBB"BBBBBBBBBB2BBBB2BBB:BBBgBBBBBBBBBB$BBBBBBBB    c            	         SSK n SnU R                  S/U-  S/U-  S/U-  S/U-  S.5      n[        USS9n[        R                  nSnS	od" X5US
9ow(       Gd.  [
        R                  " S5      S-   S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS[
        R                  " U5      [
        R                  " U5      [
        R                  " U5      S.-  n[        [
        R                  " U5      5      eS=n=n=pgg)u   YZ vol на const price = 0.r   N2   g      Y@r	   
   r   g        g|=)atolz$YZ vol on constant price should be 0zc
>assert %(py9)s
{%(py9)s = %(py2)s
{%(py2)s = %(py0)s.allclose
}(%(py3)s, %(py5)s, atol=%(py7)s)
}r    r   )r   r   r%   r   r   r!   )r*   r/   r   r    allcloser3   r9   r5   r6   r7   r8   r:   r;   )	r?   rA   rC   r   rD   rE   rI   rP   rQ   s	            rR   "test_yang_zhang_vol_constant_pricerZ      s    
A	!w{!1	 
B 
!B	/B;;S3SUS;rU+S+SS-SSSSSSS2SSSS2SSS;SSSSSSrSSSSrSSS3SSSUSSS+SSSSSSrT   c                  	   SSK n [        R                  R                  S5      nSnU R	                  SS[        R
                  " UR                  SSU5      5      -   05      n[        USS9nUR                  oR4oeU:H  ow(       d  [        R                  " S	U4S
XV45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  n[        R                  " SU SUR                   35      S-   SU0-  n	[!        [        R"                  " U	5      5      eS=n=pv[        R$                  nSoU
:  oe" U5      o(       Gd9  [        R                  " SU4SXJ45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U
5      S.-  n[        R                  " S5      S-   S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      U[        R                  " U5      S.-  n[!        [        R"                  " U5      5      eS=n=n=p[        R$                  n[        R&                  of" U5      o" U5      o(       Gd  [        R                  " S5      S-   S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  n[!        [        R"                  " U5      5      eS=n=n=pg)uA   Roll spread возвращает корректную форму.r   N*   r   r   g      ?   )windowr   r   spreadr   r   r   r   r   r   )z%(py3)s >= %(py6)s)r%   r&   z Roll spread must be non-negativezI
>assert %(py10)s
{%(py10)s = %(py2)s
{%(py2)s = %(py0)s.all
}(%(py8)s)
}r    )r   r   r'   r(   zRoll spread must be finiter#   r$   )r*   r    r+   r,   r/   r-   r.   r   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   )r?   r@   rA   rC   r_   rD   rE   rF   rG   rH   rJ   rN   @py_format7rO   rM   s                  rR   test_roll_spread_shapera   )   sw   
))


#CA	wbii

1c10E&F FG	HB!"Q/F<<M4M4MMMM<MMMMMM6MMMM6MMM<MMM4MMMM#3A3hv||n!MMMMMMMM66BABA+B6BBBBB&BBBBBB&BBBB&BBBABBBB BBBBBBB2BBBB2BBB6BBBBBBBBB66D"++D+f%D6%&D&DD(DDDDDDD2DDDD2DDD6DDDDDD"DDDD"DDD+DDDDDDfDDDDfDDD%DDD&DDDDDDrT   )__doc__builtinsr5   _pytest.assertion.rewrite	assertionrewriter3   numpyr    models.expertsr   r   rS   rZ   ra    rT   rR   <module>rj      s)       HC&T	ErT   