
    _Og                        S SK r S SKrS SKrS SKrS SKrS SK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JrJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!  \RD                  " S5      r#S\$S\%4S jr&S\'S\(4S	 jr)S
\S\4S j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\5      r1 " S S\5      r2 " S S\5      r3 " S S\5      r4 " S  S!\5      r5 " S" S#\5      r6g)$    N)AnnotatedTypeHintClassTypeHintLiteralTypeHintTupleTypeHintTypeHintUnionTypeHintget_annotations	type_repr)AliasContextConversionError	Converter
DateFormatDeserializeAs	Direction	ExtraKeysField	Precision	RemainderSchemaSerializeDefaultsStrictUnionconvert_to_schemaget_annotation_settingget_fields_expandedTvreturnc                 @    U S-  S:X  d   SU < 35       e[        U 5      $ )zWConvert *v* to an integer only if the conversion is lossless, otherwise raise an error.g      ?g        zexpected int, got )int)r   s    ]/Users/admin/workspace/ai/Jarvis/env/lib/python3.13/site-packages/databind/json/converters.py_int_losslessr#   *   s*     s7c>5/u55>q6M    sc                 t    U R                  5       S;   a  gU R                  5       S;   a  g[        SU < 35      e)z@Converts *s* to a boolean value based on common truthy keywords.)yestrueonenabledT)nofalseoffdisabledznot a truthy keyword: )lower
ValueError)r%   s    r"   _bool_from_strr1   1   s;     	wwy44wwy66
-aU3
44r$   hintc                 :    [        U [        5      (       a  U S   $ U $ )Nr   )
isinstancer   )r2   s    r"   _unwrap_annotatedr5   ;   s    $)**AwKr$   c                   >    \ rS rSrSrS\S\R                  4S jrSr	g)AnyConverterA   zcA converter for #typing.Any and #object typed values, which will return them unchanged in any case.ctxr   c                     [        UR                  5      n[        U[        5      =(       a#    UR                  [
        [        R                  4;   nU(       a  UR                  $ [        eN)
r5   datatyper4   r   typeobjecttAnyvalueNotImplementedError)selfr9   r<   is_any_types       r"   convertAnyConverter.convertD   sI    $S\\2 =9^hmmPVXYX]X]>^99!!r$    N
__name__
__module____qualname____firstlineno____doc__r   r?   r@   rE   __static_attributes__rG   r$   r"   r7   r7   A   s    m"7 "quu "r$   r7   c                       \ rS rSr\\\\\R                  4r
\4S\R                  \R                  \R                        SS4S jjrS\S\R                  4S jrSrg)	CollectionConverterL   json_collection_typer   Nc                     Xl         g r;   rR   )rC   rR   s     r"   __init__CollectionConverter.__init__O   s    $8!r$   r9   c                 	  ^ ^^^ [        TR                  5      m[        T[        5      (       aN  [	        TR
                  [        R                  5      (       a%  [	        TR
                  T R                  5      (       a  [        T[        5      (       d  [        e[        T[        5      (       Ga>  [	        TR
                  [        5      (       Ga  [        TR
                  SS 5      (       Ga  [        [        TR
                  S5      R                  5        VVs0 s H/  u  p#U[        [!        UTR
                  S9R#                  5       S9_M1     snnTR
                  TR
                  S9nTR$                  R'                  5       (       a  [)        5       R+                  TU5      $ TR$                  R-                  5       (       a  [)        5       R/                  TU5      $  TR$                  5       e[        T[        5      (       a.  TR0                  (       d  [3        T5      n[        nSUUU 4S jjnGO[5        5       nTR7                  5        Hg  n	[	        U	R
                  [        R                  5      (       d  M.  [9        U	R:                  5      S:X  d  MI  UR=                  U	R:                  S   5        Mi     [9        U5      S:X  a  [?        T TST 35      e[9        U5      S:  a  [?        T TS	T S
U 35      e[!        [A        [3        U5      5      5      m[3        U4S jS 5      nTR
                  nSS jnU4S j[C        [E        TRF                  U5      5       5       n
TR$                  [H        RJ                  :X  aK  [        TRF                  U5      (       d  [>        RL                  " T TU5      eU" 5         T RO                  U
5      $ [        TRF                  [        R                  5      (       a%  [        TRF                  T R                  5      (       a&  [>        RL                  " T T[        R                  5      eU" 5         [Q        U
5      n
U[P        :X  a  U
$ [S        US5      (       a  U" U
6 $  U" U
5      $ s  snnf ! [T         a    U
s $ f = f)N__annotations__)source)r<   )fieldsconstructorr=   c            
         > [        T R                  5      [        T5      :w  a/  [        TT S[        T5       S[        T R                  5       35      eg )Nzexpected a tuple of length z, found )lenrA   r   )r9   r<   rC   s   r"   _length_check2CollectionConverter.convert.<locals>._length_check{   sP    syy>S]2)c%@XxX[\_\e\eXfWg#h  3r$      r   zcould not find item type in zfound multiple item types in : c                     > T $ r;   rG   )	item_types   r"   <lambda>-CollectionConverter.convert.<locals>.<lambda>   s    yr$   c                      g r;   rG   rG   r$   r"   r^   r_      s    r$   c              3   n   >#    U  H*  u  nu  p#TR                  X#U5      R                  5       v   M,     g 7fr;   )spawnrE   ).0idxvalrc   r9   s       r"   	<genexpr>.CollectionConverter.convert.<locals>.<genexpr>   s7      %
)W%%c IIcc*2244)Ws   25_fields)r   N)+r5   r<   r4   r   
issubclassr=   r?   
Collection_FORBIDDEN_COLLECTIONSr   rB   tuplegetattrr   itemsr   r   evaluate	directionis_serializeSchemaConverterserialize_from_schemais_deserializedeserialize_from_schemarepeateditersetrecurse_basesr]   argsaddr   next	enumerateziprA   r   	SERIALIZEexpectedrR   listhasattr	TypeError)rC   r9   nametype_schemaitem_types_iteratorpython_typer^   
candidatescurrentvaluesr<   rc   s   ``         @@r"   rE   CollectionConverter.convertR   s   $S\\28]33hmmQ\\::(--)D)DEEX}55%% x//8==%00'8$?? (/x}}>O'P'V'V'X (Y % "*%!F!O!O!Q 
 (Y %MM]]F }}))++&(>>sFKK--//&(@@fMM+cmm+u h..x7H7H"&x. %K  J#113gllALL99c',,>OST>TNN7<<?3 4 :!#%dC3OPXz1Z[[Z1$%dC3PQYPZZ\]g\h1ijj d:&6!78I"&'8$"?"--K%
)23syyBU3V)W%

 ==I///cii55%..tS+FFO,,V44 cii66*SYYPTPkPk:l:l%..tS!,,GGO&\Fd"i00"F++"6**MN   s   6Q6
.Q< <R
RrT   )rI   rJ   rK   rL   strbytes	bytearray
memoryviewr?   Mappingrq   r   Typerp   r@   rU   r   rE   rN   rG   r$   r"   rP   rP   L   s^    !5)ZKKO 9QVVALL4G-H 9TX 9Z7 Zquu Zr$   rP   c                   V    \ rS rSrSr\" S5      r\r\rS\	S\
R                  4S jrSrg)	DatetimeConverter   zA converter for #datetime.datetime, #datetime.date and #datetime.time that represents the serialized form as
strings formatted using the #nr.date module. The converter respects the #DateFormat setting.z	.ISO_8601r9   r   c                    [        UR                  5      n[        U[        5      (       d  [        eUR
                  nU[        R                  [        R                  [        R                  4;  a  [        eUR                  [        5      =(       db    U[        R                  :X  a  U R                  OAU[        R                  :X  a  U R                  O!U[        R                  :X  a  U R                  OS nUc   eUR                  [        R                   :X  a  [        UR"                  U5      (       a  UR"                  $ [        UR"                  [$        5      (       a0   UR'                  X1R"                  5      n[        XS5      (       d   eU$ [*        R,                  " XU[        UR"                  5      5      e[        UR"                  U5      (       d+  [*        R,                  " XU[        UR"                  5      5      eUR/                  UR"                  5      $ ! [(         a  n[+        X[%        U5      5      eS nAff = fr;   )r5   r<   r4   r   rB   r=   datetimedatetimeget_settingr   DEFAULT_DATE_FMTDEFAULT_TIME_FMTDEFAULT_DATETIME_FMTrv   r   DESERIALIZErA   r   parser0   r   r   format)rC   r9   r<   	date_typedatefmtdtexcs          r"   rE   DatetimeConverter.convert   s   $S\\2(M22%%MM	X]]HMM8;L;LMM%%//*- 

HMM) !! - %%  1 11 .. 	 """==I111#))Y//yy CIIs++? 'i CB ""0000	!**4iciiQQ cii33%..t)T#))_UU>>#)),, " ?)$SX>>?s   H 
H=#H88H=rG   N)rI   rJ   rK   rL   rM   r   r   r   r   r   r?   r@   rE   rN   rG   r$   r"   r   r      s8    d "+.'+%-7 %-quu %-r$   r   c                   T    \ rS rSrSrS
S\SS4S jjrS\S\R                  4S jr
S	rg)DecimalConverter   zDA converter for #decimal.Decimal values to and from JSON as strings.strict_by_defaultr   Nc                     Xl         g r;   r   rC   r   s     r"   rU   DecimalConverter.__init__       !2r$   r9   c                    [        UR                  5      n[        U[        5      (       a)  [	        UR
                  [        R                  5      (       d  [        eUR                  [        5      =(       d    [        U R                  5      nUR                  [        5      nU(       a  UR                  5       OS nUR                  [        R                   :X  a  UR"                  (       d%  [        UR$                  [&        [(        45      (       d  [        UR$                  [*        5      (       a!  [        R                  " UR$                  U5      $ [,        R.                  " X[*        [        UR$                  5      5      e[        UR$                  [        R                  5      (       d9  [,        R.                  " X[        R                  [        UR$                  5      5      e[+        UR$                  5      $ r;   )r5   r<   r4   r   ro   r=   decimalDecimalrB   r   r   r   r   to_decimal_contextrv   r   r   r*   rA   r!   floatr   r   r   )rC   r9   r<   strict	precisioncontexts         r"   rE   DecimalConverter.convert   s4   $S\\2(M22*X]]T[TcTc:d:d%%(JF43I3I,JOOI.	4=)..04==I111NNz#))c5\'J'JzZ]ZcZcehOiOisyy'::!**4c4		?KK cii99%..t'//4PSPYPY?[[syy>!r$   r   T)rI   rJ   rK   rL   rM   boolrU   r   r?   r@   rE   rN   rG   r$   r"   r   r      s/    N3$ 3$ 3"7 "quu "r$   r   c                       \ rS rSrSrS\R                  \R                     S\	S\R                  \   4S jrS\S\R                  4S jrS	rg
)EnumConverter   a<  JSON converter for enum values.

Converts #enum.IntEnum values to integers and #enum.Enum values to strings. Note that combined integer flags
are not supported and cannot be serializ

#Alias#es on the type annotation of an enum field are considered as aliases for the field name to be used
in the value's serialized form as opposed to its value name defined in code.

Example:

```py
import enum, typing
from databind.core.settings import Alias

class Pet(enum.Enum):
  CAT = enum.auto()
  DOG = enum.auto()
  LION: typing.Annotated[int, Alias('KITTY')] = enum.auto()
```
	enum_typemember_namer   c                 h    [        [        U5      R                  U5      5      n[        U[        5      $ r;   )r   r	   getr   r   )rC   r   r   r2   s       r"   _discover_aliasEnumConverter._discover_alias  s)    	266{CD%dE22r$   r9   c                 d   [        UR                  5      n[        U[        5      (       d  [        e[        UR                  [        R                  5      (       d  [        eUR                  nUR                  nUR                  [        R                  :X  a  [        U5      ULa!  [        R                  " XU[        U5      5      e[        U[        R                  5      (       a  UR                  $ [        U[        R                  5      (       aN  U R!                  XCR"                  5      nU(       a   UR$                  (       a  UR$                  S   $ UR"                  $  U5       e[        U[        R                  5      (       aC  [        U[&        5      (       d%  [        R                  " X[&        [        U5      5      e U" U5      $ [        U[        R                  5      (       a  [        U[*        5      (       d%  [        R                  " X[*        [        U5      5      eU H:  nU R!                  XGR"                  5      nU(       d  M'  X5R$                  ;   d  M8  Us  $     XC   $  U5       e! [(         a  n[        X[+        U5      5      eS nAff = f! [,         a    [        XU< SU 35      ef = f)Nr   z  is not a member of enumeration )r5   r<   r4   r   rB   ro   r=   enumEnumrA   rv   r   r   r   r   IntEnumr   r   aliasesr!   r0   r   KeyError)rC   r9   r<   rA   r   aliasr   
enum_values           r"   rE   EnumConverter.convert  s   $S\\2(M22%%(--33%%		MM	==I///E{)+%..t)T%[QQ)T\\22{{")TYY//,,Y

CU]] ==++zz!#)#5 )T\\22!%--)224c4;OO?$U++ )TYY//!%--)224c4;OO"+J 00OOLEu--!7)) #,m$++ $)#5 " ?)$SX>>?   m)$y@`ai`j5kllms$   >I+  J +
J5J

JJ/rG   N)rI   rJ   rK   rL   rM   r?   r   r   r   r   Optionalr   r   r   r@   rE   rN   rG   r$   r"   r   r      sR    *3		): 3 3QRQ[Q[\aQb 3
)$7 )$quu )$r$   r   c                       \ rS rSr\4S\R                  \R                  \\R                  4      SS4S jjr
S\S\R                  4S jrSrg)	MappingConverteri@  json_mapping_typer   Nc                     Xl         g r;   r   )rC   r   s     r"   rU   MappingConverter.__init__A  r   r$   r9   c                    [        UR                  5      n[        U[        5      (       a)  [	        UR
                  [        R                  5      (       d  [        e[        5       nUR                  5        Hd  n[	        UR
                  [        R                  5      (       d  M.  [        UR                  5      S:X  d  MI  UR                  UR                  5        Mf     [        U5      S:X  a  [        XSU 35      e[        U5      S:  a  [        XSU SU 35      e[        [!        U5      5      u  pV[        UR"                  [        R                  5      (       d%  [        R$                  " X[        R                  5      e0 nUR"                  R'                  5        HN  u  pUR)                  XU5      R+                  5       n	UR)                  XSU< S35      R+                  5       nXU'   MP     UR,                  [.        R0                  :X  a&  UR
                  [2        :w  a   UR                  U5      $ UR,                  [.        R6                  :X  a%  U R8                  [2        :w  a  U R9                  U5      $ U$ ! [4         a    Us $ f = f)	N   r   z!could not find key/value type in r`   z"found multiple key/value types in ra   zKey())r5   r<   r4   r   ro   r=   r?   r   rB   r~   r   r]   r   r   r   r   r}   rA   r   rt   rh   rE   rv   r   r   dictr   r   r   )
rC   r9   r<   r   r   key_type
value_typeresultkeyrA   s
             r"   rE   MappingConverter.convertD  s   $S\\2 (M22*X]]TUT]T]:^:^%%U
--/G',,		22s7<<7HA7Mw||, 0 z?a!$/PQYPZ-[\\_q !$/QRZQ[[]^h]i-jkk#D$45#))QYY//!**4aii@@))//+JCIIe5==?E))CT#?;CCEC3K ,
 ==I111hmmt6K}}V,,
 ]]i111d6L6LPT6T))&11   s    I6 6JJr   )rI   rJ   rK   rL   r   r?   r   r   r   r@   rU   r   rE   rN   rG   r$   r"   r   r   @  sJ    JN 3!&&3:1F*G 3SW 3&7 &quu &r$   r   c                   :    \ rS rSrS\S\R                  4S jrSrg)OptionalConverterim  r9   r   c                    [        UR                  5      n[        U[        5      (       a  UR	                  5       (       d  [
        eUR                  c  g UR                  UR                  UR                  5       S 5      R                  5       $ r;   )
r5   r<   r4   r   has_none_typerB   rA   rh   without_none_typerE   )rC   r9   r<   s      r"   rE   OptionalConverter.convertn  sg    $S\\2(M22(:P:P:R:R%%99yyH$>$>$@$GOOQQr$   rG   N)	rI   rJ   rK   rL   r   r?   r@   rE   rN   rG   r$   r"   r   r   m  s    R7 Rquu Rr$   r   c                      \ rS rSr% Sr\\4S \\4\R                  \\4\\	\	4\	\
\
4\
\	\
4\
\
\	4\\\4\\" S5      \" S5      4S 0	r\R                   \R"                  \\4   \R$                  \R&                  /\R&                  4   4   \S'   \R+                  5       r\R/                  \\	4\	\\
4\
\\4\\	\4\\
\4\\\4\\" S5      \" S5      4S 05        SS\S	S4S
 jjrS\S	\R&                  4S jrSrg)PlainDatatypeConverteriw  aR  A converter for the plain datatypes #bool, #bytes, #int, #str, #float and #null.

Arguments:
  direction (Direction): The direction in which to convert (serialize or deserialize).
  strict_by_default (bool): Whether to use strict type conversion on values by default if no other
    information on strictness is given. This defaults to `True`. With strict conversion enabled,
    loss-less type conversions are disabled (such as casting a string to an integer). Note that
    serialization is _always_ strict, only the deserialization is controlled with this option or
    the #Strict setting.
c                 L    [         R                  " U 5      R                  S5      $ )Nascii)base64	b64encodedecode)ds    r"   rd   PlainDatatypeConverter.<lambda>  s    &"2"21"5"<"<W"Er$   Nc                     U $ r;   rG   xs    r"   rd   r     s    Ar$   _strict_adaptersc                     U $ r;   rG   r   s    r"   rd   r     s    r$   r   r   c                     Xl         g r;   r   r   s     r"   rU   PlainDatatypeConverter.__init__  r   r$   r9   c                    [        UR                  5      n[        U[        5      (       d  [        eUR
                  U R                   Vs1 s H  o3S   iM	     sn;  a  [        e[        UR                  5      nUR
                  nUR                  [        R                  :X  a1  UR                  [        5      =(       d    [        U R                  5      O
[        S5      nUR                  (       a  U R                  OU R                  nUR!                  XE45      nUc  ["        R$                  " XXT5      e U" UR                  5      $ s  snf ! [&         a  n	[#        X[)        U	5      5      U	eS n	A	ff = f)Nr   T)r5   r<   r4   r   rB   r=   r   rA   rv   r   r   r   r   r   r*   _nonstrict_adaptersr   r   r   r0   r   )
rC   r9   r<   ksource_typetarget_typer   adaptersadapterr   s
             r"   rE   PlainDatatypeConverter.convert  s)   $S\\2(M22%%==t/D/D E/D!1/D EE%%399omm }}	 5 55 __V$Ft/E/E(F 	
 -3NN4((@X@X,,9:?!**4kOO	@399%%! !F"  	@!$SX6C?	@s   
E5E 
E1E,,E1r   r   )rI   rJ   rK   rL   rM   r   r   r   	b64decoder!   r   r#   r   r=   r   r?   DictTupleCallabler@   rX   copyr   updater1   rU   r   rE   rN   rG   r$   r"   r   r   w  sE   	 
E	ef&&	c
C	c
C		ee	m	td	dT$Z +
QaffQWWT4Z0!**aeeWaee^2LLM 
 +//1#J%L%$K#JCL#3K$Zd$k	

3$ 3$ 3@7 @quu @r$   r   c            	          \ rS rSrSr\\S4S\R                  \R                  \
\R                  4      S\R                  \/\4   S\SS4S	 jjr\S
\S\
S\4S j5       rS
\S\4S jrS
\S\S\R                  \
\R                  4   4S jrS
\S\S\R                  4S jrS
\S\R                  4S jrS
\S\R                  \
\R                  4   4S jrSrg)rx   i  zConverter for type hints that can be adapter to a #databind.core.schema.Schema object.

This converter respects the following settings:

* #Alias
* #SerializeDefaults
Tr   r   serialize_defaultsr   Nc                 (    Xl         X l        X0l        g r;   )r   r   r  )rC   r   r   r  s       r"   rU   SchemaConverter.__init__  s     "3!2"4r$   r9   
field_namec                 P    U R                  [        5      =(       d    [        U5      $ r;   )r   r   )r9   r
  s     r"   _get_alias_setting"SchemaConverter._get_alias_setting  s    u%:z)::r$   c                     UR                  [        5      nUb  [        UR                  5      nO[	        UR
                  5      n U R                  U5      $ ! [         a  n[        [        U5      5      eS nAff = fr;   )
r   r   r   r=   r5   r<   r   r0   rB   r   )rC   r9   deserialize_asr<   r   s        r"   _get_schemaSchemaConverter._get_schema  si    7% 3 34H(6H	0))(33 	0%c#h//	0s   A 
A9 A44A9r   c                   ^  [        TR                  UR                  5      nU(       d"  [        R                  " U TUR                  5      e TR                  [        5      =(       d    [        U R                  5      R                  nU R                  5       nS[        S[        S[        R                  4U4S jjnS nS nUR                  R!                  5        GH$  u  pTR#                  U" X5      U
R$                  U	5      nUR                  [&        5      nU(       aH  UR                  (       a7  Ub  [        U TSUS   < SU	< S35      eX4nU
R(                  (       a   S	5       eUR+                  5       nU
R(                  (       a  [        U[        R,                  5      (       d)  [        U US
U	< S[        U5      R.                  < S35      eUR1                  5       R3                  UR1                  5       5      (       d&   UR1                  5       UR1                  5       -  5       eUR5                  U5        GMb  U(       d6  U
R7                  5       (       a!  UR                  U
R9                  5       :w  d  GM  U R;                  X5      R<                  S   nU(       a\  UR                  (       aK  [        U[        R,                  5      (       d'  [        U TSU	< S[        U5      R.                   35      eUnGM   XU'   GM'     U(       aN  Uc   eUR1                  5       UR1                  5       -  nU(       a  [        U TSU 35      eUR5                  U5        U$ ! [
         a     GNf = f)Nr
  fieldr   c                    > [        TR                  [        R                  5      (       a  TR                  U    $ [	        TR                  U 5      $ r;   )r4   rA   r?   r   rs   )r
  r  r9   s     r"   _get_field_value?SchemaConverter.serialize_from_schema.<locals>._get_field_value  s8    #))QYY//yy,,syy*55r$   z%found at least two remainder fields (r   , r   z#remainder field cannot be flattenedzfield z< is flattened but its serialized form is not a mapping (got zcannot expand remainder field z	 of type zAkeys in remainder field collide with other fields in the schema: )r4   rA   r=   r   r   r   r   r   r  r*   r   r   r   r?   r@   rZ   rt   rh   r<   r   	flattenedrE   r   rI   keys
isdisjointr  has_defaultget_defaultr  r   )rC   r9   r   is_instancer  r   r  remainder_fieldremainder_valuesr
  r  	field_ctx	remainderrA   r   duplicate_keyss    `              r"   ry   %SchemaConverter.serialize_from_schema  s   	G$SYY<K
 %..tS&++FF  "oo.?@nDUVZVmVmDnww'')	6 	6U 	6quu 	6 <@>B!'!4!4!6J		"2:"Eu~~WabI!--i8IY..".)c%J?[\K]J``bcmbppq#r  #-"3 ??Q,QQ*%%'E!%33)!  /**.u+*>*>)AD  {{}//

==[v{{}uzz|?[[=e$%U->->-@-@IOOW\WhWhWjDj 33IJRRSTUE Y%6%6)%;;"1 $ #"@iX\]bXcXlXlWm n# 
 ,1((-uE "7H #///#[[]-=-B-B-DDN%#!bcqbrs  MM*+A  		s    M 
M('M(c                   ^ ^^^^^ [        TR                  [        R                  5      (       d&  [        R
                  " T T[        R                  5      eTR                  m[        5       mS mS[        R                  [        [        R                  4   S[        S[        S[        S[        R                  [        [        R                  4   4
UUU UU4S jjmS[        R                  [        [        4   S[        R                  [        [        R                  4   4U4S jjn0 n[        U5      nUR                  R                  5        H  u  pgUR                  (       a@  Xe;   d   U5       eTR!                  U" XV   5      UR"                  U5      R%                  5       nOT" 0 XgS	5      n	U	(       dL  UR&                  (       a  T(       a	  TS
   U:X  d   eUR)                  5       (       a  UR+                  5       XF'   M  TR!                  X   UR"                  U5      R%                  5       nXU'   M     TR-                  5       T-
  n
T(       aW  U
 Vs0 s H  oTR                  U   _M     nnTR!                  UTS   R"                  TS
   5      R%                  5       UTS
   '   OAU
(       a:  TR/                  [0        5      =(       d    [1        S	5      nUR3                  T TU
5        UR4                  " S0 UD6$ s  snf )Nr   r
  r  keep_aliasedr   c           	      6  > T	R                  S UR                  U5      nUR                  [        5      nU(       a2  UR                  (       a!  T
b  [        TT	ST
S   < SU< S35      eX4m
U $ TR                  XA5      R                  nU H-  nUT;   d  M  TU   X(       a  UOU'   TR                  U5          U $    UR                  (       aM  [        U5      S:  a&  SSR                  [        [        USS  5      5       S3OSn[        TT	SUS   < U 35      eU $ )	Nz+encountered at least two remainder fields (r   r  r   r`   z (or  zmissing required field: )rh   r<   r   r   r*   r   r  r   r   requiredr]   joinmaprepr)r   r
  r  r%  r   r!  r   r   other_aliasesr9   r  rC   rY   	used_keyss            r"   _extract_field?SchemaConverter.deserialize_from_schema.<locals>._extract_field*  s2   
 		$
CI!--i8IY..".)c%PQ`abQcPffhishvvw#x  $."5--iDLLG F?DJ5MFL5jAMM%(
 M ! >>TWX_T`cdTdeDIIc$6L,M+Na$PjlM)$7OPWXYPZ~^k]l5mnnMr$   rZ   c                 R   > 0 nU R                  5        H  u  p#T" XUS5        M     U$ )NT)rt   )rZ   r   r
  r  r.  s       r"   _extract_fields@SchemaConverter.deserialize_from_schema.<locals>._extract_fieldsE  s,    )+F%+\\^!
v5$? &4Mr$   Fr   r`   rG   )r4   rA   r?   r   r   r   r~   r  r   r@   r   r   r   rZ   rt   r  rh   r<   rE   r(  r  r  r  r   r   informr[   )rC   r9   r   r1  r   expandedr
  r  rA   	containerunused_keysr   
remainders
extra_keysr.  r  rY   r-  s   ``            @@@@r"   r{   'SchemaConverter.deserialize_from_schema"  sf   #))QYY//!**4aii@@E	;?	FF3:&	47	@E	UY	VVCJ	 	6	AFF3:$6 	166#quu*;M 	 &v.!'!4!4!6J!-9z9-		/(2F"GYcdlln*2z%H	 $~~/oVWFX\fFfgg((**-2->->-@*		)"7T\\^!&: "7  kkmi/3>?;aSYYq\/;J?),OA.779K*gi ?1%& 3Gy7GJdC5!!+F++ @s   K9c                 F    U R                  U5      nU R                  X5      $ r;   )r  r{   rC   r9   r   s      r"   deserializeSchemaConverter.deserializei  s#    !!#&++C88r$   c                 F    U R                  U5      nU R                  X5      $ r;   )r  ry   r;  s      r"   	serializeSchemaConverter.serializem  s#    !!#&))#66r$   )r   r   r  )rI   rJ   rK   rL   rM   r   r   r?   r   MutableMappingr   r@   r  r   r   r   rU   staticmethodr   r   r  r  ry   r{   r<  r?  rN   rG   r$   r"   rx   rx     s>    CG<M#'	566!"2"23:">?5 ::xj&&895 !	5
 
5 ; ;S ;U ; ;
0w 
06 
0C C& CQEUEUVY[\[`[`V`Ea CJE,7 E,F E,quu E,N9w 9155 97W 7)9)9#quu*)E 7r$   rx   c                      \ rS rSrSrS\S4S\R                  \   S\R                  \R                  \/\4      S\R                  \/\4   S\R                  \   SS4
S	 jjrS\4S
 jrS\S\R                  4S jrSrg)StringifyConverterir  zA useful helper converter that matches on a given type or its subclasses and converts them to a string for
serialization and deserializes them from a string using the type's constructor.Nr   parser	formatterr   r   c                     [        U[        5      (       d   U5       eXl        U=(       d    UU l        X0l        X@l        g r;   )r4   r=   r   rE  rF  r   )rC   r   rE  rF  r   s        r"   rU   StringifyConverter.__init__v  s6     %&&--&
,2Oe"	r$   c                     U R                   b  SU R                   < S3$ S[        U R                  5       SU R                  < SU R                  < S3$ )NzStringifyConverter(name=r   zStringifyConverter(type=z	, parser=z, formatter=)r   r
   r   rE  rF  )rC   s    r"   __repr__StringifyConverter.__repr__  sX    99 -dii]!<< +9TZZ+@*A4;;/ Z!^^.a1r$   r9   c                    [        UR                  5      n[        U[        5      (       a%  [	        UR
                  U R                  5      (       d  [        eUR                  [        R                  :X  aV  [        UR                  [        5      (       d  [        R                  " X[        5      e U R                  UR                  5      $ [        UR                  UR
                  5      (       d!  [        R                  " XUR
                  5      eU R%                  UR                  5      $ ! [         ["        4 a  n[        X[        U5      5      eS nAff = fr;   )r5   r<   r4   r   ro   r=   r   rB   rv   r   r   rA   r   r   r   rE  r   r0   rF  )rC   r9   r<   r   s       r"   rE   StringifyConverter.convert  s    $S\\2(M22*X]]TXT^T^:_:_%%==I111cii--%..t#>>;{{399--
 cii77%..t(--HH>>#)),, z* ;%dS::;s   /D+ +E;EE)rF  r   rE  r   )rI   rJ   rK   rL   rM   r   r?   r   r   r   r  rU   rJ  r   r@   rE   rN   rG   r$   r"   rD  rD  r  s    W 48*- $vvay 

1::seQh/0 ::qc3h'	
 jjo 
# -7 -quu -r$   rD  c            
           \ rS rSrSrS\S\R                  \\R                  4   S\S\S\4
S jr
S\S\S\R                  SS	4S
 jrS\S\R                  4S jrSrg	)UnionConverteri  a  Converter for union types. The following kinds of union types are supported:

* A #typing.Union (represented as #UnionTypeHint) instance, in which case the members are deserialized in the
  the #Union.NESTED mode, using the class name as the discriminator keys.

    ```py
    AOrB = A | B   # ex.: {"type": "A", "A": {...}}
    ```

* A #typing.Annotated annotated with the #Union setting (represented as #AnnotatedTypeHint)

    ```py
    from databind.core.settings import Union
    AOrB = typing.Annotated[A | B, Union({'a': A, 'b': B}, Union.KEYED)]  # ex.: {"a": {...}}
    ```

* A class that is decorated with the #Union setting

    ```py
    import dataclasses
    from databind.core.settings import Union

    @Union(style=Union.FLAT)
    class Base(abc.ABC):
      pass

    @Union.register(Base, 'a')
    @dataclasses.dataclass
    class A(Base):
      pass

    # ...
    # ex.: {"type": "a", ...}
    ```

!!! note

    Note that the union members should be concrete types, not generic aliases, because the converter cannot check
    if an object is an instance of an alias. This is an implementation detail of the
    #databind.core.union.UnionMembers implementations.

More Examples:

```py
import abc
import typing
from databind.core.settings import Union

AOrB = typing.Annotated[
  typing.Union[A, B],
  Union({'A': A, 'B': B}, Union.NESTED, 'uses', 'with')
]

@Union('!my.package.plugins')
class Plugin(abc.ABC):
  @abc.abstractmethod
  def activate(self) -> None: ...
```
r9   rA   stylediscriminator_keyr   c                 \   U R                  XU5        U[        R                  [        R                  4;   a`  XB;  a  [	        XSU< S35      eX$   n[        U[        5      (       d0  [        R                  " XR                  U[        U5      [        5      eOxU[        R                  :X  aT  [        U5      S:w  a  [	        XS[        U5       S35      e[        [        U5      5      n[        U[        5      (       d   eO[	        XSU< 35      e[        U[        5      (       d   XR45       eU$ )zIdentify the name of the union member of the given serialized *value* and return it. How that name is
determined depends on the *style*.zmissing discriminator key  in mappingr`   z:expected exactly one key to act as the discriminator, got z key(s)zunsupported Union.style: )_check_style_compatibilityr   NESTEDFLATr   r4   r   r   rh   KEYEDr]   r   r}   )rC   r9   rA   rP  rQ  r   s         r"   _get_deserialize_member_name+UnionConverter._get_deserialize_member_name  s    	''E: U\\5::.. -%d3MN_Mbbm1noo2Kk3//%..tYY{CQb5cehii 0ekk!5zQ%![\_`e\f[ggno  tE{+Kk3////!$/H	-RSS+s++Ak-AA+r$   Nc                     [        U[        R                  5      (       d4  U[        R                  4;   a  [        XSUR                  5        S35      eg g )Nz
The Union.z. style is not supported for plain member types)r4   r?   rA  r   rV  r   upper)rC   r9   rP  rA   s       r"   rT  )UnionConverter._check_style_compatibility  sH    %!1!122u7M!$z%++-Hv-wxx 8N2r$   c                 
   UR                   n[        U[        5      (       a  UR                  5       (       a  [	        S5      e[        S U 5       5      (       d  [	        SU 35      eU Vs0 s H3  n[        R                  " [        U5      R                  R                  U_M5     nn[        U5      [        U5      :w  a  [	        SU 35      e[        U[        R                  5      nO@[        U[        [        45      (       a  UR                  [        5      nUc  [        eO[        eUR                   nU[        R                  :X  a  / nUR"                  R%                  5        HJ  nUR"                  R'                  U5      n	 UR)                  UR*                  U	S 5      R-                  5       s  $    [/        U USUR4                  R6                  R9                  5        S3U5      eUR:                  nUR4                  [<        R>                  :H  nU(       a  [        UR*                  [        R@                  5      (       d%  [.        RB                  " X[        R@                  5      eU RE                  XR*                  Xk5      nUR"                  R'                  U5      n	OIUR"                  RG                  [        UR*                  5      5      nUR"                  R'                  U5      n	URH                  =(       d    Un[        U	[J        5      (       d  [K        U	5      OU	nU(       Ga(  U[        RL                  :X  a@  XR*                  ;  a  [/        XSU< S35      eUR)                  UR*                  U   X5      nOU[        RN                  :X  a|  UR)                  [Q        UR*                  5      US 5      n[        R                  " [        RR                  [T        [        RV                  4   UR*                  5      RY                  U5        OaU[        RZ                  :X  a   UR)                  UR*                  U   X5      nO-[/        XS	U< 35      eUR)                  UR*                  US 5      nUR-                  5       nU(       a  U$ U R]                  XU5        U[        RL                  :X  a  XUU0nU$ U[        RN                  :X  a6  [        U[        R^                  5      (       d   [        U5      5       eUUU'   U$ U[        RZ                  :X  a  UU0nU$ U[        R                  :X  a   U$ [/        XS	U< 35      es  snf ! [.         a)  n
UR1                  U
R2                  U
45         S n
A
GM	  S n
A
ff = f)
Nz+unable to handle Union type with None in itc              3   B   #    U  H  n[        U[        5      v   M     g 7fr;   )r4   r   )ri   as     r"   rl   )UnionConverter.convert.<locals>.<genexpr>  s     FXz!]33Xs   z/members of plain Union must be concrete types: z;members of plain Union cannot have overlapping type names: z
unable to z any union memberzmissing nesting key rS  zunsupported union style: )0r<   r4   r   r   rB   allr?   castr   r=   rI   r]   r   
BEST_MATCHr   r   rP  membersget_type_idsget_type_by_idrh   rA   rE   r   appendoriginrv   r   r/   rQ  r   r   r   r   rX  get_type_idnesting_keyr   rU  rV  r   r  r   r@   poprW  rT  rA  )rC   r9   r<   r_  rd  unionrP  errorsr   member_typer   rQ  rz   rj  	type_hintchild_contextr   s                    r"   rE   UnionConverter.convert  ss   <<h..%%'')*WXXFXFFF),[\d[e*fggJRS(QqvvmQ/44==q@(GS7|s8},),ghpgq*rss'5#3#34E#4m"DEEOOE*E}))  &%E$$$F$}}99;#mm::;G599SYYTBJJLL  < "S]]//55788IJ	  "33)*?*??cii33%..t!))DD;;CEeK--66{CK  --33DODK--66{CK''6;1;K1R1RH[)Xc	 $ii/)$7KK?Ze5fgg #		#))K*@) Y%**$ #		$syy/9d Kqvvc155j)=+>+>?CCDUV%++% #		#))K*@) Y%d3LUI1VWW  IIciiDAM&&(M ++C?$++vN  %**$!&!*:*:;;IT&\I;,7()  %++%%v.  %***  &d3LUI1VWWe T$ ' 5MM3::s"3445s   +:T:*T??
U2	U--U2rG   )rI   rJ   rK   rL   rM   r   r?   r   r   r@   rX  rT  rE   rN   rG   r$   r"   rO  rO    s    :x#$99S!%%Z#8ADY\	8yg yc y!%% yTX y\7 \quu \r$   rO  c                   >    \ rS rSrSrS\S\R                  4S jrSr	g)LiteralConverteri[  aR  A converter for #typing.Literal type hints. A literal value in the definition must simply match the literal
value in the context being serialized/deserialized, otherwise a #ConversionError is raised. Currently, literal
values must be of a plain data type that natively maps to a JSON type, like a boolean, integer, float, string
or #None.r9   r   c                 J   [        UR                  [        5      (       d  [        eUR                  UR                  R
                  ;  aO  [        U USUR                  < SSR                  [        [        UR                  R
                  5      5       35      eUR                  $ )Nzliteral value mismatch: got z, expected |)
r4   r<   r   rB   rA   r   r   r)  r*  r+  )rC   r9   s     r"   rE   LiteralConverter.converta  s    #,,88%%99CLL///!.syym;sxxPSTXZ]ZfZfZmZmPnGoFpq  yyr$   rG   NrH   rG   r$   r"   rs  rs  [  s    
7 quu r$   rs  )7r   r   r   r   typingr?   typeapir   r   r   r   r   r   r	   r
   databind.corer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   TypeVarr   r   r!   r#   r   r   r1   r5   r7   rP   r   r   r   r   r   r   rx   rD  rO  rs  rG   r$   r"   <module>r{     s*       	 	 	    * IIcNU s 5c 5d 5H  "9 "`) `F--	 --`"y "4D$I D$N*y *ZR	 R@@Y @@Fu7i u7p*- *-ZyY yxy r$   