U
    /ef                     @  s  d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZmZ eeZejdZeeere	eZz d dlZdd	d
ddZeZW n( ek
r   dd	d
ddZeZY nX dddZdddZdd Z dd Z!dddZ"dS )    )annotationsN)sizeof)parse_bytes)protocol)get_ipget_ipv6nbytesoffloadzdistributed.comm.offloadint
memoryview)nreturnc                 C  s   t j| fddjS )Nu1)Zdtype)numpyemptydatar    r   :/tmp/pip-unpacked-wheel-g426oqom/distributed/comm/utils.pynumpy_host_array   s    r   c                 C  s   t t| S N)r   	bytearrayr   r   r   r   builtin_host_array%   s    r   Tc                   sl    fdd}t r@|r@zt}W qD tk
r<   tj}Y qDX nd}|rbt rb|t krbt|I dH S | S dS )z{
    Serialize a message into a list of Distributed protocol frames.
    Any kwargs are forwarded to protocol.dumps().
    c               
     sT   zt tjf W S  tk
rN }  ztd t|   W 5 d } ~ X Y nX d S )NzUnserializable Message: %s)listr   dumps	Exceptionloggerinfo	exception)ekwargsmsgr   r   
_to_frames5   s    
zto_frames.<locals>._to_framesr   N)OFFLOAD_THRESHOLDr   RecursionErrormathinfr	   )r"   allow_offloadr!   r#   Zmsg_sizer   r    r   	to_frames+   s    
r)   c                   s^   d fdd}|r0 r0t r0ttt|rT rTt rTt krTt|I dH }n| }|S )z<
    Unserialize a list of Distributed protocol frames.
    Fc                    sN   zt j dW S  tk
rH   dkr0d} n} td|   Y nX d S )N)deserializedeserializersi  z[too large to display]z$truncated data stream (%d bytes): %s)r   loadsEOFErrorr   error)Zdatastrr*   r+   framessizer   r   _from_framesQ   s      z!from_frames.<locals>._from_framesN)r$   summapr   r	   )r0   r*   r+   r(   r2   resr   r/   r   from_framesK   s    r6   c                   s`   t | j   s"td| d fdd}|tj}|sF|tj}|sRtddd |D S )zA
    Get all bound addresses of a started Tornado TCPServer.
    zTCP Server z not started yet?c                   s&   g } D ]}|j | kr|| q|S r   )familyappend)ZfamsockssockZsocketsr   r   _look_for_familyq   s
    
z2get_tcp_server_addresses.<locals>._look_for_familyz'No Internet socket found on TCPServer??c                 S  s   g | ]}|  qS r   )getsockname).0r:   r   r   r   
<listcomp>   s     z,get_tcp_server_addresses.<locals>.<listcomp>)r   Z_socketsvaluesRuntimeErrorsocketAF_INETAF_INET6)
tcp_serverr<   r9   r   r;   r   get_tcp_server_addressesi   s    	

rF   c                 C  s   t | d S )zE
    Get the first bound address of a started Tornado TCPServer.
    r   )rF   )rE   r   r   r   get_tcp_server_address   s    rG   c                 C  s,   | dkr|pt  S | dkr$|p"t S | S dS )zm
    Ensure the given host string (or IP) denotes a concrete host, not a
    wildcard listening address.
    )z0.0.0.0 z::N)r   r   )hostZdefault_hostr   r   r   ensure_concrete_host   s
    

rJ   )T)TNT)N)#
__future__r   loggingr&   rB   ZdaskZdask.sizeofr   Z
dask.utilsr   Zdistributedr   Zdistributed.utilsr   r   r   r	   	getLogger__name__r   configgetr$   
isinstancestrr   r   Z
host_arrayImportErrorr   r)   r6   rF   rG   rJ   r   r   r   r   <module>   s2   


 
 
