
    E#iN                     \   S SK r S SKrS SKrS SKJr  S SKJrJrJr  SSK	J
r
JrJrJrJrJrJrJrJr  SSKJrJrJr  SSKJrJrJr  SS	KJrJrJrJrJ r J!r!J"r"  SS
K#J$r$J%r%J&r&  SSK'J(r(   " S S\\ RR                  S9r* " S S\*5      r+ " S S\*5      r, " S S\,5      r- " S S\-5      r. " S S\.5      r/ " S S\-5      r0 " S S\05      r1\1" SSS9r2 " S  S!\15      r3 " S" S#\05      r4 " S$ S%\45      r5 " S& S'\05      r6 " S( S)\65      r7 " S* S+\75      r8 " S, S-\65      r9 " S. S/\95      r: " S0 S1\-5      r; " S2 S3\;5      r< " S4 S5\-5      r= " S6 S7\=5      r> " S8 S9\*5      r? " S: S;\?5      r@ " S< S=\*5      rA " S> S?\A5      rB " S@ SA\*5      rC " SB SC\C5      rD " SD SE\C5      rE " SF SG\C5      rFg)H    N)
accumulate)AnyOptionalType   )	int_to_big_endian
is_address
is_booleanis_bytes
is_integeris_list_like	is_numberis_textto_canonical_address   )	BaseCoderparse_tuple_type_strparse_type_str)EncodingTypeErrorIllegalValueValueOutOfBounds)TENabi_decimal_contextceil32compute_signed_fixed_boundscompute_signed_integer_boundscompute_unsigned_fixed_boundscompute_unsigned_integer_bounds)fpadzpad
zpad_right)abbrc            
           \ rS rSrSr\R                  S\S\4S j5       r	\R                  S\SS4S j5       r
\\S4S\S\\   S	\\   SS4S
 jj5       rS\S\4S jrSrg)BaseEncoder6   z
Base class for all encoder classes.  Subclass this if you want to define a
custom encoder class.  Subclasses must also implement
:any:`BaseCoder.from_type_str`.
valuereturnc                     g)z
Encodes the given value as a sequence of bytes.  Should raise
:any:`exceptions.EncodingError` if ``value`` cannot be encoded.
N selfr&   s     h/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/static_dependencies/ethereum/abi/encoding.pyencodeBaseEncoder.encode=   s     	    Nc                     g)z
Checks whether or not the given value can be encoded by this encoder.
If the given value cannot be encoded, must raise
:any:`exceptions.EncodingError`.
Nr)   r*   s     r,   validate_valueBaseEncoder.validate_valueE   s     	r/   excmsgc           	          U" SR                  [        U5      [        U5      U R                  Uc  SS95      eSU-   S95      e)zN
Throws a standard exception for when a value is not encodable by an
encoder.
z;Value `{rep}` of type {typ} cannot be encoded by {cls}{msg} z: )reptypclsr4   )formatr"   type__name__)r9   r&   r3   r4   s       r,   invalidate_valueBaseEncoder.invalidate_valueN   s_     IPPKKLL+B	 Q 
 	

 -13J	 Q 
 	
r/   c                 $    U R                  U5      $ N)r-   r*   s     r,   __call__BaseEncoder.__call__b   s    {{5!!r/   r)   )r<   
__module____qualname____firstlineno____doc__abcabstractmethodr   bytesr-   r1   classmethodr   r   	Exceptionr   strr=   rA   __static_attributes__r)   r/   r,   r$   r$   6   s     	C E   	C D     1!	

 )_
 c]	

 

 
