
    cH                     l    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dS )   )	_toposortgroupby)
isvariadicc                       e Zd ZdS )AmbiguityWarningN)__name__
__module____qualname__     9lib/python3.11/site-packages/multipledispatch/conflict.pyr   r      s        Dr   r   c                    t          |           t          |          k     r+|  o't          |          dk    o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dS |dz  }|dz  }nt          |          r>|t          |           dz
  k    sJ |t          |          dz
  k    ot	          ||          S t          |          r/|t          |          dz
  k    sJ t	          ||          sdS |dz  }|t          |           k     r|t          |          k     |t          |          dz
  k    o|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   
1vvA 1u:Q1:AbE):)::	Q3q66	 13z1a(())) 3q66k 	b3q66k 	bEEbEEu%% E):): !%// ! 5aaE"" SVVaZ''''SVVaZ'DJue,D,DDE"" SVVaZ''''!%// ! 5a 3q66k 	b3q66k 	  SVVaZ0B#a&&L0r   c                 (   | s| pt          |d                   S |s|  pt          | d                   S t          |           t          |          k    r't          d t          | |          D                       S d}d}|t          |           k     r|t          |          k     r| |         }||         }t	          ||          st	          ||          sdS t          |          st          |          s|dz  }|dz  }n)t          |          r|dz  }nt          |          r|dz  }|t          |           k     r|t          |          k     t          |          r|t          |          k    p!t          |          o|t          |           k    S )z= It is possible for an argument list to satisfy both A and B r   c              3   \   K   | ]'\  }}t          ||          pt          ||          V  (d S N)r   ).0aabbs      r   	<genexpr>zconsistent.<locals>.<genexpr>2   sS       , ,r2 b"%%;B);); , , , , , ,r   Fr   )r   r   r   zipr   r   s         r   
consistentr%   '   s     )u(
1Q4((( )u(
1Q4((( 1vvQ 4 , ,!$Q, , , , , 	, 3q66k 	b3q66k 	bEEbEEeU++ Jue4L4L uu%% E):): aaE"" aE"" a 3q66k 	b3q66k 	 5!!2bCFFl 35!!2bCFFl	4r   c                 d    t          | |          o t          | |          pt          ||            S )z> A is consistent with B but neither is strictly more specific )r%   r   )r   r   s     r   	ambiguousr'   I   s3    aJZ1%5%5%IAq9I9I 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   | ]YD ]Tt                    t                    k     "t                    2t          fd D                       NfV  UZdS )c              3   X   K   | ]$}t          |          ot          |          V  %d S r   r   )r    cr   r   s     r   r#   z(ambiguities.<locals>.<genexpr>.<genexpr>T   sP       0 0  &a++@
1a0@0@ 0 0 0 0 0 0r   N)hashr'   anyr    r   r   
signaturess    @@r   r#   zambiguities.<locals>.<genexpr>Q   s       1 1!: 1 1aq''DGG#1Q??1  0 0 0 0 0$.0 0 0 0 011v 1 1 1 1 1 1 1r   )listr   tupleset)r0   s   `r   ambiguitiesr4   N   sQ    c%,,--J 1 1 1 1z 1 1 1 1 1 1r   c                      t           d                   t          fd D                       sJ  fdt                    D             S )z* A signature that would break ambiguities r   c              3   >   K   | ]}t          |          k    V  d S r   )r   )r    sns     r   r#   z"super_signature.<locals>.<genexpr>[   s-      //qs1vv{//////r   c                 b    g | ]*t          fd D             t                    d         +S )c                 P    g | ]"}t                               |                   #S r   )typemro)r    sigis     r   
<listcomp>z.super_signature.<locals>.<listcomp>.<listcomp>]   s)    888c#a&!!888r   )keyr   )maxr   )r    r>   r0   s    @r   r?   z#super_signature.<locals>.<listcomp>]   sQ        8888Z888cBBB1E   r   )r   r   range)r0   r8   s   `@r   super_signaturerC   X   so    JqMA////J////////   1XX   r   c                 t    t          | |          o(t          ||            p ||            ||          k    S )zW A should be checked before B

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

    Topoological sort of edges as given by ``edge`` and ``supercedes``
    c                 B    g | ]}D ]}t          ||          ||fS r   )rF   r/   s      r   r?   zordering.<locals>.<listcomp>s   s7    JJJJJAtAqzzJaVJJJJr   c                     | d         S )Nr   r   )xs    r   <lambda>zordering.<locals>.<lambda>t   s
    ad r   c              3   8   K   | ]\  }}|d  |D             fV  dS )c                     g | ]\  }}|S r   r   )r    r   r   s      r   r?   z&ordering.<locals>.<genexpr>.<listcomp>x   s    &&&DAqa&&&r   Nr   )r    kvs      r   r#   zordering.<locals>.<genexpr>x   s:      BBDAq!&&A&&&'BBBBBBr   )r1   r   r2   r   dictitemsr   )r0   edgesr7   s   `  r   orderingrS   m   s    
 c%,,--JJJJJZJJJENNE**E  E> 	E!HBBEKKMMBBBBBEUr   N)utilsr   r   variadicr   Warningr   r   r%   r'   r4   rC   r-   rF   rS   r   r   r   <module>rW      s    % % % % % % % %            	 	 	 	 	w 	 	 	1 1 1<4 4 4DK K K
1 1 1     	 	 	 	    r   