
    0;i'                     P    d dl Z d dlZd dlZd dlZd dlmZ  e        d Zd Zd Zy)    N)load_dotenvc                  H   d} g }dddddd}	 t        j                  | |d      }|j                          |j                         }|sn|j	                  |       |d	xx   dz  cc<   Zt        d
d      5 }t        j                  ||d       ddd       |S # 1 sw Y   |S xY w)z+Paginate through all open Polymarket eventsz'https://gamma-api.polymarket.com/eventsidfalsed   r   )order	ascendingclosedlimitoffset   )paramstimeoutr   poly_events.jsonw   indentN)requestsgetraise_for_statusjsonextendopendump)url
all_eventsr   responseeventsfs         "/home/rose/Desktop/poly/helpers.pygetAllPolyEventsr"   	   s    
3CJ F <<FB?!!#&!xC  
 #	&!		*a* 
'  
' s   4BB!c                     d} ddt        j                  d       i}g }dddt        t        j                               d}	 t	        j
                  | ||d	
      }|j                          |j                         }|j                  dg       }|sn@|j                  |       |j                  d      }|sn||d<   t        j                  d       t        dd      5 }t        j                  ||d       ddd       |S # 1 sw Y   |S xY w)z/Paginate through all Kalshi events using cursorz4https://api.elections.kalshi.com/trade-api/v2/eventsAuthorizationzBearer KALSHI_API_KEY   truer   )r   with_nested_marketsstatusmin_close_tsr   )headersr   r   r   cursorg      ?kalshi_events.jsonr   r   r   N)osgetenvinttimer   r   r   r   r   sleepr   r   )	r   r+   r   r   r   datar   r,   r    s	            r!   getAllKalshiEventsr4   &   s   
@C'"))4D*E)F GHGJ %DIIK(	F <<WVRP!!#}}(B'&!(#!x

3 " 
"C	(A		*a* 
)  
) s   C??D	c                    *+,- ddl m *m} m} ddl-t	        d       t        dd      5 }t        j                  |      }ddd       t        dd      5 }t        j                  |      }ddd       t	        dt               d	t               d
       *j                  |j                        }| | d      z   }t	        d       g }|D ]w  }d}	|j                  dg       D ]J  }
|
j                  d      }|s	 *j                  |j                  dd            }||cxk  r|k  rn nd}	 nL |	sg|j                  |       y t	        dt        |       d       t	        d       g }|D ]v  }d}	|j                  dg       D ]I  }
|
j                  d      }|s*j                  |j                  dd            }||cxk  r|k  sDn Gd}	 n |	sf|j                  |       x t	        dt        |       d       -fd++fd}*fd}g }t	        dt        |       dt        |       d       |r!t	        d|d   j                  d d!              |r"t	        d"|d   j                  d d!       d#       t        |      D ]  \  }}|d$z  dk(  r't	        d%| d&t        |       d't        |       d(       |j                  d      sH|j                  d d!       d)|j                  d*d!       j!                         } ||      ,d}d}|D ]v  }|j                  d      s|j                  d d!      } ||      } |||      }d}|r&,r$t#        ,fd+|D              }|d,k  rd-d.|d,z  z
  z  }||z   }||kD  sm|d/kD  ss|}|}x |dk(  r/t	        d0|dd1  d2|d3d4|r|j                  d d!      dd1 nd5        |s<g }t%               }|j                  dg       D ]  } | j                  d6d!      }!| j                  d7d!      }"d}#d}$|j                  dg       D ]  }%|%j                  d8      |v r|%j                  d9d!      xs |%j                  d:d!      }&|%j                  d d!       d)|& j!                         }' ||!|'      }(d;|"j'                         v rd<|"j'                         v r|(d=z  }(|(|$kD  s|(d/kD  s|(}$|%}# |#s|#j                  d9d!      xs |#j                  d:d!      }&|#j                  d8      })|j)                  |)       |j                  t+        |$d>      | j                  d?      |!| j                  d7      | j                  d@      dA|)|&r|#j                  d d!       dB|& n|#j                  d d!      |#j                  dC      |#j                  dD      |#j                  d      dEdF        |s=|j                  t+        |d>      |d?   |j                  d d!      |j                  dG      dH|j                  dI      |dJ|dK        t	        dLt        |       dM       t	        dN       |j-                  dO dP       t	        dQ       t        dRdS      5 }t        j.                  ||dT       ddd       t	        dU       |S # 1 sw Y   [xY w# 1 sw Y   >xY w#  Y xY w# 1 sw Y   8xY w)VzIMatch Polymarket and Kalshi events/markets using keywords and close timesr   )datetime	timedeltatimezoneNzLoading events...r   rr-   zLoaded z Poly events, z Kalshi eventsr   )daysz&Filtering Poly events by close time...FmarketsendDateZ+00:00TzFiltered to z" Poly events closing within 2 daysz(Filtering Kalshi events by close time...
close_timez$ Kalshi events closing within 2 daysc                 z    | j                         } h dj                  d|       }t        fd|D              S )z%Extract meaningful keywords from text>(   aanatbedoifinisofonortoandarebutdidforhadhashowthewaswhowhybeendoeshavethanthatthenthiswerewhatwhenwillbeingthesethosewherewhichz\b[a-z0-9]+\bc              3   J   K   | ]  }|vst        |      d kD  s|  yw)r   Nlen).0r   	stopwordss     r!   	<genexpr>z8matchEvents.<locals>.extract_keywords.<locals>.<genexpr>   s#     Ieq	'9c!fqj1es   	###)lowerfindallset)textwordsrm   res     @r!   extract_keywordsz%matchEvents.<locals>.extract_keywords~   s8    zz| u	

