
    0Fie              	         U d Z ddlm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dlmZmZmZmZ dd	lmZ dd
lmZ ddlZddlmZ ddlmZmZ erddlmZ dZde d<    G d de          Z! e!dee           e!dee           e!dee           e!dej"        ej#                  dZ$de d<    ee%          5  ddl&Z&	  e&j"         e'd                     n# e($ r  e%d          w xY w e!de&j"        e&j#                  e$d<   e$d         e$d<   ddd           n# 1 swxY w Y    ee%          5  ddl)Z) ee)j*                   ed          k     r e%d          ddl+Z) e!de)j,        j"         e
e)j,        j#        d                    e$d<   e$d         e$d<   ddd           n# 1 swxY w Y    ee%          5  ddl-Z- ee-j*                   ed           k     r e%d!          d" Z.d# Z/ e!d$e.e/          e$d$<   ddd           n# 1 swxY w Y   dFd)Z0dGd/Z1 ej2        d0          d1d1d2d3dd4dHd>            Z3 ej2        d?          dIdE            Z#dS )JzY
Record known compressors

Includes utilities for determining whether or not to compress
    )annotationsN)CallableIterable)suppress)partial)randint)TYPE_CHECKINGAnyLiteral
NamedTuple)parse)identity)context_meter)ensure_memoryviewnbytes)	TypeAliasbytes | bytearray | memoryviewr   AnyBytesc                  .    e Zd ZU ded<   ded<   ded<   dS )Compressionz
None | strnamezCallable[[AnyBytes], AnyBytes]compress
decompressN)__name__
__module____qualname____annotations__     @lib/python3.11/site-packages/distributed/protocol/compression.pyr   r      s6         ,,,,......r   r   zlib)NFautor!   z.dict[str | None | Literal[False], Compression]compressionsr   zNeed snappy >= 0.5.3snappyr"   z0.23.1zNeed lz4 >= 0.23.1lz4T)return_bytearrayz0.9.0zNeed zstandard >= 0.9.0c                    t          j        t          j                            d          t          j                            d                    }|                    |           S )Nzdistributed.comm.zstd.levelzdistributed.comm.zstd.threads)levelthreads)	zstandardZstdCompressordaskconfiggetr   )datazstd_compressors     r    zstd_compressr1   [   sS    #2+//"?@@KOO$CDD
 
 
 ''---r   c                R    t          j                    }|                    |           S N)r*   ZstdDecompressorr   )r/   zstd_decompressors     r    zstd_decompressr6   b   s%    %688 ++D111r   zstdkeystrreturn
str | Nonec           
         t           j                            |           }	 t          |         j        S # t
          $ r> d                    d t          D                       }t          d|  d| d| d          w xY w)zFetch and validate compression settings, with a nice error message in case of
    failure. This also resolves 'auto', which may differ between different hosts of the
    same cluster.
    ,c              3  4   K   | ]}t          |          V  d S r3   )repr).0ns     r    	<genexpr>z+get_compression_settings.<locals>.<genexpr>r   s(      77Qa777777r   zInvalid compression setting =z. Valid options are .)r,   r-   r.   r#   r   KeyErrorjoin
ValueError)r8   r   valids      r    get_compression_settingsrI   i   s    
 ;??3D
D!&& 
 
 
77,77777S3SSSS5SSS
 
 	

s
   3 AA;b
memoryviewsizeintrA   c                   |dk    r|dk    sJ |dk    s|dk    rt          d          S g }| j        |z
  }t          d|          }t          |dz
            D ]D}t          d|          }t	          ||z   |          }|                    | ||                    |}E|                    | |||z                       |dk    r|d         S t          d                    |                    S )zSample a bytestring from many locations

    Parameters
    ----------
    b : full memoryview
    size : int
        target size of each sample to collect
        (may be smaller if samples collide)
    n : int
        number of samples to collect
    r   r      )rK   r   r   rangeminappendrF   )	rJ   rL   rA   parts	max_startstart_
next_startends	            r    byte_samplerY   x   s     199aqyyAFF#E4IAy!!E1q5\\  Q	**
%$,
++QuSy\"""	LL554<'()))AvvQx#((5//***r   r   i'     gffffff?)min_sizesample_sizensamples	min_ratiocompressionpayloadr[   r\   r]   r^   floatr_   str | None | Literal[False]tuple[str | None, AnyBytes]c                  t           |         }|j        sd| fS |t          |           cxk    rdk    sn d| fS t          |           }t	          |||          }t          |                    |                    ||j        z  k    r9|                    |          }	t          |	          ||j        z  k    r	|j        |	fS d| fS )a  Maybe compress payload

    1. Don't compress payload if smaller than min_size
    2. Sample the payload in <nsamples> spots, compress those, and if it doesn't
       compress to at least <min_ratio> to the original, return the original
    3. Then compress the full original; it doesn't compress at least to <min_ratio>,
       return the original
    4. Return the compressed output

    Returns
    -------
    - Name of compression algorithm used
    - Either compressed or original payload
    Nl        )r#   r   r   r   rY   lenr   )
r`   r[   r\   r]   r^   r_   compmvsample
compresseds
             r    maybe_compressrj      s    0 $D9 W}w000050000 W} 
7	#	#B [(33F
4==  !!Y%>>>]]2&&
z??i")3339j((=r   r   headerdict[str, Any]framesIterable[AnyBytes]list[AnyBytes]c                B    d t          | d         |          D             S )z8Decompress frames according to information in the headerc                T    g | ]%\  }}t           |                             |          &S r   )r#   r   )r@   r   frames      r    
<listcomp>zdecompress.<locals>.<listcomp>   s?       D% 	T%%e,,  r   r_   )zip)rk   rm   s     r    r   r      s2     vm4f==   r   )r8   r9   r:   r;   )rJ   rK   rL   rM   rA   rM   r:   rK   )r`   r   r[   rM   r\   rM   r]   rM   r^   ra   r_   rb   r:   rc   )rk   rl   rm   rn   r:   ro   )4__doc__
__future__r   r!   collections.abcr   r   
contextlibr   	functoolsr   randomr   typingr	   r
   r   r   packaging.versionr   parse_versiontlzr   r,   distributed.metricsr   distributed.utilsr   r   typing_extensionsr   r   r   r   r   r   r#   ImportErrorr$   rK   	TypeErrorr%   __version__	lz4.blockblockr*   r1   r6   rI   rY   meterrj   r   r   r    <module>r      s@    
 # " " " " "  . . . . . . . .                   : : : : : : : : : : : : 4 4 4 4 4 4        - - - - - - 7 7 7 7 7 7 7 7 ,++++++ 7 6 6 6 6/ / / / /* / / / +dHh
/
/;tXx00Kh11Kt??	@ @     Xk 2 2MMM2

3(((( 2 2 2k01112 )[6?FDUVVL'1L2 2 2 2 2 2 2 2 2 2 2 2 2 2 2" Xk / /JJJ }S_%%h(?(???k.///%+	 		$t<<<	 	L (.L'/ / / / / / / / / / / / / / /, Xk O O }Y*++mmG.D.DDDk3444. . .2 2 2 ';v}oNNL%O O O O O O O O O O O O O O O*
 
 
 
+ + + +@ Z   /5* * * * * ! *Z \""   #"  sP   <D!CD!C--(D!!D%(D%7A+F..F25F2AHHH