o
    y3g"                     @  s   d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
 eZeZeZe
ee	e
edf  e	e f ZdddZdddZdddZdS )z"
Helper utils for zippath adapter
    )annotationsN)Path)IterableIteratorListTupleEntrypathsIterable[str]	separatorstrreturn8Iterator[tuple[RootName, list[DirName], list[FileName]]]c                 #  sB   dg g fg}d}| D ]}|j |dd}t|dkr d}|\}n|\}}|dk}|rG|j |dd}t|dkr=d}	|\}
n|j |dd\}	}
n|}		 |dksTJ ||f|| \}}}|	|kr`n|d8 }qJ|r|g g f}|| t|d }||
|f q|dksJ ||f|| qd fdd  |d E d H  d S )N.r      )maxsplit Tentryr   r   r   c                 3  s\    | \}}}t |}t| }|  |  |||fV  |D ]} || E d H  q d S N)dictlistkeyssort)r   rootdir_entriesfiles
child_dirsdirnamesd	_traverse F/home/garg/my-data/venv/lib/python3.10/site-packages/kompress/utils.pyr!   ?   s   
zwalk_paths.<locals>._traverse)r   r   r   r   )rsplitlenappend)r	   r   stack	stack_pospsplitp_parentp_nameis_dirtarget_rootdirnameparent_rootparent_dirsparent_files	new_entryr"   r    r#   
walk_paths   sB   

r4   Nonec                   C  s   t tg tjddg g fgksJ t tddgtjddg ddgfgks&J t tdgddddgg fdg g fgks<J t tg dddddgg fddgg fdg d	gfgksYJ d S )
Nr   r   aaabbbaaa//)r9   zaaa/bbb/zaaa/bbb/fffzaaa/bbbfff)r   r4   ossepr"   r"   r"   r#   test_walk_paths_basicO   s   






r>   c                    sv   dd l } dd l}| jd d dk r|d dd	d
 d fdd}tt jjjd }| s5J ||| d S )Nr      )      z3pathlibe.Path.walk is only present from python 3.12r   r   r   Iterator[str]c                 s  sZ    |   D ]%\}}}|| }|D ]}||  tj V  q|D ]	}t|| V  q qd S r   )walkrelative_tor<   r=   r   )r   rdirsr   rrr   fr"   r"   r#   as_pathst   s   
z0test_walk_paths_against_stdlib.<locals>.as_pathsr5   c                   s   g }|   D ]\}}}|  |  |t|| ||f qt|dks)J t | }tt|t	j
d}||ks>J d S )Nr   r6   )rC   r   r&   r   rD   r%   sortedr   r4   r<   r=   )r   expectedrE   rF   r   r	   actualrI   r"   r#   check_against_builtin|   s   z=test_walk_paths_against_stdlib.<locals>.check_against_builtinz.git)r   r   r   rB   )r   r   r   r5   )	syspytestversion_infoskipr   __file__absoluteparentexists)rO   rP   rN   git_pathr"   rM   r#   test_walk_paths_against_stdlibl   s   

rX   )r	   r
   r   r   r   r   )r   r5   )__doc__
__future__r   r<   pathlibr   typingr   r   r   r   r   RootNameDirNameFileNamer   r4   r>   rX   r"   r"   r"   r#   <module>   s    

>