o
    ڷi_`                     @   s   d dl Z d dlZd dlmZmZmZmZmZmZm	Z	m
Z
mZmZ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 ddlmZ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& G dd	 d	ee	e Z'dS )
    N)AnyCallableDictIterableIteratorListMutableSequenceOptionalTupleTypeUnion   )
	ValueKind_is_missing_literal_is_none_resolve_optionalformat_and_raiseget_value_kindis_intis_primitive_listis_structured_configtype_str)BoxContainerMetadataNode)BaseContainer)ConfigAttributeErrorConfigTypeErrorConfigValueErrorKeyValidationErrorMissingMandatoryValueReadonlyConfigErrorValidationErrorc                       s4  e Zd ZU eee def ed< ddededfdeee e	edf d edf dede
e deee ef d	ed
eee ef de
eeef  ddf fddZdmdededdfddZdededdfddZdeeef dd fddZdnddZdee fddZdededdfddZdedefddZdeeef defd d!Zdede	eeef fd"d#Zdeeef deddfd$d%Zdeeef deddfd&d'Zd(eddfd)d*Zdod+d,Zded(eddfd-d.Z d/ee ddfd0d1Z!d2eddfd3d4Z"deeef ddfd5d6Z#dod7d8Z$	dpd2ed9e
e d:e
e defd;d<Z%d2edefd=d>Z&			?	?dqdeeef d@edAedBedCedee
e ee
e  f fdDdEZ'dmdedFedefdGdHZ(drdedefdJdKZ)	?dsde
e*egef  dLeddfdMdNZ+dOedefdPdQZ,dOedefdRdSZ-defdTdUZ.de/e fdVdWZ0G dXdY dYe/e Z1dZede/e fd[d\Z2dOeee d f dd fd]d^Z3dOeee d f dd fd_d`Z4dOee dd fdadbZ5d(edefdcddZ6dmdede
eeef  ddfdedfZ7	dmdede
eeef  ddfdgdhZ8e9die
d  dje
d  defdkdlZ:  Z;S )t
ListConfigN_contentTcontent.keyparentelement_typeis_optionalref_typeflagsreturnc           
         s   zDt |tr|d u r|jj}t j|t|t|||t|dd t |tr;t	
|j}||_||_||_||_|| jd< | j||d W d S  tyb }	 ztd |d |	t|	d W Y d }	~	d S d }	~	ww )N)r*   object_typer&   optionalr(   key_typer+   )r'   metadata	_metadata)valuer+   )noder&   r2   causemsg)
isinstancer#   r1   r+   super__init__r   listintcopydeepcopyr&   r*   r.   r(   __dict__
_set_value	Exceptionr   str)
selfr%   r&   r'   r(   r)   r*   r+   r0   ex	__class__ J/home/ubuntu/vllm_env/lib/python3.10/site-packages/omegaconf/listconfig.pyr8   .   s8   



$zListConfig.__init__r2   c                 C   s   t |ttfstdd S )Nz<ListConfig indices must be integers or slices, not $KEY_TYPE)r6   r:   slicer   rA   r&   r2   rE   rE   rF   _validate_getT   s
   zListConfig._validate_getc           
      C   s  ddl m} | || | drtdd|  kr!|  k r?n n| |}|d ur?t|ts3J |d u r?|	 s?t
dt|}|tjkrJd S t| jj\}}||}|d u r]|rjt|r}|d urt||sdt| dt| d| }	t
|	d S d S d S )	Nr   )	OmegaConfreadonlyzListConfig is read-onlyz5$FULL_KEY is not optional and cannot be assigned NonezInvalid type assigned: z is not a subclass of z	. value: )	omegaconfrJ   rI   	_get_flagr!   __len__	_get_noder6   r   _is_optionalr"   r   r   MANDATORY_MISSINGr   r1   r(   get_typer   
issubclassr   )
rA   r&   r2   rJ   targetvkr)   target_type
value_typer5   rE   rE   rF   _validate_setZ   s@   



zListConfig._validate_setmemoc              
   C   s   t d }tj| jd |d|jd< tj| jd |d|jd< | jd }t|trXg }|D ]*}|jd }zd |jd< tj||d}||jd< || W ||jd< q,||jd< w n|}||jd< | jd |jd< |S )Nr1   )rY   _flags_cacher$   _parent)r#   r;   r<   r=   r6   r9   append)rA   rY   ressrc_contentcontent_copyv
old_parentvcrE   rE   rF   __deepcopy__}   s*   






zListConfig.__deepcopy__c                 C   s
   t  | S N)r;   rA   rE   rE   rF   r;      s   
