
    D%jl                     n    d dl Zd dlmc mZ d dlmZ d dlmZm	Z	m
Z
 d dlmZmZ d dlmZ d Zd Zd ZdS )	    N)Decimal)datetimetimezone	timedelta)CoinMarketContextMarketContextSnapshot)DataQualityGatec                     t          dt          d          t          d          t          d          t          d          t          d          t          d          t          d          t          d          t          j        t          j                  t          d	          d
d          }|                    |            t          di |S )NWLD55z1.1z1.0z0.0501000000z1.2z0.95FT)coinrsisma_fastsma_slowatrfundingvolumemid
spread_pct	timestampreliability_score
stale_datal2_available )dictr   r   nowr   utcupdater   )	overridesbases     R/home/agent/projects/CryptoTradingBot/Crypto_Agent/tests/test_data_quality_gate.py_ctxr$      s    QVFOOWS\\'):L:LRYZ_R`R`6??hl8<.H.H\cdj\k\kt	  D 	KK	$$t$$$    c                  |   t          dt          d                    } t          t          j        t
          j                  t          d          z
            }| j        } ||          }|j	        }d}||u }|st          j        d|fd	||f          d
t          j                    v st          j        |           rt          j        |           nd
t          j        |          dt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          t          j        |          dz  }dd|iz  }t!          t          j        |                    d x}x}x}x}}d}	| j        } ||          }
|
j        }|	|v }|st          j        d|fd|	|f          t          j        |	          d
t          j                    v st          j        |           rt          j        |           nd
t          j        |          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}x}x}
}d}	| j        }d}
t          |
          } ||          }|j        }|	|v }|s>t          j        d|fd|	|f          t          j        |	          d
