
    4Bj                    L   d dl mZ d dlmZ d dlmZ d dlZd dlmZm	Z	 d dl
Z
d dlmZ dZdZd'd(dZ G d de	          Z G d d          Z ed           G d d                      Z ed           G d d                      Zd)dZd*d"Zd+d$Z G d% d&          ZdS ),    )annotations)	dataclass)DecimalN)AnyProtocol)HyperliquidAssetMetaz https://api.hyperliquid.xyz/infoz(https://api.hyperliquid-testnet.xyz/infoenv
str | Nonereturnstrc                    | pt          j        d          pd                                }|dk    rt          S |dk    rt          S t          d          )N
CTB_HL_ENVmainnettestnetz%CTB_HL_ENV must be mainnet or testnet)osgetenvlowerTESTNET_INFO_URLMAINNET_INFO_URL
ValueError)r	   resolveds     src/hyperliquid/market_data.pybuild_hyperliquid_info_urlr      sX    ;ry..;)BBDDH99
<
=
==    c                      e Zd Zddd
ZdS )ReadOnlyTransport
   urlr   payloaddict[str, Any]timeoutintr   r   c                    d S N )selfr   r   r!   s       r   postzReadOnlyTransport.post   s      r   Nr   r   r   r   r    r!   r"   r   r   __name__
