U
    4Jeƒ†  ã                   @   sÐ   d Z dZddlZddlZddlZddlmZ ddlmZ ze	 W n e
k
rX   eZ	Y nX 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G dd„ dejƒZdS ) zpUtilities for Python proto2 tests.

This is intentionally modeled on C++ code in
//google/protobuf/test_util.*.
z#robinson@google.com (Will Robinson)é    N)Úunittest_import_pb2)Úunittest_pb2c                 C   s   | j jdkS )NZproto2)Z
DESCRIPTORZsyntax©Úmessage© r   úF/tmp/pip-unpacked-wheel-0oacnh65/google/protobuf/internal/test_util.pyÚIsProto27   s    r   c                 C   s”  d| _ d| _d| _d| _d| _d| _d| _d| _d	| _d
| _	d| _
d| _d| _d| _d| _t| ƒrjd| j_d| j_d| j_d| j_d| j_tjj| _tj| _t| ƒr¬t j!| _"d| _#d| _$| j% &d¡ | j' &d¡ | j( &d¡ | j) &d¡ | j* &d¡ | j+ &d¡ | j, &d¡ | j- &d¡ | j. &d¡ | j/ &d ¡ | j0 &d!¡ | j1 &d"¡ | j2 &d¡ | j3 &d#¡ | j4 &d$¡ t| ƒr‚d%| j5 6¡ _d&| j7 6¡ _d'| j8 6¡ _d(| j9 6¡ _d)| j: 6¡ _| j; &tjj<¡ | j= &tj>¡ t| ƒrè| j? &t j@¡ | jA &d*¡ | jB &d+¡ | j% &d,¡ | j' &d,¡ | j( &d,¡ | j) &d,¡ | j* &d,¡ | j+ &d,¡ | j, &d,¡ | j- &d,¡ | j. &d,¡ | j/ &d,¡ | j0 &d,¡ | j1 &d,¡ | j2 &d¡ | j3 &d-¡ | j4 &d.¡ d/| j%d0< d1| j'd0< d2| j(d0< d3| j)d0< d4| j*d0< d5| j+d0< d6| j,d0< d7| j-d0< d8| j.d0< d9| j/d0< d:| j0d0< d;| j1d0< d<| j2d0< d=| j3d0< d>| j4d0< t| ƒr`d?| j5 6¡ _d@| j7 6¡ _dA| j8 6¡ _dB| j9 6¡ _dC| j: 6¡ _| j; &tjj<¡ tjj| j;d0< | j= &tj¡ t| ƒrÔ| j? &t j!¡ | jA &dD¡ | jB &dE¡ t| ƒrvdF| _CdG| _DdH| _EdI| _FdJ| _GdK| _HdL| _IdM| _JdN| _KdO| _LdP| _MdQ| _Nd<| _OdR| _PdS| _QtjjR| _StjT| _Ut jV| _WdT| _XdU| _YdV| _ZdW| j[_dX| _\dY| _]dZS )[zmSets every non-lazy field in the message to a unique value.

  Args:
    message: A TestAllTypes instance.
  ée   éf   ég   éh   éi   éj   ék   él   ém   én   éo   ép   TÚ115ó   116éu   év   éw   éx   é~   Ú124Ú125éÉ   éÊ   éË   éÌ   éÍ   éÎ   éÏ   éÐ   éÑ   éÒ   éÓ   éÔ   Ú215ó   216éÙ   éÚ   éÛ   éÜ   éã   Ú224Ú225r   Ú0ó   0é-  é   é.  é/  é0  é1  é2  é3  é4  é5  é6  é7  é8  FÚ315ó   316é=  é>  é?  é@  éG  Ú324Ú325é‘  é’  é“  é”  é•  é–  é—  é˜  é™  éš  é›  éœ  Ú415ó   416Ú424Ú425éY  éZ  Ú603ó   604N)^Úoptional_int32Úoptional_int64Úoptional_uint32Úoptional_uint64Úoptional_sint32Úoptional_sint64Úoptional_fixed32Úoptional_fixed64Úoptional_sfixed32Úoptional_sfixed64Úoptional_floatÚoptional_doubleÚoptional_boolÚoptional_stringÚoptional_bytesr   ÚoptionalgroupÚaÚoptional_nested_messageÚbbÚoptional_foreign_messageÚcÚoptional_import_messageÚdÚoptional_public_import_messageÚer   ÚTestAllTypesÚBAZÚoptional_nested_enumÚFOREIGN_BAZÚoptional_foreign_enumr   Ú
