
    Zd+                         d dl Z d dlZd dlZ	 d dlmZ eZn# e$ r dZY nw xY w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dS )    N)getrefcount)PYPYBaseZMQTestCaseSkipTest	skip_pypy   xc                     t           j        dk     rd}nd}t          d          D ]/}t          |           ||z   k    r dS t	          j        d           0d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rcmy_refsis       6lib/python3.11/site-packages/zmq/tests/test_message.pyawait_gcr      sl     '!!2YY  s88rG|##FF
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                     t                                                       t          d          D ]}t          j                     d S )Nr
   )supertearDownr   gccollect)selfr   	__class__s     r   r    zTestFrame.tearDown2   sE    q 	 	AJLLLL	 	r   c                    t          dd          D ]s}d|z  t          z  }t          |          }t          j        |d          }t          |          |dz   k    sJ ~t          ||           t          |          |k    sJ ~tdS )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   s     q" 	 	AA
AQB	!%(((Aq66R!V####QOOOq66R<<<<	 	r   c                     t          d          D ]N}d|z  t          z  }t          j        |          }t	          |          }|                                }||k    sJ OdS )z+Test the str representations of the Frames.r'   r   N)r   r*   r+   r,   strencode)r#   r   r-   r.   m_strm_str_bs         r   test_strzTestFrame.test_strD   sb    r 	  	 AA
A	!AFFEllnnG<<<<<	  	 r   c                     t          dd          D ]O}d|z  t          z  }t          j        |          }|j        }||j        k    sJ t
          s||usJ ||j        u sJ PdS )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_bytesM   sy    q" 		  		 AA
A	!AA<<<< "zzzz<<<<<		  		 r   c                    d}|                      t          t          j        |           t	          d          D ]Q}d|z  dz  }t          j        |                    d                    }||j                            d          k    sJ RdS )z/Test the unicode representations of the Frames.asdfr'   r      §utf8N)assertRaises	TypeErrorr+   r,   r   r2   r7   decode)r#   r-   r   r.   s       r   test_unicodezTestFrame.test_unicodeZ   s    )SY222r 	/ 	/AAA	!((6**++Av.......	/ 	/r   c                     t          d          D ]E}d|z  t          z  }t          j        |          }t	          |          t	          |          k    sJ FdS )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_lenc   s[    r 	$ 	$AA
A	!Aq66SVV#####	$ 	$r   c                    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 |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 ~`dS )z-Run through a ref counting cycle with a copy.r&   r'   r   Fr(   r   Nr   r*   r   r+   r,   r)   bufferr1   r2   r7   r   r#   r   r-   r   rc_0r.   m2bufs           r   test_lifecycle1zTestFrame.test_lifecycle1j   s    q" 	 	AA
AAB	!%(((A!GBq66R<<<<1B!GBq66R<<<< )Cq66R<<<<A''''b		>>>><<<<c

???? q66R<<<<!GBq66R<<<<!GBQOOOq66R<<<<::::?	 	r   c                     t          dd          D ]k}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 |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 ~mdS )z7Run through a different ref counting cycle with a copy.r&   r'   r   Fr(   r   NrF   rH   s           r   test_lifecycle2zTestFrame.test_lifecycle2   s    q" 	 	AA
AAB	!%(((A!GBq66R<<<<1B!GBq66R<<<< (Cq66R<<<<A''''b		>>>>====<<<<c

???? q66R<<<<!GBq66R<<<<!GBQOOOq66R<<<<::::=	 	r   c                 F   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 d S )N   asdfFTr)   trackr
   
   皙?)
r+   r,   trackerdoneMessageTrackerr   r!   r"   r   r   )r#   r.   pmr   s       r   test_trackerzTestFrame.test_tracker   s    IgE6669>!!!""7q 	 	AJLLLLr 	 	Aw JsOOOOwr   c                     t          j        dd          }|j        d k    sJ t          j        |          }|j        d k    sJ |                     t
          t           j        |           d S )NrP   F)rR   )r+   r,   rU   r)   r>   
