o
    پi                  
   @   s^  d dl Z d dlZd dlmZ d dlmZmZ d dlmZm	Z	 g dZ
dZe ZG dd deZeG d	d
 d
Z	d$dededede	e fddZ	d$dededede	e fddZ		d$dededede	e fddZ		d$dededede	e fddZejejejejdZG dd de jZdedee fddZd%d ee d!edee fd"d#Z dS )&    N)	dataclass)Enumauto)ListOptional)	HWBackend
CIRegistrycollect_testsregister_cpu_ciregister_cuda_ciregister_amd_ciregister_npu_ciut_parse_one_fileest_timesuitenightlydisabledc                   @   s$   e Zd Ze Ze Ze Ze ZdS )r   N)__name__
__module____qualname__r   CPUCUDAAMDNPU r   r   N/home/ubuntu/.local/lib/python3.10/site-packages/sglang/test/ci/ci_register.pyr      s
    
r   c                   @   sJ   e Zd ZU eed< eed< eed< eed< dZeed< dZ	e
e ed< dS )	r   backendfilenamer   r   Fr   Nr   )r   r   r   r   __annotations__strfloatr   boolr   r   r   r   r   r   r      s   
 r   Fr   r   r   r   c                 C      dS )z?Marker for CPU CI registration (parsed via AST; runtime no-op).Nr   r   r   r   r   r
   '      r
   c                 C   r#   )z@Marker for CUDA CI registration (parsed via AST; runtime no-op).Nr   r   r   r   r   r   .   r$   r   c                 C   r#   )z?Marker for AMD CI registration (parsed via AST; runtime no-op).Nr   r   r   r   r   r   5      r   c                 C   r#   )z?Marker for NPU CI registration (parsed via AST; runtime no-op).Nr   r   r   r   r   r   ?   r%   r   )r
   r   r   r   c                	   @   sj   e Zd ZdefddZdejdefddZdej	de
eeeee f fd	d
Zdej	fddZdd ZdS )RegistryVisitorr   c                 C   s   || _ g | _d S N)r   
registries)selfr   r   r   r   __init__R   s   
zRegistryVisitor.__init__nodereturnc                 C   s   t |tjr	|jS tS r'   )
isinstanceastConstantvalue_UNSET)r)   r+   r   r   r   _constant_valueV   s   zRegistryVisitor._constant_value	func_callc                 C   sl  dd t D }t }tdd |jD r!t| j d|jj dt|jtt kr7t| j d|jj dt	t |jD ]\}}|
| | |||< q=|jD ]O}|jd u ret| j d|jj d|j|vr{t| j d	|j d
|jj d|j|v rt| j d|j d
|jj d|
|j | |j||j< qQ|d tu s|d tu rt| j d|jj d|d |d }}|d }	t|ttfst| j d|jj dt|tst| j d|jj d|	tu rd}
nt|	tr|	}
nt| j d|jj d|d tur|d nd }|d ur.t|ts.t| j d|jj dt|||
|fS )Nc                 S   s   i | ]}|t qS r   )r1   ).0namer   r   r   
<dictcomp>^   s    z4RegistryVisitor._parse_call_args.<locals>.<dictcomp>c                 s   s    | ]	}t |tjV  qd S r'   )r-   r.   Starred)r4   argr   r   r   	<genexpr>a   s    z3RegistryVisitor._parse_call_args.<locals>.<genexpr>z): starred arguments are not supported in z()z#: too many positional arguments in z : **kwargs are not supported in z: unknown argument 'z' in z: duplicated argument 'r   r   z/: est_time and suite are required constants in r   z: est_time must be a number in z: suite must be a string in Fz: nightly must be a boolean in r   z: disabled must be a string in )_PARAM_ORDERsetanyargs
ValueErrorr   funcidlenzipaddr2   keywordsr8   r0   r1   r-   intr!   r    r"   )r)   r3   r=   seenr5   r8   kwr   r   nightly_valuer   r   r   r   r   _parse_call_args[   sn   






z RegistryVisitor._parse_call_argsc                 C   sT   t |jtjs	d S t|jj}|d u rd S | |\}}}}t|| j	||||dS )N)r   r   r   r   r   r   )
r-   r?   r.   NameREGISTER_MAPPINGgetr@   rI   r   r   )r)   r3   r   r   r   r   r   r   r   r   _collect_ci_registry   s   z$RegistryVisitor._collect_ci_registryc                 C   sV   |j D ] }t|tjrt|jtjsq| |j}|d ur#| j| q| 	| d S r'   )
bodyr-   r.   Exprr0   CallrM   r(   appendgeneric_visit)r)   r+   stmtcrr   r   r   visit_Module   s   
zRegistryVisitor.visit_ModuleN)r   r   r   r    r*   r.   ASTobjectr2   rP   tupler!   r"   r   rI   rM   rU   r   r   r   r   r&   Q   s    
Er&   r   r,   c                 C   sZ   t | d}| }W d    n1 sw   Y  tj|| d}t| d}|| |jS )Nr)r   )openreadr.   parser&   visitr(   )r   ffile_contenttreevisitorr   r   r   r      s   


r   Tfilessanity_checkc                 C   sR   g }| D ]"}t |}t|dkr!d| }|rt|t| q|| q|S )Nr   zNo CI registry found in )r   rA   r>   warningswarnextend)rb   rc   ci_testsfiler(   msgr   r   r   r	      s   

r	   )FN)T)!r.   rd   dataclassesr   enumr   r   typingr   r   __all__r:   rW   r1   r   r   r!   r    r"   r
   r   r   r   r   r   r   r   rK   NodeVisitorr&   r   listr	   r   r   r   r   <module>   sz    





m$	