o
    qoi4                     @   s   d dl Z d dlmZmZ d dlmZ d dlmZ d dl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 d dlmZ d dlmZ d d	lmZ d d
lmZmZ ddlmZm Z m!Z! ddl"m"Z" ddl#m$Z$ G dd deZ%G dd de%Z&G dd de%Z'dS )    N)ABCabstractmethod)	dataclass)dedent)DictListOptionalTuple)	Container
DictConfig
ListConfigNode	OmegaConf	open_dict
read_write)version)ConfigSearchPath)
ObjectType)ConfigResultConfigSource   )ConfigDefaultGroupDefaultInputDefault   )deprecation_warning)SourcesRegistryc                	   @   s   e Zd ZedefddZededee fddZ	edede
fddZedede
fd	d
Zeejfdedee dee fddZedee fddZededdfddZdS )IConfigRepositoryreturnc                 C      d S N selfr!   r!   U/home/ubuntu/.local/lib/python3.10/site-packages/hydra/_internal/config_repository.pyget_schema_source      z#IConfigRepository.get_schema_sourceconfig_pathc                 C   r   r    r!   r#   r'   r!   r!   r$   load_config!   r&   zIConfigRepository.load_configc                 C   r   r    r!   r(   r!   r!   r$   group_exists%   r&   zIConfigRepository.group_existsc                 C   r   r    r!   r(   r!   r!   r$   config_exists)   r&   zIConfigRepository.config_exists
group_nameresults_filterc                 C   r   r    r!   r#   r,   r-   r!   r!   r$   get_group_options-   s   z#IConfigRepository.get_group_optionsc                 C   r   r    r!   r"   r!   r!   r$   get_sources3   r&   zIConfigRepository.get_sourcesconfig_search_pathNc                 C   r   r    r!   r#   r1   r!   r!   r$   initialize_sources7   r&   z$IConfigRepository.initialize_sources)__name__
__module____qualname__r   r   r%   strr   r   r)   boolr*   r+   r   CONFIGr   r/   r0   r   r3   r!   r!   r!   r$   r      s,    r   c                   @   sx  e Zd ZU eed< ee ed< deddfddZdeddfddZdefd	d
Z	de
dee fddZde
defddZde
defddZejfde
dee dee
 fddZdee fddZde
dee dee fddZede
de
fddZde
dee
ee
 ee
 f fdd Zde
d!edee fd"d#Zde
d$edefd%d&ZeG d'd( d(Z ed)e
d*d+ddfd,d-Z!dS ).ConfigRepositoryr1   sourcesr   Nc                 C   s   |  | d S r    )r3   r2   r!   r!   r$   __init__@      zConfigRepository.__init__c                 C   sh   g | _ | D ]*}|jd usJ |jd usJ | |j}t |}||j|j}| j | qd S r    )	r;   get_pathpathprovider_get_schemer   instanceresolveappend)r#   r1   search_pathschemesource_typesourcer!   r!   r$   r3   C   s   z#ConfigRepository.initialize_sourcesc                 C   s,   | j d }|jjdkr|jdksJ d|S )NStructuredConfigSourceschemaz!schema config source must be last)r;   	__class__r4   r@   )r#   rH   r!   r!   r$   r%   M   s   
z"ConfigRepository.get_schema_sourcer'   c                 C   sh   | j |tjd}d }|d ur |j|d}|jjdko|jdk|_|d ur2| ||j	}| 
|||_|S )N)r'   object_typer'   rJ   rK   )_find_object_sourcer   r9   r)   rL   r4   r@   is_schema_source_extract_defaults_listconfig_create_defaults_listdefaults_list)r#   r'   rH   retraw_defaultsr!   r!   r$   r)   U   s   zConfigRepository.load_configc                 C      |  |tjd uS r    )rO   r   GROUPr(   r!   r!   r$   r*   h      zConfigRepository.group_existsc                 C   rW   r    )rO   r   r9   r(   r!   r!   r$   r+   k   rY   zConfigRepository.config_existsr,   r-   c                 C   s@   g }| j D ]}|j|dr||j||d qttt|S )NrN   )r'   r-   )r;   is_groupextendlistsortedset)r#   r,   r-   optionsrH   r!   r!   r$   r/   n   s   
z"ConfigRepository.get_group_optionsc                 C   s   | j S r    )r;   r"   r!   r!   r$   r0   y   s   zConfigRepository.get_sourcesrM   c                 C   sZ   d }| j D ]%}|tjkr||r|} |S q|tjkr'||r&|} |S qtd|S )NzUnexpected object_type)r;   r   r9   	is_configrX   rZ   
ValueError)r#   r'   rM   found_sourcerH   r!   r!   r$   rO   |   s    




z$ConfigRepository._find_object_sourcer?   c                 C   s"   |  d}|dkrdS | d| S )Nz://rI   filer   find)r?   idxr!   r!   r$   rA      s   
zConfigRepository._get_schemegroup_with_packagec                 C   s|   | d}|dkr|}d }n|d| }||d d  }d }|d ur9| d}|dkr9||d d  }|d| }|||fS )N@rI   r   r   :rd   )r#   rg   rf   grouppackagepackage2r!   r!   r$   _split_group   s   


