o
    XRh                     @   s   d Z ddlZddlZddlZddlmZ ddlmZ G dd dZG dd deZ	zddl
Z		dddZW n eyF   		dddZY nw ejdkrZdZddlmZ dd ZdS ddlmZ dS )z,
Backports of fixes for joblib dependencies
    N)basename)utilc                   @   sJ   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )VersionBackport from deprecated distutils

    We maintain this backport to avoid introducing a new dependency on
    `packaging`.

    We might rexplore this choice in the future if all major Python projects
    introduce a dependency on packaging anyway.
    Nc                 C      |r	|  | d S d S Nparseselfvstring r   R/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/joblib/backports.py__init__      zVersion.__init__c                 C   s   d| j jt| f S )Nz	%s ('%s'))	__class____name__strr   r   r   r   __repr__   s   zVersion.__repr__c                 C   s   |  |}|tu r|S |dkS Nr   _cmpNotImplementedr   othercr   r   r   __eq__      
zVersion.__eq__c                 C   s   |  |}|tu r|S |dk S r   r   r   r   r   r   __lt__#   r   zVersion.__lt__c                 C   s   |  |}|tu r|S |dkS r   r   r   r   r   r   __le__)   r   zVersion.__le__c                 C   s   |  |}|tu r|S |dkS r   r   r   r   r   r   __gt__/   r   zVersion.__gt__c                 C   s   |  |}|tu r|S |dkS r   r   r   r   r   r   __ge__5   r   zVersion.__ge__r   )r   
__module____qualname____doc__r   r   r   r   r    r!   r"   r   r   r   r   r      s    
	r   c                   @   sH   e Zd ZdZedejZdddZdd Z	dd	 Z
d
d Zdd ZdS )LooseVersionr   z(\d+ | [a-z]+ | \.)Nc                 C   r   r   r   r
   r   r   r   r   H   r   zLooseVersion.__init__c              	   C   sZ   || _ dd | j|D }t|D ]\}}zt|||< W q ty'   Y qw || _d S )Nc                 S   s   g | ]
}|r|d kr|qS ).r   ).0xr   r   r   
<listcomp>Q   s    z&LooseVersion.parse.<locals>.<listcomp>)r   component_resplit	enumerateint
ValueErrorversion)r   r   
componentsiobjr   r   r   r	   L   s   
zLooseVersion.parsec                 C   s   | j S r   )r   r   r   r   r   __str__[   s   zLooseVersion.__str__c                 C   s   dt |  S )NzLooseVersion ('%s'))r   r   r   r   r   r   ^   s   zLooseVersion.__repr__c                 C   sV   t |tr
t|}nt |tstS | j|jkrdS | j|jk r!dS | j|jkr)dS d S )Nr      )
isinstancer   r&   r   r0   )r   r   r   r   r   r   a   s   


zLooseVersion._cmpr   )r   r#   r$   r%   recompileVERBOSEr+   r   r	   r4   r   r   r   r   r   r   r&   <   s    	
r&   uint8r+CFc           	      C   sb   t d|t| t  tj| |||||d}ttj	dk r#||_
|r/ddlm} || |S )ab  Custom memmap constructor compatible with numpy.memmap.

        This function:
        - is a backport the numpy memmap offset fix (See
          https://github.com/numpy/numpy/pull/8443 for more details.
          The numpy fix is available starting numpy 1.13)
        - adds ``unlink_on_gc_collect``, which specifies  explicitly whether
          the process re-constructing the memmap owns a reference to the
          underlying file. If set to True, it adds a finalizer to the
          newly-created memmap that sends a maybe_unlink request for the
          memmaped file to resource_tracker.
        z?[MEMMAP READ] creating a memmap (shape {}, filename {}, pid {}))dtypemodeoffsetshapeorderz1.13r6   )add_maybe_unlink_finalizer)r   debugformatr   osgetpidnpmemmapr&   __version__r@   _memmapping_reducerrC   )	filenamer>   r?   r@   rA   rB   unlink_on_gc_collectmmrC   r   r   r   make_memmapr   s   rO   c                 C   s   t d)NzL'joblib.backports.make_memmap' should not be used if numpy is not installed.)NotImplementedError)rL   r>   r?   r@   rA   rB   rM   r   r   r   rO      s   nt)      )replacec              
   C   s   d}d}d}||k r@zt | | W dS  ty; } zt|ddtv r0t| ||7 }|d9 }n W Y d}~nd}~ww ||k s
 )zRenames ``src`` into ``dst`` overwriting ``dst`` if it exists.

        On Windows os.replace can yield permission errors if executed by two
        different processes.
        r6   r   gMbP?winerrorN   )rT   	Exceptiongetattraccess_denied_errorstimesleep)srcdstmax_sleep_timetotal_sleep_time
sleep_timeexcr   r   r   concurrency_safe_rename   s$   


rb   )r;   r<   r   Nr=   F)r%   rF   r8   rZ   os.pathr   multiprocessingr   r   r&   numpyrH   rO   ImportErrornamerY   rT   rb   r   r   r   r   <module>   s.    03
