o
    Nij
                     @  st   d dl mZ d dlZd dlZd dlmZ G dd deee	e
e ef f ZG dd deee	e
e ef f ZdS )    )annotationsN)Anyc                   @  sL   e Zd Z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S )FilenameUniqDictz
    A dictionary that automatically generates unique names for its keys,
    interpreted as filenames, and keeps track of a set of docnames they
    appear in.  Used for images and downloadable files in the environment.
    returnNonec                 C  s   t  | _d S N)set	_existingself r   F/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/util/_files.py__init__   s   zFilenameUniqDict.__init__docnamestrnewfilec                 C  s   || v r| | d  | | | d S tj|}tj|\}}d}|| jv r9|d7 }| | | }|| jv s(|h|f| |< | j | |S )Nr      )addospathbasenamesplitextr	   )r   r   r   
uniquenamebaseextir   r   r   add_file   s   

zFilenameUniqDict.add_filec                 C  s>   t |  D ]\}\}}|| |s| |= | j| qd S r   )listitemsdiscardr	   )r   r   filenamedocsuniquer   r   r   	purge_doc    s   
zFilenameUniqDict.purge_docdocnamesset[str]otherdict[str, tuple[set[str], Any]]c                 C  8   |  D ]\}\}}|t|@ D ]}| || qqd S r   r   r   r   )r   r$   r&   r    r!   _uniquedocr   r   r   merge_other'   
   zFilenameUniqDict.merge_otherc                 C  s   | j S r   r	   r
   r   r   r   __getstate__.   s   zFilenameUniqDict.__getstate__statec                 C  s
   || _ d S r   r.   )r   r0   r   r   r   __setstate__1   s   
zFilenameUniqDict.__setstate__N)r   r   )r   r   r   r   r   r   r   r   r   r   r$   r%   r&   r'   r   r   )r   r%   )r0   r%   r   r   )
__name__
__module____qualname____doc__r   r   r#   r,   r/   r1   r   r   r   r   r      s    




r   c                   @  s.   e Zd ZdZdddZdd	d
ZdddZdS )DownloadFileszA special dictionary for download files.

    .. important:: This class would be refactored in nearly future.
                   Hence don't hack this directly.
    r   r   r    r   c                 C  s`   || vr!t j| dd }| dtj| }t |f| |< | | d | | | d S )NF)usedforsecurity/r   r   )	hashlibmd5encode	hexdigestr   r   r   r   r   )r   r   r    digestdestr   r   r   r   <   s   zDownloadFiles.add_filer   c                 C  s2   t |  D ]\}\}}|| |s| |= qd S r   )r   r   r   )r   r   r    r!   _destr   r   r   r#   E   s   
zDownloadFiles.purge_docr$   r%   r&   r'   c                 C  r(   r   r)   )r   r$   r&   r    r!   rA   r   r   r   r   r,   K   r-   zDownloadFiles.merge_otherN)r   r   r    r   r   r   r2   r3   )r4   r5   r6   r7   r   r#   r,   r   r   r   r   r8   5   s
    

	r8   )
__future__r   r;   os.pathr   typingr   dictr   tupler   r   r8   r   r   r   r   <module>   s    $(-