
    *Vf8,                         d dl Z d dlZd dlZ	 d dlmZ eZd dlZd dlZd dlm	Z	m
Z
mZmZ dZer ee      Z ee      Z ee      ez
  Zd Z G d de
      Zy# e$ r dZY Kw xY w)    N)getrefcount)PYPYBaseZMQTestCaseSkipTest	skip_pypy   xc                     t         j                  dk  rd}nd}t        d      D ]*  }t        |       ||z   k  r yt	        j
                  d       , y)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rcmy_refsis       _/var/www/html/software/conda/envs/catlas/lib/python3.12/site-packages/zmq/tests/test_message.pyawait_gcr      sN     '!2Y s8rG|#

4	    c                        e Zd Z fdZed        Zd Zd Zd Zd Z	ed        Z
ed        Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zed        Z xZS )	TestFramec                 j    t         |           t        d      D ]  }t        j                           y )Nr
   )supertearDownr   gccollect)selfr   	__class__s     r   r    zTestFrame.tearDown2   s*    q 	AJJL	r   c                     t        dd      D ]a  }d|z  t        z  }t        |      }t        j                  |d      }t        |      |dz   k(  sJ ~t        ||       t        |      |k(  sJ ~c y)z/Message above 30 bytes are never copied by 0MQ.      r   FcopyN)r   xr   zmqFramer   )r#   r   sr   ms        r   test_above_30zTestFrame.test_above_307   st     q" 	AA
AQB		!%(Aq6R!V###QOq6R<<	r   c                 |   t        j                  d      }t        |      dk(  sJ t        j                  d      }t        |      dk(  sJ t        j                  d      }t        |      dk(  sJ t        j                  d      }t        |      dk(  sJ t        j                  d	d
z        }t        |      dk(  sJ y)z+Test the str representations of the Frames.r   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.   s     r   test_strzTestFrame.test_strD   s    IIcN1v++++IIl#1v4444IIi 1v====IIk"1v====IIdY&'1v====r   c                     t        dd      D ]\  }d|z  t        z  }t        j                  |      }|j                  }||j                  k(  sJ t
        s||usJ ||j                  u r\J  y)zTest the Frame.bytes property.r   r'   r   N)r   r*   r+   r,   bytesr   )r#   r   r-   r.   bs        r   
test_byteszTestFrame.test_bytesQ   si    q" 		 AA
A		!AA<<z!z<<		 r   c                 
   d}| j                  t        t        j                  |       t	        d      D ]N  }d|z  dz  }t        j                  |j                  d            }||j                  j                  d      k(  rNJ  y)z/Test the unicode representations of the Frames.asdfr'   r      §utf8N)assertRaises	TypeErrorr+   r,   r   encoder4   decode)r#   r-   r   r.   s       r   test_unicodezTestFrame.test_unicode^   so    )SYY2r 	/AAA		!((6*+Av....	/r   c                     t        d      D ]<  }d|z  t        z  }t        j                  |      }t	        |      t	        |      k(  r<J  y)zTest the len of the Frames.r'   r   N)r   r*   r+   r,   len)r#   r   r-   r.   s       r   test_lenzTestFrame.test_leng   sE    r 	$AA
