+
    #j'                     
   R t ^ RIt^ RIt^ RIt^ RIt^ RItRtRtRt	R R lt
R tR R	 ltR
 R ltR R R lltR R ltR!R R lltR R ltR R ltR R ltR R ltR"R R lltR#R R lltR t]R8X  d
   ]! 4        R# R# )$u  Polymarket CLI helper — query prediction market data.

Usage:
    python3 polymarket.py search "bitcoin"
    python3 polymarket.py trending [--limit 10]
    python3 polymarket.py market <slug>
    python3 polymarket.py event <slug>
    python3 polymarket.py price <token_id>
    python3 polymarket.py book <token_id>
    python3 polymarket.py history <condition_id> [--interval all] [--fidelity 50]
    python3 polymarket.py trades [--limit 10] [--market CONDITION_ID]
Nz https://gamma-api.polymarket.comzhttps://clob.polymarket.comzhttps://data-api.polymarket.comc                F    V ^8  d   QhR\         R\        \        ,          /# )   urlreturn)strdictlist)formats   "g/opt/hermes-venv/lib/python3.14/site-packages/../../../skills/research/polymarket/scripts/polymarket.py__annotate__r      s      c dTk     c                   \         P                  P                  V RR/R7      p \         P                  P                  V^R7      ;_uu_ 4       p\        P
                  ! VP                  4       P                  4       4      uuRRR4       #   + '       g   i     R# ; i  \         P                  P                   dW   p\        RTP                   RTP                   2\        P                  R7       \        P                  ! ^4        Rp?R# Rp?i\         P                  P                    dJ   p\        R	TP                   2\        P                  R7       \        P                  ! ^4        Rp?R# Rp?ii ; i)
z GET request, return parsed JSON.z
User-Agentzhermes-agent/1.0)headers)timeoutNzHTTP : )filezConnection error: )urllibrequestRequesturlopenjsonloadsreaddecodeerror	HTTPErrorprintcodereasonsysstderrexitURLError)r   reqrespes   &   r
   _getr&      s    
..
 
 |=O.P
 
QC^^##C#44::diik0023 5444<<!! affXRz*<<<   "188*-CJJ?sH   )B 2B 
B B	B B E:>AD E:0E:1>E55E:c                    \        V \        4      '       d    \        P                  ! V 4      # V #   \        P                  \
        3 d    T u # i ; i)zIParse double-encoded JSON fields (outcomePrices, outcomes, clobTokenIds).)
isinstancer   r   r   JSONDecodeError	TypeError)vals   &r
   _parse_json_fieldr,   (   sJ    #s	::c?" J $$i0 	J	s   0 AAc                0    V ^8  d   QhR\         R\         /# )r   	price_strr   r   )r	   s   "r
   r   r   2   s        r   c                b     \        V 4      ^d,          R R2#   \        \        3 d    T u # i ; i)z"Format price string as percentage..1f%)float
ValueErrorr*   )r.   s   &r
   _fmt_pctr5   2   s;    	"S(-Q//	" s    ..c                $    V ^8  d   QhR\         /# )r   r   r/   )r	   s   "r
   r   r   :   s     
 
 
r   c                     \        V 4      pVR8  d   RVR,          R R2# VR8  d   RVR,          R R2# RVR 2#   \        \        3 d    \        T 4      u # i ; i)z Format volume as human-readable.i@B $r1   Mi  Kz.0f)r3   r4   r*   r   )volvs   & r
   _fmt_volumer=   :   st    #J	>q9}S)++:q5yoQ''1S'{	" 3xs   = = = AAc                0    V ^8  d   QhR\         R\        /# )r   mindent)r   r   )r	   s   "r
   r   r   G   s     ) )T )3 )r   c                  a	a
 V P                  RR4      p\        V P                  RR4      4      o
\        V P                  RR4      4      p\        V P                  R^ 4      4      pV P                  RR4      pV'       d   R	MR
p\        S
\        4      '       d   \        S
4      ^8  d   \        V\        4      '       d   TMRR.o	RP                  V	V
3R l\        \        \        S
4      \        S	4      4      4       4       4      p\        V V V 24       \        V RV RV 24       M\        V V V RV 24       V P                  RR
4      pV'       d   \        V RV 24       R# R# )zPrint a market summary.question?outcomePrices[]outcomesvolumeclosedFz	 [CLOSED] YesNoz / c              3   `   <"   T F#  pSV,           R \        SV,          4       2x  K%  	  R# 5i)r   N)r5   ).0ioutcome_labelspricess   & r
   	<genexpr> _print_market.<locals>.<genexpr>R   s3      
