
    E#iE                    \   S SK Jr  S SKJr  S SKJrJrJr  SSKJ	r
  SSKJ	r  SSKJ	r  SSKJrJrJr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  SS	KJ r   SS
K!J"r"  SSK#J$r$  SSK%J&r&  SSK'J(r(  SSK)J*r*  SSK+J,r,  SSK-J.r.  SSK/J0r0  SSK1J2r2  SSK3J4r4  SSK5J6r6  SSK7J8r8  SSK9J:r:  SSK;J<r<J=r=  \" S\" \" 5       \" 5       S95      r>\" S\" \" \" 5       5      \" 5       \" SS9S95      r?S&S jr@S'S jrAS(S  jrB\
R                  rD\R                  rE\rFS)S! jrG    S*S" jrH    S+S# jrI    S,S$ jrJg%)-    )annotations)OrderedDict)DictListUnion   )Abi)	ArrayTypeBoolType	CairoTypeEnumType	EventTypeFeltTypeNamedTupleType
OptionType
StructType	TupleTypeUintTypeUnitType   )BoolSerializerByteArraySerializer)ArraySerializer)CairoDataSerializer)EnumSerializer)FeltSerializer)NamedTupleSerializer)OptionSerializer)OutputSerializer)PayloadSerializer)StructSerializer)TupleSerializer)Uint256Serializer)UintSerializer)UnitSerializer)InvalidTypeException)FunctionSerializationAdapterFunctionSerializationAdapterV1Uint256)lowhighzcore::byte_array::ByteArray    bits)datapending_wordpending_word_lenc                   [        U [        5      (       a
  [        5       $ [        U [        5      (       a
  [	        5       $ [        U [
        5      (       a[  U [        :X  a
  [        5       $ U [        :X  a
  [        5       $ [        [        S U R                  R                  5        5       5      5      $ [        U [        5      (       a  [        [!        U R"                  5      5      $ [        U [$        5      (       a/  ['        U R                   Vs/ s H  n[!        U5      PM     sn5      $ [        U [(        5      (       a3  [+        [        S U R                  R                  5        5       5      5      $ [        U [,        5      (       a  [/        U R0                  S9$ [        U [2        5      (       a  [5        [!        U R6                  5      5      $ [        U [8        5      (       a
  [;        5       $ [        U [<        5      (       a3  [?        [        S U R@                  R                  5        5       5      5      $ [        U [B        5      (       a  [E        U R                  5      $ [G        SU  S35      es  snf )zb
Create a serializer for cairo type.

:param cairo_type: CairoType.
:return: CairoDataSerializer.
c              3  @   #    U  H  u  pU[        U5      4v   M     g 7fNserializer_for_type.0namemember_types      q/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/static_dependencies/starknet/serialization/factory.py	<genexpr>&serializer_for_type.<locals>.<genexpr>^   %      )A%D *;78)A   c              3  @   #    U  H  u  pU[        U5      4v   M     g 7fr4   r5   r7   s      r;   r<   r=   n   r>   r?   r-   c              3  @   #    U  H  u  pU[        U5      4v   M     g 7fr4   r5   )r8   r9   variant_types      r;   r<   r=      s%      *E&D *<89*Er?   zReceived unknown Cairo type 'z'.)$
isinstancer   r   r   r   r   _uint256_typer#   _byte_array_typer   r!   r   typesitemsr
   r   r6   
inner_typer   r"   r   r   r   r$   r.   r   r   typer   r%   r   r   variantsr   serializer_for_payloadr&   )
cairo_typemembers     r;   r6   r6   G   s     *h''*h''*j))&$&&))&(( )3)9)9)?)?)A 
 	
 *i((2:3H3HIJJ*i((7A7G7GH7GV (7GH
 	
 *n--# )3)9)9)?)?)A 
 	
 *h'':??33*j)) 3JOO DEE*h''*h'' *4*=*=*C*C*E 
 	
 *i((%j&6&677
!>zl"M
NN= Is   
I)c                T    [        [        S U R                  5        5       5      5      $ )a6  
Create PayloadSerializer for types listed in a dictionary. Please note that the order of fields in the dict is
very important. Make sure the keys are provided in the right order.

:param payload: dictionary with cairo types.
:return: PayloadSerializer that can be used to (de)serialize events/function calls.
c              3  @   #    U  H  u  pU[        U5      4v   M     g 7fr4   r5   )r8   r9   rL   s      r;   r<   )serializer_for_payload.<locals>.<genexpr>   s%      
$3  &z23$3r?   )r    r   rG   )payloads    r;   rK   rK      s,      
$+MMO
 	
     c                R    [        U  Vs/ s H  n[        U5      PM     snS9$ s  snf )a  
Create OutputSerializer for types in list. Please note that the order of fields in the list is
very important. Make sure the types are provided in the right order.

:param payload: list with cairo types.
:return: OutputSerializer that can be used to deserialize function outputs.
)serializers)r   r6   )rQ   rL   s     r;   serializer_for_outputsrU      s,     GNOw(4wO Os   $c                    [        U [        5      (       a  [        U R                  5      $ [        U [        5      (       a  [        U R
                  5      $ [        U R                  5      $ )z
Create serializer for an event.

:param event: parsed event.
:return: PayloadSerializer that can be used to (de)serialize events.
)rC   EventV0rK   r/   EventV1inputsrF   )events    r;   serializer_for_eventr[      sK     %!!%ejj11%!!%ell33!%++..rR   c                b    [        [        U R                  5      [        U R                  5      S9$ z
Create FunctionSerializationAdapter for serializing function inputs and deserializing function outputs.

:param abi_function: parsed function's abi.
:return: FunctionSerializationAdapter.
inputs_serializeroutputs_deserializer)r'   rK   rY   outputsabi_functions    r;   serializer_for_functionrd      s-     (01D1DE3L4H4HI rR   c                b    [        [        U R                  5      [        U R                  5      S9$ r]   )r(   rK   rY   rU   ra   rb   s    r;   serializer_for_function_v1rf      s-     *01D1DE3L4H4HI rR   c                N    [        [        U R                  5      [        / 5      S9$ )z
Create FunctionSerializationAdapter for serializing constructor inputs.

:param abi_function: parsed constructor's abi.
:return: FunctionSerializationAdapter.
r^   )r(   rK   rY   rU   rb   s    r;   serializer_for_constructor_v2rh      s'     *01D1DE3B7 rR   N)rL   r   returnr   )rQ   zDict[str, CairoType]ri   r    )rQ   zList[CairoType]ri   r   )rZ   zEventV0 | EventV1 | EventV2ri   r    )rc   zAbiV0.Functionri   r'   )rc   z%Union[AbiV1.Function, AbiV2.Function]ri   r'   )rc   zAbiV2.Constructorri   r'   )K
__future__r   collectionsr   typingr   r   r   abi.v0r	   AbiV0abi.v1AbiV1abi.v2AbiV2cairo.data_typesr
   r   r   r   r   r   r   r   r   r   r   r   data_serializersr   r   !data_serializers.array_serializerr   &data_serializers.cairo_data_serializerr    data_serializers.enum_serializerr    data_serializers.felt_serializerr   'data_serializers.named_tuple_serializerr   "data_serializers.option_serializerr   "data_serializers.output_serializerr   #data_serializers.payload_serializerr    "data_serializers.struct_serializerr!   !data_serializers.tuple_serializerr"   #data_serializers.uint256_serializerr#    data_serializers.uint_serializerr$    data_serializers.unit_serializerr%   errorsr&   function_serialization_adapterr'   r(   rD   rE   r6   rK   rU   EventrW   rX   EventV2r[   rd   rf   rh    rR   r;   <module>r      s-   " # $ $ ! ! !    ? = < ? = < (
 9khjxz&RS!xz"Z!r* @OH 
 ++
++
/ !7!#!rR   