IMPORT_BAZÚoptional_import_enumÚoptional_string_pieceÚoptional_cordÚrepeated_int32ÚappendÚrepeated_int64Úrepeated_uint32Úrepeated_uint64Úrepeated_sint32Úrepeated_sint64Úrepeated_fixed32Úrepeated_fixed64Úrepeated_sfixed32Úrepeated_sfixed64Úrepeated_floatÚrepeated_doubleÚrepeated_boolÚrepeated_stringÚrepeated_bytesÚrepeatedgroupÚaddÚrepeated_nested_messageÚrepeated_foreign_messageÚrepeated_import_messageÚrepeated_lazy_messageÚrepeated_nested_enumÚBARÚrepeated_foreign_enumÚFOREIGN_BARÚrepeated_import_enumÚ
IMPORT_BARÚrepeated_string_pieceÚrepeated_cordÚdefault_int32Údefault_int64Údefault_uint32Údefault_uint64Údefault_sint32Údefault_sint64Údefault_fixed32Údefault_fixed64Údefault_sfixed32Údefault_sfixed64Údefault_floatÚdefault_doubleÚdefault_boolÚdefault_stringÚdefault_bytesÚFOOÚdefault_nested_enumÚFOREIGN_FOOÚdefault_foreign_enumÚ
IMPORT_FOOÚdefault_import_enumZdefault_string_pieceZdefault_cordZoneof_uint32Zoneof_nested_messageZoneof_stringZoneof_bytesr   r   r   r   ÚSetAllNonLazyFields;   sô    





