A a !HVAY$7#89As   +.  z  |  Volume: slugz  slug: N)
getr,   r=   r(   r   lenjoinrangeminr   )r?   r@   rB   rF   r;   rH   statusr.   rT   rO   rP   s   &&       @@r
   _print_marketr[   G   s@   uuZ%Hquu_d;<F z4!89H
aeeHa(
)CUU8U#F"[F&$CK1$4%/$%?%?eT]JJ 
3s6{C,?@A
 
	 	
6(+,9+]3%89
6(-u=>55D'( r   c                $    V ^8  d   QhR\         /# )r   queryr/   )r	   s   "r
   r   r   `   s      c r   c           
        \         P                  P                  V 4      p\        \         RV 24      pVP                  R. 4      pVP                  R/ 4      P                  R\        V4      4      p\        RV RV  R24       VR,           F  p\        R	VR
,           R24       \        R\        VP                  R^ 4      4       RVP                  RR4       24       VP                  R. 4      pVR,           F  p\        VRR7       K  	  \        V4      ^8  d    \        R\        V4      ^,
           R24       \        4        K  	  R# )zSearch for markets.z/public-search?q=events
paginationtotalResultszFound z results for "z":
N
   Nz=== titlez ===z
  Volume: rG   z  |  slug: rT   rI   markets:N   NrS   r@   z
  ... and  more marketsN)
r   parsequoter&   GAMMArU   rV   r   r=   r[   )r]   qdatar_   totalevtre   r?   s   &       r
   
cmd_searchrp   `   s#   5!A5'*1#./DXXh#FHH\2&**>3v;GE	F5'u
56c{{S\N$'(
;swwx';<=[QWY[I\H]^_'')R(A!D) w<!Js7|a/0>? r   c                $    V ^8  d   QhR\         /# )r   limit)int)r	   s   "r
   r   r   r   s       r   c                J   \        \         RV  R24      p\        R\        V4       R24       \	        V^4       F  w  r#\        V RVR,           24       \        R\        VP                  R^ 4      4       R	\        VP                  R
. 4      4       24       \        RVP                  RR4       24       VP                  R
. 4      pVR,           F  p\        VRR7       K  	  \        V4      ^8  d    \        R\        V4      ^,
           R24       \        4        K  	  R# )zShow trending events by volume.z/events?limit=z6&active=true&closed=false&order=volume&ascending=falsezTop z trending events:
z. rd   z   Volume: rG   z  |  Markets: re   z	   slug: rT   rI   :N   Nz   rg   z   ... and rh   N)r&   rk   r   rV   	enumerater=   rU   r[   )rr   r_   rN   ro   re   r?   s   &     r
   cmd_trendingrw   r   s   UG>%0fghF	DV0
12FA&2c'l^$%K!(<=>nSQTQXQXYbdfQgMhLijk	#''&"-./0'')R(A!E* w<!KGq 01?@ 'r   c                $    V ^8  d   QhR\         /# r   rT   r/   )r	   s   "r
   r   r      s     0 0S 0r   c                0   \        \         R\        P                  P	                  V 4       24      pV'       g   \        RV  24       R# V^ ,          p\        RVP                  RR4       24       \        RVP                  R4      '       d   R	MR
 24       \        V4       \        RVP                  RR4       24       \        VP                  RR4      4      p\        V\        4      '       dt   \        VP                  RR4      4      p\        V4       FI  w  rV\        V\        4      '       d   V\        V4      8  d	   WE,          MRV 2p\        RV RV 24       KK  	  VP                  RR4      pV'       d   \        RVR,           24       R# R# )zGet market details by slug.z/markets?slug=zNo market found with slug: NzMarket: rB   rC   Status: rH   CLOSEDACTIVEz
  conditionId: conditionIdzN/AclobTokenIdsrE   rF   zOutcome z	  token (z): descriptionrI   z
  Description: :Ni  N)r&   rk   r   ri   rj   r   rU   r[   r,   r(   r   rv   rV   )	rT   re   r?   tokensrF   rN   tlabeldescs	   &        r
   
cmd_marketr      sX   eWN6<<+=+=d+C*DEFG+D623
A	HQUU:s+,
-.	HxXh?
@A!	aeeM59:
;<quu^T:;F&$$QUU:t%<=f%DA#-h#=#=!c(mBSHK[cdecfYgEIeWCs+, & 55#D!$t*./ r   c                $    V ^8  d   QhR\         /# ry   r/   )r	   s   "r
   r   r      s      C r   c           	         \        \         R\        P                  P	                  V 4       24      pV'       g   \        RV  24       R# V^ ,          p\        RVR,           24       \        R\        VP                  R^ 4      4       24       \        RVP                  R	4      '       d   R
MR 24       \        R\        VP                  R. 4      4       R24       VP                  R. 4       F  p\        VRR7       \        4        K  	  R# )zGet event details by slug.z/events?slug=zNo event found with slug: NzEvent: rd   zVolume: rG   r{   rH   r|   r}   z	Markets: re   
rS   rg   )
r&   rk   r   ri   rj   r   r=   rU   rV   r[   )rT   r_   ro   r?   s   &   r
   	cmd_eventr      s    UG=););D)A(BCDF*4&12
)C	GCL>
"#	H[1!567
89	H!2!2XA
BC	Ic#'')R012"
56WWY#a% $r   c                $    V ^8  d   QhR\         /# r   token_idr/   )r	   s   "r
   r   r      s     7 7 7r   c           	        \        \         RV  R24      p\        \         RV  24      p\        \         RV  24      p\        RV R,           R24       \        R\        VP	                  R	R