&"c "e "r/   r$   )	metaclassc                   T   ^  \ rS rSrSrU 4S jrU 4S jrS rS r\	S 5       r
SrU =r$ )	TupleEncoderf   Nc                 h   > [         TU ]  " S0 UD6  [        S U R                   5       5      U l        g )Nc              3   <   #    U  H  n[        US S5      v   M     g7f)
is_dynamicFN)getattr).0es     r,   	<genexpr>(TupleEncoder.__init__.<locals>.<genexpr>l   s     U}!gau==}s   r)   )super__init__anyencodersrT   r+   kwargs	__class__s     r,   r[   TupleEncoder.__init__i   s)    "6"Ut}}UUr/   c                 R   > [         TU ]  5         U R                  c  [        S5      eg )Nz`encoders` may not be none)rZ   validater]   
ValueErrorr+   r`   s    r,   rc   TupleEncoder.validaten   s)    == 9:: !r/   c           
         [        U5      (       d  U R                  USS9  [        U5      [        U R                  5      :w  aA  U R                  U[        SR                  [        U5      [        U R                  5      5      S9  [        XR                  5       H  u  p# UR                  U5        M     g ! [         a    U" U5         M1  f = f)Nz/must be list-like object such as array or tupler4   (value has {} items when {} were expectedr3   r4   )	r   r=   lenr]   r   r:   zipr1   AttributeError)r+   r&   itemencoders       r,   r1   TupleEncoder.validate_valuet   s    E""!!E " 
 u:T]]++!!$>EEJ& "  !6MD&&t, 7 " s   B55C
Cc                    ^	 U R                  U5        / n/ n[        XR                  5       Hi  u  pE[        USS5      (       a*  UR	                  S 5        UR	                  U" U5      5        MA  UR	                  U" U5      5        UR	                  S5        Mk     [        S U 5       5      m	S[        [        [        [        US S 5      5      5      -   n[        U	4S j[        X&5       5       5      nSR                  U[        U5      -   5      nU$ )NrT   Fr/   c              3   @   #    U  H  oc  SO
[        U5      v   M     g 7f)N    )rk   )rV   rn   s     r,   rX   &TupleEncoder.encode.<locals>.<genexpr>   s     X"#d);s   r   c              3   N   >#    U  H  u  pUc  [        TU-   5      OUv   M     g 7fr@   encode_uint_256)rV   chunkoffsethead_lengths      r,   rX   rt      s-      
!C 6;]OK&01M!Cs   "%)r1   rl   r]   rU   appendsumtupler   maprk   join)
r+   valuesraw_head_chunkstail_chunksr&   ro   tail_offsetshead_chunksencoded_valuer|   s
            @r,   r-   TupleEncoder.encode   s    F#!&--8NEwe44&&t,""75>2&&wu~6""3' 9 XXXeJs3CR8H/I$JKK 
!$_!C
 

 u[/A!ABr/   c                 N   ^ [        U4S jUR                   5       5      nU " US9$ )Nc              3   b   >#    U  H$  nTR                  UR                  5       5      v   M&     g 7fr@   )get_encoderto_type_str)rV   cregistrys     r,   rX   -TupleEncoder.from_type_str.<locals>.<genexpr>   s)      
;NaH  11;Ns   ,/)r]   )r   
components)r9   abi_typer   r]   s     ` r,   from_type_strTupleEncoder.from_type_str   s-     
;C;N;N
 
 H%%r/   rT   )r<   rC   rD   rE   r]   r[   rc   r1   r-   r   r   rM   __classcell__r`   s   @r,   rP   rP   f   s1    HV
;.0 & &r/   rP   c                   H   ^  \ rS rSrSrSrSrSrSrU 4S jr	S r
S rSrU =r$ )FixedSizeEncoder   Nc                   > [         TU ]  5         U R                  c  [        S5      eU R                  c  [        S5      eU R
                  c  [        S5      eU R                  c  [        S5      eU R                  S-  S:w  a$  [        SR                  U R                  5      5      eU R                  U R                  S-  :  a  [        S5      eg )	Nz `value_bit_size` may not be nonez `data_byte_size` may not be nonez`encode_fn` may not be nonez`is_big_endian` may not be none   r   z5Invalid value bit size: {0}.  Must be a multiple of 8z!Value byte size exceeds data size)rZ   rc   value_bit_sizerd   data_byte_size	encode_fnis_big_endianr:   re   s    r,   rc   FixedSizeEncoder.validate   s    &?@@&?@@>>!:;;%>??"a'GNN''  !4!4q!88@AA 9r/   c                     [        S5      e)Nz!Must be implemented by subclasses)NotImplementedErrorr*   s     r,   r1   FixedSizeEncoder.validate_value   s    !"EFFr/   c                     U R                  U5        U R                  U5      nU R                  (       a  [        X R                  5      nU$ [        X R                  5      nU$ r@   )r1   r   r   r    r   r!   r+   r&   base_encoded_valuepadded_encoded_values       r,   r-   FixedSizeEncoder.encode   s\    E"!^^E2#'(:<O<O#P  $# $..@BUBU#V ##r/   r)   )r<   rC   rD   rE   r   r   r   type_check_fnr   rc   r1   r-   rM   r   r   s   @r,   r   r      s2    NNIMMB,G	$ 	$r/   r   c                       \ rS rSrSrSrg)Fixed32ByteSizeEncoder   rs   r)   Nr<   rC   rD   rE   r   rM   r)   r/   r,   r   r          Nr/   r   c                   X    \ rS rSrSrSr\S 5       r\S 5       r\	" S5      S 5       r
Srg	)
BooleanEncoder   r   Tc                 H    [        U5      (       d  U R                  U5        g g r@   )r
   r=   r9   r&   s     r,   r1   BooleanEncoder.validate_value        %    ' !r/   c                 0    USL a  gUSL a  g[        S5      e)NT   F    	Invariant)rd   r   s     r,   r   BooleanEncoder.encode_fn   s!    D=e^[))r/   boolc                     U " 5       $ r@   r)   r9   r   r   s      r,   r   BooleanEncoder.from_type_str   	    ur/   r)   N)r<   rC   rD   rE   r   r   rJ   r1   r   r   r   rM   r)   r/   r,   r   r      sK    NM( ( * * F r/   r   c                       \ rS rSrSrSrg)PackedBooleanEncoder   r   r)   Nr   r)   r/   r,   r   r      s    Nr/   r   c                   >   ^  \ rS rSrSrSrSrSrU 4S jrS r	Sr
U =r$ )NumberEncoder   TNc                    > [         TU ]  5         U R                  c  [        S5      eU R                  c  [        S5      eg )Nz`bounds_fn` cannot be nullz`type_check_fn` cannot be null)rZ   rc   	bounds_fnrd   r   re   s    r,   rc   NumberEncoder.validate   sA    >>!9::%=>> &r/   c           	         U R                  U5      (       d  U R                  U5        U R                  S L=(       a    U R                  U5      nU(       a  U R                  U[        S9  U R	                  U R
                  5      u  p4X:  d  X:  a1  U R                  U[        SR                  U R
                  UU5      S9  g g )N)r3   z@Cannot be encoded in {} bits.  Must be bounded between [{}, {}].rj   )r   r=   illegal_value_fnr   r   r   r   r:   )r+   r&   illegal_valuelower_boundupper_bounds        r,   r1   NumberEncoder.validate_value  s    !!%((!!%(--T9 
d>S>S?
 !!%\!:#'>>$2E2E#F %"5!!$((.++##) "  #6r/   r)   )r<   rC   rD   rE   r   r   r   r   rc   r1   rM   r   r   s   @r,   r   r      s'    MIM? r/   r   c                   `    \ rS rSr\" \5      r\" \5      r\" \	5      r
\" S5      S 5       rSrg)UnsignedIntegerEncoderi  uintc                 "    U " UR                   S9$ Nr   subr   s      r,   r   $UnsignedIntegerEncoder.from_type_str$      (,,//r/   r)   N)r<   rC   rD   rE   staticmethodr   r   r   r   r   r   r   r   rM   r)   r/   r,   r   r     s9    ./I<=I ,MF0 0r/   r      rs   r   r   c                   0    \ rS rSr\" S5      S 5       rSrg)PackedUnsignedIntegerEncoderi,  r   c                 >    U " UR                   UR                   S-  S9$ Nr   r   r   r   s      r,   r   *PackedUnsignedIntegerEncoder.from_type_str-  "    #<<#<<1,
 	
r/   r)   Nr<   rC   rD   rE   r   r   rM   r)   r/   r,   r   r   ,  s    F
 
