o
    tf8,                     @   s   d dl Z d dlZd dlZzd dlmZ W n ey   dZY nw eZd dlZd dlZd dlm	Z	m
Z
mZmZ dZerHeeZeeZeee Zdd ZG dd de
ZdS )	    N)getrefcount)PYPYBaseZMQTestCaseSkipTest	skip_pypy   xc                 C   sF   t jdk rd}nd}tdD ]}t| || kr dS td qdS )zwait for refcount on an object to drop to an expected value

    Necessary because of the zero-copy gc thread,
    which can take some time to receive its DECREF message.
    )            2   Ng?)sysversion_inforangegrctimesleep)objrcZmy_refsi r   _/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/zmq/tests/test_message.pyawait_gc   s   
r   c                       s   e Zd Z fddZedd Zdd Zdd Zd	d
 Zdd Z	edd Z
edd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zed)d* Z  ZS )+	TestFramec                    s$   t    tdD ]}t  q	d S )Nr   )supertearDownr   gccollect)selfr   	__class__r   r   r   2   s   

zTestFrame.tearDownc                 C   sh   t ddD ],}d| t }t|}tj|dd}t||d ks"J ~t|| t||ks0J ~qdS )z/Message above 30 bytes are never copied by 0MQ.      r
   FcopyN)r   xr   zmqFramer   )r   r   sr   mr   r   r   test_above_307   s   
zTestFrame.test_above_30c                 C   s   t d}t|dksJ t d}t|dksJ t d}t|dks'J t d}t|dks4J t d	d
 }t|dksCJ dS )z+Test the str representations of the Frames.    z<zmq.Frame(b'')>s	   123456789z<zmq.Frame(b'123456789')>s   xxxxxxxxxxxxxxxxxxxxz"<zmq.Frame(b'xxxxxxxxxxxx'...20B)>s  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz"<zmq.Frame(b'xxxxxxxxxxxx'...2kB)>r   i z"<zmq.Frame(b'xxxxxxxxxxxx'...2MB)>N)r&   r'   str)r   r)   r   r   r   test_strD   s   



zTestFrame.test_strc                 C   s\   t ddD ]&}d| t }t|}|j}||jksJ ts$||us$J ||ju s+J qdS )zTest the Frame.bytes property.r   r"   r
   N)r   r%   r&   r'   bytesr   )r   r   r(   r)   br   r   r   
test_bytesQ   s   
zTestFrame.test_bytesc                 C   sV   d}|  ttj| tdD ]}d| d }t|d}||jdks(J qdS )z/Test the unicode representations of the Frames.Zasdfr"   r
      §utf8N)assertRaises	TypeErrorr&   r'   r   encoder.   decode)r   r(   r   r)   r   r   r   test_unicode^   s   zTestFrame.test_unicodec                 C   s<   t dD ]}d| t }t|}t|t|ksJ qdS )zTest the len of the Frames.r"   r
   N)r   r%   r&   r'   len)r   r   r(   r)   r   r   r   test_leng   s
   
zTestFrame.test_lenc                 C   s  t ddD ]}d| t }t| }}tj|dd}|d7 }t||ks&J t|}|d7 }t||ks7J |j}t||ksBJ |t|ksJJ ||jksQJ |t|ksYJ ~t||ksbJ ~|d8 }t||ksoJ ~|d8 }t|| t||ksJ ||ksJ ~qdS )z-Run through a ref counting cycle with a copy.r!   r"   r
   Fr#   r   N	r   r%   r   r&   r'   r$   bufferr.   r   r   r   r(   r   Zrc_0r)   m2bufr   r   r   test_lifecycle1n   s4   

