
    UBeH                     d    d dl mZmZ d dlmZ  G d de      Zd Zd Zd Z	d Z
d	 Zefd
Zd Zy)   )	_toposortgroupby)
isvariadicc                       e Zd Zy)AmbiguityWarningN)__name__
__module____qualname__     9lib/python3.12/site-packages/multipledispatch/conflict.pyr   r      s    r   r   c                    t        |       t        |      k  r#|  xr t        |      dk(  xr t        |d         S t        |       t        |      k(  rt        t        t        | |            S d}d}|t        |       k  r|t        |      k  r| |   }||   }t        |      s#t        |      st	        ||      sy|dz  }|dz  }nmt        |      r2|t        |       dz
  k(  sJ |t        |      dz
  k(  xr t	        ||      S t        |      r%|t        |      dz
  k(  sJ t	        ||      sy|dz  }|t        |       k  r|t        |      k  r|t        |      dz
  k(  xr |t        |       k(  S )z3 A is consistent and strictly more specific than B r       F)lenr   allmap
issubclassabp1p2cur_acur_bs         r   
supercedesr   	   s]   
1vAu:Q1:AbE)::	Q3q6	3z1a()) 3q6kb3q6kbEEbEEu%E):!%/ aaE"SVaZ''SVaZ'DJue,DDE"SVaZ''!%/ a 3q6kb3q6k  SVaZ0B#a&L0r   c                 p   | s| xs t        |d         S |s|  xs t        | d         S t        |       t        |      k(  rt        d t        | |      D              S d}d}|t        |       k  r|t        |      k  r| |   }||   }t	        ||      st	        ||      syt        |      st        |      s|dz  }|dz  }n!t        |      r|dz  }nt        |      r|dz  }|t        |       k  r|t        |      k  rt              xr |t        |      k(  xs t              xr |t        |       k(  S )z= It is possible for an argument list to satisfy both A and B r   c              3   V   K   | ]!  \  }}t        ||      xs t        ||       # y wN)r   ).0aabbs      r   	<genexpr>zconsistent.<locals>.<genexpr>2   s2      ,r2 b"%;B);; ,s   ')Fr   )r   r   r   zipr   r   s         r   
consistentr%   '   sA    u(
1Q4((u(
1Q4(( 1vQ ,!$Q, , 	, 3q6kb3q6kbEEbEEeU+Jue4Lu%E):aaE"aE"a 3q6kb3q6k 5!2bCFl 35!2bCFl	4r   c                 T    t        | |      xr t        | |      xs t        ||        S )z> A is consistent with B but neither is strictly more specific )r%   r   )r   r   s     r   	ambiguousr'   I   s*    aJZ1%5%IAq9I JJr   c                 ^     t        t        t                      t         fd D              S )z5 All signature pairs such that A is ambiguous with B c              3      K   | ]G  D ]@  t              t              k  r't              rt        fd D              sf B I yw)c              3   R   K   | ]  }t        |      xr t        |         y wr   r   )r    cr   r   s     r   r#   z(ambiguities.<locals>.<genexpr>.<genexpr>T   s/      0  &a+@
1a0@@ 0s   $'N)hashr'   any)r    r   r   
signaturess    @@r   r#   zambiguities.<locals>.<genexpr>Q   sZ      1!: 1aq'DG#Q? 0$.0 0 1v 1v 1s   AA)listr   tupleset)r/   s   `r   ambiguitiesr3   N   s-    c%,-J 1z 1 1 1r   c                    t        | d         t        fd| D              sJ t              D cg c]:  }t        | D cg c]  }t        j                  ||          c}t               d   < c}}S c c}w c c}}w )z* A signature that would break ambiguities r   c              3   :   K   | ]  }t        |      k(    y wr   )r   )r    sns     r   r#   z"super_signature.<locals>.<genexpr>[   s     /qs1v{/s   )key)r   r   rangemaxtypemro)r/   isigr7   s      @r   super_signaturer?   X   so    JqMA/J/// 1X Z8c#a&!8cB1E  8 s   A<A7!A<7A<c                 ^    t        | |      xr  t        ||        xs  ||        ||      kD  S )zW A should be checked before B

    Tie broken by tie_breaker, defaults to ``hash``
    r+   )r   r   tie_breakers      r   edgerB   a   s7     a q!?AQ ?r   c           	          t        t        t        |             } | D cg c]  }| D ]  }t        ||      s||f  }}}t	        d |      }| D ]  }||vsg ||<    t        d |j                         D              }t        |      S c c}}w )z A sane ordering of signatures to check, first to last

    Topoological sort of edges as given by ``edge`` and ``supercedes``
    c                     | d   S )Nr   r   )xs    r   <lambda>zordering.<locals>.<lambda>t   s
    ad r   c              3   \   K   | ]  \  }}||D cg c]  \  }}|	 c}}f   y c c}}w wr   r   )r    kvr   r   s        r   r#   zordering.<locals>.<genexpr>x   s+     BDAq!A&DAqa&'B&s   ,&
,)r0   r   r1   rB   r   dictitemsr   )r/   r   r   edgesr6   s        r   orderingrM   m   s    
 c%,-J'JJAtAqzaVJVJEJNE*E E>E!H BEKKMBBEU Ks
   B
B
N)utilsr   r   variadicr   Warningr   r   r%   r'   r3   r?   r-   rB   rM   r   r   r   <module>rQ      sA    %  	w 	1<4DK
1   	r   