4      4       24       \        R\        VP	                  RR
4      4       24       \        RVP	                  RR
4       24       R# )zGet current price for a token.z/price?token_id=z	&side=buyz/midpoint?token_id=z/spread?token_id=zToken: N   N...z  Buy price: pricerC   z  Midpoint:  midz  Spread:    spreadN)r&   CLOBr   r5   rU   )r   buyr   r   s   &   r
   	cmd_pricer      s    
$'z;
<C
$*8*5
6CTF+H:67F	GHSM?#
&'	M(3777C#89:
;<	M(3775##678
9:	M&**Xs34
56r   c                $    V ^8  d   QhR\         /# r   r/   )r	   s   "r
   r   r      s     T Ts Tr   c           
        \        \         RV  24      pVP                  R. 4      pVP                  R. 4      pVP                  RR4      p\        RV R,           R24       \        R	\	        V4       R
VP                  RR4       24       \        R\        V4       R24       \        VR RR7      pVR,           F6  p\        R\	        VR,          4      R R\        VR,          4      R 24       K8  	  \        R\        V4       R24       \        VR R7      pVR,           F6  p\        R\	        VR,          4      R R\        VR,          4      R 24       K8  	  R# )zGet orderbook for a token.z/book?token_id=bidsaskslast_trade_pricerC   zOrderbook for r   r   zLast trade: z  |  Tick size: 	tick_sizez
  Top bids (z total):c                 8    \        V P                  R ^ 4      4      # r   r3   rU   xs   &r
   <lambda>cmd_book.<locals>.<lambda>       U155!3D-Er   T)keyreverserb   z    r   >7z  |  Size: sizez>10.2fz
  Top asks (c                 8    \        V P                  R ^ 4      4      # r   r   r   s   &r
   r   r      r   r   )r   N)r&   r   rU   r   r5   rV   sortedr3   )	r   bookr   r   lastsorted_bidsbsorted_asksas	   &        r
   cmd_bookr      sH   4&z23D88FBD88FBD88&,D	N8C=/
