Ë
    |D™jÏ  ã                  ó  — d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZmZmZmZmZmZ dd	lmZmZmZ d
dlmZmZmZmZmZmZmZ d
dl m!Z! erd
dl"m#Z# ddgZ$dd„Z%dddœ	 	 	 	 	 	 	 	 	 dd„Z&e&Z'dd„Z(	 	 	 	 	 	 dd„Z)y)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                óT   — t        | «      xr t        d„ | j                  D «       «      S )z<Whether the type is a union of attrs classes or dataclasses.c              3  ó`   K  — | ]&  }|t         u xs t        t        |«      xs |«      –— Œ( y ­w©N)r   r   r   )Ú.0Úes     úa/var/www/html/Astrologybackend/backend/venv/lib/python3.12/site-packages/cattrs/disambiguators.pyú	<genexpr>z%is_supported_union.<locals>.<genexpr>!   s/   è ø€ ò &Ø56ˆŒXˆÒ0œœZ¨›]Ò/¨aÓ0Ó0ñ&ùs   ‚,.)r   ÚallÚ__args__)Útyps    r#   r   r      s,   € ä˜Óò ¤#ñ &Ø:=¿,¹,ô&ó #ð ó    TÚfrom_converter)Úuse_literalsÚ	overridesc          
     óJ  ‡‡‡‡ — t        |«      dk  rt        d«      ‚|dk(  r*|D �cg c]  }t        | j                  |«      di «      ‘Œ  }}n|D �cg c]  }|‘Œ }}|�r•|D ��cg c]G  }t	        t        |«      xs |«      D �ch c]#  }t        |j                  «      r|j                  ’Œ% c}‘ŒI }}}|d   }	|D ]  }
|	|
z  }	Œ	 d}dŠ|	D ]§  }t        t        «      }|D ]I  }t        t        t        |«      xs |«      |   j                  «      D ]  }||   j                  |«       Œ ŒK |�Bt        d„ |j                  «       D «       «      t        d„ |j                  «       D «       «      k  sŒ¤|}|ŠŒ© |r~‰r|t        d	„ |j                  «       D «       «      t        |«      k7  rP|j!                  «       D ��ci c]+  \  }}|t        |«      d
k(  r|d   nt"        t%        |«         “Œ- c}}Šdˆˆfd„}|S t'        ||«      D ��cg c]  \  }}|gt)        ||«      ¢­‘Œ }}}i Š |j+                  d„ d¬«       dŠ|D ]¯  \  }}}|D �cg c]   }|d   |ur|d   ‰ j                  «       vr|‘Œ" }}t-        t.        d„ |D «       t1        «       «      }||z
  }t        t        |«      xs |«      }|D ]$  }||   }||   j2                  t4        t6        fv sŒ$ n ‰€|ŠŒ�t9        |› d�«      ‚|‰ |<   Œ± ‰€dˆ fd„}|S dˆˆ fd„}|S c c}w c c}w c c}w c c}}w c c}}w c c}}w c c}w )a~  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  ó2   K  — | ]  }t        |«      –— Œ y ­wr    ©Úlen©r!   Úvs     r#   r$   z*create_default_dis_func.<locals>.<genexpr>b   s   è ø€ Ò)K°Q¬#¨a¯&Ñ)Kùó   ‚c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr    r/   r1   s     r#   r$   z*create_default_dis_func.<locals>.<genexpr>b   s   è ø€ ò SØ”�A—ñSùr3   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr    r/   r1   s     r#   r$   z*create_default_dis_func.<locals>.<genexpr>k   s   è ø€ Ò9˜q”C˜—FÑ9ùr3   r   c                óJ   •— t        | t        «      st        d«      ‚‰| ‰      S )Nz"Only input mappings are supported.)Ú