zTestFrame.test_lifecycle1c                 C   s$  t ddD ]}d| t }t| }}tj|dd}|d7 }t||ks&J t|}|d7 }t||ks7J |j}t||ksBJ |t|ksJJ ||jksQJ ||jksXJ |t|ks`J ~t||ksiJ ~|d8 }t||ksvJ ~|d8 }t|| t||ksJ ||ksJ ~qdS )z7Run through a different ref counting cycle with a copy.r!   r"   r
   Fr#   r   Nr:   r<   r   r   r   test_lifecycle2   s6   

zTestFrame.test_lifecycle2c                 C   sx   t jdddd}|jjrJ t |}|jrJ ~tdD ]}t  qtdD ]}|jr/ nt	d q(|js:J d S )N   asdfFTr$   trackr   
   皙?)
r&   r'   trackerdoneMessageTrackerr   r   r   r   r   )r   r)   pmr   r   r   r   test_tracker   s   


zTestFrame.test_trackerc                 C   sH   t jddd}|jd u sJ t|}|jd u sJ | tt j| d S )NrA   F)rC   )r&   r'   rF   r$   r3   
ValueErrorrH   )r   r)   r=   r   r   r   test_no_tracker   s
   
zTestFrame.test_no_trackerc                 C   s   t jdddd}t jdddd}t ||}|jjrJ |jr!J | t j|jd ~tdD ]}t	
  q/| t j|jd |jrDJ ~tdD ]}t	
  qI|dd u sYJ |js^J d S )NrA   FTrB   s   whodarE   r   )r&   r'   rH   rF   rG   r3   ZNotDonewaitr   r   r   )r   r)   r=   mtr   r   r   r   test_multi_tracker   s    



zTestFrame.test_multi_trackerc                 C   s   d  }tt| dS )ztest using a buffer as input8   §§¶•ªº˜µ¬˚…∆˙åß∂©œ∑´†≈ç√N)r5   r&   r'   
memoryview)r   insr   r   r   test_buffer_in   s   zTestFrame.test_buffer_inc                 C   s&   |  ttjd |  ttjt  dS )ztest using a bad objectr!   N)r3   r4   r&   r'   object)r   r   r   r   test_bad_buffer_in   s   zTestFrame.test_bad_buffer_inc                 C   sH   d  }t|}|j}t|tsJ ||ju sJ |j|ju s"J dS )zreceiving buffered outputrP   N)r5   r&   r'   r;   
isinstancerQ   )r   rR   r)   Zoutbr   r   r   test_buffer_out   s   
zTestFrame.test_buffer_outc                 C   s   d  }t|}t|}|j}|jdksJ |j|fksJ | |ks'J t|}|jdks2J |j|fks:J | |ksBJ dS )zmemoryview shape inforP   r   N)	r5   r8   r&   r'   r;   ndimshapetobytesrQ   )r   datanfZview1Zview2r   r   r   test_memoryview_shape   s   
zTestFrame.test_memoryview_shapec                 C   s   |  tjtj\}}d}t|}||jksJ |j|dd td ||jks+J |j|dd td ||jks>J |j|dd td ||jksQJ |j|dd td ||jksdJ tdD ]}|	 }||kstJ qh||jks|J dS )z9ensure that a message remains intact after multiple sendss   messageFr#   rE   T   N)
create_bound_pairr&   PAIRr'   r.   sendr   r   r   recv)r   ar/   r(   r)   r   rr   r   r   test_multisend   s(   




zTestFrame.test_multisendc                 C   sB   d}t | t|}|j}| }||ksJ |j|ksJ dS )ztest messages from memoryviews   carrotjuiceN)rQ   r&   r'   r;   rZ   r.   )r   r(   r)   r>   s2r   r   r   test_memoryview  s   
zTestFrame.test_memoryviewc                 C   s   d}|  tjtj\}}tdD ]R}|j|dd |jdd}|j}|j}~tdD ]7}dd|d   }|j|dd |jdd}	| }
|
|ksKJ ||ksQJ |	j|ksXJ t	|	jtu saJ q*qd	S )
z$check for clobbering message buffers@                                                                       Fr#   r!      (   rD   N)
r`   r&   ra   r   rb   rc   r.   r;   rZ   type)r   nullsasbr   r)   mbr>   ffr=   r/   r   r   r   test_noncopying_recv  s&   zTestFrame.test_noncopying_recvc           
      C   s   d}|  tjtj\}}tdD ]Y}|jt|dd |jdd}t|}tdD ]?}dd|d   }|jt|dd |jdd}t|}	| |ksNJ |jrSJ |	 |ks[J |	jr`J t	|tu shJ q)qd	S )
z%test non-copying memmoryview messagesri   rj   Fr#   r!   rk   rl   rD   N)
r`   r&   ra   r   rb   rQ   rc   rZ   readonlyrm   )
r   rn   ro   rp   r   r)   r>   rr   r=   Zbuf2r   r   r   test_noncopying_memoryview/  s$   

z$TestFrame.test_noncopying_memoryviewc                    sV  zddl }ddlm} W n ty   tdw |jj  fddtdD }| t	j
t	j
\}}ttdd	g}td
t|d
 D ]h}|d| }|D ]&}	|j||	d}
|j|
dd |jdd}|||
j|
j}||
| qJ|j|dtfdtfdgd}
d|
d< d|
d< d|
d< |j|
dd |jdd}|||
j|
j}||
| q@dS )z%test non-copying numpy array messagesr   N)assert_array_equalzrequires numpyc                    s   g | ]} d dqS )r
   r!   r   ).0r   Zrandr   r   
<listcomp>K  s    z/TestFrame.test_buffer_numpy.<locals>.<listcomp>r!   z>i4Br   )dtypeFr#   rd   r/   )cZa32i   g    eAzhello therer|   )numpyZnumpy.testingrv   ImportErrorr   randomrandintr   r`   r&   ra   intfloatr8   emptyrb   rc   Z
frombufferr{   ZreshaperY   )r   r}   rv   Zshapesrd   r/   Zdtypesr   rY   dtAmsgrz   r   rx   r   test_buffer_numpyC  s6   zTestFrame.test_buffer_numpyc                 C   s   t d}|jr
J | t jt j\}}|ddg | j|dd}|js'J t  d dkr9ts9|	t j
s9J | j|dd}|jrEJ t  d dkrWtsY|	t j
r[J dS dS dS )	ztest Frame.more attributes   hellos   his   thereFr#   r   r   N)r&   r'   morer`   ra   Zsend_multipartrc   Zzmq_version_infor   getZMORE)r   framero   rp   r   r   r   test_frame_moreb  s   



zTestFrame.test_frame_more)__name__
__module____qualname__r   r   r*   r-   r0   r7   r9   r?   r@   rJ   rL   rO   rS   rU   rW   r^   rf   rh   rs   ru   r   r   __classcell__r   r   r   r   r   1   s4    
	
 
	
r   )r$   r   r   r   r~   r   r   r&   Z	zmq.testsr   r   r   r   r%   Zrc0rQ   vZview_rcr   r   r   r   r   r   <module>   s&   