Ë
    |D™j|  ã                  óx  — U d dl mZ d dlmZmZ d dlmZmZmZm	Z	m
Z
mZ d dlmZmZ ddlmZ ddlmZ erddlmZ eZd	ed
<   eZd	ed<   eZd	ed<   eeegef   Zd	ed<   eegef   Zd	ed<    edee«      Zeegef   Zd	ed<   e G d„ d«      «       Ze G d„ d«      «       Z ed¬«       G d„ de	e   «      «       Zy)é    )Úannotations)Ú	lru_cacheÚsingledispatch)ÚTYPE_CHECKINGÚAnyÚCallableÚGenericÚLiteralÚTypeVar)ÚFactoryÚdefineé   )Ú	TypeAlias)Ú	Predicate)ÚBaseConverterr   Ú
TargetTypeÚUnstructuredValueÚStructuredValueÚStructureHookÚUnstructureHookÚHookÚHookFactoryc                  ó   — e Zd ZdZy)Ú_DispatchNotFoundz4A dummy object to help signify a dispatch not found.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ú[/var/www/html/Astrologybackend/backend/venv/lib/python3.12/site-packages/cattrs/dispatch.pyr   r      s   „ â>r    r   c                  óh   — e Zd ZU dZded<    ee«      Zded<   	 	 d	 	 	 	 	 dd„Zdd„Z	dd„Z
ddd	„Zy
)ÚFunctionDispatchaô  
    FunctionDispatch is similar to functools.singledispatch, but
    instead dispatches based on functions that take the type of the
    first argument in the method, and return True or False.

    objects that help determine dispatch should be instantiated objects.

    :param converter: A converter to be used for factories that require converters.

    ..  versionchanged:: 24.1.0
        Support for factories that require converters, hence this requires a
        converter when creating.
    r   Ú
_converterz=list[tuple[Predicate, Callable[[Any, Any], Any], bool, bool]]Ú_handler_pairsc                óD   — | j                   j                  d||||f«       y )Nr   )r%   Úinsert)ÚselfÚ	predicateÚfuncÚis_generatorÚtakes_converters        r!   ÚregisterzFunctionDispatch.register3   s#   € ð 	×Ñ×"Ñ" 1 y°$¸ÀoÐ&VÕWr    c                ó²   — | j                   D ]9  \  }}}}	  ||«      }|sŒ|r!|r ||| j                  «      c S  ||«      c S |c S  y# t        $ r Y ŒHw xY w)zG
        Return the appropriate handler for the object passed.
        N)r%   Ú	Exceptionr$   )r(   ÚtypÚ
can_handleÚhandlerr+   r,   Úchs          r!   ÚdispatchzFunctionDispatch.dispatch<   sv   € ð CG×BUÑBUò 	Ñ>ˆJ˜ ¨ðÙ “_�ò ÙÙ&Ù& s¨D¯O©OÓ<Ò<Ù" 3›<Ò'à’ð	ð øô ò Ùðús   –A
Á
	AÁAc                ó,   — t        | j                  «      S ©N)Úlenr%   ©r(   s    r!   Úget_num_fnszFunctionDispatch.get_num_fnsQ   s   € Ü�4×&Ñ&Ó'Ð'r    c                óH   — | j                   d |  |j                   z   |_         y r6   )r%   )r(   ÚotherÚskips      r!   Úcopy_tozFunctionDispatch.copy_toT   s$   € Ø#×2Ñ2°6°T°EÐ:¸U×=QÑ=QÑQˆÕr    N)FF)r)   r   r*   zCallable[..., Any]ÚreturnÚNone)r0   r   r>   zCallable[..., Any] | None©r>   Úint©r   )r;   r#   r<   rA   r>   r?   )r   r   r   r   Ú__annotations__r   Úlistr%   r-   r4   r9   r=   r   r    r!   r#   r#      s`   … ñð Óá�‹ð ÐQó ð ØðXàðXð !ðXð 
óXóó*(õRr    r#   F)Úinitc                  ó˜   — e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   	 	 	 	 	 	 dd„Zdd„Zddd„Z	 	 dd„Zdd„Z	dd„Z
dd„Zddd„Zy)ÚMultiStrategyDispatchaý  
    MultiStrategyDispatch uses a combination of exact-match dispatch,
    singledispatch, and FunctionDispatch.

    :param fallback_factory: A hook factory to be called when a hook cannot be
        produced.
    :param converter: A converter to be used for factories that require converters.

    .. versionchanged:: 23.2.0
        Fallbacks are now factories.
    .. versionchanged:: 24.1.0
        Support for factories that require converters, hence this requires a
        converter when creating.
    úHookFactory[Hook]Ú_fallback_factoryzdict[TargetType, Hook]Ú_direct_dispatchr#   Ú_function_dispatchr   Ú_single_dispatchz+Callable[[TargetType, BaseConverter], Hook]r4   c                óª   — || _         i | _        t        |«      | _        t	        t
        «      | _         t        d ¬«      | j                  «      | _	        y )N)Úmaxsize)
