o
    Nrf,O                     @  s>  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlZ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mZmZmZmZmZmZm Z  dd Z!dd	 Z"d
d Z#dd Z$dd Z%dd Z&dd Z'dd Z(dd Z)dd Z*e
dd Z+ej,j-ej.dkddej,/dd d!gd"d# Z0d$d% Z1d&d' Z2d(d) Z3ej,/d*d+d, d-d, d.d, gej,/d/g d0d1d2 Z4d3d4 Z5d5d6 Z6d7d8 Z7d9d: Z8d;d< Z9d=d> Z:d?d@ Z;dAdB Z<ej,/dCdDdEgdFdG Z=dHdI Z>dJdK Z?dLdM Z@ej,/dNdOdPdQdRdSgdRdTgfdUdRdShdRdThfdVdSidVdTifdWg dXdYdWg dZdYfgd[d\ ZAd]d^ ZBd_d` ZCej,/dadbdcgddde ZDdfdg ZEdhdi ZFdjdk ZGdldm ZHdndo ZIej,/dpdqdrdsifdrdsifi fdtdsifi fgdudv ZJdwdx ZKej,/dadtdrgdydz ZLd{d| ZMd}d~ ZNdd ZOdd ZPdd ZQdS )    )annotationsN)OrderedDict)contextmanager)
_get_pathscanonical_namecollectcollect_envcollect_yamlconfigdeserializeensure_fileexpand_environment_variablesgetmergepaths_containing_keypoprefreshrename	serializeupdateupdate_defaultsc                  C  sz   ddd} t d| dksJ t d| dksJ t d| dks J t d| dks)J t d| dks2J t d	| d	ks;J d S )
N      )foo-bar	fizz_buzzr   foo_barz	fizz-buzzr   znew-keyZnew_key)r   )c r   _/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/dask/tests/test_config.pytest_canonical_name%   s   
r   c                  C  s   dddid} ddt ddid}t||  |dddddd	ks#J dddid} dddddd}t|| d
d |dddddd	ksGJ d S )Nr   axyr      br"   zr#   r    r%   r"   r#   r'   oldpriorityr   r   r(   r   r   r   test_update/   s   
r.   c                  C  s   dddddd} ddddddddid}ddt ddddddid}t||d| d	ddddddddidks<J t||d|d	t||d
dksMJ t||dd d	t||ddks^J d S )Nr   r(   r)   r   d)r"   r#   r'   r   c2r$   znew-defaults)r,   defaultsnewr+   r*   r-   )r/   onr   r   r   test_update_new_defaults;   s    r5   c                  C  s   dddiddddidg} dddddd	}dddddd
}t ||| d | dddiddddiddddddd
gksAJ |dddddddksOJ d S )Nr   r   r(   r   r/   r$   )r   r/   r   )r    r%   extra)r    r%   	new-extra)r1   )r    r%   r6   r7   )r   )r1   currentr2   r   r   r   test_update_defaultsN   s   
 r9   c                  C  sB   ddddi} ddgdd}t ||  |dddddksJ d S Nr"   r   r   r#   r'   r$   )r"   wr   r(   r   r   r   test_update_list_to_dict_   s   
r>   c                  C  s@   dddgi} ddddd}t ||  |ddgddksJ d S r:   r=   r(   r   r   r   test_update_dict_to_listf   s   
r?   c                  C  sJ   dddid} ddddid}dddddd	}t | |}||ks#J d S )
Nr   r    r!   r   r$   r%   r&   r(   r)   )r   )r    r%   expectedr   r   r   r   
test_mergem   s
   
rA   c                 C  s   dddid}ddddid}dddddd	}| d
 | d }}| t| | t| tt||gdd}|||f||fgksGJ tt||gd }||ksVJ d S )Nr   r    r!   r   r$   r%   r&   r(   r)   a.yamlb.yamlT)pathsZreturn_pathsrD   )
write_textyamldumplistr	   r   )tmp_pathr    r%   r@   papbZconfigsr
   r   r   r   test_collect_yaml_pathsw   s   rM   c                 C  s   dddid}ddddid}| d | d	 }}| t| | t| ttd
||gd}||gks9J ttd||gdrEJ ttdg drOJ d S )Nr   r    r!   r   r$   r%   r&   rB   rC   y.arE   r<   r"   )rF   rG   rH   rI   r   )rJ   r    r%   rK   rL   rD   r   r   r   test_paths_containing_key   s   rO   c                 C  s   dddid}ddddid}dddddd	}| d
 | d }}| t| | t| tt| gd }||ks?J d S )Nr   r    r!   r   r$   r%   r&   r(   r)   rB   rC   rE   )rF   rG   rH   r   r	   )rJ   r    r%   r@   rK   rL   r
   r   r   r   test_collect_yaml_dir   s   rP   c              
   c  sR    t t | j}|t jA }zt| | d V  W t| | d S t| | w N)statS_IMODEosst_modeS_IREADchmod)pathZ	perm_origZperm_newr   r   r   no_read_permissions   s   
