o
    
i%                     @   s   d Z ddlZddlZddlmZ e Zdd ZdddZddd	Z									dd
dZ
dddZ												dddZ											dddZdd ZdddZdS )z?
helper routines for testing round trip of commented YAML data
    N)Pathc                 C   sZ   z|  d}t|D ]
}| |  stq
W n	 ty   Y n	w | |d d  } t| S )N
   )indexrangeisspace
ValueErrortextwrapdedent)dataposition_of_first_newlineidx r   U/home/ubuntu/.local/lib/python3.10/site-packages/srsly/tests/ruamel_yaml/roundtrip.pyr
      s   

r
   c                 C   (   dd l }t| }|jj||jj||dS Nr   )Loaderpreserve_quotesversion)srsly.ruamel_yamlr
   ruamel_yamlloadRoundTripLoaderinpr   r   srslydinpr   r   r   round_trip_load      r   c                 C   r   r   )r   r
   r   load_allr   r   r   r   r   round_trip_load_all$   r   r    c	           
      C   s&   dd l }	|	jj| ||||||||d	S )Nr   )streamindentblock_seq_indenttop_level_colon_alignprefix_colonexplicit_startexplicit_endr   )r   r   round_trip_dump)
r   r!   r"   r#   r$   r%   r&   r'   r   r   r   r   r   r(   0   s   r(   stdinc           	      C   sp   dd l }| d}|d}||||d}tjdk }|D ]}|r/|d d dv r/| d }tj| qd S )Nr   Tzround trip YAML)         )z--- z+++ r   )difflib
splitlinesunified_diffsysversion_inforstripstdoutwrite)	r   outp	file_namer-   inloutldiffstrip_trailing_spaceliner   r   r   r9   J   s   


r9   c              
   C   s  |du r| }t |}|dur||7 }t| |d}|rtd| |durCt|trC| D ]\}}|| |krBtd|| | tq,t||||||	|
|d}||krYt	||d td|dd	 ||ksfJ t||||||	|
|d}td
|dd	 ||ksJ |S )c
    inp:    input string to parse
    outp:   expected output (equals input if not specified)
    N)r   r   {0!r} <> {1!r})r"   r#   r$   r%   r&   r'   r   input stringz
roundtrip data:
 )sepzroundtrip second round data:
)
r
   r   print
isinstancedictitemsformatr   r(   r9   )r   r5   extraintermediater"   r#   r$   r%   r   r&   r'   r   	dump_datadoutpr   kvresr   r   r   
round_tripX   sT   



rM   c                 C   s   t | } |du r
| }|
dur|
}
t |}|dur||7 }t }||_d|_|| }|r1td| |durUt|trU| D ]\}}|| |krTtd	|| | t
q>||_||_||_||_|	|_|j||d}|S )r<   NFr   r=   )compare)r
   YAMLr   scalar_after_indicatorr   rA   rB   rC   rD   rE   r   r"   r$   r%   r&   r'   dump)r   r5   rF   rG   r"   r$   r%   r   r&   r'   r   rH   rI   yamlr   rJ   rK   rL   r   r   r   na_round_trip   s8   


rS   c                     s.   dd l  G  fddd jj}|di | S )Nr   c                       sL   e Zd ZdZ fddZ fddZ fddZ fdd	Z fd
dZdS )zYAML.<locals>.MyYAMLz%auto dedent string parameters on loadc                    s@   t |tr|r|d dkr|dd  }t|} jj| |S Nr   r   r   )rB   strr	   r
   r   rO   r   )selfr!   r   r   r   r      s
   

zYAML.<locals>.MyYAML.loadc                 3   sR    t |tr|r|d dkr|dd  }t|} jj| |D ]}|V  q!d S rT   )rB   rU   r	   r
   r   rO   r   )rV   r!   drW   r   r   r      s   

zYAML.<locals>.MyYAML.load_allc           
         s   ddl m}m} d|v d|v A sJ d|v r! jjj|fi |S | }t|	d}|	dd}|rA|d dkrA|dd  }|  |d< } jjj| |fi | |
 }	t|	 |rjt|	 }	t| }|	|kspJ d S )	Nr   StringIOBytesIOr!   rN   unordered_linesFr   r   )srsly.ruamel_yaml.compatrZ   r[   r   rO   rQ   copyr	   r
   popgetvaluerA   sortedr.   )
rV   r   kwrZ   r[   lkwexpectedr\   strL   rW   r   r   rQ      s"   zYAML.<locals>.MyYAML.dumpc           
         s   ddl m}m} t| jjjtfsJ | }|r&|d dkr&|dd  }t	
|} jj| |}|d|}|  |d< } jjj| |fi | | }	|	|krZt||	d |	|ks`J d S Nr   rY   r   r   r5   r!   r>   )r]   rZ   r[   rB   r   compat	text_typerU   r^   r	   r
   rO   r   r_   rQ   r`   r9   
rV   r!   rb   rZ   r[   rc   r   r5   re   rL   rW   r   r   rM      s   
zYAML.<locals>.MyYAML.round_tripc           
         s   ddl m}m} t| jjjtfsJ | }|r&|d dkr&|dd  }t	
|}t jj| |}|d|}|  |d< } jjj| |fi | | }	|	|kr\t||	d |	|ksbJ d S rf   )r]   rZ   r[   rB   r   rg   rh   rU   r^   r	   r
   listrO   r   r_   dump_allr`   r9   ri   rW   r   r   round_trip_all   s   
z#YAML.<locals>.MyYAML.round_trip_allN)	__name__
__module____qualname____doc__r   r   rQ   rM   rl   r   rW   r   r   MyYAML   s    rq   r   )r   r   rO   )rb   rq   r   rW   r   rO      s   HrO   Fc              
   C   s>  ddl m}m}m} t|dstt|}|du rd}|| }|t|  zUt	j
g}|r2|d |t| tdg|R   |||dd	}	|durvd
t	jv rb|	d}	dd |	D }	d|	}	td|	dd td|dd |	|ksyJ W dS W dS  |y }
 ztdt	j
| t|
j |
jW  Y d}
~
S d}
~
ww )zk
    safe and run a python program, thereby circumventing any restrictions on module level
    imports
    r   )check_outputSTDOUTCalledProcessErrorhashNzsafe_and_run_tmp.pyz-Ozrunning:T)stderruniversal_newlines__pypy__c                 S   s   g | ]}d |vr|qS )zno version infor   ).0r;   r   r   r   
<listcomp>+  s    z save_and_run.<locals>.<listcomp>r?   z	result:  )endz	expected:z"##### Running '{} {}' FAILED #####)
subprocessrr   rs   rt   hasattrr   rU   
write_textr
   r0   
executableappendrA   builtin_module_namesr.   joinrE   output
returncode)programbase_dirr   r6   	optimizedrr   rs   rt   cmdrL   	exceptionr   r   r   save_and_run  s@   





r   )NN)NNNNNNNN)r)   )NNNNNNNNNNNN)NNNNNNNNNNN)NNNF)rp   r0   r	   pathlibr   objectenforcer
   r   r    r(   r9   rM   rS   rO   r   r   r   r   r   <module>   sZ    




@
/N