
    |iY                        d dl mZ d dlZd dlZd dlmZ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	Zdd
ZddZ	 	 	 	 	 	 	 	 ddZ ed      dd	 	 	 	 	 	 	 	 	 	 	 ddZy)    )annotationsN)datetime	timedeltatimezone)Path)Any)parse_dt   )	OrderBookc                v    t        |       }|t        d|        |j                  t        j                        S )Nzinvalid datetime: )r	   
ValueError
astimezoner   utc)valueparseds     5/root/polymarket_arb/analysis/lpl_orderbook/replay.py	_parse_atr      s8    e_F~-eW566X\\**    c                6    t        | j                  d            S )Nreceived_at_wall)r	   get)rows    r   _event_timer      s    CGG./00r   c                0   |j                  d      }t        |j                  d      xs d      }|j                  d      xs i }|dv r,|r*| j                  |t                     j	                  |       y |dk(  ri }|j                  dg       D ]D  }t        |j                  d      xs d      }|s$|j                  |g       j                  |       F |j                         D ].  \  }}| j                  |t                     j                  |       0 y y )N
event_typeasset_id raw_json>   book	rest_bookrest_book_after_reconnectprice_changeprice_changes)r   str
setdefaultr   apply_snapshotappenditemsapply_delta)	booksr   r   r   rawgroupedchangetoken_idchangess	            r   _apply_eventr0      s   &J377:&,"-H
''*

#CGGH9;/>>sC^#35ggor2 	@F6::j17R8H""8R077?	@ ") 	IHgXy{3??H	I $r   c                   g }|j                         D ]  \  }}|j                         \  }}|j                         \  }}	|j                  | j	                  dd      | j	                  dd      | j	                  dd      ||j	                  |d      |dn||dn||dn||	dn|	||dnt        ||z
  d      d
        |S )Nr   r   message_indexr      )
r   r2   r   r   outcomebest_bidbest_bid_sizebest_askbest_ask_sizespread)r(   r5   r7   r'   r   round)
r   r*   token_to_outcomeoutputr.   r   bidbid_sizeaskask_sizes
             r   _state_rowsrA   *   s     $&F++- 
$XX$'GG,>$C!$"!=!gglB7$+//"="%+B3'/'7X"%+B3'/'7X #s{"cCiQR@S	

" Mr   zdata/lpl)	data_rootoutput_pathc           	        t        |      }|t        |      z
  }|t        |      z   }|| z  }|dz  }	|dz  }
|	j                         st        |	      |
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d }}}|D ci c]  }|t                }}g }d	}|	j                  d
d      5 }|D ]z  }|j                         st	        j
                  |      }t        |      }|7||kD  r n?t        ||       |dz  }||cxk  r|k  s[n ^|j!                  t#        |||             | d d d        ||j%                  d      }|d| d| dz  }|j&                  j)                  dd       g }|D ]  }|D ]  }||vs|j+                  |        ! |j                  ddd      5 }t-        j.                  ||      }|j1                          |j3                  |       d d d        | |j5                         ||t        |      t        |      dS c c}w c c}w c c}}w c c}w # 1 sw Y   xY w# 1 sw Y   SxY w)N)secondszorderbook_events.jsonlzrecording_meta.jsonzutf-8)encoding	token_idsoutcomesr   r   rr
   )r   r*   r;   z%Y%m%dT%H%M%SZreplay__zs.csvT)parentsexist_okw)newlinerF   )
fieldnames)slugtargetwindow_secondsprocessed_eventsrowsrC   )r   r   existsFileNotFoundErrorjsonloads	read_textr   r$   	enumeratelenr   openstripr   r0   extendrA   strftimeparentmkdirr'   csv
DictWriterwriteheader	writerows	isoformat)rQ   atrS   rB   rC   rR   startend
market_direvents_path	meta_pathmetar.   rG   r4   rH   idxr;   r*   rU   	processedfliner   tsstamprP   keywriters                                r   replay_orderbook_windowrw   E   s    r]FY~66E
9^4
4CT!J77K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-B>  4==xXy{"=E=!#DI			#		0 bA 	bD::<**T"CS!BzCx$NI!c!KCuO_`a	bb  01 WUG1^4DE#JJTD9J ' 	'C*$!!#&	'' 
		#rG		< j9 ""$(%D	;' O JE >b b0 s7   (J,J12 J6J<AK""K9KK
K)r   r$   returnr   )r   dict[str, Any]rx   zdatetime | None)r*   dict[str, OrderBook]r   ry   rx   None)r   ry   r*   rz   r;   zdict[str, str]rx   zlist[dict[str, Any]])rQ   r$   rh   r$   rS   intrB   r   rC   zPath | Nonerx   ry   )
__future__r   rc   rX   r   r   r   pathlibr   typingr   analysis.safe_btc5.typesr	   recorderr   r   r   r0   rA   rw    r   r   <module>r      s    " 
  2 2   - +1I"	   %	
 @ :&#B
B 	B 	B
 B B Br   