-.	L$((8+s9S8T
UV	N3t9+X
./#EtTKXaj)"-[qy9I&8QRS 	N3t9+X
./#EFKXaj)"-[qy9I&8QRS r   c                <    V ^8  d   QhR\         R\         R\        /# )r   condition_idintervalfidelity)r   rs   )r	   s   "r
   r   r      s!     , ,c ,S ,C ,r   c           	        \        \         RV  RV RV 24      pVP                  R. 4      pV'       g   \        R4       R# \        R\	        V4       RV R	24       ^ R
IHpHp V F  pVP                  VR,          VP                  R7      P                  R4      p\        VR,          4      p	R\        \        VR,          4      ^(,          4      ,          p
\        RV RV	R RV
 24       K  	  R# )zGet price history for a market.z/prices-history?market=z
&interval=z
&fidelity=historyz+No price history available for this market.NzPrice history (z points, interval=):
)datetimetimezoner   )tzz%Y-%m-%d %H:%Mpu   █rS   r   )r&   r   rU   r   rV   r   r   fromtimestamputcstrftimer5   rs   r3   )r   r   r   rm   r   r   r   pttsr   bars   &&&        r
   cmd_historyr      s    4&/~ZzQ[\d[efgDhhy"%G;<	OCL>);H:T
JK+##BsG#=FFGWXC!c%3.2-..2$br
"SE*+	 r   c                0    V ^8  d   QhR\         R\        /# )r   rr   market)rs   r   )r	   s   "r
   r   r      s     U Uc U Ur   c                ,   \          RV  2pV'       d   VRV 2,          p\        V4      p\        V\        4      '       g   \	        RV 24       R# \	        R\        V4       R24       V F  pVP                  RR4      p\        VP                  R	R4      4      pVP                  R
R4      pVP                  RR4      pVP                  RR4      R,          p	VP                  RR4      p
\	        RVR RVR R\        V4      R RV RV	 2
4       K  	  R# )zGet recent trades.z/trades?limit=z&market=zUnexpected response: NzRecent trades (r   siderC   r   r   outcomerd   :N2   N	timestamprI   rS   4r   z  xz>8.2fz  [z]  )	DATAr&   r(   r   r   rV   rU   r5   r3   )rr   r   r   tradesr   r   r   r   r   rd   r   s   &&         r
   
cmd_tradesr      s
   F.
(C&""#YFfd##%fX./	OCK=
-.uuVS!w,-uuVS!%%	3'gs#C(UU;#4("U2Jc%+e)<CyE7ST r   c                     \         P                  R ,          p V '       d   V ^ ,          R9   d   \        \        4       R# V ^ ,          pVR8X  d4   \	        V 4      ^8  d$   \        RP                  V R ,          4      4       R# VR8X  dY   ^
pRV 9   dC   V P                  R4      pV^,           \	        V 4      8  d   \        W^,           ,          4      M^
p\        V4       R# VR8X  d%   \	        V 4      ^8  d   \        V ^,          4       R# VR8X  d%   \	        V 4      ^8  d   \        V ^,          4       R# VR8X  d%   \	        V 4      ^8  d   \        V ^,          4       R# VR	8X  d%   \	        V 4      ^8  d   \        V ^,          4       R# VR
8X  d   \	        V 4      ^8  d   Rp^2pRV 9   d:   V P                  R4      pV^,           \	        V 4      8  d   W^,           ,          MRpRV 9   dC   V P                  R4      pV^,           \	        V 4      8  d   \        W^,           ,          4      M^2p\        V ^,          WE4       R# VR8X  d   ^
pRpRV 9   dC   V P                  R4      pV^,           \	        V 4      8  d   \        W^,           ,          4      M^
pRV 9   d:   V P                  R4      pV^,           \	        V 4      8  d   W^,           ,          MRp\        W&4       R# \        RV 24       \        \        4       R# ):   NNNsearch trendingz--limitr   eventr   r   r   allz
--intervalz
--fidelityr   z--marketzUnknown command: >   help-h--help)r   argvr   __doc__rV   rp   rW   indexrs   rw   r   r   r   r   r   r   )argscmdrr   idxr   r   r   s          r
   mainr      sC   88B<D4766g
q'C
h3t9>388DH%&	
	**Y'C*-'CI*=C1W&2EU	SY!^47	CIN$q'	CIN$q'	3t9>a			c$i1n4**\*C(+a#d)(;t!G}H4**\*C-01Ws4y-@s4a=)bHDGX0	**Y'C*-'CI*=C1W&2E**Z(C&)AgD	&9T']tF5!!#'(gr   __main__)rI   )rc   )r   r   )rc   N)r   r   r   urllib.requestr   urllib.parseurllib.errorrk   r   r   r&   r,   r5   r=   r[   rp   rw   r   r   r   r   r   r   r   __name__ r   r
   <module>r      s     
   *$(
)2$ 0, 7T&, U(.b zF r   