
    ,Tj<                    |    d dl mZ d dlmZ d dlmZmZ d dlmZm	Z	 d dl
mZ d"d
Zd#dZ ed          ddd$d!ZdS )%    )annotations)Decimal)AnyIterable)	CostModelTradeCostInput)_impact_pctvaluer   returnr   c                :    t          t          |                     S )N)r   str)r
   s    "src/execution/size_impact_curve.py_dr   
   s    3u::    levelslist[dict[str, Any]]notionalmidsider   half_spread_pctexpected_move_pct
cost_modelr   dict[str, Any]c                  t          | |||          }|dd d d ddS |                    t          ||||                    }dt          |          t          |j                  t          |j                  |j        dS )N)target_notionalr   r   F)depth_sufficient
impact_pctroundtrip_cost_usdroundtrip_cost_pctcost_allowed)notional_usdr   r   depth_penalty_pctT)r	   estimater   r   r   r   allowed)	r   r   r   r   r   r   r   impactcosts	            r   _side_resultr'      s    sNNNF~$)UYqu  HM  N  N  	N~8Wh  {J  ^d   e   e   e  f  fD &kk!$"9::!$"9::  r   z0.05N)max_impact_pctr   book	notionalsIterable[Decimal]risk_budget_usdstop_distance_pctr(   CostModel | Nonec                  |                      d          pg g g}t          |          dk    rt          |d                   ng }t          |          dk    rt          |d                   ng }	|r|	st          d          t	          |d         d                   }
t	          |	d         d                   }|
dk    s||
k    rt          d          |
|z   t          d          z  }||
z
  |z  t          d          z  }|t          d          z  }|pt                      }g }g }|D ]}t	          |          }||z  t          d          z  }t          |	||d	|||
          }t          |||d|||
          }||k    }t          fd||fD                       }t          |d         o	|d         o|          }t          |          t          |          ||||d}|                    |           |r|r|                    |           dt          |          t          |          t          |          t          |          t          |          t                    ||rt          t          |                    nd dddddS )Nr   r      ztwo-sided L2 book requiredpxz#valid crossed-free L2 book required2100buy)r   r   r   r   r   r   sellc              3  Z   K   | ]%}|d          ot          |d                   k    V  &dS )r   r   N)r   ).0r   r(   s     r   	<genexpr>z%analyze_size_curve.<locals>.<genexpr>2   sB      wwcg01^bl9K6L6LP^6^wwwwwwr   r    )r!   risk_usdrisk_allowedr    r4   r5   zsize_impact_curve.v1TF)schema_version	mid_price
spread_pctr   r,   r-   r(   rowsmax_recommended_notional_usd	read_onlypaper_research_onlylive_order_allowedmainnet_signed_action)getlenlist
ValueErrorr   r   r   r'   allboolr   appendmax)r)   r*   r   r,   r-   r(   r   r   bidsasksbest_bidbest_askr   r=   r   modelr>   recommendedraw_notionalr   r9   r4   r5   r:   
impacts_okr    rows        `                     r   analyze_size_curverU      s   XXh+B8F!&kkAoo4q	???2D!&kkAoo4q	???2D 7t 75666$q'$-  H$q'$-  H1}}H,,>???h'#,,
.CX%,wu~~=J 73<</O%)++E!#D!#K! ) )l##//'%..@4(%Yh  }N  [`  a  a  aD86[j  P  ]b  c  c  c?2wwwwloqukvwwwww
C/WD4HWZXX"8}}#h--Ye  xD  MP  Z^  _  _C 	)L 	)x(((0XX*oo !233// !233n--AL(VC,<,<(=(=(=RV##!&  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,   r   r-   r   r(   r   r   r.   r   r   )
__future__r   decimalr   typingr   r   src.execution.cost_modelr   r   src.hyperliquid.market_datar	   r   r'   rU    r   r   <module>r\      s    " " " " " "                       > > > > > > > > 3 3 3 3 3 3       {B  {B  CI  {J  {J  ko * * * * * * * *r   