r/   r   c                   \    \ rS rSr\" \5      r\" \5      rS r	S r
\" S5      S 5       rSrg)SignedIntegerEncoderi5  c                 8    [        USU R                  -  -  5      $ Nr   )r   r   r*   s     r,   r   SignedIntegerEncoder.encode_fn9  s     !T-@-@*@!ABBr/   c                     U R                  U5        U R                  U5      nUS:  a  [        X R                  5      nU$ [	        X R                  5      nU$ Nr   r1   r   r    r   r   r   s       r,   r-   SignedIntegerEncoder.encode<  Z    E"!^^E2A:#'(:<O<O#P  $# $((:<O<O#P ##r/   intc                 "    U " UR                   S9$ r   r   r   s      r,   r   "SignedIntegerEncoder.from_type_strG  r   r/   r)   N)r<   rC   rD   rE   r   r   r   r   r   r   r-   r   r   rM   r)   r/   r,   r   r   5  s;    :;I ,MC	$ E0 0r/   r   c                   0    \ rS rSr\" S5      S 5       rSrg)PackedSignedIntegerEncoderiL  r   c                 >    U " UR                   UR                   S-  S9$ r   r   r   s      r,   r   (PackedSignedIntegerEncoder.from_type_strM  r   r/   r)   Nr   r)   r/   r,   r   r   L  s    E
 
