o
    =n0j_`                     @   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(   Zkey_typer+   )r'   metadata	_metadata)valuer+   )noder&   r1   causemsg)
isinstancer#   r0   r+   super__init__r   listintcopydeepcopyr&   r*   r.   r(   __dict__
_set_value	Exceptionr   str)
selfr%   r&   r'   r(   r)   r*   r+   r/   ex	__class__ [/home/wildlama/miniconda3/envs/lam_a2e/lib/python3.10/site-packages/omegaconf/listconfig.pyr7   .   s8   



$zListConfig.__init__r1   c                 C   s   t |ttfstdd S )Nz<ListConfig indices must be integers or slices, not $KEY_TYPE)r5   r9   slicer   r@   r&   r1   rD   rD   rE   _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: )	omegaconfrI   rH   	_get_flagr!   __len__	_get_noder5   r   _is_optionalr"   r   r   MANDATORY_MISSINGr   r0   r(   get_typer   
issubclassr   )
r@   r&   r1   rI   targetvkr)   target_typeZ
value_typer4   rD   rD   rE   _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 )Nr0   )rW   Z_flags_cacher$   Z_parent)r#   r:   r;   r<   r5   r8   append)r@   rW   resZsrc_contentZcontent_copyvZ
old_parentvcrD   rD   rE   __deepcopy__}   s*   






zListConfig.__deepcopy__c                 C   s
   t  | S N)r:   r@   rD   rD   rE   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 rD   )r?   ).0xrD   rD   rE   
<listcomp>   s    z&ListConfig.__dir__.<locals>.<listcomp>r   )_is_missingr   rangelenr^   rD   rD   rE   __dir__   s   zListConfig.__dir__c                 C   s   | j ||tdd J )N,ListConfig does not support attribute accessr&   r1   r3   )_format_and_raiser   rG   rD   rD   rE   __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__rf   rg   )AttributeErrorr   __getitem__r9   rh   r   r@   r&   rD   rD   rE   __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&   r1   rg   )rb   r    rH   r   	TypeErrorr5   r<   r8   rF   _correct_index_params	itertoolsislicerc   rd   _resolve_with_defaultrX   stepreverser>   rh   )	r@   rp   resultstartstoprw   Z	slice_idxvalerD   rD   rE   rm      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   )rz   r{   rw   rM   absr8   rc   )r@   rp   rz   r{   rw   rD   rD   rE   rs      s*   

z ListConfig._correct_index_paramsc                 C   s   |  || d S r]   )_set_item_impl)r@   rp   r1   rD   rD   rE   _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   rg   )r5   rF   iterindicesrd   rc   rw   
ValueErrorr:   	enumerateinsertclearextendr   r>   rh   )r@   rp   r1   _Zself_indicesZindexesZ
curr_indexZval_iZ	work_copyZonly_removedir}   rD   rD   rE   __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$   rg   )r<   rd   rX   r   r>   rh   )r@   r   r%   rp   r}   rD   rD   rE   rX   %  s   

zListConfig.appendc                 C   s>   t t| D ]}| |}|d urt|tsJ ||j_qd S r]   )rc   rd   rN   r5   r   r0   r&   )r@   r   r2   rD   rD   rE   _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_wraprJ   z)Cannot insert into a read-only ListConfigz6Cannot insert into ListConfig object representing Nonez%Cannot insert into missing ListConfigr$   )r*   r&   r1   r)   r'   rq   rg   )Zomegaconf.omegaconfr   rL   r!   r   rr   rb   r    r5   r<   r8   r   r   r0   r(   rV   r   r   r>   rh   )r@   rp   r   r   r)   r*   r2   r}   rD   rD   rE   r   7  sD   
zListConfig.insertlstc                 C   s,   t |tttfs
J |D ]}| | qd S r]   )r5   tupler8   r#   rX   )r@   r   r`   rD   rD   rE   r   [  s   zListConfig.extendr`   c                 C   s   | |  |= d S r]   )rp   r@   r`   rD   rD   rE   remove`  r   zListConfig.removec                 C   s6   |  dr| j|d tdd | jd |= |   d S )NrJ   z,Cannot delete item from read-only ListConfigrg   r$   )rL   rh   r!   r<   r   rn   rD   rD   rE   __delitem__c  s   
zListConfig.__delitem__c                 C   s   | d d = d S r]   rD   r^   rD   rD   rE   r   o     zListConfig.clearrz   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 ListConfigrg   )rd   rc   rh   r   )r@   r`   rz   r   Z	found_idxidxr   rD   rD   rE   rp   r  s*   zListConfig.indexc                 C   s"   d}| D ]
}||kr|d }q|S r~   rD   )r@   r`   cr   rD   rD   rE   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: $KEYrg   )r   rr   rb   r    r5   r<   r8   rH   rF   r   
IndexErrorr   rh   )	r@   r&   r   r   r   r   r1   rZ   r}   rD   rD   rE   rN     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&   r1   r   rg   )r   rr   rb   r    rH   r5   r<   r8   rv   r>   rh   )r@   rp   r   r}   rD   rD   rE   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 )
NrJ   z$Cannot pop from read-only ListConfigz5Cannot pop from a ListConfig object representing Nonez$Cannot pop from a missing ListConfigr$   r   )r&   r1   r3   Ztype_overrideFrg   )rL   r!   r   rr   rb   r    r5   r<   r8   Z
_get_childr   rv   r   r   rh   r   r>   )r@   rp   r2   retr}   rD   rD   rE   pop  s2   

zListConfig.poprx   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 )NrJ   z"Cannot sort a read-only ListConfigz1Cannot sort a ListConfig object representing Nonez Cannot sort a missing ListConfigr`   r,   c                 S   s   |   S r]   _valuer`   rD   rD   rE   key1  s   zListConfig.sort.<locals>.key1c                    s    |   S r]   r   r   r&   rD   rE   r        r$   )r&   rx   rg   )rL   r!   r   rr   rb   r    r   r5   r<   r8   sortr>   rh   )r@   r&   rx   r   r}   rD   r   rE   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 )NZallow_objectsT)r+   )r5   r8   r   r#   _list_eqrb   r   NotImplementedr@   r   rD   rD   rE   __eq__   s   zListConfig.__eq__c                 C   s   |  |}|tur| S tS r]   )r   r   )r@   r   r`   rD   rD   rE   __ne__
  s   