__module____qualname__r'   r%   r   r   r   r      s        TTTTTTTr   r   c                      e Zd Zddd
ZdS )RequestsInfoTransportr   r   r   r   r    r!   r"   r   r   c                    t          j        |ddi||          }|                                 |                                S )NzContent-Typezapplication/json)headersjsonr!   )requestsr'   raise_for_statusr2   )r&   r   r   r!   responses        r   r'   zRequestsInfoTransport.post   sB    =~?Q.RY`jqrrr!!###}}r   Nr(   r)   r*   r%   r   r   r/   r/      s-              r   r/   T)frozenc                  J    e Zd ZU ded<   edd            Zedd	            Zd
S )HyperliquidMarketMetadict[str, HyperliquidAssetMeta]assetsr   r    r   'HyperliquidMarketMeta'c                V    |d         } | d t          |          D                       S )Nuniversec                v    i | ]6\  }}|d          t          |d          |t          |d                             7S name
szDecimalsr   r"   .0idxrows      r   
<dictcomp>z3HyperliquidMarketMeta.from_meta.<locals>.<dictcomp>+   V      E  E  EdldgilCK!5c&k3CP\L]H^H^!_!_  E  E  Er   )	enumerateclsr   r=   s      r   	from_metazHyperliquidMarketMeta.from_meta(   sY    :&s  E  Epy  {C  qD  qD  E  E  E  F  F  	Fr   r   c                    t          |t                    r|d         d         n|d         } | d t          |          D                       S )Nr   r=   c                v    i | ]6\  }}|d          t          |d          |t          |d                             7S r?   rB   rC   s      r   rG   zBHyperliquidMarketMeta.from_meta_and_asset_ctxs.<locals>.<dictcomp>0   rH   r   )
isinstancelistrI   rJ   s      r   from_meta_and_asset_ctxsz.HyperliquidMarketMeta.from_meta_and_asset_ctxs-   sw    -7-F-F_71:j))GT^L_s  E  Epy  {C  qD  qD  E  E  E  F  F  	Fr   N)r   r    r   r;   )r   r   r   r;   )r+   r,   r-   __annotations__classmethodrL   rQ   r%   r   r   r8   r8   $   sj         ++++F F F [F F F F [F F Fr   r8   c                      e Zd ZU ded<   ded<   ded<    ed          Zded<    ed          Zded<   d	Zded
<   d	Zded<   d	Z	ded<   d	Z
ded<   d	S )L2BookSummaryDecimal | Nonebest_bidbest_ask
spread_pct0r   bid_depth_notional_5ask_depth_notional_5Nbuy_impact_1k_pctsell_impact_1k_pctbuy_impact_5k_pctsell_impact_5k_pct)r+   r,   r-   rR   r   r[   r\   r]   r^   r_   r`   r%   r   r   rU   rU   3   s         $+GCLL0000$+GCLL0000(,,,,,)-----(,,,,,)-------r   rU   levelr    r   c           	         t          t          |                     dd                              t          t          |                     dd                              z  S )NpxrZ   sz)r   r   get)ra   s    r   _level_notionalrf   @   sI    3uyys++,,--EIIdC<P<P8Q8Q0R0RRRr   levelslist[dict[str, Any]]target_notionalmidsiderV   c          	        |dk    s|dk    rd S |}t          d          }t          d          }| D ]}t          t          |                    dd                              }t          t          |                    dd                              }	|dk    s|	dk    ro||	z  }
t          ||
          }||z  }||z  }||z  }||z  }|dk    r n|dk    s|dk    rd S ||z  }|dk    r3t	          t          d          ||z
  |z  t          d          z            S t	          t          d          ||z
  |z  t          d          z            S )Nr   rZ   rc   rd   buy100)r   r   re   minmax)rg   ri   rj   rk   	remaining
total_basetotal_quotera   rc   rd   level_quote
take_quote	take_baseavg_pxs                 r   _impact_pctrx   D   sm   !saxxtIJ#,,K  S4--..//S4--..//77bAgg2gK00
O	i
z!Z	>>E 1}}
at:%Fu}}73<<&3,#!5!FGGGws||cFlc1GENNBCCCr   bookc                   |                      d          pg g g}t          |          dk    r|d         ng }t          |          dk    r|d         ng }|r(t          t          |d         d                             nd }|r(t          t          |d         d                             nd }d }d }|=|;|dk    r5||z   t          d          z  }|dk    r||z
  |z  t          d          z  nd }t	          d |d d         D             t          d	                    }t	          d
 |d d         D             t          d	                    }	d x}
x}x}}|t          |t          d          |d          }
t          |t          d          |d          }t          |t          d          |d          }t          |t          d          |d          }t          |||||	|
|||	  	        S )Nrg   r      rc   2rn   c              3  4   K   | ]}t          |          V  d S r$   rf   rD   ra   s     r   	<genexpr>z$summarize_l2_book.<locals>.<genexpr>j   *      BB_U++BBBBBBr      rZ   c              3  4   K   | ]}t          |          V  d S r$   r~   r   s     r   r   z$summarize_l2_book.<locals>.<genexpr>k   r   r   1000rm   )ri   rj   rk   sell5000)	rW   rX   rY   r[   r\   r]   r^   r_   r`   )re   lenr   r   sumrx   rU   )ry   rg   bidsasksrW   rX   rY   rj   	bid_depth	ask_depthbuy_1ksell_1kbuy_5ksell_5ks                 r   summarize_l2_bookr   _   s   XXh+B8FFa6!99RDFa6!99RD.2<ws474=))***H.2<ws474=))***HJ
C 4A("gcll2EH1WWh)S075>>AARV
BBbqbBBBGCLLQQIBBbqbBBBGCLLQQI*..F.W.v
T76??RWXXXdGFOOSYZZZT76??RWXXXdGFOOSYZZZ&& " "
 
 
 
r   c                  ~    e Zd ZdZd'd(d	Zd)d*dZd+dZd,dZd-dZd.dZ	d/dZ
d0dZd1d Zd2d!Zd3d#Zd-d$Zd4d&ZdS )5HyperliquidMarketDatazLRead-only Hyperliquid info endpoint adapter. No exchange/order imports here.Nr	   r
   	transportReadOnlyTransport | Noner   Nonec                    |pt          j        d          pd                                | _        t	          | j                  | _        |pt                      | _        d | _        d S )Nr   r   )	r   r   r   r	   r   info_urlr/   r   _meta_cache)r&   r	   r   s      r   __init__zHyperliquidMarketData.__init__   s[    ?29\22?iFFHH248<<"=&;&=&=9=r   r   r   r    r!   r"   r   c                F    | j                             | j        ||          S )N)r!   )r   r'   r   )r&   r   r!   s      r   _postzHyperliquidMarketData._post   s!    ~""4='7"KKKr   c                0    |                      ddi          S )Ntypemetar   r&   s    r   get_metazHyperliquidMarketData.get_meta   s    zz66*+++r   c                0    |                      ddi          S )Nr   metaAndAssetCtxsr   r   s    r   get_meta_and_asset_ctxsz-HyperliquidMarketData.get_meta_and_asset_ctxs   s    zz6#56777r   dict[str, Decimal]c                l    |                      ddi          }d |                                D             S )Nr   allMidsc                N    i | ]"\  }}|t          t          |                    #S r%   )r   r   )rD   coinprices      r   rG   z6HyperliquidMarketData.get_all_mids.<locals>.<dictcomp>   s,    JJJkdEgc%jj))JJJr   )r   items)r&   datas     r   get_all_midsz"HyperliquidMarketData.get_all_mids   s4    zz69-..JJTZZ\\JJJJr   r   r   intervalstart_msend_msrh   c                `    |                      d|                                |||dd          S )NcandleSnapshot)r   r   	startTimeendTimer   reqr   upper)r&   r   r   r   r   s        r   get_candlesz!HyperliquidMarketData.get_candles   sM    zz#3TZZ\\_gv~  LR  =S  =S  T  T  U  U  	Ur   c                V    |                      d|                                d          S )Nl2Book)r   r   r   r&   r   s     r   get_l2_bookz!HyperliquidMarketData.get_l2_book   s$    zz8TZZ\\BBCCCr   r9   c                    | j         1t                              |                                           | _         | j         j        S r$   )r   r8   rL   r   r:   r   s    r   get_asset_universez(HyperliquidMarketData.get_asset_universe   s5    #4>>t}}OOD&&r   r   c                    |                                  }|                                }||vrt          d|           ||         S )NzUnknown Hyperliquid coin: )r   r   KeyError)r&   r   r:   s      r   get_symbol_metaz%HyperliquidMarketData.get_symbol_meta   sL    ((**zz||v>>>???d|r   c                6    |                      |          j        S r$   )r   sz_decimalsr   s     r   get_sz_decimalsz%HyperliquidMarketData.get_sz_decimals   s    ##D))55r   r8   c                Z    t                               |                                           S r$   )r8   rL   r   r   s    r   r   zHyperliquidMarketData.meta   s    $..t}}???r   c                *    |                                  S r$   )r   r   s    r   all_midszHyperliquidMarketData.all_mids   s      """r   requestc                2    |                      d|d          S )Nr   r   r   )r&   r   s     r   candle_snapshotz%HyperliquidMarketData.candle_snapshot   s    zz#3GDDEEEr   )NN)r	   r
   r   r   r   r   r(   )r   r    r!   r"   r   r   )r   r    )r   r   )r   r   )
r   r   r   r   r   r"   r   r"   r   rh   )r   r   r   r    )r   r9   )r   r   r   r   )r   r   r   r"   )r   r8   )r   r    r   rh   )r+   r,   r-   __doc__r   r   r   r   r   r   r   r   r   r   r   r   r   r%   r   r   r   r      sC       VV> > > > >L L L L L, , , ,8 8 8 8K K K KU U U UD D D D' ' ' '
   6 6 6 6@ @ @ @# # # #F F F F F Fr   r   r$   )r	   r
   r   r   )ra   r    r   r   )
rg   rh   ri   r   rj   r   rk   r   r   rV   )ry   r    r   rU   )
__future__r   dataclassesr   decimalr   r   typingr   r   r3   src.hyperliquid.roundingr   r   r   r   r   r/   r8   rU   rf   rx   r   r   r%   r   r   <module>r      s   " " " " " " ! ! ! ! ! !       				                  9 9 9 9 9 95 = > > > > >U U U U U U U U        $F F F F F F F F $	. 	. 	. 	. 	. 	. 	. 	.S S S SD D D D6   @3F 3F 3F 3F 3F 3F 3F 3F 3F 3Fr   