r´   c                 C   s   t | ƒ d| j_d| j_d S )Né   é€   )r´   Úoptional_lazy_messagerq   Ú optional_unverified_lazy_messager   r   r   r   ÚSetAllFieldsÚ   s    r¹   c                 C   sn  | j }t}t}d||j< d||j< d||j< d||j< d||j< d||j< d||j	< d||j
< d	||j< d
||j< d||j< d||j< d||j< d||j< d||j< d||j _d||j _d||j _d||j _d||j _d||j _d||j _|jj||j < |jj||j < |j!||j"< |j#||j$< d||j%< d||j&< ||j'  (d¡ ||j)  (d¡ ||j*  (d¡ ||j+  (d¡ ||j,  (d¡ ||j-  (d¡ ||j.  (d¡ ||j/  (d ¡ ||j0  (d!¡ ||j1  (d"¡ ||j2  (d#¡ ||j3  (d$¡ ||j4  (d¡ ||j5  (d%¡ ||j6  (d&¡ d'||j7  8¡ _d(||j9  8¡ _d)||j:  8¡ _d*||j;  8¡ _d+||j<  8¡ _||j=  (|jj>¡ ||j?  (|j@¡ ||jA  (|jB¡ ||jC  (d,¡ ||jD  (d-¡ ||j'  (d.¡ ||j)  (d/¡ ||j*  (d0¡ ||j+  (d1¡ ||j,  (d2¡ ||j-  (d3¡ ||j.  (d4¡ ||j/  (d5¡ ||j0  (d6¡ ||j1  (d7¡ ||j2  (d8¡ ||j3  (d9¡ ||j4  (d:¡ ||j5  (d;¡ ||j6  (d<¡ d=||j7  8¡ _d>||j9  8¡ _d?||j:  8¡ _d@||j;  8¡ _dA||j<  8¡ _||j=  (|jj¡ ||j?  (|j!¡ ||jA  (|j#¡ ||jC  (dB¡ ||jD  (dC¡ dD||jE< dE||jF< dF||jG< dG||jH< dH||jI< dI||jJ< dJ||jK< dK||jL< dL||jM< dM||jN< dN||jO< dO||jP< d:||jQ< dP||jR< dQ||jS< |jjT||jU< |jV||jW< |jX||jY< dR||jZ< dS||j[< dT||j\< dU||j] _dV||j^< dW||j_< dXS )YzzSets every extension in the message to a unique value.

  Args:
    message: A unittest_pb2.TestAllExtensions instance.
  r	   r
   r   r   r   r   r   r   r   r   r   r   Tr   r   r   r   r   r   r   rµ   r¶   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r5   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   FrB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   N)`Ú
Extensionsr   r   Zoptional_int32_extensionZoptional_int64_extensionZoptional_uint32_extensionZoptional_uint64_extensionZoptional_sint32_extensionZoptional_sint64_extensionZoptional_fixed32_extensionZoptional_fixed64_extensionZoptional_sfixed32_extensionZoptional_sfixed64_extensionZoptional_float_extensionZoptional_double_extensionZoptional_bool_extensionZoptional_string_extensionZoptional_bytes_extensionZoptionalgroup_extensionro   Z!optional_nested_message_extensionrq   Z"optional_foreign_message_extensionrs   Z!optional_import_message_extensionru   Z(optional_public_import_message_extensionrw   Zoptional_lazy_message_extensionZ*optional_unverified_lazy_message_extensionrx   ry   Zoptional_nested_enum_extensionr{   Zoptional_foreign_enum_extensionr}   Zoptional_import_enum_extensionZoptional_string_piece_extensionZoptional_cord_extensionZrepeated_int32_extensionr‚   Zrepeated_int64_extensionZrepeated_uint32_extensionZrepeated_uint64_extensionZrepeated_sint32_extensionZrepeated_sint64_extensionZrepeated_fixed32_extensionZrepeated_fixed64_extensionZrepeated_sfixed32_extensionZrepeated_sfixed64_extensionZrepeated_float_extensionZrepeated_double_extensionZrepeated_bool_extensionZrepeated_string_extensionZrepeated_bytes_extensionZrepeatedgroup_extensionr’   Z!repeated_nested_message_extensionZ"repeated_foreign_message_extensionZ!repeated_import_message_extensionZrepeated_lazy_message_extensionZrepeated_nested_enum_extensionr˜   Zrepeated_foreign_enum_extensionrš   Zrepeated_import_enum_extensionrœ   Zrepeated_string_piece_extensionZrepeated_cord_extensionZdefault_int32_extensionZdefault_int64_extensionZdefault_uint32_extensionZdefault_uint64_extensionZdefault_sint32_extensionZdefault_sint64_extensionZdefault_fixed32_extensionZdefault_fixed64_extensionZdefault_sfixed32_extensionZdefault_sfixed64_extensionZdefault_float_extensionZdefault_double_extensionZdefault_bool_extensionZdefault_string_extensionZdefault_bytes_extensionr®   Zdefault_nested_enum_extensionr°   Zdefault_foreign_enum_extensionr²   Zdefault_import_enum_extensionZdefault_string_piece_extensionZdefault_cord_extensionZoneof_uint32_extensionZoneof_nested_message_extensionZoneof_string_extensionZoneof_bytes_extension)r   Ú
extensionsÚpb2Z
import_pb2r   r   r   ÚSetAllExtensionsà   sÒ    



































r½   c                 C   s.   d| _ d| _d| _d| jtj< d| jtj< dS )zƒSets every field and extension in the message to a unique value.

  Args:
    message: A unittest_pb2.TestAllExtensions message.
  r6   Úfooç      ð?é   ÚbarN)Úmy_intÚ	my_stringÚmy_floatrº   r   Úmy_extension_intÚmy_extension_stringr   r   r   r   ÚSetAllFieldsAndExtensionso  s
    rÇ   c                 C   sÒ   t j}t j}g }t  ¡ }d|_| | ¡ ¡ | ¡  d|j|< | | ¡ ¡ | ¡  d|_	| | ¡ ¡ | ¡  d|j|< | | ¡ ¡ | ¡  d|_
| | ¡ ¡ | ¡  d |¡}|| krÎtd|| f ƒ‚dS )	zÇEnsures that serialized is the serialization we expect for a message
  filled with SetAllFieldsAndExtensions().  (Specifically, ensures that the
  serialization is in canonical, tag-number order).
  r6   rÀ   r¾   rÁ   r¿   ó    zExpected %r, found %rN)r   rÅ   rÆ   ZTestFieldOrderingsrÂ   r‚   ZSerializeToStringZClearrº   rÃ   rÄ   ÚjoinÚ
ValueError)Z
serializedrÅ   rÆ   Zexpected_stringsr   Úexpectedr   r   r   Ú#ExpectAllFieldsAndExtensionsInOrder|  s,    


rÌ   c                 C   sâ
  |   | d¡¡ |   | d¡¡ |   | d¡¡ |   | d¡¡ |   | d¡¡ |   | d¡¡ |   | d¡¡ |   | d¡¡ |   | d	¡¡ |   | d
¡¡ |   | d¡¡ |   | d¡¡ |   | d¡¡ |   | d¡¡ |   | d¡¡ t|ƒr
|   | d¡¡ |   | d¡¡ |   | d¡¡ |   | d¡¡ |   |j d¡¡ |   |j d¡¡ |   |j d¡¡ |   |j d¡¡ |   | d¡¡ |   | d¡¡ t|ƒr¼|   | d¡¡ |   | d¡¡ |   | d¡¡ |  d|j¡ |  d|j	¡ |  d|j
¡ |  d |j¡ |  d!|j¡ |  d"|j¡ |  d#|j¡ |  d$|j¡ |  d%|j¡ |  d&|j¡ |  d'|j¡ |  d(|j¡ |  d)|j¡ |  d*|j¡ |  d+|j¡ t|ƒrÈ|  d,|jj¡ |  d-|jj¡ |  d.|jj¡ |  d/|jj¡ |  d0|jj¡ |  d1|jj¡ |  d2|jj¡ |  tj j!|j"¡ |  tj#|j$¡ t|ƒrd|  t%j&|j'¡ |  d3t(|j)ƒ¡ |  d3t(|j*ƒ¡ |  d3t(|j+ƒ¡ |  d3t(|j,ƒ¡ |  d3t(|j-ƒ¡ |  d3t(|j.ƒ¡ |  d3t(|j/ƒ¡ |  d3t(|j0ƒ¡ |  d3t(|j1ƒ¡ |  d3t(|j2ƒ¡ |  d3t(|j3ƒ¡ |  d3t(|j4ƒ¡ |  d3t(|j5ƒ¡ |  d3t(|j6ƒ¡ |  d3t(|j7ƒ¡ t|ƒrŽ|  d3t(|j8ƒ¡ |  d3t(|j9ƒ¡ |  d3t(|j:ƒ¡ |  d3t(|j;ƒ¡ |  d3t(|j<ƒ¡ |  d3t(|j=ƒ¡ t|ƒr|  d3t(|j>ƒ¡ |  d3t(|j?ƒ¡ |  d3t(|j@ƒ¡ |  d4|j)d5 ¡ |  d6|j*d5 ¡ |  d7|j+d5 ¡ |  d8|j,d5 ¡ |  d9|j-d5 ¡ |  d:|j.d5 ¡ |  d;|j/d5 ¡ |  d<|j0d5 ¡ |  d=|j1d5 ¡ |  d>|j2d5 ¡ |  d?|j3d5 ¡ |  d@|j4d5 ¡ |  d)|j5d5 ¡ |  dA|j6d5 ¡ |  dB|j7d5 ¡ t|ƒrT|  dC|j8d5 j¡ |  dD|j9d5 j¡ |  dE|j:d5 j¡ |  dF|j;d5 j¡ |  dG|jAd5 j¡ |  tj jB|j<d5 ¡ |  tjC|j=d5 ¡ t|ƒrì|  t%jD|j>d5 ¡ |  dH|j)dI ¡ |  dJ|j*dI ¡ |  dK|j+dI ¡ |  dL|j,dI ¡ |  dM|j-dI ¡ |  dN|j.dI ¡ |  dO|j/dI ¡ |  dP|j0dI ¡ |  dQ|j1dI ¡ |  dR|j2dI ¡ |  dS|j3dI ¡ |  dT|j4dI ¡ |  dU|j5dI ¡ |  dV|j6dI ¡ |  dW|j7dI ¡ t|ƒr|  dX|j8dI j¡ |  dY|j9dI j¡ |  dZ|j:dI j¡ |  d[|j;dI j¡ |  d\|jAdI j¡ |  tj j!|j<dI ¡ |  tj#|j=dI ¡ t|ƒr°|  t%j&|j>dI ¡ t|ƒ
rÞ|   | d]¡¡ |   | d^¡¡ |   | d_¡¡ |   | d`¡¡ |   | da¡¡ |   | db¡¡ |   | dc¡¡ |   | dd¡¡ |   | de¡¡ |   | df¡¡ |   | dg¡¡ |   | dh¡¡ |   | di¡¡ |   | dj¡¡ |   | dk¡¡ |   | dl¡¡ |   | dm¡¡ |   | dn¡¡ |  do|jE¡ |  dp|jF¡ |  dq|jG¡ |  dr|jH¡ |  ds|jI¡ |  dt|jJ¡ |  du|jK¡ |  dv|jL¡ |  dw|jM¡ |  dx|jN¡ |  dy|jO¡ |  dz|jP¡ |  dU|jQ¡ |  d{|jR¡ |  d||jS¡ |  tj jT|jU¡ |  tjV|jW¡ |  t%jX|jY¡ d}S )~zFCheck all fields for correct values have after Set*Fields() is called.r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   rp   rr   rt   ro   rq   rs   ru   rz   r|   r~   r   r€   r	   r
   r   r   r   r   r   r   r   r   r   r   Tr   r   r   r   r   r   r   rµ   r¶   é   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   FrB   rC   rD   rE   rF   rG   rH   rŸ   r    r¡   r¢   r£   r¤   r¥   r¦   r§   r¨   r©   rª   r«   r¬   r­   r¯   r±   r³   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   N)ZÚ
