U
    /e                     @  sR  d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	m
Z
 ddlmZ ddlmZ ddlmZ dZd	Zd
dd fddd fddd fddd fddd fddd fgZddd fddd fddd fgZdd eD ddhB Zdd iZd9d!d"d#d$d%Zd&d'd(d)Zd*d+d,d-d.Zd/d0d1d2d3Zd:d5d6ZG d7d8 d8eZdS );z- utilities for package version introspection     )annotationsN)CallableIterable)chain)
ModuleType)Anyz2.4.2z2.4.3Zdaskc                 C  s   | j S N__version__p r   8/tmp/pip-unpacked-wheel-g426oqom/distributed/versions.py<lambda>       r   Zdistributedc                 C  s   | j S r   r	   r   r   r   r   r      r   msgpackc                 C  s   d dd | jD S )N.c                 S  s   g | ]}t |qS r   )str).0vr   r   r   
<listcomp>   s     z<lambda>.<locals>.<listcomp>)joinversionr   r   r   r   r      r   Zcloudpicklec                 C  s   | j S r   r	   r   r   r   r   r      r   Ztornadoc                 C  s   | j S r   )r   r   r   r   r   r      r   Ztoolzc                 C  s   | j S r   r	   r   r   r   r   r      r   Znumpyc                 C  s   | j S r   r	   r   r   r   r   r      r   Zpandasc                 C  s   | j S r   r	   r   r   r   r   r      r   Zlz4c                 C  s   | j S r   r	   r   r   r   r   r      r   c                 C  s   h | ]\}}|qS r   r   )r   pkg_r   r   r   	<setcomp>#   s     r   pythonz3Variation is ok, as long as everything is above 0.6zEIterable[str | tuple[str, Callable[[ModuleType], str | None]]] | Nonezdict[str, dict[str, Any]])packagesreturnc                 C  s   t  tttt| pg dS )zfReturn basic information on our software installation, and our installed versions
    of packages
    )hostr   )get_system_infoget_package_infor   required_packagesoptional_packages)r   r   r   r   get_versions,   s
    r$   zdict[str, Any])r   c                  C  sN   t  } dtj tdd | j| j| j| j	tj
tjddtjddd	S )Nz%d.%d.%d.%s.%sP   LC_ALLNoneLANG)	r   zpython-bitsZOSz
OS-releasemachine	processor	byteorderr'   r)   )platformunamesysversion_infostructcalcsizesystemreleaser*   r+   r,   osenvironget)r.   r   r   r   r    ;   s    r    r   z
str | None)r   r   c              
   C  s   ddl m} |t | jW  5 Q R  S Q R X |t t| jW  5 Q R  S Q R X |t  dtt| jW  5 Q R  S Q R X dS )z<Try a variety of common ways to get the version of a packager   )suppressr   N)	
contextlibr8   AttributeErrorr
   r   r   r   mapr0   )r   r8   r   r   r   version_of_packageJ   s    


$r<   zEIterable[str | tuple[str, Callable[[ModuleType], str | None] | None]]zdict[str, str | None])pkgsr   c              	   C  s   dd tttji}| D ]h}t|ttfrB|\}}|dkrJt}n|}t}zt	
|}||||< W q tk
r   d||< Y qX q|S )z@get package versions for the passed required & optional packagesr   r   N)r   r;   r   r/   r0   
isinstancetuplelistr<   	importlibimport_module	Exception)r=   Z	pversionsr   modnameZver_fmodr   r   r   r!   W   s    
r!   Clientc                   s  ddl m} |r|dnd}| r,| dnd} dd  D t }|| ||  D ]}|| q`g }g }t|D ] t }	t| tr|  dn| }
 t	kr|	
|
 t|tr| dn|}|	
|  fdd	D }|	|O }	t|	d
krqt|d
kr(t|d }nt|dkr:d }| ||
|f  t kr|d  dt    qddd}|r|d|ddg|}d| }|r|dd|7 }|d  |7  < |S )Nr   )
asciitabler   UNKNOWNc                 S  s$   i | ]\}}||r| d ndqS )r   rH   )r7   )r   kr   r   r   r   
<dictcomp>t   s      z!error_message.<locals>.<dictcomp>MISSINGc                   s2   h | ]*}t | tr&|  d n| qS )rK   )r>   dictr7   )r   wr   workersr   r   r      s   z error_message.<locals>.<setcomp>   z-  z:  )warningerrorPackageZ	SchedulerZWorkerszMismatched versions found

z
Notes: 
{}
rR   )Zdistributed.utilsrG   r7   itemssetupdatesortedr>   rL   scheduler_relevant_packagesaddlenr@   appendnotes_mismatch_packagekeysformatr   )Z	schedulerrO   sourceZsource_namerG   r   ZworkerZerrsZnotesversionsZscheduler_versionZsource_versionZworker_versionsoutZ	err_tableerr_msgr   rN   r   error_messageo   sR    





re   c                   @  s   e Zd ZdZdS )VersionMismatchWarningz(Indicates version mismatch between nodesN)__name__
__module____qualname____doc__r   r   r   r   rf      s   rf   )N)rF   )rj   
__future__r   rA   r5   r-   r1   r/   collections.abcr   r   	itertoolsr   typesr   typingr   ZMIN_BOKEH_VERSIONZMAX_BOKEH_VERSIONr"   r#   rZ   r^   r$   r    r<   r!   re   Warningrf   r   r   r   r   <module>   sD   









  
;