A		!Aq6SV###	$r   c                 D   t        dd      D ]  }d|z  t        z  }t        |      x}}t        j                  |d      }|dz  }t        |      |k(  sJ t        j
                  |      }|dz  }t        |      |k(  sJ |j                  }t        |      |k(  sJ |t        |      k(  sJ ||j                  k(  sJ |t        |      k(  sJ ~t        |      |k(  sJ ~|dz  }t        |      |k(  sJ ~|dz  }t        ||       t        |      |k(  sJ ||k(  sJ ~ y)z-Run through a ref counting cycle with a copy.r&   r'   r   Fr(   r   N	r   r*   r   r+   r,   r)   bufferr4   r   r#   r   r-   r   rc_0r.   m2bufs           r   test_lifecycle1zTestFrame.test_lifecycle1n   s1    q" 	AA
AAB		!%(A!GBq6R<<1B!GBq6R<< ))Cq6R<<b	>!><<c
?"?q6R<<!GBq6R<<!GBQOq6R<<::9	r   c                 f   t        dd      D ]!  }d|z  t        z  }t        |      x}}t        j                  |d      }|dz  }t        |      |k(  sJ t        j
                  |      }|dz  }t        |      |k(  sJ |j                  }t        |      |k(  sJ |t        |      k(  sJ ||j                  k(  sJ ||j                  k(  sJ |t        |      k(  sJ ~t        |      |k(  sJ ~|dz  }t        |      |k(  sJ ~|dz  }t        ||       t        |      |k(  sJ ||k(  sJ ~$ y)z7Run through a different ref counting cycle with a copy.r&   r'   r   Fr(   r   NrD   rF   s           r   test_lifecycle2zTestFrame.test_lifecycle2   sA    q" 	AA
AAB		!%(A!GBq6R<<1B!GBq6R<< ((Cq6R<<b	>!>= =<<c
?"?q6R<<!GBq6R<<!GBQOq6R<<::7	r   c                 v   t        j                  ddd      }|j                  j                  rJ t        j                  |      }|j                  rJ ~t        d      D ]  }t        j                           t        d      D ]%  }|j                  r nt        j                  d       ' |j                  sJ y )N   asdfFTr)   trackr
   
   皙?)
r+   r,   trackerdoneMessageTrackerr   r!   r"   r   r   )r#   r.   pmr   s       r   test_trackerzTestFrame.test_tracker   s    IIgE699>>!!"77{q 	AJJL	r 	AwwJJsO	 wwwr   c                     t        j                  dd      }|j                  J t        j                  |      }|j                  J | j	                  t
        t         j                  |       y )NrN   F)rP   )r+   r,   rS   r)   r;   
ValueErrorrU   )r#   r.   rH   s      r   test_no_trackerzTestFrame.test_no_tracker   sW    IIgU+yy   YYq\zz!!!*c&8&8!<r   c                 z   t        j                  ddd      }t        j                  ddd      }t        j                  ||      }|j                  j                  rJ |j                  rJ | j                  t         j                  |j                  d       ~t        d      D ]  }t        j                           | j                  t         j                  |j                  d       |j                  rJ ~t        d      D ]  }t        j                           |j                  d      J |j                  sJ y )NrN   FTrO   s   whodarR   r
   )r+   r,   rU   rS   rT   r;   NotDonewaitr   r!   r"   )r#   r.   rH   mtr   s        r   test_multi_trackerzTestFrame.test_multi_tracker   s    IIgE6YYxe482&99>>!!77{#++rww4q 	AJJL	#++rww477{q 	AJJL	wws|###wwwr   c                 `    dj                         }t        j                  t        |             y)ztest using a buffer as input8   §§¶•ªº˜µ¬˚…∆˙åß∂©œ∑´†≈ç√N)r=   r+   r,   
memoryview)r#   inss     r   test_buffer_inzTestFrame.test_buffer_in   s     HOOQ		*S/"r   c                     | j                  t        t        j                  d       | j                  t        t        j                  t	                      y)ztest using a bad objectr&   N)r;   r<   r+   r,   object)r#   s    r   test_bad_buffer_inzTestFrame.test_bad_buffer_in   s0    )SYY2)SYY9r   c                     dj                         }t        j                  |      }|j                  }t	        |t
              sJ ||j                  u sJ |j                  |j                  u sJ y)zreceiving buffered outputra   N)r=   r+   r,   rE   
isinstancerb   )r#   rc   r.   outbs       r   test_buffer_outzTestFrame.test_buffer_out   s^    HOOQIIcNxx$
+++qxxxx188###r   c                 r   dj                         }t        |      }t        j                  |      }|j                  }|j
                  dk(  sJ |j                  |fk(  sJ |j                         |k(  sJ t        |      }|j
                  dk(  sJ |j                  |fk(  sJ |j                         |k(  sJ y)zmemoryview shape infora   r   N)	r=   rA   r+   r,   rE   ndimshapetobytesrb   )r#   datanfview1view2s         r   test_memoryview_shapezTestFrame.test_memoryview_shape   s    IPPRIIIdOzzQ{{qd"""}}$&&&1zzQ{{qd"""}}$&&&r   c                    | j                  t        j                  t        j                        \  }}d}t        j                  |      }||j                  k(  sJ |j                  |d       t        j                  d       ||j                  k(  sJ |j                  |d       t        j                  d       ||j                  k(  sJ |j                  |d       t        j                  d       ||j                  k(  sJ |j                  |d       t        j                  d       ||j                  k(  sJ t        d      D ]  }|j                         }||k(  rJ  ||j                  k(  sJ y)z9ensure that a message remains intact after multiple sendss   messageFr(   rR   T   N)
create_bound_pairr+   PAIRr,   r4   sendr   r   r   recv)r#   ar5   r-   r.   r   rs          r   test_multisendzTestFrame.test_multisend   s)   %%chh91IIaLAGG||	qu

3AGG||	qu

3AGG||	qt

3AGG||	qt

3AGG||q 	AA6M6	 AGG||r   c                     d}t        |       t        j                  |      }|j                  }|j	                         }||k(  sJ |j
                  |k(  sJ y)ztest messages from memoryviews   carrotjuiceN)rb   r+   r,   rE   ro   r4   )r#   r-   r.   rI   s2s        r   test_memoryviewzTestFrame.test_memoryview  sJ    1IIaLhh[[]Qwwww!||r   c                    d}| j                  t        j                  t        j                        \  }}t        d      D ]  }|j	                  |d       |j                  d      }|j                  }|j                  }~t        d      D ]~  }dd|dz  z   z  }|j	                  |d       |j                  d      }	|j                         }
