
    [ThV                         S SK JrJr  S SKJrJr  S SKJrJr  S SK	J
r
   " S S5      r " S S\5      r0 rS	 rS
 r\4S jrS rg)   )reifyunify)firstgroupby)	_toposortfreeze)isvarc                   2    \ rS rSrS rS rS rS rS rSr	g)	
Dispatcher   c                 ,    Xl         0 U l        / U l        g N)namefuncsordering)selfr   s     _/var/www/auris/envauris/lib/python3.13/site-packages/torch/fx/experimental/unification/match.py__init__Dispatcher.__init__	   s    	
    c                 f    X R                   [        U5      '   [        U R                   5      U l        g r   )r   r   r   )r   	signaturefuncs      r   addDispatcher.add   s#    (,

6)$% ,r   c                 8    U R                  U5      u  p4U" U0 UD6$ r   )resolve)r   argskwargsr   _s        r   __call__Dispatcher.__call__   s"    ,,t$T$V$$r   c                    [        U5      nU R                   HB  n[        U5      U:w  a  M  [        [        U5      U5      nUSLd  M0  U R                  U   nXT4s  $    [        S[        U R                  5      -   S-   [        U5      -   5      e)NFz No match found. 
Known matches: z
Input: )lenr   r   r   r   NotImplementedErrorstr)r   r   nr   sresults         r   r   Dispatcher.resolve   s    II9~"fTlI.A~I.y  ' "/$-- ! $i
 	
r   c                    ^ ^ U U4S jnU$ )Nc                 ,   > TR                  TU 5        T$ r   )r   )r   r   r   s    r   r    Dispatcher.register.<locals>._'   s    HHY%Kr    )r   r   r    s   `` r   registerDispatcher.register&   s    	 r   )r   r   r   N)
__name__
__module____qualname____firstlineno__r   r   r!   r   r/   __static_attributes__r.   r   r   r   r      s    
-%
 r   r   c                       \ rS rSrSrS rSrg)VarDispatcher.   a   A dispatcher that calls functions with variable names
>>> # xdoctest: +SKIP
>>> d = VarDispatcher("d")
>>> x = var("x")
>>> @d.register("inc", x)
... def f(x):
...     return x + 1
>>> @d.register("double", x)
... def f(x):
...     return x * 2
>>> d("inc", 10)
11
>>> d("double", 10)
20
c                     U R                  U5      u  p4UR                  5        VVs0 s H  u  pVUR                  U_M     nnnU" S0 UD6$ s  snnf )Nr.   )r   itemstoken)r   r   r   r   r(   kvds           r   r!   VarDispatcher.__call__?   sG    ,,t$$%GGI.IDAQWWaZI.yay /s   Ar.   N)r1   r2   r3   r4   __doc__r!   r5   r.   r   r   r7   r7   .   s     r   r7   c                  t   ^ ^^ UR                  S[        5      mUR                  S[        5      mUUU 4S jnU$ )N	namespacer   c                 p   > U R                   nUT;  a  T" U5      TU'   TU   nUR                  TU 5        U$ r   )r1   r   )r   r   r>   
dispatcherrB   r   s      r   r    match.<locals>._L   s>    }}y (.IdOdO	ir   )getglobal_namespacer   )r   r   r    rD   rB   s   `  @@r   matchrH   H   s0    

;(89IL*5J	 Hr   c                 @   [        U5      (       a  [        U 5      (       d  g[        X5      nUSL a  gUR                  5        VVs0 s H)  u  p4[        U5      (       a  [        U5      (       a  M'  X4_M+     nnn[        X5      U :X  a  g[        X5      U:X  a  ggs  snnf )z)``a`` is a more specific match than ``b``TFN)r	   r   r:   r   )abr(   r<   r=   s        r   
supercedesrL   Z   s    QxxaaAEz'')D)$!58858)ADQ{aQ{a  	Es   &B0Bc                 h    [        X5      (       a"  [        X5      (       a  U" U 5      U" U5      :  $ gg)zMA should be checked before B
Tie broken by tie_breaker, defaults to ``hash``
TF)rL   )rJ   rK   tie_breakers      r   edgerO   i   s3     !aq>KN22r   c                    [        [        [        U 5      5      n U  VVs/ s H!  o  H  n[        X5      (       d  M  X4PM     M#     nnn[	        [
        U5      nU  H  nXC;  d  M
  / X4'   M     UR                  5        VVVVs0 s H  u  pVXV VVs/ s H  u  pUPM	     snn_M     nnnnn[        U5      $ s  snnf s  snnf s  snnnnf )zxA sane ordering of signatures to check, first to last
Topological sort of edges as given by ``edge`` and ``supercedes``
)listmaptuplerO   r   r   r:   r   )
signaturesrJ   rK   edgesr(   r<   r=   s          r   r   r   v   s     c%,-J'JZAtAzVaVVZEJE5!E>EH  /4kkm<mdaQq!qtqq!!mE<U K
 "<s"   B6B6C
B<C
<C
N)corer   r   unification_toolsr   r   utilsr   r   variabler	   r   r7   rG   rH   rL   hashrO   r   r.   r   r   <module>r[      sI     - $ # #LJ .  $   	r   