+T2IeIII    c                 x     |       } |      }|r|sy||z  }||z  }|rt        |      t        |      z  S dS )zScore based on keyword overlapr   rj   )text1text2kw1kw2intersectionunionru   s         r!   keyword_match_scorez(matchEvents.<locals>.keyword_match_score   sL    u%u%#Syc	16s< 3u:-=A=rv   c           	          g }| j                  dg       D ]Z  }|j                  d      xs |j                  d      }|s*	 |j                  j                  |j                  dd                   \ |S #  Y cxY w)z&Get all close times from event marketsr;   r?   r<   r=   r>   )r   appendfromisoformatreplace)eventtimesmtime_strr6   s       r!   get_close_timesz$matchEvents.<locals>.get_close_times   sv    9b)Auu\*>aeeI.>HLL!7!78H8Hh8W!XY	 * s   0A55A9z

Matching z Kalshi events against z Poly events...z
Sample Kalshi event: title zSample Poly event: 

   z  Processed /z Kalshi events, found z matches 	sub_titlec              3   d   K   | ]'  }D ]   }t        ||z
  j                                " ) y w)N)abstotal_seconds)rl   ptktk_timess      r!   rn   zmatchEvents.<locals>.<genexpr>   s0     b"ZaTVsBG#:#:#<=Za=s   -0i`T  g333333?   g?z  Best match for '2   z...': score=z.3fz, match=Nonequestionoutcomestickeryes_sub_titleno_sub_titleyesnog?   r   outcomePrices)r   r   r   pricesz - yes_bidyes_ask)r   r   r   r   r?   )scorepoly_marketkalshi_marketslug)r   r   r   event_ticker)r   r   )r   
poly_eventkalshi_eventmarket_matchesz
Found z total event matcheszSorting by score...c                 (    | d   t        | d         fS )Nr   r   rj   )xs    r!   <lambda>zmatchEvents.<locals>.<lambda>  s    '
C2B0C,DErv   )keyreversezWriting to matches.json...zmatches.jsonr   r   zDone!)r6   r7   r8   rt   printr   r   loadrk   nowutcr   r   r   r   	enumeratestripminrq   ro   addroundsortr   ).r7   r8   r    polykalshir   two_daysfiltered_polyphas_near_closer   end_date_strend_datefiltered_kalshikclose_time_strr?   r~   r   matchesik_titlebest_p
best_scorep_titlep_timeskw_score
time_bonusmin_diffr   r   used_kalshipm
p_question
p_outcomes
best_matchbest_market_scorekm
k_subtitle
k_questionm_scorek_tickerr6   ru   r   rt   s.                                             @@@@r!   matchEventsr   I   s   66	
	 #	&!yy| 
'	"C	(A1 
) 
GCI;nS[M
HI
,,x||
$CYA&&H 

23My"%A55+L'55l6J6J3PX6YZHh2(2)- &   #  
L]+,,N
OP 

45Oy"%AUU<0N%33N4J4J3PX4YZ
*00%)N & ""1%  
L_-..R
STJ>
 G	KO,--DSEWDXXg
hi '(:(>(>w(K'LMN#M!$4$8$8"$E#FbIJ/*1r6Q;L1S%9$::PQTU\Q]P^^fghuuYUU7B'(!%%R*@)ABHHJ!!$
A55#eeGR(G%a(G +7G<H J7bbbe#!$Hu,<(<!=Jz)Ez!eck"
+ 0 6&ws|nLC@PPXyY_YcYcdkmoYpqtrtYu  FL  YM  N  ON%KjjB/VVJ3
VVJ3
!
$%!%%	2.Bvvh';6 !#!<!Z~WY@ZJ$&FF7B$7#8*!F!L!L!NJ 2*jIG 
 0 0 22tz?O?O?Q7Q3!22w},3)%'
! /$ !+!D!j
WegiHjJ)~~h7HOOH-"))!&'8!!<"$&&,(2(*z(:&(ff_&=	( '/Xb
w(C'DC
|%Thrhvhvw~  AC  iD'1~~i'@'1~~i'@*4..*F*+ = 0^ ":q1)/

7TV@Wagakaklras"t/0uu^/Dw$W&4	  { +H 
HS\N"6
78	
 LLEtLT	
&'	nc	"a		'1Q' 
# 
'NNG 
'	&	(	(*N 
#	"s/   ZZ&;1Z3+Z;Z#&Z03Z8;[)	r   r   r.   r1   dotenvr   r"   r4   r    rv   r!   <module>r      s*      	   :!FIrv   