zListConfig.copyc                 C   s,   |   s|  r
g S dd tdt| D S )Nc                 S   s   g | ]}t |qS rE   )r@   ).0xrE   rE   rF   
<listcomp>   s    z&ListConfig.__dir__.<locals>.<listcomp>r   )_is_missingr   rangelenre   rE   rE   rF   __dir__   s   zListConfig.__dir__c                 C   s   | j ||tdd J )N,ListConfig does not support attribute accessr&   r2   r4   )_format_and_raiser   rH   rE   rE   rF   __setattr__   s   zListConfig.__setattr__c                 C   sJ   |dkrt  |dkrt  t|r| t|S | j|d tdd d S )N__members____name__rm   rn   )AttributeErrorr   __getitem__r:   ro   r   rA   r&   rE   rE   rF   __getattr__   s   
zListConfig.__getattr__indexc           	   
   C   s  zl|   r	td| |d  |  rtdt| jd ts!J t|tr`g }| 	|\}}}t
tdt| |||D ]}| j|| jd | d}|| q=|jr]|jdk r]|  |W S | j|| jd | dW S  ty } z| j|d |d W Y d }~d S d }~ww )NzListConfig is missingz8ListConfig object representing None is not subscriptabler$   r   r&   r2   rn   )ri   r    rI   r   	TypeErrorr6   r=   r9   rG   _correct_index_params	itertoolsislicerj   rk   _resolve_with_defaultr\   stepreverser?   ro   )	rA   rw   resultstartstopr~   	slice_idxvalerE   rE   rF   rt      s:   
zListConfig.__getitem__c                 C   s   |j }|j}|j}|j r|j dk r|  |j  }|jr'|jdk r'|  |j }|jrw|jdk rwt|}|rJ|rJ||krE|d |d }}n2d }}n-|s`|r`tt|  d || d }d }n|ro|so|d }|d | }n|  d | }|||fS Nr   r   )r   r   r~   rN   absr9   rj   )rA   rw   r   r   r~   rE   rE   rF   rz      s*   

z ListConfig._correct_index_paramsc                 C   s   |  || d S rd   )_set_item_impl)rA   rw   r2   rE   rE   rF   _set_at_index      zListConfig._set_at_indexc              
   C   s^  zt |trt|}|t| }t| }|jdvr0t|t|kr0tdt| dt| t|dkr>|d d }d}|  }d}	t	|D ]\}}
|
|	 }||= |t|k rb|
|||  qH|	d7 }	qHt|d t|D ]}|d7 }|
|||  qp|   | | W d S | || W d S  ty } z| j|||d W Y d }~d S d }~ww )N)Nr   z#attempt to assign sequence of size z to extended slice of size r   r   rn   )r6   rG   iterindicesrk   rj   r~   
ValueErrorr;   	enumerateinsertclearextendr   r?   ro   )rA   rw   r2   _self_indicesindexes
curr_indexval_i	work_copyonly_removedir   rE   rE   rF   __setitem__   sB   


zListConfig.__setitem__itemc              
   C   sb   | j d }t|}|d  z	| || W d S  ty0 } z||= | j|||d J d }~ww )Nr$   rn   )r=   rk   r\   r   r?   ro   )rA   r   r%   rw   r   rE   rE   rF   r\   %  s   

zListConfig.appendc                 C   s>   t t| D ]}| |}|d urt|tsJ ||j_qd S rd   )rj   rk   rO   r6   r   r1   r&   )rA   r   r3   rE   rE   rF   _update_keys0  s   
zListConfig._update_keysc              
   C   s  ddl m} ze| drtd|  rtd|  r tdz9t| j	d t
s+J | j	d |d  t| jj\}}|||||| d}| j||d	 | || |   W W d S  tyk   | j	d |= |    w  ty } z
| j|||d
 J d }~ww )Nr   )_maybe_wraprK   z)Cannot insert into a read-only ListConfigz6Cannot insert into ListConfig object representing Nonez%Cannot insert into missing ListConfigr$   )r*   r&   r2   r)   r'   rx   rn   )omegaconf.omegaconfr   rM   r!   r   ry   ri   r    r6   r=   r9   r   r   r1   r(   rX   r   r   r?   ro   )rA   rw   r   r   r)   r*   r3   r   rE   rE   rF   r   7  sD   
zListConfig.insertlstc                 C   s,   t |tttfs
J |D ]}| | qd S rd   )r6   tupler9   r#   r\   )rA   r   rg   rE   rE   rF   r   [  s   zListConfig.extendrg   c                 C   s   | |  |= d S rd   )rw   rA   rg   rE   rE   rF   remove`  r   zListConfig.removec                 C   s6   |  dr| j|d tdd | jd |= |   d S )NrK   z,Cannot delete item from read-only ListConfigrn   r$   )rM   ro   r!   r=   r   ru   rE   rE   rF   __delitem__c  s   
zListConfig.__delitem__c                 C   s   | d d = d S rd   rE   re   rE   rE   rF   r   o     zListConfig.clearr   endc                 C   s   |d u rd}|d u rt | }|dksJ |t | ksJ d}t||D ]}| | }||kr1|} nq#|dkr8|S | jd d tdd J )Nr   r   zItem not found in ListConfigrn   )rk   rj   ro   r   )rA   rg   r   r   	found_idxidxr   rE   rE   rF   rw   r  s*   zListConfig.indexc                 C   s"   d}| D ]
}||kr|d }q|S r   rE   )rA   rg   cr   rE   rE   rF   count  s   zListConfig.countFvalidate_accessvalidate_keythrow_on_missing_valuethrow_on_missing_keyc           	      C   s  z^|   r	td|  rtdt| jd tsJ |r"| | | jd | }|d ur\t|trKt|ts9J |D ]}|rG| rGtdq;|W S t|t	sRJ |r\| r\td|W S  t
tttfy } zt|trr|rr |r~| j|d |d J W Y d }~d S d }~ww )Nz:Cannot get_node from a ListConfig object representing Nonez)Cannot get_node from a missing ListConfigr$   zMissing mandatory valuezMissing mandatory value: $KEYrn   )r   ry   ri   r    r6   r=   r9   rI   rG   r   
IndexErrorr   ro   )	rA   r&   r   r   r   r   r2   r`   r   rE   rE   rF   rO     s@   

zListConfig._get_nodedefault_valuec              
   C   s   z.|   r	td|  rtd| |d  t| jd ts!J | j|| jd | |dW S  t	yD } z
| j
|d |d J d }~ww )Nz5Cannot get from a ListConfig object representing Nonez$Cannot get from a missing ListConfigr$   r&   r2   r   rn   )r   ry   ri   r    rI   r6   r=   r9   r}   r?   ro   )rA   rw   r   r   rE   rE   rF   get  s"   zListConfig.getr   c              
   C   s   zD|  dr
td|  rtd|  rtdt| jd ts$J | 	|}t|t
s0J | j||d d}| jd |= |   |W S  ty[ } z| j|d |td J d }~w typ } z
| j|d |d	 J d }~ww )
NrK   z$Cannot pop from read-only ListConfigz5Cannot pop from a ListConfig object representing Nonez$Cannot pop from a missing ListConfigr$   r   )r&   r2   r4   type_overrideFrn   )rM   r!   r   ry   ri   r    r6   r=   r9   
_get_childr   r}   r   r   ro   r   r?   )rA   rw   r3   retr   rE   rE   rF   pop  s2   

zListConfig.popr   c              
      s   zI|  dr
td|  rtd|  rtd d u r(dtdtfdd}ndtdtf fd	d}t| jd
 t	s=J | jd
 j
||d W d S  ty_ } z
| jd d |d J d }~ww )NrK   z"Cannot sort a read-only ListConfigz1Cannot sort a ListConfig object representing Nonez Cannot sort a missing ListConfigrg   r,   c                 S   s   |   S rd   _valuerg   rE   rE   rF   key1  s   zListConfig.sort.<locals>.key1c                    s    |   S rd   r   r   r&   rE   rF   r        r$   )r&   r   rn   )rM   r!   r   ry   ri   r    r   r6   r=   r9   sortr?   ro   )rA   r&   r   r   r   rE   r   rF   r     s"   
zListConfig.sortotherc                 C   sd   t |ttfs|d u rt|ddid}t| |S |d u s"t |tr(t| |S |  r0t|S tS )Nallow_objectsT)r+   )r6   r9   r   r#   _list_eqri   r   NotImplementedrA   r   rE   rE   rF   __eq__   s   zListConfig.__eq__c                 C   s   |  |}|tur| S tS rd   )r   r   )rA   r   rg   rE   rE   rF   __ne__
  s   
zListConfig.__ne__c                 C   s   t t| S rd   )hashr@   re   rE   rE   rF   __hash__  r   zListConfig.__hash__c                 C   s   | j ddS )NTresolve)_iter_exre   rE   rE   rF   __iter__  r   zListConfig.__iter__c                   @   s>   e Zd ZdededdfddZdefddZdefd	d
ZdS )zListConfig.ListIteratorr   r   r,   Nc                 C   s2   || _ t|jd | _d| _ddlm} || _d S )Nr$   r   r   )	ValueNode)r   r   r=   iteratorrw   nodesr   )rA   r   r   r   rE   rE   rF   r8     s
   
z ListConfig.ListIterator.__init__c                 C   s`   t | j}| jr| }| rtd| j | jd | _t|| jr(|	 S |
 r.d S |S )NzMissing value at index r   )nextr   r   _dereference_noderi   r    rw   r6   r   r   r   r   rE   rE   rF   __next__  s   
