
    LBj                        d dl mZ d dlmZ d dlmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d d	lmZmZmZ d&d'dZd(dZd)d*dZd+dZd)d,d Z ed!"           G d# d$                      Zd%S )-    )annotations)	dataclass)datetimetimezone)Decimal)fmean)Any)ApiHealthMonitor)HyperliquidMarketDatasummarize_l2_book)CoinMarketContextDEFAULT_CONTEXT_UNIVERSEMarketContextSnapshot0valuer	   defaultstrreturnr   c                z    	 t          t          |                     S # t          $ r t          |          cY S w xY w)N)r   r   	Exception)r   r   s     src/market/collector.py_dr      sJ     s5zz"""      w s    ::valueslist[Decimal]nintc                    | | d          }|r,t          |          t          t          |                    z  nt          d          S )Nr   )sumr   len)r   r   samples      r   _smar!      s@    QBCC[F17I3v;;V----WS\\I       closesperiodc                   t          |           |k    rt          d          S g }g }t          | | dz
  d         | | d                    D ]w\  }}||z
  }|                    t	          |t          d                               |                    t          t          |t          d                                         xt          |          t          |          z  }t          |          t          |          z  }|dk    rt          d          S ||z  }	t          d          t          d          t          d          |	z   z  z
  S )N50   r   r   1001)r   r   zipappendmaxabsminr   )
r$   r%   gainslossesprevcurrdiffavg_gainavg_lossrss
             r   _rsir9      s*   
6{{ft}}EF&&2.wxx0@AA 4 4
dd{Sws||,,---c#dGCLL112233335zzGFOO+H6{{WV__,H1}}u~~	H	B5>>WU^^ws||b/@ABBr"   payloaddict[str, dict[str, Any]]c                :   t          | t                    rt          |           dk     ri S | d         | d         }}t          |t                    r|                    d          pg ng }t          |t                    si S i }t          |          D ]\  }}|t          |          k    st          |t                    s.||         }t          |t                    r5t          |                    dd                                                    nd}|r|||<   |S )N   r   r(   universename )
isinstancelistr   dictget	enumerater   upper)	r:   meta
asset_ctxsr>   resultidxrowassetr?   s	            r   _asset_contexts_by_coinrM   +   s   gt$$ Gq(8(8	qz71:*D-7d-C-CKtxx
##)rHj$'' 	(*Fj))  S#h--z#t'<'<5?t5L5LTs599VR(())//111RT 	F4LMr"   candleslist[dict[str, Any]]c           	     L   g }| | d          D ]Z}|                     t          |                    d                    t          |                    d                    z
             [|r,t          |          t	          t          |                    z  nt	          d          S )Nhlr   )r-   r   rD   r   r   r   )rN   r%   trsrK   s       r   _atrrT   =   s    Cwxx  8 8

2cggcll##b&6&667777+.@3s88gc#hh''''GCLL@r"   T)frozenc                  6    e Zd ZU ded<   ded<   edddddZdS )MarketContextCollectorr   market_datar
   
api_health5mi  )coinsintervallookback_msr[   tuple[str, ...]r\   r   r]   r   r   r   c                  t          j        t          j                  }t	          |                                dz            }| j                                        }	 t          | j        	                                          }n3# t          $ r&}| j                            |           i }Y d }~nd }~ww xY wg }	|D ]}
|
                                }
d}d}d }t          d          }t          d          }d }d }d }d }	 | j                            |
|||z
  |          }d |D             }t!          d |D             t          d                    }n_# t          $ rR}| j                            |           | j                                         g }g }t          d          }d}Y d }~nd }~ww xY w	 t%          | j                            |
                    }|j        }|j        d uo|j        d u}|j        }|j        }|j        }|j        }|j        }|j        }n1# t          $ r$}| j                            |           Y d }~nd }~ww xY w|                    |
          p|r|d         nt          d          }|                    |
i           }t          d          }|s|s|t          d	          z  }|s|t          d
          z  }|	                    t?          d+i d|
