
    i3$                       d dl mZ d dlZd dlmZmZ d dlmZ d dlmZm	Z	 d dl
mZ ddlmZ h d	Zh d
ZddZddZdd	 	 	 	 	 ddZ	 	 	 	 	 	 ddZddZddZd dZ	 	 	 	 	 	 d!dZd"dZd#dZ ed      dedd	 	 	 	 	 	 	 	 	 	 	 d$dZy)%    )annotationsN)datetimetimezone)Path)AnyIterable)parse_dt   )	OrderBook>   book	rest_bookrest_book_after_reconnect rest_book_after_tick_size_change>   r   r   price_changelast_trade_pricetick_size_changer   r   c                \    t        |       }|y |j                  t        j                        S N)r	   
astimezoner   utc)valueparseds     &analysis/lpl_orderbook/event_replay.pyparse_event_timer      s(    e_F~X\\**    c                    t        | j                  d            }t        | j                  d            }||y t        ||z
  j                         dz  d      S )Nexchange_tsreceived_at_wallg     @@   )r   getroundtotal_seconds)rowr   received_tss      r   event_delay_msr%   %   sW    "377=#9:K"377+=#>?Kk1++::<vEqIIr   market_kindc          
        | dz  }|j                         st        |      t        j                  |j	                  d            }|j                  dg       D cg c]  }t        |       }}|j                  dg       D cg c]  }t        |       }}t        |      D ci c]  \  }}||t        |      k  r||   n| }	}}|rWd }
|j                  d      xs g D ]'  }t        |j                  d      xs d      |k(  s%|}
 n |
t        d	|       |
j                  d      xs g D cg c]  }t        |       }}|
j                  d      xs g D cg c]  }t        |       }}t        |      D ci c]%  \  }}||t        |      k  r
| d
||    n| d
| ' }	}}i ||
j                  d      xs |j                  d      |
j                  d      xs |j                  d      |
j                  d      xs d||D cg c]  }|	|   	 c}|d}|||	fS c c}w c c}w c c}}w c c}w c c}w c c}}w c c}w )Nzrecording_meta.jsonutf-8encoding	token_idsoutcomestarget_marketskind z.market kind not found in recording_meta.json: :slugquestioncondition_id)r2   r3   r4   r,   r-   r'   )
existsFileNotFoundErrorjsonloads	read_textr    str	enumeratelen
ValueError)
market_dirr'   	meta_pathmetatoken_idr,   outcomer-   idxtoken_to_outcometargetitemtarget_outcomess                r   load_market_metarH   -   s|   
 22I	**::i))7);<D/3xxR/HI8XIII,0HHZ,DEGEHE 'y1C 	3X#6(3-HD  HH-.4" 	D488F#)r*k9	 >Mk][\\39::k3J3PbQxS]Q	Q7=zz*7M7SQSTG3w<TT "+9!5
 X _-- -q!5 67#}AhZ01
 


JJv&:$((6*:

:.F$((:2F"JJ~6<""DMN)(3N&
 ,,,C JE RT
 Os*   H&H+$ H02H6H;?*I Ic          
         | d | D cg c]3  }t        t        |d         d      t        t        |d         d      d5 c}S c c}w )Nprice   size)rJ   rL   )r!   float)levelsdepthlevels      r   compact_levelsrQ   Z   sP     FU^ eGn-q15uV}AUWX;YZ  s   8Ac                   | j                         \  }}| j                         \  }}||t        | j                         |      t        | j	                         |      dS )NrO   )best_bidbest_askbidsasks)rT   rU   rQ   
bid_levels
ask_levels)r   rO   rT   	_bid_sizerU   	_ask_sizes         r   book_payloadr\   e   sT    --/Hi--/Hit0>t0>	 r   c           
     
   | j                  d      xs i }| j                  d      dk7  ry 	 t        |j                  d            }t        |j                  d      xs d      }t	        | j                  d      xs |j                  d      xs d      t	        | j                  d	      xs d      ||t	        |j                  d
      xs d      t	        |j                  d      xs d      dS # t        t        f$ r Y y w xY w)Nraw_json