ValueErrorrW   )r#   r.   rJ   s      r   test_no_trackerzTestFrame.test_no_tracker   sj    IgU+++yD    Yq\\zT!!!!*c&8!<<<<<r   c                 <   t          j        ddd          }t          j        ddd          }t          j        ||          }|j        j        rJ |j        rJ |                     t           j        |j        d           ~t          d          D ]}t          j
                     |                     t           j        |j        d           |j        rJ ~t          d          D ]}t          j
                     |                    d          J |j        sJ d S )NrP   FTrQ   s   whodarT   r
   )r+   r,   rW   rU   rV   r>   NotDonewaitr   r!   r"   )r#   r.   rJ   mtr   s        r   test_multi_trackerzTestFrame.test_multi_tracker   s   IgE666Yxe48882&&9>!!!7#+rw444q 	 	AJLLLL#+rw4447q 	 	AJLLLLwws||###wr   c                 p    d                                 }t          j        t          |                     dS )ztest using a buffer as input8   §§¶•ªº˜µ¬˚…∆˙åß∂©œ∑´†≈ç√N)r2   r+   r,   
memoryview)r#   inss     r   test_buffer_inzTestFrame.test_buffer_in   s/    HOOQQ	*S//"""""r   c                     |                      t          t          j        d           |                      t          t          j        t	                                 dS )ztest using a bad objectr&   N)r>   r?   r+   r,   object)r#   s    r   test_bad_buffer_inzTestFrame.test_bad_buffer_in   s@    )SY222)SY99999r   c                     d                                 }t          j        |          }|j        }t	          |t
                    sJ ||j        u sJ |j        |j        u sJ dS )zreceiving buffered outputrc   N)r2   r+   r,   rG   
isinstancerd   )r#   re   r.   outbs       r   test_buffer_outzTestFrame.test_buffer_out   sk    HOOQQIcNNx$
+++++qxx18######r   c                 t   d                                 }t          |          }t          j        |          }|j        }|j        dk    sJ |j        |fk    sJ |                                |k    sJ t          |          }|j        dk    sJ |j        |fk    sJ |                                |k    sJ dS )zmemoryview shape inforc   r   N)	r2   rC   r+   r,   rG   ndimshapetobytesrd   )r#   datanfview1view2s         r   test_memoryview_shapezTestFrame.test_memoryview_shape   s    IPPRRIIIdOOzQ{qd""""}}$&&&&1zQ{qd""""}}$&&&&&&r   c                    |                      t          j        t          j                  \  }}d}t          j        |          }||j        k    sJ |                    |d           t          j        d           ||j        k    sJ |                    |d           t          j        d           ||j        k    sJ |                    |d           t          j        d           ||j        k    sJ |                    |d           t          j        d           ||j        k    sJ t          d          D ]}|	                                }||k    sJ ||j        k    sJ dS )z9ensure that a message remains intact after multiple sendss   messageFr(   rT   T   N)
create_bound_pairr+   PAIRr,   r7   sendr   r   r   recv)r#   ar8   r-   r.   r   rs          r   test_multisendzTestFrame.test_multisend   sL   %%ch991IaLLAG||||	qu
3AG||||	qu
3AG||||	qt
3AG||||	qt
3AG||||q 	 	AA66666AG||||||r   c                     d}t          |           t          j        |          }|j        }|                                }||k    sJ |j        |k    sJ dS )ztest messages from memoryviews   carrotjuiceN)rd   r+   r,   rG   rq   r7   )r#   r-   r.   rK   s2s        r   test_memoryviewzTestFrame.test_memoryview  sS    1IaLLh[[]]Qwwwww!||||||r   c                 0   d}|                      t          j        t          j                  \  }}t          d          D ]}|                    |d           |                    d          }|j        }|j        }~t          d          D ]}dd|dz  z   z  }|                    |d           |                    d          }	|                                }
|
|k    sJ ||k    sJ |	j        |k    sJ t          |	j                  t          u sJ d	S )
z$check for clobbering message buffers@                                                                       Fr(   r&      (   rS   N)
rz   r+   r{   r   r|   r}   r7   rG   rq   type)r#   nullsasbr   r.   mbrK   ffrJ   r8   s              r   test_noncopying_recvzTestFrame.test_noncopying_recv  s$   ''#(;;Br 	/ 	/AGGDuG%%%U##AB(C1XX / /QV,'''WW%W((KKMMDyyyyTzzzzx2~~~~BH~~...../	/ 	/r   c                    d}|                      t          j        t          j                  \  }}t          d          D ]}|                    t          |          d           |                    d          }t          |          }t          d          D ]}dd|dz  z   z  }|                    t          |          d           |                    d          }t          |          }	|                                |k    sJ |j        rJ |	                                |k    sJ |	j        rJ t          |          t
          u sJ d	S )