dtA          |          dtC          |d          dtC          |d          dtE          |          dtG          |                    d                    d|d|d|d|dtI          t          d          |          d|d|dtG          |                    d                    dtG          |                    d                    dtG          |                    d                    dtG          |                    d                     d!tG          |                    d"                    d#tG          |                    d$                    d%|d&|d'|d(|d)|d*|           tK          j&        |	          S ),Ni  Fr   c                |    g | ]9}|                     d           t          |                     d                     :S )c)rD   r   .0rK   s     r   
<listcomp>z2MarketContextCollector.collect.<locals>.<listcomp>`   s9    ZZZsAY"SWWS\\**AYAYAYr"   c              3  Z   K   | ]&}t          |                    d                     V  'dS )vN)r   rD   rb   s     r   	<genexpr>z1MarketContextCollector.collect.<locals>.<genexpr>a   s4      BB3b..BBBBBBr"   Tr)   z1.0z0.5z0.25coinrsisma_fast   sma_slow   atrfundingvolumemid
spread_pct	timestampreliability_score
stale_datal2_availableopen_interestopenInterestpremium	oracle_pxoraclePxmark_pxmarkPxprev_day_px	prevDayPxday_ntl_vlm	dayNtlVlmbid_depth_notional_5ask_depth_notional_5buy_impact_1k_pctsell_impact_1k_pctbuy_impact_5k_pctsell_impact_5k_pct )'r   nowr   utcr   rs   rX   get_all_midsrM   get_meta_and_asset_ctxsr   rY   record_errorrF   r   get_candlesr   record_stale_contextr   get_l2_bookrr   best_bidbest_askr   r   r   r   r   r   rD   r-   r   r9   r!   rT   r   r.   r   from_coin_contexts)selfr[   r\   r]   r   now_msmidsasset_contextsexcctxsrh   stalerv   rr   r   r   r   r   r   r   rN   r$   rp   summaryrq   	asset_ctxreliabilitys                              r   collectzMarketContextCollector.collectI   sO   l8<((S]]__t+,,,,..	 4T5E5]5]5_5_``NN 	  	  	 O((---NNNNNN	  )+ C	 C	D::<<DE L)-J#*3<< #*3<< 04150415
*66tXvP[G[]cddZZgZZZBB'BBBGCLLQQ   ,,S11144666 2+D,<,H,H,N,NOO$/
&/t;\@PX\@\'.'C$'.'C$$+$=!%,%?"$+$=!%,%?"" 2 2 2,,S111111112((4..L6%KVBZZws||C&**444I!%..K .F .wu~~- /wv.KK)   TLLL fb))) fb)))	
 MMM 9==33444 v C &: # #&gcllK"@"@"@ !5 *\ !~!>!>??? 9==33444  Y]]:66777!" 9==22333#$ y}}[99:::%& y}}[99:::'( &:%9)* &:%9+, #4"3-. $6#5/0 #4"312 $6#53    6 %7===sK   &B 
B4B//B4?AE
F/AF**F/3A*H
I(IIN)r[   r^   r\   r   r]   r   r   r   )__name__
__module____qualname____annotations__r   r   r   r"   r   rW   rW   D   sa         &&&&    2J\`  vH N> N> N> N> N> N> N> N>r"   rW   N)r   )r   r	   r   r   r   r   )r   r   r   r   r   r   )r#   )r$   r   r%   r   r   r   )r:   r	   r   r;   )rN   rO   r%   r   r   r   )
__future__r   dataclassesr   r   r   decimalr   
statisticsr   typingr	   src.hyperliquid.api_healthr
   src.hyperliquid.market_datar   r   src.market.contextr   r   r   r   r!   r9   rM   rT   rW   r   r"   r   <module>r      s   " " " " " " ! ! ! ! ! ! ' ' ' ' ' ' ' '                   7 7 7 7 7 7 P P P P P P P P a a a a a a a a a a         J J J J
C C C C C"   $A A A A A $R> R> R> R> R> R> R> R> R> R>r"   