r/   r   c                   X   ^  \ rS rSrSr\S 5       r\S 5       rU 4S jrU 4S jr	Sr
U =r$ )BaseFixedEncoderiU  Nc                 P    [        U 5      =(       a    [        U [        5      (       + $ r@   )r   
isinstancefloatr&   s    r,   r   BaseFixedEncoder.type_check_fnX  s    @
5%(@$@@r/   c                     [        U [        R                  5      (       a'  U R                  5       =(       d    U R	                  5       $ g)NF)r   decimalDecimalis_nanis_infiniter   s    r,   r   !BaseFixedEncoder.illegal_value_fn\  s0    eW__--<<>8U%6%6%88r/   c           	      8  > [         TU ]  U5        [        R                  " [        5         U[
        U R                  * -  -  nS S S 5        WS:  a9  U R                  U[        SR                  [        U5      U R                  5      S9  g g ! , (       d  f       NN= f)Nr   z5residue {} outside allowed fractional precision of {}rj   )rZ   r1   r   localcontextr   r   frac_placesr=   r   r:   repr)r+   r&   residuer`   s      r,   r1   BaseFixedEncoder.validate_valuec  s    u%!!"56sT%5%5$556G 7 Q;!! KRRM$$ "   76s   B
Bc                    > [         TU ]  5         U R                  c  [        S5      eU R                  S::  d  U R                  S:  a  [        S5      eg )Nzmust specify `frac_places`r   P   z&`frac_places` must be in range (0, 80])rZ   rc   r  rd   re   s    r,   rc   BaseFixedEncoder.validates  sR    #9::q D$4$4r$9EFF %:r/   r)   )r<   rC   rD   rE   r  r   r   r   r1   rc   rM   r   r   s   @r,   r   r   U  sA    KA A   G Gr/   r   c                   <    \ rS rSrS rS r\" S5      S 5       rSrg)UnsignedFixedEncoderi}  c                 B    [        U R                  U R                  5      $ r@   )r   r   r  r+   r   s     r,   r   UnsignedFixedEncoder.bounds_fn~  s    ,T-@-@$BRBRSSr/   c                     [         R                  " [        5         U[        U R                  -  -  n[        U5      nS S S 5        [        W5      $ ! , (       d  f       N= fr@   )r   r  r   r   r  r   r   )r+   r&   scaled_valueinteger_values       r,   r   UnsignedFixedEncoder.encode_fn  sK    !!"56 3(8(8#88L-M 7 !//	 76s   "A
Aufixedc                 ,    UR                   u  p4U " UUS9$ N)r   r  r   r9   r   r   r   r  s        r,   r   "UnsignedFixedEncoder.from_type_str  !    &.ll#)#
 	
r/   r)   N)	r<   rC   rD   rE   r   r   r   r   rM   r)   r/   r,   r  r  }  s&    T0 H
 
r/   r  c                   0    \ rS rSr\" S5      S 5       rSrg)PackedUnsignedFixedEncoderi  r  c                 4    UR                   u  p4U " UUS-  US9$ Nr   )r   r   r  r   r  s        r,   r   (PackedUnsignedFixedEncoder.from_type_str  )    &.ll#))Q.#
 	
r/   r)   Nr   r)   r/   r,   r  r    s    H
 
r/   r  c                   B    \ rS rSrS rS rS r\" S5      S 5       rSr	g)	SignedFixedEncoderi  c                 B    [        U R                  U R                  5      $ r@   )r   r   r  r  s     r,   r   SignedFixedEncoder.bounds_fn  s    *4+>+>@P@PQQr/   c                     [         R                  " [        5         U[        U R                  -  -  n[        U5      nS S S 5        WSU R                  -  -  n[        U5      $ ! , (       d  f       N+= fr   )r   r  r   r   r  r   r   r   )r+   r&   r  r  unsigned_integer_values        r,   r   SignedFixedEncoder.encode_fn  sb    !!"56 3(8(8#88L-M 7 "/!T5H5H2H!I !788 76s   "A""
A0c                     U R                  U5        U R                  U5      nUS:  a  [        X R                  5      nU$ [	        X R                  5      nU$ r   r   r   s       r,   r-   SignedFixedEncoder.encode  r   r/   fixedc                 ,    UR                   u  p4U " UUS9$ r  r   r  s        r,   r    SignedFixedEncoder.from_type_str  r  r/   r)   N)
r<   rC   rD   rE   r   r   r-   r   r   rM   r)   r/   r,   r   r     s+    R9	$ G
 
r/   r   c                   0    \ rS rSr\" S5      S 5       rSrg)PackedSignedFixedEncoderi  r(  c                 4    UR                   u  p4U " UUS-  US9$ r  r   r  s        r,   r   &PackedSignedFixedEncoder.from_type_str  r  r/   r)   Nr   r)   r/   r,   r,  r,    s    G
 
r/   r,  c                   l   ^  \ rS rSrSr\" \5      rSr\	S 5       r
U 4S jr\" S5      S 5       rSrU =r$ )	AddressEncoderi     Tc                 H    [        U5      (       d  U R                  U5        g g r@   )r	   r=   r   s     r,   r1   AddressEncoder.validate_value  r   r/   c                 X   > [         TU ]  5         U R                  S:w  a  [        S5      eg )Nr1  z$Addresses must be 160 bits in length)rZ   rc   r   rd   re   s    r,   rc   AddressEncoder.validate  s-    &(CDD )r/   addressc                     U " 5       $ r@   r)   r   s      r,   r   AddressEncoder.from_type_str  r   r/   r)   )r<   rC   rD   rE   r   r   r   r   r   rJ   r1   rc   r   r   rM   r   r   s   @r,   r0  r0    sI    N12IM( (E I r/   r0  c                       \ rS rSrSrSrg)PackedAddressEncoderi     r)   Nr   r)   r/   r,   r:  r:    r   r/   r:  c                   J    \ rS rSrSrS r\S 5       r\" S5      S 5       r	Sr
g)	BytesEncoderi  Fc                     [        U5      (       d  U R                  U5        U R                  S-  n[        U5      U:  a%  U R                  U[        SR                  U5      S9  g g )Nr   z,exceeds total byte size for bytes{} encodingrj   )r   r=   r   rk   r   r:   )r+   r&   	byte_sizes      r,   r1   BytesEncoder.validate_value  sa    !!%(''1,	u:	!!!$BII)T "  "r/   c                     U $ r@   r)   r   s    r,   r   BytesEncoder.encode_fn  s    r/   rI   c                 (    U " UR                   S-  S9$ )Nr   r   r   r   s      r,   r   BytesEncoder.from_type_str  s    (,,"233r/   r)   N)r<   rC   rD   rE   r   r1   r   r   r   r   rM   r)   r/   r,   r=  r=    s9    M
   G4 4r/   r=  c                   0    \ rS rSr\" S5      S 5       rSrg)PackedBytesEncoderi  rI   c                 >    U " UR                   S-  UR                   S9$ r   r   r   s      r,   r    PackedBytesEncoder.from_type_str  s"    #<<!+#<<
 	
r/   r)   Nr   r)   r/   r,   rF  rF    s    G
 
r/   rF  c                   T    \ rS rSrSr\S 5       r\S 5       r\" S5      S 5       r	Sr
g)	ByteStringEncoderi  Tc                 H    [        U5      (       d  U R                  U5        g g r@   )r   r=   r   s     r,   r1    ByteStringEncoder.validate_value	  s      ' r/   c                     U R                  U5        U(       d  SnO[        U[        [        U5      5      5      n[	        [        U5      5      nX2-   nU$ )N                                    )r1   r!   r   rk   ry   )r9   r&   padded_valueencoded_sizer   s        r,   r-   ByteStringEncoder.encode  sI    5!'L%eVCJ-?@L&s5z2$3r/   rI   c                     U " 5       $ r@   r)   r   s      r,   r   ByteStringEncoder.from_type_str  r   r/   r)   Nr<   rC   rD   rE   rT   rJ   r1   r-   r   r   rM   r)   r/   r,   rJ  rJ    sF    J( (   G r/   rJ  c                   (    \ rS rSrSr\S 5       rSrg)PackedByteStringEncoderi!  Fc                 (    U R                  U5        U$ r@   )r1   r   s     r,   r-   PackedByteStringEncoder.encode$  s    5!r/   r)   Nr<   rC   rD   rE   rT   rJ   r-   rM   r)   r/   r,   rV  rV  !  s    J r/   rV  c                   T    \ rS rSrSr\S 5       r\S 5       r\" S5      S 5       r	Sr
g)	TextStringEncoderi*  Tc                 H    [        U5      (       d  U R                  U5        g g r@   )r   r=   r   s     r,   r1    TextStringEncoder.validate_value-  s    u~~  ' r/   c                     U R                  U5        [        R                  " US5      nU(       d  SnO[        U[	        [        U5      5      5      n[        [        U5      5      nXC-   nU$ )Nutf8rN  )r1   codecsr-   r!   r   rk   ry   )r9   r&   value_as_bytesrO  rP  r   s         r,   r-   TextStringEncoder.encode2  s[    5!uf5'L%nfS=P6QRL&s>':;$3r/   stringc                     U " 5       $ r@   r)   r   s      r,   r   TextStringEncoder.from_type_strB  r   r/   r)   NrT  r)   r/   r,   r[  r[  *  sF    J( (   H r/   r[  c                   (    \ rS rSrSr\S 5       rSrg)PackedTextStringEncoderiG  Fc                 R    U R                  U5        [        R                  " US5      $ )Nr_  )r1   r`  r-   r   s     r,   r-   PackedTextStringEncoder.encodeJ  s!    5!}}UF++r/   r)   NrY  r)   r/   r,   rg  rg  G  s    J, ,r/   rg  c                   P   ^  \ rS rSrSrU 4S jrS rS r\" SS9S 5       r	S	r
U =r$ )
BaseArrayEncoderiP  Nc                 R   > [         TU ]  5         U R                  c  [        S5      eg )Nz`item_encoder` may not be none)rZ   rc   item_encoderrd   re   s    r,   rc   BaseArrayEncoder.validateS  s+    $=>> %r/   c                     [        U5      (       d  U R                  USS9  U H  nU R                  R                  U5        M      g )Nz(must be list-like such as array or tuplerh   )r   r=   rm  r1   )r+   r&   rn   s      r,   r1   BaseArrayEncoder.validate_valueY  sF    E""!!> " 
 D,,T2 r/   c                 p  ^^ U R                  U5        U R                  m[        U4S jU 5       5      n[        TSS5      nU(       d  SR	                  U5      $ S[        U5      -  mS[        [        [        [
        US S 5      5      5      -   n[        U4S jU 5       5      nSR	                  XR-   5      $ )	Nc              3   4   >#    U  H  nT" U5      v   M     g 7fr@   r)   )rV   irm  s     r,   rX   3BaseArrayEncoder.encode_elements.<locals>.<genexpr>g  s     ;ULOOUs   rT   Fr/   rs   ru   rv   c              3   @   >#    U  H  n[        TU-   5      v   M     g 7fr@   rx   )rV   r{   r|   s     r,   rX   rt  o  s!      
@LfOK&011s   )r1   rm  r   rU   r   rk   r   r   )r+   r&   r   items_are_dynamicr   r   r|   rm  s         @@r,   encode_elements BaseArrayEncoder.encode_elementsc  s    E"((;U;;#L,F 88K((3u:oeJs3CR8H/I$JKK 
@L
 
 xx122r/   Twith_arrlistc                     UR                  UR                  R                  5       5      nUR                  S   n[	        U5      S:X  a  [        US   US9$ [        US9$ Nrv   r   r   )
array_sizerm  )rm  )r   	item_typer   arrlistrk   SizedArrayEncoderDynamicArrayEncoderr9   r   r   rm  
array_specs        r,   r   BaseArrayEncoder.from_type_strt  sa    ++H,>,>,J,J,LM%%b)
z?a$%a=)  'LAAr/   r)   )r<   rC   rD   rE   rm  rc   r1   rw  r   r   rM   r   r   s   @r,   rk  rk  P  s2    L?33" &B 'Br/   rk  c                   J   ^  \ rS rSrSrU 4S jrS r\" SS9S 5       rSr	U =r
$ )	PackedArrayEncoderi  Nc           	         > [         TU ]  U5        U R                  bS  [        U5      U R                  :w  a9  U R	                  U[
        SR                  [        U5      U R                  5      S9  g g g Nri   rj   )rZ   r1   r}  rk   r=   r   r:   r+   r&   r`   s     r,   r1   !PackedArrayEncoder.validate_value  sg    u%??&3u:+H!!$>EEJOO "  ,I&r/   c                 (    U R                  U5      nU$ r@   rw  r+   r&   encoded_elementss      r,   r-   PackedArrayEncoder.encode      //6r/   Try  c                     UR                  UR                  R                  5       5      nUR                  S   n[	        U5      S:X  a
  U " US   US9$ U " US9$ r|  )r   r~  r   r  rk   r  s        r,   r    PackedArrayEncoder.from_type_str  sa    ++H,>,>,J,J,LM%%b)
z?a%a=) 
 L11r/   r)   )r<   rC   rD   rE   r}  r1   r-   r   r   rM   r   r   s   @r,   r  r    s+    J 
 &
2 '
2r/   r  c                   J   ^  \ rS rSrSrU 4S jrU 4S jrU 4S jrS rSr	U =r
$ )r  i  Nc                 \   > [         TU ]  " S0 UD6  U R                  R                  U l        g )Nr)   )rZ   r[   rm  rT   r^   s     r,   r[   SizedArrayEncoder.__init__  s&    "6"++66r/   c                 R   > [         TU ]  5         U R                  c  [        S5      eg )Nz`array_size` may not be none)rZ   rc   r}  rd   re   s    r,   rc   SizedArrayEncoder.validate  s)    ??";<< #r/   c           	         > [         TU ]  U5        [        U5      U R                  :w  a9  U R	                  U[
        SR                  [        U5      U R                  5      S9  g g r  )rZ   r1   rk   r}  r=   r   r:   r  s     r,   r1    SizedArrayEncoder.validate_value  sZ    u%u:(!!$>EEJOO "  )r/   c                 (    U R                  U5      nU$ r@   r  r  s      r,   r-   SizedArrayEncoder.encode  r  r/   r   )r<   rC   rD   rE   r}  r[   rc   r1   r-   rM   r   r   s   @r,   r  r    s!    J7
=   r/   r  c                       \ rS rSrSrS rSrg)r  i  Tc                 X    [        [        U5      5      nU R                  U5      nX#-   nU$ r@   )ry   rk   rw  )r+   r&   rP  r  r   s        r,   r-   DynamicArrayEncoder.encode  s/    &s5z2//6$7r/   r)   N)r<   rC   rD   rE   rT   r-   rM   r)   r/   r,   r  r    s    Jr/   r  )GrG   r`  r   	itertoolsr   typingr   r   r   utilsr   r	   r
   r   r   r   r   r   r   baser   r   r   
exceptionsr   r   r   utils.numericr   r   r   r   r   r   r   utils.paddingr   r    r!   utils.stringr"   ABCMetar$   rP   r   r   r   r   r   r   ry   r   r   r   r   r  r  r   r,  r0  r:  r=  rF  rJ  rV  r[  rg  rk  r  r  r  r)   r/   r,   <module>r     s   
   
 
 
 
 
   

-")s{{ -"`C&; C&L)${ )$X- + .> %* %P0] 0 )BO
#9 
0= 0.
!5 
%G} %GP
+ 
*	
!5 	

) 
D	
1 	
+ *> 4) 40
 
 6/  :,/ ,1B{ 1Bh 2)  2F (  B* r/   