
    i                    *   S 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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JrJrJrJr  S
SK J!r!  \(       a  S
SK"J#r#  SS/r$SS jr%SSS.         SS jjr&\&r'SS jr(      SS jr)g)z.Utilities for union (sum type) disambiguation.    )annotations)defaultdict)Mapping)MISSING)reduce)or_)TYPE_CHECKINGAnyCallableLiteralUnion
get_origin)NOTHING	AttributeAttrsInstance   )NoneTypeadapted_fieldsfields_dictget_argshas
is_literalis_union_type)AttributeOverride)BaseConvertercreate_default_dis_funcis_supported_unionc                ^    [        U 5      =(       a    [        S U R                   5       5      $ )z<Whether the type is a union of attrs classes or dataclasses.c              3  x   #    U  H0  o[         L =(       d    [        [        U5      =(       d    U5      v   M2     g 7fN)r   r   r   ).0es     T/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/cattrs/disambiguators.py	<genexpr>%is_supported_union.<locals>.<genexpr>!   s+      &:FQX0Z]/a00,s   8:)r   all__args__)typs    r#   r   r      s,     # &:=,,& #     Tfrom_converter)use_literals	overridesc          
       ^^^^  [        U5      S:  a  [        S5      eUS:X  a-  U Vs/ s H  n[        U R                  U5      S0 5      PM!     nnOU Vs/ s H  oRPM     nnU(       Ga  U VVs/ s HW  n[	        [        U5      =(       d    U5       Vs1 s H+  n[        UR                  5      (       d  M  UR                  iM-     snPMY     nnnUS   n	U H  n
X-  n	M	     SnSmU	 H  n[        [        5      nU HP  n[        [        [        U5      =(       d    U5      U   R                  5       H  nX   R                  U5        M     MR     UbD  [        S UR                  5        5       5      [        S UR                  5        5       5      ::  d  M  UnUmM     U(       a  T(       a  [        S	 UR                  5        5       5      [        U5      :w  aV  UR!                  5        VVs0 s H-  u  nnU[        U5      S
:X  a  US   O["        [%        U5         _M/     snnmSUU4S jjnU$ ['        X25       VVs/ s H  u  nnU/[)        UU5      Q7PM     nnn0 m UR+                  S SS9  SmU H  u  nnnU Vs/ s H(  nUS   ULd  M  US   T R                  5       ;  d  M&  UPM*     nn[-        [.        S U 5       [1        5       5      nUU-
  n[        [        U5      =(       d    U5      nU H'  nUU   nUU   R2                  [4        [6        4;   d  M'    O   Tc  UmM  [9        U S35      eUT U'   M     Tc
  SU 4S jjnU$ SUU 4S jjnU$ s  snf s  snf s  snf s  snnf s  snnf s  snnf s  snf )ab  Given attrs classes or dataclasses, generate a disambiguation function.

The function is based on unique fields without defaults or unique values.

:param use_literals: Whether to try using fields annotated as literals for
    disambiguation.
:param overrides: Attribute overrides to apply.

.. versionchanged:: 24.1.0
    Dataclasses are now supported.
   zAt least two classes required.r*   r,   r   Nc              3  8   #    U  H  n[        U5      v   M     g 7fr    lenr!   vs     r#   r$   *create_default_dis_func.<locals>.<genexpr>b   s     )K:JQ#a&&:J   c              3  8   #    U  H  n[        U5      v   M     g 7fr    r0   r2   s     r#   r$   r4   b   s      S 41A 4r5   c              3  8   #    U  H  n[        U5      v   M     g 7fr    r0   r2   s     r#   r$   r4   k   s     9$8qCFF$8r5   r   c                T   > [        U [        5      (       d  [        S5      eTU T      $ )Nz"Only input mappings are supported.)
isinstancer   
ValueError)databest_discriminatorfinal_mappings    r#   dis_func)create_default_dis_func.<locals>.dis_funcr   s-    !$00$%IJJ$T*<%=>>r)   c                    [        U S   5      $ )Nr   r0   )c_as    r#   <lambda>)create_default_dis_func.<locals>.<lambda>   s    s3q6{r)   T)keyreversec              3  *   #    U  H	  oS    v   M     g7f)r   N )r!   rA   s     r#   r$   r4      s     !BMSa&Ms   z% has no usable non-default attributesc                   > [        U [        5      (       d  [        S5      eTR                  5        H  u  pX;   d  M  Us  $    [        S5      e)N!Only input mappings are supportedzCouldn't disambiguater9   r   r:   items)r;   kr3   uniq_attrs_dicts      r#   r>   r?      sI    dG,, !DEE'--/9H 0 455r)   c                   > [        U [        5      (       d  [        S5      eTR                  5        H  u  pX;   d  M  Us  $    T$ )NrI   rJ   )r;   rL   r3   fallbackrM   s      r#   r>   r?      sB    dG,, !DEE'--/9H 0 Or)   )r;   Mapping[Any, Any]returnztype | None)r;   rP   rQ   ztype[AttrsInstance] | None)r1   r:   getattrget_structure_hookr   r   r   typenamer   listr   r   appendmaxvaluesrK   r   tuplezip_usable_attribute_namessortr   r   setdefaultr   r   	TypeError)!	converterr+   r,   classesc_clatcls_candidatesdiscriminatorspossible_discriminatorsbest_resultdiscriminatormappingrD   rL   r3   r>   overridecls_and_attrscl_reqsback_mapc_and_aother_classes
other_reqsuniq	cl_fieldsmaybe_renamed_attr_name	orig_namer<   rO   r=   rM   s!                                @@@@r#   r   r   &   s   & 7|a9::$$OV
OV!GI003["Ew 	 
	 )001Y	0  
  )B)=2>>Bbgg& >
  	 
 $2!#4'5#5N (6 !+M!$'G#
2 4"5mDIIC L''+  "c)K'..:J)K&Ks S + 2 2 4S P ' &%2" ," "9K$6$6$899S\I (--//DAq 3q6Q;1Q4E%(O;/M
? ?
 O  33LB 
4%b(343  
 (*O 2DAH!.GX
 )
(qz# (/
/:P:P:R(R ( 	 

 C!BM!BCEJ
#  
2 4"5	'+# !89I#++/AA (,
 rd"GHII35/0- "/0 	6$ O	 	 Os
 1
J  
sG   &MM0%M&M!7M!M&.4M,?M2M8M8*M8!M&c                R    Ub  UR                   c  U R                  $ UR                   $ r    )renamerU   )rf   rm   s     r#   _overriden_namerz      s$    8??2ww??r)   c           	         [        5       n0 n[        [        U 5      =(       d    U 5       HF  nUR                  [	        XAR                  UR                  5      5      =n5        UR                  X5'   MH     X#4$ )z<Return renamed fields and a mapping to original field names.)r^   r   r   addrz   getrU   )re   r,   resrl   rf   ns         r#   r\   r\      s`     %CGZ^1r2_Rrww)?@@AWW
 3 <r)   N)r(   r
   rQ   bool)
ra   r   rb   ztype[AttrsInstance]r+   r   r,   z8dict[str, AttributeOverride] | Literal['from_converter']rQ   z/Callable[[Mapping[Any, Any]], type[Any] | None])rf   r   rm   zAttributeOverride | NonerQ   str)re   z	type[Any]r,   zdict[str, AttributeOverride]rQ   ztuple[set[str], dict[str, str]])*__doc__
__future__r   collectionsr   collections.abcr   dataclassesr   	functoolsr   operatorr   typingr	   r
   r   r   r   r   attrsr   r   r   _compatr   r   r   r   r   r   r   genr   
convertersr   __all__r   r   create_uniq_field_dis_funcrz   r\   rG   r)   r#   <module>r      s    4 " # #    K K 3 3   #)$&:
;  	PP!P P
 	AP 5Pf 5 :$r)   