|
|k(  sJ ||k(  sJ |	j                  |k(  sJ t        |	j                        t        u r~J   y	)
z$check for clobbering message buffers@                                                                       Fr(   r&      (   rQ   N)
rx   r+   ry   r   rz   r{   r4   rE   ro   type)r#   nullsasbr   r.   mbrI   ffrH   r5   s              r   test_noncopying_recvzTestFrame.test_noncopying_recv  s    ''#((;Br 	/AGGDuG%U#AB((C1X /QV,'WW%W(KKMDy yTz!zxx2~%~BHH~.../	/r   c                 V   d}| j                  t        j                  t        j                        \  }}t        d      D ]  }|j	                  t        |      d       |j                  d      }t        |      }t        d      D ]  }dd|dz  z   z  }|j	                  t        |      d       |j                  d      }t        |      }	|j                         |k(  sJ |j                  rJ |	j                         |k(  sJ |	j                  rJ t        |      t
        u rJ   y	)
z%test non-copying memmoryview messagesr   r   Fr(   r&   r   r   rQ   N)
rx   r+   ry   r   rz   rb   r{   ro   readonlyr   )
r#   r   r   r   r   r.   rI   r   rH   buf2s
             r   test_noncopying_memoryviewz$TestFrame.test_noncopying_memoryview/  s   ''#((;Br 	/AGGJt$5G1U#AQ-C1X 	/QV,
2U3WW%W(!"~{{},,,<<''||~+++==((CyJ...	/	/r   c                    	 ddl }ddlm} |j
                  j                  }t        d      D cg c]  } |dd       }}| j                  t        j                  t        j                        \  }}t        t        ddg}t        d	t        |      d	z         D ]  }|d| }	|D ]x  }
|j                  |	|

      }|j                  |d       |j!                  d      }|j#                  ||j$                        j'                  |j(                        } |||       z |j                  |	dt        fdt        fdg
      }d|d<   d|d<   d|d<   |j                  |d       |j!                  d      }|j#                  ||j$                        j'                  |j(                        } |||        y# t        $ r t	        d      w xY wc c}w )z%test non-copying numpy array messagesr   N)assert_array_equalzrequires numpyr&   r   z>i4Br   )dtypeFr(   r|   r5   )ca32i   g    eAzhello therer   )numpynumpy.testingr   ImportErrorr   randomrandintr   rx   r+   ry   intfloatrA   emptyrz   r{   
frombufferr   reshapern   )r#   r   r   randr   shapesr|   r5   dtypesrn   dtAmsgr   s                 r   test_buffer_numpyzTestFrame.test_buffer_numpyC  s   	-8 ||##&+Ah/$q!*//%%chh91ueS)q#f+/* 	%A2AJE )KKRK0qu%ff%f($$S!''2::177C"1a() E3*sElL)QRAAcFAcF"AcFFF15F!&&e&$C  agg.66qww?Aq!$%	%  	-+,,	- 0s   
F6 G6Gc                 ^   t        j                  d      }|j                  rJ | j                  t         j                  t         j                        \  }}|j                  ddg       | j                  |d      }|j                  sJ t        j                         d   dk\  r't        s!|j                  t         j                        sJ | j                  |d      }|j                  rJ t        j                         d   dk\  r)t        s"|j                  t         j                        rJ yyy)	ztest Frame.more attributes   hellos   his   thereFr(   r   r
   N)r+   r,   morerx   ry   send_multipartr{   zmq_version_infor   getMORE)r#   framer   r   s       r   test_frame_morezTestFrame.test_frame_moreb  s     		(#::~''#((;B
5(+,		"5	)zzz!!$)$99SXX&&&		"5	)::~!!$)$yy**** 37)r   )__name__
__module____qualname__r    r   r/   r2   r6   r?   rB   rJ   rL   rW   rZ   r_   rd   rg   rk   ru   r~   r   r   r   r   r   __classcell__)r$   s   @r   r   r   1   s    
 
 
> /$  @  >=$#
:
$'0/,/(%> + +r   r   )r)   r!   r   r   r   r   r   r+   	zmq.testsr   r   r   r   r*   rc0rb   vview_rcr   r    r   r   <module>r      s~   
  	 
 C  
 @ @ 	
a&C1A!fslG$+ +M  
Cs   A A"!A"