assertTrueZHasFieldr   rn   rp   rr   rt   ÚassertEqualr_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   ro   rq   rs   ru   rv   rw   r·   r¸   r   rx   ry   rz   r{   r|   r   r}   r~   Úlenr   rƒ   r„   r…   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   r   rŽ   r   r   r‘   r“   r”   r•   r—   r™   r›   r   rž   r–   r˜   rš   rœ   rŸ   r    r¡   r¢   r£   r¤   r¥   r¦   r§   r¨   r©   rª   r«   r¬   r­   r®   r¯   r°   r±   r²   r³   )Z	test_caser   r   r   r   ÚExpectAllFieldsSetš  s„   



ÿÿ
ÿ



ÿÿ
ÿ

ÿÿ
ÿ

ÿÿÿrÑ   c                 C   sª   d}t j |¡rPt j t j |d¡¡r@t j |d| ¡}t|dƒS t j |d¡}qd}t j |d| ¡}t j |¡rzt|dƒS t j d| ¡}t j |¡ržt|dƒS tdƒ‚d	S )
zFFinds the given golden file and returns a file object representing it.Ú.zsrc/google/protobufzsrc/google/protobuf/testdataÚrbz..z'third_party/py/google/protobuf/testdataz9external/com_google_protobuf/src/google/protobuf/testdataz™Could not find golden files.  This test must be run from within the protobuf source package so that it can read test data files from the C++ source tree.N)ÚosÚpathÚexistsrÉ   ÚopenÚRuntimeError)ÚfilenamerÕ   Ú	full_pathr   r   r   Ú
GoldenFilel  s(    

ÿ
ÿ
ÿrÛ   c              
   C   s(   t | ƒ}| ¡ W  5 Q R £ S Q R X dS )z5Finds the given golden file and returns its contents.N)rÛ   Úread)rÙ   Úfr   r   r   ÚGoldenFileData  s    