zConfigRepository._split_groupdefaultsc              	      s  d fdd}g }|j ddD ]0}t|tr	tds.d }t|dkr.d|v r.|d}t| }t|dkrDt	d	  d
| t|dkrTt	d	  d| |d }t|t
s_J | |\}	}
}t }| |	| tds|js|d ur||_||}|d urt|tsJ | }tds|d urtd  d| d| d}t| |d urt|t
tfst	dt|j dt|trg }|D ]}| }t|t
st	dt|j d|| q|}tds|
d urd|
v r|  t|j||
|j|jd}n2t|t
r1| |\}}
}tds*|
d ur*d|
v r*|  t||
d}n
t	dt|j || q|S )Nr   c                     s$   d} t td  d|  dd d S )NzGhttps://hydra.cc/docs/1.2/upgrades/1.0_to_1.1/changes_to_package_headerz                    In z8: Defaults List contains deprecated keyword _name_, see z
                    )message)r   r   )urlrN   r!   r$   issue_deprecated_name_warning   s   
zMConfigRepository._create_defaults_list.<locals>.issue_deprecated_name_warningF)rC   z1.2r   optionalzIn z : Too many keys in default item r   z: Missing group name in z 
                            In zL: 'optional: true' is deprecated.
                            Use 'optional z: zi' instead.
                            Support for the old style is removed for Hydra version_base >= 1.2z%Unsupported item value in defaults : z. Supported: string or listz#, nested list items must be strings_name_)rj   valuerk   rr   override)r?   rk   zUnsupported type in defaults : )r   N)_iter_ex
isinstancer   r   base_at_leastlenpopr\   keysra   r7   rm   r:   Keywords#_extract_keywords_from_config_grouprr   	_get_noder   _valuer   r   typer4   rD   r   rj   ru   r   )r#   r'   rn   rq   resitemold_optionalr{   keyconfig_grouprk   	_package2keywordsnodeconfig_valuemsgr_   vvvdefaultr?   r!   rN   r$   rS      s   








z&ConfigRepository._create_defaults_listcfgc              	   C   s   t g }t |s|S t|tsJ t|3 t| | s(|d|}n|	dd |
d|}W d    n1 s>w   Y  W d    n1 sMw   Y  t|tsot|tr_d}nt|j}td| d| d|S )Nrn   HYDRA_REMOVE_TOP_LEVEL_DEFAULTSTmappingzInvalid defaults list in 'z ', defaults must be a list (got ))r   createis_dictrw   r   r   r   	_is_typedrz   	_set_flaggetr   r   r4   ra   )r#   r'   r   emptyrn   type_strr!   r!   r$   rQ     s,   






z'ConfigRepository._extract_defaults_listc                   @   s2   e Zd ZU dZeed< dZeed< dZeed< dS )ConfigRepository.KeywordsFrr   ru    rj   N)	r4   r5   r6   rr   r8   __annotations__ru   rj   r7   r!   r!   r!   r$   r|   1  s   
 r|   rj   r   r   c                 C   sZ   |  d}|d } |dd }t|D ]\}}|dkrd|_q|dkr'd|_q | |_d S )N rI   r   rr   Tru   )split	enumeraterr   ru   rj   )rj   r   elementsrf   er!   r!   r$   r}   7  s   

z4ConfigRepository._extract_keywords_from_config_group)"r4   r5   r6   r   r   r   r   r<   r3   r%   r7   r   r   r)   r8   r*   r+   r   r9   r/   r0   rO   staticmethodrA   r	   rm   r   r   rS   r
   rQ   r   r|   r}   r!   r!   r!   r$   r:   <   sd   
 




ir:   c                   @   s   e Zd ZdefddZdefddZdeddfd	d
Zde	de
e fddZde	defddZde	defddZejfde	de
e dee	 fddZdee fddZdS )CachingConfigRepositorydelegatec                 C   s   t || _i | _d S r    )copydeepcopyr   cache)r#   r   r!   r!   r$   r<   I  s   
z CachingConfigRepository.__init__r   c                 C   
   | j  S r    )r   r%   r"   r!   r!   r$   r%   N     
z)CachingConfigRepository.get_schema_sourcer1   Nc                 C   s   | j | d S r    )r   r3   r2   r!   r!   r$   r3   Q  s   z*CachingConfigRepository.initialize_sourcesr'   c                 C   s:   d| }|| j v r| j | S | jj|d}|| j |< |S )Nzconfig_path=rN   )r   r   r)   )r#   r'   	cache_keyrU   r!   r!   r$   r)   W  s   



z#CachingConfigRepository.load_configc                 C      | j j|dS NrN   )r   r*   r(   r!   r!   r$   r*   `  r=   z$CachingConfigRepository.group_existsc                 C   r   r   )r   r+   r(   r!   r!   r$   r+   c  r=   z%CachingConfigRepository.config_existsr,   r-   c                 C   s   | j j||dS )N)r,   r-   )r   r/   r.   r!   r!   r$   r/   f  s   z)CachingConfigRepository.get_group_optionsc                 C   r   r    )r   r0   r"   r!   r!   r$   r0   m  r   z#CachingConfigRepository.get_sources)r4   r5   r6   r   r<   r   r%   r   r3   r7   r   r   r)   r8   r*   r+   r   r9   r   r/   r0   r!   r!   r!   r$   r   H  s     	
r   )(r   abcr   r   dataclassesr   textwrapr   typingr   r   r   r	   	omegaconfr
   r   r   r   r   r   r   hydrar   hydra.core.config_search_pathr   hydra.core.object_typer   hydra.plugins.config_sourcer   r   core.default_elementr   r   r   r   sources_registryr   r   r:   r   r!   r!   r!   r$   <module>   s$   $
   