a
    ¢º”h‘  ã                   @   sD   d dl mZmZ dgZG dd„ dƒZdeee ddedœdd	„Zd
S )é   )Ú	GlobGroupÚGlobPatternÚ	Directoryc                   @   sr   e Zd ZdZeedœdd„Zee d dœdd„Zedœd	d
„Z	eedœdd„Z
dd„ Zdee eedœdd„ZdS )r   zËA file structure representation. Organized as Directory nodes that have lists of
    their Directory children. Directories for a package are created by calling
    :meth:`PackageImporter.file_structure`.)ÚnameÚis_dirc                 C   s   || _ || _i | _d S )N)r   r   Úchildren)Úselfr   r   © r	   úY/var/www/auris/lib/python3.9/site-packages/torch/package/file_structure_representation.pyÚ__init__   s    zDirectory.__init__)ÚdirsÚreturnc                 C   sJ   t |ƒdkr| S |d }|| jvr2t|dƒ| j|< | j|  |dd… ¡S )a$  Builds path of Directories if not yet built and returns last directory
        in list.

        Args:
            dirs (List[str]): List of directory names that are treated like a path.

        Returns:
            :class:`Directory`: The last Directory specified in the dirs list.
        é    Tr   N)Úlenr   r   Ú_get_dir)r   r   Údir_namer	   r	   r
   r      s    

zDirectory._get_dir)Ú	file_pathc                 C   s.   |  d¡^ }}|  |¡}t|dƒ|j|< dS )zÇAdds a file to a Directory.

        Args:
            file_path (str): Path of file to add. Last element is added as a file while
                other paths items are added as directories.
        ú/FN)Úsplitr   r   r   )r   r   r   ÚfileÚdirr	   r	   r
   Ú	_add_file$   s    
zDirectory._add_file)Úfilenamer   c                 C   s\   |j ddd}|d }t|ƒdkr*|d nd}|| j ¡ v rX|du rHdS | j|  |¡S dS )zÜChecks if a file is present in a :class:`Directory`.

        Args:
            filename (str): Path of file to search for.
        Returns:
            bool: If a :class:`Directory` contains the specified file.
        r   r   )Úmaxsplitr   NTF)r   r   r   ÚkeysÚhas_file)r   r   ZlineageÚchildZgrandchildrenr	   r	   r
   r   /   s    zDirectory.has_filec                 C   s   g }|   |¡ d |¡S )NÚ )Ú_stringify_treeÚjoin)r   Ústr_listr	   r	   r
   Ú__str__A   s    
zDirectory.__str__r   õ
   â”€â”€â”€ )r    ÚpreambleÚdir_ptrc                 C   s$  d}d}d}d}|  |› |› | j› d¡ ||kr<|| }n|| }g }g }	| j ¡ D ]$\}
}|jrp|	  |
¡ qV|  |
¡ qVtt|	ƒƒD ]N\}}
|t|	ƒd krÂt|ƒdkrÂ| j|
  |||¡ qˆ| j|
  |||¡ qˆtt|ƒƒD ]:\}}|t|ƒd kr|n|}|  |› |› |› d¡ qädS )	zCRecursive method to generate print-friendly version of a Directory.z    u   â”‚   u
   â”œâ”€â”€ u
   â””â”€â”€ Ú
r   r   N)	Úappendr   r   Úitemsr   Ú	enumerateÚsortedr   r   )r   r    r#   r$   ÚspaceÚbranchÚteeÚlastZ	file_keysZdir_keysÚkeyÚvalÚindexr   Úpointerr	   r	   r
   r   F   s*    
zDirectory._stringify_treeN)r   r"   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚboolr   Úlistr   r   r   r!   r   r	   r	   r	   r
   r   	   s     üüú**r	   r   )r   Ú	file_listÚincludeÚexcluder   c                 C   s:   t ||dd}t| dƒ}|D ]}| |¡r| |¡ q|S )aâ  Return a :class:`Directory` file structure representation created from a list of files.

    Args:
        filename (str): The name given to the top-level directory that will be the
            relative root for all file paths found in the file_list.

        file_list (List[str]): List of files to add to the top-level directory.

        include (Union[List[str], str]): An optional pattern that limits what is included from the file_list to
            files whose name matches the pattern.

        exclude (Union[List[str], str]): An optional pattern that excludes files whose name match the pattern.

    Returns:
            :class:`Directory`: a :class:`Directory` file structure representation created from a list of files.
    r   )r<   Ú	separatorT)r   r   Úmatchesr   )r   r:   r;   r<   Zglob_patternZtop_dirr   r	   r	   r
   Ú _create_directory_from_file_listm   s    

r?   N)r9   r	   )Z
glob_groupr   r   Ú__all__r   r6   r8   r?   r	   r	   r	   r
   Ú<module>   s   g  üû