rY   win32z$Can't make writeonly file on windows)reasonkind	directoryfilec           	      C  s   ddd}ddd}| d | d }}| t| | t| |d	kr,| }i }n|}|}t| tt| gd
 }||ksCJ W d    d S 1 sNw   Y  d S )Nr   r   r!   r$      r;   rB   rC   r]   rE   )rF   rG   rH   rY   r   r	   )	rJ   r\   r    r%   rK   rL   Z	cant_readr@   r
   r   r   r   #test_collect_yaml_permission_errors   s   


"r`   c                 C     | d  d tt}tt| gd W d    n1 sw   Y  dt|jv s-J dt|jv s6J dt|jv s?J d S )NrB      {rE   is malformedzoriginal error messagewrite_bytespytestraises
ValueErrorrI   r	   strvaluerJ   Zrecr   r   r    test_collect_yaml_malformed_file      rl   c                 C  ra   )NrB   s   [1234]rE   rc   zmust have a dictrd   rk   r   r   r   #test_collect_yaml_no_top_level_dict   rm   rn   c               	   C  sJ   ddddddddd} d	d
dd	ddg ddd}t | }||ks#J d S )N123TruehelloZ456z[1, 2, "3"]z/not/parsable/as/literalznot included)DASK_A_BDASK_CZDASK_DZ	DASK_E__XZ	DASK_E__YZDASK_FZDASK_GFOO{   T  r!   )r   r   3)a_br   r/   efgr   )envr@   resr   r   r   test_env   s$   	r   preprocc                 C  s   | S rQ   r   r"   r   r   r   <lambda>   s    r   c                 C     |   S rQ   )lowerr   r   r   r   r          c                 C  r   rQ   )upperr   r   r   r   r      r   zv,out))NoneN)ZNullN)FalseF)rp   Tc                 C  s(   d| |i}t |}|d|iksJ d S )NZDASK_Ar    r|   )r   voutr}   r~   r   r   r   test_env_special_values   s   r   c                 C  s   dddid}ddddid}dd	i}d
dddddd}| d | d }}| t| | t| t||g|d}||ksDJ d S )Nr   r    r!   r   r$   r%   r&   ZDASK_W4r_   r(   )r<   r"   r#   r'   rB   rC   )r}   )rF   rG   rH   r   )rJ   r    r%   r}   r@   rK   rL   r
   r   r   r   test_collect  s   r   c                 C  s*   |  dd tg }|ddksJ d S )NZDASK_FOObarfoo)setenvr   r   )monkeypatchr
   r   r   r   test_collect_env_none  s   r   c                  C  s   dddid} t d| ddksJ t d| ddksJ t dd	| dd	ks&J tt t d| d W d    d S 1 s=w   Y  d S )
Nr   r    r   r!   r"   r
   rN   zy.bru   )r   rf   rg   KeyErrorr/   r   r   r   test_get  s   "r   c                 C  s   dddid}ddi}| d }| d }| d d }| t| t||dd	 t| }||ks5J | t| t||dd	 t| }||ksQJ t| t||d
d	 | }d|v sgJ t| }|rrJ d S )Nr   r    r!   r"   ru   source.yamldestF)sourcedestinationcommentTro   )rF   rG   rH   r   	safe_load	read_textrT   remove)rJ   r    r%   r   r   r   resulttextr   r   r   test_ensure_file!  s&   
r   c               	   C  s  t jjdd7 td dksJ t jjdd td dks J W d    n1 s*w   Y  td dks7J W d    n1 sAw   Y  dtvsLJ t jddi td dks]J W d    n1 sgw   Y  dtvsrJ t jdddd td ddd	did
ksJ W d    n1 sw   Y  dtvsJ i } t jjddi| d | d d dksJ ddd} t jjddddd| d | dddddksJ d S )Nru   )abcr   rv   r   r   r$   )abc.xabc.yzabc.z.ar    r)   r   r   r"   r   )e_fg-hr_      )rx   c-de-fZg_h)rx   r   r   r   daskr
   setr   r   r   r   test_setC  s,   
