
    8j                         d Z ddlmZmZ ddlmZmZmZ ddlmZ dddddZ		 	 	 	 	 dd
edee
   dee   dedeee      dedefdZddee   dedeeeef      fdZy	)u%  Puntuación y selección de los tweets TOP.

La puntuación combina:
  - engagement (likes, RTs, respuestas, citas) con pesos configurables
  - frescura: un tweet pierde la mitad de su valor cada `recency_halflife_hours`
  - temas: multiplicador extra si el texto menciona alguno de tus temas
    )datetimetimezone)ListOptionalTuple)Tweet      ?       @      ?)likesretweetsrepliesquotesNtweetweightsnowrecency_halflife_hourskeywordskeyword_boostreturnc                 N  
 |xs t         }|xs# t        j                  t        j                        }| j
                  |j                  dd      z  | j                  |j                  dd      z  z   | j                  |j                  dd      z  z   | j                  |j                  dd      z  z   }t        d|| j                  z
  j                         d	z        }|d
kD  rd||z  z  nd}||z  }	|r3| j                  j                         
t        
fd|D              r|	|z  }	|	S )Nr   r	   r   r
   r   r   r   g        g      @r   g      ?c              3   B   K   | ]  }|j                         v   y w)N)lower).0ktexts     agent/ranking.py	<genexpr>zscore_tweet.<locals>.<genexpr>)   s     3(QqwwyD (s   )DEFAULT_WEIGHTSr   r   r   utcr   getr   r   r   max
created_attotal_secondsr   r   any)r   r   r   r   r   r   base	age_hoursdecayscorer   s             @r   score_tweetr*      s    (G

+hll+C 	gkk'3//
..7;;z37
7	8
--'++i5
5	6 ,,Xs3
3	4 	 C# 0 00??AFJKI;QTU;UCI 667[^E5LEzz!3(33]"EL    tweetstop_nc                     | D cg c]  }t        |fi ||f }}|j                  d d       |d | D cg c]  \  }}t        |d      |f c}}S c c}w c c}}w )Nc                     | d   S )Nr    )pairs    r   <lambda>zrank_tweets.<locals>.<lambda>1   s    ar+   T)keyreverse   )r*   sortround)r,   r-   kwargstscoredss         r   rank_tweetsr<   /   sh    5;<V{1''+VF<
KK($K7)/8AU1a[!88 =8s
   AA)NNg      2@Nr   )
   )__doc__r   r   typingr   r   r   agent.modelsr   r   dictfloatstrr*   intr<   r0   r+   r   <module>rE      s    ( ( ( SSCP
 #"$($(d^ 
(	 "	
 tCy!  <9U 9C 94eUZlH[C\ 9r+   