rI   rJ   r#   rK   r   r   rL   r   Údispatch_without_cachingr4   )r(   Úfallback_factoryÚ	converters      r!   Ú__init__zMultiStrategyDispatch.__init__o   sH   € ð "2ˆÔØ "ˆÔÜ"2°9Ó"=ˆÔÜ .Ô/@Ó AˆÔØ/œ	¨$Ô/°×0MÑ0MÓNˆ�r    c                ó  — 	 | j                   j                  |«      }|t        ur|S 	 | j                  j                  |«      }|�|S | j                  j                  |«      }|�|S | j                  |«      S # t        $ r Y ŒZw xY w)z4Dispatch on the type but without caching the result.)rL   r4   r   r/   rJ   ÚgetrK   rI   )r(   r0   r4   Údirect_dispatchÚress        r!   rO   z.MultiStrategyDispatch.dispatch_without_cachingx   s˜   € ð	Ø×,Ñ,×5Ñ5°cÓ:ˆHØÔ0Ñ0Ø�ð 1ð
 ×/Ñ/×3Ñ3°CÓ8ˆØÐ&Ø"Ð"à×%Ñ%×.Ñ.¨sÓ3ˆØ�oˆsÐF¨4×+AÑ+AÀ#Ó+FÐFøô ò 	Ùð	ús   ‚$A7 Á7	BÂBc                óÈ   — |D ]C  \  }}|r|| j                   |<   Œ| j                  j                  ||«       | j                  «        ŒE | j                  j                  «        y)z-Register a class to direct or singledispatch.N)rJ   rL   r-   Úclear_directr4   Úcache_clear)r(   Úcls_and_handlerÚdirectÚclsr2   s        r!   Úregister_cls_listz'MultiStrategyDispatch.register_cls_listˆ   s\   € à+ò 	$‰LˆC�ÙØ-4�×%Ñ% cÒ*à×%Ñ%×.Ñ.¨s°GÔ<Ø×!Ñ!Õ#ð	$ð 	�‰×!Ñ!Õ#r    c                óX  — |D ]{  }t        |«      dk(  r"|\  }}| j                  j                  ||«       Œ3|\  }}}|dk(  r | j                  j                  |||d¬«       Œ^| j                  j                  |||¬«       Œ} | j                  «        | j                  j                  «        y)a9  
        Register a predicate function to determine if the handler
        should be used for the type.

        :param pred_and_handler: The list of predicates and their associated
            handlers. If a handler is registered in `extended` mode, it's a
            factory that requires a converter.
        é   ÚextendedT)r+   r,   )r+   N)r7   rK   r-   rX   r4   rY   )r(   Úpred_and_handlerÚtupr*   r2   Úis_gens         r!   Úregister_func_listz(MultiStrategyDispatch.register_func_list’   s±   € ð  $ò 	YˆCÜ�3‹x˜1Š}Ø #‘��gØ×'Ñ'×0Ñ0°°wÕ?à(+Ñ%��g˜vØ˜ZÒ'Ø×+Ñ+×4Ñ4Ø˜g°FÈDð 5õ ð ×+Ñ+×4Ñ4°T¸7ÐQWÐ4ÕXð	Yð 	×ÑÔØ�‰×!Ñ!Õ#r    c                ó8   — | j                   j                  «        y)zClear the direct dispatch.N)rJ   Úclearr8   s    r!   rX   z"MultiStrategyDispatch.clear_direct±   s   € à×Ñ×#Ñ#Õ%r    c                ól   — | j                   j                  «        | j                  j                  «        y)zClear all caches.N)rJ   rf   r4   rY   r8   s    r!   Úclear_cachez!MultiStrategyDispatch.clear_cacheµ   s$   € à×Ñ×#Ñ#Ô%Ø�‰×!Ñ!Õ#r    c                ó6   — | j                   j                  «       S r6   )rK   r9   r8   s    r!   r9   z!MultiStrategyDispatch.get_num_fnsº   s   € Ø×&Ñ&×2Ñ2Ó4Ð4r    c                ó  — | j                   j                  |j                   |¬«       | j                  j                  j	                  «       D ]!  \  }}|j                  j                  ||«       Œ# |j                  «        y )N)r<   )rK   r=   rL   ÚregistryÚitemsr-   rh   )r(   r;   r<   r\   Úfns        r!   r=   zMultiStrategyDispatch.copy_to½   sk   € Ø×Ñ×'Ñ'¨×(@Ñ(@ÀtÐ'ÔLØ×,Ñ,×5Ñ5×;Ñ;Ó=ò 	5‰GˆC�Ø×"Ñ"×+Ñ+¨C°Õ4ð	5à×ÑÕr    N)rP   rH   rQ   r   r>   r?   )r0   r   r>   r   )F)r[   Úboolr>   r?   )ra   z†list[tuple[Predicate, Any] | tuple[Predicate, Any, bool] | tuple[Predicate, Callable[[Any, BaseConverter], Any], Literal['extended']]])r>   r?   r@   rB   )r;   rG   r<   rA   r>   r?   )r   r   r   r   rC   rR   rO   r]   rd   rX   rh   r9   r=   r   r    r!   rG   rG   X   sv   … ñð )Ó(Ø,Ó,Ø(Ó(ØÓØ9Ó9ðOØ 1ðOØ>KðOà	óOóGô $ð$ð
ó$ó>&ó$ó
5õr    rG   N) Ú
__future__r   Ú	functoolsr   r   Útypingr   r   r   r	   r
   r   Úattrsr   r   Ú_compatr   Úfnsr   Ú
convertersr   r   rC   r   r   r   r   r   r   r   r#   rG   r   r    r!   ú<module>rv      sò   ðÞ "ç /ß J× Jç !å Ý áÝ)à€
ˆIÓ Ø"Ð �9Ó "Ø €�Ó  à#Ð%6¸
Ð$CÀ_Ð$TÑU€ˆyÓ UØ% Ð&7Ð9JÐ&JÑK€�Ó Káˆv�} oÓ6€Ø! : ,°Ð"4Ñ5€ˆYÓ 5ð ÷?ð ?ó ð?ð ÷6Rð 6Ró ð6Rñr ˆUÔôh˜G D™Mó hó ñhr    