t          j                    v st          j        |           rt          j        |           nd
t          j        |          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}x}}d}	| j        }d}t          |          }t          |          } ||          }|j        }|	|v }|st          j        d|fd|	|f          t          j        |	          d
t          j                    v st          j        |           rt          j        |           nd
t          j        |          dt          j                    v st          j        t                    rt          j        t                    nddt          j                    v st          j        t                    rt          j        t                    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}x}}d"}	| j        }t                      }
d#} ||
|$          }|j        }|	|v }|s>t          j        d|fd%|	|f          t          j        |	          d
t          j                    v st          j        |           rt          j        |           nd
t          j        |          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}x}}d S )&N<   z0.20)max_age_secondsmax_spread_pct   )minutes)r   F)is)zl%(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.evaluate
}(%(py3)s)
}.allowed
} is %(py10)sgateold)py0py2py3py5py7py10zassert %(py12)spy12stale_context)in)zm%(py1)s in %(py10)s
{%(py10)s = %(py8)s
{%(py8)s = %(py5)s
{%(py5)s = %(py3)s.evaluate
}(%(py6)s)
}.reasons
})py1r1   r2   py6py8r4   missing_l2_book)r   )z%(py1)s in %(py14)s
{%(py14)s = %(py12)s
{%(py12)s = %(py5)s
{%(py5)s = %(py3)s.evaluate
}(%(py10)s
{%(py10)s = %(py6)s(l2_available=%(py8)s)
})
}.reasons
}r$   )r8   r1   r2   r9   r:   r4   r5   py14zassert %(py16)spy16spread_too_widez0.30)r   )z%(py1)s in %(py17)s
{%(py17)s = %(py15)s
{%(py15)s = %(py5)s
{%(py5)s = %(py3)s.evaluate
}(%(py13)s
{%(py13)s = %(py6)s(spread_pct=%(py11)s
{%(py11)s = %(py7)s(%(py9)s)
})
})
}.reasons
}r   )
r8   r1   r2   r9   r3   py9py11py13py15py17zassert %(py19)spy19api_degradedT)degraded_mode_active)z%(py1)s in %(py14)s
{%(py14)s = %(py12)s
{%(py12)s = %(py5)s
{%(py5)s = %(py3)s.evaluate
}(%(py8)s
{%(py8)s = %(py6)s()
}, degraded_mode_active=%(py10)s)
}.reasons
})r	   r   r$   r   r   r   r   r   evaluateallowed
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationreasons)r-   r.   @py_assert1@py_assert4@py_assert6@py_assert9@py_assert8@py_format11@py_format13@py_assert0@py_assert7@py_assert2@py_assert11@py_assert13@py_format15@py_format17@py_assert10@py_assert12@py_assert14@py_assert16@py_format18@py_format20s                         r#   Ktest_data_quality_gate_blocks_stale_missing_l2_high_spread_and_api_degradedrf      s+   2gfooNNND
hl33i6J6J6JJ
K
K
KC=.==.%..%..........%............4.....4......=..........................%...................................8dm8mmC008088?88888888888?888888?88888888888d88888d888888m88888888888C88888C8888880888888888888888888888888888888888888OOOd.F.F.FO.F G GO G OO OOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOdOOOOOdOOOOOOOOOO.FOOOO GOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOWWfWgfooWdo.N.N.NW.N O OW O WW WWWWWWWWWWW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWdWWWWWdWWWWWWWWWWWWWgWWWWWgWWWWWWfWWWWoWWWW.NWWWW OWWWW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWUT]U466UU]]6MMMUMUU>UUUUUUUUUUU>UUUUUU>UUUUUUUUUUUTUUUUUTUUUUUU]UUUUUUUUUUU4UUUUU4UUUUUU6UUUUUUUUMUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUr%   c            
         t          j        d dD                       } | j        }d} ||          }|j        }d}||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	        |          t	          j	        |          dz  }dd	|iz  }t          t	          j        |                    d x}x}x}x}x}}| j        }d
} ||          }|j        }d
}||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	        |          t	          j	        |          dz  }dd	|iz  }t          t	          j        |                    d x}x}x}x}x}}g d}t          |          }|j        }| j        }	 ||	          }|sddt          j                    v st	          j        t                    rt	          j	        t                    ndt	          j	        |          t	          j	        |          t	          j	        |          dt          j                    v st	          j        |           rt	          j	        |           ndt	          j	        |	          t	          j	        |          dz  }t          t	          j        |                    d x}x}x}x}	}d S )Nc                 .    g | ]}t          |           S ))r   )r$   ).0cs     r#   
<listcomp>zLtest_market_snapshot_contains_core_and_research_universe.<locals>.<listcomp>   s2      5N  5N  5NaTq\\\  5N  5N  5Nr%   )	BTCETHSOLLINKr   SUIENABCHHYPEr   )==)zd%(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
}.coin
} == %(py11)ssnap)r/   r0   py4r9   r:   r@   zassert %(py13)srA   rp   )rl   rm   rn   ro   r   rp   rq   rr   zassert %(py11)s
{%(py11)s = %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}.issubset
}(%(py9)s
{%(py9)s = %(py7)s.coins
})
}set)r/   r0   rv   r9   r3   r?   r@   )r   from_coin_contextsgetr   rI   rJ   rK   rL   rM   rN   rO   rP   rw   issubsetcoins)
ru   rR   @py_assert3@py_assert5rZ   r`   rU   @py_format12@py_format14rV   s
             r#   8test_market_snapshot_contains_core_and_research_universer      s    3  5N  5N  LM  5N  5N  5N  O  OD8(E(88E??(?(5(5((((((((((5((((((((((((4(((((4((((((8((((E((((?((((((((5(((((((((((((((((((((((((((((((((8(E(88E??(?(5(5((((((((((5((((((((((((4(((((4((((((8((((E((((?((((((((5(((((((((((((((((((((((((((((((((HHH^3HII^IR^SWS]^RRS]^^^^^^^^^^^^^^^3^^^^^3^^^^^^H^^^^I^^^^R^^^^^^^^^^^SW^^^^^SW^^^^^^S]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^r%   )builtinsrK   _pytest.assertion.rewrite	assertionrewriterI   decimalr   r   r   r   src.market.contextr   r   src.risk.data_quality_gater	   r$   rf   r   r   r%   r#   <module>r      s                        2 2 2 2 2 2 2 2 2 2 G G G G G G G G 6 6 6 6 6 6% % %V V V_ _ _ _ _r%   