r   c                   C  s  t jjddd td dddksJ W d    n1 sw   Y  dtvs)J t jjdddddd	 td dddd
ksBJ W d    n1 sLw   Y  dtvsWJ t jjddddiddd	 td dddd
ksrJ W d    n1 s|w   Y  dtvsJ d S )Nr   r   )foo__barZfoo__bazr   )r   baz)foo.barzfoo.bazr$   r_   )Z	foo__buzzr   )r   r   Zbuzzr   r   r   r   r   test_set_kwargs^  s   r   c                	   C  s   t jdddii? td ddiksJ t jddi td dddks)J W d    n1 s3w   Y  td ddiksBJ W d    n1 sLw   Y  dtvsWJ d S )Nr   r"   ru   r   rv   r!   r   r   r   r   r   test_set_nestedn  s   r   c               	   C  s~   dd l } tjj|  d( tjjdd W d    n1 s w   Y  W d    d S W d    d S 1 s8w   Y  d S )Nr   r   r   )r#   )	threadingr   r
   r   Lock)r   r   r   r   test_set_hard_to_copyablesw  s   "r   mkdirTFc                 C  sf   dddid}|d }|d }| t| | r|  t||d | s)J |d  s1J d S )Nr   r    r!   r   r   )r   r   )rF   rG   rH   r   r   is_direxists)r   rJ   r    r   r   r   r   r   test_ensure_file_directory  s   r   c                 C  s   dddid}| d }| t| | d }tjj}z|tj_t|d W |tj_n|tj_w | s6J t	|\}tj
|d tj
|d ksNJ d S )Nr   r    r!   r   r   )r   )rF   rG   rH   r   r
   PATHr   r   rT   listdirrX   split)rJ   r    r   r   r   fnr   r   r   2test_ensure_file_defaults_to_DASK_CONFIG_directory  s   (r   c                  C  s   ddddd} t t td| d W d    n1 sw   Y  tdd| d	dks.J td
| ddks8J td| ddksBJ | dddiiksLJ d S )Nr   r   )zba-rr   r$   )r   asdr"   r   r_   )defaultr
   zfoo.ba_rr   r   r   )rf   rg   r   r   r   r   r   r   test_pop  s   r   c                  C  sz   g } i }t ddi|| d |ddiksJ tg ddi|| d |dddks(J tg d	d
i|| d |dddks;J d S )Nr    r   )r
   r1   ZDASK_B2)rD   r}   r
   r1   r   r(   rs   rw   r$   r    r   )r   r   )r1   r
   r   r   r   test_refresh  s   r   zinp,out)1r   )r   r   )$FOOr   r   r   r   ))r   r   )r   r   r    A)r   r   r   r(   )r   r   r   c                 C  s    |  dd t||ksJ d S )Nrt   r   )r   r   )r   inpr   r   r   r   !test_expand_environment_variables  s   r   c                 C  sR   d}|  dt| i }tjj|d td|d|ksJ td|d|ks'J d S )Nr$   rr   r   rx   a-b)r   ri   r   r
   r   r   )r   rj   r/   r   r   r   test_env_var_canonical_name  s   r   c                  C  s  dddii} g d}|D ]}t jj|| ddksJ qt jjdddii| d |D ]}t jj|| ddks8J q*W d    n1 sCw   Y  t jjdd	d
iddi| d# t jjd| dd	d
iksfJ t jjd| ddksrJ W d    d S 1 s}w   Y  d S )Nzx-yrx   ru   )zx_y.a_bzx-y.a-bx_y.a-br   Zx_yr   rv   c_dr   r   )r   r   r   zx_y.e_f)r   r
   r   r   )r   keyskr   r   r   test_get_set_canonical_name  s    "r   key
custom_key
custom-keyc                 C  sb   d}t j| |i t jd|ksJ t jd|ksJ W d    d S 1 s*w   Y  d S )Nru   r   r   r   r
   r   r   )r   rj   r   r   r   test_get_set_roundtrip  s
   "r   c                   C  s2   t jd dddddiiddiddksJ d S )Nr   r   r    r%   r   )r   r
   r   r   r   r   r   test_merge_None_to_dict  s   r   c                   C  s8   dt jjv sJ dt jjv sJ dt jdv sJ d S )Nztemporary-directoryZ	dataframecompressionzdataframe.shuffle)r   r
   r   r   r   r   r   test_core_file  s   r   c                  C  sL   t d} ttjj}t|d  }t|d  }| 	|| d S )N
jsonschema	dask.yamldask-schema.yaml)
rf   ZimportorskippathlibPath__file__parentrG   r   r   validate)r   root_dirr
   schemar   r   r   test_schema  s
   
r   c                    sL   t tjj} t| d  }t| d  } fdd  || d S )Nr   r   c                   sf   |   D ],\}}t| t|d kr tdt| t|d t|tr0 | | |d |  qd S )N
propertiesa  
The dask.yaml and dask-schema.yaml files are not in sync.
This usually happens when we add a new configuration value,
but don't add the schema of that value to the dask-schema.yaml file
Please modify these files to include the missing values: 

    dask.yaml:        {}
    dask-schema.yaml: {}

