
    H&h                     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__     h/mounts/lovelace/software/anaconda3/envs/py312/lib/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 )z1A is consistent and strictly more specific than Br       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 Br   c              3   V   K   | ]!  \  }}t        ||      xs t        ||       # y wN)r   ).0aabbs      r   	<genexpr>zconsistent.<locals>.<genexpr>2   s*     TB:b"%;B);;Ts   ')Fr   )r   r   r   zipr   r   s         r   
consistentr%   '   s5    u(
1Q4((u(
1Q4(( 1vQT#aQR)TTT3q6kb3q6kbEEbEEeU+Jue4Lu%E):aaE"aE"a 3q6kb3q6k % 1R3q6\WZ5F5W2QTUVQW<Wr   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'   G   s*    aJZ1%5%IAq9I JJr   c                 ^     t        t        t                      t         fd D              S )z3All signature pairs such that A is ambiguous with Bc              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>U   s'     NaJq!$9Aq)99Ns   $'N)hashr'   any)r    r   r   
signaturess    @@r   r#   zambiguities.<locals>.<genexpr>O   sY       7T!WaON:NN 
As   AA)listr   tupleset)r/   s   `r   ambiguitiesr3   L   s.    c%,-J   r   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 ambiguitiesr   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?   Y   sb    JqMA/J///OTUVxX!CZ8c#a&!8cB1EXX8Xs   A<A7!A<7A<c                 ^    t        | |      xr  t        ||        xs  ||        ||      kD  S )zVA 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 )zA 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      sC    %  	w 	1<X@K

Y   	r   