o
    0i                     @   sR  d Z ddlZddlZddlZddlmZmZ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mZmZmZmZmZmZmZmZ eeZejdd	d
 eD edZdee dee fddZeddZejdg ddddddddej ddf	deee ej!dedf deee ej!ddf deee ej!ddf deee ej!ddf d eee ej!d!df d"ed#ed$ed%eddfd&d'Z"ejd(g d)dd*ej ddfd+eeej#d,df d"ed#ed$ed%eddfd-d.Z$ejd/d0gd	d9d1eeej#d2df d%eddfd3d4Z%ejd5d6gd	d9d1eeej#d2df d%eddfd7d8Z&dS ):a  Contains commands to interact with papers on the Hugging Face Hub.

Usage:
    # list daily papers (most recently submitted)
    hf papers ls

    # list trending papers
    hf papers ls --sort=trending

    # list papers from a specific date, ordered by upvotes
    hf papers ls --date=2025-01-23

    # list today's papers, ordered by upvotes
    hf papers ls --date=today

    # list papers from a specific week
    hf papers ls --week=2025-W09

    # list papers by a specific submitter
    hf papers ls --submitter=someuser

    # search papers
    hf papers search "vision language"

    # get info about a paper
    hf papers info 2502.08025

    # read a paper as markdown
    hf papers read 2502.08025
    N)	AnnotatedOptionalget_args)CLIErrorHfHubHTTPError)DailyPapersSort_T   )
	FormatOptLimitOptOutputFormatQuietOptTokenOpt_format_cellapi_object_to_dict
get_hf_apiprint_list_outputtyper_factoryPaperSortEnumc                 C   s   i | ]}||qS  r   ).0sr   r   T/home/kim/smarthome/.venv/lib/python3.10/site-packages/huggingface_hub/cli/papers.py
<dictcomp>F   s    r   )typevaluereturnc                 C   s*   | du rdS |   dkrtj  S | S )z6Parse date option, converting 'today' to current date.Ntoday)lowerdatetimedater   	isoformat)r   r   r   r   _parse_dateI   s
   r!   z Interact with papers on the Hub.)helpz	list | ls)zhf papers lszhf papers ls --sort trendingzhf papers ls --date 2025-01-23zhf papers ls --week 2025-W09z hf papers ls --submitter akhaliqzhf papers ls --format json)Zexamples2   Fr   z+Date in ISO format (YYYY-MM-DD) or 'today'.)r"   callbackweekz'ISO week to filter by, e.g. '2025-W09'.monthz;Month to filter by in ISO format (YYYY-MM), e.g. '2025-02'.	submitterz$Filter by username of the submitter.sortzSort results.limitformatquiettokenc	              
   C   sv   t |d}	|r
|jnd}
dd |	j| ||||
|dD }g d}dtdtt fd	d
}t|||d||dddd dS )zList daily papers on the Hub.r,   Nc                 S      g | ]}t |qS r   r   r   
paper_infor   r   r   
<listcomp>   s    zpapers_ls.<locals>.<listcomp>)r   r%   r&   r'   r(   r)   )idtitleupvotescommentspublished_atsubmitted_byitemr   c              	   S   sr   |  dpi }| dp| dpd}|  ddt|  ddddt|  d	dt|  d
dt|  dd|gS )Nr8   fullnameusername r3   r4   <   max_lenr5   r6   r7   getr   str)r9   r8   Zsubmitter_namer   r   r   
_paper_row   s   
zpapers_ls.<locals>._paper_rowr3   right)r5   r6   r*   r+   Zid_keyheadersZrow_fnZ
alignments)r   r   Zlist_daily_papersdictlistrB   r   )r   r%   r&   r'   r(   r)   r*   r+   r,   apisort_keyresults_HEADERSrC   r   r   r   	papers_lsU   s.   
)
rM   search)z"hf papers search "vision language"z1hf papers search "attention mechanism" --limit 10z*hf papers search "diffusion" --format json   queryzSearch query string.c           	   	   C   s^   t |d}dd |j| |dD }g d}dtdtt fdd	}t|||d
||ddid dS )zSearch papers on the Hub.r-   c                 S   r.   r   r/   r0   r   r   r   r2      s    z!papers_search.<locals>.<listcomp>)rP   r)   )r3   r4   r5   r7   r9   r   c                 S   s<   |  ddt|  ddddt|  ddt|  ddgS )Nr3   r<   r4   F   r>   r5   r7   r@   )r9   r   r   r   rC      s
   
z!papers_search.<locals>._paper_rowr3   r5   rD   rE   N)r   Zlist_papersrG   rH   rB   r   )	rP   r)   r*   r+   r,   rI   rK   rL   rC   r   r   r   papers_search   s   

rR   infozhf papers info 2601.15621paper_idz'The arXiv paper ID (e.g. '2502.08025').c              
   C   sn   t |d}z|j| d}W n ty) } z|jjdkr$td|  d| d}~ww ttjt	|dd dS )	z<Get info about a paper on the Hub. Output is in JSON format.r-   r3     Paper '' not found on the Hub.N   )indent)
r   r1   r   responsestatus_coder   printjsondumpsr   )rT   r,   rI   rS   er   r   r   papers_info   s   
ra   readzhf papers read 2601.15621c              
   C   s`   t |d}z|j| d}W n ty) } z|jjdkr$td|  d| d}~ww t| dS )zRead a paper as markdown.r-   rU   rV   rW   rX   N)r   Z
read_paperr   r[   r\   r   r]   )rT   r,   rI   contentr`   r   r   r   papers_read   s   
rd   )N)'__doc__r   enumr^   typingr   r   r   ZtyperZhuggingface_hub.errorsr   r   Zhuggingface_hub.hf_apir   Z
_cli_utilsr	   r
   r   r   r   r   r   r   r   r   Z_SORT_OPTIONSEnumrB   r   r!   Z
papers_clicommandtableOptionrM   ZArgumentrR   ra   rd   r   r   r   r   <module>   s   0
	



D