isinstancer   Ú
ValueError)ÚdataÚbest_discriminatorÚfinal_mappings    €€r#   Údis_funcz)create_default_dis_func.<locals>.dis_funcr   s*   ø€ Ü! $¬Ô0Ü$Ð%IÓJÐJØ$ TÐ*<Ñ%=Ñ>Ð>r(   c                ó   — t        | d   «      S )Nr   r/   )Úc_as    r#   ú<lambda>z)create_default_dis_func.<locals>.<lambda>†   s   € ¤s¨3¨q©6£{€ r(   T)ÚkeyÚreversec              3  ó&   K  — | ]	  }|d    –— Œ y­w)r   N© )r!   r>   s     r#   r$   z*create_default_dis_func.<locals>.<genexpr>’   s   è ø€ Ò!B¨S # a¥&Ñ!Bùs   ‚z% has no usable non-default attributesc                ó�   •— t        | t        «      st        d«      ‚‰j                  «       D ]  \  }}|| v sŒ|c S  t        d«      ‚)Nú!Only input mappings are supportedzCouldn't disambiguate©r7   r   r8   Úitems)r9   Úkr2   Úuniq_attrs_dicts      €r#   r<   z)create_default_dis_func.<locals>.dis_func¤   sO   ø€ Ü˜d¤GÔ,Ü Ð!DÓEÐEØ'×-Ñ-Ó/ò ‘��1Ø˜’9Ø’Hðô Ð4Ó5Ð5r(   c                ó~   •— t        | t        «      st        d«      ‚‰j                  «       D ]  \  }}|| v sŒ|c S  ‰S )NrE   rF   )r9   rH   r2   ÚfallbackrI   s      €€r#   r<   z)create_default_dis_func.<locals>.dis_func®   sH   ø€ Ü˜d¤GÔ,Ü Ð!DÓEÐEØ'×-Ñ-Ó/ò ‘��1Ø˜’9Ø’Hðð ˆOr(   )r9   úMapping[Any, Any]Úreturnztype | None)r9   rL   rM   ztype[AttrsInstance] | None)r0   r8   ÚgetattrÚget_structure_hookr   r   r   ÚtypeÚnamer   Úlistr   r   ÚappendÚmaxÚvaluesrG   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Úmappingr@   rH   r2   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:   rK   r;   rI   s!                                @@@@r#   r   r   &   s¹  û€ ô& ˆ7ƒ|�aÒÜÐ9Ó:Ð:àÐ$Ò$àOVö
ØJKŒG�I×0Ñ0°Ó3°[À"ÕEð
ˆ	ñ 
ð )0Ö0 1’YÐ0ˆ	Ð0ò ð ÷
ð ô )¬°B«Ò)=¸2Ó>öàÜ˜bŸg™gÔ&ð —“ôð
ˆñ 
ð $2°!Ñ#4ˆØ'5ò 	6Ð#ØÐ5Ñ5‰Nð	6ð ˆØ!ÐØ+ò 	3ˆMä!¤$Ó'ˆGàò ,�Ü#Ü¤
¨2£Ò 4°"Ó5°mÑD×IÑIóò ,�Cð ˜C‘L×'Ñ'¨Õ+ñ,ð,ð Ð"¤cÑ)K¸'¿.¹.Ó:JÔ)KÓ&KÌsñ SØ +× 2Ñ 2Ó 4ôSó Pó 'ð &�Ø%2Ñ"ð	3ñ" Ù"ÜÑ9 K×$6Ñ$6Ó$8Ô9Ó9¼SÀ»\ÒIð (×-Ñ-Ó/÷á�A�qð œ3˜q›6 Qš;�1�Q’4¬E´%¸³(©OÑ;óˆMö
?ð
 ˆOô   ¨Ó3÷áˆB�ð 
Ð4Ô% b¨(Ó3Ó4ð€Mñ ð
 (*€Oð ×ÑÑ2¸DÐÔAà€Hà!.ò 6ÑˆˆG�Xð
 )ö
àØ�q‰z Ñ#¨°©
¸/×:PÑ:PÓ:RÑ(Rò ð
ˆð 
ô
 œCÑ!B°MÔ!BÄCÃEÓJˆ
Ø˜Ñ#ˆô  ¤
¨2£Ò 4°"Ó5ˆ	Ø'+ò 	JÐ#Ø Ð!8Ñ9ˆIØ˜Ñ#×+Ñ+´¼Ð/AÒAÙð	Jð
 ÐØ�ØÜ˜r˜dÐ"GÐHÓIÐIØ35ˆÐ/Ò0ð-6ð0 Ðõ	6ð$ €Oö	ð €Oùòs
ùò 1ùòùó
ùóJùó ùò 
s5   §#K?Á	LÁ$LÂ(L	Â+LÆ70LÈLÉ%L Ì	Lc                óN   — |�|j                   €| j                  S |j                   S r    )ÚrenamerQ   )rb   ri   s     r#   Ú_overriden_namerv   ¼   s$   € ØÐ˜8Ÿ?™?Ð2Ø�w‰wˆØ�?‰?Ðr(   c           	     óæ   — t        «       }i }t        t        | «      xs | «      D ]G  }|j                  t	        ||j                  |j                  «      «      x}«       |j                  ||<   ŒI ||fS )z<Return renamed fields and a mapping to original field names.)rZ   r   r   Úaddrv   ÚgetrQ   )ra   r+   Úresrh   rb   Úns         r#   rX   rX   Â   sk   € ô ‹%€CØ€GäœZ¨›^Ò1¨rÓ2ò ˆØ�‰”_ R¨¯©°r·w±wÓ)?Ó@Ð@�ÔAØ—W‘Wˆ�Š
ðð �ˆ<Ðr(   N)r'   r
   rM   Úbool)
r]   r   r^   ztype[AttrsInstance]r*   r|   r+   z8dict[str, AttributeOverride] | Literal['from_converter']rM   z/Callable[[Mapping[Any, Any]], type[Any] | None])rb   r   ri   zAttributeOverride | NonerM   Ústr)ra   z	type[Any]r+   zdict[str, AttributeOverride]rM   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_funcrv   rX   rC   r(   r#   ú<module>rŒ      s¿   ðÙ 4å "å #Ý #Ý Ý Ý ß K× Kç 3Ñ 3÷÷ ñ õ #áÝ)à$Ð&:Ð
;€óð ð 	ñPØðPà!ðPð ðPð
 	AðPð 5óPðf 5Ð óðØðØ:ðà$ôr(   