Examples in these files should be a good start, 
even if you are not familiar with the jsonschema spec)itemsrI   rh   formatsorted
isinstancedict)r   sr   r   test_matchesr   r   r   
  s   
z-test_schema_is_complete.<locals>.test_matches)r   r   r   r   rG   r   r   )r   r
   r   r   r   r   test_schema_is_complete  s
   r   c                  C  s   dddddd} ddd	d
dd iddid}t t}t| |d W d    n1 s,w   Y  dd |jD g dks?J |ddddd	ii d ddksPJ d S )Nr   zfoo.yabz	not.foundsuper)r   zx.yza.bz	not-foundz	super.oldr   r   r$   r;   r%   r*   r_   )r   r"   r    r   r   c                 S  s   g | ]}t |jqS r   )ri   message).0Zwir   r   r   
<listcomp>/  s    ztest_rename.<locals>.<listcomp>)zRDask configuration key 'foo-bar' has been deprecated; please use 'foo.bar' insteadzLDask configuration key 'x.y' has been deprecated; please use 'foo.y' insteadzIDask configuration key 'a.b' has been deprecated; please use 'ab' insteadzRDask configuration key 'super.old' has been deprecated; please use 'super' instead)r   r#   r'   )r   r"   r    r   r   )rf   warnsFutureWarningr   rI   )aliasesr
   r<   r   r   r   test_rename  s,   r   zargs,kwargsr   Zfuse_ave_widthru   zfuse-ave-widthc              	   C  s   t t+}tjj| i | tjddksJ W d    n1 s$w   Y  W d    n1 s3w   Y  dt|d jv sCJ d S )Noptimization.fuse.ave-widthru   r   )	rf   r   r   r   r
   r   r   ri   r   )argskwargsinfor   r   r   test_deprecations_on_set>  s   	r   c                 C  sv   i }|  dd tt}tjj|d W d    n1 sw   Y  dt|d jv s/J t	d|ddks9J d S )NZDASK_FUSE_AVE_WIDTHro   r   r   r   ru   )
r   rf   r   r   r   r
   r   ri   r   r   )r   r/   r   r   r   r   "test_deprecations_on_env_variablesM  s   r   c                 C  s   i }| d  t|di tt}tjj|| gd W d    n1 s'w   Y  dt	|d j
v s7J td|ddksAJ d S )Nr   ru   )r
   rD   r   r   r   )rF   rG   rH   rf   r   r   r   r
   r   ri   r   r   )rJ   r   r/   r   r   r   r   test_deprecations_on_yamlV  s   r   c                   C  s   t jddim t jddksJ t jjdd ddksJ t jjddddks+J t jjddddu s7J t jjddddu sCJ t jjddddksOJ t jjddd	iddd	iks_J t jjdd
gdd
gksmJ W d    d S 1 sxw   Y  d S )Nr   r   )Zoverride_withr   FTru   rq   Zworldoner   r   r   r   r   test_get_override_witha  s   
"r   c                  C  s   t jdt jdi* tddddiii} t| }t jt jj| t jddks.J W d    d S 1 s9w   Y  d S )Narray.svg.sizearraysvgsize   )r   r
   r   r   r   r   r   Zglobal_config)Z
serializedr
   r   r   r   test_config_serializationr  s   "r  c                  C  s8   t dtddddiiii} tjjd| ddksJ d S )NZDASK_INTERNAL_INHERIT_CONFIGr  r  r  r  r   r   )r   r   r   r
   r   r   r   r   r   test_config_inheritance}  s   r  c                 C  s  | j ddd | j ddd | tdg  dtjtjddtjtjd	d
dg}t	 }||ks4J t
|t
t|ks@J |  &}|dd t	 }||dg ksWJ t
|t
t|kscJ W d    n1 smw   Y  |  *}|dd t	 }|dg|dd   ksJ t
|t
t|ksJ W d    n1 sw   Y  |  7}tjddd}|tdtj|g  t	 }tj|dd|v sJ t
|t
t|ksJ W d    d S 1 sw   Y  d S )NZDASK_CONFIGF)ZraisingZDASK_ROOT_CONFIGPREFIXESz	/etc/dasketcr   ~z.configr   r   includethisrX   )ZdelenvsetattrsiterT   rX   joinsysprefix
expanduserr   lenr   contextr   r  )r   r@   rD   mr  r   r   r   test__get_paths  s:   


"r  c                   C  s   t jjt ks	J d S rQ   )r   r
   rD   r   r   r   r   r   test_default_search_paths  s   r  )R
__future__r   rT   r   r  rR   r  collectionsr   
contextlibr   rf   rG   Zdask.configr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   r5   r9   r>   r?   rA   rM   rO   rP   rY   markZskipifplatformZparametrizer`   rl   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r   r   r   <module>   s    P







"	


	



	

%