event_typer   rJ   rL   r   asset_idr0   rB   sidetransaction_hash)r`   rB   rJ   rL   ra   rb   )r    rM   	TypeErrorr=   r:   )r#   rawrJ   rL   s       r   trade_payloadre   p   s    
''*

#C
ww| 22cggg&'SWWV_)* 
+Hswwz/BHbIswwy)/R0CGGFO)r*(: ; ArB  z" s   8C0 0DDc                0   | j                  d      xs i }g }| j                  d      dk7  r|S |j                  d      xs g D ]  }	 t        |j                  d            }t        |j                  d      xs d      }|j	                  t        |j                  d      xs d	      t        |j                  d
      xs d	      ||t        |j                  d            t        |j                  d            d        |S # t        t        f$ r Y w xY w)Nr^   r_   r   price_changesrJ   rL   r   r`   r0   ra   rT   rU   )r`   ra   rJ   rL   rT   rU   )r    rM   rc   r=   appendr:   _float_or_none)r#   rd   outputchangerJ   rL   s         r   changed_levelsrl      s   
''*

#C#%F
ww|.''/*0b 
	&**W-.EF+0q1D 	

: 6 <"=FJJv.4"5*6::j+AB*6::j+AB		

  M :& 		s   8DDDc                n    | D cg c]%  }t        |j                  d      xs d      |v s$|' c}S c c}w )Nr`   r0   )r:   r    )rN   	token_setrP   s      r   filter_changed_levelsro      s2      &WeUYYz-B-Hb)IY)VEWWWs   %22c                D    	 t        |       S # t        t        f$ r Y y w xY wr   )rM   rc   r=   )r   s    r   ri   ri      s(    U|z" s   
 c                X   t        |j                  d      xs d      }t        |j                  d      xs d      }|j                  d      xs i }|t        v r,|r*| j                  |t	                     j                  |       y |dk7  ry i }|j                  d      xs g D ]D  }t        |j                  d      xs d      }|s$|j                  |g       j                  |       F |j                         D ].  \  }}| j                  |t	                     j                  |       0 y )Nr_   r0   r`   r^   r   rg   )	r:   r    BOOK_EVENTS
setdefaultr   apply_snapshotrh   itemsapply_delta)	booksr#   r_   r`   rd   groupedrk   rA   changess	            r   apply_orderbook_eventrz      s   SWW\*0b1J377:&,"-H
''*

#C[ X9;/>>sC^#/1G''/*0b <vzz*-34x,33F;< %]]_ E'9;/;;GDEr   zdata/lpl   )	data_rootrO   frame_eventsr'   c                >   || z  }|dz  }|j                         st        |      t        ||      \  }}}	t        |      }
|D ci c]  }|t	                c}i }t        |      }g }|j                  dd      5 }|D ]  }|j                         st        j                  |      }t        |j                  d      xs d      }t        |j                  d      xs d      }|t        v r|r||
vru|d	k(  r|r||
vr|d
k(  rt        t        |      |
      }|st        |       t        |      }|?i ||j                  d      xs d|j                  d      xs dt!        |      d||d   <   ||vr|rt#        fd|D              st        t        |      |
      }i }|D ]E  }t%        |   |      }||d<   |	j                  ||      |d<   |j                  |      |d<   |||<   G |j'                  |j                  d      xs d|j                  d      xs dt!        |      |j                  d      |j                  d      ||t        |j                  d      xs d      |||d        	 d d d        ||fS c c}w # 1 sw Y   ||fS xY w)Nzorderbook_events.jsonlr&   rr)   r*   r_   r0   r`   r   r   r   r   )r   r   delay_msc              3  ^   K   | ]$  }|   j                   xs |   j                   & y wr   )rV   rW   ).0rA   rw   s     r   	<genexpr>z$iter_event_frames.<locals>.<genexpr>   s.     $lV^U8_%9%9%QU8_=Q=Q%Q$ls   *-rS   rB   
last_trademessage_indexconnection_id)r   r   r   r   r   r_   r`   rB   rl   traderw   )r5   r6   rH   setr   openstripr7   r8   r:   r    rr   ro   rl   rz   re   r%   allr\   rh   )r2   r|   rO   r}   r'   r>   events_pathr@   r,   rD   rn   rA   last_trade_by_assetallowed_eventsframesfliner#   r_   r`   rN   r   frame_changesbooks_payloadpayloadrw   s                            @r   iter_event_framesr      s    T!J77K,,(8Q\(]%D)%II3<=xXy{"=E57&N#%F			#		0 2A 1	D::<**T"CSWW\28b9J377:.4"5H[(X():S//HQZAZ^+.~c/BIN!%-!#&E ::(+0B(C(Ir#&77=#9#?R .s 3	:#E*$56 /$lbk$l!l1.2EyQMM% 2&uXeD&.
#%5%9%9(H%M	"(;(?(?(I%*1h'2 MM(+0B(C(Ir#&77=#9#?R .s 3%(WW_%=%(WW_%=", ("3779#5#;<&3"*G1	2h <s >
2h <s   J>H JJ)r   r   returnzdatetime | None)r#   dict[str, Any]r   float | None)r>   r   r'   
str | Noner   z0tuple[dict[str, Any], list[str], dict[str, str]])rN   list[dict[str, float]]rO   intr   r   )r   r   rO   r   r   r   )r#   r   r   zdict[str, Any] | None)r#   r   r   list[dict[str, Any]])rN   r   rn   zset[str]r   r   )r   r   r   r   )rw   zdict[str, OrderBook]r#   r   r   None)r2   r:   r|   r   rO   r   r}   zIterable[str]r'   r   r   z+tuple[dict[str, Any], list[dict[str, Any]]])
__future__r   r7   r   r   pathlibr   typingr   r   analysis.safe_btc5.typesr	   recorderr   rr   FRAME_EVENTSr   r%   rH   rQ   r\   re   rl   ro   ri   rz   r    r   r   <module>r      s   "  '    - +J #*-*- *- 6	*-Z"  	&0X XX XE* :&"."H
H H 	H
  H H 1Hr   