
    i|                    |   % S SK Jr  S SKJrJr  S SK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  \(       a  SSKJr  \rS	\S
'   \rS	\S'   \rS	\S'   \\\/\4   rS	\S'   \\/\4   rS	\S'   \" S\\5      r\\/\4   rS	\S'   \ " S S5      5       r\ " S S5      5       r\" SS9 " S S\	\   5      5       rg)    )annotations)	lru_cachesingledispatch)TYPE_CHECKINGAnyCallableGenericLiteralTypeVar)Factorydefine   )	TypeAlias)	Predicate)BaseConverterr   
TargetTypeUnstructuredValueStructuredValueStructureHookUnstructureHookHookHookFactoryc                      \ rS rSrSrSrg)_DispatchNotFound   z4A dummy object to help signify a dispatch not found. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       N/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/cattrs/dispatch.pyr   r      s    >r#   r   c                  |    \ rS rSr% SrS\S'   \" \5      rS\S'     S     SS jjr	SS jr
SS	 jrSSS
 jjrSrg)FunctionDispatch   a  
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                @    U R                   R                  SXX445        g )Nr   )r)   insert)self	predicatefuncis_generatortakes_converters        r$   registerFunctionDispatch.register3   s     	""1y&VWr#   c                    U R                    HF  u  p#pE U" U5      nU(       d  M  U(       a%  U(       a  U" XR                  5      s  $ U" U5      s  $ Us  $    g! [         a     MX  f = f)z7
Return the appropriate handler for the object passed.
N)r)   	Exceptionr(   )r,   typ
can_handlehandlerr/   r0   chs          r$   dispatchFunctionDispatch.dispatch<   so     CGBUBU>J_ r&&sOO<<"3<' CV   s   A
A&%A&c                ,    [        U R                  5      $ N)lenr)   r,   s    r$   get_num_fnsFunctionDispatch.get_num_fnsQ   s    4&&''r#   c                H    U R                   S U*  UR                   -   Ul         g r<   )r)   )r,   otherskips      r$   copy_toFunctionDispatch.copy_toT   s$    #226TE:U=Q=QQr#   r   N)FF)r-   r   r.   zCallable[..., Any]returnNone)r5   r   rF   zCallable[..., Any] | NonerF   intr   )rB   r&   rC   rI   rF   rG   )r   r   r   r    r!   __annotations__r   listr)   r1   r9   r?   rD   r"   r   r#   r$   r&   r&      sf      Q  XX !X 
X*(R Rr#   r&   F)initc                      \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'   S\S'         SS jrSS jrSSS jjr  SS jr	SS jr
SS jrSS jrSSS jjrSrg) MultiStrategyDispatchX   a  
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]r9   c                    Xl         0 U l        [        U5      U l        [	        [
        5      U l        [        S S9" U R                  5      U l	        g )N)maxsize)
rR   rS   r&   rT   r   r   rU   r   dispatch_without_cachingr9   )r,   fallback_factory	converters      r$   __init__MultiStrategyDispatch.__init__o   sD     "2 ""29"= ./@ A!$/0M0MNr#   c                    U R                   R                  U5      nU[        La  U$  U R                  R                  U5      nUb  U$ U R                  R                  U5      nUb  U$ U R                  U5      $ ! [         a     N]f = f)z4Dispatch on the type but without caching the result.)rU   r9   r   r4   rS   getrT   rR   )r,   r5   r9   direct_dispatchress        r$   rX   .MultiStrategyDispatch.dispatch_without_cachingx   s    	,,55c:H00 1
 //33C8&""%%..s3osF4+A+A#+FF  		s   %A: :
BBc                    U HG  u  p4U(       a  X@R                   U'   M  U R                  R                  X45        U R                  5         MI     U R                  R                  5         g)z-Register a class to direct or singledispatch.N)rS   rU   r1   clear_directr9   cache_clear)r,   cls_and_handlerdirectclsr7   s        r$   register_cls_list'MultiStrategyDispatch.register_cls_list   sQ    +LC-4%%c*%%..s<!!# , 	!!#r#   c                N   U Hu  n[        U5      S:X  a!  Uu  p4U R                  R                  X45        M3  Uu  p4nUS:X  a  U R                  R                  X4USS9  M[  U R                  R                  X4US9  Mw     U R                  5         U R                  R                  5         g)a	  
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/   r0   )r/   N)r=   rT   r1   rc   r9   rd   )r,   pred_and_handlertupr.   r7   is_gens         r$   register_func_list(MultiStrategyDispatch.register_func_list   s      $C3x1} #''00?(+%vZ'++44FD 5  ++44TQW4X $ 	!!#r#   c                8    U R                   R                  5         g)zClear the direct dispatch.N)rS   clearr>   s    r$   rc   "MultiStrategyDispatch.clear_direct   s    ##%r#   c                l    U R                   R                  5         U R                  R                  5         g)zClear all caches.N)rS   rs   r9   rd   r>   s    r$   clear_cache!MultiStrategyDispatch.clear_cache   s$    ##%!!#r#   c                6    U R                   R                  5       $ r<   )rT   r?   r>   s    r$   r?   !MultiStrategyDispatch.get_num_fns   s    &&2244r#   c                    U R                   R                  UR                   US9  U R                  R                  R	                  5        H   u  p4UR                  R                  X45        M"     UR                  5         g )N)rC   )rT   rD   rU   registryitemsr1   rv   )r,   rB   rC   rg   fns        r$   rD   MultiStrategyDispatch.copy_to   sb    ''(@(@t'L,,55;;=GC""++C4 >r#   )rS   rR   rT   rU   r9   N)rY   rQ   rZ   r   rF   rG   )r5   r   rF   r   )F)rf   boolrF   rG   )rm   zlist[tuple[Predicate, Any] | tuple[Predicate, Any, bool] | tuple[Predicate, Callable[[Any, BaseConverter], Any], Literal['extended']]])rF   rG   rH   rJ   )rB   rO   rC   rI   rF   rG   )r   r   r   r    r!   rK   r[   rX   rh   rp   rc   rv   r?   rD   r"   r   r#   r$   rO   rO   X   s{     )(,,((99O 1O>KO	OG $$
$>&$
5 r#   rO   N) 
__future__r   	functoolsr   r   typingr   r   r   r	   r
   r   attrsr   r   _compatr   fnsr   
convertersr   r   rK   r   r   r   r   r   r   r   r&   rO   r   r#   r$   <module>r      s    " / J J !  )
I " 9 "   #%6
$C_$TUy U%&79J&JK Kv}o6!:,"45Y 5 ? ? ? 6R 6R 6Rr UhGDM h hr#   