zListConfig.__ne__c                 C   s   t t| S r]   )hashr?   r^   rD   rD   rE   __hash__  r   zListConfig.__hash__c                 C   s   | j ddS )NTresolve)_iter_exr^   rD   rD   rE   __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<   iteratorrp   nodesr   )r@   r   r   r   rD   rD   rE   r7     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_noderb   r    rp   r5   r   r   r   r   rD   rD   rE   __next__  s   
z ListConfig.ListIterator.__next__c                 C   s   d| j  dS )Nz ListConfig.ListIterator(resolve=)r   r^   rD   rD   rE   __repr__0  r   z ListConfig.ListIterator.__repr__)	rk   
__module____qualname__r   boolr7   r   r?   r   rD   rD   rD   rE   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 ListConfigrg   )r   rr   rb   r    r#   r   rh   )r@   r   r}   rD   rD   rE   r   3  s   zListConfig._iter_exc                 C   s(   t |  g d}||  || |S N)r'   r%   r#   Z_get_parentr   r@   r   rY   rD   rD   rE   __add__?     

zListConfig.__add__c                 C   s(   t |  g d}|| ||  |S r   r   r   rD   rD   rE   __radd__F  r   zListConfig.__radd__c                 C   s   |  | | S r]   )r   r   rD   rD   rE   __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   rr   rb   r    r<   r   )r@   r   r   r`   rD   rD   rE   __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$   r0   )r<   _set_value_implr>   )r@   r1   r+   Zprevious_contentZprevious_metadatar}   rD   rD   rE   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)Zstrict_interpolation_validationz7Non optional ListConfig cannot be constructed from Noner$   zInvalid value assigned: z$ is not a ListConfig, list or tuple.structrJ   Fr   )rK   r   r   r   r   rO   r"   r<   r0   r-   r   rP   ZINTERPOLATIONr   r5   r#   typerk   r:   r;   r+   r   rX   r8   )	r@   r1   r+   r   r   rT   type_r4   r   rD   rD   rE   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<   r5   r#   rd   rc   r   Z_item_eq)r   r   Zl1_noneZl2_noner   rD   rD   rE   r     s   zListConfig._list_eqr]   )r,   r#   )r,   N)NN)TTFF)r   )NF)<rk   r   r   r   r   r   r?   __annotations__r   r
   r	   r   r   r   r   r7   rH   rV   r9   r\   r:   r   re   ri   ro   rF   rm   rs   r   r   rX   r   r   r   r   r   r   rp   r   rN   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r=   r   staticmethodr   __classcell__rD   rD   rB   rE   r#   *   s   
 	&#
-
$




(

$
*(r#   )(r:   rt   typingr   r   r   r   r   r   r   r	   r
   r   r   Z_utilsr   r   r   r   r   r   r   r   r   r   baser   r   r   Zbasecontainerr   errorsr   r   r   r   r    r!   r"   r#   rD   rD   rD   rE   <module>   s    40$