o
    qoi*                     @   sj   d dl mZmZmZmZ d dlmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZmZ G dd dZdS )	    )AnyListOptionalType)markparamraisesskip)InputDefault)
ObjectType)ConfigLoadErrorConfigSourcec                   @   sb  e Zd ZdefddZdee deddfddZe	
d	ed
dddeddddeddddeddddeddddeddddeddddeddddeddddg	dee dedededdf
ddZe	
d	g ddee dedededdf
ddZe	
d	dgdee dedededdf
dd Ze	
d!d
ejg d"fdejg fdejg fdejd#gfdejg fd
ejd$gfdejd%d&gfdejd'd(gfdejg fdejd)d*gfd
dg d+fddd%d&gfddd'd(gfddd#gfddd)d*gfd
dg d+fgdee deded,ee dee ddfd-d.Ze	
d!d
ejdgfgdee deded,ee dee ddfd/d0Ze	
d1ed$d2diddd$ded3d2d4iddd3dedd&d5d6dddded7d%d8d6ddd7ded9eeddd9dedd:didddded;d<diddd;ded=dd&igd>d?ddd=ded@dAdBigdCdDddEd@dedFdAdBigdCdDddGdFdg
dee dededHee dIedJedKeddfdLdMZe	
dNedOdAdBiddPdedQdAdBidRdSdedTdAdBidEdUdedVdAdBidGd2dedWdAdBidXdYdedZdAdBid[d\dgdee deded]edIeddfd^d_Zdee deddfd`daZdee deddfdbdcZdS )dConfigSourceTestSuitereturnc                 C   s   dS )a  
        Some config source plugins do not support config name and path overlap.
        For example the following may not be allowed:
        (dataset exists both as a config object and a config group)
        /dateset.yaml
        /dataset/cifar.yaml

        Overriding and returning True here will disable testing of this scenario
        by assuming the dataset config (dataset.yaml) is not present.
        F )selfr   r   _/home/ubuntu/.local/lib/python3.10/site-packages/hydra/test_utils/config_source_common_tests.pyskip_overlap_config_path_name   s   z3ConfigSourceTestSuite.skip_overlap_config_path_nametype_pathNc                 C   s>   |d|d  }|dkrd S |d| dd}| rJ d S )Nfooproviderr   
structuredz://___NOT_FOUND___)scheme	available)r   r   r   r   srcr   r   r   test_not_available   s
   z(ConfigSourceTestSuite.test_not_availablezconfig_path, expected Tempty)iddataset	optimizerconfigs_with_defaults_listdataset/imagenetFlevel1level1/level2level1/level2/nested1	not_foundconfig_pathexpectedc                 C   (   |d|d}|j |d}||ksJ d S Nr   r   r)   )is_groupr   r   r   r)   r*   r   retr   r   r   test_is_group!   s   z#ConfigSourceTestSuite.test_is_group))r   F)r"   F)r$   T)zdataset/imagenet.yamlT)zdataset/imagenet.foobarF))configs_with_defaults_list/global_packageT)(configs_with_defaults_list/group_packageT)r%   F)r&   F)r'   T)r(   Fc                 C   r+   r,   )	is_configr/   r   r   r   test_is_config:   s   z$ConfigSourceTestSuite.test_is_config)r!   Tc                 C   sB   |   rtd|j d |d|d}|j|d}||ksJ d S )NConfigSourcePlugin J does not support config objects and config groups with overlapping names.r   r   r-   )r   r	   __name__r4   r/   r   r   r    test_is_config_with_overlap_nameQ   s   	z6ConfigSourceTestSuite.test_is_config_with_overlap_namez#config_path,results_filter,expected)r!   r%   r"   level2config_without_groupcifar10imagenetadamnesterovnested1nested2)r;   r!   r%   r"   results_filterc           	      C   sD   |d|d}|j ||d}|D ]}||v sJ q|t|ks J d S )Nr   r   r)   rB   )listsorted	r   r   r   r)   rB   r*   r   r0   xr   r   r   	test_listc   s
    zConfigSourceTestSuite.test_listc           	      C   s^   |   rtd|j d |d|d}|j||d}|D ]}||v s$J q|t|ks-J d S )Nr6   r7   r   r   rC   )r   r	   r8   rD   rE   rF   r   r   r   test_list_with_overlap_name   s   z1ConfigSourceTestSuite.test_list_with_overlap_namezCconfig_path,expected_config,expected_defaults_list,expected_packagegroupconfig_with_unicodeu	   数据库z/datasets/imagenet)namer   zdataset/cifar10z/datasets/cifar10zdataset/not_foundl1_l2_n1zlevel1/level2/nested2l1_l2_n2config_with_defaults_listvalue)defaultskeyr2   r   bar
   )rQ   rG   _global_r3   _group_expected_defaults_listexpected_packageexpected_configrecwarnc           
      C   s   t |tsJ |d|d}t|tr1|j|d}	|	j|ksJ |	jd |ks(J |	j|ks/J d S | |j|d W d    d S 1 sEw   Y  d S Nr   r   r-   package)
issubclassr   
isinstancedictload_configconfigheaderdefaults_list)
r   r   r   r)   rW   rX   rY   rZ   r   r0   r   r   r   test_source_load_config   s   ^
"z-ConfigSourceTestSuite.test_source_load_configz.config_path, expected_result, expected_packagezpackage_test/nonenonezpackage_test/explicitza.bexplicitzpackage_test/globalglobalzpackage_test/groupzpackage_test/group_namezfoo._group_._name_
group_namezpackage_test/name_name_rL   expected_resultc                 C   s<   |d|d}|j |d}|jd |ksJ |j|ksJ d S r[   )r`   rb   ra   )r   r   r   r)   rj   rX   r   cfgr   r   r   test_package_behavior  s   z+ConfigSourceTestSuite.test_package_behaviorc                 C   s.   |d|d}|j dd}|jd d ksJ d S )Nr   r   primary_configr-   r\   r`   rb   r   r   r   r   rk   r   r   r   'test_default_package_for_primary_config)     z=ConfigSourceTestSuite.test_default_package_for_primary_configc                 C   s.   |d|d}|j dd}|jd dksJ d S )Nr   r   &primary_config_with_non_global_packager-   r\   rn   ro   r   r   r   +test_primary_config_with_non_global_package0  rq   zAConfigSourceTestSuite.test_primary_config_with_non_global_package)r8   
__module____qualname__boolr   r   r   strr   r   parametrizer   r1   r5   r9   r   GROUPCONFIGr   r   rH   rI   r   r   r
   r   rd   rl   rp   rs   r   r   r   r   r      s   






T	
r   N)typingr   r   r   r   pytestr   r   r   r	   hydra.core.default_elementr
   hydra.core.object_typer   hydra.plugins.config_sourcer   r   r   r   r   r   r   <module>   s   