rÞ   c                 C   sè   | j  ddg¡ | j ddg¡ | j ddg¡ | j ddg¡ | j d	d
g¡ | j ddg¡ | j ddg¡ | j ddg¡ | j	 ddg¡ | j
 ddg¡ | j ddg¡ | j ddg¡ | j ddg¡ | j tjtjg¡ dS )zgSets every field in the message to a unique value.

  Args:
    message: A TestPackedTypes instance.
  r[   é½  r\   é¾  é[  é¿  é\  éÀ  é]  éÁ  é^  éÂ  é_  éÃ  é`  éÄ  éa  éÅ  éb  éÆ  ç     ƒ@ç     8†@ç      ƒ@ç     @†@TFN)Zpacked_int32ÚextendZpacked_int64Zpacked_uint32Zpacked_uint64Zpacked_sint32Zpacked_sint64Zpacked_fixed32Zpacked_fixed64Zpacked_sfixed32Zpacked_sfixed64Zpacked_floatZpacked_doubleZpacked_boolZpacked_enumr   rš   r{   r   r   r   r   ÚSetAllPackedFields“  s     
ÿrö   c                 C   s*  | j }t}||j  ddg¡ ||j  ddg¡ ||j  ddg¡ ||j  ddg¡ ||j  d	d
g¡ ||j  ddg¡ ||j	  ddg¡ ||j
  ddg¡ ||j  ddg¡ ||j  ddg¡ ||j  ddg¡ ||j  ddg¡ ||j  ddg¡ ||j  tjtjg¡ dS )z}Sets every extension in the message to a unique value.

  Args:
    message: A unittest_pb2.TestPackedExtensions instance.
  r[   rß   r\   rà   rá   râ   rã   rä   rå   ræ   rç   rè   ré   rê   rë   rì   rí   rî   rï   rð   rñ   rò   ró   rô   TFN)rº   r   Zpacked_int32_extensionrõ   Zpacked_int64_extensionZpacked_uint32_extensionZpacked_uint64_extensionZpacked_sint32_extensionZpacked_sint64_extensionZpacked_fixed32_extensionZpacked_fixed64_extensionZpacked_sfixed32_extensionZpacked_sfixed64_extensionZpacked_float_extensionZpacked_double_extensionZpacked_bool_extensionZpacked_enum_extensionrš   r{   )r   r»   r¼   r   r   r   ÚSetAllPackedExtensionsª  s$    ÿr÷   c                 C   sè   | j  ddg¡ | j ddg¡ | j ddg¡ | j ddg¡ | j d	d
g¡ | j ddg¡ | j ddg¡ | j ddg¡ | j	 ddg¡ | j
 ddg¡ | j ddg¡ | j ddg¡ | j ddg¡ | j tjtjg¡ dS )zvSets every field in the message to a unique value.

  Args:
    message: A unittest_pb2.TestUnpackedTypes instance.
  r[   rß   r\   rà   rá   râ   rã   rä   rå   ræ   rç   rè   ré   rê   rë   rì   rí   rî   rï   rð   rñ   rò   ró   rô   TFN)Zunpacked_int32rõ   Zunpacked_int64Zunpacked_uint32Zunpacked_uint64Zunpacked_sint32Zunpacked_sint64Zunpacked_fixed32Zunpacked_fixed64Zunpacked_sfixed32Zunpacked_sfixed64Zunpacked_floatZunpacked_doubleZunpacked_boolZunpacked_enumr   rš   r{   r   r   r   r   ÚSetAllUnpackedFieldsÄ  s     
ÿrø   c                   @   sZ  e Zd ZdZdUd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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/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dS )VÚNonStandardIntegeraÝ  An integer object that does not subclass int.

  This is used to verify that both C++ and regular proto systems can handle
  integer others than int and long and that they handle them in predictable
  ways.

  NonStandardInteger is the minimal legal specification for a custom Integral.
  As such, it does not support 0 < x < 5 and it is not hashable.

  Note: This is added here instead of relying on numpy or a similar library
  with custom integers to limit dependencies.
  Nc                 C   s0   t |tjƒst‚t |tƒr |j}|| _|| _d S ©N)Ú
isinstanceÚnumbersÚIntegralÚAssertionErrorrù   ÚvalÚerror_string_on_conversion)Úselfrÿ   r   r   r   r   Ú__init__é  s
    
zNonStandardInteger.__init__c                 C   s   | j rt| j ƒ‚t| jƒS rú   )r   rØ   Úlongrÿ   ©r  r   r   r   Ú__long__ð  s    
zNonStandardInteger.__long__c                 C   s   t t | j¡ƒS rú   )rù   ÚoperatorÚabsrÿ   r  r   r   r   Ú__abs__õ  s    zNonStandardInteger.__abs__c                 C   s   t t | j|¡ƒS rú   ©rù   r  r’   rÿ   ©r  Úyr   r   r   Ú__add__ø  s    zNonStandardInteger.__add__c                 C   s   t t | j|¡ƒS rú   ©rù   r  Údivrÿ   r
  r   r   r   Ú__div__û  s    zNonStandardInteger.__div__c                 C   s   t  | j|¡S rú   )r  Úeqrÿ   r
  r   r   r   Ú__eq__þ  s    zNonStandardInteger.__eq__c                 C   s   t t | j|¡ƒS rú   ©rù   r  Úfloordivrÿ   r
  r   r   r   Ú__floordiv__  s    zNonStandardInteger.__floordiv__c                 C   s   t t | j|¡ƒS rú   ©rù   r  Útruedivrÿ   r
  r   r   r   Ú__truediv__  s    zNonStandardInteger.__truediv__c                 C   s   t t | j¡ƒS rú   )rù   r  Úinvertrÿ   r  r   r   r   Ú
__invert__  s    zNonStandardInteger.__invert__c                 C   s   t t | j|¡ƒS rú   ©rù   r  Úmodrÿ   r
  r   r   r   Ú__mod__
  s    zNonStandardInteger.__mod__c                 C   s   t t | j|¡ƒS rú   ©rù   r  Úmulrÿ   r
  r   r   r   Ú__mul__  s    zNonStandardInteger.__mul__c                 C   s   t t | j¡ƒS rú   )rù   r  Únegrÿ   r  r   r   r   Ú__neg__  s    zNonStandardInteger.__neg__c                 C   s   t t | j¡ƒS rú   )rù   r  Úposrÿ   r  r   r   r   Ú__pos__  s    zNonStandardInteger.__pos__c                 C   s   t t | j|¡ƒS rú   ©rù   r  Úpowrÿ   r
  r   r   r   Ú__pow__  s    zNonStandardInteger.__pow__c                 C   s
   t | jƒS rú   )Úintrÿ   r  r   r   r   Ú	__trunc__  s    zNonStandardInteger.__trunc__c                 C   s   t t || j¡ƒS rú   r	  r
  r   r   r   Ú__radd__  s    zNonStandardInteger.__radd__c                 C   s   t t || j¡ƒS rú   r  r
  r   r   r   Ú__rdiv__  s    zNonStandardInteger.__rdiv__c                 C   s   t t || j¡ƒS rú   r  r
  r   r   r   Ú__rmod__"  s    zNonStandardInteger.__rmod__c                 C   s   t t || j¡ƒS rú   r  r
  r   r   r   Ú__rmul__%  s    zNonStandardInteger.__rmul__c                 C   s   t t || j¡ƒS rú   r$  r
  r   r   r   Ú__rpow__(  s    zNonStandardInteger.__rpow__c                 C   s   t t || j¡ƒS rú   r  r
  r   r   r   Ú__rfloordiv__+  s    z NonStandardInteger.__rfloordiv__c                 C   s   t t || j¡ƒS rú   r  r
  r   r   r   Ú__rtruediv__.  s    zNonStandardInteger.__rtruediv__c                 C   s   t t | j|¡ƒS rú   ©rù   r  Úlshiftrÿ   r
  r   r   r   Ú
__lshift__1  s    zNonStandardInteger.__lshift__c                 C   s   t t | j|¡ƒS rú   ©rù   r  Úrshiftrÿ   r
  r   r   r   Ú
__rshift__4  s    zNonStandardInteger.__rshift__c                 C   s   t t || j¡ƒS rú   r0  r
  r   r   r   Ú__rlshift__7  s    zNonStandardInteger.__rlshift__c                 C   s   t t || j¡ƒS rú   r3  r
  r   r   r   Ú__rrshift__:  s    zNonStandardInteger.__rrshift__c                 C   s   t |tƒr|j}t | j|¡S rú   )rû   rù   rÿ   r  Úler
  r   r   r   Ú__le__=  s    
zNonStandardInteger.__le__c                 C   s   t |tƒr|j}t | j|¡S rú   )rû   rù   rÿ   r  Últr
  r   r   r   Ú__lt__B  s    
zNonStandardInteger.__lt__c                 C   s   t t | j|¡ƒS rú   ©rù   r  Úand_rÿ   r
  r   r   r   Ú__and__G  s    zNonStandardInteger.__and__c                 C   s   t t | j|¡ƒS rú   ©rù   r  Úor_rÿ   r
  r   r   r   Ú__or__J  s    zNonStandardInteger.__or__c                 C   s   t t | j|¡ƒS rú   ©rù   r  Úxorrÿ   r
  r   r   r   Ú__xor__M  s    zNonStandardInteger.__xor__c                 C   s   t t || j¡ƒS rú   r<  r
  r   r   r   Ú__rand__P  s    zNonStandardInteger.__rand__c                 C   s   t t || j¡ƒS rú   r?  r
  r   r   r   Ú__ror__S  s    zNonStandardInteger.__ror__c                 C   s   t t || j¡ƒS rú   rB  r
  r   r   r   Ú__rxor__V  s    zNonStandardInteger.__rxor__c                 C   s   | j S rú   ©rÿ   r  r   r   r   Ú__bool__Y  s    zNonStandardInteger.__bool__c                 C   s   | j S rú   rH  r  r   r   r   Ú__nonzero__\  s    zNonStandardInteger.__nonzero__c                 C   s   | S rú   r   r  r   r   r   Ú__ceil___  s    zNonStandardInteger.__ceil__c                 C   s   | S rú   r   r  r   r   r   Ú	__floor__b  s    zNonStandardInteger.__floor__c                 C   s   | j rt| j ƒ‚t| jƒS rú   )r   rØ   r'  rÿ   r  r   r   r   Ú__int__e  s    
zNonStandardInteger.__int__c                 C   s   | S rú   r   r  r   r   r   Ú	__round__j  s    zNonStandardInteger.__round__c                 C   s
   d| j  S )NzNonStandardInteger(%s)rH  r  r   r   r   Ú__repr__m  s    zNonStandardInteger.__repr__)N)-Ú__name__Ú
__module__Ú__qualname__Ú__doc__r  r  r  r  r  r  r  r  r  r  r  r!  r#  r&  r(  r)  r*  r+  r,  r-  r.  r/  r2  r5  r6  r7  r9  r;  r>  rA  rD  rE  rF  rG  rI  rJ  rK  rL  rM  rN  rO  r   r   r   r   rù   Û  sT   
rù   )rS  Ú
__author__rü   r  Úos.pathrÔ   Zgoogle.protobufr   r   r  Ú	NameErrorr'  r   r´   r¹   r½   rÇ   rÌ   rÑ   rÛ   rÞ   rö   r÷   rø   rý   rù   r   r   r   r   Ú<module>   s4   
    S!