z ListConfig.ListIterator.__next__c                 C   s   d| j  dS )Nz ListConfig.ListIterator(resolve=)r   re   rE   rE   rF   __repr__0  r   z ListConfig.ListIterator.__repr__)	rr   
__module____qualname__r   boolr8   r   r@   r   rE   rE   rE   rF   ListIterator  s    r   r   c              
   C   s`   z|   r	td|  rtdt| |W S  ttfy/ } z
| jd d |d J d }~ww )Nz4Cannot iterate a ListConfig object representing Nonez#Cannot iterate a missing ListConfigrn   )r   ry   ri   r    r#   r   ro   )rA   r   r   rE   rE   rF   r   3  s   zListConfig._iter_exc                 C   s(   t |  g d}||  || |S N)r'   r%   r#   _get_parentr   rA   r   r]   rE   rE   rF   __add__?     

zListConfig.__add__c                 C   s(   t |  g d}|| ||  |S r   r   r   rE   rE   rF   __radd__F  r   zListConfig.__radd__c                 C   s   |  | | S rd   )r   r   rE   rE   rF   __iadd__M  s   
zListConfig.__iadd__c                 C   sN   |   rtd|  rtd| jd }|D ]}| }||kr$ dS qdS )NzCCannot check if an item is in a ListConfig object representing Nonez0Cannot check if an item is in missing ListConfigr$   TF)r   ry   ri   r    r=   r   )rA   r   r   rg   rE   rE   rF   __contains__Q  s   
zListConfig.__contains__c              
   C   sX   z| j d }| j d }| || W d S  ty+ } z|| j d< || j d< |d }~ww )Nr$   r1   )r=   _set_value_implr?   )rA   r2   r+   previous_contentprevious_metadatar   rE   rE   rF   r>   b  s   



zListConfig._set_valuec           	      C   s  ddl m}m} |d u ri }t|dd}t|r+|  s tdd | jd< d | j_	d S |t
ju r;|| jd< d | j_	d S |t
jkrK|| jd< d | j_	d S t|sct|tsct|}d|j d}t|g | jd< t|trt|| j_|| d	d
gd |jddD ]}| | qW d    n1 sw   Y  n&t|r|| d	d
gd |D ]}| | qW d    n1 sw   Y  t| j_	d S )Nr   )MISSINGflag_overrideT)strict_interpolation_validationz7Non optional ListConfig cannot be constructed from Noner$   zInvalid value assigned: z$ is not a ListConfig, list or tuple.structrK   Fr   )rL   r   r   r   r   rP   r"   r=   r1   r-   r   rQ   INTERPOLATIONr   r6   r#   typerr   r;   r<   r+   r   r\   r9   )	rA   r2   r+   r   r   rU   type_r5   r   rE   rE   rF   r   l  sJ   






zListConfig._set_value_impll1l2c                 C   s   | j d d u }|j d d u }|r|rdS ||krdS t| ts!J t|ts(J t| t|kr2dS tt| D ]}t| |||sE dS q8dS )Nr$   TF)r=   r6   r#   rk   rj   r   _item_eq)r   r   l1_nonel2_noner   rE   rE   rF   r     s   zListConfig._list_eqrd   )r,   r#   )r,   N)NN)TTFF)r   )NF)<rr   r   r   r   r   r   r@   __annotations__r   r
   r	   r   r   r   r   r8   rI   rX   r:   rc   r;   r   rl   rp   rv   rG   rt   rz   r   r   r\   r   r   r   r   r   r   rw   r   rO   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r>   r   staticmethodr   __classcell__rE   rE   rC   rF   r#   *   s   
 	&#
-
$




(

$
*(r#   )(r;   r{   typingr   r   r   r   r   r   r   r	   r
   r   r   _utilsr   r   r   r   r   r   r   r   r   r   baser   r   r   basecontainerr   errorsr   r   r   r   r    r!   r"   r#   rE   rE   rE   rF   <module>   s    40$