z%test non-copying memmoryview messagesr   r   Fr(   r&   r   r   rS   N)
rz   r+   r{   r   r|   rd   r}   rq   readonlyr   )
r#   r   r   r   r   r.   rK   r   rJ   buf2s
             r   test_noncopying_memoryviewz$TestFrame.test_noncopying_memoryview1  sM   ''#(;;Br 	/ 	/AGGJt$$5G111U##AQ--C1XX 	/ 	/QV,
2U333WW%W((!"~~{{}},,,,<'''||~~++++=(((CyyJ.....	/	/ 	/r   c                    	 ddl }ddlm} n# t          $ r t	          d          w xY w|j        j        fdt          d          D             }|                     t          j
        t          j
                  \  }}t          t          ddg}t          d	t          |          d	z             D ]8}|d|         }|D ]}	|                    ||	
          }
|                    |
d           |                    d          }|                    ||
j                                      |
j                  } ||
|           |                    |dt          fdt          fdg
          }
d|
d<   d|
d<   d|
d<   |                    |
d           |                    d          }|                    ||
j                                      |
j                  } ||
|           :dS )z%test non-copying numpy array messagesr   N)assert_array_equalzrequires numpyc                 (    g | ]} d d          S )r   r&    ).0r   rands     r   
<listcomp>z/TestFrame.test_buffer_numpy.<locals>.<listcomp>M  s#    ///$$q!**///r   r&   z>i4Br   )dtypeFr(   r~   r8   )ca32i   g    eAzhello therer   )numpynumpy.testingr   ImportErrorr   randomrandintr   rz   r+   r{   intfloatrC   emptyr|   r}   
frombufferr   reshaperp   )r#   r   r   shapesr~   r8   dtypesr   rp   dtAmsgr   r   s                @r   test_buffer_numpyzTestFrame.test_buffer_numpyE  s   	-LLL8888888 	- 	- 	-+,,,	-|#////eAhh///%%ch991ueS)q#f++/** 	% 	%A2A2JE ) )KKRK00qu%%%ff%f(($$S!'22::17CC""1a((((E3*sElL)QRRAAcFAcF"AcFFF15F!!!&&e&$$C  ag..66qw??Aq!$$$$%	% 	%s   
 (c                 d   t          j        d          }|j        rJ |                     t           j        t           j                  \  }}|                    ddg           |                     |d          }|j        sJ t          j                    d         dk    r(t          s!|	                    t           j
                  sJ |                     |d          }|j        rJ t          j                    d         dk    r(t          s#|	                    t           j
                  rJ dS dS dS )	ztest Frame.more attributes   hellos   his   thereFr(   r   r
   N)r+   r,   morerz   r{   send_multipartr}   zmq_version_infor   getMORE)r#   framer   r   s       r   test_frame_morezTestFrame.test_frame_mored  s!    	(##:''#(;;B
5(+,,,		"5	))z!!!$))$)99SX&&&&&		"5	)):!!!$))$)yy***** *)))**r   )__name__
__module____qualname__r    r   r/   r5   r9   rA   rD   rL   rN   rY   r\   ra   rf   ri   rm   rw   r   r   r   r   r   r   __classcell__)r$   s   @r   r   r   1   s           
 
 
 Y
          / / /$ $ $ ! ! Y!F     Y D  = = =  $# # #
: : :
$ $ $' ' '  0  / / /,/ / /(% % %> + + Y+ + + + +r   r   )r)   r!   r   r   r   r   r   r+   	zmq.testsr   r   r   r   r*   rc0rd   vview_rcr   r   r   r   r   <module>r      s'  
  				 



 CC    
CCC
  



 @ @ @ @ @ @ @ @ @ @ @ @ 	 
#a&&C
1Ac!ffslG  $A+ A+ A+ A+ A+ A+ A+ A+ A+ A+s    !!